Commit b5c5f8d0 authored by Jakub Kicinski's avatar Jakub Kicinski Committed by David S. Miller

xgbe: switch to more generic VxLAN detection

Instead of looping though the list of ports just check
if the geometry of the packet is correct for VxLAN.
HW most likely doesn't care about the exact port, anyway,
since only first port is actually offloaded, and this way
we won't have to maintain the port list at all.
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8f0545d2
...@@ -1773,13 +1773,8 @@ static int xgbe_prep_tso(struct sk_buff *skb, struct xgbe_packet_data *packet) ...@@ -1773,13 +1773,8 @@ static int xgbe_prep_tso(struct sk_buff *skb, struct xgbe_packet_data *packet)
return 0; return 0;
} }
static bool xgbe_is_vxlan(struct xgbe_prv_data *pdata, struct sk_buff *skb) static bool xgbe_is_vxlan(struct sk_buff *skb)
{ {
struct xgbe_vxlan_data *vdata;
if (pdata->vxlan_force_disable)
return false;
if (!skb->encapsulation) if (!skb->encapsulation)
return false; return false;
...@@ -1801,19 +1796,13 @@ static bool xgbe_is_vxlan(struct xgbe_prv_data *pdata, struct sk_buff *skb) ...@@ -1801,19 +1796,13 @@ static bool xgbe_is_vxlan(struct xgbe_prv_data *pdata, struct sk_buff *skb)
return false; return false;
} }
/* See if we have the UDP port in our list */ if (skb->inner_protocol_type != ENCAP_TYPE_ETHER ||
list_for_each_entry(vdata, &pdata->vxlan_ports, list) { skb->inner_protocol != htons(ETH_P_TEB) ||
if ((skb->protocol == htons(ETH_P_IP)) && (skb_inner_mac_header(skb) - skb_transport_header(skb) !=
(vdata->sa_family == AF_INET) && sizeof(struct udphdr) + sizeof(struct vxlanhdr)))
(vdata->port == udp_hdr(skb)->dest))
return true;
else if ((skb->protocol == htons(ETH_P_IPV6)) &&
(vdata->sa_family == AF_INET6) &&
(vdata->port == udp_hdr(skb)->dest))
return true;
}
return false; return false;
return true;
} }
static int xgbe_is_tso(struct sk_buff *skb) static int xgbe_is_tso(struct sk_buff *skb)
...@@ -1864,7 +1853,7 @@ static void xgbe_packet_info(struct xgbe_prv_data *pdata, ...@@ -1864,7 +1853,7 @@ static void xgbe_packet_info(struct xgbe_prv_data *pdata,
XGMAC_SET_BITS(packet->attributes, TX_PACKET_ATTRIBUTES, XGMAC_SET_BITS(packet->attributes, TX_PACKET_ATTRIBUTES,
CSUM_ENABLE, 1); CSUM_ENABLE, 1);
if (xgbe_is_vxlan(pdata, skb)) if (xgbe_is_vxlan(skb))
XGMAC_SET_BITS(packet->attributes, TX_PACKET_ATTRIBUTES, XGMAC_SET_BITS(packet->attributes, TX_PACKET_ATTRIBUTES,
VXLAN, 1); VXLAN, 1);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment