devlink: Fix cmd_dev_param_set() to check configuration mode
This patch is fixing a bug, when param set user command includes
configuration mode which is not supported, the tool may not respond
with error if the requested value is 0. In such case
cmd_dev_param_set_cb() won't find the requested configuration mode and
returns ctx->value as initialized (equal 0). Then cmd_dev_param_set()
may find that requested value equals current value and returns success.
Fixing the bug by adding a flag cmode_found which is set only if
cmd_dev_param_set_cb() finds the requested configuration mode.
Fixes: 13925ae9eb ("devlink: Add param command support")
Signed-off-by: Moshe Shemesh <moshe@nvidia.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
This commit is contained in:
parent
7a8b7573a4
commit
047e9ae516
|
|
@ -3036,6 +3036,7 @@ static int cmd_dev_param_show_cb(const struct nlmsghdr *nlh, void *data)
|
||||||
struct param_ctx {
|
struct param_ctx {
|
||||||
struct dl *dl;
|
struct dl *dl;
|
||||||
int nla_type;
|
int nla_type;
|
||||||
|
bool cmode_found;
|
||||||
union {
|
union {
|
||||||
uint8_t vu8;
|
uint8_t vu8;
|
||||||
uint16_t vu16;
|
uint16_t vu16;
|
||||||
|
|
@ -3088,6 +3089,7 @@ static int cmd_dev_param_set_cb(const struct nlmsghdr *nlh, void *data)
|
||||||
|
|
||||||
cmode = mnl_attr_get_u8(nla_value[DEVLINK_ATTR_PARAM_VALUE_CMODE]);
|
cmode = mnl_attr_get_u8(nla_value[DEVLINK_ATTR_PARAM_VALUE_CMODE]);
|
||||||
if (cmode == dl->opts.cmode) {
|
if (cmode == dl->opts.cmode) {
|
||||||
|
ctx->cmode_found = true;
|
||||||
val_attr = nla_value[DEVLINK_ATTR_PARAM_VALUE_DATA];
|
val_attr = nla_value[DEVLINK_ATTR_PARAM_VALUE_DATA];
|
||||||
switch (nla_type) {
|
switch (nla_type) {
|
||||||
case MNL_TYPE_U8:
|
case MNL_TYPE_U8:
|
||||||
|
|
@ -3140,6 +3142,10 @@ static int cmd_dev_param_set(struct dl *dl)
|
||||||
err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_dev_param_set_cb, &ctx);
|
err = mnlu_gen_socket_sndrcv(&dl->nlg, nlh, cmd_dev_param_set_cb, &ctx);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
if (!ctx.cmode_found) {
|
||||||
|
pr_err("Configuration mode not supported\n");
|
||||||
|
return -ENOTSUP;
|
||||||
|
}
|
||||||
|
|
||||||
nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_PARAM_SET,
|
nlh = mnlu_gen_socket_cmd_prepare(&dl->nlg, DEVLINK_CMD_PARAM_SET,
|
||||||
NLM_F_REQUEST | NLM_F_ACK);
|
NLM_F_REQUEST | NLM_F_ACK);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue