diff options
author | Ondrej Zajicek <santiago@crfreenet.org> | 2010-09-03 17:15:02 +0200 |
---|---|---|
committer | Ondrej Zajicek <santiago@crfreenet.org> | 2010-09-03 17:15:02 +0200 |
commit | 948c865fac85f91dd7463195b190d8f133e0f741 (patch) | |
tree | e8a3a99efa99c04783405c046a07e4497cd14e46 | |
parent | 3cb6c83f1a2eb563e459ce34d0f4850cc9dd4776 (diff) |
Fixes a crash in RIP during reconfigure.
-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; |