PPPoE拨号调试

来源:互联网 发布:美国重要经济数据 编辑:程序博客网 时间:2024/04/30 01:29

因为公网和230项目的PPPoE都已调通,而应用于1800项目的PPPoE没有做大的变动,故PPPoE代码流程不会出问题。

建立拨号后,附着,然后拨号,失败,拨号始终显示『正在连接,通过WAN微型端口』,通过EtheralePPPoED包显示,客户端一直在发PADI广播包,而我们的Server代码没有回PADO包,此时根据Console窗口LOG打印查到我们解析PADI包时,根据其协议域值switch处理时进入了default分支(异常分支例default分支一定要加打印,便于追根溯源),重跑,打印解析出的PADI包协议域值是0x6388,而实际发现阶段包的协议域值是0x8863,怀疑是大小端问题,PPPoE的代码一直是大端代码没有转过,故ARM板卡是小端的。230项目的板卡也是ARM的,故230PPPoE大小端转换可以参考。

代码中,组包时,uint8字段不用转,uint16uint32字段需要用ntohsntohl进行转换,主要是packet payload长度和type值等,需对比所有源文件,开始只对比了pppoe_attach.cpp,而忽略了fsm.cpplcp.cppipcp.cpp,不全面对比只是想当然地改一点跑一次肯定会事倍功半!

转过PADI包的协议域值为大端后,PADI包处理函数处理错误,在各错误分支增加打印后,发现函数入口处判断当前未附着,原因是DM代码在附着成功后没设PPPoE里的附着标志位。

修改后,拨号仍失败,抓包显示LCP发的配置请求都被拒绝了,查看LCP配置请求包的值,发现包净荷的长度值异常,有2000多字节,超过最大值,原因为fsm.cpp中此值未转大端。

修改后,拨号成功但无任何图标显示,需要在网络连接里刷新才能看到已连接,查看抓包发现在IPCP协商完成后,我们会异常收到一个CCP包,不知是否因此产生影响,原因未知。

查看拨号成功后的IP地址信息显示,发现为3.1.168.192,与核心网分配的(PPPoEDM读取的)192.168.1.3正相反,仍是大小端问题,故在ipcp_init处转此IP值为大端后,显示正确。

 

遗留问题:

1,  蒙奇奇大小端转换宏

2,  DMDebugTools里不打印

3,  拨号成功后的CCP

4,  为什么必须刷新后才能显示已连接

5,  230PPPoE代码修改点

 

代码学习:

1,打印一个结构体变量的码流,只需定一个指针指向它,然后打印指针即可

原创粉丝点击