Family net-shaper
netlink 规范¶
概述¶
网络硬件限速配置。
此 API 允许在不同级别(队列、网络设备)配置网络设备上可用的硬件流量整形器,并允许对相关整形器的调度树进行任意操作。
每个 @shaper 在给定设备中通过一个 @handle 标识,该 @handle 包含 @scope 和 @id。
根据 @scope 值,整形器可以连接到特定的硬件对象(队列、设备),或者对于 @node 范围,表示一个调度组,可以放置在调度树中的任意位置。
整形器可以通过两种不同的操作创建:@set 操作用于创建和更新单个“附加”整形器,@group 操作用于创建和更新调度组。只有 @group 操作才能创建 @node 范围的整形器。
现有整形器可以通过 @delete 操作进行删除/重置。
用户可以通过 @get 操作查询当前运行的配置。
不同的设备可以提供不同的特性集,例如不支持复杂的调度层次结构,或不支持某些整形参数。用户可以通过 @cap-get 操作检查硬件能力。
操作¶
获取¶
获取给定设备的整形器信息。
- 属性集:
- 执行:
- 前置
net-shaper-nl-pre-doit
- 后置
net-shaper-nl-post-doit
- 请求
- 属性:
[
ifindex
,handle
]
- 回复
- 属性:
[
ifindex
,parent
,handle
,metric
,bw-min
,bw-max
,burst
,priority
,weight
]
- 转储:
- 前置
net-shaper-nl-pre-dumpit
- 后置
net-shaper-nl-post-dumpit
- 请求
- 属性:
[
ifindex
]
- 回复
- 属性:
[
ifindex
,parent
,handle
,metric
,bw-min
,bw-max
,burst
,priority
,weight
]
设置¶
创建或更新指定的整形器。设置操作不能用于创建 @node 范围的整形器,请改用 @group 操作。
- 属性集:
- 标志:
[
admin-perm
]- 执行:
- 前置
net-shaper-nl-pre-doit
- 后置
net-shaper-nl-post-doit
- 请求
- 属性:
[
ifindex
,handle
,metric
,bw-min
,bw-max
,burst
,priority
,weight
]
删除¶
清除(移除)指定的整形器。当删除一个 @node 整形器时,将其所有叶子重新连接到被删除节点的父级。如果删除后,父整形器没有更多的叶子且父整形器范围是 @node,则父节点将被递归删除。当删除 @queue 整形器或 @netdev 整形器时,整形器会从层次结构中消失,但队列/设备仍然可以发送流量:它有一个无限带宽的隐式节点。队列的隐式节点会馈送到层次结构根部的隐式轮询节点。
- 属性集:
- 标志:
[
admin-perm
]- 执行:
- 前置
net-shaper-nl-pre-doit
- 后置
net-shaper-nl-post-doit
- 请求
- 属性:
[
ifindex
,handle
]
分组¶
创建或更新一个调度组,将指定的 @leaves 整形器附加到由 @handle 标识的指定节点下。@leaves 整形器的范围必须是 @queue,并且节点整形器的范围必须是 @node 或 @netdev。当节点整形器具有 @node 范围时,如果未指定 @handle @id,则会创建该范围的新整形器,否则指定的节点必须已经存在。当更新现有节点整形器时,指定的 @leaves 会添加到现有节点;该节点也将保留任何预先存在的叶子。新节点整形器的 @parent 句柄默认为所有叶子的父级,前提是所有叶子共享相同的父级。否则必须指定 @parent 句柄。用户可以选择为节点整形器提供整形属性。此操作是原子的,失败时不会对设备整形配置应用任何更改,否则会以回复的形式提供 @node 整形器的完整标识符(包括 @binding 和 @handle)。
- 属性集:
- 标志:
[
admin-perm
]- 执行:
- 前置
net-shaper-nl-pre-doit
- 后置
net-shaper-nl-post-doit
- 请求
- 属性:
[
ifindex
,parent
,handle
,metric
,bw-min
,bw-max
,burst
,priority
,weight
,leaves
]
- 回复
- 属性:
[
ifindex
,handle
]
获取能力¶
获取给定设备在指定范围内支持的整形器能力。
- 属性集:
- 执行:
- 前置
net-shaper-nl-cap-pre-doit
- 后置
net-shaper-nl-cap-post-doit
- 请求
- 属性:
[
ifindex
,scope
]
- 回复
- 属性:
[
ifindex
,scope
,support-metric-bps
,support-metric-pps
,support-nesting
,support-bw-min
,support-bw-max
,support-burst
,support-priority
,support-weight
]
- 转储:
- 前置
net-shaper-nl-cap-pre-dumpit
- 后置
net-shaper-nl-cap-post-dumpit
- 请求
- 属性:
[
ifindex
]
- 回复
- 属性:
[
ifindex
,scope
,support-metric-bps
,support-metric-pps
,support-nesting
,support-bw-min
,support-bw-max
,support-burst
,support-priority
,support-weight
]
定义¶
范围¶
- 类型:
枚举
- 文档:
定义整形器 @id 的解释方式。
- 条目:
- 未指定:
范围未指定。
- 网络设备:
给定网络设备的主整形器。
- 队列:
整形器连接到给定设备的队列,@id 表示队列号。
- 节点:
整形器允许对队列或其他节点整形器进行分组;可以嵌套在 @netdev 整形器或其他 @node 整形器中,允许放置在调度树的任何位置,除了叶子和根。
度量单位¶
- 类型:
枚举
- 文档:
整形器支持的不同度量单位。
- 条目:
- bps:
整形器以比特每秒为单位运行。
- pps:
整形器以包每秒为单位运行。
属性集¶
流量整形器¶
句柄(nest
)¶
- 嵌套属性:
- 文档:
给定整形器在其所属设备内的唯一标识符。
度量单位(u32
)¶
- 枚举:
- 文档:
给定整形器用于最小带宽、最大带宽和突发量的度量单位。
最小带宽(uint
)¶
- 文档:
给定整形器的保证带宽。
最大带宽(uint
)¶
- 文档:
给定整形器的最大带宽,或0表示无限制。
突发量(uint
)¶
- 文档:
整形的最大突发量。不应解释为量子。
优先级(u32
)¶
- 文档:
给定整形器的调度优先级。优先级调度应用于同级整形器。
权重(u32
)¶
- 文档:
给定整形器进行轮询调度的相对权重。该调度应用于所有具有相同优先级的同级整形器。
接口索引(u32
)¶
- 文档:
拥有指定整形器的接口索引。
父级(nest
)¶
- 嵌套属性:
- 文档:
受影响整形器的父级标识符。仅在 @group 操作中需要。
叶子(nest
)¶
- 多属性:
真
- 嵌套属性:
- 文档:
描述 @group 操作的叶子整形器集。
句柄¶
范围(u32
)¶
- 枚举:
- 文档:
定义整形器 @id 的解释方式。
ID(u32
)¶
- 文档:
整形器的数字标识符。ID的语义取决于范围。对于 @queue 范围,它是队列ID;对于 @node 范围,它是节点标识符。
叶子信息¶
句柄¶
优先级¶
权重¶
能力¶
接口索引(u32
)¶
- 文档:
查询整形器能力的接口索引。
范围(u32
)¶
- 枚举:
- 文档:
查询的能力所适用的范围。
支持比特每秒度量单位(flag
)¶
- 文档:
设备接受“bps”作为最小带宽、最大带宽和突发量的度量单位。
支持包每秒度量单位(flag
)¶
- 文档:
设备接受“pps”作为最小带宽、最大带宽和突发量的度量单位。
支持嵌套(flag
)¶
- 文档:
设备支持将属于此范围的整形器嵌套在“节点”范围的整形器下方。只有“队列”和“节点”范围可以具有“支持嵌套”标志。
支持最小带宽(flag
)¶
- 文档:
设备支持最小保证带宽。
支持最大带宽(flag
)¶
- 文档:
设备支持最大带宽整形。
支持突发量(flag
)¶
- 文档:
设备支持最大突发量。
支持优先级(flag
)¶
- 文档:
设备支持优先级调度。
支持权重(flag
)¶
- 文档:
设备支持加权轮询调度。