- 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("%-11.11s ", "none");
+ printf("%-15.15s ", "none");
+ } else {
+ kvm_read(ifaddraddr, (char *)&ifaddr, sizeof ifaddr);
+#define CP(x) ((char *)(x))
+ cp = (CP(ifaddr.ifa.ifa_addr) - CP(ifaddraddr)) +
+ CP(&ifaddr); sa = (struct sockaddr *)cp;
+ switch (sa->sa_family) {
+ case AF_UNSPEC:
+ printf("%-11.11s ", "none");
+ printf("%-15.15s ", "none");
+ break;
+ case AF_INET:
+ sin = (struct sockaddr_in *)sa;
+#ifdef notdef
+ /* can't use inet_makeaddr because kernel
+ * keeps nets unshifted.
+ */
+ in = inet_makeaddr(ifaddr.in.ia_subnet,
+ INADDR_ANY);
+ printf("%-11.11s ", netname(in));
+#else
+ printf("%-11.11s ",
+ netname(htonl(ifaddr.in.ia_subnet),
+ ifaddr.in.ia_subnetmask));
+#endif
+ printf("%-15.15s ", routename(sin->sin_addr));
+ break;
+ case AF_NS:
+ {
+ struct sockaddr_ns *sns =
+ (struct sockaddr_ns *)sa;
+ u_long net;
+ char netnum[8];
+ char *ns_phost();
+
+ *(union ns_net *) &net = sns->sns_addr.x_net;
+ sprintf(netnum, "%lxH", ntohl(net));
+ upHex(netnum);
+ printf("ns:%-8s ", netnum);
+ printf("%-15s ", ns_phost(sns));
+ }
+ break;
+ case AF_LINK:
+ {
+ struct sockaddr_dl *sdl =
+ (struct sockaddr_dl *)sa;
+ cp = (char *)LLADDR(sdl);
+ n = sdl->sdl_alen;
+ }
+ m = printf("<Link>");
+ goto hexprint;
+ default:
+ m = printf("(%d)", sa->sa_family);
+ for (cp = sa->sa_len + (char *)sa;
+ --cp > sa->sa_data && (*cp == 0);) {}
+ n = cp - sa->sa_data + 1;
+ cp = sa->sa_data;
+ hexprint:
+ while (--n >= 0)
+ m += printf("%x%c", *cp++ & 0xff,
+ n > 0 ? '.' : ' ');
+ m = 28 - m;
+ while (m-- > 0)
+ putchar(' ');
+ break;
+ }
+ ifaddraddr = (off_t)ifaddr.ifa.ifa_next;
+ }
+ printf("%8d %5d %8d %5d %5d",