CDC SetEthernetMulticastFilters
2025-07-11
0
0
1. SetEthernetMulticastFilters 请求用途
SetEthernetMulticastFilters 用于设置以太网设备的多播过滤器,通过48位以太网多播地址的顺序列表指定。
主机通过此请求配置设备的多播地址过滤列表,用于网络数据包的过滤和接收控制。
2. USB 控制传输格式
字段 | 值/说明 |
---|---|
bmRequestType | 0x21 (00100001B) 方向:主机到设备,类型:类,接收者:接口 |
bRequest | 0x40 (SET_ETHERNET_MULTICAST_FILTER) |
wValue | 过滤器数量(N) |
wIndex | 接口号 |
wLength | N * 6 |
Data | N个48位多播地址列表(网络字节序) |
3. 典型主机端请求示例
C 结构体示例:
uint8_t multicast_addresses[3][6] = {
{0x01, 0x00, 0x5E, 0x00, 0x00, 0x01}, // 多播地址1
{0x01, 0x00, 0x5E, 0x00, 0x00, 0x02}, // 多播地址2
{0x01, 0x00, 0x5E, 0x00, 0x00, 0x03} // 多播地址3
};
USB_SETUP_PACKET setup = {
.bmRequestType = 0x21, // 主机到设备,类,接口
.bRequest = 0x40, // SET_ETHERNET_MULTICAST_FILTER
.wValue = 0x0003, // 3个过滤器
.wIndex = interface_number, // 通信接口号
.wLength = 3 * 6 // 3个地址 * 6字节
};
// 发送setup包和multicast_addresses数据
4. 设备端处理要点
- 解析wValue中的过滤器数量N。
- 从Data阶段读取N个48位多播地址。
- 更新设备的多播过滤器列表。
- 如果缓冲区容量有限,可以使用NAK分批处理。
- 完成后通过状态阶段(Status Stage)ACK主机。
5. 常见应用场景
场景 | 过滤器数量 | 多播地址示例 | 说明 |
---|---|---|---|
标准多播 | 1 | 01:00:5E:00:00:01 | 设置单个多播地址 |
多个多播 | 3 | 01:00:5E:00:00:01-03 | 设置多个多播地址 |
清除过滤器 | 0 | 无 | 清除所有多播过滤器 |
6. 参考
- USB CDC 以太网子类规范 6.4.2](https://www.usb.org/document-library/class-definitions-communication-devices-12)