On Fri, Jul 8, 2016 at 12:20 PM, Lance Richardson <lrich...@redhat.com>
wrote:

> The "ovn-controller-vtep - vtep-macs 1" test case fails occasionally,
> with ovs-vswitchd logs similar to these:
>
>     bridge|INFO|bridge br-vtep_vtep_ls1: added interface vx1 on port 2
>     tunnel|WARN|bfd1.2.3.5: attempting to add tunnel port with same config
> as port 'vx1' (::->1.2.3.5, key=0, dp port=4789, pkt mark=0)
>     ofproto|WARN|vtep_bfd: could not add port bfd1.2.3.5 (File exists)
>
> In the passing case, ovs-vtep.log always seems to have:
>
>     ovs-vtep | INFO | using tunnel key 1 in lswitch0
>
> In the failing case, the tunnel key is zero:
>
>     ovs-vtep | INFO | using tunnel key 0 in lswitch0
>
>
> ovs-vtep creates two VXLAN tunnels per logical switch, one for
> ordinary data traffic and one for BFD.  These tunnels have the same
> network configuration (IP addresses, UDP port, etc.), and in the
> passing case the only difference in the configurations is the tunnel key.
>
> In the failing case, the data tunnel key is 0 and the BFD tunnel
> key is also 0 (it's not specified, I'm assuming it defaults
> to zero), so the tunnel configurations are identical (which is why
> ovs-vswitchd is rejecting the attempt to create the BFD tunnel).
>
> My questions are:
>    - Does the above description make sense?

   - What can be done to ensure that the tunnel pair uses
>      two different keys (e.g. if the BFD tunnel always uses
>      a key of zero, is there a way to make data tunnel keys
>      start at one?)
>


We need to wait for the correct value of tunnel key to be programmed.
OVN uses datapath tunnel keys >= 1

0 is reserved for BFD in the context of the VTEP emulator.
0 is also used as a non-BFD tunnel default in the VTEP emulator which is
wrong in that
it is internally inconsistent to fall back to a known conflicting value.

I was thinking along the below lines in terms of fix.
Can you check it out in your environment ?

diff --git a/vtep/README.ovs-vtep.md b/vtep/README.ovs-vtep.md
index 2913714..905c1a3 100644
--- a/vtep/README.ovs-vtep.md
+++ b/vtep/README.ovs-vtep.md
@@ -161,6 +161,8 @@ vtep-ctl add-ls ls0

 2. Bind the logical switch to a port:

+   BFD reserves the use of tunnel_key 0 in ovs-vtep.
+
       ```
 vtep-ctl bind-ls br0 p0 0 ls0
 vtep-ctl set Logical_Switch ls0 tunnel_key=33


diff --git a/vtep/ovs-vtep b/vtep/ovs-vtep
old mode 100644
new mode 100755
index e52c66f..5ad900d
--- a/vtep/ovs-vtep
+++ b/vtep/ovs-vtep
@@ -259,6 +259,21 @@ class Logical_Switch(object):
         tunnels = set()
         parse_ucast = True

+        if not self.tunnel_key:
+            vlog.info("Invalid tunnel key %s in %s; requery database"
+                          % (self.tunnel_key, self.name))
+            column = vtep_ctl("--columns=tunnel_key find logical_switch "
+                              "name=%s" % self.name)
+            tunnel_key = column.partition(":")[2].strip()
+            if tunnel_key and isinstance(eval(tunnel_key),
six.integer_types):
+                self.tunnel_key = tunnel_key
+                vlog.info("update_remote_macs: using tunnel key %s in %s"
+                          % (self.tunnel_key, self.name))
+            else:
+                vlog.info("Invalid tunnel key %s in %s after DB requery"
+                          % (self.tunnel_key, self.name))
+                return
+
         mac_list = vtep_ctl("list-remote-macs %s" % self.name).splitlines()
         for line in mac_list:
             if (line.find("mcast-mac-remote") != -1):



> Thanks,
>
>     Lance
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to