免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: 瀚海书香
打印 上一主题 下一主题

linux多路路由保持长链接的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-06-25 15:35 |显示全部楼层
回复 37# 瀚海书香


我觉得应该可以
你在 route 后注册一个 netfilter hook,如果 skb 里有 dst 则把 __refcnt 加 1
并且把 dst 指针写到 nf_conn 结构里
在 route 前再注册一个 netfilter hook,如果有 ct 则把 dst 指针从 ct 里提出来复制到 skb 里,同时把 __refcnt 减 1

论坛徽章:
0
12 [报告]
发表于 2010-06-25 15:53 |显示全部楼层
nf_conn 里有个 secmark,是个 32bit 变量
如果你的系统用不到这个内容,且在内核编译时将 secmark 编译进了 nf_conn,且你的系统又是 32bit 的
那么,你可以利用这个 u_int32_t 来存放一个指针,因为在 32bit 系统里指针恰好也占用 4bytes

论坛徽章:
0
13 [报告]
发表于 2010-06-25 16:31 |显示全部楼层
回复 41# ShadowStar

请教 ShadowStar 兄,为什么说需要正反两个指针
意思是不是说,NAT 状态下,route 前后 skb 里的 dst 是不一样的,所以要跟踪维护 route 前后的两个 dst 指针地址?

至于两个 dst 指针的问题,我的解决办法是
1、实在不行就把 mark 也用起来,但这样不安全,毕竟 iptables 模块可能会修改 mark,这样会造成内核崩溃
2、如果怕不安全,就用 secmark 指向一个自己定义的 struct 地址,struct 里存放两个 dst

论坛徽章:
0
14 [报告]
发表于 2010-06-25 16:32 |显示全部楼层
这个secmark在什么情况下会用到?
瀚海书香 发表于 2010-06-25 16:29


好像 IPSEC 会用到,其他不太清楚
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP