diff options
author | Ondrej Zajicek <santiago@crfreenet.org> | 2010-09-03 17:15:02 +0200 |
---|---|---|
committer | Ondrej Zajicek <santiago@crfreenet.org> | 2010-10-04 20:09:46 +0200 |
commit | 8f2d438844d22319cf08af9e5ac66967fb1fab1b (patch) | |
tree | d18a47772238b9ee1b4088a3178d99a2691106cf /proto/rip/rip.c | |
parent | c4f8e745f8767356895f053ad60ed98c6473a4ea (diff) |
Fixes a crash in RIP during reconfigure.
Diffstat (limited to 'proto/rip/rip.c')
-rw-r--r-- | proto/rip/rip.c | 18 |
1 files changed, 5 insertions, 13 deletions
diff --git a/proto/rip/rip.c b/proto/rip/rip.c index 4b60d751..4b3de2ea 100644 --- a/proto/rip/rip.c +++ b/proto/rip/rip.c @@ -27,7 +27,7 @@ * We maintain our own linked list of &rip_entry structures -- it serves * as our small routing table. RIP never adds to this linked list upon * packet reception; instead, it lets the core know about data from the packet - * and waits for the core to call rip_rte_notify(). + * and waits for the core to call rip_rt_notify(). * * Within rip_tx(), the list is * walked and a packet is generated using rip_tx_prepare(). This gets @@ -868,24 +868,16 @@ rip_store_tmp_attrs(struct rte *rt, struct ea_list *attrs) */ static void rip_rt_notify(struct proto *p, struct rtable *table UNUSED, struct network *net, - struct rte *new, struct rte *old, struct ea_list *attrs) + struct rte *new, struct rte *old UNUSED, struct ea_list *attrs) { CHK_MAGIC; + struct rip_entry *e; - if (old) { - struct rip_entry *e = fib_find( &P->rtable, &net->n.prefix, net->n.pxlen ); - if (!e) - log( L_BUG "%s: Deleting nonexistent entry?!", p->name ); + e = fib_find( &P->rtable, &net->n.prefix, net->n.pxlen ); + if (e) fib_delete( &P->rtable, e ); - } if (new) { - struct rip_entry *e; -#if 0 - /* This can happen since feeding of protocols is asynchronous */ - if (fib_find( &P->rtable, &net->n.prefix, net->n.pxlen )) - log( L_BUG "%s: Inserting entry which is already there?", p->name ); -#endif e = fib_get( &P->rtable, &net->n.prefix, net->n.pxlen ); e->nexthop = new->attrs->gw; |