svn commit: r366917 - in head: sbin/ifconfig sys/net tests/sys/net
Hans Petter Selasky
hps at selasky.org
Mon Nov 30 18:41:08 UTC 2020
On 10/21/20 11:28 PM, Alexander V. Chernikov wrote:
> Author: melifaro
> Date: Wed Oct 21 21:28:20 2020
> New Revision: 366917
> URL: https://svnweb.freebsd.org/changeset/base/366917
>
> Log:
> Add support for stacked VLANs (IEEE 802.1ad, AKA Q-in-Q).
>
> 802.1ad interfaces are created with ifconfig using the "vlanproto" parameter.
> Eg., the following creates a 802.1Q VLAN (id #42) over a 802.1ad S-VLAN
> (id #5) over a physical Ethernet interface (em0).
>
> ifconfig vlan5 create vlandev em0 vlan 5 vlanproto 802.1ad up
> ifconfig vlan42 create vlandev vlan5 vlan 42 inet 10.5.42.1/24
>
> VLAN_MTU, VLAN_HWCSUM and VLAN_TSO capabilities should be properly
> supported. VLAN_HWTAGGING is only partially supported, as there is
> currently no IFCAP_VLAN_* denoting the possibility to set the VLAN
> EtherType to anything else than 0x8100 (802.1ad uses 0x88A8).
>
> Submitted by: Olivier Piras
> Sponsored by: RG Nets
> Differential Revision: https://reviews.freebsd.org/D26436
>
Hi Alexander,
Any vlan ending in .<N> is now treated the same regardless of network
device:
Try this sequence of commands starting in any order
ifconfig vlan<N> create
ifconfig igb0.<N> create
ifconfig igb1.<N> create
You'll quickly see that only the first command you pick succeeds. The
subsequent ones will fail. <N> must be the same number, for example 5.
I'm not sure exactly where the problem is yet, but investigation shows
that ifc_name2unit would return EINVAL on igb0.<N> . Now it returns 0
(success) and puts <N> into the *unit argument.
> diff --git a/sys/net/if_clone.c b/sys/net/if_clone.c
> index a55ce9c3005..7f96757e12c 100644
> --- a/sys/net/if_clone.c
> +++ b/sys/net/if_clone.c
> @@ -582,9 +582,8 @@ ifc_name2unit(const char *name, int *unit)
> int cutoff = INT_MAX / 10;
> int cutlim = INT_MAX % 10;
>
> - if ((cp = strrchr(name, '.')) == NULL)
> - cp = name;
> - for (; *cp != '\0' && (*cp < '0' || *cp > '9'); cp++);
> + for (cp = name; *cp != '\0' && (*cp < '0' || *cp > '9'); cp++)
> + ;
> if (*cp == '\0') {
> *unit = -1;
> } else if (cp[0] == '0' && cp[1] != '\0') {
The chunk above is not a fix. Can you have a look at this. Should be
easy to reproduce!
Rolling back the kernel only to r366916 gives me:
ifconfig igb1.11 create
ifconfig: SIOCIFCREATE2: Invalid argument
Rolling back ifconfig to r366916 aswell, gives me the expected result again:
/usr/obj/usr/img/freebsd/amd64.amd64/sbin/ifconfig/ifconfig igb1.11 create
/usr/obj/usr/img/freebsd/amd64.amd64/sbin/ifconfig/ifconfig vlan11 create
--HPS
More information about the svn-src-head
mailing list