diff options
author | Martin Mares <mj@ucw.cz> | 1998-10-17 11:05:18 +0000 |
---|---|---|
committer | Martin Mares <mj@ucw.cz> | 1998-10-17 11:05:18 +0000 |
commit | 47b793064c25c8adcab48cacc018be1675f2448a (patch) | |
tree | c6924c3fb31bf8cd7d650ad8e6c52c395457eca9 /nest/rt-table.c | |
parent | d92882be9b1bfcc1a8e8a7bd552bdec4831694aa (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.c | 22 |
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) { |