]> git.proxmox.com Git - mirror_frr.git/blobdiff - zebra/zebra_router.h
zebra: Add a second table for indexing by ID
[mirror_frr.git] / zebra / zebra_router.h
index b316b91d0d28b337cc50fe9e6362bae719747dda..cdf8fbe9e8baed597f29a1a1444519f14c2256d0 100644 (file)
@@ -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;
@@ -63,6 +74,8 @@ struct zebra_mlag_info {
 };
 
 struct zebra_router {
+       atomic_bool in_shutdown;
+
        /* Thread master */
        struct thread_master *master;
 
@@ -82,9 +95,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;
@@ -110,8 +122,26 @@ struct zebra_router {
         * The EVPN instance, if any
         */
        struct zebra_vrf *evpn_vrf;
+
+       uint32_t multipath_num;
+
+       /* RPF Lookup behavior */
+       enum multicast_mode ipv4_multicast_mode;
+
+       /*
+        * Time for when we sweep the rib from old routes
+        */
+       time_t startup_time;
+
+       /*
+        * The hash of nexthop groups associated with this router
+        */
+       struct hash *nhgs;
+       struct hash *nhgs_id;
 };
 
+#define GRACEFUL_RESTART_TIME 60
+
 extern struct zebra_router zrouter;
 
 extern void zebra_router_init(void);
@@ -128,8 +158,6 @@ extern void zebra_router_release_table(struct zebra_vrf *zvrf, uint32_t tableid,
 
 extern int zebra_router_config_write(struct vty *vty);
 
-extern unsigned long zebra_router_score_proto(uint8_t proto,
-                                             unsigned short instance);
 extern void zebra_router_sweep_route(void);
 
 extern void zebra_router_show_table_summary(struct vty *vty);
@@ -146,6 +174,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