【大杂烩】杂7杂8的东西

2013.8.21
今天是第一天搬到5栋,新的环境,新的面孔。工作上暂时没有安排,可以先看看资料,早上把iptables重新看了一下,整理了一下链和表的关系,并且在MR3080上进行了实验。

2013.8.27
项目移交整理,发现很多项目的状态不清楚,平时要注意整理啊。
无线学习;

2013.8.30
香 港的E3276 modem出现了问题,和俄罗斯的不一样,产品部的人提出异议,导致要挖svn的版本问题。后来通过抓包分析,发现拨号参数不一样的,而且可能获取 DHCP IP的方式也不一样。对LTE获取IP的方式还是有一定的疑惑,是通过分析AT^DHCP的结果,还是发DHCP request呢?看代码,AT^DHCP的结果是没有被使用的,WAN口的网关和DNS是DHCP reply后的执行的操作。
IPv6的疑问,主要RADVD的问题,这个放了很久了,记忆有点模糊了,要翻看邮件。

2013.9.1
协助手机组解决香港E3276的问题,分析了报文,给了意见。阅读无线web_server上层设置的代码。
了解TP OEM的升级问题,每个OEM都有一个OEM ID,这个ID写入到机型的conf文件中的PRODUCT_VERSION字段中,如乌克兰KS版软件的conf文件中:
PRODUCT_VERSION     = 0x00790001

2013.9.3
741 ks 乌克兰语版本准备提测,昨天更新了代码,jenkins上的代码选项需要修改;
看了无线的管理帧的作用,内容很多,不能全部记住,只能知道有这么一个帧,具体的内容用到的时候再查
晚上加班看了一下cdc_ncm驱动,特别是对比了3.11版本,发现修改很大,ncm_dev中增加了好几个modem设备,修改了2.6.31的cdc_ncm.c编译了一个软件发给香港协助测试;

2013.9.4
工 作遗漏,原来的TL-MR3220(RU) 2.0还没有进行金线换铜线切换,对比过代码,发现该版本在去年1月22号拉出来的独立分支,而金线换铜线是在3月开始的,完成后并没有进行代码的合并。 俄语版和通用版分支的代码页很久没有合并了,这个后续需要整理一下。NEXXT的OEM软件需要马上准备,本周5前需要提交测试。分析了英国IDNET用 户反馈的PPPoEv6 接入方式的IP地址获取方式,发现时通过RADVD进行获取的。

2013.9.5
编译pw-3g401d的代码,还有在此基础上制作OEM ARN01154U4 1.0的软件,jinkens上OEM的权限必须使用root,否则出现创建设备节点错误导致软件不能启动,使用Slave.VmLinux节点编译OEM软件。
调试了软件无线设备启用的问题,发现现在的函数接口很怪,通过设置两个全局变量进行判断是被是否生效,是否up,将这个函数修改并测试;
下午将软件发送给OEM课,和黄宜谊沟通过,需要准备铜线版软件。

2013.9.6
上午协助测试了GMT时间获取失败的问题,下午和新员工开了个小会议,了解一下新员工当前的学习情况和有什么问题。

2013.9.9
看了powerpc的ipv6部分的代码和客户反馈回来的需求

2013.9.10
昨天和产品部邮件讨论了TL-WR710N(EU) 2.0 TL-WR710N(UK) 2.0和具体要求,发现和立项报告中描述的不一样,定下了具体的处理细节。
下午完成了ISP支持IPv6接入技术要求.doc并发出了产品部同事,接下来看是否有需求继续晚上这些接入方式。
华为的E3276还在解,但是没有一个质的飞跃,还是在debug解决,方法并不多,这个由点悲剧了。
741KS版和3220RU还有proware 3g401d需要提测了,本周内完成。

2013.9.11
提测,无线学习;

2013.9.12
无线学习,协助mobile组解决E3276,提测;

2013.9.13
整理维护的项目,新立项TL-WD1023 2.0俄语版,准备pw-3g401d的提测工作。

2013.9.14
加班回来看了几款IPv6路由器的界面,和我司ADSL组的界面设置。验证了在IP盘地址修改后接口会发送RS报文。
和boss聊工作,如何教导新员工,个人定位问题;
第一:提高自己的威望(技术能力,组织能力);
第二:引导新员工思考分析问题,而不是手把手教导;
第三:利用自己的经验对项目的风险进行评估,安排员工的工作进度;
第四:项目评估,引入某个功能,对性能的影响,距离,icache;
第五:进入新的领域,沟通和讨论的重要性;

2013.9.16
今天主要是参与qifan博士的无线培训课程,刚开始讲得很细致,从无线传输的电波的波形开始,到OFDM,BPSK,QPSK,16QAM等,偏理论。下午讲11n的MAC和PHY,不是很懂,要看PPT和书;

2013.9.17
上 午继续参与培训,802.11ac,下午整理IPv6的接入方式,并且编码实现。第一个是slaac的或的前缀和长度,需要传送到用户态空间,可以利用 addrconf.c中邻居发现的参数。晚上开始调试,发现powerpc的编译出现问题,没有编译成功,原因是无线驱动中的app没有权限。这个我自己 也有问题,想偷懒,全部编译代码,
不要太懒,踏踏实实做好每一步都调试。

2013.9.22
跟踪工厂反馈的RU 版长按RESET/WPS键会出现死机现象,跟踪过代码,是因为进入了TFTP Recovery功能。
配置svn的权限,开通了ap136的代码权限。台风,下午5点就下班了,来深圳第一次遇到这种事情。

2013.9.24
提测软件,编写SLAAC的代码

2013.9.25
杂事比较多,对乌克兰新标案的评估,回复bugzilla,整理手上的OEM和特制项目;

2013.9.26
今天要做的事情
整理培训的问题
准备710 的提测
IPv6模块编码和测试

2013.9.27
 无线培训一天

2013.10.10
上午调试IPv6,SLAAC已经ok,下午筛简历和开会,boss分派了一个新的任务TL-WR820ND(RU) 2.0.参考机型ZyXEL的Kennetic系列。

2013.10.12
上午解决3220遗留的bug,准备提测
下午调试4900的ipv6,slaac基本完成,正在调试dhcpv6;
和讨论AC/AP的项目背景,产品形态,组网方式,相关技术等问题。

2013.10.14 星期一
上午解决401d测试反馈的bug,下午刷了一下简历,解答测试部和产品部关于4G自动检测网络的问题。工作效率还是很低啊。

2013.10.15

2013.10.16 星期三
修改ipv6代码,修改bug 40781,修改switch寄存器,使帧长度是1518字节,增加了802.1q vlan的正常必须是这个长度。

2013.10.17 星期四
上午修改ipv6代码,下午筛简历还有处理生产检验标准和ap136 russia编译问题。

2012.10.21
开会讨论了842 RU的软件定制功能,安排工作人员;
修改IPv6的代码框架,使用番茄时间管理方法。

2013.10.22
昨晚没休息好,早上没什么精神。整理842的任务,发了出去,到4楼测试部看一个问题,741跑LAN->LAN smartbit的时候,ping LAN 发现不能同。

2013.10.23
IPv6重构最终没有进行下去,因为ppp要支持ipcp和ipv6cp,这样下去时间估计要很长,还原到原来的样子。这样有一个惨痛的教训,当初做的时候没有进行备份,导致需要花时间进行还原。这个错误不是第一次犯了,一时之快导致后续的痛苦。
在hornet_linux_hornet上合并了兼容Freebox的代码,等待工厂的样机进行调试;

2013.10.24
下午请假陪妈妈去医院

2013.10.25
上午调试ipv6的slaac
给mobile组oem的目录,多次反复,给批;
下午开会了解关于Freebox的问题,测试,发现原来的版本RE端可以ping通RootAP,LAN端PCping不通RootAP,升级修改的软件,发现两者都不通,我日个悲剧了。

2013.10.28
上午测试了wa730re,跟踪extender模式下的收发包函数,和freebox的兼容问题已经解决;
下午指定842ru的软件计划,boss看过原来的说太简单,没有详细的时间计划安排;

2013.10.29
处理邮件,修改842ru的问题,沟通乌克兰标案的进度;
下午处理IPv6的LAN端行为;

2013.11.1
参考dlink的页面设计,修改pppoe web的设计,重新整理LAN的地址分配方式,还没完成,很多页面和RPM的参数都要修改 。

2013.11.7
修改pppd和webserver中的ppp拨号部分,支持ipv6和ipv4同时共享一个连接,测试可以IPv6和IPv4拨号,但是获取IP和拨号状态还存在问题。

2013.11.8 周五
修改LAN端的地址配置方式,测试。

2013.11.11 周一
调试了pppd的新创建session接入方式,发现在ppp拨号成功后出现设置默认网关失败,原因是system调用返回1,但是在串口中调用命令设置成功;
PW-MN401D 2.0 TCL版出现问题,测试结束后没有及时出ECO更新ERP系统中的BOM,导致工厂使用了旧软件生产导致返工,这事情惊动了boss,要找原因。很明显是在推动项目的时候疏忽了,没有将完整的软件流程走完。

2013.11.12 周二
pppd出现两个默认网关,一个是eth0.2,原因是ra报文会影响eth0.2。
pppd默认网关,如果发送RA,因为要将LLA地址删除在添加,所以原来设置的默认网关也会删除。将添加网关放在发送RA之后执行;
另外,system的命令行多余的/r/n导致软件执行system失败。2B啊~~~

2013.11.13 周三
今天主要解决正在测试的项目,包括3220 ru 3220un 710uk等遗留的bug,并且安排提测。在解决quick setup中MAC clone的时候,没有看清楚一个参数,就调用toupper函数,导致不支持该对象,太粗心了,浪费了时间。

2013.11.14 周四
今天将3220 ru遗留的bug都解决了,dhcpc增加option 50的选项,修复无线的问题,明天准备提测。

2013.11.15 周五
今天上午提测3220ru版软件,下午条是IPv6,功能没什么问题,主要是搞页面的逻辑好RPM的逻辑问题;

2013.11.18 周一
上午帮解决虚拟机和XP不能互通的问题,将NAT模式恢复设置,使用默认的IP地址就好了;
调试ppp接入方式,页面的逻辑还有断开的操作;

2013.11.19 周二
评估741 5.0 GPIO修改方案,优化IPv6拨号状态。

2013.11.20 周三
上午开会讨论701 2.0的smart  ip功能的修改,下午答辩,有一个介绍Lua脚本语言的,蛮有意思的,回去search下;

2013.11.21 周四
上午组内预答辩,下午处理项目安排,移植IPv6到741,发现,模块耦合太大,在4900上没有考虑功能的可插拔性,没有做好模块独立,在移植过程中需要考虑这个问题并做好模块独立;

