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