通用网络设备接口。
此处的定义提供了 API Surface,用于通过 FIDL 协议 fuchsia.hardware.network/Device 将硬件设备作为网络设备接口向系统公开。网络设备接口是数据平面协定,允许网络栈在物理或虚拟网络上发送和接收帧。设备通过实现 NetworkDeviceImpl 协议来公开此功能,从而允许中间件实现绑定到该功能并向应用提供 FIDL 协议。
API 协定基于三个关键概念:
- 帧类型
- 接收和传输缓冲区
- 内存布局
帧类型是向应用公开的已定义协定,用于传达 tx 或 rx 缓冲区中包含的数据类型。支持的帧类型在 fuchsia.hardware.network/FrameType 中定义。初始化后,中间件实现将通过 GetInfo 调用从设备提取支持的帧类型。
接收和传输缓冲区是流向不同方向的缓冲区:接收缓冲区是从网络接收并流向应用层的数据。传输缓冲区则沿相反方向传输:它源自应用层,并进入网络。设备实现从 NetworkDeviceIfc 接收缓冲区,该接口由中间件实现提供。
接收缓冲区通过 NetworkDeviceImpl.QueueRxSpace 方法从 NetworkDeviceIfc 流入 NetworkDeviceImpl,该方法可用于访问接收缓冲区。下图说明了该机制:
++++++++++++++++++++ +++++++++++++++++++++
| (1) | => RxSpaceBuffer => | (2) |
| NetworkDeviceIfc | | NetworkDeviceImpl |
| (4) | <= RxBuffer <= | (3) | <= Network data
++++++++++++++++++++ +++++++++++++++++++++
- (1)
NetworkDeviceIfc通过 NetworkDeviceImpl.QueueRxSpace 将可用的接收缓冲区空间推送到NetworkDeviceImpl。 - (2)
NetworkDeviceImpl会保留可用空间缓冲区,直到网络数据传入。 - (3)
NetworkDeviceImpl从网络接收数据,将其存储在其中一个可用的 RxSpaceBuffers 中,使其成为 NetworkDeviceImpl.RxBuffer。 - (4)
NetworkDeviceImpl通过 NetworkDeviceIfc.CompleteRx 将已填充的RxBuffer发送到NetworkDeviceIfc,后者又将该数据发送到应用。
传输缓冲区通过 NetworkDeviceImpl.QueueTx 方法从 NetworkDeviceIfc 流入 NetworkDeviceImpl,并作为 TxResult 返回到 NetworkDeviceIfc。下图说明了该机制:
++++++++++++++++++++ +++++++++++++++++++++
| (1) | => TxBuffer => | (2) |
| NetworkDeviceIfc | | NetworkDeviceImpl |
| (4) | <= TxResult <= | (3) | => Network data
++++++++++++++++++++ +++++++++++++++++++++
- (1)
NetworkDeviceIfc从应用接收一个传输缓冲区,其中填充了要传送到网络的数据。 - (2)
NetworkDeviceIfc通过 NetworkDeviceImpl.QueueTx 调用将缓冲区推送到NetworkDeviceImpl。 - (3)
NetworkDeviceImpl将缓冲区中包含的数据发送到网络中。 - (4) 数据成功传输后,
NetworkDeviceImpl会将传输标记为完成,并将缓冲区的标识符引用到 NetworkDeviceIfc.CompleteTx。
协议
MacAddr
在 fuchsia.hardware.network.driver/network-mac.fidl 中定义
GetAddress
获取此设备的 MAC 地址。
请求
<EMPTY>
响应
| 名称 | 类型 |
|---|---|
mac |
fuchsia.net/MacAddress
|
GetFeatures
获取此设备的功能。
请求
<EMPTY>
响应
| 名称 | 类型 |
|---|---|
features |
Features
|
SetMode
设置此设备的运行模式。
mode 是 Mode 中的一个变体,保证是此设备报告的功能中报告的模式之一。只有当 mode 为 MULTICAST_FILTER 时,才会提供 multicast_macs(尽管它仍可能为空)。multicast_macs 始终保证最多包含 multicast_filter_count 个条目。
请求
| 名称 | 类型 |
|---|---|
mode |
fuchsia.hardware.network/MacFilterMode
|
multicast_macs |
vector<fuchsia.net/MacAddress>:64
|
响应
<EMPTY>
NetworkDeviceIfc
在 fuchsia.hardware.network.driver/network-device.fidl 中定义
AddPort
使用 id 实例化新端口。
id 当前不得被任何其他端口使用。一旦提供的端口被 NetworkPort.Removed 销毁,id 就可以重复使用。
端口标识符无需在实例化或重新启动期间保持稳定。只要不超过 MAX_PORTS,就不需要按任何特定顺序分配端口标识符。
- 请求
id个新端口标识符。 - 请求
port句柄以实现网络端口。
请求
| 名称 | 类型 |
|---|---|
id |
fuchsia.hardware.network/BasePortId
|
port |
client_end:NetworkPort
|
响应
| 名称 | 类型 |
|---|---|
status |
zx/Result
|
CompleteRx
向接口通知 RxBuffer 中包含的传入 rx 数据。
调用方应尝试在单次调用中批量处理尽可能多的缓冲区。单次调用中的缓冲区数量必须限制为返回缓冲区的 NetworkDeviceImpl 报告的 DeviceInfo.rx_depth。
长度为零的缓冲区会被视为“未填充”。它们不会报告给任何会话,并且包含它们的缓冲区空间可能会被重复使用。设备应在停止时将所有未完成的缓冲区空间作为未完成空间返回。请参阅 NetworkDeviceImpl.Stop。
通过调用 CompleteRx,调用方会放弃对所有标记为完成的缓冲区的所有权。
- 请求包含传入数据的
rx缓冲区。
请求
| 名称 | 类型 |
|---|---|
rx |
vector<RxBuffer>:744
|
CompleteTx
向接口通知完整的传输缓冲区。
调用方应尝试在单次调用中批量处理尽可能多的缓冲区。
单次调用中的缓冲区数量必须限制为返回缓冲区的 NetworkDeviceImpl 报告的 DeviceInfo.tx_depth。
通过调用 CompleteTx,调用方会放弃所返回的所有缓冲区的所有权。
- 请求
tx传输结果。
请求
| 名称 | 类型 |
|---|---|
tx |
vector<TxResult>:8188
|
DelegateRxLease
将接收唤醒租约转移到应用。
如果设备允许应用在从网络流量唤醒后完全处理帧,则可以使用此方法作为“租约接力”策略。支持唤醒处理的应用会保留租用,直到 rx 流量完全处理完毕。
设备必须跟踪通过 NetworkDeviceIfc.CompleteRx 发送的 rx 帧数,并使用最新发出的帧数作为 fuchsia.hardware.network/DelegatedRxLease.hold_until_frame,以保证处理。成功提供给 CompleteRx 的每个帧都应增加 rx 帧计数。请注意,帧编号从 1 开始,如需了解详情,请参阅 hold_until_frame 文档。
请注意,这是一种单向方法,流控制通过常规 rx 空间 -> rx 完成流强制执行。
请求
| 名称 | 类型 |
|---|---|
delegated |
fuchsia.hardware.network/DelegatedRxLease
|
PortStatusChanged
向接口发送通知,告知具有 id 的端口的状态变化。
必须始终通过 StatusChanged 通知端口状态变化。该接口不会通过 NetworkPort.GetStatus 轮询端口以获取状态。
- 请求
id端口标识符。 - 请求
new_status个新端口的状态。
请求
| 名称 | 类型 |
|---|---|
id |
fuchsia.hardware.network/BasePortId
|
new_status |
fuchsia.hardware.network/PortStatus
|
RemovePort
使用 id 销毁端口。
注意:在调用 NetworkPort.Removed 之前,不得释放与端口关联的资源。
- 请求
id移除了端口标识符。
请求
| 名称 | 类型 |
|---|---|
id |
fuchsia.hardware.network/BasePortId
|
RequestRxSpace
向网络设备通知缓冲区耗尽。
此协议的服务器需要将更多 RX 缓冲区加入实现队列。网络设备实现可以请求一定数量的缓冲区,但这只是一个提示,服务器会尽力满足请求。
这是一种尽力而为的方法,如果网络设备也用尽了 Rx 空间缓冲区,那么我们就无能为力了。
请注意,这是一个单向异步调用,仅用作平台驱动程序的信号方法,队列操作可能不会与中断处理内嵌发生。数据包可能会在此时间范围内被丢弃。当达到特定阈值时,NetworkDeviceImpl 可以发出此信号,而不是等待缓冲区空间实际为空。
请求
| 名称 | 类型 |
|---|---|
requested |
uint64
|
UpdateRxBufferParams
为 NetworkDeviceIfc 提供一组用于缓冲区管理的参数。
- 如果给定参数无效,则返回 ZX_ERR_INVALID_VALUE。
请求
| 名称 | 类型 |
|---|---|
param |
RxBufferManagement
|
响应
| 名称 | 类型 |
|---|---|
payload |
NetworkDeviceIfc_UpdateRxBufferParams_Result
|
NetworkDeviceImpl
在 fuchsia.hardware.network.driver/network-device.fidl 中定义
GetInfo
获取设备的相关信息。
设备信息在设备的生命周期内不得更改。
- 响应
info设备信息。
请求
<EMPTY>
响应
| 名称 | 类型 |
|---|---|
info |
DeviceImplInfo
|
Init
初始化网络设备。
在设备的生命周期内,Init 仅调用一次,以将 iface 注册为网络设备实现的回调目标。
初始化后,设备应处于“已停止”状态,一旦需要打开数据路径,系统就会调用 Start 方法。
- 请求设备接口的
iface句柄。
- 响应
s初始化状态。ZX_OK以外的值会导致设备解除绑定。
请求
| 名称 | 类型 |
|---|---|
iface |
client_end:NetworkDeviceIfc
|
响应
| 名称 | 类型 |
|---|---|
s |
zx/Result
|
PrepareVmo
通知设备正在使用新的 VMO 来存储帧数据。
实现者必须存储 id 引用的 VMO 句柄,直到使用相同的 id 调用 NetworkDeviceImpl.ReleaseVmo。
- 用于引用此 VMO 的请求
id标识符。 - 请求
vmoVMO,其中将存储帧数据。
- 响应
sVMO 注册状态。ZX_OK表示 VMO 准备成功。任何其他状态值都表示特定于实现的错误,并会导致拥有 VMO 的客户端会话关闭。
请求
| 名称 | 类型 |
|---|---|
id |
fuchsia.hardware.network/VmoId
|
vmo |
handle<vmo>
|
响应
| 名称 | 类型 |
|---|---|
s |
zx/Result
|
QueueRxSpace
在网络设备上将接收缓冲区空间列表加入队列。
驱动程序会获取缓冲区的所有权,并且必须使用 NetworkDeviceIfc.CompleteRx 完成事务(在网络数据到达后)。
提供给设备的未完成 rx 缓冲区总数绝不会超过报告的 DeviceInfo.rx_depth 值。这也意味着,在对 QueueRxSpace 的单次调用中,一次最多会通知 rx_depth 个缓冲区。
当设备处于停止状态时,加入队列的缓冲区必须返回零长度。
- 请求
buffers个接收空间缓冲区,以便在网络数据到达时填充这些缓冲区。
请求
| 名称 | 类型 |
|---|---|
buffers |
vector<RxSpaceBuffer>:2047
|
QueueTx
将缓冲区列表加入队列,以便在网络设备上传输。
驱动程序会获取缓冲区的所有权,并且在处理完 buffers 中的每个缓冲区后,必须使用 NetworkDeviceIfc.CompleteTx 操作完成 tx 事务。
提供给设备的未完成 tx 缓冲区总数绝不会超过报告的 DeviceInfo.tx_depth 值。这也意味着,在对 QueueTx 的单次调用中,一次最多会通知 tx_depth 个缓冲区。
当设备处于停止状态时,必须返回排队的缓冲区,并显示相应的错误。如需了解具体的错误代码,请参阅 TxResult.status。
- 请求
buffers个 tx 缓冲区加入队列以进行发送。
请求
| 名称 | 类型 |
|---|---|
buffers |
vector<TxBuffer>:454
|
ReleaseVmo
设备可能会处置对 id 引用的 VMO 的所有引用。
系统不会再发送带有此 id 的缓冲区。
只有在实现不包含引用该 id 的缓冲区时,系统才会调用 ReleaseVmo。
- 请求
idVMO 标识符。
请求
| 名称 | 类型 |
|---|---|
id |
fuchsia.hardware.network/VmoId
|
响应
<EMPTY>
开始
启动设备的数据路径。
start 会向设备实现发出信号,指示其应启动数据路径并准备好接收 tx 帧,并且 iface 将开始接受 rx 帧。
只有在 Start 成功返回后,设备才会被视为已启动。
在此之前,该协定保证不会对设备进行其他数据路径调用(QueueTx、RxAvailable、Stop 或对 Start 的第二次调用),因此实现者可以安全地假设或断言此协定得到遵守。
- 响应
s启动状态。ZX_OK表示成功启动。ZX_ERR_ALREADY_BOUND表示设备已成功启动。任何其他状态值都表示实现特定错误。
请求
<EMPTY>
响应
| 名称 | 类型 |
|---|---|
s |
zx/Result
|
停止
停止网络设备。
设备实现必须在收到此调用后返回所有未完成的 Tx 和 Rx 缓冲区。在停止状态下收到的任何新缓冲区都必须返回适当的错误 (tx) 或未完成 (rx)。如需了解详情,请参阅 NetworkDeviceIfc.CompleteTx 和 NetworkDeviceIfc.CompleteRx。
设备实现可在观察到停止后执行任何节能措施。
请求
<EMPTY>
响应
<EMPTY>
NetworkPort
在 fuchsia.hardware.network.driver/network-device.fidl 中定义
GetInfo
获取端口的相关信息。
端口信息在端口的生命周期内不得更改。
- 响应
info端口信息。
请求
<EMPTY>
响应
| 名称 | 类型 |
|---|---|
info |
fuchsia.hardware.network/PortBaseInfo
|
GetMac
获取端口的 MAC 寻址层的接口。
不支持 MAC 地址寻址的端口必须返回空接口。
- 响应
mac_ifcMAC 地址处理。
请求
<EMPTY>
响应
| 名称 | 类型 |
|---|---|
mac_ifc |
client_end:MacAddr?
|
GetPowerDependencyToken
获取此端口电源元素的 Power Broker 依赖项令牌。
该令牌公开了两个级别:0(关闭)和 1(开启)。每当需要端口的数据路径时,客户端都会租用级别 1,并根据需要保留租约。驱动程序可以自由地对已租用但空闲的端口进行内部电源管理,只要上层看不到该端口即可。
该令牌在端口的生命周期内是固定的。
- 如果此端口不参与电源管理,则响应
token不存在。
请求
<EMPTY>
响应
| 名称 | 类型 |
|---|---|
token |
fuchsia.power.broker/DependencyToken
|
GetStatus
获取端口的运行状态。
必须通过 NetworkDeviceIfc.StatusChanged 报告操作状态的变化
- 响应
status端口运行状态的快照。
请求
<EMPTY>
响应
| 名称 | 类型 |
|---|---|
status |
fuchsia.hardware.network/PortStatus
|
已移除
通知此端口已从接口中移除。
只有在收到 Removed 调用时,才能释放与端口关联的资源。请注意,只有在 AddPort 返回并指示成功时,系统才会调用 Removed。如果 AddPort 失败,则不会调用此方法,而是检查 AddPort 的返回状态。
请求
<EMPTY>
SetActive
通知端口有会话对其感兴趣。
活跃端口具有与其关联的会话。实现可能会在停用的端口上采用节能或其他策略。采用此类策略的实现:
- 不应报告非活动端口的入站帧;
- 必须针对发往非活跃端口的出站帧返回错误。
所有端口在创建时均处于非活跃状态。
- 如果端口有会话连接到它,则请求
activetrue,否则请求false。
请求
| 名称 | 类型 |
|---|---|
active |
bool
|
STRUCTS
BufferMetadata
在 fuchsia.hardware.network.driver/network-device.fidl 中定义
| 字段 | 类型 | 说明 | 默认 |
|---|---|---|---|
port |
fuchsia.hardware.network/BasePortId
|
此缓冲区的目标或源端口标识符。 |
无默认应用 |
flags |
uint32
|
帧 tx 或 rx 标志,如 fuchsia.hardware.network/RxFlags、fuchsia.hardware.network/TxFlags 和 fuchsia.hardware.network/TxReturnFlags 中所定义。 |
无默认应用 |
frame_type |
fuchsia.hardware.network/FrameType
|
此缓冲区中包含的帧类型,如 fuchsia.hardware.network/FrameType 中所定义。 |
无默认应用 |
BufferRegion
在 fuchsia.hardware.network.driver/network-device.fidl 中定义
VMO 中的连续内存区域。
请注意,BufferRegion 仅在其引用的 VMO 方面是连续的,不一定会转换为连续的物理内存。
| 字段 | 类型 | 说明 | 默认 |
|---|---|---|---|
vmo |
fuchsia.hardware.network/VmoId
|
支持此区域的 VMO。 |
无默认应用 |
offset |
uint64
|
VMO 中数据块的偏移量(以字节为单位)。 |
无默认应用 |
length |
uint64
|
VMO 中数据块的长度(以字节为单位)。 |
无默认应用 |
NetworkDeviceIfc_UpdateRxBufferParams_Response
在 fuchsia.hardware.network.driver/network-device.fidl 中定义
<EMPTY>
RxBuffer
在 fuchsia.hardware.network.driver/network-device.fidl 中定义
包含设备接收的单个帧的缓冲区。
| 字段 | 类型 | 说明 | 默认 |
|---|---|---|---|
meta |
BufferMetadata
|
与缓冲区关联的元数据。 |
无默认应用 |
data |
vector<RxBufferPart>:4
|
包含此帧的已填充 rx 缓冲区空间。 必须至少有一个部分。 |
无默认应用 |
full_csums_verified |
uint16
|
设备验证的完整校验和数量减一。 仅当 |
无默认应用 |
RxBufferPart
在 fuchsia.hardware.network.driver/network-device.fidl 中定义
RxBuffer 的单个连续部分,由 RxSpaceBuffer 创建。
| 字段 | 类型 | 说明 | 默认 |
|---|---|---|---|
id |
BufferId
|
在产生此 |
无默认应用 |
offset |
uint32
|
从 RxSpaceBuffer 的开头到入站数据开始处的偏移量(以字节为单位)。 这是源空间定义的区域内的相对偏移量,而不是空间 VMO 中的绝对偏移量。 |
无默认应用 |
length |
uint32
|
|
无默认应用 |
RxSpaceBuffer
在 fuchsia.hardware.network.driver/network-device.fidl 中定义
具有已分配空间的缓冲区,用于接收帧。RxSpaceBuffer 必须始终作为 RxBuffer 中的 RxBufferPart 返回。
| 字段 | 类型 | 说明 | 默认 |
|---|---|---|---|
id |
BufferId
|
唯一缓冲区标识符。 |
无默认应用 |
region |
BufferRegion
|
缓冲区空间所在的 VMO 区域。 |
无默认应用 |
简单
在 fuchsia.hardware.network.driver/network-device.fidl 中定义
| 字段 | 类型 | 说明 | 默认 |
|---|---|---|---|
alpha |
float64
|
此值用于计算到达率:
必须在 (0, 1] 范围内。如果为零,则默认为服务器分配的值。 |
无默认应用 |
delay_budget |
zx/Duration
|
驱动程序中的等待时间预算。 这相当于利特尔法则中的 W。更实际地说,这是缓冲区在设备实现队列中等待设备接口处理的平均时间的上限。 面向驱动程序实现者的指南:
如果为零,则默认为服务器分配的值。 |
无默认应用 |
intercept |
uint16
|
设备持有的 Rx 缓冲区数量,无论到达速率如何。 这是恒定偏移量( 针对驱动程序实现者的指南:将此值设置为设备在不完成缓冲区的情况下可以容纳的缓冲区数量。如果设备在停放缓冲区时将该值设为零,则设备会一直处于饥饿状态,直到 请注意,这与 fuchsia.hardware.network.driver/DeviceImplInfo.min_rx_buffers 不同,后者是应用于最终目标的下限。下限会使目标保持平缓,直到依赖于费率的项超过该下限,而 |
无默认应用 |
sample_interval |
zx/Duration
|
用于估算数据包到达速率的采样间隔。 确定到达率的采样和更新频率。 如果为零,则默认为服务器分配的值。 |
无默认应用 |
variance_threshold |
float64
|
触发即时缓冲区请求时要考虑的方差倍数。 当当前数据包到达率超过平均到达率 必须为正值。如果为零,则默认为服务器分配的值。 |
无默认应用 |
静态
在 fuchsia.hardware.network.driver/network-device.fidl 中定义
<EMPTY>
TxBuffer
在 fuchsia.hardware.network.driver/network-device.fidl 中定义
包含单个帧的传输缓冲区。
| 字段 | 类型 | 说明 | 默认 |
|---|---|---|---|
id |
BufferId
|
唯一缓冲区标识符。 |
无默认应用 |
data |
vector<BufferRegion>:4
|
保存帧数据的 VMO 区域。 |
无默认应用 |
meta |
BufferMetadata
|
与此缓冲区关联的元数据。 |
无默认应用 |
head_length |
uint16
|
此缓冲区所含数据中的标头字节长度。 始终为 0 或请求的 DeviceInfo.tx_head_length 值。头部字节始终位于缓冲区的开头。 |
无默认应用 |
tail_length |
uint16
|
此缓冲区中包含的数据的尾部字节长度。 始终为 0 或请求的 DeviceInfo.tx_tail_length 值。尾部字节始终位于缓冲区的末尾。 |
无默认应用 |
partial_csum_metadata |
TxPartialCsumMetadata
|
由堆栈发送的元数据,用于请求通用校验和分流。 仅当 |
无默认应用 |
TxPartialCsumMetadata
在 fuchsia.hardware.network.driver/network-device.fidl 中定义
部分校验和元数据。
| 字段 | 类型 | 说明 | 默认 |
|---|---|---|---|
start |
uint16
|
从帧开头到设备必须开始计算校验和的位置的字节偏移量。 |
无默认应用 |
offset |
uint16
|
从缓冲区中已校验和部分的开头到设备必须放置校验和结果的位置之间的偏移量(以字节为单位)。校验和字段本身包含在校验和中。 |
无默认应用 |
TxResult
在 fuchsia.hardware.network.driver/network-device.fidl 中定义
tx 操作的结果,通过 NetworkDeviceIfc.CompleteTx 报告给 NetworkDeviceIfc。
| 字段 | 类型 | 说明 | 默认 |
|---|---|---|---|
id |
BufferId
|
在发起此 |
无默认应用 |
status |
zx/Result
|
要报告的结果状态。 错误结果会映射到 fuchsia.hardware.network/TxReturnFlags 中的等效结果。
|
无默认应用 |
TABLES
DeviceImplInfo
在 fuchsia.hardware.network.driver/network-device.fidl 中定义
静态设备信息。
DeviceImplInfo 在设备的整个生命周期内不得更改。
| 序数 | 字段 | 类型 | 说明 |
|---|---|---|---|
1 |
device_features |
uint32
|
设备功能 必需。 |
2 |
tx_depth |
uint16
|
设备传出队列中 tx 帧的最大深度。 必填。 |
3 |
rx_depth |
uint16
|
设备传入队列中的 rx 帧数上限。 必填。 |
4 |
rx_threshold |
uint16
|
应向设备馈送新接收缓冲区的接收深度阈值。 当实现持有的 rx 缓冲区数量大于 对于较小的 rx 完成事务大小,较大的值(接近 |
5 |
max_buffer_parts |
uint8
|
设备接受的最大虚拟不连续缓冲区部分。 无法执行分散-收集操作的设备必须将 必须在 [1, |
6 |
max_buffer_length |
uint32
|
缓冲区的最大总长度。可设置为 0,表示不设上限。 不支持分散-收集 DMA 的设备可以将此值设置为小于页面大小的值,以确保兼容性。 必填。 |
7 |
buffer_alignment |
uint32
|
缓冲区相对于 VMO 开头的对齐要求。 必须大于零。 必填。 |
8 |
min_rx_buffer_length |
uint32
|
确保正常运行所需的最小 rx 缓冲区长度(以字节为单位)。 必填。 |
9 |
min_tx_buffer_length |
uint32
|
确保正常运行所需的最小 tx 缓冲区长度(以字节为单位)。 此长度仅考虑缓冲区的主体,不应考虑 |
10 |
tx_head_length |
uint16
|
在 tx 缓冲区中作为标头字节请求的字节数。 如果设置为零,tx 缓冲区将永远不会包含标头空间。否则,tx 缓冲区将从标头空间的开头开始,并且系统会通知标头区域。 必填。 |
11 |
tx_tail_length |
uint16
|
在 tx 缓冲区上作为尾部字节请求的字节数。 如果设置为零,则 tx 缓冲区将永远不会包含尾部空间。否则,tx 缓冲区将在尾部空间末尾结束,并且系统会通知尾部区域。 必填。 |
12 |
min_rx_buffers |
uint16
|
要排队的 Rx 缓冲区数量下限。如果未设置,则假定 rx_threshold 为最小值。 |
13 |
rx_buffer_management |
RxBufferManagement
|
初始 Rx 缓冲区管理参数。
如果未设置,则假定使用 |
功能
在 fuchsia.hardware.network.driver/network-mac.fidl 中定义
MacAddr.GetFeatures 报告的设备功能。
| 序数 | 字段 | 类型 | 说明 |
|---|---|---|---|
1 |
multicast_filter_count |
uint32
|
此设备上可用的多播过滤条目数上限。 如果不支持多播过滤,实现必须设置为 0。 值将始终饱和到 MAX_MAC_FILTER。 可选,如果不存在,则解读为零。 |
2 |
supported_modes |
SupportedMacFilterMode
|
此设备支持的过滤操作模式。 可传递给 MacAddr.SetMode 的可能 SupportedMacFilterMode 值的位字段。 |
UNIONS
NetworkDeviceIfc_UpdateRxBufferParams_Result strict
在 fuchsia.hardware.network.driver/network-device.fidl 中定义
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
response |
NetworkDeviceIfc_UpdateRxBufferParams_Response
|
|
2 |
err |
zx/Status
|
RxBufferManagement flexible
在 fuchsia.hardware.network.driver/network-device.fidl 中定义
Rx 缓冲区管理参数。
| 序数 | 变体 | 类型 | 说明 |
|---|---|---|---|
1 |
static |
Static
|
没有动态管理,所有内容都会排队。默认算法。 |
2 |
simple |
Simple
|
使用利特尔法则:队列大小是数据包到达速率与每个数据包在队列中花费的平均时间的乘积,再加上一个常数项,表示设备持有的缓冲区,无论到达速率如何 ( |
BITS
SupportedMacFilterMode flexible
类型:uint32
在 fuchsia.hardware.network.driver/network-mac.fidl 中定义
支持的设备 MAC 过滤模式。
此类型的变体应与 fuchsia.hardware.network.MacFilterMode 匹配。
| 名称 | 值 | 说明 |
|---|---|---|
MULTICAST_FILTER |
1 | 设备仅接受发送到其自身单播地址的单播帧,或属于多播地址过滤条件列表的多播帧。 |
MULTICAST_PROMISCUOUS |
2 | 设备接受发送到其自身单播地址的单播帧或任何多播帧。 |
PROMISCUOUS |
4 | 设备接受所有帧。 |
常量
| 名称 | 值 | 类型 | 说明 |
|---|---|---|---|
| MAC_SIZE |
6
|
uint64 |
IEEE 802 MAC 地址的长度(以字节为单位)。 |
| MAX_BUFFER_PARTS |
4
|
uint32 |
缓冲区可能具有的不相交部分的最大数量。 |
| MAX_MAC_FILTER |
64
|
uint64 |
设置为过滤的多播 MAC 地址的数量上限。 |
| MAX_RX_BUFFERS |
744
|
uint32 |
在不超过绑定强制执行的消息大小上限的情况下,可在单个 FIDL 消息中发送的 在撰写本文时,FIDL 消息的大小上限为 65 KiB。在当前的 FIDL 传输格式中,
|
| MAX_RX_SPACE_BUFFERS |
2047
|
uint32 |
在遵守绑定强制执行的消息大小上限的前提下,单个 FIDL 消息中可发送的 在撰写本文时,FIDL 消息的大小上限为 65 KiB。在当前的 FIDL 传输格式中, |
| MAX_TX_BUFFERS |
454
|
uint32 |
在不超过绑定强制执行的消息大小上限的情况下,可在单个 FIDL 消息中发送的 在撰写本文时,FIDL 消息的大小上限为 65 KiB。在当前的 FIDL 传输格式中, |
| MAX_TX_RESULTS |
8188
|
uint32 |
在单个 FIDL 消息中可发送的 在撰写本文时,FIDL 消息的大小上限为 65 KiB。在当前的 FIDL 传输格式中,每个 |
别名
| 名称 | 值 | 说明 |
|---|---|---|
| BufferId |
uint32 |
缓冲区标识符。 在接口和实现之间交换时,Rx 空间缓冲区和 Tx 缓冲区由这些标识。 |
服务
服务
在 fuchsia.hardware.network.driver/network-device.fidl 中定义
| 名称 | 类型 | 传输 |
|---|---|---|
| network_device_impl |
fuchsia.hardware.network.driver/NetworkDeviceImpl
|
驱动程序 |