diff options
author | paul <paul> | 2003-01-19 20:52:55 +0000 |
---|---|---|
committer | paul <paul> | 2003-01-19 20:52:55 +0000 |
commit | 8fdcfdecd5900d7ffeaff9686c65eb2b9e6beb50 (patch) | |
tree | d979a3c7cb2183f6392d6bb5f91a5743c5d6a7d9 | |
parent | 9a668001507efa0c6a4e80cc2d7db8db93967f68 (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.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) |