[ovs-dev] [PATCH v3 0/7] create tunnel devices using rtnetlink interface

Eric Garver e at erig.me
Mon May 1 17:55:14 UTC 2017


On Thu, Apr 27, 2017 at 02:36:18PM -0700, Joe Stringer wrote:
> On 13 April 2017 at 13:47, Eric Garver <e at erig.me> wrote:
> > This series adds support for the creation of tunnels using the rtnetlink
> > interface. This will open the possibility for new features and flags on those
> > vports without the need to change vport compatibility code.
> >
> > Support for STT and LISP have not been added because these are not upstream yet,
> > so we don't know how the interface will be like upstream. And there are no
> > features in the current drivers right now we could make use of.
> >
> > Note: This work originally started by Thadeu Lima de Souza Cascardo.
> >
> > Testing:
> >   - kernel 4.9.22, in-tree datapath
> >     - rtnetlink successfully creates devices
> >   - kernel 4.2.8, in-tree datapath
> >     - rtnetlink is tried, but fails due to no COLLECT_METADATA support
> >     - genetlink successfully creates devices
> >   - kernel 4.2.8, out-of-tree datapath
> >     - rtnetlink is not tried
> >     - genetlink successfully creates devices
> >
> > v3:
> >   - commonzie code to get port data to verify port
> >   - eliminate dpif_netlink_rtnl_vxlan_destroy() and alike
> >   - minor changes for coding style guidelines
> >   - add ACKs from previous reviews
> 
> Sorry about the delay. I almost pushed it the other day, but had a
> concern around how this series handles shutdown/restart of OVS.
> 
> I have a couple of minor pieces of feedback on some patches, please
> roll those in.
> 
> In my setup I removed the vport-* modules so there was no way to fall
> back to compat code, then ran depmod to fix up the dependencies.
> 
> When I run the GRE tests, the first gre test succeeds then the second fails:
> 
> $ make check-kernel TESTSUITEFLAGS="-k gre"
>  10: datapath - ping over gre tunnel                 ok
> 14: datapath - truncate and output to gre tunnel    FAILED
> (system-traffic.at:507)
> 
> $ ip link | grep gre_sys
> 62: gre_sys at NONE: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1472 qdisc
> pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000
> 
> $ sudo ip li del dev gre_sys
> 
> $ make check-kernel TESTSUITEFLAGS="14"
>  14: datapath - truncate and output to gre tunnel    ok
> 
> $ make check-kernel TESTSUITEFLAGS="14"
>   14: datapath - truncate and output to gre tunnel    FAILED
> (system-traffic.at:507)
> 
> This isn't failing randomly; first time it works, but if the device
> exists, it fails. This is similar to ovs restart or crash with
> --monitor.
> 
> Looking at the logs:
> > 2017-04-27T21:24:19.270Z|00041|dpif_netlink|INFO|Failed to create at_gre0 with rtnetlink: Invalid argument
> > 2017-04-27T21:24:19.271Z|00042|dpif|WARN|system at ovs-system: failed to add at_gre0 as port: Address family not supported by protocol
> > 2017-04-27T21:24:19.271Z|00043|bridge|WARN|could not add network device at_gre0 to ofproto (Address family not supported by protocol)
> > 2017-04-27T21:24:19.272Z|00044|dpif_netlink|INFO|Failed to create at_gre0 with rtnetlink: Invalid argument
> 
> Seems like the kernel is incorrectly returing -EINVAL rather than
> -EEXIST. So even if we were to make the probe/tunnel creation logic a
> bit smarter to understand if the port already exists (eg, because OVS
> was restarted), it won't handle correctly.
> 
> Could you look further into this? Ideally the kernel could tell us
> when we're trying to create a device that already exists, and return
> EEXIST.. then it would be up to our validation logic to ensure that
> all the correct options are configured on that device. But maybe the
> workaround for all existing kernels is to try to delete the tunnel
> device the first time, then try to recreate it.
> 
> Thoughts?

Thanks for the feedback Joe. I'll investigate this and all your other
feedback.

Thanks.
Eric.


More information about the dev mailing list