x_routes.c

来自「TCP-IP红宝书源代码」· C语言 代码 · 共 73 行

C
73
字号
/* x_routes.c - x_routes */

#include <conf.h>
#include <kernel.h>
#include <network.h>

/*------------------------------------------------------------------------
 *  x_routes  -  (command routes) format and print routing entries
 *------------------------------------------------------------------------
 */
COMMAND	x_routes(int stdin, int stdout, int stderr, int nargs, char *args[])
{
	char netname[64], gwname[64];
	char str[80];
	struct route *srt;
	int	i, usedots;

	if (nargs > 2) {
		write (stdout, "usage: routes [-n]\n", 19);
		return OK;
	}
	usedots = nargs == 2;
	
	sprintf(str, "%-16s %-8s %-16s metric intf ttl refcnt usecnt\n",
			"net", "mask", "gateway");
	write(stdout, str, strlen(str));
	for(i=0; i<RT_TSIZE; ++i) {
		for (srt=rttable[i]; srt != NULL; srt=srt->rt_next) {
			if (usedots) {
				ip2dot(netname, srt->rt_net);
				ip2dot(gwname, srt->rt_gw);
			} else {
				ip2name(srt->rt_net, netname);
				ip2name(srt->rt_gw, gwname);
			}
			netname[16] = gwname[16] = '\0';
			sprintf(str, "%-16s %08x %-16s %6d   %1d  ",
				netname, net2hl(srt->rt_mask), gwname,
				srt->rt_metric, srt->rt_ifnum);
			write(stdout, str, strlen(str));
			if (srt->rt_ttl >= RT_INF)
				sprintf(str, " -  %6d %6d\n",
					srt->rt_refcnt, srt->rt_usecnt);
			else
				sprintf(str, "%3d %6d %6d\n", srt->rt_ttl,
					srt->rt_refcnt, srt->rt_usecnt);
			write(stdout, str, strlen(str));
		}
	}
	if (Route.ri_default) {
		srt = Route.ri_default;
		if (usedots) {
			ip2dot(netname, srt->rt_net);
			ip2dot(gwname, srt->rt_gw);
		} else {
			ip2name(srt->rt_net, netname);
			ip2name(srt->rt_gw, gwname);
		}
		netname[16] = gwname[16] = '\0';
		sprintf(str, "%-16s %08x %-16s %6d   %1d  ",
			netname, srt->rt_mask, gwname,
			srt->rt_metric, srt->rt_ifnum);
		write(stdout, str, strlen(str));
		if (srt->rt_ttl >= RT_INF)
			sprintf(str, " -  %6d %6d\n",
				srt->rt_refcnt, srt->rt_usecnt);
		else
			sprintf(str, "%3d %6d %6d\n", srt->rt_ttl,
				srt->rt_refcnt, srt->rt_usecnt);
		write(stdout, str, strlen(str));
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?