]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: Revert "zebra: probe local inactive neigh"
authorChirag Shah <chirag@cumulusnetworks.com>
Tue, 11 Aug 2020 21:28:20 +0000 (14:28 -0700)
committerChirag Shah <chirag@cumulusnetworks.com>
Tue, 11 Aug 2020 21:30:07 +0000 (14:30 -0700)
Reverting probing of neigh entry. There is a timing where
probe and remote macip add request comes at the same time resulting
in neigh to remain in local state event though it should be remote.

In mobility case, the host moves to remote VTEP, first MAC only type-2
route is received which triggers a PROBE of neighs (associated to MAC).
PROBE request can go via network port to remote VTEP.

PROBE request picks up local neigh with MAC entry's outgoing port is
remote VTEP tunnel port.
The PROBE reply and MAC-IP (containing IP) almost comes same time at
DUT.

DUT first processes remote macip and installs neigh as remote.
Followed by receives neigh as REACHABLE which marks neigh as LOCAL.

FRR does have BPF filter which does not allow its own netlink request
to receive. Otherwise frr's request to program neigh as remote can move
neigh from local to remote.

Though ordering can not be guranteed that REACHABLE (PROBE's repsonse)
can come at anytime and move it to LOCAL.

This fix would not suffice the needs of converging LOCAL inactive neighs
to remove from DB. As mobility draft sugges to PROBE local neigh when
MAC moves to remote but it is not working with current framework.

Ticket:CM-22864

Reverts commit: 44bc8ae5508975f216ad1cbb42884579896e7258

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
zebra/zebra_vxlan.c

index d85f48e570cef5418e7ce4f4f3f473ef9349fb8c..86e379ef26c64a6dd91305d53d51df32cc0a8a59 100644 (file)
@@ -112,7 +112,6 @@ static int zvni_neigh_send_del_to_client(vni_t vni, struct ipaddr *ip,
                                         uint8_t flags, int state);
 static int zvni_neigh_install(zebra_vni_t *zvni, zebra_neigh_t *n);
 static int zvni_neigh_uninstall(zebra_vni_t *zvni, zebra_neigh_t *n);
-static int zvni_neigh_probe(zebra_vni_t *zvni, zebra_neigh_t *n);
 static zebra_vni_t *zvni_from_svi(struct interface *ifp,
                                  struct interface *br_if);
 static struct interface *zvni_map_to_svi(vlanid_t vid, struct interface *br_if);
@@ -2449,18 +2448,6 @@ static void zvni_process_neigh_on_remote_mac_del(zebra_vni_t *zvni,
        /* NOTE: Currently a NO-OP. */
 }
 
-static void zvni_probe_neigh_on_mac_add(zebra_vni_t *zvni, zebra_mac_t *zmac)
-{
-       zebra_neigh_t *nbr = NULL;
-       struct listnode *node = NULL;
-
-       for (ALL_LIST_ELEMENTS_RO(zmac->neigh_list, node, nbr)) {
-               if (CHECK_FLAG(nbr->flags, ZEBRA_NEIGH_LOCAL) &&
-                   IS_ZEBRA_NEIGH_INACTIVE(nbr))
-                       zvni_neigh_probe(zvni, nbr);
-       }
-}
-
 /*
  * Inform BGP about local neighbor addition.
  */
@@ -2562,29 +2549,6 @@ static int zvni_neigh_uninstall(zebra_vni_t *zvni, zebra_neigh_t *n)
        return 0;
 }
 
-/*
- * Probe neighbor from the kernel.
- */
-static int zvni_neigh_probe(zebra_vni_t *zvni, zebra_neigh_t *n)
-{
-       struct zebra_if *zif;
-       struct zebra_l2info_vxlan *vxl;
-       struct interface *vlan_if;
-
-       zif = zvni->vxlan_if->info;
-       if (!zif)
-               return -1;
-       vxl = &zif->l2info.vxl;
-
-       vlan_if = zvni_map_to_svi(vxl->access_vlan, zif->brslave_info.br_if);
-       if (!vlan_if)
-               return -1;
-
-       dplane_neigh_update(vlan_if, &n->ip, &n->emac);
-
-       return 0;
-}
-
 /*
  * Install neighbor hash entry - called upon access VLAN change.
  */
@@ -5788,8 +5752,6 @@ static void process_remote_macip_add(vni_t vni,
                        zvni_neigh_install(zvni, n);
        }
 
-       zvni_probe_neigh_on_mac_add(zvni, mac);
-
        /* Update seq number. */
        n->rem_seq = seq;
 }