Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 11 Aug 2023 22:51:24 GMT
From:      Kristof Provost <kp@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 5f11a33ceeb3 - main - if_vlan: do not enable LRO for bridge interaces
Message-ID:  <202308112251.37BMpOnC064624@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by kp:

URL: https://cgit.FreeBSD.org/src/commit/?id=5f11a33ceeb385477cb22d9ad5941061c5a26be9

commit 5f11a33ceeb385477cb22d9ad5941061c5a26be9
Author:     Paul Vixie <paul@redbarn.org>
AuthorDate: 2023-08-11 18:17:16 +0000
Commit:     Kristof Provost <kp@FreeBSD.org>
CommitDate: 2023-08-11 22:50:37 +0000

    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
---
 sys/net/if_vlan.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/sys/net/if_vlan.c b/sys/net/if_vlan.c
index 6aa872a19364..92e4e4247e3d 100644
--- a/sys/net/if_vlan.c
+++ b/sys/net/if_vlan.c
@@ -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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202308112251.37BMpOnC064624>