声明:原创作品,严禁用于商业目的。 如有任何技术问题,欢迎和我交流:19826269205(微信同号)。
文章目录
腾讯课堂链接
B站视频链接
1. TR069(CWMP)程序设计思想
程序架构设计的思想来自于easycwmp官网,看过或者用过easycwmp的工程师应该都知道,该开源代码还有商业版,而且价格不菲。easycwmp官网如是说:DataModel is developped with shell as free solution and with C as commercial solution.。开源代码用来学习还是值得的,若是用于商业产品可能就会显得"力不从心"。具体原因在前面的easycwmp商业源码和免费源码对比中可见,那么如何开发可以商业使用的TR069模块,并且实现DataModel 和CWMP core分离,以便于快速开发业务需求。本篇介绍如何实现这样的系统模块,并且这样的系统模块在主流OEM厂商的研发中非常实用。
网管系统目前在一些主流的家用路由、企业网关、语音电话等网络产品中应用广泛。我们可以把TR069部分做一个参考系统名为“TR069平台”,属于远程网管系统的一个子系统。主要功能是通过TR069(CWMP)协议基于可靠链接的TCP协议来远程管理CPE设备。本系统在系统中的位置如图4.1所示。
2. 架构分析
TR069主体架构协议与设备数据模型层进行分离,达到各产品使用相同的框架,设备相关的编译成一个动态Library或者静态库形式。通过不断的实践,可以使TR069主体框架不断成熟。在国内,可以实现对于同款产品供应给不同的通讯商(电信,移动,联通等),相同的功能,通过可能仅需要改变节点文件XML,基本上不需要改变协议代码。这样,可以快速实现产品的移植开发,更好的维护产品升级。
(1) 对于协议的扩展的分析
对于TR069协议来说,有些功能是可以扩展的。比如事件,可以定义协议规范的上报事件,也可以根据运营商实现私有化或者自定义的事件。比如数据模型的方法,也可以扩展自定义的节点和相应的RPC操作方法等。这些都需要在技术开发实现过程中需要分析清楚。
(2) 对于不同设备,不同产品线差异的分析
需要在相应的XML配置文件中体现出来。
(3) 对于不同TR069客户端之间冲突的分析
在通过TR069改变系统配置的时候,考虑使用进程间互斥来避免发生冲突。
(4) 对于协议开发过程的依赖库分析
对于TR069协议层,主要依赖于网络通信库libcurl和XML文件解析库libexpat,帮助我们简化实现协议层的源码编写工作。,而DataModel数据层,根据自身产品的业务特点,可以使用uci存储、sqlite数据库等实现产品的业务功能开发。
(5) Stun协议支持分析
STUN是RFC3489规定的一种NAT穿透方式,对应于TR111协议,本系统平台采用独立线程运行,支持公网上的网管平台连接,后面会有专门介绍如何实现STUN的CPE侧开发。
3. TR069程序设计
tr069程序的单进程处理流程。大致分为:配置文件解析模块,日志模块,设备xml解析模块,任务模块以及事件处理模块(有关联),多线程模块(可插入模块)等。
原则上,CWMP core的程序代码不需要修改,主要是根据客户的需求修正或者进行"插入式的"新增事件类型和模块化处理。而设备相关的程序,我们封装成了一个动态库(libcwmp.so),便于产品的独立编译和维护开发。