2013.11.22 周五
先记录bug 41846,44485
移植到741上,串口输出
vlan init params fail.
sys_init_module: 'athrs_gmac'->init suspiciously returned 1, it should follow 0/-E convention
sys_init_module: loading module anyway...
Call Trace:
[<801e5b48>] dump_stack+0x8/0x34
[<80046acc>] sys_init_module+0x150/0x214
[<8000d984>] stack_done+0x20/0x3c
vlan初始化失败。
重新编译以太网驱动,问题解决。


2013.11.25 周一
pppoev6FormatCmd函数打开sprintf(buf + strlen(buf), " lcp-echo-failure 5 lcp-echo-interval 10 ");两个参数后,httpd挂了。
原因:IPV6_ECHO宏中的问题,这里传入的buf是1024,里面的可变参数
设置无线最大可关联的数量:
在函数ieee80211_vap_setup中  vap->iv_max_aid = IEEE80211_AID_DEF;进行设置
修改后出现问题:
Kernel bug detected[#1]:
Cpu 0
$ 0   : 00000000 00000074 0000007c 00000001
$ 4   : 80248350 00001e95 00000001 00001e95
$ 8   : 0000000a 00000000 00000001 20646576
$12   : 000000cd 00000032 00000001 00000000
$16   : 00000200 81f90840 80ccc000 00000000
$20   : 80ccfca0 80ccfc88 00437a8c 00000002
$24   : 00000002 c0875be0                 
$28   : 81c86000 81c87d38 0000003a 80166d50
Hi    : 00000000
Lo    : 1efac000
epc   : 80166d50 skb_put+0x74/0x90
    Tainted: P         
ra    : 80166d50 skb_put+0x74/0x90
Status: 1000ff03    KERNEL EXL IE
Cause : 10800024
PrId  : 00019374 (MIPS 24Kc)
Modules linked in: umac(+) ath_dev(P) ath_rate_atheros(P) ath_hal(P) asf(P) adf nf_nat_sip nf_conntrack_sip nf_nat_rtsp nf_conntrack_rtsp nf_nat_h323 nf_nat_tftp nf_conntrack_tftp nf_nat_ftp nf_conntrack_ftp nf_nat_pptp nf_conntrack_pptp tp_domain athrs_gmac statistics wlan_warn pptp pppol2tp br_filter ts_kmp cls_fw cls_basic sch_sfq sch_prio sch_htb ipt_TRIGGER ipt_REJECT ipt_REDIRECT ipt_MASQUERADE iptable_nat iptable_filter ip_tables nf_nat_proto_gre nf_nat nf_conntrack_ipv4 nf_defrag_ipv4 xt_state xt_conntrack nf_conntrack_h323 nf_conntrack_proto_gre nf_conntrack ipt_multiurl xt_time xt_string xt_multiport xt_mac xt_iprange xt_comment xt_TCPMSS xt_MARK xt_tcpudp x_tables
Process insmod (pid: 395, threadinfo=81c86000, task=81c84a18, tls=00000000)
Stack : 00000040 c09559bc 00000e10 00000708 81f99043 81f99020 81f99e30 81f99840
        802238ac 00000200 00000000 c09559bc 80ccc000 c09585e8 80ccfca0 c095d66c
        00000003 00000001 00000001 00000001 00000001 c07ee690 00000200 00000000
        00000001 80ccc000 c09382b4 00436ef8 00437a8c 00000002 0000003a c094be00
        c0ad5000 81c87e10 80ccfb84 c095c474 00000008 00000001 00000001 00000001
        ...
Call Trace:
[<80166d50>] skb_put+0x74/0x90
[<c09559bc>] ath_tx_paprd_init+0x3d4/0x578 [ath_dev]
[<c094be00>] ath_tx_init+0xbc/0x18c [ath_dev]
[<c0a913e0>] __ath_attach+0xd4/0x288 [umac]
[<c0a91c94>] init_ahb+0x1c0/0x26c [umac]
[<c0ad9040>] init_module+0x40/0x6c [umac]
[<80002468>] _stext+0x68/0x1ec

重新编译kernel,但是出现squashfs的问题,原因是因为mtd devices中的刷flash的方法给周斌修改过,具体修改的原理不清楚,回退到11572版本后没问题。
mtd驱动修改了写flash的方式,对应地,httpd也要修改写flash的方法。

2013.11.26 星期二
上午收到工厂那边要定报废芯片责任问题,扯皮了很久,发现时因为软件因为其他原因没有及时更新。
下午提测增加到31 sta的软件。杂事很多。

2013.11.27 周三
早上回来找蔡导讨论freescale的事情,向工厂咨询芯片产生不良的原因和经过,并提测是否可以在不良的芯片中找可以用的,这两可以减低废品量
下午解决743的bug问题,代码中ppp部分增加了IPV6的兼容,导致软件有见问题卷积了。看来要狠心点,快刀砍乱码。

2013.11.28 周四
上午调试了IPv6的帮助,编译软件,测试在原来的基础上升级到beta版是否有问题,出现升级带uboot后软件,板子变砖了。
重新烧Flash后发现串口不能登入,原因是需要重新烧校准数据。

2013.11.29 周五
昨天下午说明天的考试我也要参加,所以今天复习一下,处理完项目的状态就开始看书复习了。重新看c语言基础,还有数据结构,算法,
算法很多都忘记了,如果要靠排序算法,等GG吧。


2013.12.2 周一
周五的考试考的不好,树的访问和逻辑运算做的不好,代码编写缺乏总体把握度,第一题没看清楚题目,写道最后才改了改。据说这次考试是裁员用的,准备舍生成仁吧。
上午安排了ISP Configuration的任务,和测试部同事/产品部同事协商了IPv6的测试,我的意思是想提测一版,毕竟修改了很多。
下午测试了PPP的连通性,从LAN端PING WAN端,整理代码,一些逻辑上的还需要整理一下。

2013.12.03 周二
(none) login: Now flash open!
vlan init params fail.
sys_init_module: 'athrs_gmac'->init suspiciously returned 1, it should follow 0/-E convention
sys_init_module: loading module anyway...
Call Trace:
[<801e5b48>] dump_stack+0x8/0x34
[<80046acc>] sys_init_module+0x150/0x214
[<8000d984>] stack_done+0x20/0x3c

2013.12.04 周三
今天是QCA的培训,上午讲了QCA的一些芯片的历史,命令和无线驱动的调试方法,通过命令可以进行无线功能的配置。
下午介绍了一些概念性的东西。
使用编译命令:
make httpd_build WEB_SERVER=web_server_VNM VLAN_IPTV_IGMP_SNOOPING=1 PID=74104ipv6
编译出的httpd 可以执行
原来出现问题的是因为没有VLAN_IPTV_IGMP_SNOOPING=1这个宏
晚上继续调试ppp拨号,计划周5提测。

2013.12.05 周四
调试ppp,安排ISP configuration事情

2013.12.06 周五
早上会讨论RTT和art2产测的事情,下午检查SLAAC,发现kernel不能设置默认网关 ,原因是web_server设置accept_ra为2,到kernel不生效,
ndisc_router_discovery函数没有设置默认网关就跳出。
该参数可能被kernel里面的某个地方修改了。
原因是执行ip -6 addr del  fe80::e02:22ff:fe0a:241/64 dev eth1删除eth1的LLA地址后,
cat: /proc/sys/net/ipv6/conf/eth1/forwarding: No such file or directory 这个文件不见了,在添加这个地址后,值变成1. 这种表现形式和kernel的版本有关系,powerpc的2.6.35的版本不会表现成这样。

2013.12.9 周一
调 试了DHCP,遇到3个小问题,第一个同6号发现的是一样的,网关的获取问题,已经解决,第二个是有时候出现system错误,这个在调用dhcp6c的 时候遇到,重启后问题消失,第三个偶然出现IPC:this msg is not for dhcpc,这个很可能是在busybox里面打印出现了,添加了打印信息,这个问题偶然造成dhcp6server反回的信息,httpd不能获取。

2013.12.10 周二
IPv6 终于提测了。下午收到产品部说要整理这个模块的需求然后再讨论,早干什么去了。boss咨询了一下WR748项目,这个是vx平台使用PNE2.2协议栈的项 目,不是我维护的,一头雾水啊。下午看了俄罗斯VLAN tag的实现原理,网桥的使用和802.1Q,晚上加班解决了dhcp option50 字段的bug。

2013.12.11 周三
设置共享网络,但是先要删除NAT转换协议,在控制台下输入命令
netsh routing ip nat uninstall
删除已经存在的连接
net use *  /delete
字符集选择UTF-8 安装3.50.72版本的sourceinsight, ok
在ubuntu上编译代码,工作主机可以空闲出来了,爽。在编译无线工具时提示没有uuencode工具,需要安装sharutils。
acl.h找不到,需要安装:
 sudo apt-get install libacl1-dev
 sudo apt-get install uuid-dev 


2013.12.12 周四
开始完整移植IPv6到 1043
1)kernel
kernel要修改
a.Z:\branch_ap136\ap136\linux\kernels\mips-linux-2.6.31\net\ipv6\Kconfig 曾加SLAAC的传参选项;
b.修改Z:\branch_ap136\ap136\linux\kernels\mips-linux-2.6.31\net\ipv6\addrconf.c
c. 修改Z:\branch_ap136\ap136\linux\kernels\mips-linux-2.6.31\net\ipv6\ndisc.c
e. 修改Z:\branch_ap136\ap136\linux\kernels\mips-linux-2.6.31\include\linux\ipv6.h
kernel修改完成
2)更新Z:\branch_ap136\apps\ipv6_tools\wide-dhcpv6
3)更新pppd
4)修改Makefile.apps,使用ppp-2.4.3目录,而不使用ppp-2.4.3_ipv6目录S
export CONFIG_IPV6=y
5)修改Makefile ,根据OPTIONI选项是否包含_IPV增加export CONFIG_IPV6 = y
6)更新ipv6_tools中的radvd-1.7目录

OEM产品工程师反馈Bug28593(在4900上已经解决)在RU版本软件中没有更新,影响俄罗斯客户使用IPTV,这个需要和Soft Recovery功能一起更新,先在MR3220RU上更新。

ISP Auto Configuration问题第二连接需要确定静态IP参数,给出的表是没有的。

2013.12.13 周五
上 午讨论了ISP Confguration实现的细节问题,还好有这次的沟通,原来我自己的想法是偏复杂的,实际的实现和我的想法不是一样的,从这一点我想到了IPv6的 实现,很多时候都是由我一个人去想,按照自己的理解去定义这个模块的功能,这样做现在看来是有风险和局限性的。下次IPv6功能定义的会议应要讨论好需求 问题;
俄罗斯业务反馈今年的业绩,给我们研发施加压力,842的进度要加快一下了。boss的意思还是让我先负责这一部分的工作内容。先做好这个项目吧。

