Linux kernel iphdr类型转换给我错误

Linux kernel iphdr类型转换给我错误,linux-kernel,netfilter,Linux Kernel,Netfilter,我正试图打印TCP地址,但出现“取消引用指向不完整类型的指针”错误。我认为iphdr的排版不起作用。如何解决此问题 unsigned int hook_func(unsigned int hooknum, 结构sk_buff*skb, const struct net_device*in, const结构网络设备*out, int(*okfn)(结构sk_buff*)) { 结构iphdr*ip_头;//ip头结构 if(!skb) 返回NF_接受; ip_头=(struct iphdr*)sk

我正试图打印TCP地址,但出现“取消引用指向不完整类型的指针”错误。我认为iphdr的排版不起作用。如何解决此问题

unsigned int hook_func(unsigned int hooknum,
结构sk_buff*skb,
const struct net_device*in,
const结构网络设备*out,
int(*okfn)(结构sk_buff*))
{
结构iphdr*ip_头;//ip头结构
if(!skb)
返回NF_接受;
ip_头=(struct iphdr*)skb_网络_头(skb);/*我认为这不起作用*/
printk(“地址:%lu。\n”,ip\u头->SADD);
返回NF_接受;
}
int init_模块()
{
printk(内核信息“初始化内核模块”\n);
/*填充我们的钩子结构*/
nfho.hook=hook_func;/*处理函数*/
nfho.hooknum=NF_INET_PRE_ROUTING;/*IPv4的第一个挂钩*/
nfho.pf=pf_INET;
nfho.priority=NF_IP_PRI_FIRST;/*将我们的功能放在第一位*/
nf_寄存器_挂钩(&nfho);
返回0;
}

有关类型为
struct iphdr
的引用指针

#include <linux/ip.h>
#包括

(实际上,这种类型在
include/uapi/linux/ip.h
中定义,但
uapi/
下的标题通常通过其他标题包含。)

在您指向的行中没有指针解引用。编译器可能会指向下一行(
printk
),从中提取变量
ip\u头的字段
saddr
。对于引用类型
struct iphdr
您需要
#include
是的,我知道编译器指向printk行,因为没有saddr属性。因此,我的结论类型铸造不工作。但你是对的,这是因为我没有包括ip.h头文件。非常感谢你!另外,你能把你的评论写成帖子吗?如果任何人遇到同样的问题,他们可以将其作为参考。