TR069协议与商业应用5——TR069协议架构设计

本文介绍了TR069(CWMP)协议的程序设计思想,架构分析,包括配置文件解析,日志,XML解析,任务处理和事件管理等模块。TR069平台作为远程网管系统的子系统,主要通过TCP协议管理CPE设备。文章强调了协议与设备数据模型的分离,便于产品快速移植和维护,以及STUN协议在公网连接中的作用。
摘要由CSDN通过智能技术生成

声明:原创作品,严禁用于商业目的。 如有任何技术问题,欢迎和我交流: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平台”,属于远程网管系统的一个子系统。主要功能是通过TR069(CWMP)协议基于可靠链接的TCP协议来远程管理CPE设备。本系统在系统中的位置如图4.1所示。
TR069平台在系统中的位置

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),便于产品的独立编译和维护开发。
cwmp流程

3.1 配置文件解析(libconf)

根据配置文件的全路径和内容初始化数据结构,使用例子如下:

char      conf_file[PATH_MAX] = {
   0};
conf_t   *tmp = NULL;
tmp = conf_load(conf_file);
count = conf_get_int(tmp, "global:count", 0);

3.2 日志模块

为了便于和Linux的syslog统一和管理,这里定义的日志等级与syslog一致。 
CWMP_LOG_EMERG ----------------------> EMERG = 0
CWMP_LOG_ALERT ----------------------> ALERT = 1
CWMP_LOG_CRIT ----------------------> CRIT = 2
CWMP_LOG_ERROR ----------------------> ERROR = 3
CWMP_LOG_WARN ---------------------> WARN = 4
CWMP_LOG_NOTICE ---------------------> NOTICE= 5
CWMP_LOG_INFO ---------------------> INFO = 6
CWMP_LOG_DEBUG ---------------------> DEBUG = 7

3.3 XML解析模块

使用libexpat库函数解析设备XML格式文件,以及CWMP和ACS之间交换的SOAP消息。device.xml文件内容如下:

<TR069 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <trf>
    <obj name="InternetGatewayDevice">
      <param name="DeviceSummary" getval_func="CpeGetDeviceSummary"></param>
      <param name="LANDeviceNumberOfEntries" type="2" getval_func="CpeGetLANDeviceNumberOfEntries"></param>
      <param name="WANDeviceNumberOfEntries" type="2" getval_func="CpeGetWANDeviceNumberOfEntries"></param>
      <obj name="DeviceInfo" noti_rw="1">
        <param name="SpecVersion" getval_func="CpeGetDeviceInfoSpecVersion"/>
        <param name="HardwareVersion" getval_func="CpeGetDeviceInfoHardwareVersion"></param>
        <param name="SoftwareVersion" getval_func="CpeGetDeviceInfoSoftwareVersion"></param>
        <param name="Manufacturer"      getval_func="CpeGetDeviceInfoManufacturer"></param>
        <param name="SerialNumber"      getval_func="CpeGetDeviceInfoSerialNumber"></param>
        <param name="ManufacturerOUI" getval_func="CpeGetDeviceInfoManufacturerOUI"></param>
        <param name="ProvisioningCode" rw="1" getval_func="CpeGetDeviceInfoProvisioningCode" setval_func="CpeSetDeviceInfoProvisioningCode"></param>
        <param name="ProductClass" getval_func="CpeGetDeviceInfoProductClass"></param>
        <param name="DeviceType" getval_func="CpeGetDeviceInfoDeviceType"></param>
     <param name="ModelName" getval_func="CpeGetDeviceInfoModelName"></param>
  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kcyuan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值