diff options
author | Pravin B Shelar <pshelar@nicira.com> | 2014-07-03 11:38:29 -0700 |
---|---|---|
committer | Pravin B Shelar <pshelar@nicira.com> | 2014-07-11 09:52:50 -0700 |
commit | c7d084d6a5dd09b125ae1794a44e7c59db1762f5 (patch) | |
tree | 6ad47a2a72dc1fd91bf6bf389e27e67262d4ae15 /datapath/linux/compat | |
parent | ff8eeabd0dfa967c161c1591daea826f0da23da6 (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.h | 42 | ||||
-rw-r--r-- | datapath/linux/compat/include/net/gre.h | 11 | ||||
-rw-r--r-- | datapath/linux/compat/include/net/vxlan.h | 16 |
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; |