#define DL_OPT_LINECARD_TYPE BIT(53)
#define DL_OPT_SELFTESTS BIT(54)
#define DL_OPT_PORT_FN_RATE_TX_PRIORITY BIT(55)
+#define DL_OPT_PORT_FN_RATE_TX_WEIGHT BIT(56)
struct dl_opts {
uint64_t present; /* flags of present items */
uint64_t rate_tx_share;
uint64_t rate_tx_max;
uint32_t rate_tx_priority;
+ uint32_t rate_tx_weight;
char *rate_node_name;
const char *rate_parent_node;
uint32_t linecard_index;
if (err)
return err;
o_found |= DL_OPT_PORT_FN_RATE_TX_PRIORITY;
+ } else if (dl_argv_match(dl, "tx_weight") &&
+ (o_all & DL_OPT_PORT_FN_RATE_TX_WEIGHT)) {
+ dl_arg_inc(dl);
+ err = dl_argv_uint32_t(dl, &opts->rate_tx_weight);
+ if (err)
+ return err;
+ o_found |= DL_OPT_PORT_FN_RATE_TX_WEIGHT;
} else if (dl_argv_match(dl, "parent") &&
(o_all & DL_OPT_PORT_FN_RATE_PARENT)) {
dl_arg_inc(dl);
if (opts->present & DL_OPT_PORT_FN_RATE_TX_PRIORITY)
mnl_attr_put_u32(nlh, DEVLINK_ATTR_RATE_TX_PRIORITY,
opts->rate_tx_priority);
+ if (opts->present & DL_OPT_PORT_FN_RATE_TX_WEIGHT)
+ mnl_attr_put_u32(nlh, DEVLINK_ATTR_RATE_TX_WEIGHT,
+ opts->rate_tx_weight);
if (opts->present & DL_OPT_PORT_FN_RATE_TX_MAX)
mnl_attr_put_u64(nlh, DEVLINK_ATTR_RATE_TX_MAX,
opts->rate_tx_max);
print_uint(PRINT_ANY, "tx_priority",
" tx_priority %u", priority);
}
+ if (tb[DEVLINK_ATTR_RATE_TX_WEIGHT]) {
+ uint32_t weight =
+ mnl_attr_get_u32(tb[DEVLINK_ATTR_RATE_TX_WEIGHT]);
+ if (weight)
+ print_uint(PRINT_ANY, "tx_weight",
+ " tx_weight %u", weight);
+ }
if (tb[DEVLINK_ATTR_RATE_PARENT_NODE_NAME]) {
const char *parent =
mnl_attr_get_str(tb[DEVLINK_ATTR_RATE_PARENT_NODE_NAME]);
pr_err("Usage: devlink port function rate help\n");
pr_err(" devlink port function rate show [ DEV/{ PORT_INDEX | NODE_NAME } ]\n");
pr_err(" devlink port function rate add DEV/NODE_NAME\n");
- pr_err(" [ tx_share VAL ][ tx_max VAL ][ tx_priority N ][ { parent NODE_NAME | noparent } ]\n");
+ pr_err(" [ tx_share VAL ][ tx_max VAL ][ tx_priority N ][ tx_weight N ][ { parent NODE_NAME | noparent } ]\n");
pr_err(" devlink port function rate del DEV/NODE_NAME\n");
pr_err(" devlink port function rate set DEV/{ PORT_INDEX | NODE_NAME }\n");
- pr_err(" [ tx_share VAL ][ tx_max VAL ][ tx_priority N ][ { parent NODE_NAME | noparent } ]\n\n");
+ pr_err(" [ tx_share VAL ][ tx_max VAL ][ tx_priority N ][ tx_weight N ][ { parent NODE_NAME | noparent } ]\n\n");
pr_err(" VAL - float or integer value in units of bits or bytes per second (bit|bps)\n");
- pr_err(" N - integer representing priority of the node among siblings\n");
+ pr_err(" N - integer representing priority/weight of the node among siblings\n");
pr_err(" and SI (k-, m-, g-, t-) or IEC (ki-, mi-, gi-, ti-) case-insensitive prefix.\n");
pr_err(" Bare number, means bits per second, is possible.\n\n");
pr_err(" For details refer to devlink-rate(8) man page.\n");
err = dl_argv_parse(dl, DL_OPT_PORT_FN_RATE_NODE_NAME,
DL_OPT_PORT_FN_RATE_TX_SHARE | DL_OPT_PORT_FN_RATE_TX_MAX |
- DL_OPT_PORT_FN_RATE_TX_PRIORITY);
+ DL_OPT_PORT_FN_RATE_TX_PRIORITY |
+ DL_OPT_PORT_FN_RATE_TX_WEIGHT);
if (err)
return err;
if (tb[DEVLINK_ATTR_RATE_TX_PRIORITY])
opts->rate_tx_priority =
mnl_attr_get_u32(tb[DEVLINK_ATTR_RATE_TX_PRIORITY]);
+ if (tb[DEVLINK_ATTR_RATE_TX_WEIGHT])
+ opts->rate_tx_weight =
+ mnl_attr_get_u32(tb[DEVLINK_ATTR_RATE_TX_WEIGHT]);
return MNL_CB_OK;
}
DL_OPT_PORT_FN_RATE_TX_SHARE |
DL_OPT_PORT_FN_RATE_TX_MAX |
DL_OPT_PORT_FN_RATE_TX_PRIORITY |
+ DL_OPT_PORT_FN_RATE_TX_WEIGHT |
DL_OPT_PORT_FN_RATE_PARENT);
if (err)
return err;