免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 39160 | 回复: 35
打印 上一主题 下一主题

[网络子系统] linux-2.6.35.6 xtables&iptables&hipac [复制链接]

论坛徽章:
0
跳转到指定楼层
[收藏(0)] [报告]
发表于 2012-05-30 12:12 |只看该作者 |正序浏览
本帖最后由 pywj777 于 2012-05-30 13:06 编辑

之前总是拜读“独孤九贱”兄的大作,受益匪浅。现也将自己的一些总结分享给大家,由于语言组织能力较差,所以多上图,少上字。

Xtables提供的资源



struct  xt_af  xt[]结构数组
该数组用于挂载各个协议的match和target资源。由于写者(添加、删除)和读者(查找)都是在内核空间进程上下文执行,所以它们只需要用xt[n].mutex信号量进行互斥。读者(查找)在将规则关联上一个match或target时会增加它们所在模块的引用计数,在它释放这个引用计数之前该模块是不会被卸载的,所以另外一个读者(规则匹配)在软中断中可以放心的使用,不需加任何锁。
  • xt_register_match(struct xt_match *match)与xt_unregister_match(struct xt_match *match)
    用于在xt[]数组上挂载对应协议的match,由于它们都是在内核空间的进程上下文被使用,所以它们使用mutex_lock(&xt[af].mutex)信号量进行加锁和解锁。(写者)
  • xt_register_target(struct xt_target *target)与xt_unregister_target(struct xt_target *target)
    用于在xt[]数组上挂载对应协议的target,由于它们都是在内核空间的进程上下文被使用,所以它们使用mutex_lock(&xt[af].mutex)信号量进行加锁和解锁。(写者)
  • struct xt_match *xt_find_match(u8 af, const char *name, u8 revision)与struct xt_target *xt_find_target(u8 af, const char *name, u8 revision)
    用于在xt[]数组中查找对应协议的match或target与对应规则相关联,并增加match和target所在模块的引用计数。由于它们都是在内核空间的进程上下文被使用,所以它们使用mutex_lock(&xt[af].mutex)信号量进行加锁和解锁。同时内核在软中断中进行规则匹时配,它引用规则关联的match和target是安全的,因为match和target所在模块由于引用计数是不会被释放的。(读者)
  • 由于有一个读者是在软中断的中,并且有多个CPU同时使用,是否需要其它保护。答:不需要。因为如果软中断中引用的规则使用了某个match或target,则拥有该match和target模块的引用计数会被加1,该模块将不会被卸载(这也就要求在调用xt_unregister_match()或xt_unregister_target()时必须先判断它们所在模块的引用计数,通常它们被放在模块注销函数中)。如果引用计数为0,则说明没有规则引用该match或target,则在软中断中也不会使用它。


net.xt.tables[]网络命名空间协议链表
该命名空间协议链表用于将不同协议的table表挂到对应协议链表中。
写者(添加、删除)table表都在内核空间进程上下文执行,又由于它需要检查该表与注册的target、match名字不冲突,所以他们只需要用xt[n].mutex信号。
读者在软中断中通过HOOK引用这些表,所以在写者(添加、删除)之前一定要保证没有读者在操作。添加表操作一定要先通过xt_register_table()添加一个表,然后再通过xt_hook_link()使HOOK能够引用这些表;删除表操作一定要先通过xt_hook_unlink()去掉HOOK对表的引用,然后再通过xt_unregister_table()删除一个表。
  • struct xt_table *xt_register_table(struct net *net, const struct xt_table *input_table, struct xt_table_info *bootstrap, struct xt_table_info *newinfo)
    主要是复制input_table到table表,并将newinfo(由调用该函数模块提供的私有数据xt_table_info)与该表的table->private指针相关联,然后根据该表指定的协议挂入对应的net.xt.table[table->af]链表中。它使用xt[n].mutex信号进行加锁(如上所述)。
  • void *xt_unregister_table(struct xt_table *table)
    主要是将table从net.xt.table[table->af]链表中取下来,并返回table->private指针指向的xt_table_info数据。它使用xt[n].mutex信号进行加锁(如上所述)。
  • struct nf_hook_ops *xt_hook_link(const struct xt_table *table, nf_hookfn *fn)与void xt_hook_unlink(const struct xt_table *table, struct nf_hook_ops *ops)
    主要是利用xt_table结构和钩子函数构造出nf_hook_ops钩子项,然后调用nf_register_hooks()或nf_unregisgter_hooks()函数来注册或注销ipv4协议对应点的钩子函数,这两个函数主要用在内核空间的进程上下文。由于nf_regisgter_hooks()已提供了保护,所以它们不需要任何形式的锁保护。

评分

参与人数 2可用积分 +22 收起 理由
embeddedlwp + 10 赞一个!
send_linux + 12 赞一个!

查看全部评分

论坛徽章:
0
35 [报告]
发表于 2017-03-06 15:23 |只看该作者
你好,你的文章太好了,话不在多在而在精,跪服的同时有个问题我怀疑下:关于iptables如何组织规则与内核通信,个人觉得这幅图有问题。我的理由:

(1)用户自定义的链和用户自定义链的规则在内建链之后
(2)forward链之后是LOCAL_OUT
所以我觉得这张图有问题,LOCAL_OUT没有画出来,个人感觉应该用户自定义链在LOCAL_OUT之后,可是这幅图却在FORWARD之后

论坛徽章:
0
34 [报告]
发表于 2017-03-06 15:21 |只看该作者
你好,你的文章太好了,话不在多在而在精,跪服的同时有个问题我怀疑下:关于iptables如何组织规则与内核通信,个人觉得这幅图有问题。我的理由:

(1)用户自定义的链和用户自定义链的规则在内建链之后
(2)forward链之后是LOCAL_OUT
所以我觉得这张图有问题,LOCAL_OUT没有画出来???

论坛徽章:
0
33 [报告]
发表于 2015-11-19 14:32 |只看该作者
多谢楼主奉献,受益匪浅!

论坛徽章:
0
32 [报告]
发表于 2015-08-26 19:39 |只看该作者
mark一下~学习~

论坛徽章:
0
31 [报告]
发表于 2014-01-24 17:11 |只看该作者
mark一下,学习了

论坛徽章:
0
30 [报告]
发表于 2014-01-03 17:00 |只看该作者
请问 为什么 一个读者(规则匹配)在软中断中可以放心的使用,不需加任何锁。 这个没有看懂。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
29 [报告]
发表于 2013-06-26 22:56 |只看该作者
回复 27# remaper

是不是这篇帖子解答了你长久以来的困惑。

   

论坛徽章:
0
28 [报告]
发表于 2013-06-26 22:00 |只看该作者
回复 27# remaper

先谢过了,去上海的话一定联系你
   

论坛徽章:
0
27 [报告]
发表于 2013-06-26 15:11 |只看该作者
pywj777如果你在上海我一定请你吃饭

论坛徽章:
0
26 [报告]
发表于 2013-05-20 21:53 |只看该作者
本帖最后由 pywj777 于 2013-05-21 12:05 编辑

在使用状态检查和fast patch时hipac在吞吐方面没有什么优势。但在新建方面还是有明显优势的,当规则达到3000条时,性能可提高10倍。
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP