]> 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:32:24 +0000 (01:32 +0000)
src/if.c

index c58c9380820e2e3f7871a1edf1489f032a8da6f0..8ac8b048661d8e4eb83755566e05910e13486be4 100644 (file)
--- a/src/if.c
+++ b/src/if.c
@@ -630,9 +630,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) {
@@ -644,6 +644,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 == ':') {
@@ -653,7 +654,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;