Uploaded image for project: 'Fast Datapath Product'
  1. Fast Datapath Product
  2. FDP-1419

Keepalived handover doesn't work on single-node deployment with virtual interface type

    • Icon: Bug Bug
    • Resolution: Not a Bug
    • Icon: Normal Normal
    • None
    • None
    • ovn24.09, ovn25.03
    • None
    • False
    • Hide

      None

      Show
      None
    • False
    • Hide

      Given a single-node OVN deployment that includes a LSP of type=virtual, mapped to a VIP, and two parent ports registered as its virtual parents,

      When OVN-controller receives a GARP for IPv4 or a ND packet for IPv6 announcing that VIP on either parent port,

      Then OVN must immediately record that parent in the SB DB and forward the traffic for the VIP to that newly announced parent interface.

      Show
      Given a single-node OVN deployment that includes a LSP of type=virtual, mapped to a VIP, and two parent ports registered as its virtual parents, When OVN-controller receives a GARP for IPv4 or a ND packet for IPv6 announcing that VIP on either parent port, Then OVN must immediately record that parent in the SB DB and forward the traffic for the VIP to that newly announced parent interface.
    • rhel-9
    • None
    • rhel-net-ovn
    • Hide

       

      systemctl start openvswitch                                                                          systemctl start ovn-northd
      ovn-nbctl set-connection ptcp:6641
      ovn-sbctl set-connection ptcp:6642 ovs-vsctl set open . external_ids:system-id=hv1 external_ids:ovn-remote=tcp:42.42.42.1:6642 external_ids:ovn-encap-type=geneve external_ids:ovn-encap-ip=42.42.42.1 systemctl restart ovn-controller 
      
      ip netns add server0 
      ip link add veth0_s0 type veth peer name veth0_s0_p 
      ip link set veth0_s0 netns server0
      ip netns exec server0 ip link set lo up
      ip netns exec server0 ip link set veth0_s0 up
      ip netns exec server0 ip link set veth0_s0 address 00:00:00:01:01:02
      ip netns exec server0 ip addr add 172.16.2.1/24 dev veth0_s0
      ip netns exec server0 ip addr add 2001::1/64 dev veth0_s0
      ip netns exec server0 ip route add default via 172.16.2.254 dev veth0_s0
      ip netns exec server0 ip -6 route add default via 2001::a dev veth0_s0
      
      ip netns add server2 
      ip link add veth0_s2 type veth peer name veth0_s2_p
      ip link set veth0_s2 netns server2
      ip netns exec server2 ip link set lo up
      ip netns exec server2 ip link set veth0_s2 up
      ip netns exec server2 ip link set veth0_s2 address 00:00:00:01:01:03
      ip netns exec server2 ip addr add 172.16.2.2/24 dev veth0_s2 
      ip netns exec server2 ip addr add 2001::2/64 dev veth0_s2 
      ip netns exec server2 ip route add default via 172.16.2.254 dev veth0_s2 
      ip netns exec server2 ip -6 route add default via 2001::a dev veth0_s2
      ovs-vsctl add-port br-int veth0_s0_p
      ip link set veth0_s0_p up
      ovs-vsctl set interface veth0_s0_p external_ids:iface-id=ls2p1
      ovs-vsctl add-port br-int veth0_s2_p
      ip link set veth0_s2_p up ovs-vsctl set interface veth0_s2_p external_ids:iface-id=ls2p2
      ovn-nbctl ls-add ls2 ovn-nbctl lsp-add ls2 ls2p1
      ovn-nbctl lsp-set-addresses ls2p1 00:00:00:01:01:02
      ovn-nbctl lsp-add ls2 ls2p2
      ovn-nbctl lsp-set-addresses ls2p2 00:00:00:01:01:03
      ovn-nbctl lsp-add ls2 ls2-vir
      ovn-nbctl lsp-set-addresses ls2-vir '00:00:00:01:01:10 172.16.1.10'
      ovn-nbctl lsp-set-type ls2-vir virtual ovn-nbctl set logical_switch_port ls2-vir options:virtual-ip=172.16.1.10 
      ovn-nbctl set logical_switch_port ls2-vir options:virtual-parents=ls2p1,ls2p2   
      
      # ovn-sbctl list port_binding  
      
      ovn-sbctl --bare --columns virtual_parent find port_binding logical_port=ls2-vir
      
      ip netns exec server0 cat <<-EOF > garp.py 
      from scapy.all import *                                                                                sendp(Ether(src="00:00:00:01:01:02",dst="ff:ff:ff:ff:ff:ff")/ARP(op=1,hwsrc="00:00:00:01:01:02",hwdst="00:00:00:00:00:00",psrc="172.16.1.10",pdst="172.16.1.10"),iface="veth0_s0")   
      EOF   
      
      cat garp.py   
      
      ip netns exec server0 cat <<-EOF > garp2.py 
      from scapy.all import *                                                                                sendp(Ether(src="00:00:00:01:01:03",dst="ff:ff:ff:ff:ff:ff")/ARP(op=1,hwsrc="00:00:00:01:01:03",hwdst="00:00:00:00:00:00",psrc="172.16.1.10",pdst="172.16.1.10"),iface="veth0_s2") 
      EOF   
      
      cat garp2.py   
      
      ip netns exec server0 python garp.py     
      
      # ovn-sbctl list port_binding  
      ovn-sbctl --bare --columns virtual_parent find port_binding logical_port=ls2-vir   
      
      ip netns exec server2 python garp2.py   
      
      # ovn-sbctl list port_binding  
      ovn-sbctl --bare --columns virtual_parent find port_binding logical_port=ls2-vir  

       
      No virtual_parent port is shown
       

      _uuid               : 7dff48fb-5a28-4ebc-9ab4-90badf1e1ba2
      additional_chassis  : []
      additional_encap    : []
      chassis             : []
      datapath            : 39ddab3e-10fc-41ae-9777-cf210d85d195
      encap               : []
      external_ids        : {}
      gateway_chassis     : []
      ha_chassis_group    : []
      logical_port        : ls2-vir
      mac                 : ["00:00:00:01:01:10 172.16.1.10"]
      mirror_rules        : []
      nat_addresses       : []
      options             : {virtual-ip="172.16.1.10", virtual-parents="ls2p1,ls2p2"}
      parent_port         : []
      port_security       : []
      requested_additional_chassis: []
      requested_chassis   : []
      tag                 : []
      tunnel_key          : 3
      type                : virtual
      up                  : false
      virtual_parent      : []
      Show
        systemctl start openvswitch                                                                          systemctl start ovn-northd ovn-nbctl set-connection ptcp:6641 ovn-sbctl set-connection ptcp:6642 ovs-vsctl set open . external_ids:system-id=hv1 external_ids:ovn-remote=tcp:42.42.42.1:6642 external_ids:ovn-encap-type=geneve external_ids:ovn-encap-ip=42.42.42.1 systemctl restart ovn-controller ip netns add server0 ip link add veth0_s0 type veth peer name veth0_s0_p ip link set veth0_s0 netns server0 ip netns exec server0 ip link set lo up ip netns exec server0 ip link set veth0_s0 up ip netns exec server0 ip link set veth0_s0 address 00:00:00:01:01:02 ip netns exec server0 ip addr add 172.16.2.1/24 dev veth0_s0 ip netns exec server0 ip addr add 2001::1/64 dev veth0_s0 ip netns exec server0 ip route add default via 172.16.2.254 dev veth0_s0 ip netns exec server0 ip -6 route add default via 2001::a dev veth0_s0 ip netns add server2 ip link add veth0_s2 type veth peer name veth0_s2_p ip link set veth0_s2 netns server2 ip netns exec server2 ip link set lo up ip netns exec server2 ip link set veth0_s2 up ip netns exec server2 ip link set veth0_s2 address 00:00:00:01:01:03 ip netns exec server2 ip addr add 172.16.2.2/24 dev veth0_s2 ip netns exec server2 ip addr add 2001::2/64 dev veth0_s2 ip netns exec server2 ip route add default via 172.16.2.254 dev veth0_s2 ip netns exec server2 ip -6 route add default via 2001::a dev veth0_s2 ovs-vsctl add-port br- int veth0_s0_p ip link set veth0_s0_p up ovs-vsctl set interface veth0_s0_p external_ids:iface-id=ls2p1 ovs-vsctl add-port br- int veth0_s2_p ip link set veth0_s2_p up ovs-vsctl set interface veth0_s2_p external_ids:iface-id=ls2p2 ovn-nbctl ls-add ls2 ovn-nbctl lsp-add ls2 ls2p1 ovn-nbctl lsp-set-addresses ls2p1 00:00:00:01:01:02 ovn-nbctl lsp-add ls2 ls2p2 ovn-nbctl lsp-set-addresses ls2p2 00:00:00:01:01:03 ovn-nbctl lsp-add ls2 ls2-vir ovn-nbctl lsp-set-addresses ls2-vir '00:00:00:01:01:10 172.16.1.10' ovn-nbctl lsp-set-type ls2-vir virtual ovn-nbctl set logical_switch_port ls2-vir options:virtual-ip=172.16.1.10 ovn-nbctl set logical_switch_port ls2-vir options:virtual-parents=ls2p1,ls2p2   # ovn-sbctl list port_binding  ovn-sbctl --bare --columns virtual_parent find port_binding logical_port=ls2-vir ip netns exec server0 cat <<-EOF > garp.py from scapy.all import *                                                                                sendp(Ether(src= "00:00:00:01:01:02" ,dst= "ff:ff:ff:ff:ff:ff" )/ARP(op=1,hwsrc= "00:00:00:01:01:02" ,hwdst= "00:00:00:00:00:00" ,psrc= "172.16.1.10" ,pdst= "172.16.1.10" ),iface= "veth0_s0" )   EOF   cat garp.py   ip netns exec server0 cat <<-EOF > garp2.py from scapy.all import *                                                                                sendp(Ether(src= "00:00:00:01:01:03" ,dst= "ff:ff:ff:ff:ff:ff" )/ARP(op=1,hwsrc= "00:00:00:01:01:03" ,hwdst= "00:00:00:00:00:00" ,psrc= "172.16.1.10" ,pdst= "172.16.1.10" ),iface= "veth0_s2" ) EOF   cat garp2.py   ip netns exec server0 python garp.py     # ovn-sbctl list port_binding  ovn-sbctl --bare --columns virtual_parent find port_binding logical_port=ls2-vir   ip netns exec server2 python garp2.py   # ovn-sbctl list port_binding  ovn-sbctl --bare --columns virtual_parent find port_binding logical_port=ls2-vir     No virtual_parent port is shown   _uuid               : 7dff48fb-5a28-4ebc-9ab4-90badf1e1ba2 additional_chassis  : [] additional_encap    : [] chassis             : [] datapath            : 39ddab3e-10fc-41ae-9777-cf210d85d195 encap               : [] external_ids        : {} gateway_chassis     : [] ha_chassis_group    : [] logical_port        : ls2-vir mac                 : [ "00:00:00:01:01:10 172.16.1.10" ] mirror_rules        : [] nat_addresses       : [] options             : {virtual-ip= "172.16.1.10" , virtual-parents= "ls2p1,ls2p2" } parent_port         : [] port_security       : [] requested_additional_chassis: [] requested_chassis   : [] tag                 : [] tunnel_key          : 3 type                : virtual up                  : false virtual_parent      : []
    • ssg_networking

      The issue is related to [bz-1762341|https://bugzilla.redhat.com/show_bug.cgi?id=1762341,]

      It is being experienced again in:

      # rpm -qa | grep -E 'ovn|openvswitch'
      openvswitch-selinux-extra-policy-1.0-39.el9fdp.noarch
      openvswitch3.3-3.3.4-108.el9fdp.x86_64
      ovn24.09-24.09.2-26.el9fdp.x86_64
      ovn24.09-central-24.09.2-26.el9fdp.x86_64
      ovn24.09-host-24.09.2-26.el9fdp.x86_64

      And

      # rpm -qa | grep -E 'ovn|openvswitch'
      openvswitch-selinux-extra-policy-1.0-39.el9fdp.noarch
      openvswitch3.3-3.3.4-108.el9fdp.x86_64
      ovn25.03-25.03.0-46.el9fdp.x86_64
      ovn25.03-central-25.03.0-46.el9fdp.x86_64
      ovn25.03-host-25.03.0-46.el9fdp.x86_64

      The virtual_parent field in the port_binding table for virtual port is not updated. 

              ovnteam@redhat.com OVN Team
              rhn-support-eelahi Ehsan Elahi
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated:
                Resolved: