|
|
本帖最后由 qnchenying 于 2026-3-27 20:46 编辑
一、问题现象
- Web 界面配置IPv6 PPPoE 静态 WAN(使用全球单播地址),配置后接口地址、ifconfig 查询均正常;
- 重启 ONU 设备后,IPv6 地址自动变为本地链路地址,ifconfig 仅显示单个地址;
- 静态 IP 通过igdCmWanConnectionAdd接口配置,状态通过igdCmWanConnectionStateGet接口获取。
二、问题根因
设备重启过程中,上行链路(uplink)状态启动较慢,WAN 接口拉起时未检测到有效 uplink 状态,导致 PPPoE WAN 进程无法正常启动、PPPoE 接口未创建,最终静态 IPv6 地址配置静默失败;在线配置时上行链路已处于就绪状态,无此问题。
1、 正常全球单播地址配置消息
{"action":0,"link-up":true,"ip6addr":[{"ipaddr":"240e:3b6:30f2:77a1:e267:b3ff:fe24:1025","mask":"64"},"routes6":[{"target":"::","netmask":"0","gateway":"fe80::de2c:6eff:fe20:6e42","metric":1024,"valid":10000,"source":"::/0"},{"target":"::","netmask":"0","gateway":"fe80::de2c:6eff:fe20:6e42","metric":1024,"valid":10000,"source":"/0"},{"target":"::","netmask":"0","gateway":"fe80::de2c:6eff:fe20:6e42","metric":1024,"valid":10000,"source":"240e:3b6:30f2:77a1:e267:b3ff:fe24:1025/64"},"dns":[,"interface":"pppoe-wan1_4001_v6"}
2、异常本地链路地址消息
{"action":0,"ifname":"pppoe-wan1_4001","link-up":true,"address-external":true,"keep":true,"ip6addr":{"ipaddr":"fe80::d128:bf1c:76eb:674a","mask":"128"},"interface":"wan1_4001"}
- 本地链路地址消息由脚本下发,代表 PPPoE 接口已 UP;
- 核心区分点:本地链路消息包含 ifname 字段,全球单播消息无此字段。
三、解决方案
1、涉及修改文件
- hi_wan_link_event.c:修改__wan_ipv6_addr_proces函数
- hi_wan_func.c:修改hi_wan_qmsg_pre_proc函数
2、具体修改逻辑
- 消息补发机制
解析到携带 ifname 字段的本地链路地址消息时,判定为 PPPoE 接口已就绪,自动补发全球单播地址配置消息,补全静态 IP 配置。 - 地址配置放行
原逻辑中,重复地址会被过滤不执行配置;针对重启补发场景,新增标志位,仅对无 ifname 字段的全球单播地址消息放行配置,跳过重复地址校验,确保静态IP 成功下发。
四、解决方案验证
- 完成代码修改后编译升级固件;
- Web 配置 IPv6 PPPoE 静态 WAN(全球单播地址);
- 重启 ONU 设备,等待启动完成;
- 查看接口 IPv6 地址,确认保持配置的全球单播地址,无本地链路地址异常替换现象;
- 验证网络连通性,IPv6 业务正常运行。
五、总结
- 核心问题:重启时上行链路启动慢→PPPoE 进程未拉起→静态 IPv6 配置失败;
- 识别依据:本地链路消息含ifname,全球单播消息无该字段;
- 修复方案:监听 PPPoE 接口 UP 消息→补发静态 IP 配置→放行地址配置;
- 验证标准:重启后 IPv6 地址保持配置的全球单播地址,业务正常。
|
|