CDC SetEthernetPacketFilter
2025-07-11
本文链接为:http://www.usbzh.com/article/detail-1532.html ,欢迎转载,转载请附上本文链接。
1. SetEthernetPacketFilter 请求用途
SetEthernetPacketFilter 用于配置设备以太网数据包过滤器设置。
主机通过此请求设置数据包过滤器的位图,控制设备转发哪些类型的数据包到主机。过滤器是Table 62中位图的包含OR操作。
2. USB 控制传输格式
| 字段 | 值/说明 |
|---|---|
| bmRequestType | 0x21 (00100001B) 方向:主机到设备,类型:类,接收者:接口 |
| bRequest | 0x43 (SET_ETHERNET_PACKET_FILTER) |
| wValue | 数据包过滤器位图(Packet Filter Bitmap) |
| wIndex | 接口号 |
| wLength | 0 |
| Data | 无 |
3. Ethernet Packet Filter Bitmap(Table 62)
| 位 | 名称/说明 |
|---|---|
| D15..D5 | RESERVED(复位为0) |
| D4 | PACKET_TYPE_MULTICAST 1:转发设备多播地址列表中的所有多播数据包(必需) 0:禁用(可选) |
| D3 | PACKET_TYPE_BROADCAST 1:转发网络设备接收的所有广播数据包(必需) 0:禁用(可选) |
| D2 | PACKET_TYPE_DIRECTED 1:转发目标地址等于网络设备MAC地址的定向数据包(必需) 0:禁用(可选) |
| D1 | PACKET_TYPE_ALL_MULTICAST 1:转发网络设备接收的所有多播帧,不仅仅是设备多播地址列表中的帧(必需) 0:禁用 |
| D0 | PACKET_TYPE_PROMISCUOUS 1:转发网络设备接收的所有帧(必需) 0:禁用 |
4. 典型主机端请求示例
C 结构体示例:
USB_SETUP_PACKET setup = {
.bmRequestType = 0x21, // 主机到设备,类,接口
.bRequest = 0x43, // SET_ETHERNET_PACKET_FILTER
.wValue = 0x000F, // 启用所有过滤器(D3-D0)
.wIndex = interface_number, // 通信接口号
.wLength = 0 // 无数据阶段
};
// 发送setup包,无data阶段
5. 设备端处理要点
- 解析wValue中的数据包过滤器位图。
- 根据位图设置相应的数据包过滤规则。
- 支持禁用某些过滤器是可选的。
- 完成后通过状态阶段(Status Stage)ACK主机。
6. 常见应用场景
| 场景 | 位图值 | D4 | D3 | D2 | D1 | D0 | 说明 |
|---|---|---|---|---|---|---|---|
| 标准模式 | 0x000E | 1 | 1 | 1 | 1 | 0 | 启用除混杂模式外的所有过滤器 |
| 混杂模式 | 0x000F | 1 | 1 | 1 | 1 | 1 | 启用所有过滤器 |
| 仅定向数据包 | 0x0004 | 1 | 0 | 0 | 0 | 0 | 仅转发定向数据包 |
| 仅多播数据包 | 0x0010 | 0 | 0 | 0 | 0 | 0 | 仅转发多播数据包 |
7. 参考
- USB CDC 以太网子类规范 6.4.5](https://www.usb.org/document-library/class-definitions-communication-devices-12)
USB CDC





