Fixes a crash in RIP during reconfigure.
This commit is contained in:
parent
3cb6c83f1a
commit
948c865fac
1 changed files with 5 additions and 13 deletions
|
@ -27,7 +27,7 @@
|
||||||
* We maintain our own linked list of &rip_entry structures -- it serves
|
* 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
|
* 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
|
* 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
|
* Within rip_tx(), the list is
|
||||||
* walked and a packet is generated using rip_tx_prepare(). This gets
|
* 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
|
static void
|
||||||
rip_rt_notify(struct proto *p, struct rtable *table UNUSED, struct network *net,
|
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;
|
CHK_MAGIC;
|
||||||
|
struct rip_entry *e;
|
||||||
|
|
||||||
if (old) {
|
e = fib_find( &P->rtable, &net->n.prefix, net->n.pxlen );
|
||||||
struct rip_entry *e = fib_find( &P->rtable, &net->n.prefix, net->n.pxlen );
|
if (e)
|
||||||
if (!e)
|
|
||||||
log( L_BUG "%s: Deleting nonexistent entry?!", p->name );
|
|
||||||
fib_delete( &P->rtable, e );
|
fib_delete( &P->rtable, e );
|
||||||
}
|
|
||||||
|
|
||||||
if (new) {
|
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 = fib_get( &P->rtable, &net->n.prefix, net->n.pxlen );
|
||||||
|
|
||||||
e->nexthop = new->attrs->gw;
|
e->nexthop = new->attrs->gw;
|
||||||
|
|
Loading…
Reference in a new issue