[ovs-dev] [PATCH v1 0/5] datapath: enable NSH support in kernel compat mode

Yang, Yi Y yi.y.yang at intel.com
Thu Feb 1 02:25:37 UTC 2018


It still failed. Does "encap ip" require any special kernel module?

vagrant at gbpsfc4:~/ovs-nsh-test$ export PATH=/home/vagrant/iproute2-4.9.0/ip:$PATH
vagrant at gbpsfc4:~/ovs-nsh-test$ sudo -E ip link add dev at_vxlan1 type vxlan dstport 4790 external gpe
vagrant at gbpsfc4:~/ovs-nsh-test$ sudo -E ip addr add dev at_vxlan1 10.1.1.1/24
vagrant at gbpsfc4:~/ovs-nsh-test$ sudo -E ip link set dev at_vxlan1 mtu 1450 up
vagrant at gbpsfc4:~/ovs-nsh-test$ sudo -E ip route add 10.1.1.2/32 encap ip id 0 dst 172.31.1.100 dev at_vxlan1
RTNETLINK answers: Operation not supported
vagrant at gbpsfc4:~/ovs-nsh-test$ sudo -E ip route add 10.1.1.2/32 encap ip id 1 dst 172.31.1.100 dev at_vxlan1
RTNETLINK answers: Operation not supported
vagrant at gbpsfc4:~/ovs-nsh-test$ sudo -E ip route add 10.1.1.2/32 encap ip dst 172.31.1.100 dev at_vxlan1
RTNETLINK answers: Operation not supported
vagrant at gbpsfc4:~/ovs-nsh-test$ lsmod
Module                  Size  Used by
vxlan                  53248  0
ip6_udp_tunnel         16384  1 vxlan
udp_tunnel             16384  1 vxlan
ip6_tunnel             32768  0
tunnel6                16384  1 ip6_tunnel
ipip                   16384  0
tunnel4                16384  1 ipip
ip_tunnel              24576  1 ipip
veth                   16384  0
nf_conntrack_ipv6      20480  0
nf_defrag_ipv6         36864  1 nf_conntrack_ipv6
xt_addrtype            16384  2
xt_conntrack           16384  1
ipt_MASQUERADE         16384  1
nf_nat_masquerade_ipv4    16384  1 ipt_MASQUERADE
iptable_nat            16384  1
dm_crypt               36864  0
nf_conntrack_ipv4      16384  3
nf_defrag_ipv4         16384  1 nf_conntrack_ipv4
nf_nat_ipv4            16384  1 iptable_nat
nf_nat                 28672  2 nf_nat_masquerade_ipv4,nf_nat_ipv4
nf_conntrack          131072  7 nf_conntrack_ipv6,nf_conntrack_ipv4,ipt_MASQUERADE,nf_nat_masquerade_ipv4,xt_conntrack,nf_nat_ipv4,nf_nat
bridge                143360  0
stp                    16384  1 bridge
llc                    16384  2 bridge,stp
dm_thin_pool           65536  1
dm_persistent_data     69632  1 dm_thin_pool
dm_bio_prison          20480  1 dm_thin_pool
dm_bufio               28672  1 dm_persistent_data
libcrc32c              16384  3 nf_conntrack,dm_persistent_data,nf_nat
nfsd                  299008  2
iptable_filter         16384  1
ip_tables              24576  2 iptable_filter,iptable_nat
x_tables               36864  5 ip_tables,iptable_filter,ipt_MASQUERADE,xt_addrtype,xt_conntrack
auth_rpcgss            57344  1 nfsd
nfs_acl                16384  1 nfsd
nfs                   241664  0
lockd                  90112  2 nfsd,nfs
grace                  16384  2 nfsd,lockd
sunrpc                327680  6 auth_rpcgss,nfsd,nfs_acl,lockd,nfs
fscache                65536  1 nfs
psmouse               139264  0
e1000                 139264  0
ppdev                  20480  0
parport_pc             32768  0
i2c_piix4              24576  0
mac_hid                16384  0
sb_edac                24576  0
serio_raw              16384  0
lp                     20480  0
parport                49152  3 lp,parport_pc,ppdev
pata_acpi              16384  0
video                  40960  0
vagrant at gbpsfc4:~/ovs-nsh-test$
-----Original Message-----
From: Eric Garver [mailto:e at erig.me] 
Sent: Thursday, February 1, 2018 5:10 AM
To: Yang, Yi Y <yi.y.yang at intel.com>
Cc: dev at openvswitch.org
Subject: Re: [ovs-dev] [PATCH v1 0/5] datapath: enable NSH support in kernel compat mode

