summaryrefslogtreecommitdiff
path: root/zebra/zebra_evpn_mac.h
diff options
context:
space:
mode:
authorAnuradha Karuppiah <anuradhak@cumulusnetworks.com>2020-09-08 06:56:33 -0700
committerAnuradha Karuppiah <anuradhak@nvidia.com>2021-02-24 08:11:24 -0800
commit8b07f173e871f7d0c40084861c2d15fef6e79383 (patch)
tree404e9784566ed808a996ddc7dcfe22f44cf376cf /zebra/zebra_evpn_mac.h
parent00a7710c25aae45874622d69f5cea6ea6dff0a47 (diff)
zebra: link local MACs to destination port for efficient lacp-bypass processing
When an ES-bond comes out of bypass FRR needs to flush the local MACs learnt while the bond was in bypass. To do that efficiently local MACs are linked to the dest-access port. This only happens if the access-port is in LACP-bypass or if it is non-ES. Signed-off-by: Anuradha Karuppiah <anuradhak@cumulusnetworks.com>
Diffstat (limited to 'zebra/zebra_evpn_mac.h')
-rw-r--r--zebra/zebra_evpn_mac.h16
1 files changed, 15 insertions, 1 deletions
diff --git a/zebra/zebra_evpn_mac.h b/zebra/zebra_evpn_mac.h
index b8159914a2..fb162f1a93 100644
--- a/zebra/zebra_evpn_mac.h
+++ b/zebra/zebra_evpn_mac.h
@@ -90,7 +90,9 @@ struct zebra_mac_t_ {
/* back pointer to zevpn */
zebra_evpn_t *zevpn;
- /* Local or remote info. */
+ /* Local or remote info.
+ * Note: fwd_info is only relevant if mac->es is NULL.
+ */
union {
struct {
ifindex_t ifindex;
@@ -106,6 +108,16 @@ struct zebra_mac_t_ {
/* memory used to link the mac to the es */
struct listnode es_listnode;
+ /* access-port/bridge member. only relevant for local macs that
+ * are associated with a zero-ESI,
+ * XXX - this belongs in fwd_info.local; however fwd_info is
+ * being cleared and memset to zero in different ways that can
+ * mess up the links.
+ */
+ struct interface *ifp;
+ /* memory used to link the mac to the ifp */
+ struct listnode ifp_listnode;
+
/* Mobility sequence numbers associated with this entry. */
uint32_t rem_seq;
uint32_t loc_seq;
@@ -269,6 +281,8 @@ int zebra_evpn_mac_gw_macip_add(struct interface *ifp, zebra_evpn_t *zevpn,
bool def_gw);
void zebra_evpn_mac_svi_add(struct interface *ifp, zebra_evpn_t *zevpn);
void zebra_evpn_mac_svi_del(struct interface *ifp, zebra_evpn_t *zevpn);
+void zebra_evpn_mac_ifp_del(struct interface *ifp);
+void zebra_evpn_mac_clear_fwd_info(zebra_mac_t *zmac);
#ifdef __cplusplus
}