2013.12.16 周一
上午合并了无线组播LEAVE报文没有转发的patch,下午搞了卡巴斯基出了问题,恢复,天气很冷,而且下雨,很冷,没有加班,回家休息;

2013.12.17 周二
上午编译了软件,自测了无线组播的问题,还有dhcp option 50的问题,准备提测。IPv6越南反馈测试的结果,PPPoEv6有问题,但是没有详细的说明。
下午移植IPv6到ap123,先熟悉ap123的代码结构,和ap121又是不一样的东西。在移植wide-dhcpv6时,获得了前缀也要设置状态成功,这个应该就是西班牙反馈的问题。
移植ppp的时候发现信号量需要变动:PHASE_RUNNING_IPV6CP 18  
ap123的编译目录架构
Makefile.modules用于定义Makefile全局变量,
在\build\product_config\wr842ndv2_ru\modules.config文件中定义模块的参数,决定这个模式是否编译到软件中;
build目录下的Makefile.modules下定义了系统包含的驱动和apps,这些驱动和apps都是根据模块的参数决定是否编译到软件中的;
在product_config目录下存在多个机型的配置目录,一个目录对应一个机型,目录中包括配置文件:basic.config,busybox.config,kernel.conf,model.conf,modules.conf。
要定义usb_debug,否则没有usb_core.ko这个库;
kernel_modules编译不过,

2013.12.18  周三
art编译不过,原来的编译项没有指定BOARD_TYPE,指定BOARD_TYPE=ap123后也不行;
export INSTALL_ROOT=$(TOPDIR)/rootfs.build.$(KERNELVER)
export INSTALL_ROOT_FOR_BOARD=$(TOPDIR)/rootfs.$(DEV_NAME)
apxxfus_fs_prep :
cp -Rf $(INSTALL_ROOT) $(INSTALL_ROOT_FOR_BOARD)
拷贝为每个机型拷贝一份目录
Bug 33181
radvd进程退出方式错误,现在的方式是发送kill 9 信号,杀死进程,应该发送kill 15,让进程终止。暂不修改。

2013.12.19 周四
分析解决dhcp6c 调用失败的问题

2013.12.20 周五
管理者答辩大会,学习别人的管理和处事的经验

2013.12.23 周一
上午重新测试741 ipv6,检查isp auto config的代码,编译,上传代码。和song协商842的项目推进方式,先不提测带IPv6的。
1043 ru的问题,是以为3220 ru和1043 ru的方案是不一样的,所以两者的VLAN划分不一样,明天讨论一下这个问题。

2013.12.24 周二
上午主要跟进项目进度,讨论PW-3G401D 2.0上开发OpenWRT的问题,分配正在测试项目的bug。
下午调试ISP AUTO CONFIG 功能,讨论IPv6 接入的问题,ADSL有新的样机,有时间拿来参考

2013.12.25 周三
圣诞节
上午给产品部催1043的问题,发现这个项目开始的时候就走了错误的地方,将hornet那套东西拿过来,但是这个是scopion方案的,和hornet不一样,支持硬件NAT。
后来经过讨论,发现和4300ru的无论TagVlan和Bridge都是和我司产品一样的,但是划分VLAN的方式不一样,HNAT和VLAN Tag不能共存的问题是因为在HNAT中写固定了VLAN Tag ID。
在ubuntu下多过载一个NTFS的分区,这下可够硬盘空间下载代码了。
在project目录下新创建disk目录
#mkdir disk
然后挂载NTFS格式分区
#sudo mount /dev/sda5 /home/project/disk/ -t ntfs

2013.12.26 周四
上午:整理项目,安排自测740RU,讨论842RU的3G模块的设计,产品部需要改变当前的功能形态;743测试结束,处理提交的bug。
下午:阅读HNAT的PPT,阅读4300的HNAT的代码;过来找我讨论842RU 2.0 3G/4G模块调整的问题,给了一个初步的方案,但是代码修改比较大;
越南IPv6测试已经回复,分析WAN的抓包,发现对端不支持IPv6CP;
4300的代码有点多,一时之间看不过来,先重点看寄存器和IGMP部分。
  /* Port map
          P0          P1          P2-P5
          CPU          WAN      LAN    
     */
P0:CPU
P1:WAN
P2~P5:LAN1~LAN4
4300的划分VLAN的函数是athrs17_vlan_config,参数的最低0~6是设置VLAN的值,位图是:
P6      P5      P4      P3      P2      P1      P0
0       0          0      0        0        0         0   
          LAN4  LAN3  LAN2   LAN1  WAN  CPU
拿一位置为1,表示可以和该Port通信,就是说把frame发送到该端口。
但是1043是不一样的,分配如下:
/*
     *  Port map
     *     P0          P5          P1-P4
     *     CPU          WAN      LAN    
     */
SVID和CVID
两者都是12bit,这个和802.1Q 4Byte中的12bit ID是一致的。
athrs17_reg_init_wan寄存器初始化

2013.12.27  周五
讨论IPv6功能问题,需要参考现有的其他厂家的机型;解决743项目剩余的bug。

2014.1.6 周一
这段时间请了4天的假期,家里发生了很多很多事情,回家处理。
请假的这段时间,在忙自己的事情的时候,也想通了很多的问题。
回 到公司第一件事情就是看邮件,主要的邮件还是俄罗斯的两个项目,第一个是1043RU的项目,这个发哥处理的不错,已经解决好驱动和HNAT和 TagVLAN的问题;第二个就是842RU的问题,产品工程师需要修改3G Prefer/WAN Prefer的机制,需要修改成1.0的方式,这个是我一直不同意的。
下午在740/741ru上合并了组播退出问题并且自测。给力奖出来了,榜上有名,高兴之余感觉受之有愧。

2014.1.7 周二
提测了740 ru版本软件
测试ASUS的3G 备份的方式,但是尝试了3个modem都不能拨号成功,后来宋阳用MA180进行测试并提供了backup的方法;
下午测试netgear IPv6的接入方式。
重感冒,晚上没有加班,回家去了。

2014.1.8 周三
上午继续测试netgear的ipv6模块,将自动检测/自动配置两种方式在WAN端开启不同服务器的行为测试了一下,并且在文档中记录下来;
整理了一下测试过程中的项目,743已经出ECO,还有3220ru也是可以的,快结束吧。
下午热心的测试了华为3331的modem卡,和俄罗斯的yota类似,modem是一个router,有自己的dhcp,通过http请求进行控制。

2014.1.13 周一
上午查看项目进度,分配和回复bugzilla的bug
下午整理ipv6的pppoe模块

2014.1.14 周二

2014.1.15 周三
上午查看了DLINK的DSL-2890AL样机的IPv6功能,功能比较完善,但是没有WAN口进行抓包分析;
解决3220 的无线灯在无线功能被按钮关闭后,LED灯还是亮的问题。注意无线驱动中的ar7240_gpio_out_val函数,当设置1时是灯灭,0时为亮,这样处理的原因是无线开启时,无线灯常亮,当有数据传输时,咩一下,然后保存常亮。
/proc/simple_config/wlan_led这个文件的被宏MODE_APC_ROUTER包裹着了,这个宏决定的是WISP模式,3220不支持WISP模式。
下午看了4G 的代码,重新查看因为设备名称而导致拨号失败的问题

 2014.1.16 周四
上午开会讨论C8上使用新UI的问题,邮件讨论了Modem同步的问题;
下 午看了QCA提供的patch和分析方法,原因是DUT对device返回的ACK包识别问题,看patch,通过函数hub_port_status查 看port的状态,如果失败,则清除先前的SOF(start of frame)寄存器,并且等待下一个SOF,并且重新reset USB的PHY寄存器。
晚上调试了842RU的ISP Auto Configuration,成功,上传代码。

2014.1.17 周五

2014.1.20 周一
上午回复了邮件,看了项目的进度
下午将IPv6的pppoe 的SLAAC和DHCP合并在一个选项中,但是调试时又再出现dhcpc 返回255的问题,后来重启了路由器和服务器这个问题消息,如鬼魅般。这个问题余楚伟跟过,
httpd通过system启动dhcp6s之后,dhcp6s执行到yyparse函数里就退出了,我猜是发生段错误之类的。如果是手工启动dhcp6s的话就很正常。
应该是httpd进程本身的环境影响到dhcp6s,导致该问题的产生。
【解 决方法】由httpd启动dhcp6s就会出现该问题,如果在串口手工启动dhcp6s就正常,这很大概率是由于进程环境继承造成的。再考虑到httpd 中是将stdout/stdin/stderr关闭的,而手工启动dhcp6s的话stdout/stdin/stderr是打开的,由此猜测 dhcp6s会往stdout/stdin/stderr写出数据,但由httpd启动的话fork出来的dhcp6s中stdout/stdin /stderr是关闭的,从而导致了段错误的产生。
往这个方向去分析代码和进一步确认,结果证明我的猜测是对的。
将cftoken.l中有关DP/DECHO/DNOECHO的定义改为空就可以了
Plto 回我邮件了,说了datasheet上寄存器地址和时间代码中地址的转换规则,看了see mips runs,datashee中的地址偏移从0开始,就是kuseg段的地址,需要映射到uncacheed地址中,所以需 要+0xA000.0000,plto的邮件说这是个cached地址,可能说错了,已经发Email咨了。


2014.1.21
今天上午想实现将IPv6协议栈中的WAN口设备的名字通过proc文件系统和用户态进行通信,但是在设置了proc之后,加载驱动后发现所有的网络设备的LLA地址都生成失败。
下午申购的电脑都了,换电脑。
2014.1.22
换电脑,重装所有的软件,还有就是想在虚拟机中安装ubuntu,但是失败了,还是使用另外一台电脑作为编译电脑吧,浪费了这么好的配置了。

2014.1.26 周日
前 两天合并了IPv6的代码,正在调试,整个模块的功能还不是很明确,感觉为了存在而设计的模块,今天调试pppoev4和v6的拨号问题,发现如果开机的 时候同时选择v4和v6有很大的几率导致httpd挂起,这个问题还没有解决。IPV6_ECHO在输出的时候出现一个错误,导致httpd挂起,出现 core文件。
代码已经上传svn,年后在仔细调试一下了,下午先编译一个beta软件给业务。

2014.2.7 周五
马年第一天上班,节后综合症还不算明显。
年前将代码上传了SVN但是页面上没有显示IPv6的功能,原因是menu部分的修改没有上传,上传后编译软件测试,系统日志有问题,明天需要测试3G 和IPv6拨号是否存在干扰的问题。

2014.2.8 周六
使用svn比较文件的某两个历史版本
svn diff -r25813:26015,这个命令比较版本26015和25813的差异;

