--- /n/sources/plan9/sys/src/cmd/ip/ipconfig/main.c Mon Jun 24 22:35:14 2013 +++ /sys/src/cmd/ip/ipconfig/main.c Fri Apr 15 00:00:00 2016 @@ -36,6 +36,7 @@ Taddrs, Tstr, Tbyte, + Tushort, Tulong, Tvec, }; @@ -79,7 +80,7 @@ [OBttl] { "ttl", Tulong }, [OBpathtimeout] { "pathtimeout", Taddrs }, [OBpathplateau] { "pathplateau", Taddrs }, -[OBmtu] { "mtu", Tulong }, +[OBmtu] { "mtu", Tushort }, [OBsubnetslocal] { "subnetslocal", Taddrs }, [OBbaddr] { "baddr", Taddrs }, [OBdiscovermask] { "discovermask", Taddrs }, @@ -208,6 +209,7 @@ int optgetbyte(uchar*, int); int optgetstr(uchar*, int, char*, int); uchar* optget(uchar*, int, int*); +ushort optgetushort(uchar*, int); ulong optgetulong(uchar*, int); int optgetvec(uchar*, int, uchar*, int); char* optgetx(uchar*, uchar); @@ -842,6 +844,15 @@ return -1; } + if(!validip(conf.raddr) && conf.mtu != 0){ + n = snprint(buf, sizeof buf, " mtu %d", conf.mtu); + + if(write(conf.cfd, buf, n) < 0){ + warning("write(%s): %r", buf); + return -1; + } + } + if(beprimary==1 && validip(conf.gaddr)) adddefroute(conf.mpoint, conf.gaddr); @@ -1263,6 +1276,14 @@ optgetstr(bp->optdata, OBdomainname, conf.domainname, sizeof conf.domainname); + /* get mtu */ + if(conf.mtu == 0){ + conf.mtu = optgetushort(bp->optdata, OBmtu); + if(conf.mtu != 0) + conf.mtu += 14; /* size of ethernet header */ + DEBUG("mtu=%d ", conf.mtu); + } + /* get anything else we asked for */ getoptions(bp->optdata); @@ -1459,6 +1480,18 @@ if(p == nil) return 0; return *p; +} + +ushort +optgetushort(uchar *p, int op) +{ + int len; + + len = 2; + p = optget(p, op, &len); + if(p == nil) + return 0; + return nhgets(p); } ulong