rte_tm_capabilities(3)
๐ฆ rte_tm_capabilities โ the manual page, part 1
okay so this is rte_tm_capabilities(3) from the Library Functions Manual, and it is literally the vibe check for your traffic manager: it's the struct that tells you what your TM can and can't do before you even try. part 1 of 2, bestie, we're going in ๐
โจ NAME โจ
rte_tm_capabilities
๐ฆ SYNOPSIS ๐ฆ
#include <rte_tm.h>
๐ง Data Fields
uint32_t n_nodes_max
uint32_t n_levels_max
int non_leaf_nodes_identical
int leaf_nodes_identical
uint32_t shaper_n_max
uint32_t shaper_private_n_max
int shaper_private_dual_rate_n_max
uint64_t shaper_private_rate_min
uint64_t shaper_private_rate_max
int shaper_private_packet_mode_supported
int shaper_private_byte_mode_supported
uint32_t shaper_shared_n_max
uint32_t shaper_shared_n_nodes_per_shaper_max
uint32_t shaper_shared_n_shapers_per_node_max
uint32_t shaper_shared_dual_rate_n_max
uint64_t shaper_shared_rate_min
uint64_t shaper_shared_rate_max
int shaper_shared_packet_mode_supported
int shaper_shared_byte_mode_supported
int shaper_pkt_length_adjust_min
int shaper_pkt_length_adjust_max
uint32_t sched_n_children_max
uint32_t sched_sp_n_priorities_max
uint32_t sched_wfq_n_children_per_group_max
uint32_t sched_wfq_n_groups_max
uint32_t sched_wfq_weight_max
int sched_wfq_packet_mode_supported
int sched_wfq_byte_mode_supported
int cman_wred_packet_mode_supported
int cman_wred_byte_mode_supported
int cman_head_drop_supported
uint32_t cman_wred_context_n_max
uint32_t cman_wred_context_private_n_max
uint32_t cman_wred_context_shared_n_max
uint32_t cman_wred_context_shared_n_nodes_per_context_max
uint32_t cman_wred_context_shared_n_contexts_per_node_max
int mark_vlan_dei_supported [RTE_COLORS]
int mark_ip_ecn_tcp_supported [RTE_COLORS]
int mark_ip_ecn_sctp_supported [RTE_COLORS]
int mark_ip_dscp_supported [RTE_COLORS]
uint64_t dynamic_update_mask
uint64_t stats_mask
๐ Detailed Description ๐
Traffic manager capabilities. that's the whole summary, no notes, it ate.
Definition at line 199 of file rte_tm.h.
๐ Field Documentation ๐
bestie this is the long part, grab a snack ๐
uint32_t n_nodes_max
The maximum number of nodes. ๐ that's it, that's the cap on how many nodes you get, periodt.
Definition at line 201 of file rte_tm.h.
uint32_t n_levels_max
Maximum number of levels โ and yes, "levels" here means the number of nodes connecting the root node with any leaf node, including the root and the leaf. so like, count the whole chain, not just the middle ๐
Definition at line 206 of file rte_tm.h.
int non_leaf_nodes_identical
When non-zero, this flag indicates that all the non-leaf nodes (with the exception of the root node) have identical capability set. so if this is nonzero, you don't have to go check every single non-leaf node one by one โ they all match. the root is the exception, she's different ๐
Definition at line 211 of file rte_tm.h.
int leaf_nodes_identical
When non-zero, this flag indicates that all the leaf nodes have identical capability set. same energy as above but for the leaves โ nonzero means they're all the same, no cap ๐
Definition at line 216 of file rte_tm.h.
uint32_t shaper_n_max
Maximum number of shapers, either private or shared. okay so in case the implementation doesn't share any resources between private and shared shapers, this is typically equal to the sum of shaper_private_n_max and shaper_shared_n_max. if this is zero, traffic shaping is not supported. zero = no shaping, so sad ๐ญ
Definition at line 224 of file rte_tm.h.
uint32_t shaper_private_n_max
Maximum number of private shapers. it tells you the max number of nodes that can concurrently have their private shaper enabled. the value of zero indicates that private shapers are not supported.
Definition at line 230 of file rte_tm.h.
int shaper_private_dual_rate_n_max
Maximum number of private shapers that support dual rate shaping. so it's the max number of nodes that can concurrently have their private shaper enabled with dual rate support. only valid when private shapers are supported. zero means dual rate shaping isn't available for private shapers. oh and heads up โ the maximum value here is shaper_private_n_max, don't get it twisted ๐
Definition at line 239 of file rte_tm.h.
uint64_t shaper_private_rate_min
Minimum committed/peak rate (bytes per second) for any private shaper. valid only when private shapers are supported. bytes per second, write that down โ๏ธ
Definition at line 244 of file rte_tm.h.
uint64_t shaper_private_rate_max
Maximum committed/peak rate (bytes per second) for any private shaper. also valid only when private shapers are supported. yes it's bytes per second again ๐ซถ
Definition at line 249 of file rte_tm.h.
int shaper_private_packet_mode_supported
Shaper private packet mode supported. when non-zero, this parameter indicates that there's at least one node that can be configured with packet mode in its private shaper. and when a shaper is configured in packet mode, the committed/peak rate you provided gets interpreted in packets per second. switching units on you, sneaky but iconic โจ
Definition at line 257 of file rte_tm.h.
int shaper_private_byte_mode_supported
Shaper private byte mode supported. when non-zero, this parameter indicates that there's at least one node that can be configured with byte mode in its private shaper. when a shaper is configured in byte mode, the committed/peak rate provided is interpreted in bytes per second. that's the normal one, the baseline, the default flavor ๐ง
Definition at line 265 of file rte_tm.h.
uint32_t shaper_shared_n_max
Maximum number of shared shapers. the value of zero indicates that shared shapers are not supported. sharing is caring but only if this isn't zero, bestie ๐
Definition at line 271 of file rte_tm.h.
uint32_t shaper_shared_n_nodes_per_shaper_max
Maximum number of nodes that can share the same shared shaper. only valid when shared shapers are supported. so like, how many friends can pile onto one shaper ๐ธ
Definition at line 276 of file rte_tm.h.
uint32_t shaper_shared_n_shapers_per_node_max
Maximum number of shared shapers a node can be part of. this parameter indicates that there's at least one node that can be configured with this many shared shapers โ which might not be true for all the nodes, so don't generalize. only valid when shared shapers are supported, and in that case it ranges from 1 to shaper_shared_n_max. ๐
Definition at line 284 of file rte_tm.h.
uint32_t shaper_shared_dual_rate_n_max
Maximum number of shared shapers that can be configured with dual rate shaping. the value of zero indicates that dual rate shaping support is not available for shared shapers. double the rate, double the drama ๐
Definition at line 290 of file rte_tm.h.
uint64_t shaper_shared_rate_min
Minimum committed/peak rate (bytes per second) for any shared shaper. only valid when shared shapers are supported. bytes per second, always bytes per second ๐
Definition at line 295 of file rte_tm.h.
uint64_t shaper_shared_rate_max
Maximum committed/peak rate (bytes per second) for any shared shaper. also only valid when shared shapers are supported. ok so min/max, you get it ๐ซถ
Definition at line 300 of file rte_tm.h.
int shaper_shared_packet_mode_supported
Shaper shared packet mode supported. when non-zero, this parameter indicates a shared shaper can be configured with packet mode. when a shared shaper is configured in packet mode, the committed/peak rate provided is interpreted in packets per second. packets, not bytes, keep up โจ
Definition at line 307 of file rte_tm.h.
int shaper_shared_byte_mode_supported
Shaper shared byte mode supported. when non-zero, this parameter indicates that a shared shaper can be configured with byte mode. when a shared shaper is configured in byte mode, the committed/peak rate provided is interpreted in bytes per second. and we're back to bytes, as it should be ๐
Definition at line 314 of file rte_tm.h.
int shaper_pkt_length_adjust_min
Minimum value allowed for packet length adjustment for any private or shared shaper. the floor, the lower bound, the "don't go below this" ๐
Definition at line 320 of file rte_tm.h.
int shaper_pkt_length_adjust_max
Maximum value allowed for packet length adjustment for any private or shared shaper. and that's the ceiling for the same thing. min and max, a matched set ๐
Definition at line 325 of file rte_tm.h.
uint32_t sched_n_children_max
Maximum number of children nodes. this parameter indicates that there's at least one non-leaf node that can be configured with this many children nodes โ which might not be true for all the non-leaf nodes, so read it carefully bestie โ๏ธ
Definition at line 332 of file rte_tm.h.
uint32_t sched_sp_n_priorities_max
Maximum number of supported priority levels. this parameter indicates that there's at least one non-leaf node that can be configured with this many priority levels for managing its children nodes, which might not be true for all the non-leaf nodes. the value of zero is invalid. and the value of 1 indicates that only priority 0 is supported, which essentially means that Strict Priority (SP) algorithm is not supported. iykyk ๐ฅ
Definition at line 342 of file rte_tm.h.
uint32_t sched_wfq_n_children_per_group_max
Maximum number of sibling nodes that can have the same priority at any given time โ i.e. the maximum size of the WFQ sibling node group. this parameter indicates there's at least one non-leaf node that meets this condition, which might not be true for all the non-leaf nodes. the value of zero is invalid. the value of 1 indicates that WFQ algorithm is not supported. and the maximum value is sched_n_children_max. bestie that's a lot of rules, but they all matter ๐
Definition at line 352 of file rte_tm.h.
uint32_t sched_wfq_n_groups_max
Maximum number of priority levels that can have more than one child node at any given time โ i.e. the maximum number of WFQ sibling node groups that have two or more members. this parameter indicates there's at least one non-leaf node that meets this condition, which might not be true for all the non-leaf nodes. the value of zero states that WFQ algorithm is not supported. the value of 1 indicates that (sched_sp_n_priorities_max - 1) priority levels have at most one child node, so there can be only one priority level with two or more sibling nodes making up a WFQ group. and the maximum value is: min(floor(sched_n_children_max / 2), sched_sp_n_priorities_max). ๐งฎ yes there's math, we love a formula โจ
Definition at line 365 of file rte_tm.h.
uint32_t sched_wfq_weight_max
Maximum WFQ weight. the value of 1 indicates that all sibling nodes with same priority have the same WFQ weight, so WFQ is reduced to FQ. and honestly? that's just FQ wearing a WFQ costume ๐
Definition at line 370 of file rte_tm.h.
int sched_wfq_packet_mode_supported
WFQ packet mode supported. when non-zero, this parameter indicates that there's at least one non-leaf node that supports packet mode for WFQ among its children. WFQ weights will be applied against packet count for scheduling children when a non-leaf node is configured appropriately. ๐
Definition at line 378 of file rte_tm.h.
int sched_wfq_byte_mode_supported
WFQ byte mode supported. when non-zero, this parameter indicates that there's at least one non-leaf node that supports byte mode for WFQ among its children. WFQ weights will be applied against bytes for scheduling children when a non-leaf node is configured appropriately. ๐ฆ
Definition at line 386 of file rte_tm.h.
int cman_wred_packet_mode_supported
WRED packet mode support. when non-zero, this parameter indicates that there's at least one leaf node that supports the WRED packet mode, which might not be true for all the leaf nodes. in packet mode, the WRED thresholds specify the queue length in packets, as opposed to bytes. ๐ฅ
Definition at line 394 of file rte_tm.h.
int cman_wred_byte_mode_supported
WRED byte mode support. when non-zero, this parameter indicates that there's at least one leaf node that supports the WRED byte mode, which might not be true for all the leaf nodes. in byte mode, the WRED thresholds specify the queue length in bytes, as opposed to packets. ๐
Definition at line 402 of file rte_tm.h.
and bestie, we're only halfway through the fields โ part 2 is coming and there's still cman_head_drop_supported, all the cman_wred_context_* fields, the mark_* arrays and the masks waiting for us ๐
int cman_head_drop_supported ๐ซง
Head drop algorithm support, bestie. When this one is non-zero, it's telling you there's at least one leaf node out there that supports the head drop algorithm โ and like, lowkey, that might not be true for all the leaf nodes. So don't assume, okay? ๐
Definition at line 408 of file rte_tm.h.
uint32_t cman_wred_context_n_max ๐ธ
Maximum number of WRED contexts, whether they're private or shared, no cap. If your implementation doesn't share any resources between private and shared WRED contexts, this is typically equal to the sum of cman_wred_context_private_n_max and cman_wred_context_shared_n_max. And a value of zero? That means WRED is simply not supported. not even a little ๐
Definition at line 417 of file rte_tm.h.
uint32_t cman_wred_context_private_n_max ๐
Maximum number of private WRED contexts. This tells you the maximum number of leaf nodes that can concurrently have their private WRED context enabled. Value of zero = private WRED contexts are not supported. periodt ๐
Definition at line 424 of file rte_tm.h.
uint32_t cman_wred_context_shared_n_max ๐ฆ
Maximum number of shared WRED contexts. And yes, zero means shared WRED contexts aren't supported. that's the whole vibe check ๐
Definition at line 429 of file rte_tm.h.
uint32_t cman_wred_context_shared_n_nodes_per_context_max ๐
Maximum number of leaf nodes that can share the very same WRED context. Only valid when shared WRED contexts are supported โ so if they aren't, this number is just sitting there doing nothing, iconic but unemployed ๐ญ
Definition at line 434 of file rte_tm.h.
uint32_t cman_wred_context_shared_n_contexts_per_node_max โจ
Maximum number of shared WRED contexts that a leaf node can be part of. This parameter indicates there's at least one leaf node that can be configured with this many shared WRED contexts โ which, again, might not be true for all the leaf nodes. Only valid when shared WRED contexts are supported, in which case it ranges from 1 to cman_wred_context_shared_n_max. bestie, that's range, not a suggestion ๐ธ
Definition at line 443 of file rte_tm.h.
int mark_vlan_dei_supported[RTE_COLORS] ๐
Support for VLAN DEI packet marking โ and it's per color, so one entry per color, no shortcuts. ๐จ
Definition at line 446 of file rte_tm.h.
int mark_ip_ecn_tcp_supported[RTE_COLORS] ๐ฅ
Support for IPv4/IPv6 ECN marking of TCP packets, per color. yes, per color. every color gets its own answer ๐
Definition at line 449 of file rte_tm.h.
int mark_ip_ecn_sctp_supported[RTE_COLORS] ๐
Support for IPv4/IPv6 ECN marking of SCTP packets, per color. SCTP girlies, this one's for y'all ๐ซถ
Definition at line 452 of file rte_tm.h.
int mark_ip_dscp_supported[RTE_COLORS] โญ
Support for IPv4/IPv6 DSCP packet marking, per color. say it with me: per color ๐
Definition at line 455 of file rte_tm.h.
uint64_t dynamic_update_mask ๐ง
Set of supported dynamic update operations. it's a bitmask moment fr fr
See also: enum rte_tm_dynamic_update_type
Definition at line 460 of file rte_tm.h.
uint64_t stats_mask ๐
Set of supported statistics counter types. mask girlies stay winning
See also: enum rte_tm_stats_type
Definition at line 465 of file rte_tm.h.
๐ซถ AUTHOR ๐ซถ
Generated automatically by Doxygen for DPDK from the source code. no human wrote this, it's just the machine doing its little thing, and honestly? it ate โจ
and that's a wrap on rte_tm_capabilities(3), bestie ๐ this whole thing lives in DPDK Version 25.11.3, pulled straight from the source code by Doxygen โ so if you're reading this in some future version, hi, hope the capabilities are still slaying ๐
๐ฆ where this page comes from
- ubuntu resolute: dpdk-doc 25.11.3-0ubuntu0.26.04.1 ยท BSD-3-Clause
- ubuntu stonking: dpdk-doc 25.11.3-1 ยท BSD-3-Clause
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms