8 void nstat(char*, void (*)(char*, Dir*));
20 fprint(2, "usage: %s [-in] [-p proto] [network-dir]\n", argv0);
25 main(int argc, char *argv[])
27 int justinterfaces = 0;
40 if(nproto >= nelem(proto))
41 sysfatal("too many protos");
42 proto[nproto++] = EARGF(usage());
59 Binit(&out, 1, OWRITE);
67 for(i=0; i<nproto; i++)
70 fd = open(netroot, OREAD);
72 sysfatal("open %s: %r", netroot);
74 tot = dirreadall(fd, &d);
76 if(strcmp(d[i].name, "ipifc") == 0)
78 snprint(buf, sizeof buf, "%s/%s/0/local", netroot, d[i].name);
79 if(access(buf, 0) >= 0)
80 nstat(d[i].name, pip);
87 nstat(char *net, void (*f)(char*, Dir*))
93 snprint(buf, sizeof buf, "%s/%s", netroot, net);
94 fdir = open(buf, OREAD);
98 tot = dirreadall(fdir, &dir);
99 for(i = 0; i < tot; i++) {
108 getport(char *net, char *p)
110 static char port[10];
112 strncpy(port, p, sizeof(port)-1);
113 port[sizeof(port)-1] = 0;
114 if(notrans || (p = csgetvalue(netroot, "port", p, net, nil)) == nil)
116 strncpy(port, p, sizeof(port)-1);
117 port[sizeof(port)-1] = 0;
123 pip(char *net, Dir *db)
129 if(strcmp(db->name, "clone") == 0)
131 if(strcmp(db->name, "stats") == 0)
134 snprint(buf, sizeof buf, "%s/%s/%s/status", netroot, net, db->name);
135 fd = open(buf, OREAD);
138 n = read(fd, buf, sizeof(buf));
144 p = strchr(buf, ' ');
147 p = strrchr(buf, '\n');
150 Bprint(&out, "%-4s %-4s %-10s %-12s ", net, db->name, db->uid, buf);
152 snprint(buf, sizeof buf, "%s/%s/%s/local", netroot, net, db->name);
153 fd = open(buf, OREAD);
158 n = read(fd, buf, sizeof(buf));
165 p = strchr(buf, '!');
171 Bprint(&out, "%-10s ", getport(net, p+1));
173 snprint(buf, sizeof buf, "%s/%s/%s/remote", netroot, net, db->name);
174 fd = open(buf, OREAD);
179 n = read(fd, buf, sizeof(buf));
186 p = strchr(buf, '!');
191 Bprint(&out, "%-10s %s\n", getport(net, p), buf);
194 dname = csgetvalue(netroot, "ip", buf, "dom", nil);
196 Bprint(&out, "%-10s %s\n", getport(net, p), buf);
199 Bprint(&out, "%-10s %s\n", getport(net, p), dname);
212 fmtinstall('I', eipfmt);
213 fmtinstall('M', eipfmt);
215 ip = readipifc(netroot, nil, -1);
218 for(nip = ip; nip; nip = nip->next){
219 for(lifc = nip->lifc; lifc; lifc = lifc->next){
220 i = snprint(buf, sizeof buf, "%I", lifc->ip);
223 i = snprint(buf, sizeof buf, "%I", lifc->net);
229 for(nip = ip; nip; nip = nip->next){
230 for(lifc = nip->lifc; lifc; lifc = lifc->next)
231 Bprint(&out, "%-12s %5d %-*I %5M %-*I %8lud %8lud %8lud %8lud\n",
233 l, lifc->ip, lifc->mask, l, lifc->net,
234 nip->pktin, nip->pktout,
235 nip->errin, nip->errout);