On 13 April 2017 at 13:47, Eric Garver <e...@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@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@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?
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to