Browse Source

Plan 9 from Bell Labs 2009-11-18

David du Colombier 14 years ago
parent
commit
c655406982
8 changed files with 31 additions and 425 deletions
  1. 7 6
      sys/man/8/snoopy
  2. 6 6
      sys/src/9/ip/esp.c
  3. 6 6
      sys/src/9/ip/icmp6.c
  4. 2 0
      sys/src/9/ip/ip.h
  5. 8 7
      sys/src/9/ip/tcp.c
  6. 0 398
      sys/src/9/ip/tripmedium.c
  7. 1 1
      sys/src/9/kw/plug
  8. 1 1
      sys/src/9/kw/words

+ 7 - 6
sys/man/8/snoopy

@@ -15,9 +15,10 @@ snoopy \- spy on network packets
 .B -f
 .I filter-expression
 ] [
-.B -h first-header
+.B -h
+.I first-header
 ] [
-packet-source
+.I packet-source
 ]
 .PP
 .B snoopy
@@ -26,7 +27,6 @@ packet-source
 .I proto...
 ]
 .SH DESCRIPTION
-.PP
 .I Snoopy
 reads packets from a
 .I packet-source
@@ -169,10 +169,11 @@ to filter the packet stream.  The default is
 to match all packets.
 .TP
 .B -h
-assume the first header per packet to be
-.IR first-header .
+assume the first header per packet to be of the
+.I first-header
+protocol.
 The default is
-.IR ether .
+.LR ether .
 .SH EXAMPLES
 To display only
 .SM BOOTP

+ 6 - 6
sys/src/9/ip/esp.c

