From a506476acd4baa212f542b257eb5abba733ba4c5 Mon Sep 17 00:00:00 2001 From: Ondrej Zajicek Date: Sun, 1 May 2011 17:16:05 +0200 Subject: There may be more IP address records with the same IP. --- nest/iface.c | 15 ++++++++++----- 1 file 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) -- cgit v1.2.3