2014.2.10 周一
天气很冷,下着雨上班就是一种折磨
上午将正在测试的项目整理了一下,3220 ru出了ECO,planet的也已经出了ECO,做好记录。兼容E3331的软件已经发给赵越,让他给客户。
下午检查842的IPv6功能,出现过从PPPoEv6切换到DHCPv6出现core文件,httpd挂起,但是重新编译了web_server后一直没有出现;
wide-dhcp增加了log_to_web的输出,原来出现的dhcpc进程启动失败,很可能是函数cfparse导致的。

2014.2.11 周二
看了GuestNetwork的设计文档,了解了在bridge层的ebtables和Guest Network的实现原理。

2014.2.12 周三
上午看iptables,在iptables里面可以增加自己的一个模块,用于修改ip报文的参数,参看xt_TCPMSS.c
下午整理了hornet平台遗留的bug,分配解决人。

2014.2.13 周四
分析kcodes的打印机驱动在1043 RU上不能挂载的问题,因为这个驱动是在1043 1.0的kernel基础上进行编译的,后来增加IPv6的驱动,修改了配置文件盒kernel的配置,需要重新编译。这个问题在已经提测的2.0 UN上也存在;
分 析IPv6 西班牙841 DHCP的问题,和4900相比,两个差异,一个是网络接口的LLA地址,841不是通过EUI64格式构造的LLA地址,第二个DHCP报文的格 式,841多了两个字段Fully Qualitifed Domain Name和 Vendor Class.

2014.2.14 周五 元宵节
上午在wide-dhcp中查看了多出来的两个字段是如何加入到option中的,回复了业务的邮件告诉两个报文之间的差异。
回复了PW-3G401D的bug,需要将该项目结束掉,下午测试部反馈bug已经全部回复,准备出ECO;
哈沙克斯坦反馈 K3272有在3220上有的板子OK,有的不行,原因是:
Host 发出了SETUP Token,但是对于device返回的ACK,识别失败,Host继续发送SETUP Token,第二个SETUP Token报文可以识别,然后Host发送IN Token报文,但是Device返回NAK,多次返回NAK后,modem重启。
修改方式:在usb/core/hub.c中的hub_port_reset函数中,通过 hub_port_status()获得端口状态,根据状态判断在Port完成reset的时候,判断枚举是否失败,如果失败则等待一个SOF后,Reset USB PHY.

2014.2.17 周一
翻阅邮件,以前在4300上反馈过一个关于DUID中LLA地址和源MAC地址不一致导致DHCPv6 服务器不回复请求的bug,所以841上遇到的很可能是这个问题;
突然翻4900的旧账,说出了一个beta版本,但是4900的代码都给我删掉了。
842自测,上午测试了WLAN->LAN的throughput,只能达到94Mbps,原因是路由器的是百兆switch,坑爹的设计;

2014.2.18 周二
上午技术交流会,主要是Switch和HNAT相关,介绍了VLAN划分,HNAT的实现原理,和一些debug的案例,包括:
丢包;
MAC克隆导致的问题;
切换速率双工导致端口状态异常,没有对寄存器的写操作进行保护;
收包残留;
向所有口发送流控帧
PPPoE WAN口收到的帧的VID 2
HNAT读写寄存器的时间
下 午调试IPv6的RA,和YY讨论IPv6的设计问题。遇到一个问题,WAN是SLAAC的时候ping LAN地址不通,因为RA的前缀给转到LAN,而WAN又根据这个前缀配置了一个地址,导致LAN和WAN有一个相同前缀的地址,在路由表中,WAN口 IP对应的路由条目的metric比LAN 的小,所以默认的包都发到WAN了
解决方法,将WAN的RA构造的IP删掉。

2014.2.19 周四
在检查842 RU的时候,PPPoE偶然出现了kernel Panic的错误,跟进到kernel中,原因是在pppoe_device_event中有一个BUG_ON的宏,如果device设备指针为空的话,这里要出现panic的提示。
2014.2.20周五
准备IPv6开会的资料,在认证论官网上下载了最新的CE_Router的文档,大概看了一下,是用来测试CE router行为和属性的测试用例和说明,很适合。
下午开会,boss和boss也去了,初步定了哪些功能要实现,然后后续的工作还是以CE_Router研究为主。

2014.2.24 周一
看了网桥的资料,还有咨询对于IPv6 bridge模式的实现,看了ip6tables的手册。更新了提测项目的bugzilla信息。

2014.2.25周二
上午分析了dhcp中的client DUID生成方式,发现在841发出的包中,这个DUID中的LLA不是WAN口设备的地址,修改函数get_duid,使获得的接口是WAN口设备的MAC地址。
下午合并了1043的RTSP的bug,配置VLC不成功,软件已经发给业务,等测试同事回来咨询一下如何设置VLC server。
发布了710 UK版本。
kcodes反馈了新的driver,但是发现在英文版的还是不能用,查看原因,是两者的kernel配置中的 CONFIG_MODVERSIONS项设置不一样。
2014.2.26 周三
上午收到了1043 rtsp的测试结果,ok,我在本地陪失败的原因是,只能用554端口,默认的5544端口不行。
产品部要求制作Beta软件,但是发现现在的beta软件的水印没有了,只是在软件的版本后面加了BETA字样,还在咨询产品部最终的做法。
下午按照产品部的要求添加水印,在编译软件的时候发现libmsglog.so没有拷贝到文件系统中,执行这个拷贝动作实在msglogd目录中的makefile执行的,不是在build目录下
export INSTALL_ROOT=$(TOPDIR)/rootfs.build.$(KERNELVER)_$(BOARD_TYPE)
export INSTALL_ROOT_FOR_BOARD=$(TOPDIR)/rootfs.$(BOARD_TYPE)
最终打包的文件是INSTALL_ROOT_FOR_BOARD里面的文件
apxxfus_fs_prep:
     rm -Rf $(INSTALL_ROOT_FOR_BOARD)
     cp -Rf $(INSTALL_ROOT) $(INSTALL_ROOT_FOR_BOARD)

GPL_NetUSB: version magic '2.6.31--LSDK-9.2.0_U6.616 mod_unload modversions MIPS32_R2 32BIT ' should be '2.6.31--LSDK-9.2.0_U6.616 mod_unload MIPS32_R2 32BIT '
NetUSB: version magic '2.6.31--LSDK-9.2.0_U6.616 mod_unload modversions MIPS32_R2 32BIT ' should be '2.6.31--LSDK-9.2.0_U6.616 mod_unload MIPS32_R2 32BIT '

2014.2.27 周四
头痛。
上午分析1043 UN版kcodes挂载不上的问题,应该是ip协议栈RU和UN不一样,导致使用RU的SDK编译出来的NetUSB.ko认为socket的 API版本不一样,咨询了kcodes的工程师;
第二个就是按测试部的需求制作一个测试IPv6用的842软件,指导员工,检查代码。

2014.2.28 周五
天黑
早上回来,天黑黑的,估计要下雨,今晚踢球悲剧了。
上午回来先合并了最新公布的4G modem的驱动,并且更新了模式切换命令库文件。对于qmi_wwan_core驱动,有时间要看看工作原理,
特别是product_id中的数据结构。
合并完后阅读VLAN的资料,到现在还是不明白VLAN划分和最终发送port的关系。再看资料,搞不清楚再问侯哥。
下午跟进几个正在进行中项目的事情,第一个是Hexa第二次提测,第二个是740RU的bug的跟进,UPNP在L2TP拨号模式下多次开关的问题没有复现,
抓包发现,在刷新网络邻居的时候,会发M-Search报文,在Enable状态下有回包,Disable无。还有另外一个问题,不管是Disable或者Enable,都会发送SSDP报文。
下午,天没雨,庆幸啊!
2014.3.3 周一
早上回来回复了740 ru的bug,上周5的upnp的问题是在XP系统上设置一个UPNP条码,测试用例上没说清楚,不过在我的XP系统上按照测试同事的说明没有找到添加的位置,该问题咱是不修复先。
重新编译一个842 的IPv6的软件给PP用于认证的测试;
下 午发现740 RU在Jenkins上编译,然后通过web升级uboot.bin到开发板时,发现uboot挂起,uboot按理只修改了tftp部分,检查修复的代 码,有两个地方有点问题,一个是函数没有参数,但是实用的时候输入了参数,第二个是函数声明,但是修改后,问题依旧。
尝试在jenkins上指定到第三次提测的uboot版本也是出现这个问题。问题没定位到!
拿到一分双uboot调试uboot的文档。
2014.3.4 周二
上 午回来,PP说842的ping6 app不能运行,跟踪发现因为实用的是4900的,而makefile中没有清空而没有重新编译,这里的makefile很奇怪,在外城已经清空了*.o 文件,但是因为ping6 app没有清空,iputil没有重新编译,必须要将ping6清空;
740 ru的uboot编译问题,现在跟踪到是因为在jenkins上编译的uboot.bin是经过lzma压缩的,但是在开发板上运行的时候,解压缩失败,而在本地编译的是没问题的。
在uboot中想打开go命令, uboot中支持的命令在文件\include\configs\ap121.h中定义。如定义支持命令则通过宏
#define CONFIG_COMMANDS     (( CONFIG_CMD_DFL | CFG_CMD_DHCP | CFG_CMD_ELF | CFG_CMD_PCI |     \
     CFG_CMD_MII | CFG_CMD_PING | CFG_CMD_NET | CFG_CMD_JFFS2 | CFG_CMD_ENV |     \
     CFG_CMD_FLASH | CFG_CMD_LOADS | CFG_CMD_RUN | CFG_CMD_LOADB | CFG_CMD_ELF | CFG_CMD_ETHREG ))
2014.3.5 周三
帮助匡同学分析L2TP按需拨号失败的问题,发现是因为L2TP的进行xl2tpd中调用的pppd是没有传uint参数,在pppd中使用了默认值-1,所以生成了ppp-1.pid文件,而在httpd中读取的是ppp0.pid,出错;
下午向大黄了解uboot中的点灯事情,路由器启用时的亮灯仪式,是由路由器中的ar7240_all_led_on函数执行的,这个函数中
gpio = MY_READ(0xb8040008);
#ifdef CONFIG_PID_MR302001
    SETBITVAL(gpio, GPIO_JUMPSTART_LED_BIT, GPIO_JUMPSTART_LED_ON);
     SETBITVAL(gpio, GPIO_INTERNET_LED_BIT, GPIO_INTERNET_LED_ON);
     SETBITVAL(gpio, GPIO_WLAN_LED_BIT, GPIO_WLAN_LED_ON);
     SETBITVAL(gpio, 17, 0)
