diff options
-rw-r--r-- | zebra/ChangeLog | 7 | ||||
-rw-r--r-- | zebra/if_ioctl_solaris.c | 27 |
2 files changed, 18 insertions, 16 deletions
diff --git a/zebra/ChangeLog b/zebra/ChangeLog index 6b50cf0f..4139e859 100644 --- a/zebra/ChangeLog +++ b/zebra/ChangeLog @@ -1,3 +1,10 @@ +2006-12-13 Andrew J. Schorr <ajschorr@alumni.princeton.edu> + + * if_ioctl_solaris.c: (if_get_addr) For IPv6, stop assuming + that all IFF_POINTOPOINT have prefixlen of IPV6_MAX_BITLEN. + Instead, always try the SIOCGLIFSUBNET ioctl; if that fails, + then we fall back to IPV6_MAX_BITLEN for PtP interfaces. + 2006-12-12 Andrew J. Schorr <ajschorr@alumni.princeton.edu> * connected.c: (connected_up_ipv4, connected_down_ipv4, diff --git a/zebra/if_ioctl_solaris.c b/zebra/if_ioctl_solaris.c index 4cb16c7f..4267a424 100644 --- a/zebra/if_ioctl_solaris.c +++ b/zebra/if_ioctl_solaris.c @@ -309,23 +309,18 @@ if_get_addr (struct interface *ifp, struct sockaddr *addr, const char *label) #ifdef HAVE_IPV6 else if (af == AF_INET6) { - if (ifp->flags & IFF_POINTOPOINT) - { - prefixlen = IPV6_MAX_BITLEN; - } + if (if_ioctl_ipv6 (SIOCGLIFSUBNET, (caddr_t) & lifreq) < 0) + { + if (ifp->flags & IFF_POINTOPOINT) + prefixlen = IPV6_MAX_BITLEN; + else + zlog_warn ("SIOCGLIFSUBNET (%s) fail: %s", + ifp->name, safe_strerror (errno)); + } else - { - ret = if_ioctl_ipv6 (SIOCGLIFSUBNET, (caddr_t) & lifreq); - if (ret < 0) - { - zlog_warn ("SIOCGLIFSUBNET (%s) fail: %s", - ifp->name, safe_strerror (errno)); - } - else - { - prefixlen = lifreq.lifr_addrlen; - } - } + { + prefixlen = lifreq.lifr_addrlen; + } } #endif /* HAVE_IPV6 */ |