@@ -474,7 +474,7 @@ espiput(Proto *esp, Ipifc*, Block *bp)
 	c = convlookup(esp, vers.spi);
 	if(c == nil) {
 		qunlock(esp);
-		netlog(f, Logesp, "esp: no conv %I -> %I!%d\n", vers.raddr,
+		netlog(f, Logesp, "esp: no conv %I -> %I!%lud\n", vers.raddr,
 			vers.laddr, vers.spi);
 		icmpnoconv(f, bp);
 		freeblist(bp);
@@ -491,7 +491,7 @@ espiput(Proto *esp, Ipifc*, Block *bp)
 
 	if(BLEN(bp) < vers.hdrlen + ecb->espivlen + Esptaillen + ecb->ahlen) {
 		qunlock(c);
-		netlog(f, Logesp, "esp: short block %I -> %I!%d\n", vers.raddr,
+		netlog(f, Logesp, "esp: short block %I -> %I!%lud\n", vers.raddr,
 			vers.laddr, vers.spi);
 		freeb(bp);
 		return;
@@ -505,7 +505,7 @@ espiput(Proto *esp, Ipifc*, Block *bp)
 	if(!ecb->auth(ecb, espspi, auth - espspi, auth)) {
 		qunlock(c);
 print("esp: bad auth %I -> %I!%ld\n", vers.raddr, vers.laddr, vers.spi);
-		netlog(f, Logesp, "esp: bad auth %I -> %I!%d\n", vers.raddr,
+		netlog(f, Logesp, "esp: bad auth %I -> %I!%lud\n", vers.raddr,
 			vers.laddr, vers.spi);
 		freeb(bp);
 		return;
@@ -514,7 +514,7 @@ print("esp: bad auth %I -> %I!%ld\n", vers.raddr, vers.laddr, vers.spi);
 	payload = BLEN(bp) - vers.hdrlen - ecb->ahlen;
 	if(payload <= 0 || payload % 4 != 0 || payload % ecb->espblklen != 0) {
 		qunlock(c);
-		netlog(f, Logesp, "esp: bad length %I -> %I!%d payload=%d BLEN=%d\n",
+		netlog(f, Logesp, "esp: bad length %I -> %I!%lud payload=%d BLEN=%lud\n",
 			vers.raddr, vers.laddr, vers.spi, payload, BLEN(bp));
 		freeb(bp);
 		return;
@@ -524,7 +524,7 @@ print("esp: bad auth %I -> %I!%ld\n", vers.raddr, vers.laddr, vers.spi);
 	if(!ecb->cipher(ecb, bp->rp + vers.hdrlen, payload)) {
 		qunlock(c);
 print("esp: cipher failed %I -> %I!%ld: %s\n", vers.raddr, vers.laddr, vers.spi, up->errstr);
-		netlog(f, Logesp, "esp: cipher failed %I -> %I!%d: %s\n",
+		netlog(f, Logesp, "esp: cipher failed %I -> %I!%lud: %s\n",
 			vers.raddr, vers.laddr, vers.spi, up->errstr);
 		freeb(bp);
 		return;
@@ -536,7 +536,7 @@ print("esp: cipher failed %I -> %I!%ld: %s\n", vers.raddr, vers.laddr, vers.spi,
 	nexthdr = et->nexthdr;
 	if(payload <= 0) {
 		qunlock(c);
-		netlog(f, Logesp, "esp: short packet after decrypt %I -> %I!%d\n",
+		netlog(f, Logesp, "esp: short packet after decrypt %I -> %I!%lud\n",
 			vers.raddr, vers.laddr, vers.spi);
 		freeb(bp);
 		return;

+ 6 - 6
sys/src/9/ip/icmp6.c

@@ -439,10 +439,10 @@ icmphostunr(Fs *f, Ipifc *ifc, Block *bp, int code, int free)
 
 	rlock(ifc);
 	if(ipv6anylocal(ifc, np->src))
-		netlog(f, Logicmp, "send icmphostunr -> s%I d%I\n",
+		netlog(f, Logicmp, "send icmphostunr -> src %I dst %I\n",
 			p->src, p->dst);
 	else {
-		netlog(f, Logicmp, "icmphostunr fail -> s%I d%I\n",
+		netlog(f, Logicmp, "icmphostunr fail -> src %I dst %I\n",
 			p->src, p->dst);
 		freeblist(nbp);
 		if(free)
@@ -492,10 +492,10 @@ icmpttlexceeded6(Fs *f, Ipifc *ifc, Block *bp)
 	np = (IPICMP *) nbp->rp;
 
 	if(ipv6anylocal(ifc, np->src))
-		netlog(f, Logicmp, "send icmpttlexceeded6 -> s%I d%I\n",
+		netlog(f, Logicmp, "send icmpttlexceeded6 -> src %I dst %I\n",
 			p->src, p->dst);
 	else {
-		netlog(f, Logicmp, "icmpttlexceeded6 fail -> s%I d%I\n",
+		netlog(f, Logicmp, "icmpttlexceeded6 fail -> src %I dst %I\n",
 			p->src, p->dst);
 		return;
 	}
@@ -531,10 +531,10 @@ icmppkttoobig6(Fs *f, Ipifc *ifc, Block *bp)
 	np = (IPICMP *)nbp->rp;
 
 	if(ipv6anylocal(ifc, np->src))
-		netlog(f, Logicmp, "send icmppkttoobig6 -> s%I d%I\n",
+		netlog(f, Logicmp, "send icmppkttoobig6 -> src %I dst %I\n",
 			p->src, p->dst);
 	else {
-		netlog(f, Logicmp, "icmppkttoobig6 fail -> s%I d%I\n",
+		netlog(f, Logicmp, "icmppkttoobig6 fail -> src %I dst %I\n",
 			p->src, p->dst);
 		return;
 	}

+ 2 - 0
sys/src/9/ip/ip.h

@@ -436,6 +436,8 @@ void	ifclog(Fs*, uchar *, int);
 void	ifclogopen(Fs*, Chan*);
 void	ifclogclose(Fs*, Chan*);
 
+#pragma varargck argpos netlog	3
+
 /*
  *  iproute.c
  */

+ 8 - 7
sys/src/9/ip/tcp.c

@@ -581,7 +581,7 @@ tcprcvwin(Conv *s)				/* Call with tcb locked */
 	if(w < 0)
 		w = 0;
 	if(w == 0)
-		netlog(s->p->f, Logtcp, "tcprcvwim: window %d qlen %d\n", tcb->window, qlen(s->rq));
+		netlog(s->p->f, Logtcp, "tcprcvwim: window %lud qlen %d\n", tcb->window, qlen(s->rq));
 	tcb->rcv.wnd = w;
 	if(w == 0)
 		tcb->rcv.blocked = 1;
@@ -1623,7 +1623,7 @@ tcpincoming(Conv *s, Tcp *segp, uchar *src, uchar *dst, uchar version)
 	/* find a call in limbo */
 	h = hashipa(src, segp->source);
 	for(l = &tpriv->lht[h]; (lp = *l) != nil; l = &lp->next){
-		netlog(s->p->f, Logtcp, "tcpincoming s %I,%ux/%I,%ux d %I,%ux/%I,%ux v %d/%d\n",
+		netlog(s->p->f, Logtcp, "tcpincoming s %I!%ud/%I!%ud d %I!%ud/%I!%ud v %d/%d\n",
 			src, segp->source, lp->raddr, lp->rport,
 			dst, segp->dest, lp->laddr, lp->lport,
 			version, lp->version
@@ -1814,7 +1814,7 @@ update(Conv *s, Tcp *seg)
 	&& seg->wnd == tcb->snd.wnd) {
 
 		/* this is a pure ack w/o window update */
-		netlog(s->p->f, Logtcprxmt, "dupack %lud ack %lud sndwnd %d advwin %d\n",
+		netlog(s->p->f, Logtcprxmt, "dupack %lud ack %lud sndwnd %lud advwin %lud\n",
 			tcb->snd.dupacks, seg->ack, tcb->snd.wnd, seg->wnd);
 
 		if(++tcb->snd.dupacks == TCPREXMTTHRESH) {
@@ -1859,7 +1859,7 @@ update(Conv *s, Tcp *seg)
 		tcb->snd.dupacks = 0;
 		tcb->snd.recovery = 0;
 	} else
-		netlog(s->p->f, Logtcp, "rxt next %lud, cwin %ud\n", seg->ack, tcb->cwind);
+		netlog(s->p->f, Logtcp, "rxt next %lud, cwin %lud\n", seg->ack, tcb->cwind);
 
 	/* Compute the new send window size */
 	acked = seg->ack - tcb->snd.una;
@@ -2047,7 +2047,8 @@ tcpiput(Proto *tcp, Ipifc*, Block *bp)
 	/* Look for a matching conversation */
 	s = iphtlook(&tpriv->ht, source, seg.source, dest, seg.dest);
 	if(s == nil){
-		netlog(f, Logtcp, "iphtlook failed\n");
+		netlog(f, Logtcp, "iphtlook(src %I!%d, dst %I!%d) failed\n",
+			source, seg.source, dest, seg.dest);
 reset:
 		qunlock(tcp);
 		sndrst(tcp, source, dest, length, &seg, version, "no conversation");
@@ -2559,7 +2560,7 @@ tcpoutput(Conv *s)
 			if(ssize < n)
 				n = ssize;
 			tcb->resent += n;
-			netlog(f, Logtcp, "rexmit: %I.%d -> %I.%d ptr %lux nxt %lux\n",
+			netlog(f, Logtcp, "rexmit: %I!%d -> %I!%d ptr %lux nxt %lux\n",
 				s->raddr, s->rport, s->laddr, s->lport, tcb->snd.ptr, tcb->snd.nxt);
 			tpriv->stats[RetransSegs]++;
 		}
@@ -2826,7 +2827,7 @@ tcptimeout(void *arg)
 			localclose(s, Etimedout);
 			break;
 		}
-		netlog(s->p->f, Logtcprxmt, "timeout rexmit 0x%lux %d/%d\n", tcb->snd.una, tcb->timer.start, NOW);
+		netlog(s->p->f, Logtcprxmt, "timeout rexmit %#lux %d/%lud\n", tcb->snd.una, tcb->timer.start, NOW);
 		tcpsettimer(tcb);
 		tcprxmit(s);
 		tpriv->stats[RetransTimeouts]++;

+ 0 - 398
sys/src/9/ip/tripmedium.c

@@ -1,398 +0,0 @@
-#include "u.h"
-#include "../port/lib.h"
-#include "mem.h"
-#include "dat.h"
-#include "fns.h"
-#include "../port/error.h"
-
-#include "ip.h"
-#include "trip.h"
-
-static void	tripread(void *a);
-static void	tripbind(Ipifc *ifc, int argc, char **argv);
-static void	tripunbind(Ipifc *ifc);
-static void	tripbwrite(Ipifc *ifc, Block *bp, int version, uchar *ip);
-static void	tripaddmulti(Ipifc *ifc, uchar*, uchar*);
-static void	tripremmulti(Ipifc *ifc, uchar*, uchar*);
-static void	tripaddroute(Ipifc *ifc, int, uchar*, uchar*, uchar*, int);
-static void	tripremroute(Ipifc *ifc, int, uchar*, uchar*);
-static void	tripares(Fs*, int, uchar*, uchar*, int, int);
-
-Medium tripmedium =
-{
-.name=		"trip",
-.mintu=	20,
-.maxtu=	64*1024,
-.maclen=	LCIMACSIZE,
-.bind=		tripbind,
-.unbind=	tripunbind,
-.bwrite=	tripbwrite,
-.addmulti=	tripaddmulti,
-.remmulti=	tripremmulti,
-.addroute=	tripaddroute,
-.remroute=	tripremroute,
-.ares=		tripares,
-};
-
-typedef struct	Tripinfo Tripinfo;
-struct Tripinfo
-{
-	Fs*	fs;		/* my instance of the IP stack */
-	Ipifc*	ifc;		/* IP interface */
-	Card*	dev;
-	Proc*	readp;		/* reading process */
-	Chan*	mchan;		/* Data channel */
-};
-
-/*
- *  called to bind an IP ifc to an ethernet device
- *  called with ifc qlock'd
- */
-static void
-tripbind(Ipifc *ifc, int argc, char **argv)
-{
-	int fd;
-	Chan *mchan;
-	Tripinfo *er;
-
-	if(argc < 2)
-		error(Ebadarg);
-
-	fd = kopen(argv[2], ORDWR);
-	if(fd < 0)
-		error("trip open failed");
-
-	mchan = fdtochan(up->env->fgrp, fd, ORDWR, 0, 1);
-	kclose(fd);
-
-	if(devtab[mchan->type]->dc != 'T') {
-		cclose(mchan);
-		error(Enoport);
-	}
-
-	er = smalloc(sizeof(*er));
-	er->mchan = mchan;
-	er->ifc = ifc;
-	er->dev = tripsetifc(mchan, ifc);
-	er->fs = ifc->conv->p->f;
-
-	ifc->arg = er;
-
-	kproc("tripread", tripread, ifc);
-}
-
-/*
- *  called with ifc qlock'd
- */
-static void
-tripunbind(Ipifc *ifc)
-{
-	Tripinfo *er = ifc->arg;
-/*
-	if(er->readp)
-		postnote(er->readp, 1, "unbind", 0);
-*/
-	tsleep(&up->sleep, return0, 0, 300);
-
-	if(er->mchan != nil)
-		cclose(er->mchan);
-
-	free(er);
-}
-
-/*
- *  called by ipoput with a single block to write
- */
-static void
-tripbwrite(Ipifc *ifc, Block *bp, int version, uchar *ip)
-{
-	Tripinfo *er = ifc->arg;
-
-	/*
-	 * Packet is rerouted at linecard
-	 * so the gateway is ignored
-	 */
-	USED(ip);
-	USED(version);
-
-	if(waserror()) {
-		print("tripwrite failed\n");
-		return;
-	}
-
-	devtab[er->mchan->type]->bwrite(er->mchan, bp, 0);
-	poperror();
-	ifc->out++;
-}
-
-/*
- *  process to read from the trip interface
- */
-static void
-tripread(void *a)
-{
-	Ipifc *ifc;
-	Block *bp;
-	Tripinfo *er;
-
-	ifc = a;
-	er = ifc->arg;
-	er->readp = up;	/* hide identity under a rock for unbind */
-
-	for(;;) {
-		bp = devtab[er->mchan->type]->bread(er->mchan, ifc->maxtu, 0);
-		ifc->in++;
-		ipiput4(er->fs, ifc, bp);
-	}
-
-	pexit("hangup", 1);
-}
-
-static void
-tripaddroute(Ipifc *ifc, int v, uchar *addr, uchar *mask, uchar *gate, int t)
-{
-	int alen;
-	MTroute mtr;
-	Tripinfo *tinfo;
-
-	tinfo = ifc->arg;
-	if(!tinfo->dev->routing)
-		return;
-
-	/*
-	 * Multicast addresses are handled on the linecard by
-	 * the multicast port driver, so the route load is dumped.
-	 *	loaded by addmulti/remmulti for SBC routes
-	 *		  joinmulti/leavemulti for inter LC
-	 */
-	if(ipismulticast(addr))
-		return;
-
-	mtr.type = T_ROUTEADMIN;
-	if(v & Rv4) {
-		mtr.op = RTADD4;
-		alen = IPv4addrlen;
-	}
-	else {
-		mtr.op = RTADD6;
-		alen = IPaddrlen;
-	}
-	mtr.rtype = t;
-	memmove(mtr.addr, addr, alen);
-	memmove(mtr.mask, mask, alen);
-	memmove(mtr.gate, gate, alen);
-
-	i2osend(tinfo->dev, &mtr, sizeof(mtr));
-}
-
-static void
-tripremroute(Ipifc *ifc, int v, uchar *addr, uchar *mask)
-{
-	int alen;
-	MTroute mtr;
-	Tripinfo *tinfo;
-
-	tinfo = ifc->arg;
-	if(!tinfo->dev->routing)
-		return;
-
-	if(ipismulticast(addr))
-		return;
-
-	mtr.type = T_ROUTEADMIN;
-	if(v & Rv4) {
-		mtr.op = RTDEL4;
-		alen = IPv4addrlen;
-	}
-	else {
-		mtr.op = RTDEL6;
-		alen = IPaddrlen;
-	}
-	memmove(mtr.addr, addr, alen);
-	memmove(mtr.mask, mask, alen);
-
-	i2osend(tinfo->dev, &mtr, sizeof(mtr));
-}
-
-static void
-tripxmitroute(Route *r, Routewalk *rw)
-{
-	int nifc;
-	char t[5];
-	uchar a[IPaddrlen], m[IPaddrlen], g[IPaddrlen];
-
-	convroute(r, a, m, g, t, &nifc);
-	if(!(r->type & Rv4)) {
-		tripaddroute(rw->state, 0, a, m, g, r->type);
-		return;
-	}
-
-	tripaddroute(rw->state, Rv4, a+IPv4off, m+IPv4off, g+IPv4off, r->type);
-}
-
-static void
-sendifcinfo(Ipifc *dest)
-{
-	Conv **cp, **e;
-	Iplifc *l;
-	Ipifc *ifc;
-	MTifctl mtc;
-	Tripinfo *tinfo, *oinfo;
-	Proto *p;
-
-	tinfo = dest->arg;
-
-	/* Install interfaces */
-	p = tinfo->fs->ipifc;
-	e = &p->conv[p->nc];
-	for(cp = p->conv; cp < e; cp++) {
-
-		if(*cp == nil)
-			continue;
-
-		ifc = (Ipifc*)(*cp)->ptcl;
-		if(dest == ifc)
-			continue;
-
-		mtc.type = T_CTLIFADMIN;
-		mtc.maxtu = ifc->maxtu;
-		mtc.mintu = ifc->mintu;
-
-		mtc.port = 0;
-		if(ifc->m == &tripmedium) {
-			oinfo = ifc->arg;
-			mtc.port = oinfo->dev->bar[0].bar;
-		}
-
-		for(l = ifc->lifc; l != nil; l = l->next) {
-			if(isv4(l->local)) {
-				mtc.op = IFADD4;
-				memmove(mtc.addr, l->local+IPv4off, IPv4addrlen);
-				memmove(mtc.mask, l->mask+IPv4off, IPv4addrlen);
-			}
-			else {
-				mtc.op = IFADD6;
-				memmove(mtc.addr, l->local, sizeof(mtc.addr));
-				memmove(mtc.mask, l->mask, sizeof(mtc.mask));
-			}
-
-			i2osend(tinfo->dev, &mtc, sizeof(mtc));
-		}
-	}
-}
-
-void
-tripsync(Ipifc *ifc)
-{
-	Routewalk rw;
-
-	if(ifc == nil) {
-		print("tripsync: interface not bound\n");
-		return;
-	}
-
-	/* Mirror the route table into the lincard */
-	rw.o = 0;
-	rw.n = (1<<22);
-	rw.state = ifc;
-	rw.walk = tripxmitroute;
-
-	ipwalkroutes(ifc->conv->p->f, &rw);
-
-	/*
-	 * Tell the linecard about interfaces that already
-	 * exist elsewhere
-	 */
-	sendifcinfo(ifc);
-}
-
-/* Tell a line card the SBC is interested in listening
- * to a multicast address
- */
-static void
-tripaddmulti(Ipifc *ifc, uchar *addr, uchar *ifca)
-{
-	MTmultiears mt;
-	Tripinfo *tinfo;
-
-	/* print("tripaddmulti %I %I\n", addr, ifca); /**/
-
-	tinfo = ifc->arg;
-	if(!tinfo->dev->routing)
-		return;
-
-	mt.type = T_MULTIEAR;
-	mt.op = ADDMULTI;
-	memmove(mt.addr, addr, sizeof(mt.addr));
-	memmove(mt.ifca, ifca, sizeof(mt.ifca));
-
-	i2osend(tinfo->dev, &mt, sizeof(mt));
-}
-
-/* Tell a line card the SBC is no longer interested in listening
- * to a multicast address
- */
-static void
-tripremmulti(Ipifc *ifc, uchar *addr, uchar *ifca)
-{
-	MTmultiears mt;
-	Tripinfo *tinfo;
-
-	tinfo = ifc->arg;
-	if(!tinfo->dev->routing)
-		return;
-
-	mt.type = T_MULTIEAR;
-	mt.op = REMMULTI;
-	memmove(mt.addr, addr, sizeof(mt.addr));
-	memmove(mt.ifca, ifca, sizeof(mt.ifca));
-
-	i2osend(tinfo->dev, &mt, sizeof(mt));
-}
-
-static void
-tripares(Fs *fs, int vers, uchar *ip, uchar *mac, int l, int)
-{
-	Route *r;
-	Ipifc *ifc;
-	MTaresenter ta;
-	Tripinfo *tinfo;
-	uchar v6ip[IPaddrlen];
-
-	if(vers == V4) {
-		r = v4lookup(fs, ip);
-		v4tov6(v6ip, ip);
-		ip = v6ip;
-	}
-	else
-		r = v6lookup(fs, ip);
-
-	if(r == nil) {
-		print("tripares: no route for entry\n");
-		return;
-	}
-
-	ifc = r->ifc;
-
-	tinfo = ifc->arg;
-	if(!tinfo->dev->routing)
-		return;
-
-	if(vers == V4) {
-		v4tov6(v6ip, ip);
-		ip = v6ip;
-	}
-
-	ta.type = T_ARESENTER;
-	ta.maclen = l;
-	memmove(ta.addr, ip, IPaddrlen);
-	memmove(ta.amac, mac, l);
-
-	i2osend(tinfo->dev, &ta, sizeof(ta));
-}
-
-void
-tripmediumlink(void)
-{
-	addipmedium(&tripmedium);
-}

+ 1 - 1
sys/src/9/kw/plug

@@ -51,7 +51,7 @@ bootdir
 	/arm/bin/ip/ipconfig ipconfig
 	/arm/bin/auth/factotum factotum
 #	/arm/bin/usb/usbd
-	nvram
+#	nvram
 
 port
 	int cpuserver = 1;

+ 1 - 1
sys/src/9/kw/words

@@ -1,4 +1,4 @@
-global scale sheevaplug
+marvell or global scale sheevaplug
 
 marvell 88f6281 (feroceon kirkwood) SoC
 arm926ej-s rev 1 [56251311] (armv5tejl) 1.2GHz cpu