]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
if: . is part of the interface name, not an alias
authorRoy Marples <roy@marples.name>
Sat, 15 Feb 2020 01:29:13 +0000 (01:29 +0000)
committerRoy Marples <roy@marples.name>
Sat, 15 Feb 2020 01:29:13 +0000 (01:29 +0000)
src/if.c

index bc0241afdab5981ef7ba8c4d2961bba9f11c029e..8f2011ac2bec9aa5fccb84ea4ec0a8e8185e71dc 100644 (file)
--- a/src/if.c
+++ b/src/if.c
@@ -700,9 +700,9 @@ if_nametospec(const char *ifname, struct if_spec *spec)
                errno = EINVAL;
                return -1;
        }
+
+       /* :N is an alias */
        ep = strchr(spec->drvname, ':');
-       if (ep == NULL)
-               ep = strchr(spec->drvname, '.');
        if (ep) {
                spec->lun = (int)strtoi(ep + 1, NULL, 10, 0, INT_MAX, &e);
                if (e != 0) {
@@ -714,6 +714,7 @@ if_nametospec(const char *ifname, struct if_spec *spec)
                spec->lun = -1;
                ep = spec->drvname + strlen(spec->drvname) - 1;
        }
+
        strlcpy(spec->devname, spec->drvname, sizeof(spec->devname));
        for (ep = spec->drvname; *ep != '\0' && !isdigit((int)*ep); ep++) {
                if (*ep == ':') {
@@ -723,7 +724,12 @@ if_nametospec(const char *ifname, struct if_spec *spec)
        }
        spec->ppa = (int)strtoi(ep, &pp, 10, 0, INT_MAX, &e);
        *ep = '\0';
-       if (pp != NULL && *pp == 'i' && spec->lun == -1) {
+
+       /*
+        * . is used for VLAN style names
+        * i is used on NetBSD for xvif interfaces
+        */
+       if (pp != NULL && (*pp == '.' || *pp == 'i') && spec->lun == -1) {
                spec->lun = (int)strtoi(pp + 1, NULL, 10, 0, INT_MAX, &e);
                if (e)
                        spec->lun = -1;