前言
本章介绍easycwmp的开发和使用方法;
一、CWMP是什么?
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 服务器上传设备中的告警信息;
二、easyCWMP
1.源码架构
下面是easycwmp的代码架构,详细内容可以参考官网,easycwmp有两个版本–全开源版本/高级解决方案版本,我使用的是开源版本;
EasyCwmp 设计包括 2 个部分:
- EasyCwmp Core:它包括 TR069 CWMP 引擎,并负责与 ACS 服务器的通信。使用 C 语言开发。
- EasyCwmp DataModel:它包含 TR-06 的 DATAModel,并且符合某些 DataModel 标准,例如TR-098, TR-181, TR-104 等。使用shell 脚本开发。
2.文件结构
三、环境搭建
可以参考官网教程
EasyCwmp 主要在 OpenWRT 上测试开发,同时也支持其他 linux 平台开发;
下载 easycwmp-openwrt- {x}.{y}.{z}.tar.gz,然后将其复制到您的/path/to/openwrt/package/
编译
编译打包
四、系统启动流程
详细代码参考 easycwmp.c 中 main 函数
- 获取输入参数。
- 建立互斥文件锁,设置互斥文件属性,确认为root登录。
- 内存分配,链表初始化, uloop_init, xml备份初始化。
- 创建子进程、两个pipe管道负责父子进程进行通信,子进程交给/usr/sbin/easycwmp
脚本程序接管,准备处理JSON格式参数。 - 加载easycwpm配置文件,通过配置文件初始化设备信息(设备类型、设备厂商、设备编号、厂商唯一编号),初始化心跳timer。
- 测试通过管道发送命令/usr/sbin/easycwmp 脚本程序并使其退出。
- 根据输入参数添加EVENT_BOOT或EVENT_PERIODIC事件到evens列表,设定timer回调处理事件(启动连接 事件)。
1.List item netlink_init, http_server_init 本地服务初始化
2.进入uloop_run主循环,处理事件消息。
五、调试方法
主要的开发工作再数据模型这块,通讯核心组件只需要搞懂逻辑即可
使用命令
sudo easycwmp --json-input
进入参数进入命令行模式,源码中可以看到主程序和shell交互,数据模型部分都是在shell部分完成的,通讯核心组件使用C完成的,进入命令行模式后
{ "command": "set", "class": "value", "parameter": "Device.DeviceInfo.ProvisioningCode", "argument": "123" } 设置Device.DeviceInfo.ProvisioningCode的值
{ "command": "apply", "class": "value", "argument": "unsetCommandKey" }
应用生效
{ "command": "end" }
结束
{ "command": "exit" }
退出
通过上面的设置后,我们可以使用
sudo easycwmp get
查看设置后的结果
还有一种修改配置的方式----使用uci进行修改
命令有
sudo uci show
sudo uci set ..........
sudo uci get
总结
easycwmp主要是理解shell交互流程,在原有基础之上对业务逻辑进行修改使用;