summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Mares <mj@ucw.cz>1998-10-18 22:24:41 +0000
committerMartin Mares <mj@ucw.cz>1998-10-18 22:24:41 +0000
commit4c45595e3bb9f0b605e3102742831dad8915b309 (patch)
treee797e093c90d52cdb36cb53215b2f9fb0643a4c1
parentab3a76a382745e0195b213c6d87ddc0e3cabd690 (diff)
o FIB flags now available for FIB users.
o struct network: FIB flags used for kernel syncing. o struct network: `next' field deleted (historical relic).
-rw-r--r--nest/route.h10
-rw-r--r--nest/rt-fib.c1
-rw-r--r--nest/rt-table.c2
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;
}