netfilter 锁开销_netfilter_netfilter 无锁(3)

电脑杂谈  发布时间:2017-02-27 02:09:24  来源:网络整理

struct ipt_entry *e:指向规则的指针;

targetinfo:用户空间传入的目标条件信息的指针;

targetinfosize:用户空间传入目标条件信息的长度;

hook_mask:表示挂接点(PREROUTING/INPUT/FORWARD/OUTPUT/POSTROUTING)的掩码,可用来限制目标只能在指定的挂接点中处理;

宏IPT_ALIGN用来得到实际目标结构的实际大小。

本例中需要检查目标数据长度是否正确,表名是否是“mangle”,因为需要对数据进行修改,所以一般要在mangle表中进行处理,其实也可以不限制;

destroy函数释放该目标中动态分配的资源,无返回值,函数定义为:

void (*destroy)(void *targetinfo, unsigned inttargetinfosize);

函数参数同check()函数说明,在本例中,并没有分配相关资源,所以没定义此函数。

最后在模块初始化函数中要调用ipt_register_target()函数将一个ipt_target目标结构挂接到系统目标链表中,在模块的结束函数中调用ipt_unregister_target()函数将目标结构从目标链表中去除。

修改net/ipv4/netfilter/Makefile和Kconfig文件,加入关于ipt_ID相关内容即可在编译内核中自动编译,或者单独直接将其编译为模块插入内核。netfilter

ipt_ID.c

/* This is a module which is used for setting the ID field of apacket.

* based on ipt_ID.c

* in fact, it's useless.

*/

#include <linux/module.h>

#include <linux/skbuff.h>

#include <linux/ip.h>

#include <net/checksum.h>

#include <linux/netfilter_ipv4/ip_tables.h>

#include <linux/netfilter_ipv4/ipt_ID.h>

MODULE_LICENSE("GPL");

MODULE_AUTHOR("yfydzyfydz_no1@hotmail.com >");

MODULE_DESCRIPTION("iptables ID mangling module");static unsigned int

target(struct sk_buff **pskb,

const struct net_device*in,

const struct net_device*out,

unsigned int hooknum,

const void *targinfo,

void *userinfo)

{

const struct ipt_id_target_info *idinfo = targinfo;

// 如果当前包的ID值和指定值不同,将指定值赋值给IP头中的ID字段

if ((*pskb)->nh.iph->id != idinfo->id) {

u_int16_t diffs[2];

if (!skb_ip_make_writable(pskb, sizeof(structiphdr)))

return NF_DROP;


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-34719-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...