Module Name:    src
Committed By:   christos
Date:           Sat Oct 19 17:16:25 UTC 2013

Modified Files:
        src/usr.sbin/faithd: faithd.c
        src/usr.sbin/ifmcstat: ifmcstat.c
        src/usr.sbin/lpr/common_source: common.c
        src/usr.sbin/ndp: ndp.c
        src/usr.sbin/rpcbind: util.c

Log Message:
use new scopeid functions


To generate a diff of this commit:
cvs rdiff -u -r1.35 -r1.36 src/usr.sbin/faithd/faithd.c
cvs rdiff -u -r1.11 -r1.12 src/usr.sbin/ifmcstat/ifmcstat.c
cvs rdiff -u -r1.40 -r1.41 src/usr.sbin/lpr/common_source/common.c
cvs rdiff -u -r1.40 -r1.41 src/usr.sbin/ndp/ndp.c
cvs rdiff -u -r1.16 -r1.17 src/usr.sbin/rpcbind/util.c

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

Modified files:

Index: src/usr.sbin/faithd/faithd.c
diff -u src/usr.sbin/faithd/faithd.c:1.35 src/usr.sbin/faithd/faithd.c:1.36
--- src/usr.sbin/faithd/faithd.c:1.35	Fri Sep 16 11:39:37 2011
+++ src/usr.sbin/faithd/faithd.c	Sat Oct 19 13:16:25 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: faithd.c,v 1.35 2011/09/16 15:39:37 joerg Exp $	*/
+/*	$NetBSD: faithd.c,v 1.36 2013/10/19 17:16:25 christos Exp $	*/
 /*	$KAME: faithd.c,v 1.62 2003/08/19 21:20:33 itojun Exp $	*/
 
 /*
@@ -751,7 +751,6 @@ grab_myaddrs(void)
 {
 	struct ifaddrs *ifap, *ifa;
 	struct myaddrs *p;
-	struct sockaddr_in6 *sin6;
 
 	if (getifaddrs(&ifap) != 0) {
 		exit_failure("getifaddrs");
@@ -776,19 +775,11 @@ grab_myaddrs(void)
 		memcpy(p + 1, ifa->ifa_addr, ifa->ifa_addr->sa_len);
 		p->next = myaddrs;
 		p->addr = (void *)(p + 1);
-#ifdef __KAME__
 		if (ifa->ifa_addr->sa_family == AF_INET6) {
-			sin6 = (void *)p->addr;
-			if (IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr)
-			 || IN6_IS_ADDR_SITELOCAL(&sin6->sin6_addr)) {
-				sin6->sin6_scope_id =
-				    ntohs(*(uint16_t *)(void *)
-				    &sin6->sin6_addr.s6_addr[3]);
-				sin6->sin6_addr.s6_addr[2] = 0;
-				sin6->sin6_addr.s6_addr[3] = 0;
-			}
+			struct sockaddr_in6 *sin6 = (void *)p->addr;
+			inet6_getscopeid(sin6, INET6_IS_ADDR_LINKLOCAL|
+				INET6_IS_ADDR_SITELOCAL);
 		}
-#endif
 		myaddrs = p;
 		if (dflag) {
 			char hbuf[NI_MAXHOST];

Index: src/usr.sbin/ifmcstat/ifmcstat.c
diff -u src/usr.sbin/ifmcstat/ifmcstat.c:1.11 src/usr.sbin/ifmcstat/ifmcstat.c:1.12
--- src/usr.sbin/ifmcstat/ifmcstat.c:1.11	Fri Oct 26 12:52:52 2012
+++ src/usr.sbin/ifmcstat/ifmcstat.c	Sat Oct 19 13:16:25 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: ifmcstat.c,v 1.11 2012/10/26 16:52:52 seanb Exp $	*/
+/*	$NetBSD: ifmcstat.c,v 1.12 2013/10/19 17:16:25 christos Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -110,21 +110,14 @@ const char *inet6_n2a(p)
 {
 	static char buf[NI_MAXHOST];
 	struct sockaddr_in6 sin6;
-	u_int32_t scopeid;
 	const int niflags = NI_NUMERICHOST;
 
 	memset(&sin6, 0, sizeof(sin6));
 	sin6.sin6_family = AF_INET6;
 	sin6.sin6_len = sizeof(struct sockaddr_in6);
 	sin6.sin6_addr = *p;
-	if (IN6_IS_ADDR_LINKLOCAL(p) || IN6_IS_ADDR_MC_LINKLOCAL(p)) {
-		scopeid = ntohs(*(u_int16_t *)&sin6.sin6_addr.s6_addr[2]);
-		if (scopeid) {
-			sin6.sin6_scope_id = scopeid;
-			sin6.sin6_addr.s6_addr[2] = 0;
-			sin6.sin6_addr.s6_addr[3] = 0;
-		}
-	}
+	inet6_getscopeid(&sin6, INET6_IS_ADDR_LINKLOCAL|
+	    INET6_IS_ADDR_MC_LINKLOCAL);
 	if (getnameinfo((struct sockaddr *)&sin6, sin6.sin6_len,
 			buf, sizeof(buf), NULL, 0, niflags) == 0)
 		return buf;

Index: src/usr.sbin/lpr/common_source/common.c
diff -u src/usr.sbin/lpr/common_source/common.c:1.40 src/usr.sbin/lpr/common_source/common.c:1.41
--- src/usr.sbin/lpr/common_source/common.c:1.40	Mon Jul 13 15:05:41 2009
+++ src/usr.sbin/lpr/common_source/common.c	Sat Oct 19 13:16:25 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: common.c,v 1.40 2009/07/13 19:05:41 roy Exp $	*/
+/*	$NetBSD: common.c,v 1.41 2013/10/19 17:16:25 christos Exp $	*/
 
 /*
  * Copyright (c) 1983, 1993
@@ -39,7 +39,7 @@
 #if 0
 static char sccsid[] = "@(#)common.c	8.5 (Berkeley) 4/28/95";
 #else
-__RCSID("$NetBSD: common.c,v 1.40 2009/07/13 19:05:41 roy Exp $");
+__RCSID("$NetBSD: common.c,v 1.41 2013/10/19 17:16:25 christos Exp $");
 #endif
 #endif /* not lint */
 
