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 文件结构

文件目录文件说明包含文件
/srcEasyCwmp核心,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/configcwmp配置文件,使用uci模块进行配置easycwmp
/ext/openwrt/scripts1.命令的入参处理
2.与系统接口的定义
easycwmp.sh
/ext/openwrt/scripts/functions/common1.操作方法的具体实现
2.Json相关函数
3.其他函数封装,数据模型ManagementServer相关节点定义,GET和SET方法实现
common、device_info、ipping_launch、management_server
/ext/openwrt/scripts/functions/tr098tr098 数据模型ipping_diagnostic、lan_device、root、wan_device
/ext/openwrt/scripts/functions/tr181tr181 数据模型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 },
};

官方收费代码对比

SpecificationsOpen Source SolutionPremium Solution
TR-069 core licenseGPLv2GPLv2
TR-069 Amendment versionAmendement 2Amendement 6
EasyCwmp VersionVersion 1.8.6Version 3.1.0
TR-369 USP(*)NoYes
Data Model licenceGPLv2Premium
Data Model languageShell (ash/bash)C
Connection requestsHTTPHTTP STUN XMMP UPNP
TLS libraries (Open SSL, Polar SSL, wolfSSL, uSSL.)All supportedAll supported
Support file transfer protocolHTTP, HTTPS, FTPHTTP, HTTPS, FTP
Supported Network protocolsIPV4, IPv6IPV4, IPv6
Datamodel ready for OpenWRTBasic parameters of TR-098 and TR-181Advanced parameters of TR-098 and TR-181
BBF Supported StandardsTR-069, TR-098, TR-181, TR-106TR-069, TR-098, TR-181, TR-106, TR-111, TR-143, TR-157, TR-369
Data Model source code generatorNoYes (TR-104, TR-135, TR-196, TR-140)
Data Model automatic Test toolNoYes
TR-157 Bulk DataNoYes
TR-143 DiagnosticsNoYes
SupportCommunityAnnual Contract
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值