Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/feature_fixcpp/sys/lib/acid/network – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
_ni=0;	// network indent level
2
 
3
defn
4
_ni() {
5
	loop 1,_ni do {
6
		print("\t");
7
	}
8
}
9
 
10
defn
11
ipdev(n) {
12
	_ipfs(*(ipfs+4*n));
13
}
14
 
15
// the funny _foo/foo pairs exist so that if we get
16
// interrupted in the middle of one of these, _ni will 
17
// get reset to 0 next time an external call happens.
18
 
19
defn
20
_ipfs(fs) {
21
	complex Fs fs;
22
	local i;
23
 
24
	print("ipfs(", fs\X, ")  #I", fs.dev\D, "\n");
25
	i=0;
26
	_ni = _ni+1;
27
	while i < fs.np do {
28
		_proto(*(fs.p+i*4));
29
		i = i + 1;
30
	}
31
	_ni = _ni-1;
32
}
33
 
34
defn
35
ipfs(fs) {
36
	_ni = 0;
37
	_ipfs(fs);
38
}
39
 
40
defn
41
_proto(p) {
42
	local c;
43
	complex Proto p;
44
	_ni();
45
	print("proto(", p\X, ") ", *(p.name\s), "\n");
46
	_ni = _ni+1;
47
	local i;
48
	i = 0;
49
	while i < p.nc do {
50
		c = *(p.conv+i*4);
51
		complex Conv c;
52
		if c != 0 && c.inuse then 
53
			_conv(*(p.conv+i*4));
54
		i = i + 1;
55
	}
56
	_ni = _ni - 1;
57
}
58
 
59
defn
60
proto(p) {
61
	_ni = 0;
62
	_proto(p);
63
}
64
 
65
defn
66
_conv(c) {
67
	complex Conv c;
68
	_ni();
69
	local p;
70
	p = c.p;
71
	complex Proto p;
72
	print("conv(", c\X, ") ", *(p.name\s), "/", c.x\D, " ", 
73
		iptostr(*(c.laddr+12)), "!", c.lport\D, " ", iptostr(*(c.raddr+12)), 
74
		"!", c.rport\D, " rq ", qtostr(c.rq), " wq ", qtostr(c.wq), 
75
		" eq ", qtostr(c.eq), "\n");
76
}
77
 
78
defn
79
conv(c) {
80
	_ni = 0;
81
	_conv(c);
82
}
83
 
84
defn
85
iptostr(a)
86
{
87
	// BUG: little endian
88
	return itoa(a&0xFF)+"."+itoa((a>>8)&0xFF)+"."+itoa((a>>16)&0xFF)+"."+itoa((a>>24)&0xFF);
89
}
90
 
91
defn
92
qtostr(q)
93
{
94
	complex Queue q;
95
 
96
	return "queue("+itoa(q, "%lux")+") ["+itoa(q.len, "%d")+","+itoa(q.dlen, "%d")+","+itoa(qblocks(q), "%d")+"]";
97
}
98
 
99
defn
100
qblocks(q)
101
{
102
	complex Queue q;
103
	local b, n;
104
 
105
	b = q.bfirst;
106
	n = 0;
107
	while b != 0 do { 
108
		n = n + 1;
109
		complex Block b;
110
		b = b.next;
111
	}
112
	return n;
113
}
114
 
115
defn
116
_queue(q)
117
{
118
	complex Queue q;
119
	local b;
120
 
121
	print("queue(", q\X, ") len ", q.len\D, " dlen ", q.dlen\D, " limit ", q.limit\D, " nblocks ", qblocks(q)\D);
122
	if q.state & Qstarve then 
123
		print(" starve");
124
	if q.state & Qmsg then
125
		print(" msg");
126
	if q.state & Qclosed then
127
		print(" closed");
128
	if q.state & Qflow then
129
		print(" flow");
130
	if q.state & Qcoalesce then
131
		print(" coalesce");
132
	print("\n");
133
 
134
	b = q.bfirst;
135
	_ni = _ni+1;
136
	while b != 0 do {
137
		_block(b);
138
		complex Block b;
139
		b = b.next;
140
	}
141
	_ni = _ni - 1;
142
}
143
 
144
defn
145
queue(q)
146
{
147
	_ni = 0;
148
	_queue(q);
149
}
150
 
151
defn
152
_block(b)
153
{
154
	complex Block b;
155
 
156
	_ni();
157
	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");
158
}
159
 
160
defn
161
block(b)
162
{
163
	_ni = 0;
164
	block(b);
165
}
166
 
167
print("/sys/lib/acid/network");
168
needacid("tcp");
169
needacid("qio");