mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
devlink: generate the port function policy from the spec
devlink has a one huge root attribute set for the whole family, we haven't taken the time to properly define the sub-sets for each command. Do it for port-set so that we can drop the hand written policy used by devlink_port_function_set(). We need this subsetting because within the DEVLINK_ATTR_PORT_FUNCTION nest DEVLINK_PORT_FN_ATTR_OPSTATE and DEVLINK_PORT_FN_ATTR_DEVLINK are output-only so we have to filter them out of the input set. Link: https://patch.msgid.link/20260915161341.1053476-6-kuba@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
4ced66fc97
commit
3ec610a6bb
|
|
@ -1001,6 +1001,41 @@ attribute-sets:
|
|||
name: max-io-eqs
|
||||
type: u32
|
||||
|
||||
-
|
||||
name: dl-port-function-set
|
||||
subset-of: dl-port-function
|
||||
doc: |
|
||||
Port function attributes that can be configured; opstate and the
|
||||
devlink handle are read-only.
|
||||
attributes:
|
||||
-
|
||||
name: hw-addr
|
||||
-
|
||||
name: state
|
||||
-
|
||||
name: caps
|
||||
-
|
||||
name: max-io-eqs
|
||||
|
||||
-
|
||||
name: dl-port-set
|
||||
subset-of: devlink
|
||||
doc: Attributes accepted by the port-set request.
|
||||
attributes:
|
||||
-
|
||||
name: bus-name
|
||||
-
|
||||
name: dev-name
|
||||
-
|
||||
name: index
|
||||
-
|
||||
name: port-index
|
||||
-
|
||||
name: port-type
|
||||
-
|
||||
name: port-function
|
||||
nested-attributes: dl-port-function-set
|
||||
|
||||
-
|
||||
name: dl-dpipe-tables
|
||||
subset-of: devlink
|
||||
|
|
@ -1429,7 +1464,7 @@ operations:
|
|||
-
|
||||
name: port-set
|
||||
doc: Set devlink port instances.
|
||||
attribute-set: devlink
|
||||
attribute-set: dl-port-set
|
||||
dont-validate: [strict]
|
||||
flags: [admin-perm]
|
||||
do:
|
||||
|
|
|
|||
|
|
@ -46,25 +46,16 @@ devlink_attr_param_type_validate(const struct nlattr *attr,
|
|||
}
|
||||
|
||||
/* Common nested types */
|
||||
const struct nla_policy devlink_dl_nested_devlink_nl_policy[DEVLINK_ATTR_INDEX + 1] = {
|
||||
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
|
||||
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
|
||||
[DEVLINK_ATTR_INDEX] = NLA_POLICY_FULL_RANGE(NLA_UINT, &devlink_attr_index_range),
|
||||
[DEVLINK_ATTR_NETNS_ID] = { .type = NLA_U32, },
|
||||
};
|
||||
|
||||
const struct nla_policy devlink_dl_parent_dev_nl_policy[DEVLINK_ATTR_INDEX + 1] = {
|
||||
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
|
||||
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
|
||||
[DEVLINK_ATTR_INDEX] = NLA_POLICY_FULL_RANGE(NLA_UINT, &devlink_attr_index_range),
|
||||
};
|
||||
|
||||
const struct nla_policy devlink_dl_port_function_nl_policy[DEVLINK_PORT_FN_ATTR_MAX_IO_EQS + 1] = {
|
||||
const struct nla_policy devlink_dl_port_function_set_nl_policy[DEVLINK_PORT_FN_ATTR_MAX_IO_EQS + 1] = {
|
||||
[DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR] = { .type = NLA_BINARY, },
|
||||
[DEVLINK_PORT_FN_ATTR_STATE] = NLA_POLICY_MAX(NLA_U8, 1),
|
||||
[DEVLINK_PORT_FN_ATTR_OPSTATE] = NLA_POLICY_MAX(NLA_U8, 1),
|
||||
[DEVLINK_PORT_FN_ATTR_CAPS] = NLA_POLICY_BITFIELD32(15),
|
||||
[DEVLINK_PORT_FN_ATTR_DEVLINK] = NLA_POLICY_NESTED(devlink_dl_nested_devlink_nl_policy),
|
||||
[DEVLINK_PORT_FN_ATTR_MAX_IO_EQS] = { .type = NLA_U32, },
|
||||
};
|
||||
|
||||
|
|
@ -106,7 +97,7 @@ static const struct nla_policy devlink_port_set_nl_policy[DEVLINK_ATTR_INDEX + 1
|
|||
[DEVLINK_ATTR_INDEX] = NLA_POLICY_FULL_RANGE(NLA_UINT, &devlink_attr_index_range),
|
||||
[DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
|
||||
[DEVLINK_ATTR_PORT_TYPE] = NLA_POLICY_MAX(NLA_U16, 3),
|
||||
[DEVLINK_ATTR_PORT_FUNCTION] = NLA_POLICY_NESTED(devlink_dl_port_function_nl_policy),
|
||||
[DEVLINK_ATTR_PORT_FUNCTION] = NLA_POLICY_NESTED(devlink_dl_port_function_set_nl_policy),
|
||||
};
|
||||
|
||||
/* DEVLINK_CMD_PORT_NEW - do */
|
||||
|
|
|
|||
|
|
@ -13,9 +13,8 @@
|
|||
#include <uapi/linux/devlink.h>
|
||||
|
||||
/* Common nested types */
|
||||
extern const struct nla_policy devlink_dl_nested_devlink_nl_policy[DEVLINK_ATTR_INDEX + 1];
|
||||
extern const struct nla_policy devlink_dl_parent_dev_nl_policy[DEVLINK_ATTR_INDEX + 1];
|
||||
extern const struct nla_policy devlink_dl_port_function_nl_policy[DEVLINK_PORT_FN_ATTR_MAX_IO_EQS + 1];
|
||||
extern const struct nla_policy devlink_dl_port_function_set_nl_policy[DEVLINK_PORT_FN_ATTR_MAX_IO_EQS + 1];
|
||||
extern const struct nla_policy devlink_dl_rate_tc_bws_nl_policy[DEVLINK_RATE_TC_ATTR_BW + 1];
|
||||
extern const struct nla_policy devlink_dl_selftest_id_nl_policy[DEVLINK_ATTR_SELFTEST_ID_FLASH + 1];
|
||||
|
||||
|
|
|
|||
|
|
@ -6,19 +6,6 @@
|
|||
|
||||
#include "devl_internal.h"
|
||||
|
||||
#define DEVLINK_PORT_FN_CAPS_VALID_MASK \
|
||||
(_BITUL(__DEVLINK_PORT_FN_ATTR_CAPS_MAX) - 1)
|
||||
|
||||
static const struct nla_policy devlink_function_nl_policy[DEVLINK_PORT_FUNCTION_ATTR_MAX + 1] = {
|
||||
[DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR] = { .type = NLA_BINARY },
|
||||
[DEVLINK_PORT_FN_ATTR_STATE] =
|
||||
NLA_POLICY_RANGE(NLA_U8, DEVLINK_PORT_FN_STATE_INACTIVE,
|
||||
DEVLINK_PORT_FN_STATE_ACTIVE),
|
||||
[DEVLINK_PORT_FN_ATTR_CAPS] =
|
||||
NLA_POLICY_BITFIELD32(DEVLINK_PORT_FN_CAPS_VALID_MASK),
|
||||
[DEVLINK_PORT_FN_ATTR_MAX_IO_EQS] = { .type = NLA_U32 },
|
||||
};
|
||||
|
||||
#define ASSERT_DEVLINK_PORT_REGISTERED(devlink_port) \
|
||||
WARN_ON_ONCE(!(devlink_port)->registered)
|
||||
#define ASSERT_DEVLINK_PORT_NOT_REGISTERED(devlink_port) \
|
||||
|
|
@ -782,11 +769,11 @@ static int devlink_port_function_set(struct devlink_port *port,
|
|||
const struct nlattr *attr,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct nlattr *tb[DEVLINK_PORT_FUNCTION_ATTR_MAX + 1];
|
||||
struct nlattr *tb[ARRAY_SIZE(devlink_dl_port_function_set_nl_policy)];
|
||||
int err;
|
||||
|
||||
err = nla_parse_nested(tb, DEVLINK_PORT_FUNCTION_ATTR_MAX, attr,
|
||||
devlink_function_nl_policy, extack);
|
||||
err = nla_parse_nested(tb, ARRAY_SIZE(tb) - 1, attr,
|
||||
devlink_dl_port_function_set_nl_policy, extack);
|
||||
if (err < 0) {
|
||||
NL_SET_ERR_MSG(extack, "Fail to parse port function attributes");
|
||||
return err;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user