169 lines · 2.4 KB · Text
RawDownload
_ni=0;	// network indent level defn_ni() {	loop 1,_ni do {		print("\t");	}} defnipdev(n) {	_ipfs(*(ipfs+4*n));} // the funny _foo/foo pairs exist so that if we get// interrupted in the middle of one of these, _ni will // get reset to 0 next time an external call happens. defn_ipfs(fs) {	complex Fs fs;	local i; 	print("ipfs(", fs\X, ")  #I", fs.dev\D, "\n");	i=0;	_ni = _ni+1;	while i < fs.np do {		_proto(*(fs.p+i*4));		i = i + 1;	}	_ni = _ni-1;} defnipfs(fs) {	_ni = 0;	_ipfs(fs);} defn_proto(p) {	local c;	complex Proto p;	_ni();	print("proto(", p\X, ") ", *(p.name\s), "\n");	_ni = _ni+1;	local i;	i = 0;	while i < p.nc do {		c = *(p.conv+i*4);		complex Conv c;		if c != 0 && c.inuse then 			_conv(*(p.conv+i*4));		i = i + 1;	}	_ni = _ni - 1;} defnproto(p) {	_ni = 0;	_proto(p);} defn_conv(c) {	complex Conv c;	_ni();	local p;	p = c.p;	complex Proto p;	print("conv(", c\X, ") ", *(p.name\s), "/", c.x\D, " ", 		iptostr(*(c.laddr+12)), "!", c.lport\D, " ", iptostr(*(c.raddr+12)), 		"!", c.rport\D, " rq ", qtostr(c.rq), " wq ", qtostr(c.wq), 		" eq ", qtostr(c.eq), "\n");} defnconv(c) {	_ni = 0;	_conv(c);} defniptostr(a){	// BUG: little endian	return itoa(a&0xFF)+"."+itoa((a>>8)&0xFF)+"."+itoa((a>>16)&0xFF)+"."+itoa((a>>24)&0xFF);} defnqtostr(q){	complex Queue q; 	return "queue("+itoa(q, "%lux")+") ["+itoa(q.len, "%d")+","+itoa(q.dlen, "%d")+","+itoa(qblocks(q), "%d")+"]";} defnqblocks(q){	complex Queue q;	local b, n; 	b = q.bfirst;	n = 0;	while b != 0 do { 		n = n + 1;		complex Block b;		b = b.next;	}	return n;} defn_queue(q){	complex Queue q;	local b; 	print("queue(", q\X, ") len ", q.len\D, " dlen ", q.dlen\D, " limit ", q.limit\D, " nblocks ", qblocks(q)\D);	if q.state & Qstarve then 		print(" starve");	if q.state & Qmsg then		print(" msg");	if q.state & Qclosed then		print(" closed");	if q.state & Qflow then		print(" flow");	if q.state & Qcoalesce then		print(" coalesce");	print("\n"); 	b = q.bfirst;	_ni = _ni+1;	while b != 0 do {		_block(b);		complex Block b;		b = b.next;	}	_ni = _ni - 1;} defnqueue(q){	_ni = 0;	_queue(q);} defn_block(b){	complex Block b; 	_ni();	print("block(", b\X, ") base ", b.base\X, " rp ", b.rp\X, "/", b.rp-b.base\D, " wp ", b.wp\X, "/", b.wp-b.base\D, " lim ", b.lim\X, "/", b.lim-b.base\D, "\n");} defnblock(b){	_ni = 0;	block(b);} print("/sys/lib/acid/network");needacid("tcp");needacid("qio");