解决海信 LTF7263 喵棒插入光纤后“死机”现象一例

2022-09-21 21:37:03 +08:00
 wsxhwyy

海信的 LTF7263 一直是 10G EPON Stick 的首选方案之一,但海信的固件兼容性比较差,时常出现买家买到后发现与自己的线路不兼容的情况,LZ 就是受害者之一。

问题的表现为在没有插入光纤的时候,可以通过 telnet 和 SSH 访问,设置 MAC 、LOID 等参数,但在插入光纤后,SSH 和 telnet 断开,ping 无响应,探测不到 PPPoE server ,疑似“死机”。

使用卖家提供的 debug 方法获取 OLT 注册的日志: 开启一个 SSH 连接用来输出日志,然后开启一个 telnet 连接到管理命令行:

$ telnet 192.168.0.1 2233
...
Cortina>enable
Cortina#config
Cortina(config)#ssh-debug /dev/pts/0
Cortina(config-oam)#debug oam 8
Cortina(config-oam)#debug oam-org 8
Cortina(config-oam)#pkt-dump all

日志会输出到 SSH 所在的窗口,插入光纤,SSH 窗口输出以下 log 后连接中断:

...

ctc_oam_onu_vlan_set(): L2806, index is Valid, index = 1 

ctc_oam_onu_vlan_set(): L2816, vlan mode = 1 

ctc_oam_onu_vlan_set(): L2825, default vlan tpid:0x8100, tag:0x1 

ctc_oam_onu_tag_vlan_set_adapt: oam_port = 1, TPID = 0x8100, tag = 0x1
_ctc_add_def_vlan(): L1691, PVID 1 on oam_port 1

用同样的方法在 LZ 手上另一条 LTF7263 可以成功注册的线路上抓取 log ,工作正常的 log 为:

...

ctc_oam_onu_vlan_set(): L2806, index is Valid, index = 1

ctc_oam_onu_vlan_set(): L2816, vlan mode = 0

ctc_oam_onu_transparent_vlan_set_adapt(): L2363, oam_port = 1, vlan_mode: transparent

...

故猜测是 OLT 侧配置的区别,工作正常的线路 OLT 侧配置为 VLAN tranparent 模式,“死机”的线路 OLT 侧配置为 VLAN tag 模式,由于固件中的 bug ,在设置 VLAN 的时候,丢失了 LAN 侧的 IP ,又由于 OLT 侧下发的 VLAN 并不是 PPPoE 所在的真实 VLAN ,导致探测不到 PPPoE 服务器。

询问卖家后得知 LTF7263 并没有可用的固件更新,故 LZ 尝试自行修改固件绕过这个 bug 。思路是忽略掉 OLT 下发的 VLAN 模式配置,强制使用 VLAN 透传模式。

日志中的信息比较充足,有函数名行号等信息,通过按 string filter 可以得到与 OLT 注册相关的逻辑全部在 /usr/lib/libca-oam.so.1.0.0 中,通过反汇编这个 so 文件,定位到函数 ctc_oam_onu_vlan_set() ,之后就可以通过 printf 输出的行号等信息查找到 vlan mode 所在的地址:

...
0x0000000000000174:  38 00 A8 8F    lw    $t0, 0x38($sp)
0x0000000000000178:  00 0B 03 24    addiu $v1, $zero, 0xb00    // 行号 0xb00 = 2816
0x000000000000017c:  04 00 09 91    lbu   $t1, 4($t0)          // 读取 vlan mode
0x0000000000000180:  18 00 A3 AF    sw    $v1, 0x18($sp)
0x0000000000000184:  2C 80 83 8F    lw    $v1, -0x7fd4($gp)
0x0000000000000188:  E4 83 99 8F    lw    $t9, -0x7c1c($gp)
0x000000000000018c:  40 00 A2 AF    sw    $v0, 0x40($sp)
0x0000000000000190:  EC 0A 63 24    addiu $v1, $v1, 0xaec
0x0000000000000194:  3C 00 A8 AF    sw    $t0, 0x3c($sp)
0x0000000000000198:  1C 00 A9 AF    sw    $t1, 0x1c($sp)       // 将 vlan mode 写入 printf 参数
0x000000000000019c:  38 00 A9 AF    sw    $t1, 0x38($sp)
0x00000000000001a0:  14 00 B0 AF    sw    $s0, 0x14($sp)
0x00000000000001a4:  10 00 A3 AF    sw    $v1, 0x10($sp)       // 将行号写入 printf 参数
0x00000000000001a8:  25 38 00 00    move  $a3, $zero
0x00000000000001ac:  08 00 06 24    addiu $a2, $zero, 8
0x00000000000001b0:  05 00 05 24    addiu $a1, $zero, 5
0x00000000000001b4:  09 F8 20 03    jalr  $t9                  // 调用 printf
0x00000000000001b8:  25 20 00 00    move  $a0, $zero
...

