=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/netstat/if.c,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- src/usr.bin/netstat/if.c 2000/01/18 05:39:34 1.19 +++ src/usr.bin/netstat/if.c 2000/02/05 18:46:50 1.20 @@ -1,4 +1,4 @@ -/* $OpenBSD: if.c,v 1.19 2000/01/18 05:39:34 itojun Exp $ */ +/* $OpenBSD: if.c,v 1.20 2000/02/05 18:46:50 itojun Exp $ */ /* $NetBSD: if.c,v 1.16.4.2 1996/06/07 21:46:46 thorpej Exp $ */ /* @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "from: @(#)if.c 8.2 (Berkeley) 2/21/94"; #else -static char *rcsid = "$OpenBSD: if.c,v 1.19 2000/01/18 05:39:34 itojun Exp $"; +static char *rcsid = "$OpenBSD: if.c,v 1.20 2000/02/05 18:46:50 itojun Exp $"; #endif #endif /* not lint */ @@ -99,6 +99,7 @@ struct sockaddr *sa; struct ifnet_head ifhead; /* TAILQ_HEAD */ char name[IFNAMSIZ]; + int n; if (ifnetaddr == 0) { printf("ifnet: symbol not defined\n"); @@ -175,15 +176,23 @@ */ in = inet_makeaddr(ifaddr.in.ia_subnet, INADDR_ANY); - printf("%-11.11s ", netname(in.s_addr, - ifaddr.in.ia_subnetmask)); + cp = netname(in.s_addr, + ifaddr.in.ia_subnetmask); #else - printf("%-11.11s ", - netname(ifaddr.in.ia_subnet, - ifaddr.in.ia_subnetmask)); + cp = netname(ifaddr.in.ia_subnet, + ifaddr.in.ia_subnetmask); #endif - printf("%-17.17s ", - routename(sin->sin_addr.s_addr)); + if (vflag) + n = strlen(cp) < 11 ? 11 : strlen(cp); + else + n = 11; + printf("%-*.*s ", n, n, cp); + cp = routename(sin->sin_addr.s_addr); + if (vflag) + n = strlen(cp) < 17 ? 17 : strlen(cp); + else + n = 17; + printf("%-*.*s ", n, n, cp); if (aflag) { u_long multiaddr; @@ -202,10 +211,31 @@ #ifdef INET6 case AF_INET6: sin6 = (struct sockaddr_in6 *)sa; - printf("%-11.11s ", - netname6(&ifaddr.in6.ia_addr, - &ifaddr.in6.ia_prefixmask.sin6_addr)); - printf("%-17.17s ", routename6(sin6)); +#ifdef KAME_SCOPEID + if (IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr)) { + sin6->sin6_scope_id = + ntohs(*(u_int16_t *) + &sin6->sin6_addr.s6_addr[2]); + /* too little width */ + if (!vflag) + sin6->sin6_scope_id = 0; + sin6->sin6_addr.s6_addr[2] = 0; + sin6->sin6_addr.s6_addr[3] = 0; + } +#endif + cp = netname6(&ifaddr.in6.ia_addr, + &ifaddr.in6.ia_prefixmask.sin6_addr); + if (vflag) + n = strlen(cp) < 11 ? 11 : strlen(cp); + else + n = 11; + printf("%-*.*s ", n, n, cp); + cp = routename6(sin6); + if (vflag) + n = strlen(cp) < 17 ? 17 : strlen(cp); + else + n = 17; + printf("%-*.*s ", n, n, cp); if (aflag) { u_long multiaddr; struct in6_multi inm;