Date: Tue, 08 Jul 2003 08:15:53 -0700 From: Sam Leffler <sam@errno.com> To: Bill Paul <wpaul@FreeBSD.org>, Garrett Wollman <wollman@lcs.mit.edu> Cc: cvs-all@FreeBSD.org Subject: Re: cvs commit: src/sys/net if_vlan.c Message-ID: <690626358.1057652153@melange.errno.com> In-Reply-To: <20030707234511.3B0FB37B401@hub.freebsd.org> References: <20030707234511.3B0FB37B401@hub.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
>> <<On Sat, 5 Jul 2003 20:24:25 -0700 (PDT), Bill Paul <wpaul@FreeBSD.org> >> said: >> >> > I'm not quite sure what the right thing is to do here. Neither the >> > vlan(4) nor ifconfig(8) man pages suggest which way to go. For now, >> > I've removed this use of EVL_VLANOFTAG() so that the tag will match >> > correctly in all cases. I will not get upset if somebody makes a >> > compelling argument for using EVL_VLANOFTAG() everywhere instead, >> > as long as the use is consistent. >> >> VLAN tags have only 12 bits. Anything else is part of the 802.1p >> encapsulation header (either the priority or the ``this packet was >> translated from Token Ring'' bit). >> >> -GAWollman >> > > Ok, based on this (and what others have said), it looks like the > correct behavior is to mask off all but the VLAN ID bits in all cases > in vlan_input(). This is easy enough to do. The only issue then is > what to do about the fact that the user is currently allowed to set > the non-VLAN ID bits with ifconfig(8). We can do one of two things: > > 1) Change vlan_input() to apply EVL_VLANOFTAG() to all incoming tags > (in both hardware and non-hardware tagging cases) and change the > vlan_ioctl() function to only accept vlan tags from 0 to 4095 > and return EINVAL if the caller tries to set any of the other > bits. (Prevent user from shooting self in foot.) > > 2) Let the user set any bits, but always mask off the non-VLAN ID > bits in vlan_input(), i.e.: > > --- if_vlan.c.orig Sat Jul 5 19:53:51 2003 > +++ if_vlan.c Mon Jul 7 10:44:07 2003 > @@ -429,7 +429,8 @@ > > for (ifv = LIST_FIRST(&ifv_list); ifv != NULL; > ifv = LIST_NEXT(ifv, ifv_list)) > - if (ifp == ifv->ifv_p && tag == ifv->ifv_tag) > + if (ifp == ifv->ifv_p && EVL_VLANOFTAG(tag) == > + EVL_VLANOFTAG(ifv->ifv_tag)) > break; > > if (ifv == NULL || (ifv->ifv_if.if_flags & IFF_UP) == 0) { > > I am leaning towards option 1). Am I sane or not? Go with 1). I agree that users should be dealing only with the 12-bit id, not the priority bits. But this still leaves the issue of honoring the priority bits on reception. Sam
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?690626358.1057652153>