CWMP开源代码研究1——开篇之作
摘自:https://www.cnblogs.com/myblesh/p/6225651.html
原创作品,转载请注明出处,严禁非法转载。如有错误,请留言!
email:40879506@qq.com
声明:本系列涉及的开源程序代码学习和研究,严禁用于商业目的。 如有任何问题,欢迎和我交流。(企鹅号:408797506)
既然是开篇,暂时就给自己定一个文章计划列表
1. 开篇总介绍: 协议规范资料,acs环境,免费easycwmp开发设计思想,个人商业cwmp开发
2. easycwmp: 安装和使用
3. ACS介绍:openacs部署,联创平台acs,华为itms,Vigoracs,XACS等常见acs平台
4. cwmp知识储备:acs反向链接,http认证(摘要,基本认证),RPC method支持, Event事件Code等
5. 整体程序设计: 整个程序结构分为两部分,cwmp core和lib库,前者实现协议核心部分,后者独立动态库主要完成规范节点,私有节点,和RPC方法,事件通知,参数监测等功能
6. cwmp lib库: 如何根据自身设备进行开发功能,节点实现等
7. cwmp移植:cwmp依赖环境,交叉编译,测试使用
8. 高级功能介绍: stun的NAT穿透,SSL加密, IPV6双栈协议等。
一. 协议规范
关于协议理解不是本博文系列的重点,这里给出几篇文章作为读者的参考,已经介绍了很详细。不过,还是要建议必须完整阅读一遍TR069英文规范。
中英文规范:http://download.csdn.net/detail/eryunyong/9293103
H3C技术:http://www.h3c.com.cn/Service/Channel_Service/Operational_Service/ICG_Technology/201011/699658_30005_0.htm
实际应用:http://www.docin.com/p-1306443672.html
二. 开源代码介绍
关于CWMP代码的开源实现主要有如下四个:mini-cwmp-master,netcwmp-master, freecwmp, easycwmp。 其中,前两个开源程序mini-cwmp-master和netcwmp-master已经没有再继续被维护,而且netcwmp-master据说已经开始收费了,所以对于小公司为了节约成本建议看看后面两个开源程序的代码进行研究。easycwmp是freecwmp的升级版,对easycwmp的代码进行了相关优化,而且目前维护的最好(推荐新手拿这个来研究CWMP协议)!下面提供几个开源代码的下载地址和介绍
netcwmp-master: http://www.ymcn.org/d-cgqi.html 或者 http://download.csdn.net/detail/eryunyong/9293063
freecwmp: http://www.freecwmp.org/
easycwmp: http://www.easycwmp.org/或者http://support.easycwmp.org/my_view_page.php
三. ACS环境搭建
这里依然还是给一些参考文章,因为网上资料太多了。
后续文章会专门介绍ACS安装和测试
四. 开发设计来源
二次开发结构设计来源于开源程序EasyCwmp的设计理念,关于介绍可以参考官网:http://www.easycwmp.org
五. 二次开发
如何利用CWMP开源程序合理设计我们的架构,并快速地应用于商业产品是该博文的重点。
下面先介绍目前在我们的项目产品中如何重新设计CWMP的架构和实现,给需要的朋友做一个参考:
4.1 系统概述
系统名为“TR069平台”,属于远程网关系统的一个子系统。主要功能是通过tr069协议来远程管理设备。该系统在整体系统中的位置如图所示:
4.2 设计的需求
TR069主体架构与设备相关进行分离,达到各产品使用相同的框架,设备相关的编译成一个Library。通过不断的实践,可以使TR069主体框架不断成熟。并且对于同款产品供应给不同的通讯商(电信,移动,联通等),相同的功能,通过可能仅需要改变XML,而不需要改变代码来达到目的。
4.3 设计的原理
1) 对于在设备上实现多个TR069客户端的考虑
基于公司目前有自主研发的网管平台,可以管理所有出厂的公司设备,而运营商也有网管平台,这时候就需要考虑在设备上实现多个TR069客户端的需求。考虑过使用多线程的方式来实现这一需求,但还是觉得用进程来实现,从逻辑上来说简单清晰一点。
2) 对于协议的扩展的考虑
对于TR069协议来说,有些东西是可以扩展的。譬如事件,可以有自定义的事件。譬如方法,也可以扩展自定义方法。这些都需要在实现的时候考虑清晰。
3) 对于不同设备,不同产品线差异的考虑
需要在配置文件中体现出来。
4) 对于不同TR069客户端之间冲突的考虑
在通过TR069改变系统配置的时候,考虑使用进程间互斥来达到目的。
4.3 代码架构设计流程
在开发过程中,协议本身的架构一般情况下并不需要我们修改,因为我们抽离了业务相关(和设备相关)的代码为library。