看datasheet,18040008控制所有GPIO的使能,32位 的寄存器表示32个GPIO,每一个bit表示一位,然后通过LED_BIT来指定哪个GPIO(这个要和硬件的原理图相 关), GPIO_JUMPSTART_LED_ON表示高电频还是低电频有效。
2014.3.6 周四
早上开会,一个惊人的消息,我司要上央视的315晚会曝光漏洞问题,现在需要做的就是将所有的软件要重新排查一次CSRF漏洞问题。上午就是挖坟,将一些不知道什么时候做,谁在维护的机型统统挖出来,然后一个个查料号。
下午西班牙841的问题反馈回来了,服务器可以分配IP了,但是多10分钟就断开,分析数据包应该不是DHCP的问题,具体问题还需要等待路由器的Log
2014.3.7 周五
早上找以前的邮件和重新测试741的软件,下午了解网桥和VLAN的工作原理和Linux的实现方法。

2014.3.10 周一
令人忧伤的一个周末,马航MH370飞机去哪儿了?天佑!
周 一回来先将现有的842RU 的bug先分派,然后分析841 西班牙反馈的抓包,这次很奇怪ICMP包发到路由器后,又重新转发到主机,然后到路由器,就是一个死循环,TTL不断减少,当ttl=0后,包丢了,看样 子是路由器的WAN口默认路由失效了,后面或者要打印一下路由表看看。
下午协助小晗搞MFC的Utility,添加一个页面。
uboot board里面有个芯片方案的的定义文件,如果要修改LED的GPIO,这个文件也要关注;
2014.3.11 周二
修改841 DHCP中的DUID的类型,发了debug软件;
协助调试uboot里面的tftp问题,宏要传入到net目录下,要修改net中的makefile;
2014.3.14 周五
修复Bugzilla上的问题,dhcp6c和dhcp6s还是存在问题,系统调用的时候失败,但是在串口输入命令可以。
Win7不支持RADVD的RDNS选项,所以还是需要dhcp进行DNS地址的公告。WIN7获取不到DNS地址,会设置三个默认的值:
fec0:0:0:ffff::1   fec0:0:0:ffff::2 fec0:0:0:ffff::3
2014.3.18 周二
解决842提测的bug

2014.3.19 周三
解决dhcp进行启动时出现的255问题,
分析,是在cfparse.c中的yyparse函数存在的问题,这个文件是通过bison 解析得到cfparse.y
     bison -y -d cfparse.y  /*得到文件y.tab.c和y.tab.h*/
     mv y.tab.c cfparse.c
 cfparse.y文件是对配置文件每一个option的解析语法,bison就是用于自动生成 语法分析器程序,实际上可用于所有常见的操作系统。Bison把 LALR形式的 上下文无关文法描述转换为可做语法分析的 CC++程序
在实际测试的时候,如果dhcp6s进程是由httpd调用,则yyparse函数没有执行完毕(日志中看到只执行到if (yychar == YYEMPTY)),就返回,system提示返回出错。
 
2014.3.20 周四
写了一个发送Router solicitation报文的函数,分析出问题的WAN口报文,应该路由器中丢失了转到br0的路由条目导致的。

2014.3.21 周五
今天回复业务的技术问题,分配bug,然后将842和1043的debug跟踪了一下,确认下次提测的时间。
讨论了841出问题的原因。


2014.3.24
2014.3.25 周二
在TR069中增加OpenSSL,在编译了ssl后,需要将头文件拷贝到交叉编译工具链中,否则编译其他文件引用不到。
编译后,发现openssl的库超过了文件系统允许的范围,
OpenAgent 支持SSL需要增加(单位:Byte):
libcrypto.so 1063376
libssl.so    220556
httpd 在OpenAgent打开USE_SSL宏后编译,增加:2168542 - 1948500 = 220042
跟中dhcp6s调用失败的问题,发现只有选择WAN是PPPoE,保持,重启DUT后,必然出现这个问题,而其他方式如动态,静态则不会。

2014.3.26 周三
会议,boss给我们开会,主要是如何处理事情。
1)鼓励工程师走出去;
2)OEM项目优先级放低,保证TP品牌项目进度;
3)预算周期(时间,人力,风险评估);
4)新平台开发,旧平台代码收敛;
5)契约进行,对自己有要求,项目不能delay太长;
6)组长角色,承上启下,不是满上欺下;
7)积极交流,电话,有问题主动提,不要等;
8)项目反馈,过程和结果,不要忽略过程;
9)工作预期,给人家一个预算;
10)安排工程师工作,新员工最多同时进行2个项目;
11)平等交流;
12)产品质量,研发,测试,生产;
13)校招新员工安排工作不需要太复杂。
晚上继续debug,发现时因为PPPoE方式和DHCP方式在初始化的时候差异导致,跟踪哪些函数调用了swGetWanType函数,发现最大的差异是PPPoE方式时,调用了pppIpMaskGet函数,然后跟踪该函数,发现时通过ioctl获取ppp0接口。屏蔽ioctl调用后,发现可以调用。那么问题就是ioctl影响到dhcp6s中的yyparse函数了。

2014.3.31周一
修复1043的bug,增加对修改无线配置免重启的支持,br0 MAC地址的获取各个产品都可能存在差异。
TR069中支持的参数和对应的处理函数在param_fun_lst中定义,发现WAN口不支持PPPoE方式下的IP地址获取,增加上后需要测试。

2014.4.1 周二
今天上午准备1043的提测,下午解答了dhcp6c的一些疑问,晚上看了下网桥转发的流程。IPTV就是通过网桥将LAN和WAN 进行

2014.4.2 周三
dhcp6c发送release是通过dhcp6ctl release命令进行,通过kill命令杀死dhcp6c进程是不会发送release报文的。
使用RAW 套接字发送RS报文的时候需要制定该报文发送的网络设备,可以通过查找"/proc/net/if_inet6"查找。

2014.4.8 周二
TR069 中在wan_dev.c中提供参数的RPC函数调用,从反馈的日志上看,获取IP失败,分析过代码发现当前WAN只支持DHCP和 PPPoE,web_server中通过ipConnectionType和pppConnectionType进行类型的配置,但是该参数不会被改变。

2014.4.9中三
查看RFC7083,修改了INF_MAX_RT和SOL_MAX_RT值,由120s修改成3600秒,原因是在一些情况下,这两个值会导致大量的聚集数据传输到到到服务器上。
 以 太网线路上按“Big Endian”字节序传送报文(也就是最高字节先传送,关于字节序请参考相关文档),而比特序是”Little Endian”(也就是最低位先传送)。一个十六进制表示法表示的MAC地址01-80-C2-00-00-00,传送时的bit顺序就是:1000 0000 0000 0001 0100 0011 0000 0000 0000 0000 0000 0000,如下面的图(从最左边开始传送):

2014.4.11 周5
导 致问题出现的原因是路由器中的tr069客户端收到服务器返回的XML格式的报文后,通过函数mxmlLoadString 将XML中的参数读出并使用XML node tree数据结构存储这些参数,但是因为指向XML报文的指针发生偏位,导致数据包被截断(XML对大小写和格式都有严格要 求),mxmlLoadString 函数返回空,参数解析失败,这时候代码逻辑错误认为是内存不足,调用函数handle_termination 将tr069的收发包线程终止。 修改指向收包buffer的指针后,通过抓包和cpe.log日志分析,XML解析成功,tr069的收发包线程正常,客户端可以向服务器发送Content-Length参数为0的POST报文

2014.4.15 周二
哥伦比亚返回错误,说数据包中出现9002错误,查看过这个是内部错误,是我们的客户端不支持ISP的RPC调用。从cpe.log中可以看到是dev_LAN_ConfigPassword参数和dev_IPPing_DataBlockSize调用。
gen_param_struct读取服务器要求的参数值。
int dev_LAN_Hosts_Host_AddressSource(int opt_flag, void *mthdval_struct, int locate[])
一下函数读时返回-1
dev_Time_LocalTimeZone
dev_LAN_Hosts_Host_IPAddress
dev_LAN_Hosts_Host_AddressSource
dev_LAN_Hosts_Host_MACAddress
dev_LAN_Hosts_Host_LeaseTimeRemaining
dev_WLAN_Assoc_DeviceIPAddress
dev_Layer3_DefaultConnectionService 该函数全部返回-1
dev_Layer3_ForwardNumberOfEntries
dev_ManageServer_Username
dev_WANCommon_If_TotalPacketsSent
dev_WAN_Ethstats_BytesSent
dev_WAN_Ethstats_BytesReceived
dev_WAN_Ethstats_PacketsSent
dev_WAN_Ethstats_PacketsReceived
dev_WANIPConnection_ExternalIPAddress
dev_WANIPConnection_SubnetMask
dev_WANIPConnection_DefaultGateway
dev_WANIPConnection_DNSEnabled
dev_WANIP_PortMap_PortMappingEnabled
dev_WANIPConnectStats_EthernetBytesSent
dev_WANIPConnectStats_EthernetBytesSent
dev_WANIPConnectStats_EthernetPacketsReceived
dev_WANPPP_DNSServers
dev_WANPPP_MACAddress
dev_WANPPP_TransportType
dev_WANPPP_PPPoEACName
dev_WANPPP_PPPoEServiceName
dev_WANPPP_ConnectionTrigger
dev_obj_forward
dev_obj_IPInterface返回1和-1
dev_obj_wanconndev返回1和-1
dev_obj_pppportmap

dev_WANIPConnection_ExternalIPAddress不支持PPPoE
init_list_member初始化
收 包函数func_recv收到数据包后,通过sem_post(&SEM_RECV);想处理数据包的线程发送消息,但是处理包的线程通过 sem_wait(&SEM_RECV);接受消息,但是没有收到,知道func_recv将buf耗尽后,才收到。
GPN GetParameterNames 用来取得装置上的数据名称
GPV GetParameterValues 可以取得一个或多个数值,也可以取得完整径或部份路径的数值
SPV SetParameterValues 用来设定参数数值
GPA GetParameterAttributes 用来取得参数的特性:只读或可读写,以及主被动回报
SPA SetParameterAttributes 用来设定参数的特性:只读或可读写,以及主被动回报
- Download 用以指示 CPE 下载档案处理作为固件更新(FIrmware Upgrade)、设定更新(Config Upgrade),或其它特定的档案处理
- Upload 用以指示 CPE 上传档案处理作为设定备份(Config Export),或其它特定的档案处理(例如 System log export)
ADD AddObject 新增参数
DEL DeleteObject 移除参数
2014.4.18 周五
看泰国TOT IPv6接入方式,DHCPv6只公告DNS,状态码是6,NoPrefixAvail。
1043 RU的option50问题呗重新打开了,原因是Makefile.app的文件没有更新到svn服务器上,大意啊,jenkins上编译的和本地编译的不一定一致,提测软件上一定要检查修复的问题。相同的还有L2TP 不发送STOP CDN问题。