@@ -396,27 +396,15 @@ checkremote(void)
 		    rname, sizeof(rname), NULL, 0, niflags) != 0)
 			continue;
 		for (ifa = ifap; ifa; ifa = ifa->ifa_next) {
-#ifdef __KAME__
 			sin6p = (struct sockaddr_in6 *)ifa->ifa_addr;
 			if (ifa->ifa_addr->sa_family == AF_INET6 &&
-			    ifa->ifa_addr->sa_len == sizeof(sin6) &&
-			    IN6_IS_ADDR_LINKLOCAL(&sin6p->sin6_addr) &&
-			    *(u_int16_t *)&sin6p->sin6_addr.s6_addr[2]) {
-				/* kame scopeid hack */
-				memcpy(&sin6, ifa->ifa_addr, sizeof(sin6));
-				sin6.sin6_scope_id =
-				    ntohs(*(u_int16_t *)&sin6p->sin6_addr.s6_addr[2]);
-				sin6.sin6_addr.s6_addr[2] = 0;
-				sin6.sin6_addr.s6_addr[3] = 0;
+			    ifa->ifa_addr->sa_len == sizeof(sin6)) {
+			    inet6_getscopeid(sin6p, 3);
 				if (getnameinfo((struct sockaddr *)&sin6,
 				    sin6.sin6_len, lname, sizeof(lname),
 				    NULL, 0, niflags) != 0)
 					continue;
-			} else
-#endif
-			if (getnameinfo(ifa->ifa_addr, ifa->ifa_addr->sa_len,
-			    lname, sizeof(lname), NULL, 0, niflags) != 0)
-				continue;
+			}
 
 			if (strcmp(rname, lname) == 0) {
 				remote = 0;

Index: src/usr.sbin/ndp/ndp.c
diff -u src/usr.sbin/ndp/ndp.c:1.40 src/usr.sbin/ndp/ndp.c:1.41
--- src/usr.sbin/ndp/ndp.c:1.40	Wed Aug 31 09:32:38 2011
+++ src/usr.sbin/ndp/ndp.c	Sat Oct 19 13:16:25 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: ndp.c,v 1.40 2011/08/31 13:32:38 joerg Exp $	*/
+/*	$NetBSD: ndp.c,v 1.41 2013/10/19 17:16:25 christos Exp $	*/
 /*	$KAME: ndp.c,v 1.121 2005/07/13 11:30:13 keiichi Exp $	*/
 
 /*
@@ -357,12 +357,7 @@ set(int argc, char **argv)
 		return 1;
 	}
 	mysin->sin6_addr = ((struct sockaddr_in6 *)(void *)res->ai_addr)->sin6_addr;
-#ifdef __KAME__
-	if (IN6_IS_ADDR_LINKLOCAL(&mysin->sin6_addr)) {
-		*(u_int16_t *)(void *)&mysin->sin6_addr.s6_addr[2] =
-		    htons(((struct sockaddr_in6 *)(void *)res->ai_addr)->sin6_scope_id);
-	}
-#endif
+	inet6_putscopeid(mysin, INET6_IS_ADDR_LINKLOCAL);
 	ea = (u_char *)LLADDR(&sdl_m);
 	if (ndp_ether_aton(eaddr, ea) == 0)
 		sdl_m.sdl_alen = 6;
@@ -429,12 +424,7 @@ get(char *host)
 		return;
 	}
 	mysin->sin6_addr = ((struct sockaddr_in6 *)(void *)res->ai_addr)->sin6_addr;
-#ifdef __KAME__
-	if (IN6_IS_ADDR_LINKLOCAL(&mysin->sin6_addr)) {
-		*(u_int16_t *)(void *)&mysin->sin6_addr.s6_addr[2] =
-		    htons(((struct sockaddr_in6 *)(void *)res->ai_addr)->sin6_scope_id);
-	}
-#endif
+	inet6_putscopeid(mysin, INET6_IS_ADDR_LINKLOCAL);
 	dump(&mysin->sin6_addr, 0);
 	if (found_entry == 0) {
 		(void)getnameinfo((struct sockaddr *)(void *)mysin,
@@ -468,12 +458,7 @@ delete(char *host)
 		return 1;
 	}
 	mysin->sin6_addr = ((struct sockaddr_in6 *)(void *)res->ai_addr)->sin6_addr;
-#ifdef __KAME__
-	if (IN6_IS_ADDR_LINKLOCAL(&mysin->sin6_addr)) {
-		*(u_int16_t *)(void *)&mysin->sin6_addr.s6_addr[2] =
-		    htons(((struct sockaddr_in6 *)(void *)res->ai_addr)->sin6_scope_id);
-	}
-#endif
+	inet6_putscopeid(mysin, INET6_IS_ADDR_LINKLOCAL);
 	if (rtmsg(RTM_GET) < 0)
 		errx(1, "RTM_GET(%s) failed", host);
 	mysin = (struct sockaddr_in6 *)(void *)(rtm + 1);
@@ -500,12 +485,8 @@ delete:
 	if (rtmsg(RTM_DELETE) == 0) {
 		struct sockaddr_in6 s6 = *mysin; /* XXX: for safety */
 
-#ifdef __KAME__
-		if (IN6_IS_ADDR_LINKLOCAL(&s6.sin6_addr)) {
-			s6.sin6_scope_id = ntohs(*(u_int16_t *)(void *)&s6.sin6_addr.s6_addr[2]);
-			*(u_int16_t *)(void *)&s6.sin6_addr.s6_addr[2] = 0;
-		}
-#endif
+		mysin->sin6_scope_id = 0;
+		inet6_putscopeid(mysin, INET6_IS_ADDR_LINKLOCAL);
 		(void)getnameinfo((struct sockaddr *)(void *)&s6,
 		    (socklen_t)s6.sin6_len, host_buf,
 		    sizeof(host_buf), NULL, 0,
@@ -598,13 +579,11 @@ again:;
 			continue;
 		if (IN6_IS_ADDR_LINKLOCAL(&mysin->sin6_addr) ||
 		    IN6_IS_ADDR_MC_LINKLOCAL(&mysin->sin6_addr)) {
-			/* XXX: should scope id be filled in the kernel? */
-			if (mysin->sin6_scope_id == 0)
+			uint16_t scopeid = mysin->sin6_scope_id;
+			inet6_getscopeid(mysin, INET6_IS_ADDR_LINKLOCAL|
+			    INET6_IS_ADDR_MC_LINKLOCAL);
+			if (scopeid == 0)
 				mysin->sin6_scope_id = sdl->sdl_index;
-#ifdef __KAME__
-			/* KAME specific hack; removed the embedded id */
-			*(u_int16_t *)(void *)&mysin->sin6_addr.s6_addr[2] = 0;
-#endif
 		}
 		(void)getnameinfo((struct sockaddr *)(void *)mysin,
 		    (socklen_t)mysin->sin6_len,

Index: src/usr.sbin/rpcbind/util.c
diff -u src/usr.sbin/rpcbind/util.c:1.16 src/usr.sbin/rpcbind/util.c:1.17
--- src/usr.sbin/rpcbind/util.c:1.16	Sun Jan 18 05:17:38 2009
+++ src/usr.sbin/rpcbind/util.c	Sat Oct 19 13:16:25 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: util.c,v 1.16 2009/01/18 10:17:38 lukem Exp $	*/
+/*	$NetBSD: util.c,v 1.17 2013/10/19 17:16:25 christos Exp $	*/
 
 /*-
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -55,9 +55,6 @@ static struct sockaddr_in6 *local_in6;
 #endif
 
 static int bitmaskcmp(void *, void *, void *, int);
-#ifdef INET6
-static void in6_fillscopeid(struct sockaddr_in6 *);
-#endif
 
 /*
  * For all bits set in "mask", compare the corresponding bits in
@@ -83,21 +80,6 @@ bitmaskcmp(void *dst, void *src, void *m
 	return 0;
 }
 
-/*
- * Taken from ifconfig.c
- */
-#ifdef INET6
-static void
-in6_fillscopeid(struct sockaddr_in6 *sin6)
-{
-        if (IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr)) {
-                sin6->sin6_scope_id =
-                        ntohs(*(u_int16_t *)&sin6->sin6_addr.s6_addr[2]);
-                sin6->sin6_addr.s6_addr[2] = sin6->sin6_addr.s6_addr[3] = 0;
-        }
-}
-#endif
-
 char *
 addrmerge(struct netbuf *caller, char *serv_uaddr, char *clnt_uaddr,
 	  char *netid)
@@ -218,7 +200,7 @@ addrmerge(struct netbuf *caller, char *s
 			 */
 			realsin6 = (struct sockaddr_in6 *)clnt;
 			ifsin6 = (struct sockaddr_in6 *)ifap->ifa_addr;
-			in6_fillscopeid(ifsin6);
+			inet6_getscopeid(ifsin6, 1);
 			clntsin6 = (struct sockaddr_in6 *)clnt_sa;
 			servsin6 = (struct sockaddr_in6 *)serv_sa;
 			sin6mask = (struct sockaddr_in6 *)ifap->ifa_netmask;

Reply via email to