summaryrefslogtreecommitdiff
path: root/nest/rt-table.c
diff options
context:
space:
mode:
authorMartin Mares <mj@ucw.cz>1998-10-17 11:05:18 +0000
committerMartin Mares <mj@ucw.cz>1998-10-17 11:05:18 +0000
commit47b793064c25c8adcab48cacc018be1675f2448a (patch)
treec6924c3fb31bf8cd7d650ad8e6c52c395457eca9 /nest/rt-table.c
parentd92882be9b1bfcc1a8e8a7bd552bdec4831694aa (diff)
Solve chicken-and-egg problems with protocol startup. We now queue all inactive
protocols and don't send route/interface updates to them and when they come up, we resend the whole route/interface tables privately. Removed the "scan interface list after protocol start" work-around.
Diffstat (limited to 'nest/rt-table.c')
-rw-r--r--nest/rt-table.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/nest/rt-table.c b/nest/rt-table.c
index 1d0c29c8..dc72c6b1 100644
--- a/nest/rt-table.c
+++ b/nest/rt-table.c
@@ -116,6 +116,28 @@ rte_announce(net *net, rte *new, rte *old)
p->rt_notify(p, net, new, old);
}
+void
+rt_feed_baby(struct proto *p)
+{
+ rtable *t = &master_table;
+
+ if (!p->rt_notify)
+ return;
+ debug("Announcing routes to new protocol %s\n", p->name);
+ while (t)
+ {
+ FIB_WALK(&t->fib, fn)
+ {
+ net *n = (net *) fn;
+ rte *e;
+ for(e=n->routes; e; e=e->next)
+ p->rt_notify(p, n, e, NULL);
+ }
+ FIB_WALK_END;
+ t = t->sibling;
+ }
+}
+
static inline void
rte_free(rte *e)
{