Skip to content

Commit

Permalink
zebra: Revert "zebra: probe local inactive neigh"
Browse files Browse the repository at this point in the history
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

This reverts commit 44bc8ae

Signed-off-by: Chirag Shah <chirag@cumulusnetworks.com>
  • Loading branch information
chiragshah6 authored and pjdruddy committed Aug 12, 2020
1 parent 1718bc7 commit 707b76d
Show file tree
Hide file tree
Showing 3 changed files with 0 additions and 53 deletions.
19 changes: 0 additions & 19 deletions zebra/zebra_dplane.c
Original file line number Diff line number Diff line change
Expand Up @@ -3138,25 +3138,6 @@ enum zebra_dplane_result dplane_local_neigh_add(const struct interface *ifp,
return result;
}

/*
* Enqueue evpn neighbor update for the dataplane.
*/
enum zebra_dplane_result dplane_rem_neigh_update(const struct interface *ifp,
const struct ipaddr *ip,
const struct ethaddr *mac)
{
enum zebra_dplane_result result;
uint32_t update_flags = 0;

update_flags |= DPLANE_NEIGH_REMOTE;

result = neigh_update_internal(DPLANE_OP_NEIGH_UPDATE,
ifp, mac, ip, 0, DPLANE_NUD_PROBE,
update_flags);

return result;
}

/*
* Enqueue evpn neighbor delete for the dataplane.
*/
Expand Down
3 changes: 0 additions & 3 deletions zebra/zebra_dplane.h
Original file line number Diff line number Diff line change
Expand Up @@ -556,9 +556,6 @@ enum zebra_dplane_result dplane_local_neigh_add(const struct interface *ifp,
const struct ethaddr *mac,
bool set_router, bool set_static,
bool set_inactive);
enum zebra_dplane_result dplane_rem_neigh_update(const struct interface *ifp,
const struct ipaddr *ip,
const struct ethaddr *mac);
enum zebra_dplane_result dplane_rem_neigh_delete(const struct interface *ifp,
const struct ipaddr *ip);

Expand Down
31 changes: 0 additions & 31 deletions zebra/zebra_evpn_neigh.c
Original file line number Diff line number Diff line change
Expand Up @@ -1067,35 +1067,6 @@ void zebra_evpn_process_neigh_on_remote_mac_del(zebra_evpn_t *zevpn,
/* NOTE: Currently a NO-OP. */
}

/*
* Probe neighbor from the kernel.
*/
static int zebra_evpn_neigh_probe(zebra_evpn_t *zevpn, zebra_neigh_t *n)
{
struct interface *vlan_if;

vlan_if = zevpn_map_to_svi(zevpn);
if (!vlan_if)
return -1;

dplane_rem_neigh_update(vlan_if, &n->ip, &n->emac);

return 0;
}

static void zebra_evpn_probe_neigh_on_mac_add(zebra_evpn_t *zevpn,
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))
zebra_evpn_neigh_probe(zevpn, nbr);
}
}

static inline void zebra_evpn_local_neigh_update_log(
const char *pfx, zebra_neigh_t *n, bool is_router, bool local_inactive,
bool old_bgp_ready, bool new_bgp_ready, bool inform_dataplane,
Expand Down Expand Up @@ -2282,8 +2253,6 @@ void process_neigh_remote_macip_add(zebra_evpn_t *zevpn, struct zebra_vrf *zvrf,
zebra_evpn_rem_neigh_install(zevpn, n, old_static);
}

zebra_evpn_probe_neigh_on_mac_add(zevpn, mac);

/* Update seq number. */
n->rem_seq = seq;
}
Expand Down

0 comments on commit 707b76d

Please sign in to comment.