想看源码,不知从何入手,关注恩山论坛的一个帖子,凑热闹,分析一下Padavan的代码在这篇文章中,作者想修改源码是因为PPPOELCPecho连接失败,直接关闭了LCPecho。我按照他的思路看源码,首先是Makefile,就是这个道理,一个项目光是源文件就应该有几百甚至几千个,还不如从Makefile入手看一些结构。原作者提到/user下的shared、rc(routercontrol)、httpd这三个文件比较重要。所以从共享的Makefile开始。之前看过一点Makefile,可能是0.1桶水的水平。Makefile暂时先不管,继续按照原作者的思路走。在/user/shared中,我注意了defaults.c文件。该文件定义了两个nvram_pair类型的结构数组。结构定义如下。可以看到它是由两个字符串组成的结构体。这个结构定义了路由器的参数。修改PPPOELCPecho连接失败的问题,需要在这里定义一个新的参数来切换PPPOELCPecho功能。原作者定义为wan_ppp_lcp。结构nv??ram_pair{字符*名称;char*value;};structnvram_pairrouter_defaults[]={/*....*/{"wan_ppp_lcp","0"},/*....*/}structnvram_pairtables_defaults[]然后原作者看到了nvram.c文件,发现自己真的深入代码,很多linux系统函数他都不懂。这些细节暂且不管,按照我目前的理解往下看。原作者也提到了在rc.c文件中的main函数main中有一句。看来这句话应该让PPPOELCPechokeeptryingtorestart。elseif(!strcmp(base,"restart_wan")){notify_rc("manual_wan_reconnect");}往下看notify_rc()函数就是原作者说的信号机制。不是很理解,不过函数的大概意思就是在函数notify_rc_internal()中的两个路径(文件夹)下创建了一个名为manual_wan_reconnect的文件。然后在rc.c文件中有一个函数handle_notifications(),会在main中循环调用,检查是否有新的信号。对于这个例子,检查manual_wan_reconnect信号是否存在,然后调用manual_wan_reconnect()函数,然后是try_wan_reconnect(),然后是start_wan(),最后是原作者提到的launch_wan_pppd()(在net_ppp.c文件中)。原作者真是了不起。这些函数调用了很多函数。如果你不明白整个过程,就和我一样第一次看吧。以我的水平,感觉十天半个月都找不到这个功能。与LCPecho功能有关。添加调用关系图,如下。关于PPPD和PPPOE,原作者并没有多说。查了资料,放进去。3G模块拨号和ADSL拨号的区别。首先,3G模块通过USB转串口与CPU主控相连;而中国电信的ADSL网线通过网口连接到我们的CPU主控上。我们使用3G模块上网时,是通过串口数据流;而使用ADSL上网时,是通过互联网数据流。pppd和pppoe的区别pppd支持串口拨号上网,也就是说,如果我们使用华为和中兴的3G模块拨号上网,那么只有pppd就够了。pppoe通过调用pppd来实现p-to-p协议。简单的说pppoe就是为了解决pppd不能直接用于拨号上网的问题而编写的软件。pppoe工作时仍然需要调用pppd。————————————————版权声明:本文为CSDN博主“qiaoliang328”原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本文转载声明。