2014.4.21 周一
编译软件的shell中宏加错了地方,应该加在:
make BOARD_TYPE=ap135_hnat dut_type=wr1043v2 BUILD_OPTION=_IPV6 MODULE_DHCP_REQUEST_SAME_IP=y linux_build_all
而不是
make BOARD_TYPE=ap135_hnat dut_type=wr1043v2 BUILD_OPTION=_IPV6 wr1043v2_ru  INCLUDE_ISP_AUTO_CONF=1
还有就是busybox中lastip在release的时候不能reset为0
2014.4.22 周二
上午哥伦比亚又返回了TR069的问题,怀疑是设置的问题;
下午测试部反馈L2TP和PPTP断开流程问题,L2TP是不发L2TP CDN的,这个确认,PPTP因为ap136下使用的是pppd_ipv6的源码,坑爹啊。现在搭建一个win2003进行测试。
2014.4.23 周三
boss找谈话,工作的问题,不要放太多时间和精力在OEM上,按流程走。OK,解放
2014.4.24 周四
在Linux上安装了pelnx_730.tar.gz,这是endpoint的Linux版,可以跑IPv6的吞吐量了,good
2014.4.25周五
离别的季节,很多熟悉的同事都离开了。
jenkins上编译ipv6_tools不通过,原因是一些库找不到,修改Makefile,使用0.9.8a的Openssl库,-lcrypto是在指定的目录中找一个libcrypto.so的文件,所以一般要使用ln -sf 进行连接,
比如 ln -sf libcrypto.so.0.9.8 libcrypto.so

2014.4.28 周一
会议讨论分组的事情,项目合并


2014.5.4 周日
节后的第一天,1043和842都返回了bug,主要是IGMP的问题。在看skb->mark的计算方式,代码中:
/*如果是多播包,则根据报文中的vlan ID查找对应的收包接口*/
if (IS_MULTICAST_ADDR (skb->data))
                    {
                         skb->mark = CONVERT_PORT_ID (get_portid(vid));                   
                    }
如果是组播包,则找skb->mark的值
static uint32_t port_id_array[32] =
{
    0x00000001, 0x00000002, 0x00000004, 0x00000008,
    0x00000010, 0x00000020, 0x00000040, 0x00000080,
    0x00000100, 0x00000200, 0x00000400, 0x00000800,
    0x00001000, 0x00002000, 0x00004000, 0x00008000,
    0x00010000, 0x00020000, 0x00040000, 0x00080000,
    0x00100000, 0x00200000, 0x00400000, 0x00800000,
    0x01000000, 0x02000000, 0x04000000, 0x08000000,
    0x10000000, 0x20000000, 0x40000000, 0x80000000
};
   
#define CONVERT_PORT_ID(nr)     (port_id_array[(nr)])
2014.5.5 周一
开会讨论3G备份接入的问题,要做回原来的样子,坑啊;

2014.5.6 周二
修复741俄语版的问题,阅读交换机HNAT的文档;

2014.5.7 周三
整理项目,开会移交,哎,感觉没我什么事情了;

2014.5.12 周一
看书,跟进842的问题

2014.5.13 周二
开始在越南版上移植IPv6
跟踪一个modem时,发现一类新的额设备,ttyHS,主设备号是245,2.6.31中已经支持这类设备,但是配置上存在问题。

2014.5.14 周三
今天主要是跟踪842RU升级后出现的squashfs读错误的问题,原因是当升级了软件后,原来在flash中的文件系统已经被更新了,这时候通过读取RAM中的文件节点表去夺取flash中的文件(可能是一些库)这是后就谁失败。
现 在的解决方法是在文件\ap123\linux\kernels\mips-linux-2.6.31\drivers\mtd\devices \ath_flash_ioctl.c中写flash完成后增加一个定时器,当15秒后,如果用户态调用swreboot失败,那么定时器通过设置寄存器 令cpu重启。
static void tp_reset_cpu_force()
{    
     for(;;)
     {
           ath_reg_wr(ATH_RESET, ATH_RESET_FULL_CHIP);
     }
}

static int tp_wdt_reset_setting (int timeout)
{    
     static struct timer_list wdt_timer;    
     init_timer(&wdt_timer);
     wdt_timer.expires = jiffies + timeout*HZ;
     wdt_timer.function = tp_reset_cpu_force;
     wdt_timer.data = 1;
     add_timer(&wdt_timer);
}


实现起来也非常简单。
1.桥接wan口lan口。
2.屏蔽掉所有非IPv6的包。
 约定:
wan口eth1
lan口eth0、wlan0、wlan1
依赖:
ebtables、birdge-utils
命令样例
brctl addbr br-lan
      ifconfig br-lan up
  1. brctl addif br-lan eth0
  2. brctl addif br-lan eth1
  3. brctl addif br-lan wlan0
  4. brctl addif br-lan wlan1
  5. ebtables -t broute -A BROUTING -p ! ipv6 -j DROP
2015.5.15
特别的日子,奔33了。
tp9343 dragonfly
ap124  AR9344 WASP
ap143  QCA9533  HoneyBee
ap151 TP9343,Dragonfly 对应内部代号QCA956x,目前正在开发940NV3/941NDV6,单芯片450M 3*3。
ap123 AR9341 WASP

服务器中先运行tomcat
service tomcatd start
然后在其他主机上访问:

2014.5.16
删除了workspace/jenkins目录后,需要新建回这个目录
然后修改这个目录的账号权限
#chown tomcat.tomcat jenkins
然后重启tomcatd
#service tomcatd restart

在服务器上编译ffmpeg出错,原因是./configure 是检测出有ALSA驱动,并且把这个设备写到config.mak中。
在服务器上去掉alsi驱动
先rpm -qa | grep alsa 然后在rpm -e 软件包名称。

2014.5.19
使用iptables将访问80端口的包转发到8080(这个规则是修改发包时的目的端口,在client上设置)
iptables -t  nat -I  OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 8080
在服务器上应该
iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
然后保存配置
service iptables save
重启服务
service iptables restart
查看服务
service iptables status
重启服务器后,要设置服务器的域名和DNS地址
iptables的配置文件路径:cat /etc/sysconfig/iptables
2014.5.20
组内编译服务器的域名
域名:sohoici.rd.tp-link.net
ip:172.29.88.143
841V9 使用ap143 honeybee方案,解压工具使用参数-t lz4-ap143
如:./mkfirmware -x wr841nv9_Cambodia_3_15_9_up\(140519\).bin -t lz4-ap143
2015.5.26 周一
移植741越南版的IPv6,inet_pton不支持的问题,需要跟新uclibc库。
842反馈IPv6拨号失败的问题,原因是采用了3的IA类型,获取不了虚拟接口的MAC地址,这时候必须获取实际的WAN的接口地址,这
2014.5.28 周三
查看nat session数量
/proc/sys/net/netfilter/ip_conntrack_max  7系列是5120
/proc/sys/net/netfilter/ip_conntrack_udp_timeout UDP  session的老化时间




个问题没有提起前验证,造成又要重新提交一次测试,浪费时间。


2014.5.30
Cpu 0
$ 0   : 00000000 00000000 c0d0f09c 00000000
$ 4   : 81421ca0 81f7c000 81f6b420 81f7c000
$ 8   : 0000000c 00000002 00000002 ffffffff
$12   : 0000000f c0380000 c0380000 00000000
$16   : 00000000 00000001 81421ca0 81f7c000
$20   : 81421cc4 81421ca0 81f6b420 c0d435b0
$24   : 00000000 8011dd2c                 
$28   : 817c2000 817c3c68 801f0000 8011dad8
Hi    : 00000733
Lo    : 00179845
epc   : c0d0f0d8 ath_netdev_hardstart+0x3c/0x284 [umac]
    Tainted: P         
ra    : 8011dad8 dev_hard_start_xmit+0x244/0x328
Status: 1000ff03    KERNEL EXL IE
Cause : 80800008
BadVA : 0000001c
PrId  : 00019374 (MIPS 24Kc)


