mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00

Introduce support for specifying relative bandwidth shares between traffic classes (TC) in the devlink-rate API. This new option allows users to allocate bandwidth across multiple traffic classes in a single command. This feature provides a more granular control over traffic management, especially for scenarios requiring Enhanced Transmission Selection. Users can now define a relative bandwidth share for each traffic class. For example, assigning share values of 20 to TC0 (TCP/UDP) and 80 to TC5 (RoCE) will result in TC0 receiving 20% and TC5 receiving 80% of the total bandwidth. The actual percentage each class receives depends on the ratio of its share value to the sum of all shares. Example: DEV=pci/0000:08:00.0 $ devlink port function rate add $DEV/vfs_group tx_share 10Gbit \ tx_max 50Gbit tc-bw 0:20 1:0 2:0 3:0 4:0 5:80 6:0 7:0 $ devlink port function rate set $DEV/vfs_group \ tc-bw 0:20 1:0 2:0 3:0 4:0 5:20 6:60 7:0 Example usage with ynl: ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/devlink.yaml \ --do rate-set --json '{ "bus-name": "pci", "dev-name": "0000:08:00.0", "port-index": 1, "rate-tc-bws": [ {"rate-tc-index": 0, "rate-tc-bw": 50}, {"rate-tc-index": 1, "rate-tc-bw": 50}, {"rate-tc-index": 2, "rate-tc-bw": 0}, {"rate-tc-index": 3, "rate-tc-bw": 0}, {"rate-tc-index": 4, "rate-tc-bw": 0}, {"rate-tc-index": 5, "rate-tc-bw": 0}, {"rate-tc-index": 6, "rate-tc-bw": 0}, {"rate-tc-index": 7, "rate-tc-bw": 0} ] }' ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/devlink.yaml \ --do rate-get --json '{ "bus-name": "pci", "dev-name": "0000:08:00.0", "port-index": 1 }' output for rate-get: {'bus-name': 'pci', 'dev-name': '0000:08:00.0', 'port-index': 1, 'rate-tc-bws': [{'rate-tc-bw': 50, 'rate-tc-index': 0}, {'rate-tc-bw': 50, 'rate-tc-index': 1}, {'rate-tc-bw': 0, 'rate-tc-index': 2}, {'rate-tc-bw': 0, 'rate-tc-index': 3}, {'rate-tc-bw': 0, 'rate-tc-index': 4}, {'rate-tc-bw': 0, 'rate-tc-index': 5}, {'rate-tc-bw': 0, 'rate-tc-index': 6}, {'rate-tc-bw': 0, 'rate-tc-index': 7}], 'rate-tx-max': 0, 'rate-tx-priority': 0, 'rate-tx-share': 0, 'rate-tx-weight': 0, 'rate-type': 'leaf'} Signed-off-by: Carolina Jubran <cjubran@nvidia.com> Reviewed-by: Cosmin Ratiu <cratiu@nvidia.com> Reviewed-by: Jiri Pirko <jiri@nvidia.com> Signed-off-by: Tariq Toukan <tariqt@nvidia.com> Signed-off-by: Mark Bloch <mbloch@nvidia.com> Link: https://patch.msgid.link/20250629142138.361537-3-mbloch@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
150 lines
7.7 KiB
C
150 lines
7.7 KiB
C
/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) */
|
|
/* Do not edit directly, auto-generated from: */
|
|
/* Documentation/netlink/specs/devlink.yaml */
|
|
/* YNL-GEN kernel header */
|
|
|
|
#ifndef _LINUX_DEVLINK_GEN_H
|
|
#define _LINUX_DEVLINK_GEN_H
|
|
|
|
#include <net/netlink.h>
|
|
#include <net/genetlink.h>
|
|
|
|
#include <uapi/linux/devlink.h>
|
|
|
|
/* Common nested types */
|
|
extern const struct nla_policy devlink_dl_port_function_nl_policy[DEVLINK_PORT_FN_ATTR_CAPS + 1];
|
|
extern const struct nla_policy devlink_dl_rate_tc_bws_nl_policy[DEVLINK_ATTR_RATE_TC_BW + 1];
|
|
extern const struct nla_policy devlink_dl_selftest_id_nl_policy[DEVLINK_ATTR_SELFTEST_ID_FLASH + 1];
|
|
|
|
/* Ops table for devlink */
|
|
extern const struct genl_split_ops devlink_nl_ops[74];
|
|
|
|
int devlink_nl_pre_doit(const struct genl_split_ops *ops, struct sk_buff *skb,
|
|
struct genl_info *info);
|
|
int devlink_nl_pre_doit_port(const struct genl_split_ops *ops,
|
|
struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_pre_doit_dev_lock(const struct genl_split_ops *ops,
|
|
struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_pre_doit_port_optional(const struct genl_split_ops *ops,
|
|
struct sk_buff *skb,
|
|
struct genl_info *info);
|
|
void
|
|
devlink_nl_post_doit(const struct genl_split_ops *ops, struct sk_buff *skb,
|
|
struct genl_info *info);
|
|
void
|
|
devlink_nl_post_doit_dev_lock(const struct genl_split_ops *ops,
|
|
struct sk_buff *skb, struct genl_info *info);
|
|
|
|
int devlink_nl_get_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_get_dumpit(struct sk_buff *skb, struct netlink_callback *cb);
|
|
int devlink_nl_port_get_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_port_get_dumpit(struct sk_buff *skb,
|
|
struct netlink_callback *cb);
|
|
int devlink_nl_port_set_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_port_new_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_port_del_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_port_split_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_port_unsplit_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_sb_get_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_sb_get_dumpit(struct sk_buff *skb, struct netlink_callback *cb);
|
|
int devlink_nl_sb_pool_get_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_sb_pool_get_dumpit(struct sk_buff *skb,
|
|
struct netlink_callback *cb);
|
|
int devlink_nl_sb_pool_set_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_sb_port_pool_get_doit(struct sk_buff *skb,
|
|
struct genl_info *info);
|
|
int devlink_nl_sb_port_pool_get_dumpit(struct sk_buff *skb,
|
|
struct netlink_callback *cb);
|
|
int devlink_nl_sb_port_pool_set_doit(struct sk_buff *skb,
|
|
struct genl_info *info);
|
|
int devlink_nl_sb_tc_pool_bind_get_doit(struct sk_buff *skb,
|
|
struct genl_info *info);
|
|
int devlink_nl_sb_tc_pool_bind_get_dumpit(struct sk_buff *skb,
|
|
struct netlink_callback *cb);
|
|
int devlink_nl_sb_tc_pool_bind_set_doit(struct sk_buff *skb,
|
|
struct genl_info *info);
|
|
int devlink_nl_sb_occ_snapshot_doit(struct sk_buff *skb,
|
|
struct genl_info *info);
|
|
int devlink_nl_sb_occ_max_clear_doit(struct sk_buff *skb,
|
|
struct genl_info *info);
|
|
int devlink_nl_eswitch_get_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_eswitch_set_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_dpipe_table_get_doit(struct sk_buff *skb,
|
|
struct genl_info *info);
|
|
int devlink_nl_dpipe_entries_get_doit(struct sk_buff *skb,
|
|
struct genl_info *info);
|
|
int devlink_nl_dpipe_headers_get_doit(struct sk_buff *skb,
|
|
struct genl_info *info);
|
|
int devlink_nl_dpipe_table_counters_set_doit(struct sk_buff *skb,
|
|
struct genl_info *info);
|
|
int devlink_nl_resource_set_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_resource_dump_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_reload_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_param_get_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_param_get_dumpit(struct sk_buff *skb,
|
|
struct netlink_callback *cb);
|
|
int devlink_nl_param_set_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_region_get_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_region_get_dumpit(struct sk_buff *skb,
|
|
struct netlink_callback *cb);
|
|
int devlink_nl_region_new_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_region_del_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_region_read_dumpit(struct sk_buff *skb,
|
|
struct netlink_callback *cb);
|
|
int devlink_nl_port_param_get_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_port_param_get_dumpit(struct sk_buff *skb,
|
|
struct netlink_callback *cb);
|
|
int devlink_nl_port_param_set_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_info_get_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_info_get_dumpit(struct sk_buff *skb,
|
|
struct netlink_callback *cb);
|
|
int devlink_nl_health_reporter_get_doit(struct sk_buff *skb,
|
|
struct genl_info *info);
|
|
int devlink_nl_health_reporter_get_dumpit(struct sk_buff *skb,
|
|
struct netlink_callback *cb);
|
|
int devlink_nl_health_reporter_set_doit(struct sk_buff *skb,
|
|
struct genl_info *info);
|
|
int devlink_nl_health_reporter_recover_doit(struct sk_buff *skb,
|
|
struct genl_info *info);
|
|
int devlink_nl_health_reporter_diagnose_doit(struct sk_buff *skb,
|
|
struct genl_info *info);
|
|
int devlink_nl_health_reporter_dump_get_dumpit(struct sk_buff *skb,
|
|
struct netlink_callback *cb);
|
|
int devlink_nl_health_reporter_dump_clear_doit(struct sk_buff *skb,
|
|
struct genl_info *info);
|
|
int devlink_nl_flash_update_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_trap_get_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_trap_get_dumpit(struct sk_buff *skb,
|
|
struct netlink_callback *cb);
|
|
int devlink_nl_trap_set_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_trap_group_get_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_trap_group_get_dumpit(struct sk_buff *skb,
|
|
struct netlink_callback *cb);
|
|
int devlink_nl_trap_group_set_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_trap_policer_get_doit(struct sk_buff *skb,
|
|
struct genl_info *info);
|
|
int devlink_nl_trap_policer_get_dumpit(struct sk_buff *skb,
|
|
struct netlink_callback *cb);
|
|
int devlink_nl_trap_policer_set_doit(struct sk_buff *skb,
|
|
struct genl_info *info);
|
|
int devlink_nl_health_reporter_test_doit(struct sk_buff *skb,
|
|
struct genl_info *info);
|
|
int devlink_nl_rate_get_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_rate_get_dumpit(struct sk_buff *skb,
|
|
struct netlink_callback *cb);
|
|
int devlink_nl_rate_set_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_rate_new_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_rate_del_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_linecard_get_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_linecard_get_dumpit(struct sk_buff *skb,
|
|
struct netlink_callback *cb);
|
|
int devlink_nl_linecard_set_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_selftests_get_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_selftests_get_dumpit(struct sk_buff *skb,
|
|
struct netlink_callback *cb);
|
|
int devlink_nl_selftests_run_doit(struct sk_buff *skb, struct genl_info *info);
|
|
int devlink_nl_notify_filter_set_doit(struct sk_buff *skb,
|
|
struct genl_info *info);
|
|
|
|
#endif /* _LINUX_DEVLINK_GEN_H */
|