netfront: fix the support for disabling LRO at boot time

The driver has a tunable hw.xn.enable_lro which is intended to control
whether LRO is enabled. This is currently non-functional - even if its
set to zero, the driver still requests LRO support from the backend.
This change fixes the feature so that if enable_lro is set to zero, LRO
no longer appears in the interface capabilities and LRO is not requested
from the backend.

PR:		273046
MFC after:	1 week
Reviewed by:	royger
Differential Revision: https://reviews.freebsd.org/D41439

(cherry picked from commit da4b0d6eb06d730487d48e15d2d5e10c56266fd9)
This commit is contained in:
Doug Rabson 2023-08-12 14:19:47 +01:00
parent 27133e6e86
commit 61ba094af4

View file

@ -2272,7 +2272,7 @@ int
create_netdev(device_t dev)
{
struct netfront_info *np;
int err;
int err, cap_enabled;
if_t ifp;
np = device_get_softc(dev);
@ -2304,7 +2304,11 @@ create_netdev(device_t dev)
if_sethwassist(ifp, XN_CSUM_FEATURES);
/* Enable all supported features at device creation. */
if_setcapabilities(ifp, IFCAP_HWCSUM|IFCAP_TSO4|IFCAP_LRO);
if_setcapenable(ifp, if_getcapabilities(ifp));
cap_enabled = if_getcapabilities(ifp);
if (!xn_enable_lro) {
cap_enabled &= ~IFCAP_LRO;
}
if_setcapenable(ifp, cap_enabled);
if_sethwtsomax(ifp, 65536 - (ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN));
if_sethwtsomaxsegcount(ifp, MAX_TX_REQ_FRAGS);