diff options
-rw-r--r-- | nest/route.h | 10 | ||||
-rw-r--r-- | nest/rt-fib.c | 1 | ||||
-rw-r--r-- | nest/rt-table.c | 2 |
3 files changed, 7 insertions, 6 deletions
diff --git a/nest/route.h b/nest/route.h index 78f9446a..39c6ef7b 100644 --- a/nest/route.h +++ b/nest/route.h @@ -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; diff --git a/nest/rt-fib.c b/nest/rt-fib.c index a6b5d57d..1522906e 100644 --- a/nest/rt-fib.c +++ b/nest/rt-fib.c @@ -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); diff --git a/nest/rt-table.c b/nest/rt-table.c index 0b8b7934..f278c517 100644 --- a/nest/rt-table.c +++ b/nest/rt-table.c @@ -21,7 +21,7 @@ rte_init(struct fib_node *N) { net *n = (net *) N; - n->next = NULL; + N->flags = 0; n->routes = NULL; } |