changeset 3706:68618dc92527

6523938 assertion failed: (((&sctp_ipif->sctp_ipif_saddr)->_S6_un._S6_u32[3] == (&ipif->ipif_v6lcl_addr)->..
author vi117747
date Fri, 23 Feb 2007 07:52:01 -0800
parents 3b534e49cef6
children 79eeee281443
files usr/src/uts/common/inet/ip/ip.c usr/src/uts/common/inet/ip/ip6_if.c usr/src/uts/common/inet/ip/ip_if.c
diffstat 3 files changed, 12 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/uts/common/inet/ip/ip.c	Fri Feb 23 06:47:21 2007 -0800
+++ b/usr/src/uts/common/inet/ip/ip.c	Fri Feb 23 07:52:01 2007 -0800
@@ -16332,11 +16332,7 @@
 		ASSERT(ill->ill_ipif->ipif_id == 0);
 		if (ipif != NULL &&
 		    IN6_IS_ADDR_UNSPECIFIED(&ipif->ipif_v6lcl_addr)) {
-			in6_addr_t	ov6addr;
-
-			ov6addr = ipif->ipif_v6lcl_addr;
 			(void) ipif_setlinklocal(ipif);
-			sctp_update_ipif_addr(ipif, ov6addr);
 		}
 		break;
 	}
--- a/usr/src/uts/common/inet/ip/ip6_if.c	Fri Feb 23 06:47:21 2007 -0800
+++ b/usr/src/uts/common/inet/ip/ip6_if.c	Fri Feb 23 07:52:01 2007 -0800
@@ -1238,14 +1238,17 @@
 int
 ipif_setlinklocal(ipif_t *ipif)
 {
-	ill_t *ill = ipif->ipif_ill;
+	ill_t		*ill = ipif->ipif_ill;
+	in6_addr_t	ov6addr;
 
 	ASSERT(IAM_WRITER_ILL(ill));
 
 	if (ipif_cant_setlinklocal(ipif))
 		return (-1);
 
+	ov6addr = ipif->ipif_v6lcl_addr;
 	ipif_get_linklocal(&ipif->ipif_v6lcl_addr, &ill->ill_token);
+	sctp_update_ipif_addr(ipif, ov6addr);
 	(void) ip_plen_to_mask_v6(IPV6_LL_PREFIXLEN, &ipif->ipif_v6net_mask);
 	V6_MASK_COPY(ipif->ipif_v6lcl_addr, ipif->ipif_v6net_mask,
 	    ipif->ipif_v6subnet);
--- a/usr/src/uts/common/inet/ip/ip_if.c	Fri Feb 23 06:47:21 2007 -0800
+++ b/usr/src/uts/common/inet/ip/ip_if.c	Fri Feb 23 07:52:01 2007 -0800
@@ -12351,13 +12351,9 @@
 	if (((turn_on | turn_off) & (PHYI_FAILED|PHYI_STANDBY|PHYI_OFFLINE)))
 		ip_redo_nomination(phyi);
 
-	if (set_linklocal) {
-		in6_addr_t	ov6addr;
-
-		ov6addr = ipif->ipif_v6lcl_addr;
+	if (set_linklocal)
 		(void) ipif_setlinklocal(ipif);
-		sctp_update_ipif_addr(ipif, ov6addr);
-	}
+
 	if (zero_source)
 		ipif->ipif_v6src_addr = ipv6_all_zeros;
 	else
@@ -12389,9 +12385,12 @@
 		} else {
 			ip_rts_ifmsg(ipif);
 		}
-	}
-	/* Update the flags in SCTP's IPIF list */
-	sctp_update_ipif(ipif, SCTP_IPIF_UPDATE);
+		/*
+		 * Update the flags in SCTP's IPIF list, ipif_up() will do
+		 * this in need_up case.
+		 */
+		sctp_update_ipif(ipif, SCTP_IPIF_UPDATE);
+	}
 	return (err);
 }