]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
o FIB flags now available for FIB users.
authorMartin Mares <mj@ucw.cz>
Sun, 18 Oct 1998 22:24:41 +0000 (22:24 +0000)
committerMartin Mares <mj@ucw.cz>
Sun, 18 Oct 1998 22:24:41 +0000 (22:24 +0000)
o  struct network: FIB flags used for kernel syncing.
o  struct network: `next' field deleted (historical relic).

nest/route.h
nest/rt-fib.c
nest/rt-table.c

index 78f9446a677756ffde6e94f4d84e6214751cd28c..39c6ef7bfb6bb825a87823053b3c3f784d481c5a 100644 (file)
@@ -29,7 +29,7 @@ struct proto;
 struct fib_node {
   ip_addr prefix;                      /* In host order */
   byte pxlen;
-  byte flags;                          /* ??? define them ??? */
+  byte flags;                          /* User-defined */
   byte pad0, pad1;                     /* ??? use ??? */
   struct fib_node *next;               /* Next in hash chain */
 };
@@ -65,6 +65,7 @@ void fib_free(struct fib *);          /* Destroy the fib */
  *     representing routes to given network.
  *     Each of the RTE's contains variable data (the preference and protocol-dependent
  *     metrics) and a pointer to a route attribute block common for many routes).
+ *     It's guaranteed that there is at most one RTE for every (prefix,proto,source) triplet.
  */
 
 typedef struct rtable {
@@ -72,15 +73,16 @@ typedef struct rtable {
   byte tos;                            /* TOS for this table */
   struct fib fib;
   char *name;                          /* Name of this table */
-  /* FIXME: Data for kernel synchronization */
 } rtable;
 
 typedef struct network {
-  struct fib_node n;
+  struct fib_node n;                   /* FIB flags hold kernel sync info (KRF_...) */
   struct rte *routes;                  /* Available routes for this network */
-  struct network *next;                        /* Next in Recalc Chain */
 } net;
 
+#define KRF_SEEN 1                     /* Seen in kernel table during last scan */
+#define KRF_UPDATE 2                   /* Need to update this entry */
+
 typedef struct rte {
   struct rte *next;
   struct rtattr *attrs;
index a6b5d57dfe28dad98defa3e1371a1f44dbbb9181..1522906e139d8bfb2c85b64ba21ff476a5b5b860 100644 (file)
@@ -112,7 +112,6 @@ fib_get(struct fib *f, ip_addr *a, int len)
   e = sl_alloc(f->fib_slab);
   e->prefix = *a;
   e->pxlen = len;
-  e->flags = 0;
   e->next = *ee;
   *ee = e;
   f->init(e);
index 0b8b7934d14e9dd122eefa1443735895dee49108..f278c517f29de497c2ac0735a37bc6b201440fda 100644 (file)
@@ -21,7 +21,7 @@ rte_init(struct fib_node *N)
 {
   net *n = (net *) N;
 
-  n->next = NULL;
+  N->flags = 0;
   n->routes = NULL;
 }