iptables 源码分析
2007-03-07 12:42:27 来源:WEB开发网核心提示: 如果前面只是热身的话,那么从现在开始,iptables 源码分析(5),就进入实质性阶段了:do_command函数最后一个参数handle,是一个指向了具体表,再次获取*/if (!*handle) {/* try to insmod the module if iptc_init fa
如果前面只是热身的话,那么从现在开始,就进入实质性阶段了:
do_command函数最后一个参数handle,是一个指向了具体表,如filter、nat表的句柄,这里判断,如果handle为空,则调用iptc_init,根据table的名称,让handle指针指向相应的表的地址空间,也就是把对应表的所有信息从内核中取出来:
/* only allocate handle if we weren't called with a handle */
if (!*handle)
*handle = iptc_init(*table);
/*如果获取换败,将试着插入模块,再次获取*/
if (!*handle) {
/* try to insmod the module if iptc_init failed */
iptables_insmod("ip_tables", modprobe);
*handle = iptc_init(*table);
/*仍然失败,则退出*/
if (!*handle)
exit_error(VERSION_PROBLEM,
"can't initialize iptables table `%s': %s",
*table, iptc_strerror(errno));
/*继续进行一些简单的判断*/
if (command == CMD_APPEND
|| command == CMD_DELETE
|| command == CMD_INSERT
|| command == CMD_REPLACE) {
/*List命令不在判断之列,暂时不分析*/
}
/*判断命令标志,调用相关函数进行处理*/
switch (command) {
case CMD_LIST:
ret = list_entries(chain,
options&OPT_VERBOSE,
options&OPT_NUMERIC,
options&OPT_EXPANDED,
options&OPT_LINENUMBERS,
handle);
}
更多精彩
赞助商链接