summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOndrej Zajicek <santiago@crfreenet.org>2010-08-22 14:43:53 +0200
committerOndrej Zajicek <santiago@crfreenet.org>2010-10-04 20:09:21 +0200
commit0c69be079abfd43b683c2d9daed3e9d42fd09ec2 (patch)
tree4bdc52e202573ed923191918c76d787ed9646617
parent2083c12f7d4e2617d5163da0e56b741a98270d6c (diff)
Fixes a bug in NBMA on an iface with multiple IP addresses.
-rw-r--r--proto/ospf/iface.c3
-rw-r--r--proto/ospf/ospf.c7
2 files changed, 8 insertions, 2 deletions
diff --git a/proto/ospf/iface.c b/proto/ospf/iface.c
index bef31125..04868baa 100644
--- a/proto/ospf/iface.c
+++ b/proto/ospf/iface.c
@@ -472,6 +472,9 @@ ospf_iface_new(struct proto_ospf *po, struct iface *iface, struct ifa *addr,
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->ip = nb->ip;
nbma->eligible = nb->eligible;
diff --git a/proto/ospf/ospf.c b/proto/ospf/ospf.c
index 316d7292..0d8030b9 100644
--- a/proto/ospf/ospf.c
+++ b/proto/ospf/ospf.c
@@ -851,7 +851,7 @@ ospf_reconfigure(struct proto *p, struct proto_config *c)
{
found = 0;
WALK_LIST(nb2, newip->nbma_list)
- if (ipa_compare(nb1->ip, nb2->ip) == 0)
+ if (ipa_equal(nb1->ip, nb2->ip))
{
found = 1;
if (nb1->eligible != nb2->eligible)
@@ -873,9 +873,12 @@ ospf_reconfigure(struct proto *p, struct proto_config *c)
/* And then add new */
WALK_LIST(nb2, newip->nbma_list)
{
+ if (!ipa_in_net(nb2->ip, ifa->addr->prefix, ifa->addr->pxlen))
+ continue;
+
found = 0;
WALK_LIST(nb1, ifa->nbma_list)
- if (ipa_compare(nb1->ip, nb2->ip) == 0)
+ if (ipa_equal(nb1->ip, nb2->ip))
{
found = 1;
break;