summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOndrej Zajicek <santiago@crfreenet.org>2011-05-01 17:16:05 +0200
committerOndrej Zajicek <santiago@crfreenet.org>2011-05-01 18:42:32 +0200
commita506476acd4baa212f542b257eb5abba733ba4c5 (patch)
tree95caef919b3ac55cec65add6d09196ddb0e967ed
parent5964569c23829ec93fcf671a2582be01c8aebecf (diff)
downloadbird-a506476acd4baa212f542b257eb5abba733ba4c5.tar
bird-a506476acd4baa212f542b257eb5abba733ba4c5.zip
There may be more IP address records with the same IP.
-rw-r--r--nest/iface.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/nest/iface.c b/nest/iface.c
index 3cfc626..2ff2611 100644
--- a/nest/iface.c
+++ b/nest/iface.c
@@ -451,6 +451,13 @@ ifa_recalc_all_primary_addresses(void)
}
}
+static inline int
+ifa_same(struct ifa *a, struct ifa *b)
+{
+ return ipa_equal(a->ip, b->ip) && ipa_equal(a->prefix, b->prefix) &&
+ a->pxlen == b->pxlen;
+}
+
/**
* ifa_update - update interface address
@@ -467,11 +474,9 @@ ifa_update(struct ifa *a)
struct ifa *b;
WALK_LIST(b, i->addrs)
- if (ipa_equal(b->ip, a->ip))
+ if (ifa_same(b, a))
{
- if (ipa_equal(b->prefix, a->prefix) &&
- b->pxlen == a->pxlen &&
- ipa_equal(b->brd, a->brd) &&
+ if (ipa_equal(b->brd, a->brd) &&
ipa_equal(b->opposite, a->opposite) &&
b->scope == a->scope &&
!((b->flags ^ a->flags) & IA_PEER))
@@ -514,7 +519,7 @@ ifa_delete(struct ifa *a)
struct ifa *b;
WALK_LIST(b, i->addrs)
- if (ipa_equal(b->ip, a->ip))
+ if (ifa_same(b, a))
{
rem_node(&b->n);
if (b->flags & IF_UP)