From owner-dev-commits-src-branches@freebsd.org Sun May 16 03:00:49 2021 Return-Path: Delivered-To: dev-commits-src-branches@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 6971F631925; Sun, 16 May 2021 03:00:49 +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 4FjRpn2bqdz3LVh; Sun, 16 May 2021 03:00:49 +0000 (UTC) (envelope-from git@FreeBSD.org) 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 4218F11349; Sun, 16 May 2021 03:00:49 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 14G30ngw076429; Sun, 16 May 2021 03:00:49 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 14G30n5j076428; Sun, 16 May 2021 03:00:49 GMT (envelope-from git) Date: Sun, 16 May 2021 03:00:49 GMT Message-Id: <202105160300.14G30n5j076428@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Navdeep Parhar Subject: git: 98893d4953da - stable/13 - cxgbetool(8): Add support for setting the hashfilter mode (filter mask). MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: np X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 98893d4953da2faa0ba77248ddadf676ad8cfc6b Auto-Submitted: auto-generated X-BeenThere: dev-commits-src-branches@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Commits to the stable branches of the FreeBSD src repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 16 May 2021 03:00:49 -0000 The branch stable/13 has been updated by np: URL: https://cgit.FreeBSD.org/src/commit/?id=98893d4953da2faa0ba77248ddadf676ad8cfc6b commit 98893d4953da2faa0ba77248ddadf676ad8cfc6b Author: Navdeep Parhar AuthorDate: 2021-02-19 22:22:08 +0000 Commit: Navdeep Parhar CommitDate: 2021-05-16 02:57:12 +0000 cxgbetool(8): Add support for setting the hashfilter mode (filter mask). Tighten up the validation of filter modes while here. Unrecognized keywords will be now be flagged as errors instead of being ignored. (cherry picked from commit 038148c108c4e7251c52364616273eec72b0c061) --- usr.sbin/cxgbetool/cxgbetool.c | 78 +++++++++++++++++++++++++----------------- 1 file changed, 46 insertions(+), 32 deletions(-) diff --git a/usr.sbin/cxgbetool/cxgbetool.c b/usr.sbin/cxgbetool/cxgbetool.c index c852b4e9940d..139a0bd8e564 100644 --- a/usr.sbin/cxgbetool/cxgbetool.c +++ b/usr.sbin/cxgbetool/cxgbetool.c @@ -100,7 +100,7 @@ usage(FILE *fp) "\thashfilter [ ] ... set a hashfilter\n" "\thashfilter delete|clear delete a hashfilter\n" "\thashfilter list list all hashfilters\n" - "\thashfilter mode get global hashfilter mode\n" + "\thashfilter mode [] ... get/set global hashfilter mode\n" "\ti2c [] read from i2c device\n" "\tloadboot [pf|offset ] install boot image\n" "\tloadboot clear [pf|offset ] remove boot image\n" @@ -1046,6 +1046,8 @@ get_filter_mode(int hashfilter) if (mode & T4_FILTER_VNIC) { if (mode & T4_FILTER_IC_VNIC) printf("vnic_id "); + else if (mode & T4_FILTER_IC_ENCAP) + printf("encap "); else printf("ovlan "); } @@ -1062,57 +1064,69 @@ get_filter_mode(int hashfilter) } static int -set_filter_mode(int argc, const char *argv[]) +set_filter_mode(int argc, const char *argv[], int hashfilter) { uint32_t mode = 0; - int vnic = 0, ovlan = 0; + int vnic = 0, ovlan = 0, invalid = 0; for (; argc; argc--, argv++) { - if (!strcmp(argv[0], "frag")) + if (!strcmp(argv[0], "ipv4") || !strcmp(argv[0], "ipv6") || + !strcmp(argv[0], "sip") || !strcmp(argv[0], "dip") || + !strcmp(argv[0], "sport") || !strcmp(argv[0], "dport")) { + /* These are always available and enabled. */ + continue; + } else if (!strcmp(argv[0], "frag")) mode |= T4_FILTER_IP_FRAGMENT; - - if (!strcmp(argv[0], "matchtype")) + else if (!strcmp(argv[0], "matchtype")) mode |= T4_FILTER_MPS_HIT_TYPE; - - if (!strcmp(argv[0], "macidx")) + else if (!strcmp(argv[0], "macidx")) mode |= T4_FILTER_MAC_IDX; - - if (!strcmp(argv[0], "ethtype")) + else if (!strcmp(argv[0], "ethtype")) mode |= T4_FILTER_ETH_TYPE; - - if (!strcmp(argv[0], "proto")) + else if (!strcmp(argv[0], "proto")) mode |= T4_FILTER_IP_PROTO; - - if (!strcmp(argv[0], "tos")) + else if (!strcmp(argv[0], "tos")) mode |= T4_FILTER_IP_TOS; - - if (!strcmp(argv[0], "vlan")) + else if (!strcmp(argv[0], "vlan")) mode |= T4_FILTER_VLAN; - - if (!strcmp(argv[0], "ovlan")) { + else if (!strcmp(argv[0], "ovlan")) { mode |= T4_FILTER_VNIC; - ovlan++; - } - - if (!strcmp(argv[0], "vnic_id")) { + ovlan = 1; + } else if (!strcmp(argv[0], "vnic_id")) { mode |= T4_FILTER_VNIC; mode |= T4_FILTER_IC_VNIC; - vnic++; + vnic = 1; } - - if (!strcmp(argv[0], "iport")) +#ifdef notyet + else if (!strcmp(argv[0], "encap")) { + mode |= T4_FILTER_VNIC; + mode |= T4_FILTER_IC_ENCAP; + encap = 1; + } +#endif + else if (!strcmp(argv[0], "iport")) mode |= T4_FILTER_PORT; - - if (!strcmp(argv[0], "fcoe")) + else if (!strcmp(argv[0], "fcoe")) mode |= T4_FILTER_FCoE; + else { + warnx("\"%s\" is not valid while setting filter mode.", + argv[0]); + invalid++; + } } - if (vnic > 0 && ovlan > 0) { + if (vnic + ovlan > 1) { warnx("\"vnic_id\" and \"ovlan\" are mutually exclusive."); - return (EINVAL); + invalid++; } - return doit(CHELSIO_T4_SET_FILTER_MODE, &mode); + if (invalid > 0) + return (EINVAL); + + if (hashfilter) + return doit(CHELSIO_T4_SET_FILTER_MASK, &mode); + else + return doit(CHELSIO_T4_SET_FILTER_MODE, &mode); } static int @@ -1420,8 +1434,8 @@ filter_cmd(int argc, const char *argv[], int hashfilter) return get_filter_mode(hashfilter); /* mode */ - if (!hashfilter && strcmp(argv[0], "mode") == 0) - return set_filter_mode(argc - 1, argv + 1); + if (strcmp(argv[0], "mode") == 0) + return set_filter_mode(argc - 1, argv + 1, hashfilter); /* ... */ s = str_to_number(argv[0], NULL, &val);