2 #include "../port/lib.h"
6 #include "../port/error.h"
24 int logmask; /* mask of things to debug */
25 uchar iponly[IPaddrlen]; /* ip address to print debugging for */
32 typedef struct Netlogflag {
37 static Netlogflag flags[] =
46 { "compress", Logcompress, },
47 { "logilmsg", Logilmsg, },
49 { "tcpwin", Logtcp|Logtcpwin, },
50 { "tcprxmt", Logtcp|Logtcprxmt, },
51 { "udpmsg", Logudp|Logudpmsg, },
52 { "ipmsg", Logip|Logipmsg, },
57 char Ebadnetctl[] = "too few arguments for netlog control message";
76 f->alog = smalloc(sizeof(Netlog));
87 if(f->alog->opens == 0){
88 if(f->alog->buf == nil){
89 f->alog->buf = malloc(Nlog);
90 if(f->alog->buf == nil)
93 f->alog->rptr = f->alog->buf;
94 f->alog->end = f->alog->buf + Nlog;
110 if(f->alog->opens == 0){
127 netlogread(Fs *f, void *a, ulong, long n)
144 rptr = f->alog->rptr;
146 if(f->alog->rptr >= f->alog->end){
147 d = f->alog->rptr - f->alog->end;
148 f->alog->rptr = f->alog->buf + d;
156 memmove(p+i, f->alog->buf, d);
162 sleep(f->alog, netlogready, f);
172 netlogctl(Fs *f, char* s, int n)
188 ct = lookupcmd(cb, routecmd, nelem(routecmd));
202 parseip(f->alog->iponly, cb->f[1]);
203 if(ipcmp(f->alog->iponly, IPnoaddr) == 0)
204 f->alog->iponlyset = 0;
206 f->alog->iponlyset = 1;
212 cmderror(cb, "unknown ip control message");
215 for(i = 1; i < cb->nf; i++){
216 for(fp = flags; fp->name; fp++)
217 if(strcmp(fp->name, cb->f[i]) == 0)
222 f->alog->logmask |= fp->mask;
224 f->alog->logmask &= ~fp->mask;
232 netlog(Fs *f, int mask, char *fmt, ...)
234 char buf[256], *t, *fp;
238 if(!(f->alog->logmask & mask))
241 if(f->alog->opens == 0)
245 n = vseprint(buf, buf+sizeof(buf), fmt, arg) - buf;
249 i = f->alog->len + n - Nlog;
253 if(f->alog->rptr >= f->alog->end)
254 f->alog->rptr = f->alog->buf + (f->alog->rptr - f->alog->end);
256 t = f->alog->rptr + f->alog->len;
260 if(t >= f->alog->end)
261 t = f->alog->buf + (t - f->alog->end);