-
2004-03-01
修改linux kernel 使ttl 不减的方法
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://skyhorse.blogbus.com/logs/106607.html
(这篇文章写于2002年年中)
花了一个星期搭建测试硬件环境和分析中教台多播数据。
又花了一个星期看mrouted源代码,尝试各种方法。
星期五认为是该改内核,改完源码编译,当天晚上从卡拉ok比赛回来发现就行了。
修改linux kernel源代码的方法:相关文件:
/usr/src/linux/include/net/ip.h
/usr/src/linux/net/ipv4/ipmr.c
/usr/src/linux/net/ipv4/ip_forward.cvi ipmr.c
line:1191ip_decrease_ttl(iph);
------>
/* ip_decrease_ttl(iph); */
vi ip_forward.c
line:126ip_decrease_ttl(iph);
------>
/* ip_decrease_ttl(iph); */
其他相关内容说明:1.
linux对收到的组播报文挂ip_mr_input 先会去查找转发用组播路由cache,,找到 cache会调ip_mr_forward(skb, cache, local)转发。在ip_mr_forward中有一步是判断ttl的如下:
其中将 > 改为 >= 应该也可以的。但是我没有时间试了,因为我只有一台卫星接收测试机(没有光驱),刚重装过。麻烦。
for (ct = cache->mfc_un.res.maxvif-1; ct >= cache->mfc_un.res.minvif; ct--) {
if (skb->nh.iph->ttl > cache->mfc_un.res.ttls[ct]) {
if (psend != -1)
ipmr_queue_xmit(skb, cache, psend, 0);
psend=ct;
}
}2.如果有其他需要,要将ttl+1或+更大值,可以在这里修改,但是我没试过。
其意义在于本来只能在局域网内播发的数据可以传得更远,跨更多路由器(前提是路由器支持组播)
cat ip.h
line:178
return --iph->ttl;将 -- 操作 改为 ++之类。
3. 中教台的节目单也分为两个,ttl=1的两个ip数据正好在其中一个节目单中,该节目单的ttl也是1。
接收端软件将2个节目单合并之后总共得到7个ip节目.
mpeg4的节目流则全部都是合格的,都可以在局域网内收到。
ttl=1 是历史原因造成的,可能是因为两个发送端的软件版本不一致。
发送节目单也是2台不同的机器一起发,一台是192.168.10.26, 一台是192.168.10.144。192.168.10.26.1200 > 239.230.70.70.1200: udp 386
192.168.10.144.1200 > 239.230.70.70.1200: udp 279 [ttl 1]
历史上的今天:
oracle有关的时间相关的sql(转载) 2004-03-01lvs集群实例安装文档 2004-03-01有关oracle高可靠性的一些讨论和想法 2004-03-01在线HTML编辑器的调用方法和使用方法详解(转载) 2004-03-01随机文章:
我爱ubuntu 2006-07-05IFT 3102 磁盘阵列的双机共用方法 2004-05-142002-12 unix下挂接磁盘阵列 2004-04-25系统运行部情况介绍2001年1月17日 2004-04-252002-6-13某单位出差报告及用户需求分析,以及远程教育相关思考 2004-04-25
收藏到:Del.icio.us
引用地址:








评论