代码改变世界

TR069协议小结

2013-08-01 08:34  zmkeil  阅读(3296)  评论(0编辑  收藏  举报

    也称为CWMP,是在Internet网上通过wan口控制通信终端设备的协议。其协议流程如下图所示:

具体网上有很多资料。其主要的两个内容是:HTTP Client模型、DATA模型。

 

    HTTP Client模型是精华,也是比较复杂的。目前较为可靠的开源库有libevent,网上有基于该开源库编写的Client模型,名字好像叫evcpe。在公司用的这套代码,我只是大概学习了下,很复杂。

    上图所示的是协议的一个完整的session,该session由终端设备发起,且不停地重复循环该session。当然,若ACS端没有指令(或终端没有更新等),那么session到Inform后就会终止。然后等待开始下一个session。

终端设备主动发起协议session的方法有以下几种:(以下client即终端设备)

  1. client周期性的主动发起,即一个周期发起一次session;
  2. client端的参数有更新(如LAN端配置、手动配置等),会主动发起session;
  3. client在另一个端口上维护一个creq监听,当ACS端要求配置时,回向client的creq端口发请求,然后client被动发起session。
  4. 。。。。。。或者还有其他的吧。。。。。。

把这些方法揉和在一起,实现起来时很复杂的,那套event的代码,我最终也没能全看明白,以后有机会再看吧。从测试的结果看,好像有这几种方法,不过也可能不对,姑且这样认为。

 

DATA模型也是很重要的,大部分参数模型由TR098协议规定好了,只要照样子做就行。要做的工作主要两个方面:

  1. 在终端本地,用一种方式来表示数据,与ACS端的数据对应。这里我们用的是xml文件,按照tr098把参数写在xml文件中,方便参看。系统启动后,读取该xml文件,并在内核中建立一个庞大的类似于数组的结构存储这些参数。并且在该数组结构和xml文件间实现一种类似文件系统中的磁盘更新的机制。
  2. 是各种get/set作用到实际的系统中去。这里要根据各平台的特性来做了。

 

要讲的也很少,有时间还是去看看那个代码,应该是很有价值的。