]> git.proxmox.com Git - ovs.git/commit - tests/ovn.at
ovn: Fix IPv6 DAD failure for container ports
authorNuman Siddique <nusiddiq@redhat.com>
Sat, 6 Oct 2018 08:31:07 +0000 (14:01 +0530)
committerGurucharan Shetty <guru@ovn.org>
Thu, 11 Oct 2018 06:54:18 +0000 (23:54 -0700)
commit22e506d3b686d654239c381a8c4166803fd00692
tree451be18f8d164a87f958f7cda9405e9059c0d8d2
parent1adcbcee8f4c2adcd0594d986edd7d8940318d87
ovn: Fix IPv6 DAD failure for container ports

When a container port is created inside a VM, the below kernel message
is seen and IPv6 doesn't work on that interface.

[  138.000753] IPv6: vlan4: IPv6 duplicate address <IPv6 LLA> detected!

When a container port sends a ethernet broadcast packet, OVN delivers the same
packet back to the child port (and hence the DAD check fails).

This is because
 - 'MLF_ALLOW_LOOPBACK_BIT' is set in REG10 in table 0 for the packets received
   from any child port.
 - for ethernet broadcast packets, Table 33 (OFTABLE_LOCAL_OUTPUT) clones the
   packet for every local port 'P' which belongs to the same datapath i.e
   'P'->REG15, resubmit(,34)
 - If REG14 and REG15 are same, Table 34 (OFTABLE_CHECK_LOOPBACK) drops the packet
   if 'MLF_ALLOW_LOOPBACK_BIT' is not set.
 - But in the case of container ports, this bit will be set and hence doesn't gets
   dropped and eventually gets delivered to the source container port.
 - The VM's kernel thinks its a DAD packet. The latest kernels (4.19) implements
   the RFC -7527 (enhanced DAD), but it is still a problem for older kernels.

This patch fixes the issue by using a new register bit (MLF_NESTED_CONTAINER_BIT)
instead of 'MLF_ALLOW_LOOPBACK_BIT' and sets it in REG10 for the packets received
from child ports so that Table 34 drops the packet for the source port.

Signed-off-by: Numan Siddique <nusiddiq@redhat.com>
Signed-off-by: Gurucharan Shetty <guru@ovn.org>
ovn/controller/ofctrl.c
ovn/controller/ofctrl.h
ovn/controller/physical.c
ovn/lib/logical-fields.h
tests/ovn.at