에서 할당 나는 유사한 오류 메시지가이 페이지를 보았다 : Nf_hook_ops returns incompatible pointer when assigning to hook_func -C -Linux -Netfilternfhook (넷) 오류 : 호환되지 않는 포인터 타입
그러나,이 문제를 해결하는 방법에 대한 명확한 대답을하지 않았다. 그 질문에 대한 저자는 자신의 netfilter.h가 문제를 일으키는 다른 곳에 있다는 것을 알았지 만 포함 된 4 개의 파일 모두 올바른 디렉토리 (usr/src/linux-headers-4.8)에 있다는 것을 알았습니다. 0-22-generic/include/linux 내 경우).
다음은 더 명확하게하는 데 도움이되는 제 코드입니다.
#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;
}
정확한 오류 메시지이있다 :
오류 : 호환 포인터 타입의 할당 [양립 -Werror = - 포인터 타입] nfho.hook = hook_func_incoming; ^ CC1 : 일부 경고는 오류
내 넷 필터를 컴파일 할 수 있도록 무엇을 어떻게해야 알려 주시기 바랍니다, 어떤 도움이 감사로 취급 중!
typedef unsigned int nf_hookfn(void *priv,
struct sk_buff *skb,
const struct nf_hook_state *state);
함수 hook_func_incoming
이 서명과 일치하지 않습니다, 당신이 그것을 채택해야 다음과 같이 (IMHO)에서
고맙습니다! 그게 제가이 문제를 해결하는 데 도움이되었습니다. 그러나 첫 번째와 세 번째 매개 변수에 대해 자세히 알려주시겠습니까? 온라인에서 관련 문서를 찾을 수 없습니다 (두 번째 매개 변수에 대한 정보는 알고 있습니다). –