if_vlan: do not enable LRO for bridge interaces

If the parent interface is not a bridge and can do LRO and
checksum offloading on VLANs, then guess it may do LRO on VLANs.
False positive here cost nothing, while false negative may lead
to some confusions. According to Wikipedia:

"LRO should not operate on machines acting as routers, as it breaks
the end-to-end principle and can significantly impact performance."

The same reasoning applies to machines acting as bridges.

PR:		254596
MFC after:	3 weeks
This commit is contained in:
Paul Vixie 2023-08-11 20:17:16 +02:00 committed by Kristof Provost
parent 765ad5b28d
commit 5f11a33cee

View File

@ -2067,14 +2067,22 @@ vlan_capabilities(struct ifvlan *ifv)
}
/*
* If the parent interface can do LRO and checksum offloading on
* VLANs, then guess it may do LRO on VLANs. False positive here
* cost nothing, while false negative may lead to some confusions.
* If the parent interface is not a bridge and can do LRO and
* checksum offloading on VLANs, then guess it may do LRO on VLANs.
* False positive here cost nothing, while false negative may lead
* to some confusions. According to Wikipedia:
*
* "LRO should not operate on machines acting as routers, as it breaks
* the end-to-end principle and can significantly impact performance."
*
* The same reasoning applies to machines acting as bridges.
*/
if (p->if_capabilities & IFCAP_VLAN_HWCSUM)
cap |= p->if_capabilities & IFCAP_LRO;
if (p->if_capenable & IFCAP_VLAN_HWCSUM)
ena |= p->if_capenable & IFCAP_LRO;
if (ifp->if_bridge == NULL) {
if (p->if_capabilities & IFCAP_VLAN_HWCSUM)
cap |= p->if_capabilities & IFCAP_LRO;
if (p->if_capenable & IFCAP_VLAN_HWCSUM)
ena |= p->if_capenable & IFCAP_LRO;
}
/*
* If the parent interface can offload TCP connections over VLANs then