summaryrefslogtreecommitdiffstats
path: root/nest/rt-table.c
diff options
context:
space:
mode:
authorMartin Mares <mj@ucw.cz>1998-10-18 13:13:16 +0200
committerMartin Mares <mj@ucw.cz>1998-10-18 13:13:16 +0200
commit5b22683d2f27fcc5954cc9d4d58e55e539414d53 (patch)
tree028d2f41b2a4ab6c888f567619c4c4ca62ea50b3 /nest/rt-table.c
parent570ce189d77fc40841e8e9f8f86ea3c3840aa450 (diff)
downloadbird-5b22683d2f27fcc5954cc9d4d58e55e539414d53.tar
bird-5b22683d2f27fcc5954cc9d4d58e55e539414d53.zip
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.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/nest/rt-table.c b/nest/rt-table.c
index e04d599..0b8b793 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