Xinu7/src/serve11/sys/shell/x_routes.c

/* x_routes.c - x_routes */

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

LOCAL	char	st[] = "F?GD";

/*------------------------------------------------------------------------
 *  x_routes  -  (command routes) format and print routing cache entries
 *------------------------------------------------------------------------
 */
COMMAND	x_routes(stdin, stdout, stderr, nargs, args)
int	stdin, stdout, stderr, nargs;
char	*args[];
{
	int	arindex;
	char	str[80];
	struct	arpent	*atabptr;

	if (nargs > 1) {
		Arp.atabsiz = Arp.atabnxt = 0;
		return(OK);
	}
	sprintf(str, "Routing cache: size=%d, next=%d\n",
		Arp.atabsiz, Arp.atabnxt);
	write(stdout, str, strlen(str));
	for (arindex=0; arindex<Arp.atabsiz; arindex++) {
		atabptr = &Arp.arptab[arindex];
		if (atabptr->arp_state == AR_FREE)
			continue;
		sprintf(str, " %2d. Route=%c, Dev=%2d",
			arindex,st[atabptr->arp_state],atabptr->arp_dev);
		sprintf(&str[strlen(str)],
			" IPaddr=%03d.%03d.%03d.%03d, ",
				atabptr->arp_Iad[0] & 0377,
				atabptr->arp_Iad[1] & 0377,
				atabptr->arp_Iad[2] & 0377,
				atabptr->arp_Iad[3] & 0377);
		sprintf(&str[strlen(str)],
			"Ether addr=%02x%02x.%02x%02x.%02x%02x\n",
				atabptr->arp_Ead[0]&0377,
				atabptr->arp_Ead[1]&0377,
				atabptr->arp_Ead[2]&0377,
				atabptr->arp_Ead[3]&0377,
				atabptr->arp_Ead[4]&0377,
				atabptr->arp_Ead[5]&0377 );
		write(stdout, str, strlen(str));
	}
	return(OK);
}