EasyCwmp 源码分析
CWMP是由数字用户线路DSL——Digital Subscriber’s Line论坛(之后更名为broadband-forum)发起开发的技术规范之一,编号为TR-069,所以又被称为TR-069协议。
CWMP的全称为:CPE广域网管理协议(CPE WAN Management Protocol),这个协议主要用于网管中心远程管理配置数量较大的网络设备。
目前主要应用在企业级路由器、一体化皮基站等网络设备的管理,所以CWMP是一个功能强大的用于数据中心、网管中心管理它所属的所有网络设备的网管协议。
1. 主要功能
1.1 提供数据参数配置
被管理设备(CPE)接收来自ACS发起的配置请求,请求包括了协议标准的参数(比如TR098、TR181等协议规定的数据模型),以及用户自定义的数据模型
1.2 文件管理
被管理设备(CPE)可以从ACS服务器通过协议标准的数据模型上传或下载文件(包括升级软固件包、日志文件、性能统计文件等等)
1.3 状态和性能监控
ACS可以通过标准定制的方法监控被管理设备(CPE)的状态和性能统计,同时CPE也可以主动通知ACS自身状态的更新
1.4 告警上报
被管理设备(CPE)可以主动向ACS服务器上传设备中的告警信息
2. EasyCwmp 源码结构
源代码下载地址为:http://easycwmp.org/download/easycwmp-1.8.6.tar.gz
2.1 源码架构组成
EasyCwmp设计包括2个部分:
- EasyCwmp Core:它包括 TR069 CWMP 引擎,并负责与ACS服务器的通信。使用C语言开发。
- EasyCwmp DataModel:它包含 TR-06 的 DATAModel,并且符合某些 DataModel 标准,例如 TR-098,TR-181,TR-104 等。使用 shell 脚本开发。
EasyCwmp源码流程如下:
2.2 文件结构
文件目录 | 文件说明 | 包含文件 |
---|---|---|
/src | EasyCwmp核心,CWMP引擎,并负责与ACS服务器的通信 | backup.c、base64.c、basicauth.c、config.c、cwmp.c、digestauth.c、 easycwmp.c、external.c、http.c、json.c、log.c、md5.c、time.c、ubus.c、xml.c |
/ext/openwrt/config | cwmp配置文件,使用uci模块进行配置 | easycwmp |
/ext/openwrt/scripts | 1.命令的入参处理 2.与系统接口的定义 | easycwmp.sh |
/ext/openwrt/scripts/functions/common | 1.操作方法的具体实现 2.Json相关函数 3.其他函数封装,数据模型ManagementServer相关节点定义,GET和SET方法实现 | common、device_info、ipping_launch、management_server |
/ext/openwrt/scripts/functions/tr098 | tr098 数据模型 | ipping_diagnostic、lan_device、root、wan_device |
/ext/openwrt/scripts/functions/tr181 | tr181 数据模型 | dhcpv4、ip、ipping_diagnostic、root、wifi |
2.3 文件依赖
-
libuci (配置文件管理)
-
libcurl (http 协议处理)
-
json-c (JSON 数据处理)
-
libubox (openwrt核心库之一,事件处理)
-
libubus (openwrt消息总线,实现不同应用程序之间的信息交互)
-
microxml: microxml is a fork of Mini-XML,
it’s being used to parse XML blocks passed between ACS and the client
and it’s published by freecwmp guys:- microxml source: git clone https://github.com/pivasoftware/microxml.git
- microxml OpenWRT package: wget http://easycwmp.org/download/libmicroxml.tar.gz
3. 源代码模块分析
3.1 系统启动流程
详细代码参考 easycwmp.c 中 main 函数。
- 获取输入参数。
- 建立互斥文件锁,设置互斥文件属性,确认为root登录。
- 内存分配,链表初始化,uloop_init,xml备份初始化。
- 创建子进程、两个pipe管道负责父子进程进行通信,子进程交给/usr/sbin/easycwmp 脚本程序接管,准备处理JSON格式参数。
- 加载easycwpm配置文件,通过配置文件初始化设备信息(设备类型、设备厂商、设备编号、厂商唯一编号),初始化心跳timer。
- 测试通过管道发送命令/usr/sbin/easycwmp 脚本程序并使其退出。
- 根据输入参数添加EVENT_BOOT或EVENT_PERIODIC事件到evens列表,设定timer回调处理事件(启动连接事件)。
- netlink_init,http_server_init 本地服务初始化
- 进入uloop_run主循环,处理事件消息。
3.2 RPC Methods (CPE)
这里主要介绍的是 CPE 设备端的 RPC 远程调用方法,ACS 服务端所具有的 RPC 方法需要查看对应服务器端的配置。
在 EasyCwmp 源码中已经实现了 TR069 协议中常用 RPC 方法,源码定义的 RPC 方法在 xml.c 文件中。
const struct rpc_method rpc_methods[] = {
{ "GetRPCMethods", xml_handle_get_rpc_methods },
{ "SetParameterValues", xml_handle_set_parameter_values },
{ "GetParameterValues", xml_handle_get_parameter_values },
{ "GetParameterNames", xml_handle_get_parameter_names },
{ "GetParameterAttributes", xml_handle_get_parameter_attributes },
{ "SetParameterAttributes", xml_handle_set_parameter_attributes },
{ "AddObject", xml_handle_AddObject },
{ "DeleteObject", xml_handle_DeleteObject },
{ "Download", xml_handle_download },
{ "Upload", xml_handle_upload },
{ "Reboot", xml_handle_reboot },
{ "FactoryReset", xml_handle_factory_reset },
{ "ScheduleInform", xml_handle_schedule_inform },
};
官方收费代码对比
Specifications | Open Source Solution | Premium Solution |
---|---|---|
TR-069 core license | GPLv2 | GPLv2 |
TR-069 Amendment version | Amendement 2 | Amendement 6 |
EasyCwmp Version | Version 1.8.6 | Version 3.1.0 |
TR-369 USP(*) | No | Yes |
Data Model licence | GPLv2 | Premium |
Data Model language | Shell (ash/bash) | C |
Connection requests | HTTP | HTTP STUN XMMP UPNP |
TLS libraries (Open SSL, Polar SSL, wolfSSL, uSSL.) | All supported | All supported |
Support file transfer protocol | HTTP, HTTPS, FTP | HTTP, HTTPS, FTP |
Supported Network protocols | IPV4, IPv6 | IPV4, IPv6 |
Datamodel ready for OpenWRT | Basic parameters of TR-098 and TR-181 | Advanced parameters of TR-098 and TR-181 |
BBF Supported Standards | TR-069, TR-098, TR-181, TR-106 | TR-069, TR-098, TR-181, TR-106, TR-111, TR-143, TR-157, TR-369 |
Data Model source code generator | No | Yes (TR-104, TR-135, TR-196, TR-140) |
Data Model automatic Test tool | No | Yes |
TR-157 Bulk Data | No | Yes |
TR-143 Diagnostics | No | Yes |
Support | Community | Annual Contract |