diff --git a/home/nipa/nipa_out/980305/ynl/old-code/devlink-user.c b/home/nipa/nipa_out/980305/ynl/new-code/devlink-user.c index 2bd563f9fa1b..049275b7624e 100644 --- a/home/nipa/nipa_out/980305/ynl/old-code/devlink-user.c +++ b/home/nipa/nipa_out/980305/ynl/new-code/devlink-user.c @@ -326,6 +326,7 @@ static const char * const devlink_var_attr_type_strmap[] = { [6] = "flag", [10] = "nul-string", [11] = "binary", + [129] = "u32-array", }; const char *devlink_var_attr_type_str(enum devlink_var_attr_type value) @@ -5170,6 +5171,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); } @@ -5177,6 +5179,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); } @@ -5218,6 +5221,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->_len.param_name = len; + dst->param_name = malloc(len + 1); + memcpy(dst->param_name, ynl_attr_get_str(attr), len); + dst->param_name[len] = 0; } } @@ -5244,6 +5258,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->_len.param_name) + ynl_attr_put_str(nlh, DEVLINK_ATTR_PARAM_NAME, req->param_name); rsp = calloc(1, sizeof(*rsp)); yrs.yarg.data = rsp; @@ -5262,6 +5278,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; @@ -5272,12 +5296,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; @@ -5291,6 +5317,15 @@ 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; + ys->req_hdr_len = ys->family->hdr_len; + + if (req->_len.bus_name) + ynl_attr_put_str(nlh, DEVLINK_ATTR_BUS_NAME, req->bus_name); + if (req->_len.dev_name) + 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) @@ -5309,6 +5344,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); } @@ -5329,6 +5365,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->_len.param_name) + 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/980305/ynl/old-code/devlink-user.h b/home/nipa/nipa_out/980305/ynl/new-code/devlink-user.h index fc02563586d9..7da584d45d03 100644 --- a/home/nipa/nipa_out/980305/ynl/old-code/devlink-user.h +++ b/home/nipa/nipa_out/980305/ynl/new-code/devlink-user.h @@ -3336,11 +3336,13 @@ struct devlink_port_param_get_req { struct { __u32 bus_name; __u32 dev_name; + __u32 param_name; } _len; char *bus_name; char *dev_name; __u32 port_index; + char *param_name; }; static inline struct devlink_port_param_get_req * @@ -3377,6 +3379,16 @@ 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->_len.param_name = strlen(param_name); + req->param_name = malloc(req->_len.param_name + 1); + memcpy(req->param_name, param_name, req->_len.param_name); + req->param_name[req->_len.param_name] = 0; +} struct devlink_port_param_get_rsp { struct { @@ -3385,11 +3397,13 @@ struct devlink_port_param_get_rsp { struct { __u32 bus_name; __u32 dev_name; + __u32 param_name; } _len; 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); @@ -3402,6 +3416,56 @@ 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 port_index:1; + } _present; + struct { + __u32 bus_name; + __u32 dev_name; + } _len; + + 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->_len.bus_name = strlen(bus_name); + req->bus_name = malloc(req->_len.bus_name + 1); + memcpy(req->bus_name, bus_name, req->_len.bus_name); + req->bus_name[req->_len.bus_name] = 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->_len.dev_name = strlen(dev_name); + req->dev_name = malloc(req->_len.dev_name + 1); + memcpy(req->dev_name, dev_name, req->_len.dev_name); + req->dev_name[req->_len.dev_name] = 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))); @@ -3410,22 +3474,29 @@ 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 */ struct devlink_port_param_set_req { struct { __u32 port_index:1; + __u32 param_type:1; + __u32 param_value_cmode:1; } _present; struct { __u32 bus_name; __u32 dev_name; + __u32 param_name; } _len; 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 * @@ -3462,6 +3533,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->_len.param_name = strlen(param_name); + req->param_name = malloc(req->_len.param_name + 1); + memcpy(req->param_name, param_name, req->_len.param_name); + req->param_name[req->_len.param_name] = 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.