当前位置:首页 >> IT/计算机 >>

v1[1].3


Netcwmp 开发手册 Netcwmp 介绍: Netcwmp 是一款 TR069 Client,已经实现了 TR069 规范中的一些 RPC,并能满足各厂 家二次开发的需求。 其特点是,可以快速二次开发,仅仅需要实现较少的功能,其他都交给框架处理,就可 以完成 TR069 的开发,大大减少了 TR069 的开发周期。

配置 ACS 地址
Linux 系统下,cwmp.conf 默认放置到/etc 下,可以改变路径,在 cwmpd/src/cwmpd.c 中 main 函数里: cwmp_conf_open("/etc/cwmp.conf"); //根据实际情况,更改配置文件路径

在配置文件 cwmp.conf 中,设置 acs_url 的值: acs_url=http://xxx.xxx.xxx.xxx:pppp/

先了解一下参数节点的结构: struct parameter_node_st { const char * name; //参数模型的结点名称 int rw; //read / writable 0 可读 1 可写 int type; //类型,是 string, int 等 size_t value_length; //参数的长度 char * value; //参数值 parameter_node_attr_t attr; //参数的属性 parameter_node_t * parent; //父节点 parameter_node_t * child; //子节点 parameter_node_t * prev_sibling; //上一个兄弟节点 parameter_node_t * next_sibling; //下一个兄弟节点 parameter_get_handler_pt get; //Get 函数,供 GetParameterValues 用,如果 get 为 NULL,则返回上面 value 的值,如果不为 NULL,则返回 get 函数执行的结果 parameter_set_handler_pt set; //Set 函数,供 SetParameterValues 用,如果 Set 为 NULL,则将结果保存到 value 字段中(在内存中) ;如果不为 NULL,则执行 Set 函数 parameter_notify_handler_pt notify; //Notify,暂时没有用途 cwmp_uint32_t cwmp_uint32_t cwmp_uint32_t ext0; //扩展字段 ext1; ext2;

cwmp_uint32_t cwmp_uint32_t };

ext3; ext4;

