Easycwmp_源码分析
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 |
Easycwmp_源码分析相关推荐
- 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析
目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...
- SpringBoot-web开发(四): SpringMVC的拓展、接管(源码分析)
[SpringBoot-web系列]前文: SpringBoot-web开发(一): 静态资源的导入(源码分析) SpringBoot-web开发(二): 页面和图标定制(源码分析) SpringBo ...
- SpringBoot-web开发(二): 页面和图标定制(源码分析)
[SpringBoot-web系列]前文: SpringBoot-web开发(一): 静态资源的导入(源码分析) 目录 一.首页 1. 源码分析 2. 访问首页测试 二.动态页面 1. 动态资源目录t ...
- SpringBoot-web开发(一): 静态资源的导入(源码分析)
目录 方式一:通过WebJars 1. 什么是webjars? 2. webjars的使用 3. webjars结构 4. 解析源码 5. 测试访问 方式二:放入静态资源目录 1. 源码分析 2. 测 ...
- Yolov3Yolov4网络结构与源码分析
Yolov3&Yolov4网络结构与源码分析 从2018年Yolov3年提出的两年后,在原作者声名放弃更新Yolo算法后,俄罗斯的Alexey大神扛起了Yolov4的大旗. 文章目录 论文汇总 ...
- ViewGroup的Touch事件分发(源码分析)
Android中Touch事件的分发又分为View和ViewGroup的事件分发,View的touch事件分发相对比较简单,可参考 View的Touch事件分发(一.初步了解) View的Touch事 ...
- View的Touch事件分发(二.源码分析)
Android中Touch事件的分发又分为View和ViewGroup的事件分发,先来看简单的View的touch事件分发. 主要分析View的dispatchTouchEvent()方法和onTou ...
- MyBatis原理分析之四:一次SQL查询的源码分析
上回我们讲到Mybatis加载相关的配置文件进行初始化,这回我们讲一下一次SQL查询怎么进行的. 准备工作 Mybatis完成一次SQL查询需要使用的代码如下: Java代码 String res ...
- [转]slf4j + log4j原理实现及源码分析
slf4j + log4j原理实现及源码分析 转载于:https://www.cnblogs.com/jasonzeng888/p/6051080.html
最新文章
- 行业新价值 看物联网的那些“后续力量”
- AI 机器人也能成佛?日本人觉得可以。
- 可用性追踪是虚拟化网络的关键
- 金融工程相关问题积累与解决
- JVM内存结构与GC
- delphi内存泄露查找工具之MemProof教程
- Chisel 学习笔记(四)
- 新ANTLR 4.6的重要更改
- 【javascript高级教程】JavaScript Number 对象
- python response[200_python – django上的代码200 httpresponse
- oracle去掉默认值sql,如何在T-SQL中删除默认值或类似约束?
- pytorch学习笔记(三十七):Adam
- php调试工具——XDebug使用
- Redis交互编程语言及客户端
- PHP进销存源码 ERP多仓库管理系统源码 手机端+小程序版进销存 全开源可二开 uniapp
- Intel显卡跑ROS与CUDA总结(MacBook Pro 11.6.3)
- 0基础可不可以学大数据
- 利用批处理代码快速恢复桌面图标小箭头,更可能解决win7出现黑色方块问题
- 数据仓库与元数据管理
- 腾讯代码安全指南开源,涉及 C/C++、Go 等六门编程语言
热门文章
- 什么是“天道左旋、地道右旋”?
- Kettle读取按行分割的文件
- KrbException: Clock skew too great (37) - PREAUTH_FAILED问题解决与服务器时钟同步
- Excel中如何让第一行、第二行一直显示出来 excel冻结窗格与拆分窗格
- 计算机编程专业的民办大学排名,法国计算机编程专业大学排名(2020年USNEWS)_快飞留学...
- luckysheet 只读模式和编辑模式
- 【雕爷学编程】Arduino动手做(57)---四档矩形波模块
- WIN10 64位系统MATLAB R2018b第一次安装libsvm
- radmi4a Android,红米手机4A获取root超级权限的教程
- 优雅地使用eruda在移动端上调试网页