diff options
author | paul <paul> | 2003-01-19 20:52:55 +0000 |
---|---|---|
committer | paul <paul> | 2003-01-19 20:52:55 +0000 |
commit | 34408741f1d94b547729b50ad59f2e813f1622c3 (patch) | |
tree | 9b4ddb1af862b087796c41d389e37b27ba62e2af | |
parent | 7c140f1682880f3e8996233fd1ceef2116a205a4 (diff) | |
download | quagga-34408741f1d94b547729b50ad59f2e813f1622c3.tar.bz2 quagga-34408741f1d94b547729b50ad59f2e813f1622c3.tar.xz |
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.c | 7 |
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) |