2017-05-24 71 views
5

gelen atama Ben benzer hata iletisiyle bu sayfayı gördük: Nf_hook_ops returns incompatible pointer when assigning to hook_func -C -Linux -Netfilternfhook (netfilter) hatası: uyumsuz işaretçi türü

Ancak, sorunu çözmek için nasıl açık bir cevap vermedi. Bu soru için yazar o sorun neden olan başka bir yerde bulunur onun netfilter.h öğrendim, ama benim için ben dahil dört dosyaları doğru dizinde (içindedir öğrendim söylüyor usr/src/linux-headers-4.8. Benim durumumda 0-22-generic/include/linux). Takip

daha iyi açıklığa kavuşmasına yardımcı olacaktır benim kodudur.

#include <linux/kernel.h> 
#include <linux/module.h> 
#include <linux/netfilter.h> 
#include <linux/netfilter_ipv4.h> 

static struct nf_hook_ops nfho; 

unsigned int hook_func_incoming(unsigned int hooknum, struct sk_buff *sskb, 
const struct net_device *in, const struct net_device *out, int (*okfn) 
(struct sk_buff *)){ 
    return NF_DROP; 
} 

int init_module(){ 
    nfho.hook = hook_func_incoming; 
    nfho.hooknum = NF_INET_PRE_ROUTING; 
    nfho.pf = PF_INET; 
    nfho.priority = NF_IP_PRI_FIRST; 
    nf_register_hook(&nfho); 
    printk(KERN_INFO "SIMPLE FIREWALL LOADED\n"); 
    return 0; 
} 

hata mesajı tam olarak şudur:

hatası: uyumsuz işaretçi türünden atama [-Werror kullanmamak = uyumlu-işaretçi türleri] nfho.hook = hook_func_incoming; ^ cc1: Bazı uyarılar hataları

bana netfilter derlemek edebilmek için ne yapmalıyım bildirin, herhangi bir yardım takdir edildiği şekilde muamele edilen!

typedef unsigned int nf_hookfn(void *priv, 
        struct sk_buff *skb, 
        const struct nf_hook_state *state); 

İşleviniz hook_func_incoming bu imzayı eşleşmiyor, bunu benimsemesi gereken şu şekildedir: (IMHO) olarak

cevap

3

son (serbest) netfilter version, nf_hookfn (nf_hook_ops.hook taban tipi) tanımlanmıştır.

+0

teşekkür ederiz! Bu sorunu çözmemde bana yardımcı oldu. Ancak, bana ilk ve üçüncü parametreler hakkında daha fazla bilgi verebilir misiniz? Ben (Gerçi ikinci parametre hakkında bilgi biliyorum) çevrimiçi gerekli evrakları bulamıyorum. –

0

Üçüncü parametre, bu veri yapısıdır. Kanca fonksiyonunun yeni tanım, onlar tek bir veri yapısında eski parametreleri birleştirmek istedik. Yani, dışarıya ihtiyacınız varsa, bu durum parametresinden alabilirsiniz. Struct nf_hook_ops öğesinin içindeki bir alan özeldir . Kendi modülünüzdeki herhangi bir değere ayarlayabilir ve kanca işlevinize erişebilirsiniz.

struct nf_hook_ops { 
     struct list_head  list; 

     /* User fills in from here down. */ 
     nf_hookfn    *hook; 
     struct net_device  *dev; 
     void     *priv; 
     u_int8_t    pf; 
     unsigned int   hooknum; 
     /* Hooks are ordered in ascending priority. */ 
     int      priority; 
};