netfilter 锁开销_netfilter_netfilter 无锁(6)

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

struct ipt_entry_target *t;

unsigned int tflags;

unsigned int used;

#ifdef NO_SHARED_LIBS

unsigned int loaded; /* simulate loading so options aremerged properly */

#endif

};

struct iptables_target结构参数说明如下:

next: 目标链表的下一个,目标链表是一个单向链表;

name:目标的名称,必须是唯一的;

version:iptables的版本;

size:目标结构的数据长度;

userspacesize:用于目标部分的数据长度,通常此值等于size,但某些情况可能会小于size;

help函数:打印帮助信息,当 "-j xxx -h"时调用;

init函数:初始化函数,可对目标结构赋初值;

parse函数:解析用户输入参数,这是最主要的处理函数;

final_check函数:对用户数据进行最后的检查;

print函数:打印目标信息,iptables -L时调用

save函数:保存当前iptables规则时打印目标格式,被iptables-save程序调用;

extra_opts:选项信息,选项格式是标准的UNIX选项格式,通过getopt函数识别;

option_offset:选项偏移;

t:指向iptables规则;

tflags:规则相关标志

used: 模块使用计数;

本例中,用户输入的参数是新的ID值,格式为:

“-j ID --set-id id_value ”

id_value 为id的实际数值。

libipt_id.c函数就是填写structiptables_target结构,然后定义动态库初始化函数_init()将该结构挂接到iptables的选项链表中。程序在libipt_id.c的基础上修改,程序比较简单,直接将代码列出,相关说明在注释中:

/* libipt_id.c */

/* Shared library add-on to iptables to add ID target support.*/

#include <stdio.h>

#include <string.h>

netfilter 无锁_netfilter 锁开销_netfilter

#include <stdlib.h>

#include <getopt.h>

#include <iptables.h>

#include <linux/netfilter_ipv4/ip_tables.h>

#include <linux/netfilter_ipv4/ipt_ID.h>

struct idinfo {

struct ipt_entry_target t;

struct ipt_id_target_info id;

};

/* Function which prints out usage message. */

static void

help(void)

{

unsigned int i;printf(

"ID target v%s options:n"

" --set-idvalueSet ID of IP headeren",

IPTABLES_VERSION);

}

// opts结构第一个参数为选项名称,

// 第二个参数为1表示选项名称后还带参数,为0表示选项名称后不带参数

// 第3个参数是标志,表示返回数据的格式,一般都设为0


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

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

    • 王狄
      王狄

      要的不就是不断的在变化吗

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