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>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250228021837.880041-9-saeed@kernel.org>
Date: Thu, 27 Feb 2025 18:18:35 -0800
From: Saeed Mahameed <saeed@...nel.org>
To: stephen@...workplumber.org,
	dsahern@...il.com,
	Jiri Pirko <jiri@...dia.com>,
	jiri@...nulli.us
Cc: netdev@...r.kernel.org,
	Saeed Mahameed <saeedm@...dia.com>
Subject: [PATCH iproute2 08/10] devlink: helper function to put param value mnl attributes from dl_params

From: Saeed Mahameed <saeedm@...dia.com>

Introduce a helper function that takes a dl_param and calls the type
corresponding mnl_attr_put_<type>() equivalent to populate the nlmmsg
with the parameter value.

Signed-off-by: Saeed Mahameed <saeedm@...dia.com>
---
 devlink/devlink.c | 88 +++++++++++++++++++++--------------------------
 1 file changed, 40 insertions(+), 48 deletions(-)

diff --git a/devlink/devlink.c b/devlink/devlink.c
index 938eb3fb..3ecf8d9a 100644
--- a/devlink/devlink.c
+++ b/devlink/devlink.c
@@ -3741,6 +3741,38 @@ static int dl_param_cmp(struct dl_param *p1, struct dl_param *p2)
 	return 0;
 }
 
+/* dl_param_mnl_put: put the value in the netlink message
+ * @nlh: netlink message
+ * @param: dl_param struct containing the value
+ * Returns: 0 on success, -errno on failure
+ */
+static int dl_param_mnl_put(struct nlmsghdr *nlh, struct dl_param *param)
+{
+	mnl_attr_put_u8(nlh, DEVLINK_ATTR_PARAM_TYPE, param->type);
+	switch (param->type) {
+	case DEVLINK_DYN_ATTR_TYPE_U8:
+		mnl_attr_put_u8(nlh, DEVLINK_ATTR_PARAM_VALUE_DATA, param->value.vu8);
+		break;
+	case DEVLINK_DYN_ATTR_TYPE_U16:
+		mnl_attr_put_u16(nlh, DEVLINK_ATTR_PARAM_VALUE_DATA, param->value.vu16);
+		break;
+	case DEVLINK_DYN_ATTR_TYPE_U32:
+		mnl_attr_put_u32(nlh, DEVLINK_ATTR_PARAM_VALUE_DATA, param->value.vu32);
+		break;
+	case DEVLINK_DYN_ATTR_TYPE_FLAG:
+		if (param->value.vbool)
+			mnl_attr_put(nlh, DEVLINK_ATTR_PARAM_VALUE_DATA, 0, NULL);
+		break;
+	case DEVLINK_DYN_ATTR_TYPE_STRING:
+		mnl_attr_put_strz(nlh, DEVLINK_ATTR_PARAM_VALUE_DATA, param->value.vstr);
+		break;
+	default:
+		pr_err("Value type(%d) not supported\n", param->type);
+		return -ENOTSUP;
+	}
+	return 0;
+}
+
 static int cmd_param_set_cb(const struct nlmsghdr *nlh, void *data)
 {
 	struct genlmsghdr *genl = mnl_nlmsg_get_payload(nlh);
@@ -3857,30 +3889,10 @@ static int cmd_dev_param_set(struct dl *dl)
 	if (!err) /* Value is the same */
 		return 0;
 
-	mnl_attr_put_u8(nlh, DEVLINK_ATTR_PARAM_TYPE, kparam.type);
-	switch (kparam.type) {
-	case DEVLINK_DYN_ATTR_TYPE_U8:
-		mnl_attr_put_u8(nlh, DEVLINK_ATTR_PARAM_VALUE_DATA, uparam.value.vu8);
-		break;
-	case DEVLINK_DYN_ATTR_TYPE_U16:
-		mnl_attr_put_u16(nlh, DEVLINK_ATTR_PARAM_VALUE_DATA, uparam.value.vu16);
-		break;
-	case DEVLINK_DYN_ATTR_TYPE_U32:
-		mnl_attr_put_u32(nlh, DEVLINK_ATTR_PARAM_VALUE_DATA, uparam.value.vu32);
-		break;
-	case DEVLINK_DYN_ATTR_TYPE_FLAG:
-		if (uparam.value.vbool)
-			mnl_attr_put(nlh, DEVLINK_ATTR_PARAM_VALUE_DATA,
-				     0, NULL);
-		break;
-	case DEVLINK_DYN_ATTR_TYPE_STRING:
-		mnl_attr_put_strz(nlh, DEVLINK_ATTR_PARAM_VALUE_DATA,
-				  uparam.value.vstr);
-		break;
-	default:
-		printf("Value type not supported\n");
-		return -ENOTSUP;
-	}
+	err = dl_param_mnl_put(nlh, &uparam);
+	if (err)
+		return err;
+
 	return mnlu_gen_socket_sndrcv(&dl->nlg, nlh, NULL, NULL);
 
 err_param_value_parse:
@@ -5317,30 +5329,10 @@ static int cmd_port_param_set(struct dl *dl)
 	if (!err) /* Value is the same */
 		return 0;
 
-	mnl_attr_put_u8(nlh, DEVLINK_ATTR_PARAM_TYPE, kparam.type);
-	switch (kparam.type) {
-	case DEVLINK_DYN_ATTR_TYPE_U8:
-		mnl_attr_put_u8(nlh, DEVLINK_ATTR_PARAM_VALUE_DATA, uparam.value.vu8);
-		break;
-	case DEVLINK_DYN_ATTR_TYPE_U16:
-		mnl_attr_put_u16(nlh, DEVLINK_ATTR_PARAM_VALUE_DATA, uparam.value.vu16);
-		break;
-	case DEVLINK_DYN_ATTR_TYPE_U32:
-		mnl_attr_put_u32(nlh, DEVLINK_ATTR_PARAM_VALUE_DATA, uparam.value.vu32);
-		break;
-	case DEVLINK_DYN_ATTR_TYPE_FLAG:
-		if (uparam.value.vbool)
-			mnl_attr_put(nlh, DEVLINK_ATTR_PARAM_VALUE_DATA,
-				     0, NULL);
-		break;
-	case DEVLINK_DYN_ATTR_TYPE_STRING:
-		mnl_attr_put_strz(nlh, DEVLINK_ATTR_PARAM_VALUE_DATA,
-				  uparam.value.vstr);
-		break;
-	default:
-		printf("Value type not supported\n");
-		return -ENOTSUP;
-	}
+	err = dl_param_mnl_put(nlh, &uparam);
+	if (err)
+		return err;
+
 	return mnlu_gen_socket_sndrcv(&dl->nlg, nlh, NULL, NULL);
 
 err_param_value_parse:
-- 
2.48.1


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