【发布时间】:2014-07-17 05:21:21
【问题描述】:
我有一个 linux 内核模块,它需要将通过 netfilter 钩子接收到的数据作为套接字缓冲区进行处理。
这就是我在回调中所做的,
unsigned char *eth = skb_mac_header(skb);
int len = skb->len + 14; //Assuming eth is 14 bytes. Neglecting VLAN case.
for (int j=0; j < len; j++)
{
printk("%X ", eth[j]);
}
在接收数据包时,我得到正确的长度。但是,某些 UDP 流量的数据包内容只有正确的 48 个字节(初始),其余字节不是我的接口接收的。用户空间应用程序正在接收接口上接收到的正确数据包内容。
谁能帮忙解释一下我做错了什么。帮助将不胜感激。谢谢。
【问题讨论】:
标签: linux linux-kernel kernel linux-device-driver kernel-module