summaryrefslogtreecommitdiff
path: root/zebra/zebra_router.h
diff options
context:
space:
mode:
Diffstat (limited to 'zebra/zebra_router.h')
-rw-r--r--zebra/zebra_router.h23
1 files changed, 20 insertions, 3 deletions
diff --git a/zebra/zebra_router.h b/zebra/zebra_router.h
index 6c9f3a0f28..e50f8a1186 100644
--- a/zebra/zebra_router.h
+++ b/zebra/zebra_router.h
@@ -50,6 +50,17 @@ RB_HEAD(zebra_router_table_head, zebra_router_table);
RB_PROTOTYPE(zebra_router_table_head, zebra_router_table,
zebra_router_table_entry, zebra_router_table_entry_compare)
+/* RPF lookup behaviour */
+enum multicast_mode {
+ MCAST_NO_CONFIG = 0, /* MIX_MRIB_FIRST, but no show in config write */
+ MCAST_MRIB_ONLY, /* MRIB only */
+ MCAST_URIB_ONLY, /* URIB only */
+ MCAST_MIX_MRIB_FIRST, /* MRIB, if nothing at all then URIB */
+ MCAST_MIX_DISTANCE, /* MRIB & URIB, lower distance wins */
+ MCAST_MIX_PFXLEN, /* MRIB & URIB, longer prefix wins */
+ /* on equal value, MRIB wins for last 2 */
+};
+
struct zebra_mlag_info {
/* Role this zebra router is playing */
enum mlag_role role;
@@ -82,9 +93,8 @@ struct zebra_router {
struct hash *iptable_hash;
-#if defined(HAVE_RTADV)
- struct rtadv rtadv;
-#endif /* HAVE_RTADV */
+ /* used if vrf backend is not network namespace */
+ int rtadv_sock;
/* A sequence number used for tracking routes */
_Atomic uint32_t sequence_num;
@@ -113,6 +123,9 @@ struct zebra_router {
uint32_t multipath_num;
+ /* RPF Lookup behavior */
+ enum multicast_mode ipv4_multicast_mode;
+
/*
* Time for when we sweep the rib from old routes
*/
@@ -153,6 +166,10 @@ static inline struct zebra_vrf *zebra_vrf_get_evpn(void)
: zebra_vrf_lookup_by_id(VRF_DEFAULT);
}
+extern void multicast_mode_ipv4_set(enum multicast_mode mode);
+
+extern enum multicast_mode multicast_mode_ipv4_get(void);
+
#ifdef __cplusplus
}
#endif