| plan 9 kernel history: overview | file list | diff list |
1997/0423/ip/netlog.c (diff list | history)
| 1997/0327/sys/src/9/ip/netlog.c:148,154 – 1997/0423/sys/src/9/ip/netlog.c:148,155 (short | long) | ||
| 1997/0327 | { int i, n, set; Logflag *f; | |
| 1997/0423 | char *fields[10], *p, buf[256]; uchar addr[Ipaddrlen]; | |
| 1997/0327 | if(len == 0) return Ebadnetctl; | |
| 1997/0423/sys/src/9/ip/netlog.c:46,51 – 1997/0806/sys/src/9/ip/netlog.c:46,53 (short | long) | ||
| 1997/0327 | { "ilmsg", Logil|Logilmsg, }, { "gre", Loggre, }, { "tcpmsg", Logtcp|Logtcpmsg, }, | |
| 1997/0806 | { "udpmsg", Logudp|Logudpmsg, }, { "ipmsg", Logip|Logipmsg, }, | |
| 1997/0327 | { nil, 0, }, }; | |
| 1997/0806/sys/src/9/ip/netlog.c:151,157 – 1997/0815/sys/src/9/ip/netlog.c:151,157 (short | long) | ||
| 1997/0327 | int i, n, set; Logflag *f; | |
| 1997/0423 | char *fields[10], *p, buf[256]; | |
| 1997/0815 | uchar addr[IPaddrlen]; | |
| 1997/0327 | if(len == 0) return Ebadnetctl; | |
| 1997/0815/sys/src/9/ip/netlog.c:62,69 – 1997/1104/sys/src/9/ip/netlog.c:62,72 (short | long) | ||
| 1997/0327 | nexterror(); } if(alog.opens == 0){ | |
| 1997/1104 | if(alog.buf == nil){ | |
| 1997/0327 | alog.buf = malloc(Nlog); | |
| 1997/1104 | if(alog.buf == nil) error(Enomem); } | |
| 1997/0327 | alog.rptr = alog.buf; alog.end = alog.buf + Nlog; } | |
| 1997/1104/sys/src/9/ip/netlog.c:7,13 – 1998/0306/sys/src/9/ip/netlog.c:7,14 (short | long) | ||
| 1997/0327 | #include "../ip/ip.h" int logmask; /* mask of things to debug */ | |
| 1998/0306 | uchar iponly[IPaddrlen]; /* ip address to print debugging for */ int iponlyset; | |
| 1997/0327 | enum { Nlog = 4*1024, | |
| 1997/1104/sys/src/9/ip/netlog.c:62,72 – 1998/0306/sys/src/9/ip/netlog.c:63,70 | ||
| 1997/0327 | nexterror(); } if(alog.opens == 0){ | |
| 1997/1104 |
| |
| 1998/0306 | if(alog.buf == nil) | |
| 1997/0327 | alog.buf = malloc(Nlog); | |
| 1997/1104 |
| |
| 1997/0327 | alog.rptr = alog.buf; alog.end = alog.buf + Nlog; } | |
| 1997/1104/sys/src/9/ip/netlog.c:175,181 – 1998/0306/sys/src/9/ip/netlog.c:173,183 | ||
| 1997/0327 | else if(strcmp("clear", fields[0]) == 0) set = 0; else if(strcmp("only", fields[0]) == 0){ | |
| 1998/0306 | parseip(iponly, fields[1]); if(ipcmp(iponly, IPnoaddr) == 0) iponlyset = 0; else iponlyset = 1; | |
| 1997/0327 | return nil; } else return Ebadnetctl; | |
| 1997/1104/sys/src/9/ip/netlog.c:206,217 – 1998/0306/sys/src/9/ip/netlog.c:208,221 | ||
| 1997/0327 | int i, n; va_list arg; | |
| 1998/0306 | if(!(logmask & mask)) | |
| 1997/0327 | return; va_start(arg, fmt); n = doprint(buf, buf+sizeof(buf), fmt, arg) - buf; va_end(arg); | |
| 1998/0306 | print("%s", buf); | |
| 1997/0327 | if(alog.opens == 0) return; | |
| 1998/0306/sys/src/9/ip/netlog.c:152,158 – 1998/0307/sys/src/9/ip/netlog.c:152,157 (short | long) | ||
| 1997/0327 | int i, n, set; Logflag *f; | |
| 1997/0423 | char *fields[10], *p, buf[256]; | |
| 1997/0815 |
| |
| 1997/0327 | if(len == 0) return Ebadnetctl; | |
| 1998/0307/sys/src/9/ip/netlog.c:6,15 – 1998/0313/sys/src/9/ip/netlog.c:6,11 (short | long) | ||
| 1997/0327 | #include "../port/error.h" #include "../ip/ip.h" | |
| 1998/0306 |
| |
| 1997/0327 |
| |
| 1998/0307/sys/src/9/ip/netlog.c:17,23 – 1998/0313/sys/src/9/ip/netlog.c:13,19 | ||
| 1997/0327 | /* * action log */ | |
| 1998/0313 | struct Log { | |
| 1997/0327 | Lock; int opens; char* buf; | |
| 1998/0307/sys/src/9/ip/netlog.c:25,39 – 1998/0313/sys/src/9/ip/netlog.c:21,39 | ||
| 1997/0327 | char *rptr; int len; | |
| 1998/0313 | int logmask; /* mask of things to debug */ uchar iponly[IPaddrlen]; /* ip address to print debugging for */ int iponlyset; | |
| 1997/0327 | QLock; Rendez; | |
| 1998/0313 | }; | |
| 1997/0327 | typedef struct Logflag { char* name; int mask; } Logflag; | |
| 1998/0313 | ||
| 1997/0327 | static Logflag flags[] = { { "ppp", Logppp, }, | |
| 1998/0307/sys/src/9/ip/netlog.c:55,127 – 1998/0313/sys/src/9/ip/netlog.c:55,135 | ||
| 1997/0327 | static char Ebadnetctl[] = "unknown netlog ctl message"; void | |
| 1998/0313 | netloginit(Fs *f) | |
| 1997/0327 | { | |
| 1998/0313 | f->alog = smalloc(sizeof(Log)); } void netlogopen(Fs *f) { lock(f->alog); | |
| 1997/0327 | if(waserror()){ | |
| 1998/0313 | unlock(f->alog); | |
| 1997/0327 | nexterror(); } | |
| 1998/0306 |
| |
| 1997/0327 |
| |
| 1998/0313 | if(f->alog->opens == 0){ if(f->alog->buf == nil) f->alog->buf = malloc(Nlog); f->alog->rptr = f->alog->buf; f->alog->end = f->alog->buf + Nlog; | |
| 1997/0327 | } | |
| 1998/0313 | f->alog->opens++; unlock(f->alog); | |
| 1997/0327 | poperror(); } void | |
| 1998/0313 | netlogclose(Fs *f) | |
| 1997/0327 | { | |
| 1998/0313 | lock(f->alog); | |
| 1997/0327 | if(waserror()){ | |
| 1998/0313 | unlock(f->alog); | |
| 1997/0327 | nexterror(); } | |
| 1998/0313 | f->alog->opens--; if(f->alog->opens == 0){ free(f->alog->buf); f->alog->buf = nil; | |
| 1997/0327 | } | |
| 1998/0313 | unlock(f->alog); | |
| 1997/0327 | poperror(); } static int | |
| 1998/0313 | netlogready(void *a) | |
| 1997/0327 | { | |
| 1998/0313 | Fs *f = a; return f->alog->len; | |
| 1997/0327 | } long | |
| 1998/0313 | netlogread(Fs *f, void *a, ulong, long n) | |
| 1997/0327 | { int i, d; char *p, *rptr; | |
| 1998/0313 | qlock(f->alog); | |
| 1997/0327 | if(waserror()){ | |
| 1998/0313 | qunlock(f->alog); | |
| 1997/0327 | nexterror(); } for(;;){ | |
| 1998/0313 | lock(f->alog); if(f->alog->len){ if(n > f->alog->len) n = f->alog->len; | |
| 1997/0327 | d = 0; | |
| 1998/0313 | rptr = f->alog->rptr; f->alog->rptr += n; if(f->alog->rptr >= f->alog->end){ d = f->alog->rptr - f->alog->end; f->alog->rptr = f->alog->buf + d; | |
| 1997/0327 | } | |
| 1998/0313 | f->alog->len -= n; unlock(f->alog); | |
| 1997/0327 | i = n; p = a; | |
| 1998/0307/sys/src/9/ip/netlog.c:129,146 – 1998/0313/sys/src/9/ip/netlog.c:137,154 | ||
| 1997/0327 | memmove(p, rptr, d); i -= d; p += d; | |
| 1998/0313 | rptr = f->alog->buf; | |
| 1997/0327 | } memmove(p, rptr, i); break; } else | |
| 1998/0313 | unlock(f->alog); | |
| 1997/0327 |
| |
| 1998/0313 | sleep(f->alog, netlogready, 0); | |
| 1997/0327 | } | |
| 1998/0313 | qunlock(f->alog); | |
| 1997/0327 | poperror(); return n; | |
| 1998/0307/sys/src/9/ip/netlog.c:147,156 – 1998/0313/sys/src/9/ip/netlog.c:155,164 | ||
| 1997/0327 | } char* | |
| 1998/0313 | netlogctl(Fs *f, char* s, int len) | |
| 1997/0327 | { int i, n, set; | |
| 1998/0313 | Logflag *fp; | |
| 1997/0423 | char *fields[10], *p, buf[256]; | |
| 1997/0327 | if(len == 0) | |
| 1998/0307/sys/src/9/ip/netlog.c:172,182 – 1998/0313/sys/src/9/ip/netlog.c:180,190 | ||
| 1997/0327 | else if(strcmp("clear", fields[0]) == 0) set = 0; else if(strcmp("only", fields[0]) == 0){ | |
| 1998/0306 |
| |
| 1998/0313 | parseip(f->alog->iponly, fields[1]); if(ipcmp(f->alog->iponly, IPnoaddr) == 0) f->alog->iponlyset = 0; | |
| 1998/0306 | else | |
| 1998/0313 | f->alog->iponlyset = 1; | |
| 1997/0327 | return nil; } else return Ebadnetctl; | |
| 1998/0307/sys/src/9/ip/netlog.c:186,200 – 1998/0313/sys/src/9/ip/netlog.c:194,208 | ||
| 1997/0327 | *p = 0; for(i = 1; i < n; i++){ | |
| 1998/0313 | for(fp = flags; fp->name; fp++) if(strcmp(fp->name, fields[i]) == 0) | |
| 1997/0327 | break; | |
| 1998/0313 | if(fp->name == nil) | |
| 1997/0327 | continue; if(set) | |
| 1998/0313 | f->alog->logmask |= fp->mask; | |
| 1997/0327 | else | |
| 1998/0313 | f->alog->logmask &= ~fp->mask; | |
| 1997/0327 | } return nil; | |
| 1998/0307/sys/src/9/ip/netlog.c:201,213 – 1998/0313/sys/src/9/ip/netlog.c:209,221 | ||
| 1997/0327 | } void | |
| 1998/0313 | netlog(Fs *f, int mask, char *fmt, ...) | |
| 1997/0327 | { | |
| 1998/0313 | char buf[128], *t, *fp; | |
| 1997/0327 | int i, n; va_list arg; | |
| 1998/0306 |
| |
| 1998/0313 | if(!(f->alog->logmask & mask)) | |
| 1997/0327 | return; va_start(arg, fmt); | |
| 1998/0307/sys/src/9/ip/netlog.c:214,241 – 1998/0313/sys/src/9/ip/netlog.c:222,247 | ||
| 1997/0327 | n = doprint(buf, buf+sizeof(buf), fmt, arg) - buf; va_end(arg); | |
| 1998/0306 |
| |
| 1997/0327 |
| |
| 1998/0313 | if(f->alog->opens == 0) | |
| 1997/0327 | return; | |
| 1998/0313 | lock(f->alog); i = f->alog->len + n - Nlog; | |
| 1997/0327 | if(i > 0){ | |
| 1998/0313 | f->alog->len -= i; f->alog->rptr += i; if(f->alog->rptr >= f->alog->end) f->alog->rptr = f->alog->buf + (f->alog->rptr - f->alog->end); | |
| 1997/0327 | } | |
| 1998/0313 | t = f->alog->rptr + f->alog->len; fp = buf; f->alog->len += n; | |
| 1997/0327 | while(n-- > 0){ | |
| 1998/0313 | if(t >= f->alog->end) t = f->alog->buf + (t - f->alog->end); *t++ = *fp++; | |
| 1997/0327 | } | |
| 1998/0313 | unlock(f->alog); | |
| 1997/0327 |
| |
| 1998/0313 | wakeup(f->alog); | |
| 1997/0327 | } | |
| 1998/0313/sys/src/9/ip/netlog.c:145,151 – 1998/0314/sys/src/9/ip/netlog.c:145,151 (short | long) | ||
| 1997/0327 | else | |
| 1998/0313 | unlock(f->alog); | |
| 1997/0327 | ||
| 1998/0313 |
| |
| 1998/0314 | sleep(f->alog, netlogready, f); | |
| 1997/0327 | } | |
| 1998/0313 | qunlock(f->alog); | |
| 1998/0314/sys/src/9/ip/netlog.c:13,19 – 1999/0316/sys/src/9/ip/netlog.c:13,19 (short | long) | ||
| 1997/0327 | /* * action log */ | |
| 1998/0313 |
| |
| 1999/0316 | struct Netlog { | |
| 1997/0327 | Lock; int opens; char* buf; | |
| 1998/0314/sys/src/9/ip/netlog.c:29,40 – 1999/0316/sys/src/9/ip/netlog.c:29,40 | ||
| 1997/0327 | Rendez; | |
| 1998/0313 | }; | |
| 1997/0327 |
| |
| 1999/0316 | typedef struct Netlogflag { | |
| 1997/0327 | char* name; int mask; | |
| 1999/0316 | } Netlogflag; | |
| 1998/0313 | ||
| 1997/0327 |
| |
| 1999/0316 | static Netlogflag flags[] = | |
| 1997/0327 | { { "ppp", Logppp, }, { "ip", Logip, }, | |
| 1998/0314/sys/src/9/ip/netlog.c:49,54 – 1999/0316/sys/src/9/ip/netlog.c:49,55 | ||
| 1997/0327 | { "tcpmsg", Logtcp|Logtcpmsg, }, | |
| 1997/0806 | { "udpmsg", Logudp|Logudpmsg, }, { "ipmsg", Logip|Logipmsg, }, | |
| 1999/0316 | { "esp", Logesp, }, | |
| 1997/0327 | { nil, 0, }, }; | |
| 1998/0314/sys/src/9/ip/netlog.c:57,63 – 1999/0316/sys/src/9/ip/netlog.c:58,64 | ||
| 1997/0327 | void | |
| 1998/0313 | netloginit(Fs *f) | |
| 1997/0327 | { | |
| 1998/0313 |
| |
| 1999/0316 | f->alog = smalloc(sizeof(Netlog)); | |
| 1998/0313 | } void | |
| 1998/0314/sys/src/9/ip/netlog.c:158,164 – 1999/0316/sys/src/9/ip/netlog.c:159,165 | ||
| 1998/0313 | netlogctl(Fs *f, char* s, int len) | |
| 1997/0327 | { int i, n, set; | |
| 1998/0313 |
| |
| 1999/0316 | Netlogflag *fp; | |
| 1997/0423 | char *fields[10], *p, buf[256]; | |
| 1997/0327 | if(len == 0) | |
| 1999/0316/sys/src/9/ip/netlog.c:132,146 – 1999/0731/sys/src/9/ip/netlog.c:132,141 (short | long) | ||
| 1998/0313 | f->alog->len -= n; unlock(f->alog); | |
| 1997/0327 |
| |
| 1999/0731 | i = n-d; | |
| 1997/0327 | p = a; | |
| 1998/0313 |
| |
| 1997/0327 |
| |
| 1999/0731 | memmove(p+i, f->alog->buf, d); | |
| 1997/0327 | break; } else | |
| 1999/0731/sys/src/9/ip/netlog.c:167,173 – 2000/0308/sys/src/9/ip/netlog.c:167,173 (short | long) | ||
| 1997/0327 | if(len > 0 && buf[len-1] == '\n') buf[len-1] = 0; | |
| 2000/0308 | n = getfields(buf, fields, 10, 1, " "); | |
| 1997/0327 | if(n < 2) return Ebadnetctl; | |
| 2000/0308/sys/src/9/ip/netlog.c:167,173 – 2001/1117/sys/src/9/ip/netlog.c:167,173 (short | long) | ||
| 1997/0327 | if(len > 0 && buf[len-1] == '\n') buf[len-1] = 0; | |
| 2000/0308 |
| |
| 2001/1117 | n = tokenize(buf, fields, 10); | |
| 1997/0327 | if(n < 2) return Ebadnetctl; | |
| 2001/1117/sys/src/9/ip/netlog.c:53,60 – 2001/1120/sys/src/9/ip/netlog.c:53,74 (short | long) | ||
| 1997/0327 | { nil, 0, }, }; | |
| 2001/1120 | char Ebadnetctl[] = "too few arguments for netlog control message"; | |
| 1997/0327 | ||
| 2001/1120 | enum { CMset, CMclear, CMonly, }; static Cmdtab routecmd[] = { CMset, "set", 0, CMclear, "clear", 0, CMonly, "only", 0, }; | |
| 1997/0327 | void | |
| 1998/0313 | netloginit(Fs *f) | |
| 1997/0327 | { | |
| 2001/1117/sys/src/9/ip/netlog.c:150,197 – 2001/1120/sys/src/9/ip/netlog.c:164,215 | ||
| 1997/0327 | return n; } | |
| 1998/0313 |
| |
| 2001/1120 | void netlogctl(Fs *f, char* s, int n) | |
| 1997/0327 | { | |
| 2001/1120 | int i, set; | |
| 1999/0316 | Netlogflag *fp; | |
| 1997/0423 |
| |
| 2001/1120 | Cmdbuf *cb; Cmdtab *ct; | |
| 1997/0327 |
| |
| 2001/1120 | cb = parsecmd(s, n); if(waserror()){ free(cb); nexterror(); } | |
| 1997/0327 |
| |
| 2001/1120 | if(cb->nf < 2) error(Ebadnetctl); | |
| 1997/0327 | ||
| 2001/1117 |
| |
| 1997/0327 |
| |
| 2001/1120 | ct = lookupcmd(cb, routecmd, nelem(routecmd)); | |
| 1997/0327 |
| |
| 2001/1120 | SET(set); switch(ct->index){ case CMset: | |
| 1997/0327 | set = 1; | |
| 2001/1120 | break; case CMclear: | |
| 1997/0327 | set = 0; | |
| 1998/0313 |
| |
| 2001/1120 | break; case CMonly: parseip(f->alog->iponly, cb->f[1]); | |
| 1998/0313 | if(ipcmp(f->alog->iponly, IPnoaddr) == 0) f->alog->iponlyset = 0; | |
| 1998/0306 | else | |
| 1998/0313 | f->alog->iponlyset = 1; | |
| 1997/0327 |
| |
| 2001/1120 | free(cb); return; | |
| 1997/0327 |
| |
| 2001/1120 | default: cmderror(cb, "unknown ip control message"); } | |
| 1997/0327 | for(i = 1; i < n; i++){ | |
| 1998/0313 | for(fp = flags; fp->name; fp++) | |
| 2001/1120 | if(strcmp(fp->name, cb->f[i]) == 0) | |
| 1997/0327 | break; | |
| 1998/0313 | if(fp->name == nil) | |
| 1997/0327 | continue; | |
| 2001/1117/sys/src/9/ip/netlog.c:201,207 – 2001/1120/sys/src/9/ip/netlog.c:219,226 | ||
| 1998/0313 | f->alog->logmask &= ~fp->mask; | |
| 1997/0327 | } | |
| 2001/1120 | free(cb); poperror(); | |
| 1997/0327 | } void | |
| 2001/1120/sys/src/9/ip/netlog.c:233,244 – 2002/0217/sys/src/9/ip/netlog.c:233,244 (short | long) | ||
|
Convert to new fmt library.
rsc Fri Mar 4 12:44:25 2005 | ||
| 1998/0313 | if(!(f->alog->logmask & mask)) | |
| 1997/0327 | return; | |
| 1998/0306 | ||
| 1998/0313 | if(f->alog->opens == 0) | |
| 1997/0327 | return; | |
| 2002/0217 | va_start(arg, fmt); n = vseprint(buf, buf+sizeof(buf), fmt, arg) - buf; va_end(arg); | |
| 1997/0327 | ||
| 1998/0313 | lock(f->alog); i = f->alog->len + n - Nlog; | |
| 2002/0217/sys/src/9/ip/netlog.c:207,213 – 2002/0306/sys/src/9/ip/netlog.c:207,213 (short | long) | ||
| 2001/1120 | cmderror(cb, "unknown ip control message"); } | |
| 1997/0327 |
| |
| 2002/0306 | for(i = 1; i < cb->nf; i++){ | |
| 1998/0313 | for(fp = flags; fp->name; fp++) | |
| 2001/1120 | if(strcmp(fp->name, cb->f[i]) == 0) | |
| 1997/0327 | break; | |
| 2002/0306/sys/src/9/ip/netlog.c:207,213 – 2002/0507/sys/src/9/ip/netlog.c:207,213 (short | long) | ||
| 2001/1120 | cmderror(cb, "unknown ip control message"); } | |
| 1997/0327 | ||
| 2002/0306 |
| |
| 2002/0507 | for(i = 1; i < n; i++){ | |
| 1998/0313 | for(fp = flags; fp->name; fp++) | |
| 2001/1120 | if(strcmp(fp->name, cb->f[i]) == 0) | |
| 1997/0327 | break; | |
| 2002/0507/sys/src/9/ip/netlog.c:207,213 – 2002/0615/sys/src/9/ip/netlog.c:207,213 (short | long) | ||
| 2001/1120 | cmderror(cb, "unknown ip control message"); } | |
| 1997/0327 | ||
| 2002/0507 |
| |
| 2002/0615 | for(i = 1; i < cb->nf; i++){ | |
| 1998/0313 | for(fp = flags; fp->name; fp++) | |
| 2001/1120 | if(strcmp(fp->name, cb->f[i]) == 0) | |
| 1997/0327 | break; | |
| 2002/0615/sys/src/9/ip/netlog.c:46,52 – 2002/0713/sys/src/9/ip/netlog.c:46,53 (short | long) | ||
| 1997/0327 | { "compress", Logcompress, }, { "ilmsg", Logil|Logilmsg, }, { "gre", Loggre, }, | |
| 2002/0713 | { "tcpwin", Logtcp|Logtcpwin, }, { "tcprxmt", Logtcp|Logtcprxmt, }, | |
| 1997/0806 | { "udpmsg", Logudp|Logudpmsg, }, { "ipmsg", Logip|Logipmsg, }, | |
| 1999/0316 | { "esp", Logesp, }, | |