Fixes a bug in NBMA on an iface with multiple IP addresses.
This commit is contained in:
parent
ac4a1eedfc
commit
faf58cec4d
2 changed files with 8 additions and 2 deletions
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue