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[] =
45 { "compress", Logcompress, },
47 { "tcpwin", Logtcp|Logtcpwin, },
48 { "tcprxmt", Logtcp|Logtcprxmt, },
49 { "udpmsg", Logudp|Logudpmsg, },
50 { "ipmsg", Logip|Logipmsg, },
55 char Ebadnetctl[] = "too few arguments for netlog control message";
74 f->alog = smalloc(sizeof(Netlog));
85 if(f->alog->opens == 0){
86 if(f->alog->buf == nil)
87 f->alog->buf = malloc(Nlog);
88 f->alog->rptr = f->alog->buf;
89 f->alog->end = f->alog->buf + Nlog;
105 if(f->alog->opens == 0){
122 netlogread(Fs *f, void *a, ulong, long n)
139 rptr = f->alog->rptr;
141 if(f->alog->rptr >= f->alog->end){
142 d = f->alog->rptr - f->alog->end;
143 f->alog->rptr = f->alog->buf + d;
151 memmove(p+i, f->alog->buf, d);
157 sleep(f->alog, netlogready, f);
167 netlogctl(Fs *f, char* s, int n)
183 ct = lookupcmd(cb, routecmd, nelem(routecmd));
197 parseip(f->alog->iponly, cb->f[1]);
198 if(ipcmp(f->alog->iponly, IPnoaddr) == 0)
199 f->alog->iponlyset = 0;
201 f->alog->iponlyset = 1;
207 cmderror(cb, "unknown ip control message");
210 for(i = 1; i < cb->nf; i++){
211 for(fp = flags; fp->name; fp++)
212 if(strcmp(fp->name, cb->f[i]) == 0)
217 f->alog->logmask |= fp->mask;
219 f->alog->logmask &= ~fp->mask;
227 netlog(Fs *f, int mask, char *fmt, ...)
229 char buf[256], *t, *fp;
233 if(!(f->alog->logmask & mask))
236 if(f->alog->opens == 0)
240 n = vseprint(buf, buf+sizeof(buf), fmt, arg) - buf;
244 i = f->alog->len + n - Nlog;
248 if(f->alog->rptr >= f->alog->end)
249 f->alog->rptr = f->alog->buf + (f->alog->rptr - f->alog->end);
251 t = f->alog->rptr + f->alog->len;
255 if(t >= f->alog->end)
256 t = f->alog->buf + (t - f->alog->end);