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

arp_proxy flows answering back GARPs with Request operation

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Major Major
    • None
    • None
    • OVN
    • 13
    • False
    • Hide

      None

      Show
      None
    • False
    • Hide

      Given An ARP proxy is configured at a Logical Switch Port (LSP) with the values:
      `arp_proxy="0a:58:a9:fe:01:01 169.254.1.1 fe80::1 10.244.0.0/16"`and a Gratuitous ARP (GARP) packet with operation=1 arrives at an LSP within the logical switch owning the ARP proxy, 
      When, the GARP packet arrives at the LSP, 

      Then, the ARP proxy should respond directly to the GARP with an ARP reply (operation=2) instead of broadcasting it to all LSP ports.

      Show
      Given An ARP proxy is configured at a Logical Switch Port (LSP) with the values: `arp_proxy="0a:58:a9:fe:01:01 169.254.1.1 fe80::1 10.244.0.0/16"`and a Gratuitous ARP (GARP) packet with operation=1 arrives at an LSP within the logical switch owning the ARP proxy,  When, the GARP packet arrives at the LSP,  Then, the ARP proxy should respond directly to the GARP with an ARP reply (operation=2) instead of broadcasting it to all LSP ports.

      When arp_proxy is configured at a LSP with the following values

      arp_proxy="0a:58:a9:fe:01:01 169.254.1.1 fe80::1 10.244.0.0/16" 

      And an GARP with operation=1 arrive at a LSP withing the logical switch owning that the arp_proxy LSP ovn is answering back the GARP instead of broadcasting it to all the LSP ports.

      kubectl exec -c ovnkube-controller -n ovn-kubernetes pod/ovnkube-node-rbnfv -- ovn-trace --no-leader-only --db unix:/var/run/ovn/ovnsb_db.sock 'inport == "k8s-ovn-worker" && eth.dst == ff:ff:ff:ff:ff:ff && eth.src == 0a:58:a9:fe:01:01 && arp.op == 1 && arp.sha == 0a:58:a9:fe:01:01 && arp.spa == 10.244.1.10 && arp.tha == ff:ff:ff:ff:ff:ff && arp.tpa == 10.244.1.10'
      # arp,reg14=0x2,vlan_tci=0x0000,dl_src=0a:58:a9:fe:01:01,dl_dst=ff:ff:ff:ff:ff:ff,arp_spa=10.244.1.10,arp_tpa=10.244.1.10,arp_op=1,arp_sha=0a:58:a9:fe:01:01,arp_tha=ff:ff:ff:ff:ff:ff
      
      ingress(dp="ovn-worker", inport="k8s-ovn-worker")
      -------------------------------------------------
       0. ls_in_check_port_sec (northd.c:8675): 1, priority 50, uuid bab6606f
          reg0[15] = check_in_port_sec();
          next;
       4. ls_in_pre_acl (northd.c:5970): eth.mcast, priority 110, uuid a7fc3fb7
          next;
       5. ls_in_pre_lb (northd.c:6099): eth.mcast, priority 110, uuid 33c10d2f
          next;
       7. ls_in_acl_hint (northd.c:6303): !ct.trk, priority 5, uuid 156c03cf
          reg0[8] = 1;
          reg0[9] = 1;
          next;
       9. ls_in_acl_action (northd.c:6709): reg8[30..31] == 0, priority 500, uuid e758c8b4
          reg8[30..31] = 1;
          next(8);
       9. ls_in_acl_action (northd.c:6709): reg8[30..31] == 1, priority 500, uuid 5b579811
          reg8[30..31] = 2;
          next(8);
       9. ls_in_acl_action (northd.c:6698): 1, priority 0, uuid f683af1d
          reg8[16] = 0;
          reg8[17] = 0;
          reg8[18] = 0;
          reg8[30..31] = 0;
          next;
      19. ls_in_acl_after_lb_action (northd.c:6709): reg8[30..31] == 0, priority 500, uuid c693f70d
          reg8[30..31] = 1;
          next(18);
      19. ls_in_acl_after_lb_action (northd.c:6709): reg8[30..31] == 1, priority 500, uuid e01bdee5
          reg8[30..31] = 2;
          next(18);
      19. ls_in_acl_after_lb_action (northd.c:6698): 1, priority 0, uuid 8006b29e
          reg8[16] = 0;
          reg8[17] = 0;
          reg8[18] = 0;
          reg8[30..31] = 0;
          next;
      21. ls_in_arp_rsp (northd.c:8961): arp.op == 1 && arp.tpa == {169.254.1.1/32,10.244.0.0/16}, priority 30, uuid 03e3cce0
          eth.dst = eth.src;
          eth.src = 0a:58:a9:fe:01:01;
          arp.op = 2;
          arp.tha = arp.sha;
          arp.sha = 0a:58:a9:fe:01:01;
          arp.tpa <-> arp.spa;
          outport = inport;
          flags.loopback = 1;
          output;
      
      egress(dp="ovn-worker", inport="k8s-ovn-worker", outport="k8s-ovn-worker")
      --------------------------------------------------------------------------
       3. ls_out_acl_hint (northd.c:6303): !ct.trk, priority 5, uuid 49b6f9b8
          reg0[8] = 1;
          reg0[9] = 1;
          next;
       5. ls_out_acl_action (northd.c:6709): reg8[30..31] == 0, priority 500, uuid 56a5a8a4
          reg8[30..31] = 1;
          next(4);
       5. ls_out_acl_action (northd.c:6709): reg8[30..31] == 1, priority 500, uuid 511eb233
          reg8[30..31] = 2;
          next(4);
       5. ls_out_acl_action (northd.c:6698): 1, priority 0, uuid 8a126676
          reg8[16] = 0;
          reg8[17] = 0;
          reg8[18] = 0;
          reg8[30..31] = 0;
          next;
       9. ls_out_check_port_sec (northd.c:5803): 1, priority 0, uuid 24125899
          reg0[15] = check_out_port_sec();
          next;
      10. ls_out_apply_port_sec (northd.c:5810): 1, priority 0, uuid 403bc927
          output;
          /* output to "k8s-ovn-worker", type "" */ 

       

            ovnteam@redhat.com OVN Team
            ellorent Felix Enrique Llorente Pastora
            Jianlin Shi Jianlin Shi
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated: