From nobody Wed Sep 13 11:02:21 2023 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4RlyG55lpWz4sjp0; Wed, 13 Sep 2023 11:02:21 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4RlyG52VCJz4mHY; Wed, 13 Sep 2023 11:02:21 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1694602941; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=PZRnuSLytcpQ2uN2PdlNYMdBM44YDidN+ZKuQ+M9ebc=; b=we6aqTaahh2bCjDRu5+ZSiFcm7GFgshAf5W8lJkXh1yfaCMiaBBUlDHo2uzhv6rp4qtODx bcUbeiBj9DnzN2ZQKnLizZrQplhOpbxsRfENuVvr8IaFspWohWVebnv3r1Ny97t3uq6A6i Zqe8WPUF2k0vxrgT/wem/SuKl8FJZAGlSPB4FTryAH8c16kOkQbF+5diQGli74AZzxyqWw aYpmWURqIPDKTlGIjxjOUGlYRMAo0CIWkBcGFnBNtmZPnyY5K6lIdVJ2cQm0hyHev7YWzc /CD/c5CZfqS+IZOZhZjaOSitKZxizWtBISZ14ZIf0pho7i8RwO2F7/AT59Serg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1694602941; a=rsa-sha256; cv=none; b=uztgtlUopLvuAjUIfVSl4PiQDgUT1wUZgHku0kY/pJ5I76I78FteJKSXmO/N3qh6wH7Rgj t63XjV/wzS1CldXBijwo7atALQDmOvuk/dXni5lSl0MVKz38ROgyoT37kBZBnj7hVwLG5Q OMstuaENkDFBHE9Yt91prw9HyqYCLORZv7U7Rw6DXzb5fzRKUPRWoXfFEFc09i6oEQH3/7 zzCx4Hq2CR5l6Aajq4cviq/cpq2omBw+biwjW/jUbgQ0TlnIltuRmFm4FO5pqgciFnafIB Wd7sdhyC9qzm9TUqnOKPI5ziPGlX8OppmPBiNHlH6HOsvUP4KUl26PYMLn1LHQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1694602941; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=PZRnuSLytcpQ2uN2PdlNYMdBM44YDidN+ZKuQ+M9ebc=; b=oe1FyjFhoXzvPzxL2zcFQz2ESMkK4ozEKNrR8wL/flzfgoGR+Zn3bzJDu0C4fN5mFWdBP8 g2ur99NZLIiAa8SzZUmamGt2d5KnWTvJ1KuIXfJHOqnlY7maofw5GBtIiwOQWmZTJqgcMp AM7GG6JwyjtQzgDyfShga7Z+2XFmX3H7R48AgE7ey2n90lxUVyjSSPPkfnGi2YBpMEPow7 5L0MTdRbS73FSiR10C5iUGRLKhLZF4rp/RAVEAA3t+GGBIzRqssT9mZibsHwXa45suZ95q jQ66H48N0BIU9vRPmj93UKAX9SUnzZwKdUCVEbyDns4FES4mK07RpnDHhLxAJw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4RlyG51Slrz19tt; Wed, 13 Sep 2023 11:02:21 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 38DB2LCN099547; Wed, 13 Sep 2023 11:02:21 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 38DB2LiJ099544; Wed, 13 Sep 2023 11:02:21 GMT (envelope-from git) Date: Wed, 13 Sep 2023 11:02:21 GMT Message-Id: <202309131102.38DB2LiJ099544@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Wei Hu Subject: git: ab7dc1ceb6d3 - main - mana: add ioctl to support toggling offloading features List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: whu X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: ab7dc1ceb6d36fd804bedb818086ae3ff6692bf7 Auto-Submitted: auto-generated The branch main has been updated by whu: URL: https://cgit.FreeBSD.org/src/commit/?id=ab7dc1ceb6d36fd804bedb818086ae3ff6692bf7 commit ab7dc1ceb6d36fd804bedb818086ae3ff6692bf7 Author: Wei Hu AuthorDate: 2023-09-13 10:48:02 +0000 Commit: Wei Hu CommitDate: 2023-09-13 10:59:40 +0000 mana: add ioctl to support toggling offloading features With this support, users can enable or disable offloading features such as txcsum, rxcsum, tso and software lro through ifconfig. To enable or disable tx features, do it on mana interface first, then hn/netvsc to sync it up with mana. For example: ifconfig mana0 -txcsum ifconfig hn0 -tscsum To enable or disable rx features, just applying on mana interface would be sufficient. Disabling txcsum imples disabling tso. Enabling tso when txcsum is disabled will result in an error message in dmesg requesting to enable txcsum first. Above applies to ipv6 offloading features as well. Tested by: whu MFC after: 3 days Sponsored by: Microsoft --- sys/dev/mana/mana_en.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 76 insertions(+), 1 deletion(-) diff --git a/sys/dev/mana/mana_en.c b/sys/dev/mana/mana_en.c index 56fa4e51ba26..064b28fa94a4 100644 --- a/sys/dev/mana/mana_en.c +++ b/sys/dev/mana/mana_en.c @@ -169,7 +169,7 @@ mana_ioctl(if_t ifp, u_long command, caddr_t data) struct ifrsshash *ifrh; struct ifreq *ifr; uint16_t new_mtu; - int rc = 0; + int rc = 0, mask; switch (command) { case SIOCSIFMTU: @@ -214,6 +214,81 @@ mana_ioctl(if_t ifp, u_long command, caddr_t data) } break; + case SIOCSIFCAP: + MANA_APC_LOCK_LOCK(apc); + ifr = (struct ifreq *)data; + /* + * Fix up requested capabilities w/ supported capabilities, + * since the supported capabilities could have been changed. + */ + mask = (ifr->ifr_reqcap & if_getcapabilities(ifp)) ^ + if_getcapenable(ifp); + + if (mask & IFCAP_TXCSUM) { + if_togglecapenable(ifp, IFCAP_TXCSUM); + if_togglehwassist(ifp, (CSUM_TCP | CSUM_UDP | CSUM_IP)); + + if ((IFCAP_TSO4 & if_getcapenable(ifp)) && + !(IFCAP_TXCSUM & if_getcapenable(ifp))) { + mask &= ~IFCAP_TSO4; + if_setcapenablebit(ifp, 0, IFCAP_TSO4); + if_sethwassistbits(ifp, 0, CSUM_IP_TSO); + mana_warn(NULL, + "Also disabled tso4 due to -txcsum.\n"); + } + } + + if (mask & IFCAP_TXCSUM_IPV6) { + if_togglecapenable(ifp, IFCAP_TXCSUM_IPV6); + if_togglehwassist(ifp, (CSUM_UDP_IPV6 | CSUM_TCP_IPV6)); + + if ((IFCAP_TSO6 & if_getcapenable(ifp)) && + !(IFCAP_TXCSUM_IPV6 & if_getcapenable(ifp))) { + mask &= ~IFCAP_TSO6; + if_setcapenablebit(ifp, 0, IFCAP_TSO6); + if_sethwassistbits(ifp, 0, CSUM_IP6_TSO); + mana_warn(ifp, + "Also disabled tso6 due to -txcsum6.\n"); + } + } + + if (mask & IFCAP_RXCSUM) + if_togglecapenable(ifp, IFCAP_RXCSUM); + /* We can't diff IPv6 packets from IPv4 packets on RX path. */ + if (mask & IFCAP_RXCSUM_IPV6) + if_togglecapenable(ifp, IFCAP_RXCSUM_IPV6); + + if (mask & IFCAP_LRO) + if_togglecapenable(ifp, IFCAP_LRO); + + if (mask & IFCAP_TSO4) { + if (!(IFCAP_TSO4 & if_getcapenable(ifp)) && + !(IFCAP_TXCSUM & if_getcapenable(ifp))) { + MANA_APC_LOCK_UNLOCK(apc); + if_printf(ifp, "Enable txcsum first.\n"); + rc = EAGAIN; + goto out; + } + if_togglecapenable(ifp, IFCAP_TSO4); + if_togglehwassist(ifp, CSUM_IP_TSO); + } + + if (mask & IFCAP_TSO6) { + if (!(IFCAP_TSO6 & if_getcapenable(ifp)) && + !(IFCAP_TXCSUM_IPV6 & if_getcapenable(ifp))) { + MANA_APC_LOCK_UNLOCK(apc); + if_printf(ifp, "Enable txcsum6 first.\n"); + rc = EAGAIN; + goto out; + } + if_togglecapenable(ifp, IFCAP_TSO6); + if_togglehwassist(ifp, CSUM_IP6_TSO); + } + + MANA_APC_LOCK_UNLOCK(apc); +out: + break; + case SIOCSIFMEDIA: case SIOCGIFMEDIA: case SIOCGIFXMEDIA: