From: Ondrej Zajicek Date: Tue, 29 Apr 2014 13:07:08 +0000 (+0200) Subject: Merge commit 'f515e22924591542a909db0deb8545386aaa576e' into integrated X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7b8adb3cb7ac3d49db4cc2f21f703cfad07104be;p=thirdparty%2Fbird.git Merge commit 'f515e22924591542a909db0deb8545386aaa576e' into integrated Conflicts: sysdep/bsd/krt-sock.c --- 7b8adb3cb7ac3d49db4cc2f21f703cfad07104be diff --cc sysdep/bsd/krt-sock.c index d33486cf3,3d3003699..550032c7f --- a/sysdep/bsd/krt-sock.c +++ b/sysdep/bsd/krt-sock.c @@@ -752,30 -674,40 +752,38 @@@ krt_read_addr(struct ks_msg *msg } ifa.scope = scope & IADDR_SCOPE_MASK; -#ifdef IPV6 /* Clean up embedded interface ID returned in link-local address */ - if (scope & SCOPE_LINK) - - if (ipa_has_link_scope(ifa.ip)) ++ if (ipa_is_link_local(ifa.ip)) _I0(ifa.ip) = 0xfe800000; - - if (ipa_has_link_scope(ifa.brd)) ++ if (ipa_is_link_local(ifa.brd)) + _I0(ifa.brd) = 0xfe800000; -#endif + - if (masklen < BITS_PER_IP_ADDRESS) + + // maxlen = ipv4 ? BITS_PER_IP_ADDRESS4 : BITS_PER_IP_ADDRESS6; + maxlen = BITS_PER_IP_ADDRESS; // XXXX: Hack + - if ((iface->flags & IF_MULTIACCESS) || (masklen != maxlen)) ++ if (masklen < maxlen) { ifa.prefix = ipa_and(ifa.ip, ipa_mkmask(masklen)); - if (masklen == maxlen) - ifa.flags |= IA_HOST; - - if (masklen == (BITS_PER_IP_ADDRESS - 1)) + if (masklen == (maxlen - 1)) ifa.opposite = ipa_opposite_m1(ifa.ip); -#ifndef IPV6 - if (masklen == (BITS_PER_IP_ADDRESS - 2)) + if (ipv4 && masklen == (maxlen - 2)) ifa.opposite = ipa_opposite_m2(ifa.ip); -#endif + + if (!(iface->flags & IF_MULTIACCESS)) + ifa.opposite = ifa.brd; } - else /* PtP iface */ + else if (!(iface->flags & IF_MULTIACCESS) && ipa_nonzero(ifa.brd)) { - ifa.flags |= IA_PEER; ifa.prefix = ifa.opposite = ifa.brd; + ifa.flags |= IA_PEER; + } + else + { + ifa.prefix = ifa.ip; + ifa.flags |= IA_HOST; } if (new)