Fixes a bug in NBMA on an iface with multiple IP addresses.

This commit is contained in:
Ondrej Zajicek 2010-08-22 14:43:53 +02:00
parent ac4a1eedfc
commit faf58cec4d
2 changed files with 8 additions and 2 deletions

View file

@ -472,6 +472,9 @@ ospf_iface_new(struct proto_ospf *po, struct iface *iface, struct ifa *addr,
WALK_LIST(nb, ip->nbma_list) WALK_LIST(nb, ip->nbma_list)
{ {
if (!ipa_in_net(nb->ip, addr->prefix, addr->pxlen))
continue;
nbma = mb_alloc(p->pool, sizeof(struct nbma_node)); nbma = mb_alloc(p->pool, sizeof(struct nbma_node));
nbma->ip = nb->ip; nbma->ip = nb->ip;
nbma->eligible = nb->eligible; nbma->eligible = nb->eligible;

View file

@ -855,7 +855,7 @@ ospf_reconfigure(struct proto *p, struct proto_config *c)
{ {
found = 0; found = 0;
WALK_LIST(nb2, newip->nbma_list) WALK_LIST(nb2, newip->nbma_list)
if (ipa_compare(nb1->ip, nb2->ip) == 0) if (ipa_equal(nb1->ip, nb2->ip))
{ {
found = 1; found = 1;
if (nb1->eligible != nb2->eligible) if (nb1->eligible != nb2->eligible)
@ -877,9 +877,12 @@ ospf_reconfigure(struct proto *p, struct proto_config *c)
/* And then add new */ /* And then add new */
WALK_LIST(nb2, newip->nbma_list) WALK_LIST(nb2, newip->nbma_list)
{ {
if (!ipa_in_net(nb2->ip, ifa->addr->prefix, ifa->addr->pxlen))
continue;
found = 0; found = 0;
WALK_LIST(nb1, ifa->nbma_list) WALK_LIST(nb1, ifa->nbma_list)
if (ipa_compare(nb1->ip, nb2->ip) == 0) if (ipa_equal(nb1->ip, nb2->ip))
{ {
found = 1; found = 1;
break; break;