Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ef59febe authored by stephen hemminger's avatar stephen hemminger Committed by David S. Miller
Browse files

vxlan: minor output refactoring



Move code to find destination to a small function.

Signed-off-by: default avatarStephen Hemminger <shemminger@vyatta.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 2a5cf801
Loading
Loading
Loading
Loading
+20 −11
Original line number Diff line number Diff line
@@ -621,6 +621,22 @@ static inline u8 vxlan_ecn_encap(u8 tos,
	return INET_ECN_encapsulate(tos, inner);
}

static __be32 vxlan_find_dst(struct vxlan_dev *vxlan, struct sk_buff *skb)
{
	const struct ethhdr *eth = (struct ethhdr *) skb->data;
	const struct vxlan_fdb *f;

	if (is_multicast_ether_addr(eth->h_dest))
		return vxlan->gaddr;

	f = vxlan_find_mac(vxlan, eth->h_dest);
	if (f)
		return f->remote_ip;
	else
		return vxlan->gaddr;

}

/* Transmit local packets over Vxlan
 *
 * Outer IP header inherits ECN and DF from inner header.
@@ -632,13 +648,11 @@ static netdev_tx_t vxlan_xmit(struct sk_buff *skb, struct net_device *dev)
{
	struct vxlan_dev *vxlan = netdev_priv(dev);
	struct rtable *rt;
	const struct ethhdr *eth;
	const struct iphdr *old_iph;
	struct iphdr *iph;
	struct vxlanhdr *vxh;
	struct udphdr *uh;
	struct flowi4 fl4;
	struct vxlan_fdb *f;
	unsigned int pkt_len = skb->len;
	u32 hash;
	__be32 dst;
@@ -646,21 +660,16 @@ static netdev_tx_t vxlan_xmit(struct sk_buff *skb, struct net_device *dev)
	__u8 tos, ttl;
	int err;

	dst = vxlan_find_dst(vxlan, skb);
	if (!dst)
		goto drop;

	/* Need space for new headers (invalidates iph ptr) */
	if (skb_cow_head(skb, VXLAN_HEADROOM))
		goto drop;

	eth = (void *)skb->data;
	old_iph = ip_hdr(skb);

	if (!is_multicast_ether_addr(eth->h_dest) &&
	    (f = vxlan_find_mac(vxlan, eth->h_dest)))
		dst = f->remote_ip;
	else if (vxlan->gaddr) {
		dst = vxlan->gaddr;
	} else
		goto drop;

	ttl = vxlan->ttl;
	if (!ttl && IN_MULTICAST(ntohl(dst)))
		ttl = 1;