diff --git a/home/nipa/nipa_out/957211/ynl/old-code/devlink-user.c b/home/nipa/nipa_out/957211/ynl/new-code/devlink-user.c index 1b1a19449133..1bcf60724ad9 100644 --- a/home/nipa/nipa_out/957211/ynl/old-code/devlink-user.c +++ b/home/nipa/nipa_out/957211/ynl/new-code/devlink-user.c @@ -317,6 +317,24 @@ const char *devlink_trap_type_str(enum devlink_trap_type value) return devlink_trap_type_strmap[value]; } +static const char * const devlink_var_attr_type_strmap[] = { + [1] = "u8", + [2] = "u16", + [3] = "u32", + [4] = "u64", + [5] = "string", + [6] = "flag", + [10] = "nul_string", + [11] = "binary", +}; + +const char *devlink_var_attr_type_str(enum devlink_var_attr_type value) +{ + if (value < 0 || value >= (int)YNL_ARRAY_SIZE(devlink_var_attr_type_strmap)) + return NULL; + return devlink_var_attr_type_strmap[value]; +} + /* Policies */ const struct ynl_policy_attr devlink_dl_dpipe_match_policy[DEVLINK_ATTR_MAX + 1] = { [DEVLINK_ATTR_DPIPE_MATCH_TYPE] = { .name = "dpipe-match-type", .type = YNL_PT_U32, }, @@ -5082,6 +5100,7 @@ void devlink_port_param_get_req_free(struct devlink_port_param_get_req *req) { free(req->bus_name); free(req->dev_name); + free(req->param_name); free(req); } @@ -5089,6 +5108,7 @@ void devlink_port_param_get_rsp_free(struct devlink_port_param_get_rsp *rsp) { free(rsp->bus_name); free(rsp->dev_name); + free(rsp->param_name); free(rsp); } @@ -5130,6 +5150,17 @@ int devlink_port_param_get_rsp_parse(const struct nlmsghdr *nlh, return YNL_PARSE_CB_ERROR; dst->_present.port_index = 1; dst->port_index = ynl_attr_get_u32(attr); + } else if (type == DEVLINK_ATTR_PARAM_NAME) { + unsigned int len; + + if (ynl_attr_validate(yarg, attr)) + return YNL_PARSE_CB_ERROR; + + len = strnlen(ynl_attr_get_str(attr), ynl_attr_data_len(attr)); + dst->_present.param_name_len = len; + dst->param_name = malloc(len + 1); + memcpy(dst->param_name, ynl_attr_get_str(attr), len); + dst->param_name[len] = 0; } } @@ -5155,6 +5186,8 @@ devlink_port_param_get(struct ynl_sock *ys, ynl_attr_put_str(nlh, DEVLINK_ATTR_DEV_NAME, req->dev_name); if (req->_present.port_index) ynl_attr_put_u32(nlh, DEVLINK_ATTR_PORT_INDEX, req->port_index); + if (req->_present.param_name_len) + ynl_attr_put_str(nlh, DEVLINK_ATTR_PARAM_NAME, req->param_name); rsp = calloc(1, sizeof(*rsp)); yrs.yarg.data = rsp; @@ -5173,6 +5206,14 @@ devlink_port_param_get(struct ynl_sock *ys, } /* DEVLINK_CMD_PORT_PARAM_GET - dump */ +void +devlink_port_param_get_req_dump_free(struct devlink_port_param_get_req_dump *req) +{ + free(req->bus_name); + free(req->dev_name); + free(req); +} + void devlink_port_param_get_list_free(struct devlink_port_param_get_list *rsp) { struct devlink_port_param_get_list *next = rsp; @@ -5183,12 +5224,14 @@ void devlink_port_param_get_list_free(struct devlink_port_param_get_list *rsp) free(rsp->obj.bus_name); free(rsp->obj.dev_name); + free(rsp->obj.param_name); free(rsp); } } struct devlink_port_param_get_list * -devlink_port_param_get_dump(struct ynl_sock *ys) +devlink_port_param_get_dump(struct ynl_sock *ys, + struct devlink_port_param_get_req_dump *req) { struct ynl_dump_state yds = {}; struct nlmsghdr *nlh; @@ -5202,6 +5245,14 @@ devlink_port_param_get_dump(struct ynl_sock *ys) yds.rsp_cmd = DEVLINK_CMD_PORT_PARAM_GET; nlh = ynl_gemsg_start_dump(ys, ys->family_id, DEVLINK_CMD_PORT_PARAM_GET, 1); + ys->req_policy = &devlink_nest; + + if (req->_present.bus_name_len) + ynl_attr_put_str(nlh, DEVLINK_ATTR_BUS_NAME, req->bus_name); + if (req->_present.dev_name_len) + ynl_attr_put_str(nlh, DEVLINK_ATTR_DEV_NAME, req->dev_name); + if (req->_present.port_index) + ynl_attr_put_u32(nlh, DEVLINK_ATTR_PORT_INDEX, req->port_index); err = ynl_exec_dump(ys, nlh, &yds); if (err < 0) @@ -5220,6 +5271,7 @@ void devlink_port_param_set_req_free(struct devlink_port_param_set_req *req) { free(req->bus_name); free(req->dev_name); + free(req->param_name); free(req); } @@ -5239,6 +5291,12 @@ int devlink_port_param_set(struct ynl_sock *ys, ynl_attr_put_str(nlh, DEVLINK_ATTR_DEV_NAME, req->dev_name); if (req->_present.port_index) ynl_attr_put_u32(nlh, DEVLINK_ATTR_PORT_INDEX, req->port_index); + if (req->_present.param_name_len) + ynl_attr_put_str(nlh, DEVLINK_ATTR_PARAM_NAME, req->param_name); + if (req->_present.param_type) + ynl_attr_put_u8(nlh, DEVLINK_ATTR_PARAM_TYPE, req->param_type); + if (req->_present.param_value_cmode) + ynl_attr_put_u8(nlh, DEVLINK_ATTR_PARAM_VALUE_CMODE, req->param_value_cmode); err = ynl_exec(ys, nlh, &yrs); if (err < 0) diff --git a/home/nipa/nipa_out/957211/ynl/old-code/devlink-user.h b/home/nipa/nipa_out/957211/ynl/new-code/devlink-user.h index de00d71329c6..6c4ef98d1cd1 100644 --- a/home/nipa/nipa_out/957211/ynl/old-code/devlink-user.h +++ b/home/nipa/nipa_out/957211/ynl/new-code/devlink-user.h @@ -44,6 +44,7 @@ const char *devlink_param_cmode_str(enum devlink_param_cmode value); const char *devlink_flash_overwrite_str(enum devlink_flash_overwrite value); const char *devlink_trap_action_str(enum devlink_trap_action value); const char *devlink_trap_type_str(enum devlink_trap_type value); +const char *devlink_var_attr_type_str(enum devlink_var_attr_type value); /* Common nested types */ struct devlink_dl_dpipe_match { @@ -154,7 +155,7 @@ struct devlink_dl_param { } _present; char *param_name; - __u8 param_type; + enum devlink_var_attr_type param_type; }; struct devlink_dl_region_snapshot { @@ -2693,7 +2694,7 @@ struct devlink_param_set_req { char *bus_name; char *dev_name; char *param_name; - __u8 param_type; + enum devlink_var_attr_type param_type; enum devlink_param_cmode param_value_cmode; }; @@ -2735,7 +2736,7 @@ devlink_param_set_req_set_param_name(struct devlink_param_set_req *req, } static inline void devlink_param_set_req_set_param_type(struct devlink_param_set_req *req, - __u8 param_type) + enum devlink_var_attr_type param_type) { req->_present.param_type = 1; req->param_type = param_type; @@ -3178,11 +3179,13 @@ struct devlink_port_param_get_req { __u32 bus_name_len; __u32 dev_name_len; __u32 port_index:1; + __u32 param_name_len; } _present; char *bus_name; char *dev_name; __u32 port_index; + char *param_name; }; static inline struct devlink_port_param_get_req * @@ -3219,17 +3222,29 @@ devlink_port_param_get_req_set_port_index(struct devlink_port_param_get_req *req req->_present.port_index = 1; req->port_index = port_index; } +static inline void +devlink_port_param_get_req_set_param_name(struct devlink_port_param_get_req *req, + const char *param_name) +{ + free(req->param_name); + req->_present.param_name_len = strlen(param_name); + req->param_name = malloc(req->_present.param_name_len + 1); + memcpy(req->param_name, param_name, req->_present.param_name_len); + req->param_name[req->_present.param_name_len] = 0; +} struct devlink_port_param_get_rsp { struct { __u32 bus_name_len; __u32 dev_name_len; __u32 port_index:1; + __u32 param_name_len; } _present; char *bus_name; char *dev_name; __u32 port_index; + char *param_name; }; void devlink_port_param_get_rsp_free(struct devlink_port_param_get_rsp *rsp); @@ -3242,6 +3257,54 @@ devlink_port_param_get(struct ynl_sock *ys, struct devlink_port_param_get_req *req); /* DEVLINK_CMD_PORT_PARAM_GET - dump */ +struct devlink_port_param_get_req_dump { + struct { + __u32 bus_name_len; + __u32 dev_name_len; + __u32 port_index:1; + } _present; + + char *bus_name; + char *dev_name; + __u32 port_index; +}; + +static inline struct devlink_port_param_get_req_dump * +devlink_port_param_get_req_dump_alloc(void) +{ + return calloc(1, sizeof(struct devlink_port_param_get_req_dump)); +} +void +devlink_port_param_get_req_dump_free(struct devlink_port_param_get_req_dump *req); + +static inline void +devlink_port_param_get_req_dump_set_bus_name(struct devlink_port_param_get_req_dump *req, + const char *bus_name) +{ + free(req->bus_name); + req->_present.bus_name_len = strlen(bus_name); + req->bus_name = malloc(req->_present.bus_name_len + 1); + memcpy(req->bus_name, bus_name, req->_present.bus_name_len); + req->bus_name[req->_present.bus_name_len] = 0; +} +static inline void +devlink_port_param_get_req_dump_set_dev_name(struct devlink_port_param_get_req_dump *req, + const char *dev_name) +{ + free(req->dev_name); + req->_present.dev_name_len = strlen(dev_name); + req->dev_name = malloc(req->_present.dev_name_len + 1); + memcpy(req->dev_name, dev_name, req->_present.dev_name_len); + req->dev_name[req->_present.dev_name_len] = 0; +} +static inline void +devlink_port_param_get_req_dump_set_port_index(struct devlink_port_param_get_req_dump *req, + __u32 port_index) +{ + req->_present.port_index = 1; + req->port_index = port_index; +} + struct devlink_port_param_get_list { struct devlink_port_param_get_list *next; struct devlink_port_param_get_rsp obj __attribute__((aligned(8))); @@ -3250,7 +3313,8 @@ struct devlink_port_param_get_list { void devlink_port_param_get_list_free(struct devlink_port_param_get_list *rsp); struct devlink_port_param_get_list * -devlink_port_param_get_dump(struct ynl_sock *ys); +devlink_port_param_get_dump(struct ynl_sock *ys, + struct devlink_port_param_get_req_dump *req); /* ============== DEVLINK_CMD_PORT_PARAM_SET ============== */ /* DEVLINK_CMD_PORT_PARAM_SET - do */ @@ -3259,11 +3323,17 @@ struct devlink_port_param_set_req { __u32 bus_name_len; __u32 dev_name_len; __u32 port_index:1; + __u32 param_name_len; + __u32 param_type:1; + __u32 param_value_cmode:1; } _present; char *bus_name; char *dev_name; __u32 port_index; + char *param_name; + enum devlink_var_attr_type param_type; + enum devlink_param_cmode param_value_cmode; }; static inline struct devlink_port_param_set_req * @@ -3300,6 +3370,30 @@ devlink_port_param_set_req_set_port_index(struct devlink_port_param_set_req *req req->_present.port_index = 1; req->port_index = port_index; } +static inline void +devlink_port_param_set_req_set_param_name(struct devlink_port_param_set_req *req, + const char *param_name) +{ + free(req->param_name); + req->_present.param_name_len = strlen(param_name); + req->param_name = malloc(req->_present.param_name_len + 1); + memcpy(req->param_name, param_name, req->_present.param_name_len); + req->param_name[req->_present.param_name_len] = 0; +} +static inline void +devlink_port_param_set_req_set_param_type(struct devlink_port_param_set_req *req, + enum devlink_var_attr_type param_type) +{ + req->_present.param_type = 1; + req->param_type = param_type; +} +static inline void +devlink_port_param_set_req_set_param_value_cmode(struct devlink_port_param_set_req *req, + enum devlink_param_cmode param_value_cmode) +{ + req->_present.param_value_cmode = 1; + req->param_value_cmode = param_value_cmode; +} /* * Set port param instances.