免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2872 | 回复: 4
打印 上一主题 下一主题

[C] 编写netfilter模块碰到的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-02 14:27 |只看该作者 |倒序浏览
netfilter模块代码如下:
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/netfilter.h>
#include <linux/netfilter_ipv4.h>
#include <linux/ip.h>
#include <linux/skbuff.h>

static struct nf_hook_ops nfho;

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*))
{
        return NF_DROP;
}

static int hello_init(void)
{
        nfho.hook = hook_func;
        nfho.hooknum = NF_IP_PRE_ROUTING;
        nfho.pf = PF_INET;
        nfho.priority = NF_IP_PRI_FIRST;
        nf_register_hook(&nfho);
        return 0;
}

static int hello_exit(void)
{
        nf_unregister_hook(&nfho);
        return 0;
}

module_init(hello_init);
modele_exit(hello_exit);

MODULE_LICENSE("GPL");

makefile代码如下:
ifneq ($(KERNElRELEASE),)
        obj-m := hello.o
else
        obj-m := hello.o
        KERNELDIR ?= /lib/modules/$(shell uname -r)/build -I/lib/modules/2.6.26.8-57.fc8/build/include/
        PWD := $(shell pwd)
default:
        $(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) modules -I/lib/modules/2.6.26.8-57.fc8/build/include/
endif

碰到问题如下:
[root@localhost net]# make
make -C /lib/modules/2.6.26.8-57.fc8/build -I/lib/modules/2.6.26.8-57.fc8/build/include/ SUBDIRS=/root/net modules -I/lib/modules/2.6.26.8-57.fc8/build/include/
make[1]: Entering directory `/usr/src/kernels/2.6.26.8-57.fc8-i686'
  CC [M]  /root/net/hello.o
/root/net/hello.c: In function ‘hello_init’:
/root/net/hello.c:23: 警告:从不兼容的指针类型赋值
/root/net/hello.c:24: 错误:‘NF_IP_PRE_ROUTING’ 未声明 (在此函数内第一次使用)
/root/net/hello.c:24: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
/root/net/hello.c:24: 错误:所在的函数内只报告一次。)
/root/net/hello.c: 在顶层:
/root/net/hello.c:38: 警告:数据定义时没有类型或存储类
/root/net/hello.c:38: 警告:在 ‘modele_exit’ 的声明中,类型默认为 ‘int’
/root/net/hello.c:38: 警告:函数声明中出现形参名却未指定类型
make[2]: *** [/root/net/hello.o] 错误 1
make[1]: *** [_module_/root/net] 错误 2
make[1]: Leaving directory `/usr/src/kernels/2.6.26.8-57.fc8-i686'
make: *** [default] 错误 2

提示宏NF_IP_PRE_ROUTING为声明
但指定的头文件所在的目录下的netfilter_ipv4.h对这个宏有定义
[root@localhost net]# cat /lib/modules/2.6.26.8-57.fc8/build/include/linux/netfilter_ipv4.h | grep NF_IP_PRE
#define NF_IP_PRE_ROUTING       0
不明白编译的时候 提示没有这个宏的声明
望大家赐教

论坛徽章:
0
2 [报告]
发表于 2009-03-02 14:33 |只看该作者

回复 #1 wxj120bw 的帖子

我的makefile是这样写的,比较简单,但是从没出错过

TARGET = netlink
KDIR = /usr/src/kernels/2.6.18-8.el5-i686/
PWD = $(shell pwd)
obj-m := $(TARGET).o
default:
        make -C $(KDIR) M=$(PWD) modules

论坛徽章:
0
3 [报告]
发表于 2009-03-02 14:42 |只看该作者

回复 #2 laughmetal 的帖子

参考你的makefile代码 只改了 TARGET和 KDIR 两行 但出现的错误和我第一次碰到的是一样的 看来不是makefile的问题 但为什么提示那个宏没定义 我就很奇怪

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
4 [报告]
发表于 2009-03-02 16:38 |只看该作者
/root/net/hello.c:23: 警告:从不兼容的指针类型赋值
/root/net/hello.c:24: 错误:‘NF_IP_PRE_ROUTING’ 未声明 (在此函数内第一次使用)
/root/net/hello.c:24: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
/root/net/hello.c:24: 错误:所在的函数内只报告一次。)


从提示上看,LZ应该没有包含这个宏NF_IP_PRE_ROUTING的头文件

论坛徽章:
0
5 [报告]
发表于 2009-03-02 17:58 |只看该作者

回复 #4 Godbach 的帖子

但在makefile命令中 我-I参数指定头文件所在的目录/lib/modules/2.6.26.8-57.fc8/build/include/ 而且NF_IP_PRE_ROUTING是在linux/netfilter_ipv4.h文件里定义的。为什么????
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP