PPPoE拨号调试
来源:互联网 发布:美国重要经济数据 编辑:程序博客网 时间:2024/04/30 01:29
因为公网和230项目的PPPoE都已调通,而应用于1800项目的PPPoE没有做大的变动,故PPPoE代码流程不会出问题。
建立拨号后,附着,然后拨号,失败,拨号始终显示『正在连接,通过WAN微型端口』,通过Etherale抓PPPoED包显示,客户端一直在发PADI广播包,而我们的Server代码没有回PADO包,此时根据Console窗口LOG打印查到我们解析PADI包时,根据其协议域值switch处理时进入了default分支(异常分支例default分支一定要加打印,便于追根溯源),重跑,打印解析出的PADI包协议域值是0x6388,而实际发现阶段包的协议域值是0x8863,怀疑是大小端问题,PPPoE的代码一直是大端代码没有转过,故ARM板卡是小端的。230项目的板卡也是ARM的,故230的PPPoE大小端转换可以参考。
代码中,组包时,uint8字段不用转,uint16和uint32字段需要用ntohs和ntohl进行转换,主要是packet payload长度和type值等,需对比所有源文件,开始只对比了pppoe_attach.cpp,而忽略了fsm.cpp,lcp.cpp和ipcp.cpp,不全面对比只是想当然地改一点跑一次肯定会事倍功半!
转过PADI包的协议域值为大端后,PADI包处理函数处理错误,在各错误分支增加打印后,发现函数入口处判断当前未附着,原因是DM代码在附着成功后没设PPPoE里的附着标志位。
修改后,拨号仍失败,抓包显示LCP发的配置请求都被拒绝了,查看LCP配置请求包的值,发现包净荷的长度值异常,有2000多字节,超过最大值,原因为fsm.cpp中此值未转大端。
修改后,拨号成功但无任何图标显示,需要在网络连接里刷新才能看到已连接,查看抓包发现在IPCP协商完成后,我们会异常收到一个CCP包,不知是否因此产生影响,原因未知。
查看拨号成功后的IP地址信息显示,发现为3.1.168.192,与核心网分配的(PPPoE从DM读取的)192.168.1.3正相反,仍是大小端问题,故在ipcp_init处转此IP值为大端后,显示正确。
遗留问题:
1, 蒙奇奇大小端转换宏
2, DM在DebugTools里不打印
3, 拨号成功后的CCP包
4, 为什么必须刷新后才能显示已连接
5, 230PPPoE代码修改点
代码学习:
1,打印一个结构体变量的码流,只需定一个指针指向它,然后打印指针即可
- PPPoE拨号调试
- PPPOE拨号
- pppoe拨号
- uclinux 下PPPoE 拨号
- VC实现PPPOE拨号
- PPPoE拨号过程解析
- PPPOE拨号过程
- ubantu pppoe拨号
- Android 实现PPPoE拨号
- Android 实现PPPoE拨号
- PPPoE拨号流程
- VC实现PPPOE拨号
- OpenWrt之PPPoE拨号
- PPPoE拨号流程
- PPPoE拨号流程
- PPPoE拨号流程
- 华为配置PPPOE拨号
- PPPoE拨号流程
- 最近的目标
- js特效-渐现进入菜单、窗口
- Window Mobile 用户自定义控件问题
- Android体系结构学习
- 深圳福田北大青鸟太垃圾了,没有学员去学,居然在网上挑些有linux文章的人充当学员
- PPPoE拨号调试
- DOS命令大全(经典收藏)
- dtd要下载的
- 字符串表示形式—字符数组和字符指针的区别
- js特效-渐现菜单
- 嘿嘿。
- 如何快速获得积分啊
- 将命令的返回值赋给变量
- 多学一些还是有用的