easycwmp开发与调试

本文介绍了easyCWMP的开发和使用方法,包括CWMP协议的基本概念、easyCWMP的源码架构与环境搭建过程、系统启动流程及调试技巧。重点讲解了如何通过easyCWMP实现远程配置管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

本章介绍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交互流程,在原有基础之上对业务逻辑进行修改使用;

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶与花语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值