From fb6724a6b987cb6fab00cc9326674bd14a0d09fa Mon Sep 17 00:00:00 2001 From: "Andrew J. Schorr" Date: Wed, 13 Dec 2006 15:44:15 +0000 Subject: [zebra] For solaris IPv6 PtP interfaces, try to support prefixlen != 128 2006-12-13 Andrew J. Schorr * 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. --- zebra/ChangeLog | 7 +++++++ 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 + + * 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 * 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 */ -- cgit v1.2.1