lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <1623847380-16590-1-git-send-email-sgoutham@marvell.com>
Date:   Wed, 16 Jun 2021 18:13:00 +0530
From:   <sgoutham@...vell.com>
To:     <mkubecek@...e.cz>, <kuba@...nel.org>, <netdev@...r.kernel.org>
CC:     Sunil Goutham <sgoutham@...vell.com>
Subject: [PATCH ethtool] ethtool: Support ntuple rule count change

From: Sunil Goutham <sgoutham@...vell.com>

Some NICs share resources like packet filters across multiple
interfaces they support, between SRIOV PF and VFs and/or between
multiple PFs. From HW point of view it is allowed to use all
MCAM filters for a single interface. Currently ethtool doesn't
support modifying filter count so that user can allocate more filters
to one interface and less to others. This patch adds ETHTOOL_SRXCLSRLCNT
ioctl command for modifying filter count.

example command:
./ethtool -U eth0 rule-count 256

Signed-off-by: Sunil Goutham <sgoutham@...vell.com>
---
 ethtool.c            | 11 +++++++++++
 internal.h           |  1 +
 rxclass.c            | 15 +++++++++++++++
 uapi/linux/ethtool.h |  1 +
 4 files changed, 28 insertions(+)

diff --git a/ethtool.c b/ethtool.c
index 8ed5a33..d4d0dab 100644
--- a/ethtool.c
+++ b/ethtool.c
@@ -3797,6 +3797,16 @@ static int do_srxclass(struct cmd_context *ctx)
 				" classification rule\n");
 			return 1;
 		}
+	} else if (!strcmp(ctx->argp[0], "rule-count")) {
+		int count = get_uint_range(ctx->argp[1], 0, INT_MAX);
+
+		err = rxclass_set_rule_count(ctx, count);
+
+		if (err < 0) {
+			fprintf(stderr, "Couldn't set"
+				" the desired ntuple rule count\n");
+			return 1;
+		}
 	} else {
 		exit_bad_args();
 	}
@@ -5818,6 +5828,7 @@ static const struct option args[] = {
 			  "			[ context %d ]\n"
 			  "			[ loc %d]] |\n"
 			  "		delete %d\n"
+			  "		rule-count %d\n"
 	},
 	{
 		.opts	= "-T|--show-time-stamping",
diff --git a/internal.h b/internal.h
index 27da8ea..ce76394 100644
--- a/internal.h
+++ b/internal.h
@@ -372,6 +372,7 @@ int rxclass_rule_get(struct cmd_context *ctx, __u32 loc);
 int rxclass_rule_ins(struct cmd_context *ctx,
 		     struct ethtool_rx_flow_spec *fsp, __u32 rss_context);
 int rxclass_rule_del(struct cmd_context *ctx, __u32 loc);
+int rxclass_set_rule_count(struct cmd_context *ctx, __u32 count);
 
 /* Module EEPROM parsing code */
 void sff8079_show_all(const __u8 *id);
diff --git a/rxclass.c b/rxclass.c
index 6cf81fd..9d29dde 100644
--- a/rxclass.c
+++ b/rxclass.c
@@ -616,6 +616,21 @@ int rxclass_rule_del(struct cmd_context *ctx, __u32 loc)
 	return err;
 }
 
+int rxclass_set_rule_count(struct cmd_context *ctx, __u32 count)
+{
+	struct ethtool_rxnfc nfccmd;
+	int err;
+
+	/* notify netdev of rule count config */
+	nfccmd.cmd = ETHTOOL_SRXCLSRLCNT;
+	nfccmd.rule_cnt = count;
+	err = send_ioctl(ctx, &nfccmd);
+	if (err < 0)
+		perror("rmgr: Cannot set RX class rule count");
+
+	return err;
+}
+
 typedef enum {
 	OPT_NONE = 0,
 	OPT_S32,
diff --git a/uapi/linux/ethtool.h b/uapi/linux/ethtool.h
index c6ec111..a43074a 100644
--- a/uapi/linux/ethtool.h
+++ b/uapi/linux/ethtool.h
@@ -1550,6 +1550,7 @@ enum ethtool_fec_config_bits {
 #define ETHTOOL_PHY_STUNABLE	0x0000004f /* Set PHY tunable configuration */
 #define ETHTOOL_GFECPARAM	0x00000050 /* Get FEC settings */
 #define ETHTOOL_SFECPARAM	0x00000051 /* Set FEC settings */
+#define ETHTOOL_SRXCLSRLCNT	0x00000052 /* Set RX class rule count */
 
 /* compatibility with older code */
 #define SPARC_ETH_GSET		ETHTOOL_GSET
-- 
2.7.4

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