项目描述:在我们的安卓系统终端中,既要支持以太网(基于MAC地址的二层网络传输通道)通信,又要支持互联网通信
,我们其中一个进程中通过raw socket 接收eth0口的以太网数据,过滤掉其他MAC数据。另外一个进程中利用libpcap接收互联网数据同时转发到其他无线网卡。
具体实现参考不少网上资料。
代码如下:
基于raw socket实现:
void v2v_setFilter(int32 * sockid, unsigned char* local_mac)
{
struct sock_filter bpf_code[] = {
BPF_STMT(BPF_LD + BPF_ABS + BPF_H,0x0000000C),
BPF_JUMP(BPF_JMP + BPF_JEQ,0x00000800, 1, 0),
BPF_JUMP(BPF_JMP + BPF_JEQ,0x00000806, 0, 7),
BPF_STMT(BPF_LD + BPF_ABS + BPF_W,0x00000002),
BPF_JUMP(BPF_JMP + BPF_JEQ,__u32(local_mac[2]) << 24 | __u32(local_mac[3]) << 16 | __u32(local_mac[4]) << 8 | __u32(local_mac[5]), 0, 5),
BPF_STMT(BPF_LD + BPF_ABS + BPF_H,0x00000000),
BPF_JUMP(BPF_JMP + BPF_JEQ,__u32(local_mac[0]) << 8 |