On Wed, Jan 31, 2018 at 02:12:14PM +0000, Yang, Yi Y wrote:
> Hi, Eric
> 
> My kernel is 4.13.0-rc6, so I'm very sure it can support vxlan-gpe, I 
> can add vxlan-gpe port without any issue by command line, so I don't 
> know what happened.

Your output below indicates this is failing on this line:

25  NS_CHECK_EXEC([at_ns0], [ip route add 10.1.1.2/32 encap ip id 0 dst 172.31.1.100 dev at_vxlan1])

It does not appear to be an OVS issue. Maybe encap id 0 is not accepted on older kernels. Try changing it to a non-zero value.

> 
> Greg, I checked unit tests in tests/system-traffic.at and tests/system-layer3-tunnels.at for vxlan and vxlan-gpe, I think they are very tricky, for NSH, they won't work, current test infrastructure can't handle NSH unit test in kernel data path, so I don't think I can add it. I have posted v2 patch series, I have sfc test environment in my machine and have verified kernel data path, my test environment has two vagrant VMs, each one VM starts two containers which play SF roles, end-to-end ping and http are both ok.
> 
> -----Original Message-----
> From: Eric Garver [mailto:e at erig.me]
> Sent: Tuesday, January 30, 2018 9:53 PM
> To: Yang, Yi Y <yi.y.yang at intel.com>
> Cc: Gregory Rose <gvrose8192 at gmail.com>; dev at openvswitch.org
> Subject: Re: [ovs-dev] [PATCH v1 0/5] datapath: enable NSH support in 
> kernel compat mode
> 
> On Tue, Jan 30, 2018 at 11:33:55AM +0000, Yang, Yi Y wrote:
> > Hi, Greg
> > 
> > I installed linux 3.10.107 in Ubuntu 14.04 and fixed 
> > skb_gso_error_unwind issue, but for unit test, 
> > tests/system-layer3-tunnels.at is a good reference for it because we 
> > used vxlan-gpe for nsh, I ran unit test 90, but it always fails (I 
> > have installed and used net-next kernel and the latest iproute2)
> > 
> > Here is error log
> > 
> > ./system-layer3-tunnels.at:25: ip netns exec at_ns0 sh << 
> > NS_EXEC_HEREDOC ip route add 10.1.1.2/32 encap ip id 0 dst
> > 172.31.1.100 dev at_vxlan1 NS_EXEC_HEREDOC
> > --- /dev/null   2018-01-30 02:18:43.272647961 +0000
> > +++ /home/vagrant/ovs-nsh-test/tests/system-kmod-testsuite.dir/at-groups/90/stderr      2018-01-30 09:45:15.415934534 +0000
> > @@ -0,0 +1 @@
> > +RTNETLINK answers: Operation not supported
> > ./system-layer3-tunnels.at:25: exit code was 2, expected 0
> > 
> > I think my system missed something so “ip route add 10.1.1.2/32 
> > encap ip id 0 dst 172.31.1.100 dev at_vxlan1 “ failed, Eric, what linux distribution do you know I can run “ping over VXLAN-GPE” successfully, I’ll use it as baseline to add NSH unit test for kernel data path.
> 
> When I added the tests it was on RHEL-7.4 with a net-next kernel. It should skip the tests if the installed iproute2 does not have the options for GPE.
> 
> The error you're seeing likely means your kernel does not have GPE support. VXLAN-GPE first appeared in kernel 4.7.
> 
>   e1e5314de08b ("vxlan: implement GPE")
> 
> As such, I think the VXLAN-GPE test case should pass on any distro with a 4.7+ kernel.
> 
> > 
> > From: Gregory Rose [mailto:gvrose8192 at gmail.com]
> > Sent: Tuesday, January 30, 2018 1:51 AM
> > To: Yang, Yi Y <yi.y.yang at intel.com>; dev at openvswitch.org
> > Cc: blp at ovn.org; jan.scheurich at ericsson.com
> > Subject: Re: [PATCH v1 0/5] datapath: enable NSH support in kernel 
> > compat mode
> > 
> > On 1/10/2018 11:53 PM, Yi Yang wrote:
> > 
> > 
> > This patch series is to backport NSH support patches in Linux 
> > net-next tree
> > 
> > to OVS in order that it can support NSH in kernel compat mode.
> > 
> > 
> > 
> > Yi Yang (5):
> > 
> >   datapath: ether: add NSH ethertype
> > 
> >   datapath: vxlan: factor out VXLAN-GPE next protocol
> > 
> >   datapath: net: add NSH header structures and helpers
> > 
> >   datapath: nsh: add GSO support
> > 
> >   datapath: enable NSH support
> > 
> > 
> > 
> >  NEWS                                              |   1 +
> > 
> >  datapath/Modules.mk                               |   4 +-
> > 
> >  datapath/actions.c                                | 116 ++++++++
> > 
> >  datapath/datapath.c                               |   4 +
> > 
> >  datapath/flow.c                                   |  51 ++++
> > 
> >  datapath/flow.h                                   |   7 +
> > 
> >  datapath/flow_netlink.c                           | 343 +++++++++++++++++++++-
> > 
> >  datapath/flow_netlink.h                           |   5 +
> > 
> >  datapath/linux/Modules.mk                         |   2 +
> > 
> >  datapath/linux/compat/include/linux/if_ether.h    |   4 +
> > 
> >  datapath/linux/compat/include/linux/openvswitch.h |   6 +-
> > 
> >  datapath/linux/compat/include/net/nsh.h           | 313 ++++++++++++++++++++
> > 
> >  datapath/linux/compat/include/net/tun_proto.h     |  49 ++++
> > 
> >  datapath/linux/compat/include/net/vxlan.h         |   6 -
> > 
> >  datapath/linux/compat/vxlan.c                     |  32 +-
> > 
> >  datapath/nsh.c                                    | 142 +++++++++
> > 
> >  16 files changed, 1048 insertions(+), 37 deletions(-)
> > 
> >  create mode 100644 datapath/linux/compat/include/net/nsh.h
> > 
> >  create mode 100644 datapath/linux/compat/include/net/tun_proto.h
> > 
> >  create mode 100644 datapath/nsh.c
> > 
> > 
> > 
> > Hi Yi,
> > 
> > My apologies for the delay in reviewing this series.
> > 
> > I've finished up my review and I think it mostly looks pretty good but I did find an issue compiling on a 3.10.107 kernel build:
> > CC [M]
> > /home/travis/build/gvrose8192/ovs-experimental/datapath/linux/vport-
> > ne
> > tdev.o
> > /home/travis/build/gvrose8192/ovs-experimental/datapath/linux/nsh.c:108:17: error: undefined identifier 'skb_gso_error_unwind'
> > CC [M]
> > /home/travis/build/gvrose8192/ovs-experimental/datapath/linux/nsh.o
> > /home/travis/build/gvrose8192/ovs-experimental/datapath/linux/nsh.c: In function ‘nsh_gso_segment’:
> > /home/travis/build/gvrose8192/ovs-experimental/datapath/linux/nsh.c:
> > 10
> > 8:3: error: implicit declaration of function ‘skb_gso_error_unwind’ 
> > [-Werror=implicit-function-declaration]
> > skb_gso_error_unwind(skb, htons(ETH_P_NSH), nsh_len, ^
> > cc1: some warnings being treated as errors
> > make[3]: ***
> > [/home/travis/build/gvrose8192/ovs-experimental/datapath/linux/nsh.o
> > ]
> > Error 1
> > make[3]: *** Waiting for unfinished jobs....
> > make[2]: ***
> > [_module_/home/travis/build/gvrose8192/ovs-experimental/datapath/lin
> > ux
> > ] Error 2
> > make[2]: Leaving directory `/home/travis/build/gvrose8192/ovs-experimental/linux-3.10.107'
> > make[1]: *** [default] Error 2
> > make[1]: Leaving directory `/home/travis/build/gvrose8192/ovs-experimental/datapath/linux'
> > make: *** [all-recursive] Error 1
> > 
> > So we'll need to fix that up and I also think the patches will need to be rebased to current master.  That second part is my fault... so sorry again about that.
> > 
> > One other thing, I ran this through our standard 'make check and make check-kmod' tests and everything was fine so the patches don't seem break anything.  I'm still concerned though that the test coverage probably didn't hit any parts of your code.  I'm wondering if there is some way I can test the code path and get some test coverage there.  Could you write up a self test for the tests/system-traffic.at kernel test?  Of if that's not practical is there some other way I could test this code?
> > 
> > Thanks,
> > 
> > - Greg
> > 
> > _______________________________________________
> > dev mailing list
> > dev at openvswitch.org
> > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev


More information about the dev mailing list