[zebra] For solaris IPv6 PtP interfaces, try to support prefixlen != 128

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.
This commit is contained in:
Andrew J. Schorr 2006-12-13 15:44:15 +00:00
parent e4529636b7
commit fb6724a6b9
2 changed files with 18 additions and 16 deletions

View File

@ -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,

View File

@ -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 */