Browse Source

[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.
Andrew J. Schorr 13 years ago
parent
commit
fb6724a6b9
2 changed files with 18 additions and 16 deletions
  1. 7 0
      zebra/ChangeLog
  2. 11 16
      zebra/if_ioctl_solaris.c

+ 7 - 0
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,

+ 11 - 16
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 */