Message ID | 1442340563-40106-1-git-send-email-pshelar@nicira.com |
---|---|
State | Accepted |
Headers | show |
On Tue, Sep 15, 2015 at 11:09 AM, Pravin B Shelar <pshelar@nicira.com> wrote: > From: Joe Stringer <joestringer@nicira.com> > > Signed-off-by: Joe Stringer <joestringer@nicira.com> > Signed-off-by: Pravin B Shelar <pshelar@nicira.com> At a first glance, it looks like there are a few commits in 4.1 that aren't represented here: netlink: implement nla_put_in_addr and nla_put_in6_addr netlink: implement nla_get_in_addr and nla_get_in6_addr openvswitch: disable LRO > diff --git a/.travis.yml b/.travis.yml > index d14f786..f4b9188 100644 > --- a/.travis.yml > +++ b/.travis.yml > @@ -12,7 +12,8 @@ env: > - TESTSUITE=1 KERNEL=3.18.1 > - TESTSUITE=1 OPTS="--enable-shared" > - BUILD_ENV="-m32" OPTS="--disable-ssl" > - - KERNEL=4.0.2 > + - KERNEL=4.1.6 > + - KERNEL=4.0.9 Is there a reason to have both 4.0 and 4.1 tested? > diff --git a/datapath/datapath.h b/datapath/datapath.h > index 526ddad..aca9407 100644 > --- a/datapath/datapath.h > +++ b/datapath/datapath.h > static inline struct net *ovs_dp_get_net(const struct datapath *dp) > { > - return read_pnet(&dp->net); > + return rpl_read_pnet(&dp->net); > } > > static inline void ovs_dp_set_net(struct datapath *dp, struct net *net) > { > - write_pnet(&dp->net, net); > + rpl_write_pnet(&dp->net, net); > } Can we use macros here so we don't need to call the rpl_ versions directly?
On Wed, Sep 16, 2015 at 2:43 PM, Jesse Gross <jesse@nicira.com> wrote: > On Tue, Sep 15, 2015 at 11:09 AM, Pravin B Shelar <pshelar@nicira.com> wrote: >> From: Joe Stringer <joestringer@nicira.com> >> >> Signed-off-by: Joe Stringer <joestringer@nicira.com> >> Signed-off-by: Pravin B Shelar <pshelar@nicira.com> > > At a first glance, it looks like there are a few commits in 4.1 that > aren't represented here: > netlink: implement nla_put_in_addr and nla_put_in6_addr > netlink: implement nla_get_in_addr and nla_get_in6_addr > openvswitch: disable LRO Never mind on these, I see now they have gone in independently.
On Wed, Sep 16, 2015 at 2:43 PM, Jesse Gross <jesse@nicira.com> wrote: > On Tue, Sep 15, 2015 at 11:09 AM, Pravin B Shelar <pshelar@nicira.com> wrote: >> From: Joe Stringer <joestringer@nicira.com> >> >> Signed-off-by: Joe Stringer <joestringer@nicira.com> >> Signed-off-by: Pravin B Shelar <pshelar@nicira.com> > > At a first glance, it looks like there are a few commits in 4.1 that > aren't represented here: > netlink: implement nla_put_in_addr and nla_put_in6_addr > netlink: implement nla_get_in_addr and nla_get_in6_addr > openvswitch: disable LRO > >> diff --git a/.travis.yml b/.travis.yml >> index d14f786..f4b9188 100644 >> --- a/.travis.yml >> +++ b/.travis.yml >> @@ -12,7 +12,8 @@ env: >> - TESTSUITE=1 KERNEL=3.18.1 >> - TESTSUITE=1 OPTS="--enable-shared" >> - BUILD_ENV="-m32" OPTS="--disable-ssl" >> - - KERNEL=4.0.2 >> + - KERNEL=4.1.6 >> + - KERNEL=4.0.9 > > Is there a reason to have both 4.0 and 4.1 tested? > right, I have removed it in next patch. >> diff --git a/datapath/datapath.h b/datapath/datapath.h >> index 526ddad..aca9407 100644 >> --- a/datapath/datapath.h >> +++ b/datapath/datapath.h >> static inline struct net *ovs_dp_get_net(const struct datapath *dp) >> { >> - return read_pnet(&dp->net); >> + return rpl_read_pnet(&dp->net); >> } >> >> static inline void ovs_dp_set_net(struct datapath *dp, struct net *net) >> { >> - write_pnet(&dp->net, net); >> + rpl_write_pnet(&dp->net, net); >> } > > Can we use macros here so we don't need to call the rpl_ versions directly? If I use the macro then it causes compilation issue in older linux header that calls write_pnet(),read_pnet() due to undefined struct possible_net_t. I can move these definitions to compat.h file to make it clear.
On Thu, Sep 17, 2015 at 11:49 AM, Pravin Shelar <pshelar@nicira.com> wrote: > On Wed, Sep 16, 2015 at 2:43 PM, Jesse Gross <jesse@nicira.com> wrote: >> On Tue, Sep 15, 2015 at 11:09 AM, Pravin B Shelar <pshelar@nicira.com> wrote: >>> diff --git a/.travis.yml b/.travis.yml >>> index d14f786..f4b9188 100644 >>> --- a/.travis.yml >>> +++ b/.travis.yml >>> @@ -12,7 +12,8 @@ env: >>> - TESTSUITE=1 KERNEL=3.18.1 >>> - TESTSUITE=1 OPTS="--enable-shared" >>> - BUILD_ENV="-m32" OPTS="--disable-ssl" >>> - - KERNEL=4.0.2 >>> + - KERNEL=4.1.6 >>> + - KERNEL=4.0.9 >> >> Is there a reason to have both 4.0 and 4.1 tested? >> > right, I have removed it in next patch. But then the next patch adds 4.2 and keeps 4.1. I guess the larger point is, is there a reason to do test builds on each of these point releases or just do we only need the latest one? >>> diff --git a/datapath/datapath.h b/datapath/datapath.h >>> index 526ddad..aca9407 100644 >>> --- a/datapath/datapath.h >>> +++ b/datapath/datapath.h >>> static inline struct net *ovs_dp_get_net(const struct datapath *dp) >>> { >>> - return read_pnet(&dp->net); >>> + return rpl_read_pnet(&dp->net); >>> } >>> >>> static inline void ovs_dp_set_net(struct datapath *dp, struct net *net) >>> { >>> - write_pnet(&dp->net, net); >>> + rpl_write_pnet(&dp->net, net); >>> } >> >> Can we use macros here so we don't need to call the rpl_ versions directly? > > If I use the macro then it causes compilation issue in older linux > header that calls write_pnet(),read_pnet() due to undefined struct > possible_net_t. I can move these definitions to compat.h file to make > it clear. OK. In that case, I would just keep it as it is - I'm not sure that it makes it clearer to have it in compat.h since it really is a backported function. Either way is fine though.
On Thu, Sep 17, 2015 at 1:12 PM, Jesse Gross <jesse@nicira.com> wrote: > On Thu, Sep 17, 2015 at 11:49 AM, Pravin Shelar <pshelar@nicira.com> wrote: >> On Wed, Sep 16, 2015 at 2:43 PM, Jesse Gross <jesse@nicira.com> wrote: >>> On Tue, Sep 15, 2015 at 11:09 AM, Pravin B Shelar <pshelar@nicira.com> wrote: >>>> diff --git a/.travis.yml b/.travis.yml >>>> index d14f786..f4b9188 100644 >>>> --- a/.travis.yml >>>> +++ b/.travis.yml >>>> @@ -12,7 +12,8 @@ env: >>>> - TESTSUITE=1 KERNEL=3.18.1 >>>> - TESTSUITE=1 OPTS="--enable-shared" >>>> - BUILD_ENV="-m32" OPTS="--disable-ssl" >>>> - - KERNEL=4.0.2 >>>> + - KERNEL=4.1.6 >>>> + - KERNEL=4.0.9 >>> >>> Is there a reason to have both 4.0 and 4.1 tested? >>> >> right, I have removed it in next patch. > > But then the next patch adds 4.2 and keeps 4.1. I guess the larger > point is, is there a reason to do test builds on each of these point > releases or just do we only need the latest one? > I just wanted to keep it consistent with kernel versions listed on kernel.org. Those kernel most likely change and therefore needs to be compiled for. >>>> diff --git a/datapath/datapath.h b/datapath/datapath.h >>>> index 526ddad..aca9407 100644 >>>> --- a/datapath/datapath.h >>>> +++ b/datapath/datapath.h >>>> static inline struct net *ovs_dp_get_net(const struct datapath *dp) >>>> { >>>> - return read_pnet(&dp->net); >>>> + return rpl_read_pnet(&dp->net); >>>> } >>>> >>>> static inline void ovs_dp_set_net(struct datapath *dp, struct net *net) >>>> { >>>> - write_pnet(&dp->net, net); >>>> + rpl_write_pnet(&dp->net, net); >>>> } >>> >>> Can we use macros here so we don't need to call the rpl_ versions directly? >> >> If I use the macro then it causes compilation issue in older linux >> header that calls write_pnet(),read_pnet() due to undefined struct >> possible_net_t. I can move these definitions to compat.h file to make >> it clear. > > OK. In that case, I would just keep it as it is - I'm not sure that it > makes it clearer to have it in compat.h since it really is a > backported function. Either way is fine though. ok. I will keep it as it is.
On Thu, Sep 17, 2015 at 1:22 PM, Pravin Shelar <pshelar@nicira.com> wrote: > On Thu, Sep 17, 2015 at 1:12 PM, Jesse Gross <jesse@nicira.com> wrote: >> On Thu, Sep 17, 2015 at 11:49 AM, Pravin Shelar <pshelar@nicira.com> wrote: >>> On Wed, Sep 16, 2015 at 2:43 PM, Jesse Gross <jesse@nicira.com> wrote: >>>> On Tue, Sep 15, 2015 at 11:09 AM, Pravin B Shelar <pshelar@nicira.com> wrote: >>>>> diff --git a/.travis.yml b/.travis.yml >>>>> index d14f786..f4b9188 100644 >>>>> --- a/.travis.yml >>>>> +++ b/.travis.yml >>>>> @@ -12,7 +12,8 @@ env: >>>>> - TESTSUITE=1 KERNEL=3.18.1 >>>>> - TESTSUITE=1 OPTS="--enable-shared" >>>>> - BUILD_ENV="-m32" OPTS="--disable-ssl" >>>>> - - KERNEL=4.0.2 >>>>> + - KERNEL=4.1.6 >>>>> + - KERNEL=4.0.9 >>>> >>>> Is there a reason to have both 4.0 and 4.1 tested? >>>> >>> right, I have removed it in next patch. >> >> But then the next patch adds 4.2 and keeps 4.1. I guess the larger >> point is, is there a reason to do test builds on each of these point >> releases or just do we only need the latest one? >> > I just wanted to keep it consistent with kernel versions listed on > kernel.org. Those kernel most likely change and therefore needs to be > compiled for. OK, that's fine. I just wanted to make sure there was a reason. I think that means that all of my concerns were addressed without changes to this patch: Acked-by: Jesse Gross <jesse@nicira.com>
On Thu, Sep 17, 2015 at 5:44 PM, Jesse Gross <jesse@nicira.com> wrote: > On Thu, Sep 17, 2015 at 1:22 PM, Pravin Shelar <pshelar@nicira.com> wrote: >> On Thu, Sep 17, 2015 at 1:12 PM, Jesse Gross <jesse@nicira.com> wrote: >>> On Thu, Sep 17, 2015 at 11:49 AM, Pravin Shelar <pshelar@nicira.com> wrote: >>>> On Wed, Sep 16, 2015 at 2:43 PM, Jesse Gross <jesse@nicira.com> wrote: >>>>> On Tue, Sep 15, 2015 at 11:09 AM, Pravin B Shelar <pshelar@nicira.com> wrote: >>>>>> diff --git a/.travis.yml b/.travis.yml >>>>>> index d14f786..f4b9188 100644 >>>>>> --- a/.travis.yml >>>>>> +++ b/.travis.yml >>>>>> @@ -12,7 +12,8 @@ env: >>>>>> - TESTSUITE=1 KERNEL=3.18.1 >>>>>> - TESTSUITE=1 OPTS="--enable-shared" >>>>>> - BUILD_ENV="-m32" OPTS="--disable-ssl" >>>>>> - - KERNEL=4.0.2 >>>>>> + - KERNEL=4.1.6 >>>>>> + - KERNEL=4.0.9 >>>>> >>>>> Is there a reason to have both 4.0 and 4.1 tested? >>>>> >>>> right, I have removed it in next patch. >>> >>> But then the next patch adds 4.2 and keeps 4.1. I guess the larger >>> point is, is there a reason to do test builds on each of these point >>> releases or just do we only need the latest one? >>> >> I just wanted to keep it consistent with kernel versions listed on >> kernel.org. Those kernel most likely change and therefore needs to be >> compiled for. > > OK, that's fine. I just wanted to make sure there was a reason. > > I think that means that all of my concerns were addressed without > changes to this patch: > Acked-by: Jesse Gross <jesse@nicira.com> Thanks. I pushed patch to master.
On 9/15/15 2:09 PM, Pravin B Shelar wrote: > From: Joe Stringer <joestringer@nicira.com> > > Signed-off-by: Joe Stringer <joestringer@nicira.com> > Signed-off-by: Pravin B Shelar <pshelar@nicira.com> > --- > .travis.yml | 3 +- > FAQ.md | 1 + > acinclude.m4 | 4 +- > datapath/datapath.c | 4 +-- > datapath/datapath.h | 9 +++---- > datapath/flow.c | 4 ++- > datapath/linux/compat/geneve.c | 2 +- > datapath/linux/compat/include/net/net_namespace.h | 27 +++++++++++++++++++++ > datapath/linux/compat/include/net/udp_tunnel.h | 15 +++++++++++- > datapath/linux/compat/include/net/vxlan.h | 14 ++++++---- > datapath/linux/compat/stt.c | 16 +++++++----- > datapath/linux/compat/udp_tunnel.c | 10 ++++---- > datapath/linux/compat/vxlan.c | 7 ++--- > datapath/vport-lisp.c | 3 +- > datapath/vport-vxlan.c | 2 +- Pravin, when will the changes for contrak support that were merged into upstream net-next be backported to OVS? I don't see them in this patch. > 15 files changed, 83 insertions(+), 38 deletions(-) > > diff --git a/.travis.yml b/.travis.yml > index d14f786..f4b9188 100644 > --- a/.travis.yml > +++ b/.travis.yml > @@ -12,7 +12,8 @@ env: > - TESTSUITE=1 KERNEL=3.18.1 > - TESTSUITE=1 OPTS="--enable-shared" > - BUILD_ENV="-m32" OPTS="--disable-ssl" > - - KERNEL=4.0.2 > + - KERNEL=4.1.6 > + - KERNEL=4.0.9 > - KERNEL=3.17.7 DPDK=1 > - KERNEL=3.17.7 DPDK=1 OPTS="--enable-shared" > - KERNEL=3.17.7 > diff --git a/FAQ.md b/FAQ.md > index 631f6a4..cea517d 100644 > --- a/FAQ.md > +++ b/FAQ.md > @@ -156,6 +156,7 @@ A: The following table lists the Linux kernel versions against which the > | 2.1.x | 2.6.32 to 3.11 > | 2.3.x | 2.6.32 to 3.14 > | 2.4.x | 2.6.32 to 4.0 > +| 2.5.x | 2.6.32 to 4.1 > > Open vSwitch userspace should also work with the Linux kernel module > built into Linux 3.3 and later. > diff --git a/acinclude.m4 b/acinclude.m4 > index b755dc4..229f900 100644 > --- a/acinclude.m4 > +++ b/acinclude.m4 > @@ -134,10 +134,10 @@ AC_DEFUN([OVS_CHECK_LINUX], [ > AC_MSG_RESULT([$kversion]) > > if test "$version" -ge 4; then > - if test "$version" = 4 && test "$patchlevel" -le 0; then > + if test "$version" = 4 && test "$patchlevel" -le 1; then > : # Linux 4.x > else > - AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version newer than 4.0.x is not supported (please refer to the FAQ for advice)]) > + AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version newer than 4.1.x is not supported (please refer to the FAQ for advice)]) > fi > elif test "$version" = 3; then > : # Linux 3.x > diff --git a/datapath/datapath.c b/datapath/datapath.c > index 73c0b4a..1115649 100644 > --- a/datapath/datapath.c > +++ b/datapath/datapath.c > @@ -205,7 +205,6 @@ static void destroy_dp_rcu(struct rcu_head *rcu) > > ovs_flow_tbl_destroy(&dp->table); > free_percpu(dp->stats_percpu); > - release_net(ovs_dp_get_net(dp)); > kfree(dp->ports); > kfree(dp); > } > @@ -1527,7 +1526,7 @@ static int ovs_dp_cmd_new(struct sk_buff *skb, struct genl_info *info) > if (dp == NULL) > goto err_free_reply; > > - ovs_dp_set_net(dp, hold_net(sock_net(skb->sk))); > + ovs_dp_set_net(dp, sock_net(skb->sk)); > > /* Allocate table. */ > err = ovs_flow_tbl_init(&dp->table); > @@ -1601,7 +1600,6 @@ err_destroy_percpu: > err_destroy_table: > ovs_flow_tbl_destroy(&dp->table); > err_free_dp: > - release_net(ovs_dp_get_net(dp)); > kfree(dp); > err_free_reply: > kfree_skb(reply); > diff --git a/datapath/datapath.h b/datapath/datapath.h > index 526ddad..aca9407 100644 > --- a/datapath/datapath.h > +++ b/datapath/datapath.h > @@ -25,6 +25,7 @@ > #include <linux/netdevice.h> > #include <linux/skbuff.h> > #include <linux/u64_stats_sync.h> > +#include <net/net_namespace.h> > > #include "compat.h" > #include "flow.h" > @@ -86,10 +87,8 @@ struct datapath { > /* Stats. */ > struct dp_stats_percpu __percpu *stats_percpu; > > -#ifdef CONFIG_NET_NS > /* Network namespace ref. */ > - struct net *net; > -#endif > + possible_net_t net; > > u32 user_features; > }; > @@ -156,12 +155,12 @@ int lockdep_ovsl_is_held(void); > > static inline struct net *ovs_dp_get_net(const struct datapath *dp) > { > - return read_pnet(&dp->net); > + return rpl_read_pnet(&dp->net); > } > > static inline void ovs_dp_set_net(struct datapath *dp, struct net *net) > { > - write_pnet(&dp->net, net); > + rpl_write_pnet(&dp->net, net); > } > > struct vport *ovs_lookup_vport(const struct datapath *dp, u16 port_no); > diff --git a/datapath/flow.c b/datapath/flow.c > index a7a2063..8ef60d1 100644 > --- a/datapath/flow.c > +++ b/datapath/flow.c > @@ -101,7 +101,9 @@ void ovs_flow_stats_update(struct sw_flow *flow, __be16 tcp_flags, > > new_stats = > kmem_cache_alloc_node(flow_stats_cache, > - GFP_THISNODE | > + GFP_NOWAIT | > + __GFP_THISNODE | > + __GFP_NOWARN | > __GFP_NOMEMALLOC, > node); > if (likely(new_stats)) { > diff --git a/datapath/linux/compat/geneve.c b/datapath/linux/compat/geneve.c > index 78d3395..8e80180 100644 > --- a/datapath/linux/compat/geneve.c > +++ b/datapath/linux/compat/geneve.c > @@ -117,7 +117,7 @@ int rpl_geneve_xmit_skb(struct geneve_sock *gs, struct rtable *rt, > > ovs_skb_set_inner_protocol(skb, htons(ETH_P_TEB)); > > - return udp_tunnel_xmit_skb(rt, skb, src, dst, > + return udp_tunnel_xmit_skb(rt, gs->sock->sk, skb, src, dst, > tos, ttl, df, src_port, dst_port, xnet, > !csum); > } > diff --git a/datapath/linux/compat/include/net/net_namespace.h b/datapath/linux/compat/include/net/net_namespace.h > index b7dbfe3..edfa131 100644 > --- a/datapath/linux/compat/include/net/net_namespace.h > +++ b/datapath/linux/compat/include/net/net_namespace.h > @@ -51,4 +51,31 @@ static void rpl_unregister_pernet_gen_##TYPE(struct rpl_pernet_operations *rpl_p > #define DEFINE_COMPAT_PNET_REG_FUNC(TYPE) > #endif /* 2.6.33 */ > > +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,1,0) > +typedef struct { > +#ifdef CONFIG_NET_NS > + struct net *net; > +#endif > +} possible_net_t; > + > +static inline void rpl_write_pnet(possible_net_t *pnet, struct net *net) > +{ > +#ifdef CONFIG_NET_NS > + pnet->net = net; > +#endif > +} > + > +static inline struct net *rpl_read_pnet(const possible_net_t *pnet) > +{ > +#ifdef CONFIG_NET_NS > + return pnet->net; > +#else > + return &init_net; > +#endif > +} > +#else /* Linux >= 4.1 */ > +#define rpl_read_pnet read_pnet > +#define rpl_write_pnet write_pnet > +#endif /* Linux >= 4.1 */ > + > #endif /* net/net_namespace.h wrapper */ > diff --git a/datapath/linux/compat/include/net/udp_tunnel.h b/datapath/linux/compat/include/net/udp_tunnel.h > index 81cb3df..d334746 100644 > --- a/datapath/linux/compat/include/net/udp_tunnel.h > +++ b/datapath/linux/compat/include/net/udp_tunnel.h > @@ -19,6 +19,18 @@ rpl_udp_tunnel_handle_offloads(struct sk_buff *skb, bool udp_csum, > } > #define udp_tunnel_handle_offloads rpl_udp_tunnel_handle_offloads > > +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,1,0) > +static inline int rpl_udp_tunnel_xmit_skb(struct rtable *rt, > + struct sock *sk, struct sk_buff *skb, > + __be32 src, __be32 dst, __u8 tos, __u8 ttl, > + __be16 df, __be16 src_port, __be16 dst_port, > + bool xnet, bool nocheck) > +{ > + return udp_tunnel_xmit_skb(rt, skb, src, dst, tos, ttl, df, src_port, > + dst_port, xnet, nocheck); > +} > +#define udp_tunnel_xmit_skb rpl_udp_tunnel_xmit_skb > +#endif > #else > > #include <net/ip_tunnels.h> > @@ -71,7 +83,8 @@ void rpl_setup_udp_tunnel_sock(struct net *net, struct socket *sock, > > /* Transmit the skb using UDP encapsulation. */ > #define udp_tunnel_xmit_skb rpl_udp_tunnel_xmit_skb > -int rpl_udp_tunnel_xmit_skb(struct rtable *rt, struct sk_buff *skb, > +int rpl_udp_tunnel_xmit_skb(struct rtable *rt, > + struct sock *sk, struct sk_buff *skb, > __be32 src, __be32 dst, __u8 tos, __u8 ttl, > __be16 df, __be16 src_port, __be16 dst_port, > bool xnet, bool nocheck); > diff --git a/datapath/linux/compat/include/net/vxlan.h b/datapath/linux/compat/include/net/vxlan.h > index 0d60c18..cafff79 100644 > --- a/datapath/linux/compat/include/net/vxlan.h > +++ b/datapath/linux/compat/include/net/vxlan.h > @@ -88,10 +88,9 @@ struct vxlanhdr_gbp { > #endif > > #ifdef USE_UPSTREAM_VXLAN > -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, > +static inline int rpl_vxlan_xmit_skb(struct rtable *rt, struct sock *sk, > + struct sk_buff *skb, __be32 src, __be32 dst, __u8 tos, > + __u8 ttl, __be16 df, __be16 src_port, __be16 dst_port, > struct vxlan_metadata *md, bool xnet, u32 vxflags) > { > if (skb_is_gso(skb) && skb_is_encapsulated(skb)) { > @@ -99,7 +98,11 @@ static inline int rpl_vxlan_xmit_skb(struct vxlan_sock *vs, > return -ENOSYS; > } > > +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,1,0) > return vxlan_xmit_skb(rt, skb, src, dst, tos, ttl, df, > +#else > + return vxlan_xmit_skb(rt, sk, skb, src, dst, tos, ttl, df, > +#endif > src_port, dst_port, md, xnet, vxflags); > } > > @@ -138,8 +141,7 @@ struct vxlan_sock *rpl_vxlan_sock_add(struct net *net, __be16 port, > void rpl_vxlan_sock_release(struct vxlan_sock *vs); > > #define vxlan_xmit_skb rpl_vxlan_xmit_skb > -int rpl_vxlan_xmit_skb(struct vxlan_sock *vs, > - struct rtable *rt, struct sk_buff *skb, > +int rpl_vxlan_xmit_skb(struct rtable *rt, struct sock *sk, struct sk_buff *skb, > __be32 src, __be32 dst, __u8 tos, __u8 ttl, __be16 df, > __be16 src_port, __be16 dst_port, > struct vxlan_metadata *md, bool xnet, u32 vxflags); > diff --git a/datapath/linux/compat/stt.c b/datapath/linux/compat/stt.c > index dd21753..e27cedf 100644 > --- a/datapath/linux/compat/stt.c > +++ b/datapath/linux/compat/stt.c > @@ -1320,16 +1320,18 @@ static void clean_percpu(struct work_struct *work) > } > > #ifdef HAVE_NF_HOOKFN_ARG_OPS > -#define FIRST_PARAM const struct nf_hook_ops *ops, > +#define FIRST_PARAM const struct nf_hook_ops *ops > #else > -#define FIRST_PARAM unsigned int hooknum, > +#define FIRST_PARAM unsigned int hooknum > #endif > > -static unsigned int nf_ip_hook(FIRST_PARAM > - struct sk_buff *skb, > - const struct net_device *in, > - const struct net_device *out, > - int (*okfn)(struct sk_buff *)) > +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0) > +#define LAST_PARAM const struct nf_hook_state *state > +#else > +#define LAST_PARAM const struct net_device *in, const struct net_device *out, int (*okfn)(struct sk_buff *) > +#endif > + > +static unsigned int nf_ip_hook(FIRST_PARAM, struct sk_buff *skb, LAST_PARAM) > { > struct stt_sock *stt_sock; > int ip_hdr_len; > diff --git a/datapath/linux/compat/udp_tunnel.c b/datapath/linux/compat/udp_tunnel.c > index c84113b..680fd83 100644 > --- a/datapath/linux/compat/udp_tunnel.c > +++ b/datapath/linux/compat/udp_tunnel.c > @@ -142,10 +142,10 @@ void ovs_udp_csum_gso(struct sk_buff *skb) > } > EXPORT_SYMBOL_GPL(ovs_udp_csum_gso); > > -int rpl_udp_tunnel_xmit_skb(struct rtable *rt, struct sk_buff *skb, > - __be32 src, __be32 dst, __u8 tos, __u8 ttl, > - __be16 df, __be16 src_port, __be16 dst_port, > - bool xnet, bool nocheck) > +int rpl_udp_tunnel_xmit_skb(struct rtable *rt, struct sock *sk, > + struct sk_buff *skb, __be32 src, __be32 dst, > + __u8 tos, __u8 ttl, __be16 df, __be16 src_port, > + __be16 dst_port, bool xnet, bool nocheck) > { > struct udphdr *uh; > > @@ -159,7 +159,7 @@ int rpl_udp_tunnel_xmit_skb(struct rtable *rt, struct sk_buff *skb, > > udp_set_csum(nocheck, skb, src, dst, skb->len); > > - return iptunnel_xmit(skb->sk, rt, skb, src, dst, IPPROTO_UDP, > + return iptunnel_xmit(sk, rt, skb, src, dst, IPPROTO_UDP, > tos, ttl, df, xnet); > } > EXPORT_SYMBOL_GPL(rpl_udp_tunnel_xmit_skb); > diff --git a/datapath/linux/compat/vxlan.c b/datapath/linux/compat/vxlan.c > index 129f171..fd454ae 100644 > --- a/datapath/linux/compat/vxlan.c > +++ b/datapath/linux/compat/vxlan.c > @@ -180,8 +180,7 @@ static void vxlan_build_gbp_hdr(struct vxlanhdr *vxh, u32 vxflags, > gbp->policy_id = htons(md->gbp & VXLAN_GBP_ID_MASK); > } > > -int rpl_vxlan_xmit_skb(struct vxlan_sock *vs, > - struct rtable *rt, struct sk_buff *skb, > +int rpl_vxlan_xmit_skb(struct rtable *rt, struct sock *sk, struct sk_buff *skb, > __be32 src, __be32 dst, __u8 tos, __u8 ttl, __be16 df, > __be16 src_port, __be16 dst_port, > struct vxlan_metadata *md, bool xnet, u32 vxflags) > @@ -217,11 +216,11 @@ int rpl_vxlan_xmit_skb(struct vxlan_sock *vs, > if (vxflags & VXLAN_F_GBP) > vxlan_build_gbp_hdr(vxh, vxflags, md); > > - vxlan_set_owner(vs->sock->sk, skb); > + vxlan_set_owner(sk, skb); > > ovs_skb_set_inner_protocol(skb, htons(ETH_P_TEB)); > > - return udp_tunnel_xmit_skb(rt, skb, src, dst, tos, > + return udp_tunnel_xmit_skb(rt, sk, skb, src, dst, tos, > ttl, df, src_port, dst_port, xnet, > !udp_sum); > } > diff --git a/datapath/vport-lisp.c b/datapath/vport-lisp.c > index 0024eb4..104a21d 100644 > --- a/datapath/vport-lisp.c > +++ b/datapath/vport-lisp.c > @@ -455,7 +455,8 @@ static int lisp_send(struct vport *vport, struct sk_buff *skb) > ovs_skb_set_inner_protocol(skb, skb->protocol); > > df = tun_key->tun_flags & TUNNEL_DONT_FRAGMENT ? htons(IP_DF) : 0; > - sent_len = udp_tunnel_xmit_skb(rt, skb, saddr, tun_key->ipv4_dst, > + sent_len = udp_tunnel_xmit_skb(rt, lisp_port->lisp_rcv_socket->sk, skb, > + saddr, tun_key->ipv4_dst, > tun_key->ipv4_tos, tun_key->ipv4_ttl, > df, src_port, dst_port, false, true); > > diff --git a/datapath/vport-vxlan.c b/datapath/vport-vxlan.c > index eff7ca2..fc9f350 100644 > --- a/datapath/vport-vxlan.c > +++ b/datapath/vport-vxlan.c > @@ -260,7 +260,7 @@ static int vxlan_tnl_send(struct vport *vport, struct sk_buff *skb) > vxflags = vxlan_port->exts | > (tun_key->tun_flags & TUNNEL_CSUM ? VXLAN_F_UDP_CSUM : 0); > > - err = vxlan_xmit_skb(vxlan_port->vs, rt, skb, > + err = vxlan_xmit_skb(rt, vxlan_port->vs->sock->sk, skb, > saddr, tun_key->ipv4_dst, > tun_key->ipv4_tos, > tun_key->ipv4_ttl, df, >
On Tue, Sep 22, 2015 at 1:11 PM, Thomas F Herbert <thomasfherbert@gmail.com> wrote: > On 9/15/15 2:09 PM, Pravin B Shelar wrote: >> >> From: Joe Stringer <joestringer@nicira.com> >> >> Signed-off-by: Joe Stringer <joestringer@nicira.com> >> Signed-off-by: Pravin B Shelar <pshelar@nicira.com> >> --- >> .travis.yml | 3 +- >> FAQ.md | 1 + >> acinclude.m4 | 4 +- >> datapath/datapath.c | 4 +-- >> datapath/datapath.h | 9 +++---- >> datapath/flow.c | 4 ++- >> datapath/linux/compat/geneve.c | 2 +- >> datapath/linux/compat/include/net/net_namespace.h | 27 >> +++++++++++++++++++++ >> datapath/linux/compat/include/net/udp_tunnel.h | 15 +++++++++++- >> datapath/linux/compat/include/net/vxlan.h | 14 ++++++---- >> datapath/linux/compat/stt.c | 16 +++++++----- >> datapath/linux/compat/udp_tunnel.c | 10 ++++---- >> datapath/linux/compat/vxlan.c | 7 ++--- >> datapath/vport-lisp.c | 3 +- >> datapath/vport-vxlan.c | 2 +- > > Pravin, when will the changes for contrak support that were merged into > upstream net-next be backported to OVS? I don't see them in this patch. > That will be done by separate patch. Joe is working on it.
On 9/22/15 4:15 PM, Pravin Shelar wrote: > On Tue, Sep 22, 2015 at 1:11 PM, Thomas F Herbert > <thomasfherbert@gmail.com> wrote: >> On 9/15/15 2:09 PM, Pravin B Shelar wrote: >>> >>> From: Joe Stringer <joestringer@nicira.com> >>> >>> Signed-off-by: Joe Stringer <joestringer@nicira.com> >>> Signed-off-by: Pravin B Shelar <pshelar@nicira.com> >>> --- >>> .travis.yml | 3 +- >>> FAQ.md | 1 + >>> acinclude.m4 | 4 +- >>> datapath/datapath.c | 4 +-- >>> datapath/datapath.h | 9 +++---- >>> datapath/flow.c | 4 ++- >>> datapath/linux/compat/geneve.c | 2 +- >>> datapath/linux/compat/include/net/net_namespace.h | 27 >>> +++++++++++++++++++++ >>> datapath/linux/compat/include/net/udp_tunnel.h | 15 +++++++++++- >>> datapath/linux/compat/include/net/vxlan.h | 14 ++++++---- >>> datapath/linux/compat/stt.c | 16 +++++++----- >>> datapath/linux/compat/udp_tunnel.c | 10 ++++---- >>> datapath/linux/compat/vxlan.c | 7 ++--- >>> datapath/vport-lisp.c | 3 +- >>> datapath/vport-vxlan.c | 2 +- >> >> Pravin, when will the changes for contrak support that were merged into >> upstream net-next be backported to OVS? I don't see them in this patch. >> > That will be done by separate patch. Joe is working on it. Thanks. I asked because I see the 4 CT attributes show up in user space when I send an upcall with a double tagged vlan from my kernel module with 802.1ad patch. >
diff --git a/.travis.yml b/.travis.yml index d14f786..f4b9188 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,7 +12,8 @@ env: - TESTSUITE=1 KERNEL=3.18.1 - TESTSUITE=1 OPTS="--enable-shared" - BUILD_ENV="-m32" OPTS="--disable-ssl" - - KERNEL=4.0.2 + - KERNEL=4.1.6 + - KERNEL=4.0.9 - KERNEL=3.17.7 DPDK=1 - KERNEL=3.17.7 DPDK=1 OPTS="--enable-shared" - KERNEL=3.17.7 diff --git a/FAQ.md b/FAQ.md index 631f6a4..cea517d 100644 --- a/FAQ.md +++ b/FAQ.md @@ -156,6 +156,7 @@ A: The following table lists the Linux kernel versions against which the | 2.1.x | 2.6.32 to 3.11 | 2.3.x | 2.6.32 to 3.14 | 2.4.x | 2.6.32 to 4.0 +| 2.5.x | 2.6.32 to 4.1 Open vSwitch userspace should also work with the Linux kernel module built into Linux 3.3 and later. diff --git a/acinclude.m4 b/acinclude.m4 index b755dc4..229f900 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -134,10 +134,10 @@ AC_DEFUN([OVS_CHECK_LINUX], [ AC_MSG_RESULT([$kversion]) if test "$version" -ge 4; then - if test "$version" = 4 && test "$patchlevel" -le 0; then + if test "$version" = 4 && test "$patchlevel" -le 1; then : # Linux 4.x else - AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version newer than 4.0.x is not supported (please refer to the FAQ for advice)]) + AC_ERROR([Linux kernel in $KBUILD is version $kversion, but version newer than 4.1.x is not supported (please refer to the FAQ for advice)]) fi elif test "$version" = 3; then : # Linux 3.x diff --git a/datapath/datapath.c b/datapath/datapath.c index 73c0b4a..1115649 100644 --- a/datapath/datapath.c +++ b/datapath/datapath.c @@ -205,7 +205,6 @@ static void destroy_dp_rcu(struct rcu_head *rcu) ovs_flow_tbl_destroy(&dp->table); free_percpu(dp->stats_percpu); - release_net(ovs_dp_get_net(dp)); kfree(dp->ports); kfree(dp); } @@ -1527,7 +1526,7 @@ static int ovs_dp_cmd_new(struct sk_buff *skb, struct genl_info *info) if (dp == NULL) goto err_free_reply; - ovs_dp_set_net(dp, hold_net(sock_net(skb->sk))); + ovs_dp_set_net(dp, sock_net(skb->sk)); /* Allocate table. */ err = ovs_flow_tbl_init(&dp->table); @@ -1601,7 +1600,6 @@ err_destroy_percpu: err_destroy_table: ovs_flow_tbl_destroy(&dp->table); err_free_dp: - release_net(ovs_dp_get_net(dp)); kfree(dp); err_free_reply: kfree_skb(reply); diff --git a/datapath/datapath.h b/datapath/datapath.h index 526ddad..aca9407 100644 --- a/datapath/datapath.h +++ b/datapath/datapath.h @@ -25,6 +25,7 @@ #include <linux/netdevice.h> #include <linux/skbuff.h> #include <linux/u64_stats_sync.h> +#include <net/net_namespace.h> #include "compat.h" #include "flow.h" @@ -86,10 +87,8 @@ struct datapath { /* Stats. */ struct dp_stats_percpu __percpu *stats_percpu; -#ifdef CONFIG_NET_NS /* Network namespace ref. */ - struct net *net; -#endif + possible_net_t net; u32 user_features; }; @@ -156,12 +155,12 @@ int lockdep_ovsl_is_held(void); static inline struct net *ovs_dp_get_net(const struct datapath *dp) { - return read_pnet(&dp->net); + return rpl_read_pnet(&dp->net); } static inline void ovs_dp_set_net(struct datapath *dp, struct net *net) { - write_pnet(&dp->net, net); + rpl_write_pnet(&dp->net, net); } struct vport *ovs_lookup_vport(const struct datapath *dp, u16 port_no); diff --git a/datapath/flow.c b/datapath/flow.c index a7a2063..8ef60d1 100644 --- a/datapath/flow.c +++ b/datapath/flow.c @@ -101,7 +101,9 @@ void ovs_flow_stats_update(struct sw_flow *flow, __be16 tcp_flags, new_stats = kmem_cache_alloc_node(flow_stats_cache, - GFP_THISNODE | + GFP_NOWAIT | + __GFP_THISNODE | + __GFP_NOWARN | __GFP_NOMEMALLOC, node); if (likely(new_stats)) { diff --git a/datapath/linux/compat/geneve.c b/datapath/linux/compat/geneve.c index 78d3395..8e80180 100644 --- a/datapath/linux/compat/geneve.c +++ b/datapath/linux/compat/geneve.c @@ -117,7 +117,7 @@ int rpl_geneve_xmit_skb(struct geneve_sock *gs, struct rtable *rt, ovs_skb_set_inner_protocol(skb, htons(ETH_P_TEB)); - return udp_tunnel_xmit_skb(rt, skb, src, dst, + return udp_tunnel_xmit_skb(rt, gs->sock->sk, skb, src, dst, tos, ttl, df, src_port, dst_port, xnet, !csum); } diff --git a/datapath/linux/compat/include/net/net_namespace.h b/datapath/linux/compat/include/net/net_namespace.h index b7dbfe3..edfa131 100644 --- a/datapath/linux/compat/include/net/net_namespace.h +++ b/datapath/linux/compat/include/net/net_namespace.h @@ -51,4 +51,31 @@ static void rpl_unregister_pernet_gen_##TYPE(struct rpl_pernet_operations *rpl_p #define DEFINE_COMPAT_PNET_REG_FUNC(TYPE) #endif /* 2.6.33 */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,1,0) +typedef struct { +#ifdef CONFIG_NET_NS + struct net *net; +#endif +} possible_net_t; + +static inline void rpl_write_pnet(possible_net_t *pnet, struct net *net) +{ +#ifdef CONFIG_NET_NS + pnet->net = net; +#endif +} + +static inline struct net *rpl_read_pnet(const possible_net_t *pnet) +{ +#ifdef CONFIG_NET_NS + return pnet->net; +#else + return &init_net; +#endif +} +#else /* Linux >= 4.1 */ +#define rpl_read_pnet read_pnet +#define rpl_write_pnet write_pnet +#endif /* Linux >= 4.1 */ + #endif /* net/net_namespace.h wrapper */ diff --git a/datapath/linux/compat/include/net/udp_tunnel.h b/datapath/linux/compat/include/net/udp_tunnel.h index 81cb3df..d334746 100644 --- a/datapath/linux/compat/include/net/udp_tunnel.h +++ b/datapath/linux/compat/include/net/udp_tunnel.h @@ -19,6 +19,18 @@ rpl_udp_tunnel_handle_offloads(struct sk_buff *skb, bool udp_csum, } #define udp_tunnel_handle_offloads rpl_udp_tunnel_handle_offloads +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,1,0) +static inline int rpl_udp_tunnel_xmit_skb(struct rtable *rt, + struct sock *sk, struct sk_buff *skb, + __be32 src, __be32 dst, __u8 tos, __u8 ttl, + __be16 df, __be16 src_port, __be16 dst_port, + bool xnet, bool nocheck) +{ + return udp_tunnel_xmit_skb(rt, skb, src, dst, tos, ttl, df, src_port, + dst_port, xnet, nocheck); +} +#define udp_tunnel_xmit_skb rpl_udp_tunnel_xmit_skb +#endif #else #include <net/ip_tunnels.h> @@ -71,7 +83,8 @@ void rpl_setup_udp_tunnel_sock(struct net *net, struct socket *sock, /* Transmit the skb using UDP encapsulation. */ #define udp_tunnel_xmit_skb rpl_udp_tunnel_xmit_skb -int rpl_udp_tunnel_xmit_skb(struct rtable *rt, struct sk_buff *skb, +int rpl_udp_tunnel_xmit_skb(struct rtable *rt, + struct sock *sk, struct sk_buff *skb, __be32 src, __be32 dst, __u8 tos, __u8 ttl, __be16 df, __be16 src_port, __be16 dst_port, bool xnet, bool nocheck); diff --git a/datapath/linux/compat/include/net/vxlan.h b/datapath/linux/compat/include/net/vxlan.h index 0d60c18..cafff79 100644 --- a/datapath/linux/compat/include/net/vxlan.h +++ b/datapath/linux/compat/include/net/vxlan.h @@ -88,10 +88,9 @@ struct vxlanhdr_gbp { #endif #ifdef USE_UPSTREAM_VXLAN -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, +static inline int rpl_vxlan_xmit_skb(struct rtable *rt, struct sock *sk, + struct sk_buff *skb, __be32 src, __be32 dst, __u8 tos, + __u8 ttl, __be16 df, __be16 src_port, __be16 dst_port, struct vxlan_metadata *md, bool xnet, u32 vxflags) { if (skb_is_gso(skb) && skb_is_encapsulated(skb)) { @@ -99,7 +98,11 @@ static inline int rpl_vxlan_xmit_skb(struct vxlan_sock *vs, return -ENOSYS; } +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,1,0) return vxlan_xmit_skb(rt, skb, src, dst, tos, ttl, df, +#else + return vxlan_xmit_skb(rt, sk, skb, src, dst, tos, ttl, df, +#endif src_port, dst_port, md, xnet, vxflags); } @@ -138,8 +141,7 @@ struct vxlan_sock *rpl_vxlan_sock_add(struct net *net, __be16 port, void rpl_vxlan_sock_release(struct vxlan_sock *vs); #define vxlan_xmit_skb rpl_vxlan_xmit_skb -int rpl_vxlan_xmit_skb(struct vxlan_sock *vs, - struct rtable *rt, struct sk_buff *skb, +int rpl_vxlan_xmit_skb(struct rtable *rt, struct sock *sk, struct sk_buff *skb, __be32 src, __be32 dst, __u8 tos, __u8 ttl, __be16 df, __be16 src_port, __be16 dst_port, struct vxlan_metadata *md, bool xnet, u32 vxflags); diff --git a/datapath/linux/compat/stt.c b/datapath/linux/compat/stt.c index dd21753..e27cedf 100644 --- a/datapath/linux/compat/stt.c +++ b/datapath/linux/compat/stt.c @@ -1320,16 +1320,18 @@ static void clean_percpu(struct work_struct *work) } #ifdef HAVE_NF_HOOKFN_ARG_OPS -#define FIRST_PARAM const struct nf_hook_ops *ops, +#define FIRST_PARAM const struct nf_hook_ops *ops #else -#define FIRST_PARAM unsigned int hooknum, +#define FIRST_PARAM unsigned int hooknum #endif -static unsigned int nf_ip_hook(FIRST_PARAM - struct sk_buff *skb, - const struct net_device *in, - const struct net_device *out, - int (*okfn)(struct sk_buff *)) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0) +#define LAST_PARAM const struct nf_hook_state *state +#else +#define LAST_PARAM const struct net_device *in, const struct net_device *out, int (*okfn)(struct sk_buff *) +#endif + +static unsigned int nf_ip_hook(FIRST_PARAM, struct sk_buff *skb, LAST_PARAM) { struct stt_sock *stt_sock; int ip_hdr_len; diff --git a/datapath/linux/compat/udp_tunnel.c b/datapath/linux/compat/udp_tunnel.c index c84113b..680fd83 100644 --- a/datapath/linux/compat/udp_tunnel.c +++ b/datapath/linux/compat/udp_tunnel.c @@ -142,10 +142,10 @@ void ovs_udp_csum_gso(struct sk_buff *skb) } EXPORT_SYMBOL_GPL(ovs_udp_csum_gso); -int rpl_udp_tunnel_xmit_skb(struct rtable *rt, struct sk_buff *skb, - __be32 src, __be32 dst, __u8 tos, __u8 ttl, - __be16 df, __be16 src_port, __be16 dst_port, - bool xnet, bool nocheck) +int rpl_udp_tunnel_xmit_skb(struct rtable *rt, struct sock *sk, + struct sk_buff *skb, __be32 src, __be32 dst, + __u8 tos, __u8 ttl, __be16 df, __be16 src_port, + __be16 dst_port, bool xnet, bool nocheck) { struct udphdr *uh; @@ -159,7 +159,7 @@ int rpl_udp_tunnel_xmit_skb(struct rtable *rt, struct sk_buff *skb, udp_set_csum(nocheck, skb, src, dst, skb->len); - return iptunnel_xmit(skb->sk, rt, skb, src, dst, IPPROTO_UDP, + return iptunnel_xmit(sk, rt, skb, src, dst, IPPROTO_UDP, tos, ttl, df, xnet); } EXPORT_SYMBOL_GPL(rpl_udp_tunnel_xmit_skb); diff --git a/datapath/linux/compat/vxlan.c b/datapath/linux/compat/vxlan.c index 129f171..fd454ae 100644 --- a/datapath/linux/compat/vxlan.c +++ b/datapath/linux/compat/vxlan.c @@ -180,8 +180,7 @@ static void vxlan_build_gbp_hdr(struct vxlanhdr *vxh, u32 vxflags, gbp->policy_id = htons(md->gbp & VXLAN_GBP_ID_MASK); } -int rpl_vxlan_xmit_skb(struct vxlan_sock *vs, - struct rtable *rt, struct sk_buff *skb, +int rpl_vxlan_xmit_skb(struct rtable *rt, struct sock *sk, struct sk_buff *skb, __be32 src, __be32 dst, __u8 tos, __u8 ttl, __be16 df, __be16 src_port, __be16 dst_port, struct vxlan_metadata *md, bool xnet, u32 vxflags) @@ -217,11 +216,11 @@ int rpl_vxlan_xmit_skb(struct vxlan_sock *vs, if (vxflags & VXLAN_F_GBP) vxlan_build_gbp_hdr(vxh, vxflags, md); - vxlan_set_owner(vs->sock->sk, skb); + vxlan_set_owner(sk, skb); ovs_skb_set_inner_protocol(skb, htons(ETH_P_TEB)); - return udp_tunnel_xmit_skb(rt, skb, src, dst, tos, + return udp_tunnel_xmit_skb(rt, sk, skb, src, dst, tos, ttl, df, src_port, dst_port, xnet, !udp_sum); } diff --git a/datapath/vport-lisp.c b/datapath/vport-lisp.c index 0024eb4..104a21d 100644 --- a/datapath/vport-lisp.c +++ b/datapath/vport-lisp.c @@ -455,7 +455,8 @@ static int lisp_send(struct vport *vport, struct sk_buff *skb) ovs_skb_set_inner_protocol(skb, skb->protocol); df = tun_key->tun_flags & TUNNEL_DONT_FRAGMENT ? htons(IP_DF) : 0; - sent_len = udp_tunnel_xmit_skb(rt, skb, saddr, tun_key->ipv4_dst, + sent_len = udp_tunnel_xmit_skb(rt, lisp_port->lisp_rcv_socket->sk, skb, + saddr, tun_key->ipv4_dst, tun_key->ipv4_tos, tun_key->ipv4_ttl, df, src_port, dst_port, false, true); diff --git a/datapath/vport-vxlan.c b/datapath/vport-vxlan.c index eff7ca2..fc9f350 100644 --- a/datapath/vport-vxlan.c +++ b/datapath/vport-vxlan.c @@ -260,7 +260,7 @@ static int vxlan_tnl_send(struct vport *vport, struct sk_buff *skb) vxflags = vxlan_port->exts | (tun_key->tun_flags & TUNNEL_CSUM ? VXLAN_F_UDP_CSUM : 0); - err = vxlan_xmit_skb(vxlan_port->vs, rt, skb, + err = vxlan_xmit_skb(rt, vxlan_port->vs->sock->sk, skb, saddr, tun_key->ipv4_dst, tun_key->ipv4_tos, tun_key->ipv4_ttl, df,