./mkfirmware -x wr841nv9_vietnam_viettel_ipv6_3_15_9_up\(140522\).bin -t lz4-ap143
文件if_ath.c
   if (txctl->ismcast) {
            txctl->mcast_rate = vap->iv_mcast_rate;

               /* wangqun 2014-02-24 15:53:55
               *
               * for Bug 48543, dut以11M速率对mDNS(bonjour)报文进行转发,
               * 建议使用1M
               *
               */
               if (unlikely(wbuf_is_bonjour(wbuf))) {
                 txctl->use_minrate = 1;
                    txctl->mcast_rate = 1000; //1/* 1Mbps */

2014.6.3周二
841V9 viettel ipv6版本软件烧写MAC地址失败,原因是使用了ssh登录,将这个功能在配置文件关闭就可以了;
提供这个软件来回了3次,第一次是无线驱动空指针的问题,这个需要校准后,无线设备起来才能发现,情有可原,但是写MAC可以自己测试一下就可以发现,这个还是做事不够细心导致;

2014.6.4 周三
中断将定期发生,搞好是每秒HZ次,HPET(High Precision Event Timer,高精度事件定时器)。
HZ=250是大多默认值,较高的HZ具有较好的交互性能和响应速度,但是一般性开销也会增多。
do_time负责全系统范围,全局性的任务:更新jiffies值,处理进程统计。
jiffies和jiffies_64的低32位是重合的,指向同一块内存或者寄存器。jiffies提供内核中一种简单形式的低分辨率时间管理方式。
定时器管理
内 核创建不同的组,根据定时器的到期时间进行分类,分类的基础是一个主数组,有5个数组项,都是数组,主数组的5个位置根据到期的时间对定时器进行粗略的分 类,第一个组是0~255个时钟周期,第二个组是256~2^14-1个始终周期,第三个组是2^14~2^20-1个始终周期,如此类推,第一个组的数 组有256个数组项,其余的是64个。
编译kernel时,指定配置文件,修改kernel中的script\kconfig\Makefile
%_defconfig: $(obj)/conf
ifneq ($(TP_CONFIG_FILE),)
     @echo "--------Use new kernel config file dir!----------"
     $(Q)$< -D $(TP_CONFIG_FILE) $(Kconfig)
else
     $(Q)$< -D arch/$(SRCARCH)/configs/$@ $(Kconfig)
endif

2014.6.6
ucWlanCfg.pAdv->uPower = WLAN_ADV_TX_POWER_DEF;
该参数在multissid,webserver和驱动配合有问题。

2014.6.10
3420 RU 反馈当使用4G modem 访问youtobe 或者speedtest产生大流量时,出现重启,看串口,出现了
swapper: page allocation failure. order:4, mode:0x20”信息。

Linux 提供了这样一个参数min_free_kbytes,用来确定系统开始回收内存的阀值,控制系统的空闲内存。值越高,内核越早开始回收内存,空闲内存越高。

[root@zyite-app01 root]# cat /proc/sys/vm/min_free_kbytes
163840
echo 963840 > /proc/sys/vm/min_free_kbytes

其他可选的临时解决方法:

关闭oom-killer

cat /proc/sys/vm/oom-kill
echo "0" > /proc/sys/vm/oom-kill
vi /etc/sysctl.conf
  vm.oom-kill = 0

2. 清空cache (可选)
echo 1 > /proc/sys/vm/drop_caches

2014.6.12
842RU的生产问题,因为进度上的把控,被隐含得批评了。
华为的一款4G modem的管理是使用web进行管理的,这样增加了对pin码操作的复杂度。

2014.6.17
特殊字符窜问题,在构造命令是遇到特殊的字符串,可以使用反斜杠进行转义
UINT8 *pppStrToChars(UINT8 *string, UINT8 *buffer)
{
    int i, j;
    UINT8 *pStr = string;
    int len = strlen(pStr);

    for (i = 0, j = 0; i < len; i++)
    {
        if (pStr[i] == '\'') /*如果是单引号,要加上双引号*/
        {
            buffer[j++] = '"';
            buffer[j++] = '\'';
            buffer[j++] = '"';
        }
        else if( pStr[i] == '%'' )
        else         /*其他的字符加单引号*/
        {
            buffer[j++] = '\''';
              buffer[j++] = "%";
              buffer[j++] = "%";
            buffer[j++] = '\''';
        }
    }
    buffer[j] = 0;

    return buffer;
}

设置无线支持sta的命令
iwpriv ath0 maxsta 5
显示无线支持最大sta的命令
iwpriv ath0 get_maxsta

2014.6.18
加拿大反馈一个3600的bug,对比D-Link的抓包结果,发现dhcp是不分配地址的,这是用也应该让路由器可以设置IP。
另外,西班牙在3600上测试IPv6时,发现DHCP的Reply报文的T1和T2都是0;

2014.6.19
验证TR069 设置CPE的更新周期出现的重启问题,原来在每个RPC函数被调用后,根据返回值决定路由器是否重启,返回1重启,返回0不重启;
后续要检查一下所有的节点,第一看看能不能支持,第二是否重启;
跟踪两个modem,MF182使用remote NDIS base Device,通过webgui进行设置。

2014.6.24
传输大文件的时候,smbd被kill掉,串口信息:
Call Trace:
[<801d2fdc>] dump_stack+0x8/0x34
[<8004fa40>] oom_kill_process+0x70/0x200
[<80050030>] __out_of_memory+0x170/0x1a8
[<800500dc>] out_of_memory+0x74/0xa0
[<80052fb0>] __alloc_pages_nodemask+0x440/0x55c
[<8004cd20>] grab_cache_page_write_begin+0x88/0xf4
[<80093c94>] block_write_begin+0x60/0x144
[<800940ec>] cont_write_begin+0x374/0x3e4
[<c0e5d74c>] fat_write_begin+0x54/0x60 [fat]
[<8004d9b0>] generic_file_buffered_write+0x114/0x38c
[<8004e2f8>] __generic_file_aio_write_nolock+0x454/0x4b0
[<8004eeec>] generic_file_aio_write+0x8c/0x12c
[<8006e130>] do_sync_write+0xd4/0x130
[<8006ed30>] vfs_write+0xac/0x140
[<8006ee28>] sys_pwrite64+0x64/0x9c
[<8000e204>] stack_done+0x20/0x3c
Mem-Info:
Normal per-cpu:
CPU    0: hi:    0, btch:   1 usd:   0
Active_anon:332 active_file:1842 inactive_anon:404
inactive_file:2122 unevictable:29 dirty:1 writeback:2126 unstable:0
free:190 slab:1664 mapped:779 pagetables:73 bounce:0
Normal free:760kB min:720kB low:900kB high:1080kB active_anon:1328kB inactive_anon:1616kB active_file:7368kB inactive_file:8488kB unevictable:116kB present:32512kB pages_scanned:16096 all_unreclaimable? no
lowmem_reserve[]: 0 0
Normal: 10*4kB 0*8kB 1*16kB 2*32kB 0*64kB 1*128kB 0*256kB 1*512kB 0*1024kB 0*2048kB 0*4096kB = 760kB
3993 total pagecache pages
8192 pages RAM
692 pages reserved
4943 pages shared
2969 pages non-shared
Out of memory: kill process 980 (smbd) score 177 or a child
Killed process 980 (smbd)

共享内存的大小
#define SHMEM_SIZE 102400
#define BUFFER_SIZE (128*1024)
 InBuffer = (char *)malloc(BUFFER_SIZE + LARGE_WRITEX_HDR_SIZE + SAFETY_MARGIN);
 OutBuffer = (char *)malloc(BUFFER_SIZE + LARGE_WRITEX_HDR_SIZE + SAFETY_MARGIN);
修改后发现也是会出现进程被杀死的问题
通过修改参数打开smbd的debug功能,查看出现问题时的log,暂时无太多的发现,估计要跟一跟整个流程了。


NTFS格式硬盘出现的问题
Call Trace:
[<801d2fdc>] dump_stack+0x8/0x34
[<8004fa40>] oom_kill_process+0x70/0x200
[<80050030>] __out_of_memory+0x170/0x1a8
[<800500dc>] out_of_memory+0x74/0xa0
[<80052fb0>] __alloc_pages_nodemask+0x440/0x55c
[<800553f4>] __do_page_cache_readahead+0xe0/0x23c
[<8005557c>] ra_submit+0x2c/0x38
[<8004d1d0>] filemap_fault+0x1f8/0x408
[<8005d4dc>] __do_fault+0x70/0x44c
[<8005ec88>] handle_mm_fault+0x32c/0xb5c
[<800101b0>] do_page_fault+0x100/0x300
[<80006480>] ret_from_exception+0x0/0xc
查看函数调用,发现__alloc_pages_nodemask调用了__alloc_pages_may_oom,__alloc_pages_may_oom又调用了out_of_memory。
而申请页的时候:
/* First allocation attempt */
     page = get_page_from_freelist(gfp_mask|__GFP_HARDWALL, nodemask, order,
               zonelist, high_zoneidx, ALLOC_WMARK_LOW|ALLOC_CPUSET,
               preferred_zone, migratetype);
     if (unlikely(!page))
          page = __alloc_pages_slowpath(gfp_mask, order,
                    zonelist, high_zoneidx, nodemask,
                    preferred_zone, migratetype);

进入__alloc_pages_slowpath是一个unlink小几率时间。

To free pagecache, use echo 1>/proc/sys/vm/drop_caches;
to free dentries and inodes, use echo  2> /proc/sys/vm/dorp_caches
to free pagecache, dentries and inodes, use echo 3> /proc/sys/vm/dorp_caches

2014.6.27
编码大意,将
int wlanGetIntRate(int index)
{
    int nBoardType = swGetBoardType();

    switch (nBoardType)
    {
    case BOARD_PB92:
    case BOARD_AP151:
        return wlanIntRateTable_450M[index];
    case BOARD_AP123:
    case BOARD_AP143:
     /* added by ZQQ, support ap121, 09Jun14 */    
     case BOARD_AP121:
          return wlanIntRateTable_150M[index];
     /*  by ZQQ, 09Jun14 */
    default:
        return wlanIntRateTable_300M[index];
    }
}
这样做导致AP123和AP143的都变成了150M的了,太大意了。

2014.6.27
代码中使用BOOL write_through = BITSETW(inbuf+smb_vwv7,0);这个是协议中的一个值,控制是否需要sync,但是该值一直是0.

2014.7.2 周三
svn 版本回退:
回退svn版本,假设要将working copy版本从head version回退到版本888
svn merge -r HEAD:888 ./testsvn
svn ci -m "*)roll back to ver888"

阅读usbserial驱动的代码,主要是查看驱动初始化的流程
模块的初始化函数usb_serial_init
首先是申请usb_serial_tty_driver 的内存
usb_serial_tty_driver = alloc_tty_driver(SERIAL_TTY_MINORS);
然后注册usb_serial_bus_type
result = bus_register(&usb_serial_bus_type);

2014.7.7 周一
昨天去和一个资深同事聊天,关于一些技术问题给鄙视了。他的要求就是专做杯子,但是做一个安全,可靠,容易扩展,容易维护的杯子,所以会花30%的时间去做 杯子,但是要花70%的时间去测试这个杯子的安全性,稳定性。另外,每做一件事情,要深入了解当中的细节地方,技术就体现在了解程度的深浅。

2017.7.8 周二
调试dyndns的问题,出现select出错,返回Interrupted system call,看资料是select被中断信号打断。
可以通过函数int sigprocmask检查或者设置信号屏蔽字段,详细的解析见UNIX 环境高级编程 P258.
在代码中使用sigprocmask 和sigismember读出当前屏蔽的信号,发现SIGINT是当前屏蔽的信号成员,这就奇怪了,难道是服务器返回了FIN而不是数据包??
QCA分支上的解决方式是设置了一个计算器,循环5次select,在842RU上测试发现第4次的时候就可以登录上。

2014.7.14 周一
计划:
1)TL-WR1043(RU) 2.0的自测,并在上午提交测试,这任务必须在上午完成;
2)写绩效;
3)讨论代码合并的事情;
完成情况
上午完成了TL-WR1043(RU) 2.0的提测,写绩效总结,然后阅读了TR069模块的代码,下午分析波兰反馈4G modem解PIN码失败的问题,讨论了基准路由器工作的开展。

2014.7.15 周二
计划
1)阅读TR069模块代码;
2)跟进TL-WR740/741 RU项目,修复bug
3)基准路由器工作计划;
完成情况:将TR069的代码架构阅读了一次,将立项报告中不支持的方式列了出来。跟进RU项目的进度。

