- sin = (struct sockaddr_in *)&ifnet.if_addr;
- in = inet_makeaddr(ifnet.if_net, INADDR_ANY);
- printf("%-10.10s ", routename(in));
- printf("%-12.12s %-7d %-5d %-7d %-5d %-6d",
- routename(sin->sin_addr),
+ if (ifaddraddr == 0) {
+ printf("%-10.10s ", "none");
+ printf("%-12.12s ", "none");
+ } else {
+ klseek(kmem, ifaddraddr, 0);
+ read(kmem, &ifaddr, sizeof ifaddr);
+ ifaddraddr = (off_t)ifaddr.ifa.ifa_next;
+ switch (ifaddr.ifa.ifa_addr.sa_family) {
+ case AF_UNSPEC:
+ printf("%-10.10s ", "none");
+ printf("%-12.12s ", "none");
+ break;
+ case AF_INET:
+ sin = (struct sockaddr_in *)&ifaddr.in.ia_addr;
+#ifdef notdef
+ /* can't use inet_makeaddr because kernel
+ * keeps nets unshifted.
+ */
+ in = inet_makeaddr(ifaddr.in.ia_subnet,
+ INADDR_ANY);
+ printf("%-10.10s ", netname(in));
+#else
+ printf("%-10.10s ",
+ netname(htonl(ifaddr.in.ia_subnet),
+ ifaddr.in.ia_subnetmask));
+#endif
+ printf("%-12.12s ", routename(sin->sin_addr));
+ break;
+ default:
+ printf("af%2d: ", ifaddr.ifa.ifa_addr.sa_family);
+ for (cp = (char *)&ifaddr.ifa.ifa_addr +
+ sizeof(struct sockaddr) - 1;
+ cp >= ifaddr.ifa.ifa_addr.sa_data; --cp)
+ if (*cp != 0)
+ break;
+ n = cp - (char *)ifaddr.ifa.ifa_addr.sa_data + 1;
+ cp = (char *)ifaddr.ifa.ifa_addr.sa_data;
+ if (n <= 6)
+ while (--n)
+ printf("%02d.", *cp++ & 0xff);
+ else
+ while (--n)
+ printf("%02d", *cp++ & 0xff);
+ printf("%02d ", *cp & 0xff);
+ break;
+ }
+ }
+ printf("%-7d %-5d %-7d %-5d %-6d",