|
|
BSD 4.3reno
function rt_type(f) {
if (f in types)
return types[f];
return (f ? f : "unknown");
}
function rt_flags(f) {
s = "";
if (bit_and(f, 1))
s = (s "U");
if (bit_and(f, 2))
s = (s "G");
if (bit_and(f, 4))
s = (s "H");
if (bit_and(f, 8))
s = (s "R");
if (bit_and(f, 16))
s = (s "D");
if (bit_and(f, 32))
s = (s "M");
if (bit_and(f, 64))
s = (s "Do");
if (bit_and(f, 128))
s = (s "C");
if (bit_and(f, 256))
s = (s "X");
return s;
}
function do_stats() {
if (!hasunix) {
printf "routing statistics not implemented\n";
exit(1);
}
didone = 0;
for (i in unixRouteBadRedirects) {
didone = 1;
printf "routing:\n";
printf "%9s bad routing redirects\n", unixRouteBadRedirects;
printf "%9s dynamic created routes\n", unixRouteCreatedByRedirects;
printf "%9s new gateways due to redirects\n", unixRouteModifiedByRedirects;
printf "%9s destinations found unreachable\n", unixRouteLookupFails;
printf "%9s uses of a wildcard route\n", unixRouteWildcardUses;
}
if (!didone && DIAGNOSTIC)
printf "routing statistics: %s\n\n", DIAGNOSTIC;
}
BEGIN {
hasunix = unixNetstat == 1;
if (sflag) {
do_stats();
exit(0);
}
types[1] = "Other";
types[2] = "Invalid";
types[3] = "Direct";
types[4] = "Remote";
printf "Routing tables\n";
printf "%-15s %-15s %-8s %-6s %-10s %s\n",
"Destination",
"Gateway",
hasunix ? "Flags" : "Type",
"Refcnt",
"Use",
"Interface";
didone = 0;
for (i in ipRouteDest) {
didone = 1;
printf "%-15s %-15s %-8s %-6s %-10s %s (#%d)\n",
ipRouteDest == "0.0.0.0" ? "default" : ipRouteDest,
ipRouteNextHop,
hasunix ? rt_flags(unixIpRouteFlags[i]) \
: rt_type(ipRouteType),
hasunix ? unixIpRouteRefCnt[i] : "",
hasunix ? unixIpRouteUses[i] : "",
ifDescr[ipRouteIfIndex],
ipRouteIfIndex;
}
if (!didone && DIAGNOSTIC)
printf "ipRoutingTable: %s\n", DIAGNOSTIC;
if (!oflag)
exit(0);
didone = 0;
for (i in clnpRouteDest) {
didone = 1;
printf "NS+%-28s %-8s %-6s %-10s %s (#%d)\n",
clnpRouteDest == "0" ? "default" : clnpRouteDest,
hasunix ? rt_flags(unixclnpRouteFlags[i]) \
: rt_type(clnpRouteType),
hasunix ? unixclnpRouteRefCnt[i] : "",
hasunix ? unixclnpRouteUses[i] : "",
ifDescr[clnpRouteIfIndex],
clnpRouteIfIndex;
printf " %-15s NS+%s\n",
"", clnpRouteNextHop;
}
if (!didone && DIAGNOSTIC)
printf "clnpRoutingTable: %s\n", DIAGNOSTIC;
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.