Module Name:    src
Committed By:   dyoung
Date:           Thu Jul 15 19:15:31 UTC 2010

Modified Files:
        src/sys/netinet6: nd6.c

Log Message:
To help find the cause of kernel complaints such as "/netbsd:
nd6_storelladdr: sdl_alen == 0, dst=... if=wm1", add printfs for some
"impossible" conditions, and make the nd6_storelladdr() printf more
informative by printing the value of sdl_alen.


To generate a diff of this commit:
cvs rdiff -u -r1.135 -r1.136 src/sys/netinet6/nd6.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/netinet6/nd6.c
diff -u src/sys/netinet6/nd6.c:1.135 src/sys/netinet6/nd6.c:1.136
--- src/sys/netinet6/nd6.c:1.135	Fri Nov  6 20:41:22 2009
+++ src/sys/netinet6/nd6.c	Thu Jul 15 19:15:30 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: nd6.c,v 1.135 2009/11/06 20:41:22 dyoung Exp $	*/
+/*	$NetBSD: nd6.c,v 1.136 2010/07/15 19:15:30 dyoung Exp $	*/
 /*	$KAME: nd6.c,v 1.279 2002/06/08 11:16:51 itojun Exp $	*/
 
 /*
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nd6.c,v 1.135 2009/11/06 20:41:22 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nd6.c,v 1.136 2010/07/15 19:15:30 dyoung Exp $");
 
 #include "opt_ipsec.h"
 
@@ -1232,9 +1232,13 @@
 			 * treated as on-link but is currently not
 			 * (RTF_LLINFO && ln == NULL case).
 			 */
-			sockaddr_dl_init(&u.sdl, sizeof(u.ss),
+			if (sockaddr_dl_init(&u.sdl, sizeof(u.ss),
 			    ifp->if_index, ifp->if_type,
-			    NULL, namelen, NULL, addrlen);
+			    NULL, namelen, NULL, addrlen) == NULL) {
+				printf("%s.%d: sockaddr_dl_init(, %zu, ) "
+				    "failed on %s\n", __func__, __LINE__,
+				    sizeof(u.ss), if_name(ifp));
+			}
 			rt_setgate(rt, &u.sa);
 			gate = rt->rt_gateway;
 			RT_DPRINTF("rt->_rt_key = %p\n", (void *)rt->_rt_key);
@@ -1351,8 +1355,15 @@
 			ln->ln_byhint = 0;
 			if ((mac = nd6_ifptomac(ifp)) != NULL) {
 				/* XXX check for error */
-				(void)sockaddr_dl_setaddr(satosdl(gate),
-				    gate->sa_len, mac, ifp->if_addrlen);
+				if (sockaddr_dl_setaddr(satosdl(gate),
+				    gate->sa_len, mac,
+				    ifp->if_addrlen) == NULL) {
+					printf("%s.%d: "
+					    "sockaddr_dl_setaddr(, %d, ) "
+					    "failed on %s\n", __func__,
+					    __LINE__, gate->sa_len,
+					    if_name(ifp));
+				}
 			}
 			if (nd6_useloopback) {
 				ifp = rt->rt_ifp = lo0ifp;	/* XXX */
@@ -1777,8 +1788,12 @@
 		 * XXX is it dependent to ifp->if_type?
 		 */
 		/* XXX check for error */
-		(void)sockaddr_dl_setaddr(sdl, sdl->sdl_len, lladdr,
-		    ifp->if_addrlen);
+		if (sockaddr_dl_setaddr(sdl, sdl->sdl_len, lladdr,
+		    ifp->if_addrlen) == NULL) {
+			printf("%s.%d: sockaddr_dl_setaddr(, %d, ) "
+			    "failed on %s\n", __func__, __LINE__,
+			    sdl->sdl_len, if_name(ifp));
+		}
 	}
 
 	if (!is_newentry) {
@@ -2197,8 +2212,9 @@
 	sdl = satocsdl(rt->rt_gateway);
 	if (sdl->sdl_alen == 0 || sdl->sdl_alen > dstsize) {
 		/* this should be impossible, but we bark here for debugging */
-		printf("%s: sdl_alen == 0, dst=%s, if=%s\n", __func__,
-		    ip6_sprintf(&satocsin6(dst)->sin6_addr), if_name(ifp));
+		printf("%s: sdl_alen == %" PRIu8 ", dst=%s, if=%s\n", __func__,
+		    sdl->sdl_alen, ip6_sprintf(&satocsin6(dst)->sin6_addr),
+		    if_name(ifp));
 		m_freem(m);
 		return 0;
 	}

Reply via email to