aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/vxlan.c
diff options
context:
space:
mode:
authorOr Gerlitz <ogerlitz@mellanox.com>2014-01-23 04:28:13 -0500
committerDavid S. Miller <davem@davemloft.net>2014-01-23 16:30:03 -0500
commitd0bc65557ad09a57b4db176e9e3ccddb26971453 (patch)
tree9e62525b9d5c8e57e664a8a3f80ca8b192f18840 /drivers/net/vxlan.c
parent28f39ef6d802d2a5840582efecbf3c729b290e64 (diff)
net/vxlan: Share RX skb de-marking and checksum checks with ovs
Make sure the practice set by commit 0afb166 "vxlan: Add capability of Rx checksum offload for inner packet" is applied when the skb goes through the portion of the RX code which is shared between vxlan netdevices and ovs vxlan port instances. Cc: Joseph Gasparakis <joseph.gasparakis@intel.com> Cc: Pravin B Shelar <pshelar@nicira.com> Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/vxlan.c')
-rw-r--r--drivers/net/vxlan.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
index e1bc9252e3f4..026a313c2d2d 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
@@ -1159,6 +1159,16 @@ static int vxlan_udp_encap_recv(struct sock *sk, struct sk_buff *skb)
1159 if (!vs) 1159 if (!vs)
1160 goto drop; 1160 goto drop;
1161 1161
1162 /* If the NIC driver gave us an encapsulated packet
1163 * with the encapsulation mark, the device checksummed it
1164 * for us. Otherwise force the upper layers to verify it.
1165 */
1166 if ((skb->ip_summed != CHECKSUM_UNNECESSARY && skb->ip_summed != CHECKSUM_PARTIAL) ||
1167 !skb->encapsulation)
1168 skb->ip_summed = CHECKSUM_NONE;
1169
1170 skb->encapsulation = 0;
1171
1162 vs->rcv(vs, skb, vxh->vx_vni); 1172 vs->rcv(vs, skb, vxh->vx_vni);
1163 return 0; 1173 return 0;
1164 1174
@@ -1217,17 +1227,6 @@ static void vxlan_rcv(struct vxlan_sock *vs,
1217 1227
1218 skb_reset_network_header(skb); 1228 skb_reset_network_header(skb);
1219 1229
1220 /* If the NIC driver gave us an encapsulated packet with
1221 * CHECKSUM_UNNECESSARY and Rx checksum feature is enabled,
1222 * leave the CHECKSUM_UNNECESSARY, the device checksummed it
1223 * for us. Otherwise force the upper layers to verify it.
1224 */
1225 if ((skb->ip_summed != CHECKSUM_UNNECESSARY && skb->ip_summed != CHECKSUM_PARTIAL) ||
1226 !skb->encapsulation || !(vxlan->dev->features & NETIF_F_RXCSUM))
1227 skb->ip_summed = CHECKSUM_NONE;
1228
1229 skb->encapsulation = 0;
1230
1231 if (oip6) 1230 if (oip6)
1232 err = IP6_ECN_decapsulate(oip6, skb); 1231 err = IP6_ECN_decapsulate(oip6, skb);
1233 if (oip) 1232 if (oip)