解释: {"DeviceInfo", //参数的名字 0, //参数可读 TYPE_OBJECT, // 参 数 的 类 型 , 有 宏 定 义 , 直 接 使 用 TYPE_STRING , TYPE_OBJECT,定义在 libcwmp/include/cwmp/cwmp.h 中 0, //参数值的长度,定义时直接填 0,除非参数的值已经固定,可以填实际 的长度 NULL, //参数的值,一般为 NULL,如果参数值已经知道,可以直接填实际的 值 {0,0,0,0}, //参数的属性,默认 NULL,DeviceInfoModel,NULL,NULL, //参数的节点,如果没有子节点,直接 填 NULL;如果有子节点,填实际的节点;其他的 parent,prev_sibling,next_sibling 指针直接填 NULL,框架会自动赋值 NULL, //Get 函数, NULL, //Set 函数 NULL, //Notify 函数,暂时没有用途 PARAMETER_NODE_V_PADDING }, //宏定义,默认

如何快速二次开发

建立参数模型,方法是:

定义 parameter_node_t 数据结构
这是所有参数模型的基础 在 cwmpd/src/modules 下,根据参数模型建立文件夹和文件,建立 xxx.c 源文件,并加入到 cwmpd/src/modules/InternetGatewayDevice/InternetGatewayDevice.c 中 #include “xxxx.c” 例如: #include "DeviceInfo/DeviceInfo.c" #include "ManagementServer/ManagementServer.c"

定义数据结构, 定义数据结构,举例: {"DeviceInfo", 0, TYPE_OBJECT, 0, NULL, {0,0,0,0}, NULL,DeviceInfoModel,NULL,NULL, //注意这里的 DeviceInfoModel 是子节点,如果没有子节点,则这里填 NULL; 是子节点,如果没有子节点, DeviceInfoModel 定义在 DeviceInfoModel/DeviceInfoModel.c NULL, NULL, NULL, PARAMETER_NODE_V_PADDING }, 或者例如: 或者例如: 例如 {"Password", 0, TYPE_STRING, 0, NULL, {0,0,0,0}, NULL,NULL,NULL,NULL, cpe_get_igd_ms_password, cpe_set_igd_ms_password, NULL, PARAMETER_NODE_V_PADDING },

实现 GetParameterValues 方法
typedef char* (*parameter_get_handler_pt)(void * arg, void * pool);

定义回调函数 parameter_get_handler_pt ,注意要放到 parameter_node_t 的数据结构中 例如: char* cpe_get_igd_ms_password(void * arg, void * pool) { pool_t * p = (pool_t *)pool; return cwmp_conf_pool_get(p, "cwmp:acs_password"); } 参数解释: void * arg 自定义参数,在 libcwmp/src/cwmp.c 的 cwmp_get_parameter_node_value 中,会调

用到此回调函数,arg 由 cwmp_get_parameter_node_value 传入。目前 arg 为 NULL。二次开 发中,可以传入自己想要的数据结构,比如 MySQL 的链接句柄,或其他指针,可以根据实 际情况修改 cwmp_get_parameter_node_value 中函数的实现。 void * pool 内存池的指针,返回的 char*的 buffer 可以从此内存池中分配,从内存池中分配 的内存会被框架自动释放。 但建议不要从 pool 中分配过多的内存, 临时内存可以使用 malloc 或本地数组。 定义完 get 回调函数后,netcwmp 框架会自动调到此方法,其他不需要做任何操作, GetParameterValues 就实现了。

实现 SetParameterValues 方法
typedef int length); (*parameter_set_handler_pt)(void * arg, void * pool, const char * value, int

和 Get 函数类似,定义函数 parameter_set_handler_pt int cpe_set_igd_ms_password(void * arg, void * pool, const char * value, int length) { //save password to database or config file return CWMP_OK; } void * arg 同 Get 数据,目前为 NULL,如果 需要,可以根据实际情况,自己修改 libcwmp/src/cwmp.c 中的 cwmp_set_parameter_node_value 函数的实现。 void * pool 内存池,尽可能的少分配内存 const char * value 参数的值 int length 参数值的长度 返回值:CWMP_OK 成功/CWMP_ERROR 失败 完成 Set 函数定义后, SetParameterValues 就实现完毕了, 其他交互工作, 全交给框架去处理。

实现 GetParameterNames 方法
一般不需要修改,定义好 parameter_node_t 参数数据结构后,框架自动实现该 RPC

实现 Reboot 方法
在 cwmpd/src/agent.c 中,函数 cwmp_agent_run_tasks 中, case TASK_REBOOT_TAG: { //begin reboot system cwmp_log_debug("reboot ..."); cwmp_event_set_value(cwmp, INFORM_MREBOOT, 1, NULL, 0, 0, 0); cwmp_event_clear_active(cwmp); //system("reboot"); //这里,打开注释

实现 Download 方法
框架已经实现 RPC,只要添加下载文件后的处理方法,即可。 在 cwmpd/src/agent.c 中,函数 cwmp_agent_run_tasks 中 case TASK_DOWNLOAD_TAG: { download_arg_t * dlarg = (download_arg_t*)data; //begin download file time_t starttime = time(NULL); int faultcode = 0; faultcode = cwmp_agent_download_file(dlarg); time_t endtime = time(NULL); cwmp_event_set_value(cwmp, INFORM_TRANSFERCOMPLETE, 1,dlarg->cmdkey, faultcode, starttime, endtime); //在这里添加,下载后的处理方法 FREE(dlarg); } break;

实现 Upload 方法
框架已经实现 RPC,上传前,只要准备好文件,即可。 修改 int cwmp_agent_upload_file(upload_arg_t * ularg)函数中的实现,即可。

实现 GetRPCMethods 方法
一般不需要修改,如果需要,可以修改 libcwmp/src/session.c 中的 rpc_methods 静态数组,即 可。

实现 Inform 方法
一 般 不 需 要 修 改 , 如 果 需 要 增 加 上 报 的 参 数 , 可 以 修 改 libcwmp/src/session.c 中 的 cwmp_session_create_inform_parameters 方法

HTTP 摘要认证
默认情况下,是关闭摘要认证的。 要打开摘要认证,在 cwmp.conf 中的 acs_auth 设置成 1,即可 并设置 acs_username 和 acs_password

如何支持 HTTPS
编译时带上—with-openssl 参数,后面跟上 openssl 的路径,例如: ./configure –with-openssl=/usr/local/ssl 在 cwmp.conf 中的 acs_url 设置成 https://xxx.xxx... ca_file 设置为证书的路径 ca_file=/etc/ssl/private/ca.pem


赞助商链接
相关文章:
显卡型号大全【V1[1].3】_图文
显卡型号大全【V1[1].3】 - 显卡型号大全 V1.3 BY COTWO 收录内容 ※NVIDIA-桌面:GeForce256、2、3、4、5、6、7、8、9、100、200、300、40...
CMMI_V1.3_22个PA(GP,SP)更新
CMMI_V1.3_22个PA(GP,SP)更新_互联网_IT/计算机_专业资料 暂无评价|0人阅读|0次下载|举报文档 CMMI_V1.3_22个PA(GP,SP)更新_互联网_IT/计算机_专业...
招标评分标准模板V1.3
招标评分标准模板V1.3 - 杭州海康威视数字技术股份有限公司 招标文件评分模板 评标标准 1、评标依据 依据《中华人民共和国招标投标法》 、 《中华人民共和国招标...
项目实施方法论V1.3
2.2.2.2 项目规划书 时间要求:现场调研 15 天内完成 规划书结构:参考部门项目规划标准文档(简版和标准版) 2.2.3 项目执行 2.2.3.1 新建项目 2.2.3....
Exchange2013用户手册V1.3
Microsoft Exchange2013 客户端配置手册 文档编号 版本号日期 JL-XXB20150823.V1.3 V1.3 2015-8-23 本文档版权由江铃股份有限公司信息部所有。未经江铃股份有限...
商务技术文件_V1.3_图文
商务技术文件_V1.3 - 广东省广播电视网络股份有限公司 全省建设项目管理系统(二期)项目 (重新招标) 投标文件 商务技术部分 (正本) 投标人:埃森哲(中国)有限公司...
标准WM-用户操作手册-V1.3
标准WM-用户操作手册-V1.3_计算机软件及应用_IT/计算机_专业资料。WM操作手册 1. 前言此文档是在 ERP 项目中用于培训的系统操作手册,旨在帮助用户学习和掌 握 ...
应用系统安全开发技术规范V1.3
应用系统安全开发技术规范(版本号 V1.3) 朗新科技股份有限公司 二〇五年十二月 更改履历更改的 版本号 0.5 1.0 1.1 1.2 1.3 修改编号 更改时间 图表...
联动优势公共验证产品_商户接入规范V1.1.3_20160106
联动优势公共认证产品_商户接入规范_V1.1.0 联动优势电子商务有限公司 联动优势公共验证产品 商户接入规范 V1.1.3 联动优势公共认证产品_商户接入规范_V1.1.0...
RN8302应用程序V1.3
sFsEgSh_TypeDef Qd1QEgSh[DL645_MAX_FL + 1]; sFsEgSh_TypeDef Qd2QEgSh[DL645_MAX_FL + 1]; sFsEgSh_TypeDef Qd3QEgSh[DL645_MAX_FL + 1]; ...
更多相关标签: