- 论坛徽章:
- 2
|
本帖最后由 shaohui973 于 2013-07-22 11:31 编辑
程序一开始,首先创建一个socket,用于DHCP服务,并且配置过滤规则如下:
BPF_STMT(BPF_LD+BPF_H+BPF_ABS,12), /*eth type*/
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0X0800,0,5), /*ip*/
BPF_STMT(BPF_LD+BPF_H+BPF_ABS,23),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0X11,0,3), /*udp proto*/
BPF_STMT(BPF_LD+BPF_H+BPF_ABS,36),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, DHCP_SERVER_PORT,0,1),
BPF_STMT(BPF_RET+BPF_K,-1), /* keep packet */
BPF_STMT(BPF_RET+BPF_K,0) /* drop packet */
在DHCP完成后,又另外创建了一个socket,用于和DSP芯片通信,并且配置过滤规则如下:
BPF_STMT(BPF_LD+BPF_H+BPF_ABS,12),
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, cOCTPKT_HDR_ETHERTYPE,0,1), /* DSP 私有协议 */
BPF_STMT(BPF_RET+BPF_K,-1), /* keep packet */
BPF_STMT(BPF_RET+BPF_K,0) /* drop packet */
现有一个线程一直在轮寻检测dsp的socket,有数据就马上取出来。
通过抓包来看,DSP把请求的响应包发给我了,但是dsp的这个线程就是取不到这个数据。
这个BPF机制是不是不能用多个有冲突的规则的???我现在比较怀疑这点。
附:socket均为PF_PACKET的RAW socket.过滤规则都是作用在同一块网卡上的。 |
|