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 for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250228021837.880041-10-saeed@kernel.org>
Date: Thu, 27 Feb 2025 18:18:36 -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 09/10] devlink: helper function to parse param vlaue attributes into dl_param

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

Centralized location to parse different types of param values.
This is useful for upcoming new type of parameters support to be added
to dl_param related functions.

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

diff --git a/devlink/devlink.c b/devlink/devlink.c
index 3ecf8d9a..2ad15b45 100644
--- a/devlink/devlink.c
+++ b/devlink/devlink.c
@@ -3773,6 +3773,40 @@ static int dl_param_mnl_put(struct nlmsghdr *nlh, struct dl_param *param)
 	return 0;
 }
 
+/* dl_param_val_attr_parse: parse the value attribute and store the value
+ * in the dl_param struct
+ * @data_attr: value data attribute
+ * @nla_type: type of the value attribute
+ * @param: dl_param struct to store the value
+ */
+static int
+dl_param_val_attr_parse(struct nlattr *data_attr,
+			enum devlink_dyn_attr_type type,
+			struct dl_param *param)
+{
+	switch (type) {
+	case DEVLINK_DYN_ATTR_TYPE_U8:
+		param->value.vu8 = mnl_attr_get_u8(data_attr);
+		break;
+	case DEVLINK_DYN_ATTR_TYPE_U16:
+		param->value.vu16 = mnl_attr_get_u16(data_attr);
+		break;
+	case DEVLINK_DYN_ATTR_TYPE_U32:
+		param->value.vu32 = mnl_attr_get_u32(data_attr);
+		break;
+	case DEVLINK_DYN_ATTR_TYPE_STRING:
+		param->value.vstr = mnl_attr_get_str(data_attr);
+		break;
+	case DEVLINK_DYN_ATTR_TYPE_FLAG:
+		param->value.vbool = data_attr ? true : false;
+		break;
+	default:
+		pr_err("Value type(%d) not supported\n", 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);
@@ -3805,7 +3839,7 @@ static int cmd_param_set_cb(const struct nlmsghdr *nlh, void *data)
 	mnl_attr_for_each_nested(param_value_attr,
 				 nla_param[DEVLINK_ATTR_PARAM_VALUES_LIST]) {
 		struct nlattr *nla_value[DEVLINK_ATTR_MAX + 1] = {};
-		struct nlattr *val_attr;
+		struct nlattr *data_attr;
 
 		err = mnl_attr_parse_nested(param_value_attr,
 					    attr_cb, nla_value);
@@ -3818,30 +3852,14 @@ static int cmd_param_set_cb(const struct nlmsghdr *nlh, void *data)
 			return MNL_CB_ERROR;
 
 		cmode = mnl_attr_get_u8(nla_value[DEVLINK_ATTR_PARAM_VALUE_CMODE]);
-		if (cmode == dl->opts.cmode) {
-			param->cmode_found = true;
-			val_attr = nla_value[DEVLINK_ATTR_PARAM_VALUE_DATA];
-			switch (type) {
-			case DEVLINK_DYN_ATTR_TYPE_U8:
-				param->value.vu8 = mnl_attr_get_u8(val_attr);
-				break;
-			case DEVLINK_DYN_ATTR_TYPE_U16:
-				param->value.vu16 = mnl_attr_get_u16(val_attr);
-				break;
-			case DEVLINK_DYN_ATTR_TYPE_U32:
-				param->value.vu32 = mnl_attr_get_u32(val_attr);
-				break;
-			case DEVLINK_DYN_ATTR_TYPE_STRING:
-				param->value.vstr = mnl_attr_get_str(val_attr);
-				break;
-			case DEVLINK_DYN_ATTR_TYPE_FLAG:
-				param->value.vbool = val_attr ? true : false;
-				break;
-			default:
-				break;
-			}
-			break;
-		}
+		if (cmode != dl->opts.cmode)
+			continue;
+
+		param->cmode_found = true;
+		data_attr = nla_value[DEVLINK_ATTR_PARAM_VALUE_DATA];
+		if (dl_param_val_attr_parse(data_attr, type, param))
+			return MNL_CB_ERROR;
+		break;
 	}
 	param->type = type;
 	return MNL_CB_OK;
-- 
2.48.1


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