/sys/src/9/ip/ip.c % cat >/sys/lib/dist/changes/1176957006.0.txt << EOF Code cleanup. • Whitespace / comments • Add comments describing route flags • Add function ipifcadd6, replacing ipifcaddpref6 • Condense ipifcsendra6 and ipifcrecvra6 and ipifcsetpar6 into ipifcra6 EOF [geoff] --rw-rw-r-- M 43 glenda sys 15288 Apr 19 00:30 sys/src/9/ip/ip.c /n/sourcesdump/2007/0419/plan9/sys/src/9/ip/ip.c:145,151 - /n/sourcesdump/2007/0420/plan9/sys/src/9/ip/ip.c:145,150 void ipfragfree4(IP*, Fragment4*); Fragment4* ipfragallo4(IP*); - void ip_init_6(Fs *f) { /n/sourcesdump/2007/0419/plan9/sys/src/9/ip/ip.c:152,174 - /n/sourcesdump/2007/0420/plan9/sys/src/9/ip/ip.c:151,172 v6params *v6p; v6p = smalloc(sizeof(v6params)); - - v6p->rp.mflag = 0; // default not managed + + v6p->rp.mflag = 0; /* default not managed */ v6p->rp.oflag = 0; - v6p->rp.maxraint = 600000; // millisecs + v6p->rp.maxraint = 600000; /* millisecs */ v6p->rp.minraint = 200000; - v6p->rp.linkmtu = 0; // no mtu sent + v6p->rp.linkmtu = 0; /* no mtu sent */ v6p->rp.reachtime = 0; v6p->rp.rxmitra = 0; v6p->rp.ttl = MAXTTL; - v6p->rp.routerlt = 3*(v6p->rp.maxraint); + v6p->rp.routerlt = 3 * v6p->rp.maxraint; - v6p->hp.rxmithost = 1000; // v6 RETRANS_TIMER + v6p->hp.rxmithost = 1000; /* v6 RETRANS_TIMER */ v6p->cdrouter = -1; f->v6p = v6p; - } void /n/sourcesdump/2007/0419/plan9/sys/src/9/ip/ip.c:217,223 - /n/sourcesdump/2007/0420/plan9/sys/src/9/ip/ip.c:215,221 if(f->ip->iprouting==0) f->ip->stats[Forwarding] = 2; else - f->ip->stats[Forwarding] = 1; + f->ip->stats[Forwarding] = 1; } int /n/sourcesdump/2007/0419/plan9/sys/src/9/ip/ip.c:362,368 - /n/sourcesdump/2007/0420/plan9/sys/src/9/ip/ip.c:360,366 seglen = dlen - fragoff; hnputs(feh->frag, fragoff>>3); } - else + else hnputs(feh->frag, (fragoff>>3)|IP_MF); hnputs(feh->length, seglen + IP4HDR); /n/sourcesdump/2007/0419/plan9/sys/src/9/ip/ip.c:387,393 - /n/sourcesdump/2007/0420/plan9/sys/src/9/ip/ip.c:385,391 chunk -= blklen; if(xp->rp == xp->wp) xp = xp->next; - } + } feh->cksum[0] = 0; feh->cksum[1] = 0; /n/sourcesdump/2007/0419/plan9/sys/src/9/ip/ip.c:723,729 - /n/sourcesdump/2007/0420/plan9/sys/src/9/ip/ip.c:721,727 hnputs(ih->length, len); qunlock(&ip->fraglock4); ip->stats[ReasmOKs]++; - return bl; + return bl; } pktposn += BKFG(bl)->flen; } [geoff] --rw-rw-r-- M 43 glenda sys 15982 Apr 19 00:32 sys/src/9/ip/ip.h /n/sourcesdump/2007/0419/plan9/sys/src/9/ip/ip.h:188,206 - /n/sourcesdump/2007/0420/plan9/sys/src/9/ip/ip.h:188,206 int ref; }; - /* rfc 2461, pp.40--43. */ + /* rfc 2461, pp.40—43. */ /* default values, one per stack */ struct Routerparams { - int mflag; - int oflag; - int maxraint; - int minraint; - int linkmtu; - int reachtime; - int rxmitra; - int ttl; - int routerlt; + int mflag; /* flag: managed address configuration */ + int oflag; /* flag: other stateful configuration */ + int maxraint; /* max. router adv interval (ms) */ + int minraint; /* min. router adv interval (ms) */ + int linkmtu; /* mtu options */ + int reachtime; /* reachable time */ + int rxmitra; /* retransmit interval */ + int ttl; /* cur hop count limit */ + int routerlt; /* router lifetime */ }; struct Hostparams { /n/sourcesdump/2007/0419/plan9/sys/src/9/ip/ip.h:210,216 - /n/sourcesdump/2007/0420/plan9/sys/src/9/ip/ip.h:210,216 struct Ipifc { RWlock; - + Conv *conv; /* link to its conversation structure */ char dev[64]; /* device we're attached to */ Medium *m; /* Media pointer */ /n/sourcesdump/2007/0419/plan9/sys/src/9/ip/ip.h:234,242 - /n/sourcesdump/2007/0420/plan9/sys/src/9/ip/ip.h:234,242 ulong in, out; /* message statistics */ ulong inerr, outerr; /* ... */ - uchar sendra6; /* == 1 => send router advs on this ifc */ - uchar recvra6; /* == 1 => recv router advs on this ifc */ - Routerparams rp; /* router parameters as in RFC 2461, pp.40--43. + uchar sendra6; /* flag: send router advs on this ifc */ + uchar recvra6; /* flag: recv router advs on this ifc */ + Routerparams rp; /* router parameters as in RFC 2461, pp.40—43. used only if node is router */ }; /n/sourcesdump/2007/0419/plan9/sys/src/9/ip/ip.h:361,367 - /n/sourcesdump/2007/0420/plan9/sys/src/9/ip/ip.h:361,367 Routerparams rp; /* v6 params, one copy per node now */ Hostparams hp; v6router v6rlist[3]; /* max 3 default routers, currently */ - int cdrouter; /* uses only v6rlist[cdrouter] if */ + int cdrouter; /* uses only v6rlist[cdrouter] if */ /* cdrouter >= 0. */ }; /n/sourcesdump/2007/0419/plan9/sys/src/9/ip/ip.h:379,385 - /n/sourcesdump/2007/0420/plan9/sys/src/9/ip/ip.h:379,385 char* Fsstdbind(Conv*, char**, int); ulong scalednconv(void); void closeconv(Conv*); - /* + /* * logging */ enum /n/sourcesdump/2007/0419/plan9/sys/src/9/ip/ip.h:605,612 - /n/sourcesdump/2007/0420/plan9/sys/src/9/ip/ip.h:605,611 extern char* ipifcrem(Ipifc *ifc, char **argv, int argc); extern char* ipifcadd(Ipifc *ifc, char **argv, int argc, int tentative, Iplifc *lifcp); extern long ipselftabread(Fs*, char *a, ulong offset, int n); - extern char* ipifcaddpref6(Ipifc *ifc, char**argv, int argc); - extern void ipsendra6(Fs *f, int on); + extern char* ipifcadd6(Ipifc *ifc, char**argv, int argc); /* * ip.c */ [geoff] --rw-rw-r-- M 43 glenda sys 33517 Apr 19 00:32 sys/src/9/ip/ipifc.c /n/sourcesdump/2007/0419/plan9/sys/src/9/ip/ipifc.c:415,426 - /n/sourcesdump/2007/0420/plan9/sys/src/9/ip/ipifc.c:415,426 if(ipcmp(lifc->local, ip) == 0) { if(lifc->tentative != tentative) lifc->tentative = tentative; - if(lifcp != nil) { - lifc->onlink = lifcp->onlink; + if(lifcp) { + lifc->onlink = lifcp->onlink; lifc->autoflag = lifcp->autoflag; - lifc->validlt = lifcp->validlt; - lifc->preflt = lifcp->preflt; - lifc->origint = lifcp->origint; + lifc->validlt = lifcp->validlt; + lifc->preflt = lifcp->preflt; + lifc->origint = lifcp->origint; } goto out; } /n/sourcesdump/2007/0419/plan9/sys/src/9/ip/ipifc.c:432,449 - /n/sourcesdump/2007/0420/plan9/sys/src/9/ip/ipifc.c:432,447 ipmove(lifc->remote, rem); ipmove(lifc->net, net); lifc->tentative = tentative; - if(lifcp != nil) { - lifc->onlink = lifcp->onlink; + if(lifcp) { + lifc->onlink = lifcp->onlink; lifc->autoflag = lifcp->autoflag; - lifc->validlt = lifcp->validlt; - lifc->preflt = lifcp->preflt; - lifc->origint = lifcp->origint; + lifc->validlt = lifcp->validlt; + lifc->preflt = lifcp->preflt; + lifc->origint = lifcp->origint; } else { /* default values */ - lifc->onlink = 1; - lifc->autoflag = 1; - lifc->validlt = ~0L; - lifc->preflt = ~0L; - lifc->origint = NOW / 1000; + lifc->onlink = lifc->autoflag = 1; + lifc->validlt = lifc->preflt = ~0L; + lifc->origint = NOW / 1000; } lifc->next = nil; /n/sourcesdump/2007/0419/plan9/sys/src/9/ip/ipifc.c:687,693 - /n/sourcesdump/2007/0420/plan9/sys/src/9/ip/ipifc.c:685,691 } char* - ipifcsetpar6(Ipifc *ifc, char **argv, int argc) + ipifcra6(Ipifc *ifc, char **argv, int argc) { int i, argsleft, vmax = ifc->rp.maxraint, vmin = ifc->rp.minraint; /n/sourcesdump/2007/0419/plan9/sys/src/9/ip/ipifc.c:736,755 - /n/sourcesdump/2007/0420/plan9/sys/src/9/ip/ipifc.c:734,739 return nil; } - char* - ipifcsendra6(Ipifc *ifc, char **argv, int argc) - { - ifc->sendra6 = ((argc > 1? atoi(argv[1]): 0) != 0); - return nil; - } - - char* - ipifcrecvra6(Ipifc *ifc, char **argv, int argc) - { - ifc->recvra6 = ((argc > 1? atoi(argv[1]): 0) != 0); - return nil; - } - /* * non-standard control messages. * called with c->car locked. /n/sourcesdump/2007/0419/plan9/sys/src/9/ip/ipifc.c:780,794 - /n/sourcesdump/2007/0420/plan9/sys/src/9/ip/ipifc.c:764,775 } else if(strcmp(argv[0], "iprouting") == 0){ iprouting(c->p->f, (argc > 1? atoi(argv[1]): 1)); return nil; - } else if(strcmp(argv[0], "addpref6") == 0) - return ipifcaddpref6(ifc, argv, argc); - else if(strcmp(argv[0], "setpar6") == 0) - return ipifcsetpar6(ifc, argv, argc); - else if(strcmp(argv[0], "sendra6") == 0) - return ipifcsendra6(ifc, argv, argc); - else if(strcmp(argv[0], "recvra6") == 0) - return ipifcrecvra6(ifc, argv, argc); - return "unsupported ctl"; + } else if(strcmp(argv[0], "add6") == 0) + return ipifcadd6(ifc, argv, argc); + else if(strcmp(argv[0], "ra6") == 0) + return ipifcra6(ifc, argv, argc); + else + return "unsupported ctl"; } int /n/sourcesdump/2007/0419/plan9/sys/src/9/ip/ipifc.c:1583,1589 - /n/sourcesdump/2007/0420/plan9/sys/src/9/ip/ipifc.c:1564,1570 }; char* - ipifcaddpref6(Ipifc *ifc, char**argv, int argc) + ipifcadd6(Ipifc *ifc, char**argv, int argc) { int plen = 64; long origint = NOW / 1000, preflt = ~0L, validlt = ~0L; /n/sourcesdump/2007/0419/plan9/sys/src/9/ip/ipifc.c:1620,1636 - /n/sourcesdump/2007/0420/plan9/sys/src/9/ip/ipifc.c:1601,1616 return Ebadarg; lifc = smalloc(sizeof(Iplifc)); - lifc->onlink = (onlink!=0); - lifc->autoflag = (autoflag!=0); + lifc->onlink = (onlink != 0); + lifc->autoflag = (autoflag != 0); lifc->validlt = validlt; lifc->preflt = preflt; lifc->origint = origint; - if(ifc->m->pref2addr) - ifc->m->pref2addr(prefix, ifc->mac); - else + /* issue "add" ctl msg for v6 link-local addr and prefix len */ + if(!ifc->m->pref2addr) return Ebadarg; - + ifc->m->pref2addr(prefix, ifc->mac); /* mac → v6 link-local addr */ sprint(addr, "%I", prefix); sprint(preflen, "/%d", plen); params[0] = "add"; /sys/man/3/ip % cat >/sys/lib/dist/changes/1176958805.0.txt << EOF Document IPv6-related changes, as well as router flags. EOF [geoff] --rw-rw-r-- M 43 glenda sys 24540 Apr 19 01:11 sys/man/3/ip /n/sourcesdump/2007/0419/plan9/sys/man/3/ip:94,100 - /n/sourcesdump/2007/0420/plan9/sys/man/3/ip:94,101 The possible .I ctl messages are: - .TF "bind loopback" + .\" .TF "bind loopback" + .TF "bind netdev" .PD .TP .BI "bind ether " path /n/sourcesdump/2007/0419/plan9/sys/man/3/ip:135,141 - /n/sourcesdump/2007/0420/plan9/sys/man/3/ip:136,150 Disassociate the physical device from an IP interface. .TP .BI add\ "local mask remote mtu " proxy - Add a local IP address to the interface. The + .PD 0 + .TP + .BI try\ "local mask remote mtu " proxy + .PD + Add a local IP address to the interface. + .I try + adds the local address as a tentative address + if it's an IPv6 address. + The .IR mask , .IR remote , .IR mtu , /n/sourcesdump/2007/0419/plan9/sys/man/3/ip:185,190 - /n/sourcesdump/2007/0420/plan9/sys/man/3/ip:194,281 Remove the multicast address .I addr from this interface. + .TP + .BI "add6 " "v6addr pfx-len [onlink auto validlt preflt]" + Add the local IPv6 address + .I v6addr + with prefix length + .I pfx-len + to this interface. + See RFC 2461 §6.2.1 for more detail. + The remaining arguments are optional: + .RS + .TF onlink + .TP + .I onlink + flag: address is `on-link' + .TP + .I auto + flag: autonomous + .TP + .I validlt + valid life-time in seconds + .TP + .I preflt + preferred life-time in seconds + .RE + .PD + .TP + .BI "ra6 " "keyword value ..." + Set IPv6 router advertisement (RA) parameter + .IR keyword 's + .IR value . + Known + .IR keyword s + and the meanings of their values follow. + See RFC 2461 §6.2.1 for more detail. + Flags are true iff non-zero. + .RS + .TF minraint + .TP + .B recvra + flag: receive and process RAs. + .TP + .B sendra + flag: generate and send RAs. + .TP + .B mflag + flag: ``Managed address configuration'', + goes into RAs. + .TP + .B oflag + flag: ``Other stateful configuration'', + goes into RAs. + .TP + .B maxraint + ``maximum time allowed between sending unsolicited multicast'' + RAs from the interface, in ms. + .TP + .B minraint + ``minimum time allowed between sending unsolicited multicast'' + RAs from the interface, in ms. + .TP + .B linkmtu + ``value to be placed in MTU options sent by the router.'' + Zero indicates none. + .TP + .B reachtime + sets the Reachable Time field in RAs sent by the router. + ``Zero means unspecified (by this router).'' + .TP + .B rxmitra + sets the Retrans Timer field in RAs sent by the router. + ``Zero means unspecified (by this router).'' + .TP + .B ttl + default value of the Cur Hop Limit field in RAs sent by the router. + Should be set to the ``current diameter of the Internet.'' + ``Zero means unspecified (by this router).'' + .TP + .B routerlt + sets the Router Lifetime field of RAs sent from the interface, in ms. + Zero means the router is not to be used as a default router. + .PD + .RE .PP Reading the interface's .I status % cat >/sys/lib/dist/changes/1177005616.0.txt << EOF • Fix misplaced comment • Create a clog procedure to get rid of a lot of redundant syslog stuff (we know we're always going to be CRONLOG). EOF [geoff] --rw-rw-r-- M 43 glenda sys 12306 Apr 19 13:49 sys/src/cmd/auth/cron.c /n/sourcesdump/2007/0419/plan9/sys/src/cmd/auth/cron.c:84,89 - /n/sourcesdump/2007/0420/plan9/sys/src/cmd/auth/cron.c:84,103 return 0; } + #pragma varargck argpos clog 1 + + static void + clog(char *fmt, ...) + { + char msg[256]; + va_list arg; + + va_start(arg, fmt); + vseprint(msg, msg + sizeof msg, fmt, arg); + va_end(arg); + syslog(0, CRONLOG, msg); + } + void main(int argc, char *argv[]) { /n/sourcesdump/2007/0419/plan9/sys/src/cmd/auth/cron.c:138,147 - /n/sourcesdump/2007/0420/plan9/sys/src/cmd/auth/cron.c:152,161 * just execute one day's jobs. */ if (now < last) { - syslog(0, CRONLOG, "time went backward"); + clog("time went backward"); last = now; } else if (now - last > Day) { - syslog(0, CRONLOG, "time advanced more than a day"); + clog("time advanced more than a day"); last = now - Day; } now = minute(now); /n/sourcesdump/2007/0419/plan9/sys/src/cmd/auth/cron.c:261,268 - /n/sourcesdump/2007/0420/plan9/sys/src/cmd/auth/cron.c:275,281 if(*savec == '#' || *savec == '\0') continue; if(strlen(savec) > 1024){ - syslog(0, CRONLOG, "%s: line %d: line too long", - user->name, line); + clog("%s: line %d: line too long", user->name, line); continue; } j = emalloc(sizeof *j); /n/sourcesdump/2007/0419/plan9/sys/src/cmd/auth/cron.c:277,284 - /n/sourcesdump/2007/0420/plan9/sys/src/cmd/auth/cron.c:290,296 j->next = jobs; jobs = j; }else{ - syslog(0, CRONLOG, "%s: line %d: syntax error", - user->name, line); + clog("%s: line %d: syntax error", user->name, line); free(j); } } /n/sourcesdump/2007/0419/plan9/sys/src/cmd/auth/cron.c:356,362 - /n/sourcesdump/2007/0420/plan9/sys/src/cmd/auth/cron.c:368,374 *p = '\0'; *namep = strdup(buf); if(*namep == 0){ - syslog(0, CRONLOG, "internal error: strdup failure"); + clog("internal error: strdup failure"); _exits(0); } while(*savec == ' ' || *savec == '\t') /n/sourcesdump/2007/0419/plan9/sys/src/cmd/auth/cron.c:492,550 - /n/sourcesdump/2007/0420/plan9/sys/src/cmd/auth/cron.c:504,566 case 0: break; case -1: - syslog(0, CRONLOG, "can't fork a job for %s: %r\n", user->name); + clog("can't fork a job for %s: %r\n", user->name); default: return; } if(!mkcmd(j->cmd, buf, sizeof buf)){ - syslog(0, CRONLOG, "internal error: cmd buffer overflow"); + clog("internal error: cmd buffer overflow"); _exits(0); } /* - * remote call, auth, cmd with no i/o - * give it 2 min to complete + * local call, auth, cmd with no i/o */ if(strcmp(j->host, "local") == 0){ if(becomeuser(user->name) < 0){ - syslog(0, CRONLOG, "%s: can't change uid for %s on %s: %r", user->name, j->cmd, j->host); + clog("%s: can't change uid for %s on %s: %r", + user->name, j->cmd, j->host); _exits(0); } - syslog(0, CRONLOG, "%s: ran '%s' on %s", user->name, j->cmd, j->host); - execl("/bin/rc", "rc", "-c", buf, nil); - syslog(0, CRONLOG, "%s: exec failed for %s on %s: %r", + putenv("service", "rx"); + clog("%s: ran '%s' on %s", user->name, j->cmd, j->host); + execl("/bin/rc", "rc", "-lc", buf, nil); + clog("%s: exec failed for %s on %s: %r", user->name, j->cmd, j->host); _exits(0); } + /* + * remote call, auth, cmd with no i/o + * give it 2 min to complete + */ alarm(2*Minute*1000); fd = call(j->host); if(fd < 0){ if(fd == -2) - syslog(0, CRONLOG, "%s: dangerous host %s", - user->name, j->host); - syslog(0, CRONLOG, "%s: can't call %s: %r", user->name, j->host); + clog("%s: dangerous host %s", user->name, j->host); + clog("%s: can't call %s: %r", user->name, j->host); _exits(0); } - syslog(0, CRONLOG, "%s: called %s on %s", user->name, j->cmd, j->host); + clog("%s: called %s on %s", user->name, j->cmd, j->host); if(becomeuser(user->name) < 0){ - syslog(0, CRONLOG, "%s: can't change uid for %s on %s: %r", + clog("%s: can't change uid for %s on %s: %r", user->name, j->cmd, j->host); _exits(0); } ai = auth_proxy(fd, nil, "proto=p9any role=client"); if(ai == nil){ - syslog(0, CRONLOG, "%s: can't authenticate for %s on %s: %r", + clog("%s: can't authenticate for %s on %s: %r", user->name, j->cmd, j->host); _exits(0); } - syslog(0, CRONLOG, "%s: authenticated %s on %s", user->name, j->cmd, j->host); + clog("%s: authenticated %s on %s", user->name, j->cmd, j->host); write(fd, buf, strlen(buf)+1); write(fd, buf, 0); while((n = read(fd, buf, sizeof(buf)-1)) > 0){ buf[n] = 0; - syslog(0, CRONLOG, "%s: %s\n", j->cmd, buf); + clog("%s: %s\n", j->cmd, buf); } _exits(0); } /n/sourcesdump/2007/0419/plan9/sys/src/cmd/auth/cron.c:660,665 - /n/sourcesdump/2007/0420/plan9/sys/src/cmd/auth/cron.c:676,682 { char *cap; int rv; + cap = mkcap(getuser(), new); if(cap == nil) return -1; NEED SOME FILES