From 783f8b689a29aaffbe75e964fdd09a3c219ea81c Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Sat, 13 Feb 1999 20:55:08 +0000 Subject: When protocols go down, prune the neighbor list. --- nest/iface.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'nest/iface.c') diff --git a/nest/iface.c b/nest/iface.c index a3dff4a..28e7739 100644 --- a/nest/iface.c +++ b/nest/iface.c @@ -23,7 +23,6 @@ static void auto_router_id(void); * Neighbor Cache * * FIXME: Use hashing to get some real speed. - * FIXME: Cleanup when a protocol goes down. */ static slab *neigh_slab; @@ -160,6 +159,30 @@ neigh_if_down(struct iface *i) } } +void +neigh_prune(void) +{ + neighbor *n, *m, **N; + struct iface *i; + + DBG("Pruning neighbors\n"); + WALK_LIST(i, iface_list) + { + N = &i->neigh; + while (n = *N) + { + if (n->proto->core_state == FS_HUNGRY || n->proto->core_state == FS_FLUSHING) + { + *N = n->sibling; + rem_node(&n->n); + sl_free(neigh_slab, n); + continue; + } + N = &n->sibling; + } + } +} + /* * The Interface List */ -- cgit v1.2.3