PERFORCE change 167381 for review

Gabor Pali pgj at FreeBSD.org
Sat Aug 15 21:26:17 UTC 2009


http://perforce.freebsd.org/chv.cgi?CH=167381

Change 167381 by pgj at petymeg-current on 2009/08/15 21:25:44

	Add support for IP6 family addresses.

Affected files ...

.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_route.c#5 edit

Differences ...

==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_route.c#5 (text+ko) ====

@@ -435,6 +435,37 @@
 		break;
 #ifdef INET6
 	case PF_INET6:
+		/*
+		 * XXX: This is a special workaround for KAME kernels.
+		 * sin6_scope_id field of SA should be set in the future.
+		 */
+		if (IN6_IS_ADDR_LINKLOCAL(in6) ||
+		    IN6_IS_ADDR_MC_LINKLOCAL(in6)) {
+			sa_in6->sin6_scope_id =
+			    (u_int32_t)ntohs(*(u_short *)&in6->s6_addr[2]);
+			*(u_short *)&in6->s6_addr[2] = 0;
+		}
+		if (flags & RTF_HOST) {
+			rap->rat_address = strdup(routename6(sa_in6, 0));
+			strlcpy(rap->rat_ni_address, routename6(sa_in6, 1),
+			    sizeof(rap->rat_ni_address));
+		}
+		else if (mask != NULL) {
+			rap->rat_address = strdup(netname6(sa_in6,
+			    &mk_in6->sin6_addr, 0));
+			strlcpy(rap->rat_ni_address,
+			    netname6(sa_in6, &mk_in6->sin6_addr, 1),
+			    sizeof(rap->rat_ni_address));
+		} else {
+			rap->rat_address = strdup(netname6(sa_in6, 0L, 0));
+			strlcpy(rap->rat_ni_address, rap->rat_address,
+			    sizeof(rap->rat_ni_address));
+		}
+		rap->rat_data = malloc(sizeof(struct sockaddr_in6));
+		if (rap->rat_data != NULL) {
+			rap->rat_data_len = sizeof(struct sockaddr_in6);
+			memcpy(rap->rat_data, sa_in6, rap->rat_data_len);
+		}
 		break;
 #endif
 	case PF_IPX:


More information about the p4-projects mailing list