新闻中心

EEPW首页>嵌入式系统>设计应用> 基于嵌入式Linux的3G无线视频终端的设计与实现

基于嵌入式Linux的3G无线视频终端的设计与实现

作者: 时间:2011-08-01 来源:网络 收藏

内核netfilter结构在/usr/src/inelude/linux/netfilter.h中定义,类似如下:
c.jpg
参数是:
list
Netfilter本身是一个钩子链;它指向netfilter钩子的头部,通常设置为{NULL,NULL}。
hook
该函数在数据包碰到钩子点时被调用。该函数与前面描述的函数相同,它必须返回NF_ACCEPT、NF_DROP或NF_QUEUE。如果返回NF_ACCEPT,则下一个钩子将被附加到将要调用的点。如果返回NF_DROP,则数据包被丢弃。如果返回NF_QUEUE,则对数据包进行排队。sK_buff指针被传递到该函数中,并用数据包信息如IP报头、TCP报头等进行填充,可以使用sk_buff结构指针来操作或删除数据包(要删除数据包,只需将skb指针设置为空即可)。
pf
协议簇;例如,适用于IPv4的PF_INET。
hooknum
钩子的挂载点,由于本系统不需要在本地对数据包进行任何处理,因此选择的挂在点为NF_IP_PRE_ROUTING,在对数据包进行正确性校验后就调用钩子函数处理数据包。Priority表明钩子的优先级,在本系统中采用高优先级处理NF_IP_PRI_FIRST。
内核数据处理的关键是钩子函数的编写,此函数规定了数据包在到达时需要进行的处理过程。
钩子函数框架如下:
d.jpg
设定好特定的钩子函数之后,调用函数
int nf_register_hook(struct nf_hook_ops*req);
将钩子函数注册至内核。一旦该结构注册到内核中,将调用这里定义的函数来处理数据包。
使用函数
void nf_unregister_hook(struct nf_hook_ops*req);
可以将已经注册入内核的钩子函数取消,此时,接收到数据包将按照内核的默认规则来进行处理。流程如图3所示。

本文引用地址://m.amcfsurvey.com/article/150415.htm

e.jpg

linux操作系统文章专题:linux操作系统详解(linux不再难懂)


评论


相关推荐

技术专区

关闭