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

[balance-slb]ovs-bond port receive DUP packets

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Normal Normal
    • None
    • rhel-9, rhel-10
    • openvswitch3.3
    • 3
    • False
    • Hide

      None

      Show
      None
    • False
    • Hide

      Given the system administrator has disabled LACP on the OVS balance-slb configuration and the MAC address is not yet recorded on the physical switch, 

      When the virtual port receives packets and initiates communication, 

      Then, the OVS balance-slb mode correctly identifies and drops duplicate packets received on multiple interfaces. This way only one interface processes each packet.

      Show
      Given the system administrator has disabled LACP on the OVS balance-slb configuration and the MAC address is not yet recorded on the physical switch,  When the virtual port receives packets and initiates communication,  Then, the OVS balance-slb mode correctly identifies and drops duplicate packets received on multiple interfaces. This way only one interface processes each packet.
    • rhel-sst-network-fastdatapath
    • ssg_networking
    • Moderate

      Description of problem:

      Disable lacp negotiation on ovs balance-slb port. When physical switch didn't have a dynamical mac record, in this time send packets from ovs-bond port will receive DUP packets. Balance-slb has a limitation when disabled lacp.

       

      Version-Release number of selected component (if applicable):

      in this case, I use rhel10 to emulate this issue.

      openvswitch3.3-3.3.0-8.el10fdp.x86_64

      kernel version: 6.11.0-25.el10.x86_64+rt

      E810 nic firmware-version: 4.60 0x8001e8b3 1.3682.0:

      DUT switch topo:

      ens3f0np0 --> 9364 Eth1/3/4

      ens3f1np1 --> 9364 Eth1/3/3

      peer site switch topo:

      ens3f0np0(i40e xxv710) --> 9364 Eth1/7/3

       

      How reproducible: 100%

      Steps to Reproduce:

      1.down-up switch port, make sure no mac address record in address-table.

       

      swcfg ssh 9364
      configure
      interface eth1/3/3-4
      shutdown
      no shutdown
      sw-cisco9364(config-if-range)# show mac address-table interface eth1/3/3  
      Legend: 
          * - primary entry, G - Gateway MAC, (R) - Routed MAC, O - Overlay MAC
          age - seconds since last seen,+ - primary entry using vPC Peer-Link,
          (T) - True, (F) - False, C - ControlPlane MAC, ~ - vsan
         VLAN     MAC Address      Type      age     Secure NTFY Ports
      ---------+-----------------+--------+---------+------+----+------------------
       sw-cisco9364(config-if-range)# show mac address-table interface eth1/3/4 
      Legend:
          * - primary entry, G - Gateway MAC, (R) - Routed MAC, O - Overlay MAC
          age - seconds since last seen,+ - primary entry using vPC Peer-Link,
          (T) - True, (F) - False, C - ControlPlane MAC, ~ - vsan
         VLAN     MAC Address      Type      age     Secure NTFY Ports
      ---------+-----------------+--------+---------+------+----+------------------
       

       

      2. run below step

      ip netns add test0
      ip netns exec test0 sysctl -w net.ipv6.conf.all.autoconf=1
      ip netns exec test0 sysctl -w net.ipv6.conf.all.accept_ra=0
      ip netns exec test0 sysctl -w net.ipv6.conf.default.autoconf=1
      ip netns exec test0 sysctl -w net.ipv6.conf.default.accept_ra=0
      ip netns exec test0 sysctl -w net.ipv6.conf.test0.autoconf=1
      ip netns exec test0 sysctl -w net.ipv6.conf.test0.accept_ra=0
      ip link add test0 type veth peer name ovs-test0
      ip link set test0 netns test0
      ip netns exec test0 ip link set test0 up
      ip netns exec test0 ip addr add 172.118.118.2/24 dev test0
      ip netns exec test0 ip addr add 2024:db8:118:118::2/64 dev test0
      ip link set ens3f0np0 up
      ip link set ens3f1np1 up
      ip link set ens3f0np0 mtu 9000
      ip link set ens3f1np1 mtu 9000
      ovs-vsctl --may-exist add-br bondbridge -- set bridge bondbridge mcast_snooping_enable=true other-config:mac-aging-time=15 other-config:mcast-snooping-aging-time=15
      ovs-vsctl add-bond bondbridge balance-slb ens3f0np0 ens3f1np1 lacp=off bond_mode=balance-slb  \
          -- set Interface ens3f0np0 mtu_request=9000  \
          -- set Interface ens3f1np1 mtu_request=9000 
      ovs-ofctl mod-port bondbridge bondbridge up
      ovs-vsctl set int bondbridge mtu_request=9000
      ovs-vsctl add-port bondbridge ovs-test0
      ip link set ovs-test0 up
      ip link set ovs-test0 mtu 9000
      ip netns exec test0 ip link set test0 mtu 9000
      
      ovs-ofctl del-flows bondbridge
      ovs-ofctl add-flow bondbridge actions=NORMAL
      ovs-appctl fdb/flush bondbridge
      ovs-appctl mdb/flush bondbridge
      ovs-appctl bond/show
      ---- balance-slb ----
      bond_mode: balance-slb
      bond may use recirculation: no, Recirc-ID : -1
      bond-hash-basis: 0
      lb_output action: disabled, bond-id: -1
      all members active: false
      updelay: 0 ms
      downdelay: 0 ms
      next rebalance: 7616 ms
      lacp_status: off
      lacp_fallback_ab: false
      active-backup primary: <none>
      active member mac: b4:96:91:a5:d0:e7(ens3f1np1)member ens3f0np0: enabled
        may_enable: truemember ens3f1np1: enabled
        active member
        may_enable: true
       sleep 16
      ip netns exec test0 ip a
      1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
          link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
      2486: test0@if2485: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc noqueue state UP group default qlen 1000
          link/ether 56:6b:93:39:86:b8 brd ff:ff:ff:ff:ff:ff link-netnsid 0
          inet 172.118.118.2/24 scope global test0
             valid_lft forever preferred_lft forever
          inet6 2024:db8:118:118::2/64 scope global 
             valid_lft forever preferred_lft forever
       ip netns exec test0 ping -c 10 172.118.118.1
      PING 172.118.118.1 (172.118.118.1) 56(84) bytes of data.
      64 bytes from 172.118.118.1: icmp_seq=1 ttl=64 time=0.381 ms
      64 bytes from 172.118.118.1: icmp_seq=1 ttl=64 time=0.402 ms (DUP!)
      64 bytes from 172.118.118.1: icmp_seq=2 ttl=64 time=0.056 ms
      64 bytes from 172.118.118.1: icmp_seq=3 ttl=64 time=0.056 ms
      64 bytes from 172.118.118.1: icmp_seq=4 ttl=64 time=0.061 ms
      64 bytes from 172.118.118.1: icmp_seq=5 ttl=64 time=0.055 ms
      64 bytes from 172.118.118.1: icmp_seq=6 ttl=64 time=0.054 ms
      64 bytes from 172.118.118.1: icmp_seq=7 ttl=64 time=0.044 ms
      64 bytes from 172.118.118.1: icmp_seq=8 ttl=64 time=0.046 ms
      64 bytes from 172.118.118.1: icmp_seq=9 ttl=64 time=0.046 ms
      64 bytes from 172.118.118.1: icmp_seq=10 ttl=64 time=0.049 ms
      

      3.using tcpdump to capture each slave interface on balance-slb

      for ens3f0np0

      [root@hp-dl388g10-03 ovs_bond_function]# tcpdump -i ens3f0np0 -ne ether src 56:6b:93:39:86:b8 or ether dst 56:6b:93:39:86:b8
      dropped privs to tcpdump
      tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
      listening on ens3f0np0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
      04:15:41.625525 56:6b:93:39:86:b8 > 40:a6:b7:0e:d0:90, ethertype IPv4 (0x0800), length 98: 172.118.118.2 > 172.118.118.1: ICMP echo request, id 10141, seq 1, length 64
      04:15:41.625707 56:6b:93:39:86:b8 > 40:a6:b7:0e:d0:90, ethertype ARP (0x0806), length 42: Reply 172.118.118.2 is-at 56:6b:93:39:86:b8, length 28
      04:15:41.625744 40:a6:b7:0e:d0:90 > 56:6b:93:39:86:b8, ethertype IPv4 (0x0800), length 98: 172.118.118.1 > 172.118.118.2: ICMP echo reply, id 10141, seq 1, length 64
      04:15:42.645726 56:6b:93:39:86:b8 > 40:a6:b7:0e:d0:90, ethertype IPv4 (0x0800), length 98: 172.118.118.2 > 172.118.118.1: ICMP echo request, id 10141, seq 2, length 64
      04:15:42.645757 40:a6:b7:0e:d0:90 > 56:6b:93:39:86:b8, ethertype IPv4 (0x0800), length 98: 172.118.118.1 > 172.118.118.2: ICMP echo reply, id 10141, seq 2, length 64
      04:15:43.669722 56:6b:93:39:86:b8 > 40:a6:b7:0e:d0:90, ethertype IPv4 (0x0800), length 98: 172.118.118.2 > 172.118.118.1: ICMP echo request, id 10141, seq 3, length 64
      04:15:43.669755 40:a6:b7:0e:d0:90 > 56:6b:93:39:86:b8, ethertype IPv4 (0x0800), length 98: 172.118.118.1 > 172.118.118.2: ICMP echo reply, id 10141, seq 3, length 64
      04:15:44.693479 56:6b:93:39:86:b8 > 40:a6:b7:0e:d0:90, ethertype IPv4 (0x0800), length 98: 172.118.118.2 > 172.118.118.1: ICMP echo request, id 10141, seq 4, length 64
      04:15:44.693513 40:a6:b7:0e:d0:90 > 56:6b:93:39:86:b8, ethertype IPv4 (0x0800), length 98: 172.118.118.1 > 172.118.118.2: ICMP echo reply, id 10141, seq 4, length 64
      04:15:45.717472 56:6b:93:39:86:b8 > 40:a6:b7:0e:d0:90, ethertype IPv4 (0x0800), length 98: 172.118.118.2 > 172.118.118.1: ICMP echo request, id 10141, seq 5, length 64
      04:15:45.717506 40:a6:b7:0e:d0:90 > 56:6b:93:39:86:b8, ethertype IPv4 (0x0800), length 98: 172.118.118.1 > 172.118.118.2: ICMP echo reply, id 10141, seq 5, length 64
      04:15:46.741473 56:6b:93:39:86:b8 > 40:a6:b7:0e:d0:90, ethertype IPv4 (0x0800), length 98: 172.118.118.2 > 172.118.118.1: ICMP echo request, id 10141, seq 6, length 64
      04:15:46.741507 40:a6:b7:0e:d0:90 > 56:6b:93:39:86:b8, ethertype IPv4 (0x0800), length 98: 172.118.118.1 > 172.118.118.2: ICMP echo reply, id 10141, seq 6, length 64
      04:15:46.869475 56:6b:93:39:86:b8 > 40:a6:b7:0e:d0:90, ethertype ARP (0x0806), length 42: Request who-has 172.118.118.1 tell 172.118.118.2, length 28
      04:15:46.869504 40:a6:b7:0e:d0:90 > 56:6b:93:39:86:b8, ethertype ARP (0x0806), length 60: Reply 172.118.118.1 is-at 40:a6:b7:0e:d0:90, length 46
      04:15:47.765466 56:6b:93:39:86:b8 > 40:a6:b7:0e:d0:90, ethertype IPv4 (0x0800), length 98: 172.118.118.2 > 172.118.118.1: ICMP echo request, id 10141, seq 7, length 64
      04:15:47.765494 40:a6:b7:0e:d0:90 > 56:6b:93:39:86:b8, ethertype IPv4 (0x0800), length 98: 172.118.118.1 > 172.118.118.2: ICMP echo reply, id 10141, seq 7, length 64
      04:15:48.789467 56:6b:93:39:86:b8 > 40:a6:b7:0e:d0:90, ethertype IPv4 (0x0800), length 98: 172.118.118.2 > 172.118.118.1: ICMP echo request, id 10141, seq 8, length 64
      04:15:48.789497 40:a6:b7:0e:d0:90 > 56:6b:93:39:86:b8, ethertype IPv4 (0x0800), length 98: 172.118.118.1 > 172.118.118.2: ICMP echo reply, id 10141, seq 8, length 64
      04:15:49.813468 56:6b:93:39:86:b8 > 40:a6:b7:0e:d0:90, ethertype IPv4 (0x0800), length 98: 172.118.118.2 > 172.118.118.1: ICMP echo request, id 10141, seq 9, length 64
      04:15:49.813497 40:a6:b7:0e:d0:90 > 56:6b:93:39:86:b8, ethertype IPv4 (0x0800), length 98: 172.118.118.1 > 172.118.118.2: ICMP echo reply, id 10141, seq 9, length 64
      04:15:50.837470 56:6b:93:39:86:b8 > 40:a6:b7:0e:d0:90, ethertype IPv4 (0x0800), length 98: 172.118.118.2 > 172.118.118.1: ICMP echo request, id 10141, seq 10, length 64
      04:15:50.837499 40:a6:b7:0e:d0:90 > 56:6b:93:39:86:b8, ethertype IPv4 (0x0800), length 98: 172.118.118.1 > 172.118.118.2: ICMP echo reply, id 10141, seq 10, length 64
       

      for ens3f1np1

      [root@hp-dl388g10-03 ovs_bond_function]# tcpdump -i ens3f1np1 -ne ether src 56:6b:93:39:86:b8 or ether dst 56:6b:93:39:86:b8
      dropped privs to tcpdump
      tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
      listening on ens3f1np1, link-type EN10MB (Ethernet), snapshot length 262144 bytes
      04:15:41.625735 40:a6:b7:0e:d0:90 > 56:6b:93:39:86:b8, ethertype IPv4 (0x0800), length 98: 172.118.118.1 > 172.118.118.2: ICMP echo reply, id 10141, seq 1, length 64 

      Actual results:

      Receive a DUP packets.

       

       
       

              ovsdpdk-triage ovsdpdk triage
              mhou@redhat.com Minxi Hou
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Created:
                Updated: