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

ipv6 packets are always forwarded to the same gw when there are multiple ecmp routes

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Major Major
    • None
    • OVN FDP 24.C
    • ovn23.09
    • None
    • True
    • Hide

      Waiting for kernel fix in  RHEL-32061 to be ready for QE to implement OVN-specific tests.

      Show
      Waiting for kernel fix in  RHEL-32061 to be ready for QE to implement OVN-specific tests.
    • False
    • Impediment
    • rhel-9
    • rhel-sst-network-fastdatapath-ovn
    • ssg_networking
    • +

      Description:

      ipv6 packets are always forwarding to the same gw when there are multiple ecmp routes

      Version:

      ovn23.09-23.09.3-5.el9

      roducer:

       

      1. server
      #    foo -- R1 -- join - R2 -- alice  --   |                                           
      #           |          |                 server                 
      #    bar ----          - R3 --- bob ----   |                               
      #                                       
                                                                           
      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:20.0.211.25:6642 external_ids:ovn-encap-type=geneve external_ids:ovn-encap-ip=20.0.211.25
      systemctl restart ovn-controller                                 
                                                                           
      ovn-nbctl lr-add R1                                                
      ovn-nbctl lr-add R2                                                                         
      ovn-nbctl lr-add R3                                                  
                                                                         
      ovn-nbctl set logical_router R1 options:chassis=hv1                            
      ovn-nbctl set logical_router R2 options:chassis=hv1                  
      ovn-nbctl set logical_router R3 options:chassis=hv1                
                                                                                     
      ovn-nbctl ls-add foo                                       
      ovn-nbctl ls-add bar                                            
      ovn-nbctl ls-add alice                                         
      ovn-nbctl ls-add bob                                   
      ovn-nbctl ls-add join                                        
                                                                
      ovn-nbctl lrp-add R1 foo 00:00:01:01:02:03 192.168.1.1/24 2001::1/64                        
      ovn-nbctl lsp-add foo rp-foo -- set logical_switch_port rp-foo \
              type=router options:router-port=foo addresses=\"00:00:01:01:02:03\"
                                                                     
      ovn-nbctl lrp-add R1 bar 00:00:01:01:02:04 192.168.2.1/24 2002::1/64
      ovn-nbctl lsp-add bar rp-bar -- set Logical_Switch_Port rp-bar \
              type=router options:router-port=bar addresses=\"00:00:01:01:02:04\"
                                                                  
      ovn-nbctl lrp-add R2 alice 00:00:02:01:02:03 172.16.1.1/24 3001::1/64
      ovn-nbctl lsp-add alice rp-alice -- set Logical_Switch_Port rp-alice \
              type=router options:router-port=alice addresses=\"00:00:02:01:02:03\"
      ovn-nbctl lrp-add R3 bob 00:00:03:01:02:03 172.17.1.1/24 3002::1/64 
      ovn-nbctl lsp-add bob rp-bob -- set Logical_Switch_Port rp-bob \
              type=router options:router-port=bob addresses=\"00:00:03:01:02:03\"
                                                                       
      ovn-nbctl lrp-add R1 R1_join 00:00:04:01:02:03 20.0.0.1/24 4000::1/64
      ovn-nbctl lsp-add join r1-join -- set Logical_Switch_Port r1-join \
              type=router options:router-port=R1_join addresses='"00:00:04:01:02:03"'             
      ovn-nbctl lrp-add R2 R2_join 00:00:04:01:02:04 20.0.0.2/24 4000::2/64
      ovn-nbctl lsp-add join r2-join -- set Logical_Switch_Port r2-join \
              type=router options:router-port=R2_join addresses='"00:00:04:01:02:04"'
      ovn-nbctl lrp-add R3 R3_join 00:00:04:01:02:05 20.0.0.3/24 4000::3/64
      ovn-nbctl lsp-add join r3-join -- set Logical_Switch_Port r3-join \
              type=router options:router-port=R3_join addresses='"00:00:04:01:02:05"'
      
      
      ovn-nbctl lr-route-add R2 192.168.0.0/16 20.0.0.1               
      ovn-nbctl lr-route-add R3 192.168.0.0/16 20.0.0.1              
      ovn-nbctl lr-route-add R2 2001::/64 4000::1            
      ovn-nbctl lr-route-add R2 2002::/64 4000::1                  
      ovn-nbctl lr-route-add R3 2001::/64 4000::1               
      ovn-nbctl lr-route-add R3 2002::/64 4000::1                                                 
                                                                      
      ovn-nbctl lr-route-add R2 1.1.1.0/24 172.16.1.3                            
      ovn-nbctl lr-route-add R3 1.1.1.0/24 172.17.1.4                
      ovn-nbctl lr-route-add R2 1111::/64 3001::3                                            
      ovn-nbctl lr-route-add R3 1111::/64 3002::4                     
      
      
      ovn-nbctl lsp-add bar bar1 -- lsp-set-addresses bar1 'f0:00:00:01:02:05 192.168.2.2 2002::2'
                                                                                 
      ip netns add foo1                                           
      ovs-vsctl add-port br-int foo1 -- set interface foo1 type=internal   
      ip link set foo1 netns foo1                                           
      ip netns exec foo1 ip link set foo1 address f0:00:00:01:02:03                
      ip netns exec foo1 ip link set foo1 up                              
      ip netns exec foo1 ip addr add 192.168.1.2/24 dev foo1                  
      ip netns exec foo1 ip -6 addr add 2001::2/64 dev foo1                      
      ip netns exec foo1 ip route add default via  192.168.1.1 dev foo1
      ip netns exec foo1 ip -6 route add default via 2001::1 dev foo1      
      ovs-vsctl set interface foo1 external_ids:iface-id=foo1            
      ovn-nbctl lsp-add foo foo1 -- lsp-set-addresses foo1 "f0:00:00:01:02:03 192.168.1.2 2001::2"
                                                           
      ovs-vsctl add-br br_alice                                      
      ovs-vsctl add-br br_bob                                        
      ovs-vsctl set open . external-ids:ovn-bridge-mappings=net_alice:br_alice,net_bob:br_bob
                                       
      ovn-nbctl lsp-add alice ln_alice
      ovn-nbctl lsp-set-type ln_alice localnet
      ovn-nbctl lsp-set-addresses ln_alice unknown
      ovn-nbctl lsp-set-options ln_alice network_name=net_alice
      
      
      ip netns add alice1                                                 
      ovs-vsctl add-port br_alice alice1 -- set interface alice1 type=internal
      ip link set alice1 netns alice1                                            
      ip netns exec alice1 ip link set alice1 address f0:00:00:01:02:04
      ip netns exec alice1 ip link set alice1 up                           
      ip netns exec alice1 ip addr add 172.16.1.3/24 dev alice1          
      ip netns exec alice1 ip -6 addr add 3001::3/64 dev alice1                                   
      ip netns exec alice1 ip route add default via 172.16.1.1 dev alice1 
      ip netns exec alice1 ip -6 route add default via 3001::1 dev alice1
                                                                                     
      ovn-nbctl lsp-add bob ln_bob                                         
      ovn-nbctl lsp-set-type ln_bob localnet                             
      ovn-nbctl lsp-set-addresses ln_bob unknown                                     
      ovn-nbctl lsp-set-options ln_bob network_name=net_bob
                                                                      
      ip netns add bob1                                              
      ip link add bob1 netns bob1 type veth peer name bob1_br
      ip netns exec bob1 ip link set bob1 address f0:00:00:01:02:06
      ip netns exec bob1 ip link set bob1 up                    
      ip netns exec bob1 ip addr add 172.17.1.4/24 dev bob1                                       
      ip netns exec bob1 ip -6 addr add 3002::4/64 dev bob1
      ip netns exec bob1 ip route add default via 172.17.1.1 dev bob1
      ip netns exec bob1 ip -6 route add default via 3002::1 dev bob1
      ip link set bob1_br up                                                                 
      ovs-vsctl add-port br_bob bob1_br
                                      
      ip link add br_test type bridge         
      ip link set br_test up                      
                                                               
      ip link add a1 netns alice1 type veth peer name a1_br
      ip link add b1 netns bob1 type veth peer name b1_br
      ip link set a1_br master br_test                                        
      ip link set b1_br master br_test
      ip link set a1_br up                                             
      ip link set b1_br up                      
      ip netns exec alice1 ip link set a1 up                   
      ip netns exec bob1 ip link set b1 up                     
      ip netns exec alice1 ip addr add 1.1.1.1/24 dev a1                 
      ip netns exec alice1 ip -6 addr add 1111::1/64 dev a1              
      ip netns exec bob1 ip addr add 1.1.1.2/24 dev b1
      ip netns exec bob1 ip -6 addr add 1111::2/64 dev b1
                                            
      ip netns exec alice1 sysctl -w net.ipv4.conf.all.forwarding=1
      ip netns exec bob1 sysctl -w net.ipv4.conf.all.forwarding=1
      ip netns exec alice1 sysctl -w net.ipv6.conf.all.forwarding=1
      ip netns exec bob1 sysctl -w net.ipv6.conf.all.forwarding=1
      
      
      ip netns add server                             
      ip link add s1 netns server type veth peer name s1_br
      ip link set s1_br master br_test      
      ip link set s1_br up                                         
      ip netns exec server ip link set s1 up                     
      ip netns exec server ip addr add 1.1.1.10/24 dev s1          
      ip netns exec server ip route add default via 1.1.1.1 dev s1
      ip netns exec server ip -6 addr add 1111::10/64 dev s1 
      ip netns exec server ip -6 route add default via 1111::1 dev s1
      ip netns exec server sysctl -w net.ipv4.conf.all.rp_filter=0
      ip netns exec server sysctl -w net.ipv4.conf.default.rp_filter=0
                          
      ovn-nbctl --ecmp-symmetric-reply lr-route-add R1 0.0.0.0/0 20.0.0.2
      ovn-nbctl --ecmp-symmetric-reply lr-route-add R1 0.0.0.0/0 20.0.0.3
      ovn-nbctl --ecmp-symmetric-reply lr-route-add R1 ::/0 4000::2
      ovn-nbctl --ecmp-symmetric-reply lr-route-add R1 ::/0 4000::3
      ovn-nbctl --wait=hv sync
      2. client
      systemctl start openvswitch                                           
      ovs-vsctl set open . external_ids:system-id=hv0 external_ids:ovn-remote=tcp:20.0.211.25:6642 external_ids:ovn-encap-type=geneve external_ids:ovn-encap-ip=20.0.211.26
      systemctl restart ovn-controller                                 
                                                                           
      ip netns add bar1                                                  
      ip link add bar1 netns bar1 type veth peer name bar1_br                        
      ip netns exec bar1 ip link set bar1 address f0:00:00:01:02:05        
      ip netns exec bar1 ip link set bar1 up                             
      ip netns exec bar1 ip addr add 192.168.2.2/24 dev bar1                         
      ip netns exec bar1 ip -6 addr add 2002::2/64 dev bar1
      ip netns exec bar1 ip route add default via 192.168.2.1 dev bar1
      ip netns exec bar1 ip -6 route add default via 2002::1 dev bar1
      ip link set bar1_br up                                 
      ovs-vsctl add-port br-int bar1_br
      ovs-vsctl set interface bar1_br external_ids:iface-id=bar1
      3. start ncat on server
      ip netns exec server ncat -6 -l -k 10013 &
      4. connect to server on both foo1 and bar1
      for i in {1..100}; do                                                         
      ip netns exec bar1 ncat 1111::10 10013 <<< h; done 
      
      for i in {1..100}; do
      ip netns exec foo1 ncat 1111::10 10013 <<< h; done

      actual result:

      all packets are sent through the same gw (alice1 or bob1), not distributed

      packets can't be captured on alice1 or bob1

      expected result:

      packet should be distributed between the 2 gw (alice1 and bob1)

      packets can't be captured on both alice1 and bob1

       

      [root@wsfd-advnetlab18 FDP-371]# rpm -qa | grep -E "openvswitch|ovn"

      openvswitch-selinux-extra-policy-1.0-34.el9fdp.noarch

      openvswitch3.2-3.2.0-63.el9fdp.x86_64

      python3-openvswitch3.2-3.2.0-63.el9fdp.x86_64

      ovn23.09-23.09.3-5.el9fdp.x86_64

      ovn23.09-central-23.09.3-5.el9fdp.x86_64

      ovn23.09-host-23.09.3-5.el9fdp.x86_64

       

      [root@wsfd-advnetlab18 FDP-371]# ovn-nbctl lr-route-list R1
      IPv4 Routes
      Route Table <main>:
                      0.0.0.0/0                  20.0.0.2 dst-ip ecmp ecmp-symmetric-reply
                      0.0.0.0/0                  20.0.0.3 dst-ip ecmp ecmp-symmetric-reply
      
      IPv6 Routes
      Route Table <main>:
                           ::/0                   4000::2 dst-ip ecmp ecmp-symmetric-reply
                           ::/0                   4000::3 dst-ip ecmp ecmp-symmetric-reply 

       

       

       

        1. flow_br_int
          293 kB
        2. lflow_R1
          22 kB

              ovnteam@redhat.com OVN Team
              rhn-support-jishi Jianlin Shi
              Jianlin Shi Jianlin Shi
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

                Created:
                Updated:
                Resolved: