当前位置:首页 >> 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.3.1说明
针对可选图层,当其为空图层时,质检软件在 V1.3 版本中将可选 图层为空图层的拓扑检查失败错误列出在检查日志文件中,本次 修改为:不在检查日志文件中列出与此...
绩效管理制度V1[1].3版20100707
绩效管理制度V1[1].3版20100707 隐藏>> 第1 页共 26 页 表单名称 月度个人 KPI 考核目标卡 年 (A)单位: NO 1 2 3 4 5 完成上月绩效评分(4 日前)及...
JD16说明书 V1[1].3
JD16说明书 V1[1].3_信息与通信_工程科技_专业资料。直流屏JINE-JD16 系列 PLC 电力电源控制系统 V1.3 西 JD16 系列监控器是采用人机界面,以可编程控制器...
KMS(V1.3)使用说明最新版
KMS(V1.3)使用说明最新版_计算机软件及应用_IT/计算机_专业资料。KMS(V1.3)教程过程简洁,明了,不会出现不知道步骤的问题,适合刚开始用的新手。“...
1[1].1.3.3美化建议流程v1
1[1].1.3.3美化建议流程v1 买卖业务流程买卖业务流程隐藏>> 北京链家房地产经纪有限公司 北京链家房地产经纪有限公司 链家房地产经纪 ZD/LJ 企业制度 ZD/LJ ...
1[1].1.3.3委托书填写流程v1
1[1].1.3.3委托书填写流程v1_经管营销_专业资料。买卖业务流程北京链家房地产经纪有限公司 企业制度 ZD/LJ 链家地产制度流程编号 发文日期 ZL-YY-B2009 年 ...
1[1].1.1.3人际开发流程v1
1[1].1.1.3人际开发流程v1 买卖业务流程买卖业务流程隐藏>> 北京链家房地产经纪有限公司 北京链家房地产经纪有限公司 链家房地产经纪 ZD/LJ 企业制度 ZD/LJ ...
v1[1].3_Netcwmp
v1[1].3_Netcwmp_IT/计算机_专业资料。netwempNetcwmp 开发手册 Netcwmp 介绍: Netcwmp 是一款 TR069 Client,已经实现了 TR069 规范中的一些 RPC,并能满足...
C语言练习题1(分支、循环)1v1.3完整版
C语言练习题1(分支、循环)1v1.3完整版_工学_高等教育_教育专区。C 语言练习...[0],i[1]); fprintf(OUT,"%d\n",o); fclose(IN); fclose(OUT); } ...
V1.3补充说明
煤矿作业规程编制和管理计算机应用系统(B/S)V1.3 版本 补充说明 、消息中心 用户可在自己的权限范围内,接收或发送消息、通知和重要提示,这些消息都将在用户 ...
更多相关标签: