summaryrefslogtreecommitdiff
path: root/sys/src/cmd/ip
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2012-12-05 14:38:30 +0100
committercinap_lenrek <cinap_lenrek@gmx.de>2012-12-05 14:38:30 +0100
commit49c8aed2db34c876ff81da10043fd278256e26db (patch)
tree13e4383155f7def7dda7ddcfb7efb7561ae282d8 /sys/src/cmd/ip
parent07506870120ed7d705da18b3a0c314cf3de1f9ce (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.c30
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){