Stop tinkering with the parent's VLAN_MTU capability.

Now it is user-controlled through ifconfig(8).

The former ``automagic'' way of operation created more
trouble than good.  First, VLAN_MTU consumers other than
vlan(4) had appeared, e.g., ng_vlan(4).  Second, there was
no way to disable VLAN_MTU manually if it were causing
trouble, e.g., data corruption.

Dropping the ``automagic'' should be completely invisible
to the user since
a) all the drivers supporting VLAN_MTU
have it enabled by default, and in the first place
b) there is only one driver that can really toggle VLAN_MTU
in the hardware under its control (it's fxp(4), to which
I added VLAN_MTU controls to illustrate the principle.)
This commit is contained in:
Yaroslav Tykhiy 2004-07-26 14:46:04 +00:00
parent e82866fea6
commit d6fcfb7ae1
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=132659

View File

@ -650,27 +650,18 @@ vlan_config(struct ifvlan *ifv, struct ifnet *p)
ifv->ifv_mintu = ETHERMIN;
ifv->ifv_flags = 0;
/*
* The active VLAN counter on the parent is used
* at various places to see if there is a vlan(4)
* attached to this physical interface.
*/
p->if_nvlans++;
/*
* If the parent supports the VLAN_MTU capability,
* i.e. can Tx/Rx larger than ETHER_MAX_LEN frames,
* use it.
* First of all, enable Tx/Rx of such extended frames on the
* parent if it's disabled and we're the first to attach.
*/
p->if_nvlans++;
if (p->if_nvlans == 1 &&
(p->if_capabilities & IFCAP_VLAN_MTU) &&
(p->if_capenable & IFCAP_VLAN_MTU) == 0) {
struct ifreq ifr;
int error;
ifr.ifr_reqcap = p->if_capenable | IFCAP_VLAN_MTU;
error = (*p->if_ioctl)(p, SIOCSIFCAP, (caddr_t) &ifr);
if (error) {
p->if_nvlans--;
return (error);
}
}
if (p->if_capenable & IFCAP_VLAN_MTU) {
/*
* No need to fudge the MTU since the parent can
@ -777,17 +768,6 @@ vlan_unconfig(struct ifnet *ifp)
}
p->if_nvlans--;
if (p->if_nvlans == 0) {
struct ifreq ifr;
/*
* Try to disable Tx/Rx of VLAN-sized frames.
* This may have no effect for some interfaces,
* but only the parent driver knows that.
*/
ifr.ifr_reqcap = p->if_capenable & ~IFCAP_VLAN_MTU;
(*p->if_ioctl)(p, SIOCSIFCAP, (caddr_t) &ifr);
}
}
/* Disconnect from parent. */