Net2/usr/src/contrib/isode/snmp/gawk-2.11/s-gawk/mib.routes

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