Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 28 Mar 2022 15:26:04 GMT
From:      "Alexander V. Chernikov" <melifaro@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: 2eb4ac1e6fc9 - releng/13.1 - ifconfig: improve vlan options parsing
Message-ID:  <202203281526.22SFQ4xG086991@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch releng/13.1 has been updated by melifaro:

URL: https://cgit.FreeBSD.org/src/commit/?id=2eb4ac1e6fc946ca8d175863b16602885fae61b7

commit 2eb4ac1e6fc946ca8d175863b16602885fae61b7
Author:     Alexander V. Chernikov <melifaro@FreeBSD.org>
AuthorDate: 2022-01-17 09:30:26 +0000
Commit:     Alexander V. Chernikov <melifaro@FreeBSD.org>
CommitDate: 2022-03-28 15:25:23 +0000

    ifconfig: improve vlan options parsing
    
    PR:     261136
    Reported by:    Daniel O'Connor
    Approved by:    re(gjb)
    MFC after:      2 weeks
    
    (cherry picked from commit 779fd05344662aeec79c29470258bf657318eab3)
    (cherry picked from commit 157bf2c9964a54124e05bb7c354d8e5ad784802a)
---
 sbin/ifconfig/ifvlan.c | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/sbin/ifconfig/ifvlan.c b/sbin/ifconfig/ifvlan.c
index 60f97338ee27..1e74b504fc26 100644
--- a/sbin/ifconfig/ifvlan.c
+++ b/sbin/ifconfig/ifvlan.c
@@ -126,11 +126,6 @@ vlan_parse_ethervid(const char *name)
 	strlcpy(ifname, name, IFNAMSIZ);
 	if ((cp = strrchr(ifname, '.')) == NULL)
 		return;
-	/*
-	 * Don't mix vlan/vlandev parameters with dot notation.
-	 */
-	if (params.vlr_tag != NOTAG || params.vlr_parent[0] != '\0')
-		errx(1, "ambiguous vlan specification");
 	/*
 	 * Derive params from interface name: "parent.vid".
 	 */
@@ -144,8 +139,20 @@ vlan_parse_ethervid(const char *name)
 	if ((*cp != '\0') || (vid & ~0xFFF))
 		errx(1, "invalid vlan tag");
 
-	strlcpy(params.vlr_parent, ifname, IFNAMSIZ);
-	params.vlr_tag = (vid & 0xFFF);
+	/*
+	 * allow "devX.Y vlandev devX vlan Y" syntax
+	 */
+	if (params.vlr_tag == NOTAG || params.vlr_tag == vid)
+		params.vlr_tag = vid;
+	else
+		errx(1, "ambiguous vlan specification");
+
+	/* Restrict overriding interface name */
+	if (params.vlr_parent[0] == '\0' || !strcmp(params.vlr_parent, ifname))
+		strlcpy(params.vlr_parent, ifname, IFNAMSIZ);
+	else
+		errx(1, "ambiguous vlan specification");
+	printf("CR: %s %d\n", params.vlr_parent, params.vlr_tag);
 }
 
 static void



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202203281526.22SFQ4xG086991>