aboutsummaryrefslogtreecommitdiff
path: root/datapath/linux/compat
diff options
context:
space:
mode:
authorPravin B Shelar <pshelar@nicira.com>2014-07-03 11:38:29 -0700
committerPravin B Shelar <pshelar@nicira.com>2014-07-11 09:52:50 -0700
commitc7d084d6a5dd09b125ae1794a44e7c59db1762f5 (patch)
tree6ad47a2a72dc1fd91bf6bf389e27e67262d4ae15 /datapath/linux/compat
parentff8eeabd0dfa967c161c1591daea826f0da23da6 (diff)
datapath: Enable tunnel GSO features.
Following patch enables all available tunnel GSO features for OVS bridge device so that ovs can use hardware offloads available to underling device. Signed-off-by: Pravin B Shelar <pshelar@nicira.com> Acked-by: Andy Zhou <azhou@nicira.com>
Diffstat (limited to 'datapath/linux/compat')
-rw-r--r--datapath/linux/compat/include/linux/netdev_features.h42
-rw-r--r--datapath/linux/compat/include/net/gre.h11
-rw-r--r--datapath/linux/compat/include/net/vxlan.h16
3 files changed, 69 insertions, 0 deletions
diff --git a/datapath/linux/compat/include/linux/netdev_features.h b/datapath/linux/compat/include/linux/netdev_features.h
index 0259413d9..9f6331d1c 100644
--- a/datapath/linux/compat/include/linux/netdev_features.h
+++ b/datapath/linux/compat/include/linux/netdev_features.h
@@ -9,4 +9,46 @@
#define NETIF_F_HW_VLAN_CTAG_TX NETIF_F_HW_VLAN_TX
#endif
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0)
+#define NETIF_F_GSO_ENCAP_ALL 0
+
+#else
+
+#ifndef NETIF_F_GSO_GRE
+#define NETIF_F_GSO_GRE 0
+#endif
+
+#ifndef NETIF_F_GSO_GRE_CSUM
+#define NETIF_F_GSO_GRE_CSUM 0
+#endif
+
+#ifndef NETIF_F_GSO_IPIP
+#define NETIF_F_GSO_IPIP 0
+#endif
+
+#ifndef NETIF_F_GSO_SIT
+#define NETIF_F_GSO_SIT 0
+#endif
+
+#ifndef NETIF_F_GSO_UDP_TUNNEL
+#define NETIF_F_GSO_UDP_TUNNEL 0
+#endif
+
+#ifndef NETIF_F_GSO_UDP_TUNNEL_CSUM
+#define NETIF_F_GSO_UDP_TUNNEL_CSUM 0
+#endif
+
+#ifndef NETIF_F_GSO_MPLS
+#define NETIF_F_GSO_MPLS 0
+#endif
+
+#define NETIF_F_GSO_ENCAP_ALL (NETIF_F_GSO_GRE | \
+ NETIF_F_GSO_GRE_CSUM | \
+ NETIF_F_GSO_IPIP | \
+ NETIF_F_GSO_SIT | \
+ NETIF_F_GSO_UDP_TUNNEL | \
+ NETIF_F_GSO_UDP_TUNNEL_CSUM | \
+ NETIF_F_GSO_MPLS)
+#endif
+
#endif
diff --git a/datapath/linux/compat/include/net/gre.h b/datapath/linux/compat/include/net/gre.h
index dc035353d..3c69e38e8 100644
--- a/datapath/linux/compat/include/net/gre.h
+++ b/datapath/linux/compat/include/net/gre.h
@@ -103,6 +103,17 @@ static inline int ip_gre_calc_hlen(__be16 o_flags)
addend += 4;
return addend;
}
+#else
+static inline struct sk_buff *rpl_gre_handle_offloads(struct sk_buff *skb,
+ bool gre_csum)
+{
+ if (skb->encapsulation && skb_is_gso(skb)) {
+ kfree_skb(skb);
+ return ERR_PTR(-ENOSYS);
+ }
+ return gre_handle_offloads(skb, gre_csum);
+}
+#define gre_handle_offloads rpl_gre_handle_offloads
#endif
#endif
diff --git a/datapath/linux/compat/include/net/vxlan.h b/datapath/linux/compat/include/net/vxlan.h
index 414a49703..d64630b45 100644
--- a/datapath/linux/compat/include/net/vxlan.h
+++ b/datapath/linux/compat/include/net/vxlan.h
@@ -8,6 +8,22 @@
#include <linux/version.h>
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)
#include_next <net/vxlan.h>
+
+static inline int rpl_vxlan_xmit_skb(struct vxlan_sock *vs,
+ struct rtable *rt, struct sk_buff *skb,
+ __be32 src, __be32 dst, __u8 tos, __u8 ttl, __be16 df,
+ __be16 src_port, __be16 dst_port, __be32 vni)
+{
+ if (skb->encapsulation && skb_is_gso(skb)) {
+ kfree_skb(skb);
+ return -ENOSYS;
+ }
+
+ return vxlan_xmit_skb(vs, rt, skb, src, dst, tos, ttl, df,
+ src_port, dst_port, vni);
+}
+
+#define vxlan_xmit_skb rpl_vxlan_xmit_skb
#else
struct vxlan_sock;