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; }