iptables 源码分析
2007-03-07 12:42:27 来源:WEB开发网核心提示: list_entries是规则显示的主要处理函数,Options是显示的标志变量:OPT_VERBOSE:对应-vOPT_NUMERIC:对应-nOPT_EXPANDED:对应-xOPT_LINENUMBERS: -l看来很简单,iptables 源码分析(6),说了这么大一圈子,就是调用
list_entries是规则显示的主要处理函数。
Options是显示的标志变量:
OPT_VERBOSE:对应-v
OPT_NUMERIC:对应-n
OPT_EXPANDED:对应-x
OPT_LINENUMBERS: -l
看来很简单,说了这么大一圈子,就是调用 iptc_init获取表的规则信息,调用list_entries函数显示规则。
1.1 表的查找
再回到iptc_init 函数上来,它根据表名,从内核获取对应的表的相关信息,handle是一个iptc_handle_t类型的指针,在libiptc.c中,有如下定义:
/* Transparent handle type. */
typedef struct iptc_handle *iptc_handle_t;
在Libip4tc中:
#define STRUCT_TC_HANDLE struct iptc_handle
在Libiptc.c中,可以找到STRUCT_TC_HANDLE的定义:
STRUCT_TC_HANDLE
{
/* Have changes been made? */
int changed;
/* Size in here reflects original state. */
STRUCT_GETINFO info;
struct counter_map *counter_map;
/* Array of hook names */
const char **hooknames;
/* Cached position of chain heads (NULL = no cache). */
unsigned int cache_num_chains;
unsigned int cache_num_builtins;
/* Rule iterator: terminal rule */
STRUCT_ENTRY *cache_rule_end;
/* Number in here reflects current state. */
unsigned int new_number;
STRUCT_GET_ENTRIES entries;
};
再来看看iptc_init函数,同样在在Libip4tc中,有如下定义:
#define TC_INIT iptc_init
更多精彩
赞助商链接