diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-12-05 14:38:30 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-12-05 14:38:30 +0100 |
commit | 49c8aed2db34c876ff81da10043fd278256e26db (patch) | |
tree | 13e4383155f7def7dda7ddcfb7efb7561ae282d8 /sys/src/cmd/ip | |
parent | 07506870120ed7d705da18b3a0c314cf3de1f9ce (diff) |
ip/ipconfig: automatically find ethernet device on /net if not given
Diffstat (limited to 'sys/src/cmd/ip')
-rw-r--r-- | sys/src/cmd/ip/ipconfig/main.c | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/sys/src/cmd/ip/ipconfig/main.c b/sys/src/cmd/ip/ipconfig/main.c index 92ab40c5c..aea004dfe 100644 --- a/sys/src/cmd/ip/ipconfig/main.c +++ b/sys/src/cmd/ip/ipconfig/main.c @@ -357,6 +357,30 @@ parse6ra(int argc, char **argv) conf.maxraint, conf.minraint); } +static char* +finddev(char *dir, char *name, char *dev) +{ + int fd, i, nd; + Dir *d; + + fd = open(dir, OREAD); + if(fd >= 0){ + d = nil; + nd = dirreadall(fd, &d); + close(fd); + for(i=0; i<nd; i++){ + if(strncmp(d[i].name, name, strlen(name))) + continue; + if(strstr(d[i].name, "ctl") != nil) + continue; /* ignore ctl files */ + dev = smprint("%s/%s", dir, d[i].name); + break; + } + free(d); + } + return dev; +} + static void init(void) { @@ -397,7 +421,7 @@ parseargs(int argc, char **argv) /* defaults */ conf.type = "ether"; - conf.dev = "/net/ether0"; + conf.dev = nil; action = Vadd; /* get optional medium and device */ @@ -417,10 +441,12 @@ parseargs(int argc, char **argv) conf.dev = *argv++; argc--; } else if(verb == Vppp) - conf.dev = "/dev/eia0"; + conf.dev = finddev("/dev", "eia", "/dev/eia0"); break; } } + if(conf.dev == nil) + conf.dev = finddev(conf.mpoint, "ether", "/net/ether0"); /* get optional verb */ if (argc > 0){ |