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 <[email protected]>
AuthorDate: 2022-01-17 09:30:26 +0000
Commit:     Alexander V. Chernikov <[email protected]>
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

Reply via email to