diff options
author | Martin Mares <mj@ucw.cz> | 1998-10-18 11:13:16 +0000 |
---|---|---|
committer | Martin Mares <mj@ucw.cz> | 1998-10-18 11:13:16 +0000 |
commit | 5b22683d2f27fcc5954cc9d4d58e55e539414d53 (patch) | |
tree | 028d2f41b2a4ab6c888f567619c4c4ca62ea50b3 /nest/rt-table.c | |
parent | 570ce189d77fc40841e8e9f8f86ea3c3840aa450 (diff) |
After contemplating about RIP route timeouts for a long time, I've implemented
protocol callbacks for route insertion and deletion from the central table.
RIP should maintain its own per-protocol queue of existing routes, scan it
periodically and call rte_discard() for routes that have timed out.
Diffstat (limited to 'nest/rt-table.c')
-rw-r--r-- | nest/rt-table.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/nest/rt-table.c b/nest/rt-table.c index e04d5990..0b8b7934 100644 --- a/nest/rt-table.c +++ b/nest/rt-table.c @@ -198,8 +198,20 @@ rte_update(net *net, struct proto *p, rte *new) } } if (old) - rte_free(old); + { + if (p->rte_remove) + p->rte_remove(net, old); + rte_free(old); + } new->lastmod = now; + if (p->rte_insert) + p->rte_insert(net, new); +} + +void +rte_discard(net *net, rte *old) /* Non-filtered route deletion, used during garbage collection */ +{ + rte_update(net, old->attrs->proto, NULL); } void |