summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpaul <paul>2003-01-19 20:52:55 +0000
committerpaul <paul>2003-01-19 20:52:55 +0000
commit8fdcfdecd5900d7ffeaff9686c65eb2b9e6beb50 (patch)
treed979a3c7cb2183f6392d6bb5f91a5743c5d6a7d9
parent9a668001507efa0c6a4e80cc2d7db8db93967f68 (diff)
Add work around for RFC3021 patch and its problem with certain IPv6 interfaces
addresses. It seems so far that netlink only ever returns IFA_ADDRESS for IPv6 interfaces and never IFA_LOCAL, regardless of whether it is PtP or not. Need to investigate precisely how IPv6 and netlink are supposed to behave wrt broadcast vs PtP links.
-rw-r--r--zebra/rt_netlink.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c
index 91f6e0da..94573aa5 100644
--- a/zebra/rt_netlink.c
+++ b/zebra/rt_netlink.c
@@ -442,10 +442,15 @@ netlink_interface_addr (struct sockaddr_nl *snl, struct nlmsghdr *h)
peeronly = if_is_pointopoint (ifp) ||
ifa->ifa_prefixlen >= IPV4_MAX_PREFIXLEN - 1;
#ifdef HAVE_IPV6
- if (ifa->ifa_family == AF_INET6)
+ if (ifa->ifa_family == AF_INET6) {
peeronly = if_is_pointopoint (ifp) ||
ifa->ifa_prefixlen >= IPV6_MAX_PREFIXLEN - 1;
+ }
#endif /* HAVE_IPV6*/
+ if (!(tb[IFA_LOCAL] && tb[IFA_ADDRESS])) {
+ /* FIXME: IPv6 Appears to have only IFA_ADDRESS */
+ peeronly=0;
+ }
/* network. prefixlen applies to IFA_ADDRESS rather than IFA_LOCAL */
if (tb[IFA_ADDRESS] && !peeronly)