naccyde / rpms / systemd

Forked from rpms/systemd a year ago
Clone
498081
From 7d1444d9563575ec3346620f12788799080db8c5 Mon Sep 17 00:00:00 2001
498081
Message-Id: <7d1444d9563575ec3346620f12788799080db8c5.1683109787.git.aclaudi@redhat.com>
498081
In-Reply-To: <d60a7ac3c0f6aa2a933f48a69ab31e3637f6906c.1683109787.git.aclaudi@redhat.com>
498081
References: <d60a7ac3c0f6aa2a933f48a69ab31e3637f6906c.1683109787.git.aclaudi@redhat.com>
498081
From: Andrea Claudi <aclaudi@redhat.com>
498081
Date: Wed, 3 May 2023 11:19:24 +0200
498081
Subject: [PATCH] macvlan: Add bclim parameter
498081
498081
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2186945
498081
Upstream Status: iproute2-next.git commit e8a3fb47
498081
498081
commit e8a3fb470b4e96aa35a2731c7cc175b946c0a62d
498081
Author: Herbert Xu <herbert@gondor.apana.org.au>
498081
Date:   Thu Mar 30 11:07:25 2023 +0800
498081
498081
    macvlan: Add bclim parameter
498081
498081
    This patch adds support for setting the broadcast queueing threshold
498081
    on macvlan devices.  This controls which multicast packets will be
498081
    processed in a workqueue instead of inline.
498081
498081
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
498081
498081
     ip/iplink_macvlan.c          |   26 ++++++++++++++++++++++++--
498081
     man/man8/ip-link.8.in        |   18 ++++++++++++++++++
498081
     3 files changed, 43 insertions(+), 2 deletions(-)
498081
498081
    Signed-off-by: David Ahern <dsahern@kernel.org>
498081
---
498081
 ip/iplink_macvlan.c   | 26 ++++++++++++++++++++++++--
498081
 man/man8/ip-link.8.in | 18 ++++++++++++++++++
498081
 2 files changed, 42 insertions(+), 2 deletions(-)
498081
498081
diff --git a/ip/iplink_macvlan.c b/ip/iplink_macvlan.c
498081
index 0f13637d..6bdc76d1 100644
498081
--- a/ip/iplink_macvlan.c
498081
+++ b/ip/iplink_macvlan.c
498081
@@ -26,13 +26,14 @@
498081
 static void print_explain(struct link_util *lu, FILE *f)
498081
 {
498081
 	fprintf(f,
498081
-		"Usage: ... %s mode MODE [flag MODE_FLAG] MODE_OPTS [bcqueuelen BC_QUEUE_LEN]\n"
498081
+		"Usage: ... %s mode MODE [flag MODE_FLAG] MODE_OPTS [bcqueuelen BC_QUEUE_LEN] [bclim BCLIM]\n"
498081
 		"\n"
498081
 		"MODE: private | vepa | bridge | passthru | source\n"
498081
 		"MODE_FLAG: null | nopromisc | nodst\n"
498081
 		"MODE_OPTS: for mode \"source\":\n"
498081
 		"\tmacaddr { { add | del } <macaddr> | set [ <macaddr> [ <macaddr>  ... ] ] | flush }\n"
498081
-		"BC_QUEUE_LEN: Length of the rx queue for broadcast/multicast: [0-4294967295]\n",
498081
+		"BC_QUEUE_LEN: Length of the rx queue for broadcast/multicast: [0-4294967295]\n"
498081
+		"BCLIM: Threshold for broadcast queueing: 32-bit integer\n",
498081
 		lu->id
498081
 	);
498081
 }
498081
@@ -67,6 +68,12 @@ static int bc_queue_len_arg(const char *arg)
498081
 	return -1;
498081
 }
498081
 
498081
+static int bclim_arg(const char *arg)
498081
+{
498081
+	fprintf(stderr, "Error: illegal value for \"bclim\": \"%s\"\n", arg);
498081
+	return -1;
498081
+}
498081
+
498081
 static int macvlan_parse_opt(struct link_util *lu, int argc, char **argv,
498081
 			  struct nlmsghdr *n)