将对应的位置改为:

0x000000000000017c:  25 48 00 00    move  $t1, $zero           // 强制设置 vlan mode = 0

把修改过的 so 文件复制到 LTF7263 中覆盖原始固件,重启之后插入光纤,log 中显示已强制使用 vlan transparent 模式:

...

ctc_oam_onu_vlan_set(): L2806, index is Valid, index = 1

ctc_oam_onu_vlan_set(): L2816, vlan mode = 0

ctc_oam_onu_transparent_vlan_set_adapt(): L2363, oam_port = 1, vlan_mode: transparent

...

“死机”现象不再出现,查看后续 log 显示 OLT 注册成功,对应的 VLAN 可以探测到 PPPoE server ,拨号后测速达标,问题解决。希望海信的工程师可以在后续的固件中彻底修正这个问题。

4839 次点击
所在节点    宽带症候群
32 条回复
monkeybape
2022-09-24 03:00:05 +08:00
大佬厉害了 原本因为不兼容家里宽带的 7263-BH+已经放抽屉很久了 因为线路的 OLT 是 MA5800-X15 使用猫棒的时候也是死机 用的你的方法替换后已经成功拨上号了
zhangyoufu
2022-09-24 15:54:15 +08:00
想当初我也改 OAM 和局端对抗了几个回合,后来局端直接给我把 ONU 刷成砖了
ycsos
2022-09-24 16:07:10 +08:00
大佬太牛逼了,我曾经搞过 7263-BH+ 当时设置完 LOID 之后就死机连不上了,还以为是模块因为兼容性问题搞挂了,发回卖家卖家发现能连上,但后来换成了 8055 ,现在看来就是这个原因。当时还盛传是华为的 OLT 做了端对端加密导致第三方的 ONT 没办法直接使用,必须是华为的 ONU 才行看来也是谣言。真心给大佬点赞
hema888
2022-09-25 00:00:29 +08:00
大佬能共享一下修改过的文件吗
myzony
2022-11-11 23:35:44 +08:00
@wsxhwyy 大佬反汇编工具用的什么? 我也遇到这种情况,插上光纤就死掉了,但是 debug 显示的地方与你不一样。
myzony
2022-11-12 01:05:34 +08:00
@wsxhwyy 感谢楼主的解决方案,成都电信已经成功解决。

但是当中遇到一些问题,比如 nc 传输文件的时候到一半就中断了,重试了几次都不行。还好猫棒固件自带有 tftp ,在 linux 用 docker 搭建了一个 tftp 解决了文件传输的问题。

楼主牛逼嗷!
HolyGu
2022-11-22 16:39:05 +08:00
江苏电信通过楼主的方法可以成功拨上号了,但是速度只有 100M ,使用光猫的情况下是可以跑满 1000M 的,这是啥情况,是运营商做了策略嘛
guanyinhang
2023-01-26 16:18:01 +08:00
正愁花大价钱搞的猫棒方案没法用的时候,用楼主的方法解决了,感谢楼主

顺便分享一下打过补丁的 libca-oam

https://share.weiyun.com/CR5M6yzc
Haruka007
2023-04-22 14:30:26 +08:00
大佬请教下,我这边 nc 把 so 导进去,结果 md5 值变了是咋回事
guanyinhang
2023-04-22 18:01:16 +08:00
@Haruka007 楼主用的命令 nc 192.168.0.100 5000 < /dev/null > libca-oam.so.1.0.0 有可能导致文件没发完整,用 nc 192.168.0.100 5000 > libca-oam.so.1.0.0 等 5 秒左右按 ctrl+c 手动中止传输就行
Haruka007
2023-04-23 00:14:41 +08:00
@guanyinhang 我后来是拆分成小包传的,大了就传不完。 现在遇到新问题,pppoe 拨号在 vlan 口上没成功
huangya
2023-05-08 13:52:22 +08:00
楼主,我最近也在折腾。我比较好奇,这个库是被哪个程序调用的,这个你知道吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/881974

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX