免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
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
11 [报告]
发表于 2010-06-21 17:35 |只看该作者
应该是利用conntrack可以加速路由

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
12 [报告]
发表于 2010-06-21 17:41 |只看该作者
回复 9# ShadowStar
难到没有人写过这个模块吗?我觉得这个应用挺广泛啊,应该早就有人写了这个模块才对啊???

论坛徽章:
0
13 [报告]
发表于 2010-06-21 17:52 |只看该作者
恐怕没有那么多的应该吧,也许以后会有人提交的,但目前确实没有

论坛徽章:
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
14 [报告]
发表于 2010-06-21 18:02 |只看该作者
再说即使有人写了,一定会open出来吗。

论坛徽章:
0
15 [报告]
发表于 2010-06-22 09:17 |只看该作者
回复  ShadowStar
难到没有人写过这个模块吗?我觉得这个应用挺广泛啊,应该早就有人写了这个模块才对啊? ...
瀚海书香 发表于 2010-06-21 17:41


早就写完了。不过由于公司制度不能open出来。

再说即使有人写了,一定会open出来吗。
Godbach 发表于 2010-06-21 18:02


网御也应该有这个功能吧?

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
16 [报告]
发表于 2010-06-24 14:53 |只看该作者
回复 15# ShadowStar
可以交流一下啊。
我研究了一下可以通过如下修改实现:
基于2.6.24.4内核


net/ipv4/route.c
< #include <linux/netfilter_ipv4.h>
< #include <net/netfilter/nf_conntrack.h>
< #include <net/netfilter/nf_conntrack_helper.h>
< #include <net/netfilter/nf_conntrack_l4proto.h>
< #include <net/netfilter/nf_conntrack_l3proto.h>
< #include <net/netfilter/nf_conntrack_core.h>
< #include <net/netfilter/ipv4/nf_conntrack_ipv4.h>
75d66
1724,1727d1714
<         /*if (res->fi && res->fi->fib_nhs > 1 && fl->oif == 0)
<                 fib_select_multipath(fl, res);*/
<         // change upper two lines
1729,1740c1716
<         {
<                 struct nf_conn *ct;
<                 enum ip_conntrack_info  ctinfo;
<                 ct=nf_ct_get(skb, &ctinfo);
<                 if(!ct||ctinfo==IP_CT_NEW||ctinfo==IP_CT_RELATED)
<                         fib_select_multipath(fl, res);
<                 else{
<                         if(fib_select_multipath_ct(fl,res,ct)==0)
<                                 fib_select_multipath(fl,res);
<                 }
<         }
---
>                 fib_select_multipath(fl, res);


net/ipv4/fib_semantics.c
< //return 0 means doesn't match
< int fib_select_multipath_ct(const struct flowi *flp, struct fib_result *res,struct nf_conn *ct)
< {
<         struct fib_info *fi = res->fi;
<         struct in_device *in_dev;
<         struct in_ifaddr *ifa;
<         spin_lock_bh(&fib_multipath_lock);
<         change_nexthops(fi) {
<                 in_dev=in_dev_get(nh->nh_dev);
<                 if(!in_dev)
<                         continue;
<                 rcu_read_lock();
<                 if (!(nh->nh_flags&RTNH_F_DEAD) &&in_dev->ifa_list){
<                         /*&&(in_dev->ifa_list==ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.u3.ip||nh->nh_gw==ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.u3.ip) {*/
<                         for(ifa=in_dev->ifa_list;ifa;ifa=ifa->ifa_next){
<                                 if(ifa->ifa_local==ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.u3.ip&&inet_ifa_match(nh->nh_gw,ifa))
<                                         break;
<                         }
<                         rcu_read_unlock();
<                         in_dev_put(in_dev);
<                         if(ifa){
<                                 printk(KERN_INFO "Match %u.%u.%u.%u\n",NIPQUAD(ifa->ifa_local));
<                                 res->nh_sel=nhsel;
<                                 spin_unlock_bh(&fib_multipath_lock);
<                                 return 1;
<                         }
<                 }
<                 rcu_read_unlock();
<                 in_dev_put(in_dev);
<         } endfor_nexthops(fi);
<         spin_unlock_bh(&fib_multipath_lock);
<         return 0;
< }
---
>

include/net/ip_fib.h
< #include <linux/netfilter_ipv4.h>
< #include <net/netfilter/nf_conntrack.h>
< #include <net/netfilter/nf_conntrack_helper.h>
< #include <net/netfilter/nf_conntrack_l4proto.h>
< #include <net/netfilter/nf_conntrack_l3proto.h>
< #include <net/netfilter/nf_conntrack_core.h>
< #include <net/netfilter/ipv4/nf_conntrack_ipv4.h>
<
< extern int fib_select_multipath_ct(const struct flowi *flp, struct fib_result *res,struct nf_conn *ct);

论坛徽章:
0
17 [报告]
发表于 2010-06-24 15:44 |只看该作者
实验结果怎么样?

论坛徽章:
0
18 [报告]
发表于 2010-06-24 16:10 |只看该作者
回复  ShadowStar
可以交流一下啊。
我研究了一下可以通过如下修改实现:
基于2.6.24.4内核


net/i ...
瀚海书香 发表于 2010-06-24 14:53


你做的太复杂了,完全没必要。

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
19 [报告]
发表于 2010-06-24 16:30 |只看该作者
回复 17# platinum
理论上应该是可以的,还没有具体测试呢。嘿嘿

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
20 [报告]
发表于 2010-06-24 16:31 |只看该作者
回复 18# ShadowStar
愿闻其详。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP