]> git.lizzy.rs Git - plan9front.git/commitdiff
ip/ipconfig: automatically find ethernet device on /net if not given
authorcinap_lenrek <cinap_lenrek@gmx.de>
Wed, 5 Dec 2012 13:38:30 +0000 (14:38 +0100)
committercinap_lenrek <cinap_lenrek@gmx.de>
Wed, 5 Dec 2012 13:38:30 +0000 (14:38 +0100)
sys/src/cmd/ip/ipconfig/main.c

index 92ab40c5c672cb8071097994b3f4d3edd0e2f5b1..aea004dfe4e1198c0c8a18af0a2ec0b3f85d9f80 100644 (file)
@@ -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){