Nf_hook_ops renvoie un pointeur incompatible lors de l’atsortingbution de hook_func -C -Linux -Netfilter

J’essaie d’écrire mon propre module de kernel Netfilter sur Ubuntu 16.04 LTS, j’essaie d’atsortingbuer hook_func à nfho.hook, mais l’erreur suivante apparaît:

error: assignment from incompatible pointer type [-Werror=incompatible-pointer-types] nfho.hook = hook_func;

J’ai examiné d’autres solutions, notamment des parameters de double vérification, notamment la modification de *skb en **skb . J’ai lu que les parameters pouvaient dépendre de la version du kernel, mais je ne trouvais pas comment trouver les bons parameters à transmettre.

Comment puis-je le faire fonctionner et comment puis-je vérifier quels parameters doivent être passés dans hook_func sur la version de mon kernel?

Code complet:

 #include  #include  #include  #include  #include  #include  #include  static struct nf_hook_ops nfho; //struct holding set of hook function options // function to be called by hook unsigned int hook_func(unsigned int hooknum, struct sk_buff *skb, const struct net_device *in, const struct net_device *out, int (*okfn)(struct sk_buff *)) { struct iphdr *ip_header = (struct iphdr *)skb_network_header(skb); struct tcphdr *tcp_header; if (ip_header->protocol == 6) { printk(KERN_INFO "TCP Packet\n"); tcp_header = (struct tcphdr *)(skb_transport_header(skb)+20); printk(KERN_INFO "Source Port: %u\n", tcp_header->source); } return NF_ACCEPT; } int init_module() { nfho.hook = hook_func; nfho.hooknum = NF_INET_PRE_ROUTING; nfho.pf = PF_INET; nfho.priority = NF_IP_PRI_FIRST; nf_register_hook(&nfho); return 0; }