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 文件依赖

  1. libuci (配置文件管理)

  2. libcurl (http 协议处理)

  3. json-c (JSON 数据处理)

  4. libubox (openwrt核心库之一,事件处理)

  5. libubus (openwrt消息总线,实现不同应用程序之间的信息交互)

  6. 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 函数。

  1. 获取输入参数。
  2. 建立互斥文件锁,设置互斥文件属性,确认为root登录。
  3. 内存分配,链表初始化,uloop_init,xml备份初始化。
  4. 创建子进程、两个pipe管道负责父子进程进行通信,子进程交给/usr/sbin/easycwmp 脚本程序接管,准备处理JSON格式参数。
  5. 加载easycwpm配置文件,通过配置文件初始化设备信息(设备类型、设备厂商、设备编号、厂商唯一编号),初始化心跳timer。
  6. 测试通过管道发送命令/usr/sbin/easycwmp 脚本程序并使其退出。
  7. 根据输入参数添加EVENT_BOOT或EVENT_PERIODIC事件到evens列表,设定timer回调处理事件(启动连接事件)。
  8. netlink_init,http_server_init 本地服务初始化
  9. 进入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_源码分析相关推荐

  1. 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析

    目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...

  2. SpringBoot-web开发(四): SpringMVC的拓展、接管(源码分析)

    [SpringBoot-web系列]前文: SpringBoot-web开发(一): 静态资源的导入(源码分析) SpringBoot-web开发(二): 页面和图标定制(源码分析) SpringBo ...

  3. SpringBoot-web开发(二): 页面和图标定制(源码分析)

    [SpringBoot-web系列]前文: SpringBoot-web开发(一): 静态资源的导入(源码分析) 目录 一.首页 1. 源码分析 2. 访问首页测试 二.动态页面 1. 动态资源目录t ...

  4. SpringBoot-web开发(一): 静态资源的导入(源码分析)

    目录 方式一:通过WebJars 1. 什么是webjars? 2. webjars的使用 3. webjars结构 4. 解析源码 5. 测试访问 方式二:放入静态资源目录 1. 源码分析 2. 测 ...

  5. Yolov3Yolov4网络结构与源码分析

    Yolov3&Yolov4网络结构与源码分析 从2018年Yolov3年提出的两年后,在原作者声名放弃更新Yolo算法后,俄罗斯的Alexey大神扛起了Yolov4的大旗. 文章目录 论文汇总 ...

  6. ViewGroup的Touch事件分发(源码分析)

    Android中Touch事件的分发又分为View和ViewGroup的事件分发,View的touch事件分发相对比较简单,可参考 View的Touch事件分发(一.初步了解) View的Touch事 ...

  7. View的Touch事件分发(二.源码分析)

    Android中Touch事件的分发又分为View和ViewGroup的事件分发,先来看简单的View的touch事件分发. 主要分析View的dispatchTouchEvent()方法和onTou ...

  8. MyBatis原理分析之四:一次SQL查询的源码分析

    上回我们讲到Mybatis加载相关的配置文件进行初始化,这回我们讲一下一次SQL查询怎么进行的. 准备工作 Mybatis完成一次SQL查询需要使用的代码如下: Java代码   String res ...

  9. [转]slf4j + log4j原理实现及源码分析

    slf4j + log4j原理实现及源码分析 转载于:https://www.cnblogs.com/jasonzeng888/p/6051080.html

最新文章

  1. 行业新价值 看物联网的那些“后续力量”
  2. AI 机器人也能成佛?日本人觉得可以。
  3. 可用性追踪是虚拟化网络的关键
  4. 金融工程相关问题积累与解决
  5. JVM内存结构与GC
  6. delphi内存泄露查找工具之MemProof教程
  7. Chisel 学习笔记(四)
  8. 新ANTLR 4.6的重要更改
  9. 【javascript高级教程】JavaScript Number 对象
  10. python response[200_python – django上的代码200 httpresponse
  11. oracle去掉默认值sql,如何在T-SQL中删除默认值或类似约束?
  12. pytorch学习笔记(三十七):Adam
  13. php调试工具——XDebug使用
  14. Redis交互编程语言及客户端
  15. PHP进销存源码 ERP多仓库管理系统源码 手机端+小程序版进销存 全开源可二开 uniapp
  16. Intel显卡跑ROS与CUDA总结(MacBook Pro 11.6.3)
  17. 0基础可不可以学大数据
  18. 利用批处理代码快速恢复桌面图标小箭头,更可能解决win7出现黑色方块问题
  19. 数据仓库与元数据管理
  20. 腾讯代码安全指南开源,涉及 C/C++、Go 等六门编程语言

热门文章

  1. 什么是“天道左旋、地道右旋”?
  2. Kettle读取按行分割的文件
  3. KrbException: Clock skew too great (37) - PREAUTH_FAILED问题解决与服务器时钟同步
  4. Excel中如何让第一行、第二行一直显示出来 excel冻结窗格与拆分窗格
  5. 计算机编程专业的民办大学排名,法国计算机编程专业大学排名(2020年USNEWS)_快飞留学...
  6. luckysheet 只读模式和编辑模式
  7. 【雕爷学编程】Arduino动手做(57)---四档矩形波模块
  8. WIN10 64位系统MATLAB R2018b第一次安装libsvm
  9. radmi4a Android,红米手机4A获取root超级权限的教程
  10. 优雅地使用eruda在移动端上调试网页