2014.7.16 周三
计划:
1)跟进当前提测项目进度;
2)完善QCA上的IPv6功能;
一种debug方式的宏
#ifdef DEBUG
#define devdbg(hw_cdc_net, fmt, arg...) \
        printk(KERN_DEBUG "%s: " fmt "\n" , (hw_cdc_net)->net->name , ## arg)
#else
#define devdbg(hw_cdc_net, fmt, arg...) do {} while(0)
#endif

2014.7.17 周四
上午4*4 11AC的培训,下午开始创建用于基准路由器软件项目

2014.7.18 周五
台风来了。
上午修复741RU的问题和自测,下午准备提测,搬位置。今天是武爷TP最后一天,中午boss请大家搓一顿。

2014.7.21周一
开始执行基准路由器的移植,今天主要是完成SLAAC的修改。
现在知道两个问题,一个是SLAAC的生效时间,这个要接收RA包,定期更新网关的有效时间,软件中的ACCEPT_RA参数不能关闭了,但是会出现如果前端有两个RADVD服务器公告前缀,会出现两条默认网关。
反馈的LAN->WAN不通的问题,是因为nf-contract模块配置不一样,ar9331的不支持mark参数导致iptables没有执行完毕导致的;

2014.7.22 周二
上午花时间将3420的问题处理一下,要准备提测,解决4G路由重启问题;
下午将RA的M/Obit实现了,Obit 设置成1的情况下,使用DHCP方式,在代码里面之间将运行时的wan
Type参数修改,这个逻辑有点乱。

2014.7.23 周三
上 午看tr069的代码,增加无线的节点,然后想在本地通过3g路由器搭建测试环境,但是失败,看日志是绑定本地socket失败,可能是因为WAN的IP 是私有IP的缘故,下午去测试房搭建环境,注意,ACS的url末尾不能有空格,否则,解析失败。登录ACS服务器上后,可以设置ACS登录CPE的账号 和密码。

2014.7.23 周四
在ACS服务器上发现了VNPT的一版软 件,发现上面是支持无线节点的,鉴于这个版本的代码和AZ的代码是一样的,只是param.xml不一样,然后将这个文件替换,发现还是没有,想到可能是 因为ACS服务器上挂载设备的问题,重新unmount和mount一下后,可以了,无线的节点都支持了。
仔细参看节点发现两个问题,支持4组的无线节点,咨询过忠,是以为以前要求支持4组VAP,qca的已经删除了。
第二个问题,修改无线参数路由器重启。

2014.7.29 周一
上午终于将需要的节点添加进去了,在ACS上可以获取一个节点下的子节点名称。

2014.7.30 周二
上午去24栋开会,关于RU版软件功能定义,研发和测试遇到的问题和沟通方式。下午跟进德国LV100的问题。

2014.7.30周三
跟进ISP反馈的问题,初步是初始化首发包队列中的buffer太小导致的;

2014.7.31周四
检查所有的节点,整理无线节点的参数意义和对应页面的位置,删除param.xml不支持的节点,导致9002错误。
ACS测试比较麻烦,经常被人剔除。

2014.8.4 周一
今 天遇到一个奇怪的问题,pppoev6在使用共用session的时候,httpd挂起,分析core文件,发现是pc指针在调用 pppoev6FormatCmd函数返回后,值变为NULL,导致挂起,分析是因为pppoev6FormatCmd中调用了 swGetPppoeCfg,奇怪的是这儿接口在其他的机型都有用到,怎么只有在这个841越南版才出现。暂时通过增加获取用户名和密码的接口,而不用 swGetPppoeCfg可以绕开这个问题。

2014.8.5 周二
今天 再841上反馈了一个TR069通过ACS升级的问题,测试部反馈是出现9002错误,我在本地自测发现出现两种情况,一是出现过9010错误,下载文件 失败,二是出现httpd挂起现象。第二种现象出击的记录比较高,跟踪问题,发现是因为接收函数sock_recv使用的buffer,边界赋值导致的。 该函数传参是buffer的长度MAX_DATA_SIZE,但是在接收到包的时候,会赋值buffer[recv_ret_value]= '\0',当recv_ret_value = MAX_DATA_SIZE的时候,就出现地址越界了。
修改方法:传入sock_recv的长度为MAX_DATA_SIZE - 1即可;

2014.8.6 周三
今天主要是编写TR069模块的代码阅读和测试过程文档。ADSL给了OpenACS的资料,并且他们组自己用pyhon写了一个ACS的服务器。

2014.8.7 周四
上午请假去搞户口的事情,下午回来继续写文档,将文档发给了smb。

2014.8.8 周五
88节?
今天上午测试复现客户反馈的TR069问题,没复现出来,编译了软件给用户去测试。
下 午将benchmark的代码上传,然后讨论了CE-Router的测试。后来处理Buildserver OEM编译的问题,发现现在我们没有OEM build server的虚拟机,是不能通过root权限进行编译的,现在内销那边的做法是使用一个虚拟机,然后在虚拟机上使用root权限进行编译。这样可以解决 创建文件失败的问题。

2014.8.11 周一
请假,回家办理户口的事情。悲剧,不能迁回老家了。

2014.8.12 周二
早上处理了TR069反馈的问题,看日志是获取LAN PC IP的时候,是通过/proc/net/arp 文件读出的IP地址,但是获取为空,返回-1,出现内部错误。修改使不返回-1就可以了。
下午处理了项目的进度问题,842RU和740RU都测试结束了,反馈的bug 都不严重,等来处理。
jenkins的OEM编译节点需要一台PC担当,已经反馈了。

2014.8.12 周四
私有IP:
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255 
又酱油了一天!

2014.8.15 周五
今天上午了解了jenkins如何构建一个节点。
下 调试Guestnetwork 时间调度出现的问题和VLAN arp转发的问题,VLAN ARP转发是因为我们路由的VLAN划分和交换机的不一样,路由器中所有的VLAN都划分了VLAN ID,而功能需要,在收包函数中虚拟出多个设备进行收包,并且把这些设备放在不同的桥中。
# brctl show
bridge name     bridge id               STP enabled     interfaces
brIPPHONE               8000.00037fffffff       no              eth0.263
                                                        eth1.263
brMutliIPTV             8000.00037fffffff       no              eth0.1110
                                                        eth1.1110
brIPTV          8000.00037fffffff       no              eth0.4000
                                                        eth1.4000
br0             8000.000aeb130919       no              eth0.1257
                                                        eth0
                                                        ath0

2014.8.18 周一
和 我设想的一样,switch的PVLAN通过设置switch的寄存器,将PORT划分不同的VLAN,由这个port收到的包,如果没有804.1q字 段的话,交换机在收包时将VLAN ID写入到802.1q字段中,在以太网驱动层,驱动根据这个VLAN ID识别是从哪个端口上来的包,并根据具体的需求,使用虚拟的收包设备替换实际的收包设备。这些收包设备加入不同的网桥,这样可以实现不经过NAT就可以 转发数据。
下午调试TR069的interval 时间立即生效的事情,代码中使用了定时器进行定时发送,而时间间隔通过select实现。因为select是阻塞的,所以如果一开始就select一个长 时间的话修改不能生效。后来通过将长时间的select修改成短时间的多次select,在每次select结束后判断时间是否被修改。然后修改 timer的select值。

2014.8.19  周二
今天解决一个巴基斯坦反馈的ZTZ AC3635,这个modem的信息:
T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  4 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=19d2 ProdID=1403 Rev=f0.18
S:  Manufacturer=ZTE,Incorporated
S:  Product=ZTE CDMA Technologies MSM
S:  SerialNumber=AC6000ZTED000000
C:* #Ifs= 3 Cfg#= 1 Atr=c0 MxPwr=500mA
A:  FirstIf#= 0 IfCount= 2 Cls=e0(wlcon) Sub=01 Prot=03
I:* If#= 0 Alt= 0 #EPs= 1 Cls=e0(wlcon) Sub=01 Prot=03 Driver=rndis_host
E:  Ad=81(I) Atr=03(Int.) MxPS=  64 Ivl=2ms
I:* If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=rndis_host
E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=4ms
I:* If#= 2 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=(none)
E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
出现了一个新的类型,e0,网上查找资料是一个叫btusb的驱动,这个是蓝牙驱动,但是查找rndis_host驱动发现这个驱动也可以支持这类设别,
static int is_wireless_rndis(struct usb_interface_descriptor *desc)
{
     return (desc->bInterfaceClass == USB_CLASS_WIRELESS_CONTROLLER &&
          desc->bInterfaceSubClass == 1 &&
          desc->bInterfaceProtocol == 3);
}
驱动挂载失败的原因是作为rndis设备,它的管理字段acm->bmCapabilities需要为0,尝试将这部分代码隐藏,发现OK,驱动挂载上并且可以访问modem的管理页面。
在cdcusb11.pdf文档中的5.2.3.2中可以看到这个字段的意思,只支持某些功能。这个modem的值为2,表示设备可以使用CDC data 接口接收和发送管理信息。
rndis驱动主要是实现rndis协议,驱动中主要完成3个事情,bind,rx_fixup,tr_fixup.
bind:绑定主要是和modem端的设备进行rndis协议的通信,协商版本,MTU等信息;这里值得关注的是指针union的用法,很巧妙;
*x_fixup:主要是添加和去除rndis包头;
usbnet_generic_cdc_bind:cdc 类设备(cdc_ether.c)必须调用的一个函数,作用是探测控制接口,获得数据接口,收集bulk端点(usbnet_get_endpoints),激活接口,设置MTU。

2014.8.20 周三
上午调试PL的3220 PIN码的问题,已经发出Beta软件,并整理了项目对应的SVN路径。
下午继续看cdc 类驱动的代码。
不同的cdc 设备类使用的驱动是通过类,子类和协议三个参数决定的,一般通过宏
USB_INTERFACE_INFO定义,如:
{ USB_INTERFACE_INFO(USB_CLASS_VENDOR_SPEC,
        0x02, 0x16),
        .driver_info = (unsigned long)&cdc_ncm_info,
    },
cdc_ncm_rx_fixup:读取skb_in 中的cdc_ncm包头,并做判断,如果没问题,则去除这个包头,然后上交到协议栈(usbnet_skb_return);
2014.8.21 周四
优化PL解PIN的代码,阅读usb驱动代码。
对 于qmi的驱动,bind函数qmi_wwan_cdc_bind调用usbnet_cdc_bind进行cdc设备的检查后,会初始化一个 cdc_enc的设备,并在这个设备中添加一个client,而这个client作为qmi_wwan_state的成员指针,而APN和认证方式等参数 在这个client中赋值。
连接通过函数qmi_wds_start实现,这个函数先将参数转换成tlv格式,然后通过qmi_send_msg函数进行发送,qmi_send_msg先将数据转成
小端字节顺序,然后调用cdc_enc_send_sync发送到modem。
2014.8.22 周五
上午学习VIM的的使用,这个工具要熟练使用啊。
下午开始合并soho5和merge分支代码。协助测试TR069,开户解决工厂反馈的7系列功率偏低的问题。

2014.8.25 周一
又是新一周的开始,上午哥伦比亚客户反馈软件没问题,准备提测,但是在检查修改要求时,发现时区也需要改,咨询业务,说需要和客户确定一下,我丢了个去。
软件已经搞定了,就差这儿时区问题,等一等吧。
下午研究了一下川哥的那个路由器,貌似很强大,openwrt平台,提供很多功能。
julian 反馈842和两个modemE3272和E3276的问题,一个是100M一个是150M,在32M的样机上重启,子啊64M的样机上OK,明显内存问 题,modem采用cdc_ncm驱动,在驱动中有检测速率的参数,我改了一下&
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值