version 1.45, 2002/02/16 21:27:50 |
version 1.46, 2002/05/27 01:50:36 |
|
|
if (Aflag) |
if (Aflag) |
printf("%-*.*s ", PLEN, PLEN, "Address"); |
printf("%-*.*s ", PLEN, PLEN, "Address"); |
printf("%-*.*s %-*.*s %-6.6s %6.6s %6.6s %6.6s %s\n", |
printf("%-*.*s %-*.*s %-6.6s %6.6s %6.6s %6.6s %s\n", |
WID_DST(af), WID_DST(af), "Destination", |
WID_DST(af), WID_DST(af), "Destination", |
WID_GW(af), WID_GW(af), "Gateway", |
WID_GW(af), WID_GW(af), "Gateway", |
"Flags", "Refs", "Use", "Mtu", "Interface"); |
"Flags", "Refs", "Use", "Mtu", "Interface"); |
} |
} |
|
|
/* |
/* |
|
|
kget(rm, rmask); |
kget(rm, rmask); |
snprintf(nbuf, sizeof nbuf, " %d refs, ", rmask.rm_refs); |
snprintf(nbuf, sizeof nbuf, " %d refs, ", rmask.rm_refs); |
printf(" mk = %16p {(%d),%s", |
printf(" mk = %16p {(%d),%s", |
rm, -1 - rmask.rm_b, rmask.rm_refs ? nbuf : " "); |
rm, -1 - rmask.rm_b, rmask.rm_refs ? nbuf : " "); |
p_sockaddr(kgetsa((struct sockaddr *)rmask.rm_mask), 0, 0, -1); |
p_sockaddr(kgetsa((struct sockaddr *)rmask.rm_mask), 0, 0, -1); |
putchar('}'); |
putchar('}'); |
if ((rm = rmask.rm_mklist)) |
if ((rm = rmask.rm_mklist)) |
|
|
struct sockaddr_in *msin = (struct sockaddr_in *)mask; |
struct sockaddr_in *msin = (struct sockaddr_in *)mask; |
|
|
cp = (sin->sin_addr.s_addr == 0) ? "default" : |
cp = (sin->sin_addr.s_addr == 0) ? "default" : |
((flags & RTF_HOST) || mask == NULL ? |
((flags & RTF_HOST) || mask == NULL ? |
routename(sin->sin_addr.s_addr) : |
routename(sin->sin_addr.s_addr) : |
netname(sin->sin_addr.s_addr, msin->sin_addr.s_addr)); |
netname(sin->sin_addr.s_addr, msin->sin_addr.s_addr)); |
|
|
break; |
break; |
} |
} |
|
|
*/ |
*/ |
if (IN6_IS_ADDR_LINKLOCAL(in6) || |
if (IN6_IS_ADDR_LINKLOCAL(in6) || |
IN6_IS_ADDR_MC_LINKLOCAL(in6)) { |
IN6_IS_ADDR_MC_LINKLOCAL(in6)) { |
/* XXX: override is ok? */ |
/* XXX: override is ok? */ |
sa6->sin6_scope_id = (u_int32_t)ntohs(*(u_short *)&in6->s6_addr[2]); |
sa6->sin6_scope_id = (u_int32_t)ntohs(*(u_short *) |
*(u_short *)&in6->s6_addr[2] = 0; |
&in6->s6_addr[2]); |
|
*(u_short *)&in6->s6_addr[2] = 0; |
} |
} |
#endif |
#endif |
|
|
if (flags & RTF_HOST) |
if (flags & RTF_HOST) |
cp = routename6(sa6); |
cp = routename6(sa6); |
else if (mask) { |
else if (mask) { |
cp = netname6(sa6, |
cp = netname6(sa6, |
&((struct sockaddr_in6 *)mask)->sin6_addr); |
&((struct sockaddr_in6 *)mask)->sin6_addr); |
} else |
} else |
cp = netname6(sa6, NULL); |
cp = netname6(sa6, NULL); |
break; |
break; |
|
|
"%s%x", cplim, *lla); |
"%s%x", cplim, *lla); |
cplim = ":"; |
cplim = ":"; |
if (n == -1) /* What else to do ? */ |
if (n == -1) /* What else to do ? */ |
continue; |
continue; |
if (n >= workbuf + sizeof (workbuf) - cp) |
if (n >= workbuf + sizeof (workbuf) - cp) |
n = workbuf + sizeof (workbuf) - cp - 1; |
n = workbuf + sizeof (workbuf) - cp - 1; |
cp += n; |
cp += n; |
|
|
struct sockaddr_storage sock1, sock2; |
struct sockaddr_storage sock1, sock2; |
struct sockaddr *sa = (struct sockaddr *)&sock1; |
struct sockaddr *sa = (struct sockaddr *)&sock1; |
struct sockaddr *mask = (struct sockaddr *)&sock2; |
struct sockaddr *mask = (struct sockaddr *)&sock2; |
|
|
bcopy(kgetsa(rt_key(rt)), sa, sizeof(struct sockaddr)); |
bcopy(kgetsa(rt_key(rt)), sa, sizeof(struct sockaddr)); |
if (sa->sa_len > sizeof(struct sockaddr)) |
if (sa->sa_len > sizeof(struct sockaddr)) |
bcopy(kgetsa(rt_key(rt)), sa, sa->sa_len); |
bcopy(kgetsa(rt_key(rt)), sa, sa->sa_len); |
|
|
bcopy(kgetsa(rt_mask(rt)), mask, sa->sa_len); |
bcopy(kgetsa(rt_mask(rt)), mask, sa->sa_len); |
} else |
} else |
mask = 0; |
mask = 0; |
|
|
p_sockaddr(sa, mask, rt->rt_flags, WID_DST(sa->sa_family)); |
p_sockaddr(sa, mask, rt->rt_flags, WID_DST(sa->sa_family)); |
p_sockaddr(kgetsa(rt->rt_gateway), 0, RTF_HOST, WID_GW(sa->sa_family)); |
p_sockaddr(kgetsa(rt->rt_gateway), 0, RTF_HOST, WID_GW(sa->sa_family)); |
p_flags(rt->rt_flags, "%-6.6s "); |
p_flags(rt->rt_flags, "%-6.6s "); |
|
|
putchar('\n'); |
putchar('\n'); |
if (vflag) { |
if (vflag) { |
printf("\texpire %10lu%c recvpipe %10ld%c " |
printf("\texpire %10lu%c recvpipe %10ld%c " |
"sendpipe %10ld%c\n", |
"sendpipe %10ld%c\n", |
rt->rt_rmx.rmx_expire, |
rt->rt_rmx.rmx_expire, |
(rt->rt_rmx.rmx_locks & RTV_EXPIRE) ? 'L' : ' ', |
(rt->rt_rmx.rmx_locks & RTV_EXPIRE) ? 'L' : ' ', |
rt->rt_rmx.rmx_recvpipe, |
rt->rt_rmx.rmx_recvpipe, |
(rt->rt_rmx.rmx_locks & RTV_RPIPE) ? 'L' : ' ', |
(rt->rt_rmx.rmx_locks & RTV_RPIPE) ? 'L' : ' ', |
rt->rt_rmx.rmx_sendpipe, |
rt->rt_rmx.rmx_sendpipe, |
(rt->rt_rmx.rmx_locks & RTV_SPIPE) ? 'L' : ' '); |
(rt->rt_rmx.rmx_locks & RTV_SPIPE) ? 'L' : ' '); |
printf("\tssthresh %10lu%c rtt %10ld%c " |
printf("\tssthresh %10lu%c rtt %10ld%c " |
"rttvar %10ld%c\n", |
"rttvar %10ld%c\n", |
rt->rt_rmx.rmx_ssthresh, |
rt->rt_rmx.rmx_ssthresh, |
(rt->rt_rmx.rmx_locks & RTV_SSTHRESH) ? 'L' : ' ', |
(rt->rt_rmx.rmx_locks & RTV_SSTHRESH) ? 'L' : ' ', |
rt->rt_rmx.rmx_rtt, |
rt->rt_rmx.rmx_rtt, |
(rt->rt_rmx.rmx_locks & RTV_RTT) ? 'L' : ' ', |
(rt->rt_rmx.rmx_locks & RTV_RTT) ? 'L' : ' ', |
rt->rt_rmx.rmx_rttvar, |
rt->rt_rmx.rmx_rttvar, |
(rt->rt_rmx.rmx_locks & RTV_RTTVAR) ? 'L' : ' '); |
(rt->rt_rmx.rmx_locks & RTV_RTTVAR) ? 'L' : ' '); |
} |
} |
} |
} |
|
|
char * |
char * |
|
|
first = 0; |
first = 0; |
if (gethostname(domain, sizeof domain) == 0 && |
if (gethostname(domain, sizeof domain) == 0 && |
(cp = strchr(domain, '.'))) |
(cp = strchr(domain, '.'))) |
(void) strcpy(domain, cp + 1); |
(void) strlcpy(domain, cp + 1, sizeof domain); |
else |
else |
domain[0] = 0; |
domain[0] = '\0'; |
} |
} |
cp = 0; |
cp = 0; |
if (!nflag) { |
if (!nflag) { |
hp = gethostbyaddr((char *)&in, sizeof (struct in_addr), |
hp = gethostbyaddr((char *)&in, sizeof (struct in_addr), |
AF_INET); |
AF_INET); |
if (hp) { |
if (hp) { |
if ((cp = strchr(hp->h_name, '.')) && |
if ((cp = strchr(hp->h_name, '.')) && |
!strcmp(cp + 1, domain)) |
!strcmp(cp + 1, domain)) |
|
|
} |
} |
} |
} |
if (cp) { |
if (cp) { |
strncpy(line, cp, sizeof(line) - 1); |
strlcpy(line, cp, sizeof(line)); |
line[sizeof(line) - 1] = '\0'; |
|
} else { |
} else { |
#define C(x) ((x) & 0xff) |
#define C(x) ((x) & 0xff) |
in = ntohl(in); |
in = ntohl(in); |
|
|
} |
} |
mbits = mask ? 33 - ffs(mask) : 0; |
mbits = mask ? 33 - ffs(mask) : 0; |
if (cp) { |
if (cp) { |
strncpy(line, cp, sizeof(line) - 1); |
strlcpy(line, cp, sizeof(line)); |
line[sizeof(line) - 1] = '\0'; |
|
} else if (mbits < 9) |
} else if (mbits < 9) |
snprintf(line, sizeof line, "%u/%d", C(in >> 24), mbits); |
snprintf(line, sizeof line, "%u/%d", C(in >> 24), mbits); |
else if (mbits < 17) |
else if (mbits < 17) |
|
|
C(in >> 24), C(in >> 16), C(in >> 8), mbits); |
C(in >> 24), C(in >> 16), C(in >> 8), mbits); |
else |
else |
snprintf(line, sizeof line, "%u.%u.%u.%u/%d", C(in >> 24), |
snprintf(line, sizeof line, "%u.%u.%u.%u/%d", C(in >> 24), |
C(in >> 16), C(in >> 8), C(in), mbits); |
C(in >> 16), C(in >> 8), C(in), mbits); |
return (line); |
return (line); |
} |
} |
|
|
|
|
int error; |
int error; |
|
|
sin6 = *sa6; |
sin6 = *sa6; |
|
|
masklen = 0; |
masklen = 0; |
lim = (u_char *)(mask + 1); |
lim = (u_char *)(mask + 1); |
i = 0; |
i = 0; |
|
|
const int niflag = NI_NUMERICHOST; |
const int niflag = NI_NUMERICHOST; |
#endif |
#endif |
if (getnameinfo((struct sockaddr *)sa6, sa6->sin6_len, |
if (getnameinfo((struct sockaddr *)sa6, sa6->sin6_len, |
line, sizeof(line), NULL, 0, niflag) != 0) |
line, sizeof(line), NULL, 0, niflag) != 0) |
strcpy(line, ""); |
strlcpy(line, "", sizeof line); |
return line; |
return line; |
} |
} |
#endif /*INET6*/ |
#endif /*INET6*/ |
|
|
kread(off, (char *)&rtstat, sizeof (rtstat)); |
kread(off, (char *)&rtstat, sizeof (rtstat)); |
printf("routing:\n"); |
printf("routing:\n"); |
printf("\t%u bad routing redirect%s\n", |
printf("\t%u bad routing redirect%s\n", |
rtstat.rts_badredirect, plural(rtstat.rts_badredirect)); |
rtstat.rts_badredirect, plural(rtstat.rts_badredirect)); |
printf("\t%u dynamically created route%s\n", |
printf("\t%u dynamically created route%s\n", |
rtstat.rts_dynamic, plural(rtstat.rts_dynamic)); |
rtstat.rts_dynamic, plural(rtstat.rts_dynamic)); |
printf("\t%u new gateway%s due to redirects\n", |
printf("\t%u new gateway%s due to redirects\n", |
rtstat.rts_newgateway, plural(rtstat.rts_newgateway)); |
rtstat.rts_newgateway, plural(rtstat.rts_newgateway)); |
printf("\t%u destination%s found unreachable\n", |
printf("\t%u destination%s found unreachable\n", |
rtstat.rts_unreach, plural(rtstat.rts_unreach)); |
rtstat.rts_unreach, plural(rtstat.rts_unreach)); |
printf("\t%u use%s of a wildcard route\n", |
printf("\t%u use%s of a wildcard route\n", |
rtstat.rts_wildcard, plural(rtstat.rts_wildcard)); |
rtstat.rts_wildcard, plural(rtstat.rts_wildcard)); |
} |
} |
|
|
short ns_nullh[] = {0,0,0}; |
short ns_nullh[] = {0,0,0}; |
|
|
} else { |
} else { |
q = work.x_host.c_host; |
q = work.x_host.c_host; |
snprintf(chost, sizeof chost, "%02x%02x%02x%02x%02x%02xH", |
snprintf(chost, sizeof chost, "%02x%02x%02x%02x%02x%02xH", |
q[0], q[1], q[2], q[3], q[4], q[5]); |
q[0], q[1], q[2], q[3], q[4], q[5]); |
for (p = chost; *p == '0' && p < chost + 12; p++) |
for (p = chost; *p == '0' && p < chost + 12; p++) |
continue; |
continue; |
host = p; |
host = p; |
|
|
work.sns_addr.x_net = ns_zeronet; |
work.sns_addr.x_net = ns_zeronet; |
|
|
p = ns_print((struct sockaddr *)&work); |
p = ns_print((struct sockaddr *)&work); |
if (strncmp("0H.", p, 3) == 0) p += 3; |
if (strncmp("0H.", p, 3) == 0) |
|
p += 3; |
return(p); |
return(p); |
} |
} |
|
|
|
|
work.sipx_addr.ipx_net = ipx_zeronet; |
work.sipx_addr.ipx_net = ipx_zeronet; |
|
|
p = ipx_print((struct sockaddr *)&work); |
p = ipx_print((struct sockaddr *)&work); |
if (strncmp("0H.", p, 3) == 0) p += 3; |
if (strncmp("0H.", p, 3) == 0) |
|
p += 3; |
return(p); |
return(p); |
} |
} |
|
|
|
|
bcopy(kgetsa(rt_mask(rt)), &sen2, sizeof(sen2)); |
bcopy(kgetsa(rt_mask(rt)), &sen2, sizeof(sen2)); |
bcopy(kgetsa(rt->rt_gateway), &sen3, sizeof(sen3)); |
bcopy(kgetsa(rt->rt_gateway), &sen3, sizeof(sen3)); |
|
|
if (sen1.sen_type == SENT_IP4) |
if (sen1.sen_type == SENT_IP4) { |
{ |
printf("%-18s %-5u ", netname(sen1.sen_ip_src.s_addr, |
printf("%-18s %-5u ", netname(sen1.sen_ip_src.s_addr, |
sen2.sen_ip_src.s_addr), ntohs(sen1.sen_sport)); |
sen2.sen_ip_src.s_addr), |
printf("%-18s %-5u %-5u ", netname(sen1.sen_ip_dst.s_addr, |
ntohs(sen1.sen_sport)); |
sen2.sen_ip_dst.s_addr), |
|
ntohs(sen1.sen_dport), sen1.sen_proto); |
printf("%-18s %-5u %-5u ", netname(sen1.sen_ip_dst.s_addr, |
|
sen2.sen_ip_dst.s_addr), |
|
ntohs(sen1.sen_dport), sen1.sen_proto); |
|
} |
} |
|
|
#ifdef INET6 |
#ifdef INET6 |
if (sen1.sen_type == SENT_IP6) |
if (sen1.sen_type == SENT_IP6) { |
{ |
bzero(&s61, sizeof(s61)); |
bzero(&s61, sizeof(s61)); |
bzero(&s62, sizeof(s62)); |
bzero(&s62, sizeof(s62)); |
s61.sin6_family = s62.sin6_family = AF_INET6; |
s61.sin6_family = s62.sin6_family = AF_INET6; |
s61.sin6_len = s62.sin6_len = sizeof(s61); |
s61.sin6_len = s62.sin6_len = sizeof(s61); |
bcopy(&sen1.sen_ip6_src, &s61.sin6_addr, sizeof(struct in6_addr)); |
bcopy(&sen1.sen_ip6_src, &s61.sin6_addr, sizeof(struct in6_addr)); |
bcopy(&sen2.sen_ip6_src, &s62.sin6_addr, sizeof(struct in6_addr)); |
bcopy(&sen2.sen_ip6_src, &s62.sin6_addr, sizeof(struct in6_addr)); |
|
|
|
printf("%-42s %-5u ", netname6(&s61, &s62.sin6_addr), |
printf("%-42s %-5u ", netname6(&s61, &s62.sin6_addr), |
ntohs(sen1.sen_ip6_sport)); |
ntohs(sen1.sen_ip6_sport)); |
|
|
bzero(&s61, sizeof(s61)); |
bzero(&s61, sizeof(s61)); |
bzero(&s62, sizeof(s62)); |
bzero(&s62, sizeof(s62)); |
s61.sin6_family = s62.sin6_family = AF_INET6; |
s61.sin6_family = s62.sin6_family = AF_INET6; |
s61.sin6_len = s62.sin6_len = sizeof(s61); |
s61.sin6_len = s62.sin6_len = sizeof(s61); |
bcopy(&sen1.sen_ip6_dst, &s61.sin6_addr, sizeof(struct in6_addr)); |
bcopy(&sen1.sen_ip6_dst, &s61.sin6_addr, sizeof(struct in6_addr)); |
bcopy(&sen2.sen_ip6_dst, &s62.sin6_addr, sizeof(struct in6_addr)); |
bcopy(&sen2.sen_ip6_dst, &s62.sin6_addr, sizeof(struct in6_addr)); |
|
|
printf("%-42s %-5u %-5u ", netname6(&s61, &s62.sin6_addr), |
printf("%-42s %-5u %-5u ", netname6(&s61, &s62.sin6_addr), |
ntohs(sen1.sen_ip6_dport), sen1.sen_ip6_proto); |
ntohs(sen1.sen_ip6_dport), sen1.sen_ip6_proto); |
} |
} |
#endif /* INET6 */ |
#endif /* INET6 */ |
|
|
if (sen3.sen_type == SENT_IPSP) |
if (sen3.sen_type == SENT_IPSP) { |
{ |
char hostn[NI_MAXHOST]; |
char hostn[NI_MAXHOST]; |
|
|
|
kget(sen3.sen_ipsp, ipo); |
kget(sen3.sen_ipsp, ipo); |
|
|
getnameinfo(&ipo.ipo_dst.sa, ipo.ipo_dst.sa.sa_len, |
getnameinfo(&ipo.ipo_dst.sa, ipo.ipo_dst.sa.sa_len, |
hostn, NI_MAXHOST, NULL, 0, NI_NUMERICHOST); |
hostn, NI_MAXHOST, NULL, 0, NI_NUMERICHOST); |
printf("%s", hostn); |
printf("%s", hostn); |
|
printf("/%-u", ipo.ipo_sproto); |
|
|
printf("/%-u", ipo.ipo_sproto); |
switch (ipo.ipo_type) { |
|
|
switch (ipo.ipo_type) |
|
{ |
|
case IPSP_IPSEC_REQUIRE: |
case IPSP_IPSEC_REQUIRE: |
printf("/require"); |
printf("/require"); |
break; |
break; |
|
|
case IPSP_IPSEC_ACQUIRE: |
case IPSP_IPSEC_ACQUIRE: |
printf("/acquire"); |
printf("/acquire"); |
break; |
break; |
|
|
case IPSP_IPSEC_USE: |
case IPSP_IPSEC_USE: |
printf("/use"); |
printf("/use"); |
break; |
break; |
|
|
case IPSP_IPSEC_DONTACQ: |
case IPSP_IPSEC_DONTACQ: |
printf("/dontacq"); |
printf("/dontacq"); |
break; |
break; |
|
|
case IPSP_PERMIT: |
case IPSP_PERMIT: |
printf("/permit"); |
printf("/permit"); |
break; |
break; |
|
|
case IPSP_DENY: |
case IPSP_DENY: |
printf("/deny"); |
printf("/deny"); |
break; |
break; |
|
|
default: |
default: |
printf("/<unknown type!>"); |
printf("/<unknown type!>"); |
} |
break; |
|
} |
|
|
if ((ipo.ipo_addr.sen_type == SENT_IP4 && |
if ((ipo.ipo_addr.sen_type == SENT_IP4 && |
ipo.ipo_addr.sen_direction == IPSP_DIRECTION_IN) || |
ipo.ipo_addr.sen_direction == IPSP_DIRECTION_IN) || |
(ipo.ipo_addr.sen_type == SENT_IP6 && |
(ipo.ipo_addr.sen_type == SENT_IP6 && |
ipo.ipo_addr.sen_ip6_direction == IPSP_DIRECTION_IN)) |
ipo.ipo_addr.sen_ip6_direction == IPSP_DIRECTION_IN)) |
printf("/in\n"); |
printf("/in\n"); |
else |
else if ((ipo.ipo_addr.sen_type == SENT_IP4 && |
if ((ipo.ipo_addr.sen_type == SENT_IP4 && |
ipo.ipo_addr.sen_direction == IPSP_DIRECTION_OUT) || |
ipo.ipo_addr.sen_direction == IPSP_DIRECTION_OUT) || |
(ipo.ipo_addr.sen_type == SENT_IP6 && |
(ipo.ipo_addr.sen_type == SENT_IP6 && |
ipo.ipo_addr.sen_ip6_direction == IPSP_DIRECTION_OUT)) |
ipo.ipo_addr.sen_ip6_direction == IPSP_DIRECTION_OUT)) |
printf("/out\n"); |
printf("/out\n"); |
else |
else |
printf("/<unknown>\n"); |
printf("/<unknown>\n"); |
|
} |
} |
} |
} |
|
|
|
|
char *p0; |
char *p0; |
{ |
{ |
char *p = p0; |
char *p = p0; |
for (; *p; p++) switch (*p) { |
|
|
|
case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': |
for (; *p; p++) |
*p += ('A' - 'a'); |
switch (*p) { |
|
case 'a': |
|
case 'b': |
|
case 'c': |
|
case 'd': |
|
case 'e': |
|
case 'f': |
|
*p += ('A' - 'a'); |
|
break; |
} |
} |
} |
} |