~kris/9p

9hist

dfffd21c424ff27f268a732e22716a8a399bacb3 — David du Colombier 23 years ago 9b40ec7
Plan 9 from Bell Labs 2003-04-04
4 files changed, 37 insertions(+), 37 deletions(-)

M boot/bootip.c
M ip/ip.h
M ip/ipaux.c
M ip/iproute.c
M boot/bootip.c => boot/bootip.c +1 -0
@@ 61,6 61,7 @@ configip(void)
	case -1:
		fatal("configuring ip: %r");
	case 0:
		print("exec-ing ipconfig\n");
		exec("/boot/ipconfig", arg);
		fatal("execing /ipconfig");
	default:

M ip/ip.h => ip/ip.h +1 -1
@@ 440,10 440,10 @@ enum

struct Routewalk
{
	int	n;
	int	o;
	int	h;
	char*	p;
	char*	e;
	void*	state;
	void	(*walk)(Route*, Routewalk*);
};

M ip/ipaux.c => ip/ipaux.c +11 -7
@@ 282,13 282,16 @@ eipfmt(Fmt *f)
	switch(f->r) {
	case 'E':		/* Ethernet address */
		p = va_arg(f->args, uchar*);
		return fmtprint(f, efmt, p[0], p[1], p[2], p[3], p[4], p[5]);
		snprint(buf, sizeof buf, efmt, p[0], p[1], p[2], p[3], p[4], p[5]);
		return fmtstrcpy(f, buf);

	case 'I':		/* Ip address */
		p = va_arg(f->args, uchar*);
common:
		if(memcmp(p, v4prefix, 12) == 0)
			return fmtprint(f, ifmt, p[12], p[13], p[14], p[15]);
		if(memcmp(p, v4prefix, 12) == 0){
			snprint(buf, sizeof buf, ifmt, p[12], p[13], p[14], p[15]);
			return fmtstrcpy(f, buf);
		}

		/* find longest elision */
		eln = eli = -1;


@@ 326,7 329,8 @@ common:

	case 'V':		/* v4 ip address */
		p = va_arg(f->args, uchar*);
		return fmtprint(f, ifmt, p[0], p[1], p[2], p[3]);
		snprint(buf, sizeof buf, ifmt, p[0], p[1], p[2], p[3]);
		return fmtstrcpy(f, buf);

	case 'M':		/* ip mask */
		p = va_arg(f->args, uchar*);


@@ 346,10 350,10 @@ common:
			n = 8*16;

		/* got one, use /xx format */
		return fmtprint(f, "/%d", n);

		snprint(buf, sizeof buf, "/%d", n);
		return fmtstrcpy(f, buf);
	}
	return fmtprint(f, "(eipfmt)");
	return fmtstrcpy(f, "(eipfmt)");
}

#define CLASS(p) ((*(uchar*)(p))>>6)

M ip/iproute.c => ip/iproute.c +24 -29
@@ 617,12 617,7 @@ routetype(int type, char *p)
		*p = 'p';
}

enum
{
	Rlinelen=	137,
};

char *rformat = "%-40.40I %-40.40M %-40.40I %4.4s %4.4s %3s\n";
char *rformat = "%-15I %-4M %-15I %4.4s %4.4s %3s\n";

void
convroute(Route *r, uchar *addr, uchar *mask, uchar *gate, char *t, int *nifc)


@@ 658,21 653,27 @@ convroute(Route *r, uchar *addr, uchar *mask, uchar *gate, char *t, int *nifc)
static void
sprintroute(Route *r, Routewalk *rw)
{
	int nifc;
	int nifc, n;
	char t[5], *iname, ifbuf[5];
	uchar addr[IPaddrlen], mask[IPaddrlen], gate[IPaddrlen];
	char *p;

	if(rw->o >= 0) {
		convroute(r, addr, mask, gate, t, &nifc);
		iname = "-";
		if(nifc != -1) {
			iname = ifbuf;
			sprint(ifbuf, "%d", nifc);
		}
		sprint(rw->p, rformat, addr, mask, gate, t, r->tag, iname);
		rw->p += Rlinelen;
	convroute(r, addr, mask, gate, t, &nifc);
	iname = "-";
	if(nifc != -1) {
		iname = ifbuf;
		sprint(ifbuf, "%d", nifc);
	}
	rw->o++;
	p = seprint(rw->p, rw->e, rformat, addr, mask, gate, t, r->tag, iname);
	if(rw->o < 0){
		n = p - rw->p;
		if(n > -rw->o){
			memmove(rw->p, rw->p-rw->o, n+rw->o);
			rw->p = p + rw->o;
		}
		rw->o += n;
	} else
		rw->p = p;
}

/*


@@ 683,7 684,7 @@ rr(Route *r, Routewalk *rw)
{
	int h;

	if(rw->n <= rw->o)
	if(rw->e <= rw->p)
		return 0;
	if(r == nil)
		return 1;


@@ 709,12 710,12 @@ void
ipwalkroutes(Fs *f, Routewalk *rw)
{
	rlock(&routelock);
	if(rw->n > rw->o) {
	if(rw->e > rw->p) {
		for(rw->h = 0; rw->h < nelem(f->v4root); rw->h++)
			if(rr(f->v4root[rw->h], rw) == 0)
				break;
	}
	if(rw->n > rw->o) {
	if(rw->e > rw->p) {
		for(rw->h = 0; rw->h < nelem(f->v6root); rw->h++)
			if(rr(f->v6root[rw->h], rw) == 0)
				break;


@@ 727,20 728,14 @@ routeread(Fs *f, char *p, ulong offset, int n)
{
	Routewalk rw;

	if(offset % Rlinelen)
		return 0;

	rw.p = p;
	rw.n = n/Rlinelen;
	rw.o = -(offset/Rlinelen);
	rw.e = p+n;
	rw.o = -offset;
	rw.walk = sprintroute;

	ipwalkroutes(f, &rw);

	if(rw.o < 0)
		rw.o = 0;

	return rw.o*Rlinelen;
	return rw.p - p;
}

/*