summaryrefslogtreecommitdiffstats
path: root/src/if.c
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2020-02-15 01:29:13 +0000
committerRoy Marples <roy@marples.name>2020-02-15 01:29:13 +0000
commitf39a6f9e63d124a664a27fa56e9e2bf45667c3a6 (patch)
treefe591560916aa04e773d1b6e7e3e05b2bc8496b3 /src/if.c
parent700899cab6d32660f8759ae79212e2b2151bace2 (diff)
downloaddhcpcd-f39a6f9e63d124a664a27fa56e9e2bf45667c3a6.tar.xz
if: . is part of the interface name, not an alias
Diffstat (limited to 'src/if.c')
-rw-r--r--src/if.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/if.c b/src/if.c
index bc0241af..8f2011ac 100644
--- 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;