]> git.proxmox.com Git - mirror_frr.git/blobdiff - zebra/rib.h
Merge pull request #1515 from donaldsharp/selected_to_front1
[mirror_frr.git] / zebra / rib.h
index eca2be5eeec7a4160b608d5e3a267aae9c511ab1..804372f18e1157037188a3faf25abc90ea528edb 100644 (file)
@@ -45,9 +45,6 @@ struct route_entry {
        /* Nexthop structure */
        struct nexthop *nexthop;
 
-       /* Refrence count. */
-       unsigned long refcnt;
-
        /* Tag */
        route_tag_t tag;
 
@@ -74,7 +71,7 @@ struct route_entry {
        u_int32_t nexthop_mtu;
 
        /* Distance. */
-       u_char distance;
+       uint8_t distance;
 
        /* Flags of this route.
         * This flag's definition is in lib/zebra.h ZEBRA_FLAG_* and is exposed
@@ -88,7 +85,7 @@ struct route_entry {
 /* to simplify NHT logic when NHs change, instead of doing a NH by NH cmp */
 #define ROUTE_ENTRY_NEXTHOPS_CHANGED 0x2
 #define ROUTE_ENTRY_CHANGED          0x4
-#define ROUTE_ENTRY_SELECTED_FIB     0x8
+#define ROUTE_ENTRY_LABELS_CHANGED   0x8
 
        /* Nexthop information. */
        u_char nexthop_num;
@@ -124,6 +121,8 @@ typedef struct rib_dest_t_ {
         */
        struct route_entry *routes;
 
+       struct route_entry *selected_fib;
+
        /*
         * Flags, see below.
         */
@@ -137,6 +136,8 @@ typedef struct rib_dest_t_ {
 } rib_dest_t;
 
 #define RIB_ROUTE_QUEUED(x)    (1 << (x))
+// If MQ_SIZE is modified this value needs to be updated.
+#define RIB_ROUTE_ANY_QUEUED    0x1F
 
 /*
  * The maximum qindex that can be used.
@@ -230,7 +231,8 @@ typedef enum {
 
 extern struct nexthop *route_entry_nexthop_ifindex_add(struct route_entry *,
                                                       ifindex_t);
-extern struct nexthop *route_entry_nexthop_blackhole_add(struct route_entry *);
+extern struct nexthop *route_entry_nexthop_blackhole_add(struct route_entry *,
+                                                        enum blackhole_type);
 extern struct nexthop *route_entry_nexthop_ipv4_add(struct route_entry *,
                                                    struct in_addr *,
                                                    struct in_addr *);
@@ -284,26 +286,26 @@ extern int zebra_check_addr(struct prefix *p);
 extern void rib_addnode(struct route_node *rn, struct route_entry *re,
                        int process);
 extern void rib_delnode(struct route_node *rn, struct route_entry *re);
-extern int rib_install_kernel(struct route_node *rn, struct route_entry *re,
-                             struct route_entry *old);
-extern int rib_uninstall_kernel(struct route_node *rn, struct route_entry *re);
+extern void rib_install_kernel(struct route_node *rn, struct route_entry *re,
+                              struct route_entry *old);
+extern void rib_uninstall_kernel(struct route_node *rn, struct route_entry *re);
 
 /* NOTE:
  * All rib_add function will not just add prefix into RIB, but
  * also implicitly withdraw equal prefix of same type. */
 extern int rib_add(afi_t afi, safi_t safi, vrf_id_t vrf_id, int type,
                   u_short instance, int flags, struct prefix *p,
-                  struct prefix_ipv6 *src_p, union g_addr *gate,
-                  union g_addr *src, ifindex_t ifindex, u_int32_t table_id,
-                  u_int32_t, u_int32_t, u_char);
+                  struct prefix_ipv6 *src_p, const struct nexthop *nh,
+                  u_int32_t table_id, u_int32_t metric, u_int32_t mtu,
+                  uint8_t distance, route_tag_t tag);
 
 extern int rib_add_multipath(afi_t afi, safi_t safi, struct prefix *,
                             struct prefix_ipv6 *src_p, struct route_entry *);
 
 extern void rib_delete(afi_t afi, safi_t safi, vrf_id_t vrf_id, int type,
                       u_short instance, int flags, struct prefix *p,
-                      struct prefix_ipv6 *src_p, union g_addr *gate,
-                      ifindex_t ifindex, u_int32_t table_id);
+                      struct prefix_ipv6 *src_p, const struct nexthop *nh,
+                      u_int32_t table_id, u_int32_t metric, bool fromkernel);
 
 extern struct route_entry *rib_match(afi_t afi, safi_t safi, vrf_id_t,
                                     union g_addr *,
@@ -329,7 +331,7 @@ extern void rib_unlink(struct route_node *, struct route_entry *);
 extern int rib_gc_dest(struct route_node *rn);
 extern struct route_table *rib_tables_iter_next(rib_tables_iter_t *iter);
 
-extern u_char route_distance(int type);
+extern uint8_t route_distance(int type);
 
 /*
  * Inline functions.
@@ -434,4 +436,8 @@ static inline void rib_tables_iter_cleanup(rib_tables_iter_t *iter)
 DECLARE_HOOK(rib_update, (struct route_node * rn, const char *reason),
             (rn, reason))
 
+
+extern void zebra_vty_init(void);
+extern pid_t pid;
+
 #endif /*_ZEBRA_RIB_H */