498081
 {
498081
@@ -168,6 +175,15 @@ static int macvlan_parse_opt(struct link_util *lu, int argc, char **argv,
498081
 				return bc_queue_len_arg(*argv);
498081
 			}
498081
 			addattr32(n, 1024, IFLA_MACVLAN_BC_QUEUE_LEN, bc_queue_len);
498081
+		} else if (!strcmp(*argv, "bclim")) {
498081
+			__s32 bclim;
498081
+			NEXT_ARG();
498081
+
498081
+			if (get_s32(&bclim, *argv, 0)) {
498081
+				return bclim_arg(*argv);
498081
+			}
498081
+			addattr_l(n, 1024, IFLA_MACVLAN_BC_CUTOFF,
498081
+				  &bclim, sizeof(bclim));
498081
 		} else if (matches(*argv, "help") == 0) {
498081
 			explain(lu);
498081
 			return -1;
498081
@@ -245,6 +261,12 @@ static void macvlan_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]
498081
 		print_luint(PRINT_ANY, "usedbcqueuelen", "usedbcqueuelen %lu ", bc_queue_len);
498081
 	}
498081
 
498081
+	if (tb[IFLA_MACVLAN_BC_CUTOFF] &&
498081
+		RTA_PAYLOAD(tb[IFLA_MACVLAN_BC_CUTOFF]) >= sizeof(__s32)) {
498081
+		__s32 bclim = rta_getattr_s32(tb[IFLA_MACVLAN_BC_CUTOFF]);
498081
+		print_int(PRINT_ANY, "bclim", "bclim %d ", bclim);
498081
+	}
498081
+
498081
 	/* in source mode, there are more options to print */
498081
 
498081
 	if (mode != MACVLAN_MODE_SOURCE)
498081
diff --git a/man/man8/ip-link.8.in b/man/man8/ip-link.8.in
498081
index eeddf493..62aebabd 100644
498081
--- a/man/man8/ip-link.8.in
498081
+++ b/man/man8/ip-link.8.in
498081
@@ -1455,6 +1455,7 @@ the following additional arguments are supported:
498081
 .BR mode " { " private " | " vepa " | " bridge " | " passthru
498081
 .RB " [ " nopromisc " ] | " source " [ " nodst " ] } "
498081
 .RB " [ " bcqueuelen " { " LENGTH " } ] "
498081
+.RB " [ " bclim " " LIMIT " ] "
498081
 
498081
 .in +8
498081
 .sp
498081
@@ -1513,6 +1514,13 @@ will be the maximum length that any macvlan interface has requested.
498081
 When listing device parameters both the bcqueuelen parameter
498081
 as well as the actual used bcqueuelen are listed to better help
498081
 the user understand the setting.
498081
+
498081
+.BR bclim " " LIMIT
498081
+- Set the threshold for broadcast queueing.
498081
+.BR LIMIT " must be a 32-bit integer."
498081
+Setting this to -1 disables broadcast queueing altogether.  Otherwise
498081
+a multicast address will be queued as broadcast if the number of devices
498081
+using it is greater than the given value.
498081
 .in -8
498081
 
498081
 .TP
498081
@@ -2675,6 +2683,9 @@ Update the broadcast/multicast queue length.
498081
 [
498081
 .BI bcqueuelen "  LENGTH  "
498081
 ]
498081
+[
498081
+.BI bclim " LIMIT "
498081
+]
498081
 
498081
 .in +8
498081
 .BI bcqueuelen " LENGTH "
498081
@@ -2688,6 +2699,13 @@ will be the maximum length that any macvlan interface has requested.
498081
 When listing device parameters both the bcqueuelen parameter
498081
 as well as the actual used bcqueuelen are listed to better help
498081
 the user understand the setting.
498081
+
498081
+.BI bclim " LIMIT "
498081
+- Set the threshold for broadcast queueing.
498081
+.IR LIMIT " must be a 32-bit integer."
498081
+Setting this to -1 disables broadcast queueing altogether.  Otherwise
498081
+a multicast address will be queued as broadcast if the number of devices
498081
+using it is greater than the given value.
498081
 .in -8
498081
 
498081
 .TP
498081
-- 
498081
2.40.1
498081