version 1.43, 2001/11/19 19:02:15 |
version 1.44, 2002/01/17 21:34:58 |
|
|
case AF_INET6: |
case AF_INET6: |
afname = "Internet6"; |
afname = "Internet6"; |
break; |
break; |
#endif |
#endif |
case AF_NS: |
case AF_NS: |
afname = "XNS"; |
afname = "XNS"; |
break; |
break; |
|
|
if (Aflag) |
if (Aflag) |
printf("%-*s ", PLEN, "Address"); |
printf("%-*s ", PLEN, "Address"); |
printf("%-18s %-5s %-18s %-5s %-5s %-22s\n", |
printf("%-18s %-5s %-18s %-5s %-5s %-22s\n", |
"Source", "Port", "Destination", |
"Source", "Port", "Destination", |
"Port", "Proto", "SA(Address/Proto/Type/Direction)"); |
"Port", "Proto", "SA(Address/Proto/Type/Direction)"); |
} |
} |
|
|
|
|
printf("out of space\n"); |
printf("out of space\n"); |
exit(1); |
exit(1); |
} |
} |
if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0) { |
if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0) { |
perror("sysctl of routing table"); |
perror("sysctl of routing table"); |
exit(1); |
exit(1); |
} |
} |
|
|
cp = netname6(sa6, NULL); |
cp = netname6(sa6, NULL); |
break; |
break; |
} |
} |
#endif |
#endif |
|
|
case AF_NS: |
case AF_NS: |
cp = ns_print(sa); |
cp = ns_print(sa); |
|
|
case AF_IPX: |
case AF_IPX: |
cp = ipx_print(sa); |
cp = ipx_print(sa); |
break; |
break; |
|
|
case AF_LINK: |
case AF_LINK: |
{ |
{ |
struct sockaddr_dl *sdl = (struct sockaddr_dl *)sa; |
struct sockaddr_dl *sdl = (struct sockaddr_dl *)sa; |
|
|
rt->rt_nodes[0].rn_dupedkey ? " =>" : ""); |
rt->rt_nodes[0].rn_dupedkey ? " =>" : ""); |
} |
} |
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 * |
|
|
struct rtentry *rt; |
struct rtentry *rt; |
{ |
{ |
struct sockaddr_encap sen1, sen2, sen3; |
struct sockaddr_encap sen1, sen2, sen3; |
struct ipsec_policy ipo; |
struct ipsec_policy ipo; |
|
|
#ifdef INET6 |
#ifdef INET6 |
struct sockaddr_in6 s61, s62; |
struct sockaddr_in6 s61, s62; |
|
|
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), |
sen2.sen_ip_src.s_addr), |
ntohs(sen1.sen_sport)); |
ntohs(sen1.sen_sport)); |
|
|
printf("%-18s %-5u %-5u ", netname(sen1.sen_ip_dst.s_addr, |
printf("%-18s %-5u %-5u ", netname(sen1.sen_ip_dst.s_addr, |
sen2.sen_ip_dst.s_addr), |
sen2.sen_ip_dst.s_addr), |
ntohs(sen1.sen_dport), sen1.sen_proto); |
ntohs(sen1.sen_dport), sen1.sen_proto); |
} |
} |
|
|
#ifdef INET6 |
#ifdef INET6 |
|
|
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!>"); |
} |
} |
|
|
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"); |
} |
} |
} |
} |
|
|
void |
void |