Ticket refs #11459: icwmp does not compile for target ramips (EX400)

This commit is contained in:
imen.bhiri 2017-04-19 11:30:06 +01:00
parent efd0b25381
commit 504617f116
49 changed files with 428 additions and 325 deletions

View file

@ -10,6 +10,7 @@
*
*/
#include <stdbool.h>
#include "cwmp.h"
#include "backupSession.h"
#include "xml.h"
@ -49,7 +50,7 @@ mxml_node_t *bkp_session_node_found(mxml_node_t *tree, char *name, struct search
{
mxml_node_t *b = tree, *c, *d;
struct search_keywords;
int i;
int i = 0;
b = mxmlFindElement(b, b, name, NULL, NULL, MXML_DESCEND_FIRST);
while (b)
@ -415,7 +416,7 @@ void bkp_session_delete_apply_schedule_download(struct apply_schedule_download *
{
sprintf(delay[2*i],"%ld",papply_schedule_download->timeintervals[i].windowstart);
sprintf(delay[2*i+1],"%ld",papply_schedule_download->timeintervals[i].windowend);
sprintf(maxretrie[i],"%ld",papply_schedule_download->timeintervals[i].maxretries);
sprintf(maxretrie[i],"%d",papply_schedule_download->timeintervals[i].maxretries);
}
keys[0].name = "start_time";
@ -581,7 +582,7 @@ void bkp_session_delete_schedule_download(struct schedule_download *pschedule_do
{
sprintf(delay[2*i],"%ld",pschedule_download->timewindowstruct[i].windowstart);
sprintf(delay[2*i+1],"%ld",pschedule_download->timewindowstruct[i].windowend);
sprintf(maxretrie[i],"%ld",pschedule_download->timewindowstruct[i].maxretries);
sprintf(maxretrie[i],"%d",pschedule_download->timewindowstruct[i].maxretries);
}
keys[0].name = "url";
keys[0].value = pschedule_download->url;
@ -781,7 +782,7 @@ void load_queue_event(mxml_node_t *tree,struct cwmp *cwmp)
{
char *command_key = NULL;
mxml_node_t *b = tree, *c;
int idx = -1, id;
int idx = -1, id = -1;
struct event_container *event_container_save = NULL;
b = mxmlWalkNext(b, tree, MXML_DESCEND);
@ -855,9 +856,9 @@ void load_queue_event(mxml_node_t *tree,struct cwmp *cwmp)
void load_schedule_inform(mxml_node_t *tree,struct cwmp *cwmp)
{
char *command_key;
char *command_key = NULL;
mxml_node_t *b = tree, *c;
time_t scheduled_time;
time_t scheduled_time = 0;
struct schedule_inform *schedule_inform = NULL;
struct list_head *ilist = NULL;
@ -1797,7 +1798,7 @@ void load_du_state_change_complete (mxml_node_t *tree,struct cwmp *cwmp)
{
if(d->value.text.string != NULL)
{
elem->start_time = atol(d->value.text.string);
elem->start_time = strdup(d->value.text.string);
}
}
}
@ -1810,7 +1811,7 @@ void load_du_state_change_complete (mxml_node_t *tree,struct cwmp *cwmp)
{
if(d->value.text.string != NULL)
{
elem->complete_time = atol(d->value.text.string);
elem->complete_time = strdup(d->value.text.string);
}
}
}

156
config.c
View file

@ -385,6 +385,84 @@ static void uppercase ( char *sPtr )
}
}
int get_amd_version_config()
{
int error;
int a = 0;
char *value = NULL;
struct cwmp *cwmp = &cwmp_main;
if((error = uci_get_value(UCI_CPE_AMD_VERSION ,&value)) == CWMP_OK)
{
cwmp->conf.amd_version = DEFAULT_AMD_VERSION;
if(value != NULL)
{
a = atoi(value) ;
if ( a >= 1 ) {
cwmp->conf.amd_version = a;
}
free(value);
value = NULL;
}
cwmp->conf.supported_amd_version = cwmp->conf.amd_version;
}
else
{
return error;
}
return CWMP_OK;
}
int get_session_timeout_config()
{
int error;
int a = 0;
char *value = NULL;
struct cwmp *cwmp = &cwmp_main;
if((error = uci_get_value(UCI_CPE_SESSION_TIMEOUT ,&value)) == CWMP_OK)
{
cwmp->conf.session_timeout = DEFAULT_SESSION_TIMEOUT;
if(value != NULL)
{
a = atoi(value) ;
if ( a >= 1 ) {
cwmp->conf.session_timeout = a;
}
free(value);
value = NULL;
}
}
else
{
return error;
}
return CWMP_OK;
}
int get_instance_mode_config()
{
int error;
char *value = NULL;
struct cwmp *cwmp = &cwmp_main;
if((error = uci_get_value(UCI_CPE_INSTANCE_MODE ,&value)) == CWMP_OK)
{
cwmp->conf.instance_mode = DEFAULT_INSTANCE_MODE;
if(value != NULL)
{
if ( 0 == strcmp(value, "InstanceNumber") ) {
cwmp->conf.instance_mode = INSTANCE_MODE_NUMBER;
} else {
cwmp->conf.instance_mode = INSTANCE_MODE_ALIAS;
}
free(value);
value = NULL;
}
}
else
{
return error;
}
return CWMP_OK;
}
int get_global_config(struct config *conf)
{
int error, error2, error3;
@ -892,84 +970,6 @@ int get_global_config(struct config *conf)
return CWMP_OK;
}
int get_amd_version_config()
{
int error;
int a = 0;
char *value = NULL;
struct cwmp *cwmp = &cwmp_main;
if((error = uci_get_value(UCI_CPE_AMD_VERSION ,&value)) == CWMP_OK)
{
cwmp->conf.amd_version = DEFAULT_AMD_VERSION;
if(value != NULL)
{
a = atoi(value) ;
if ( a >= 1 ) {
cwmp->conf.amd_version = a;
}
free(value);
value = NULL;
}
cwmp->conf.supported_amd_version = cwmp->conf.amd_version;
}
else
{
return error;
}
return CWMP_OK;
}
int get_session_timeout_config()
{
int error;
int a = 0;
char *value = NULL;
struct cwmp *cwmp = &cwmp_main;
if((error = uci_get_value(UCI_CPE_SESSION_TIMEOUT ,&value)) == CWMP_OK)
{
cwmp->conf.session_timeout = DEFAULT_SESSION_TIMEOUT;
if(value != NULL)
{
a = atoi(value) ;
if ( a >= 1 ) {
cwmp->conf.session_timeout = a;
}
free(value);
value = NULL;
}
}
else
{
return error;
}
return CWMP_OK;
}
int get_instance_mode_config()
{
int error;
char *value = NULL;
struct cwmp *cwmp = &cwmp_main;
if((error = uci_get_value(UCI_CPE_INSTANCE_MODE ,&value)) == CWMP_OK)
{
cwmp->conf.instance_mode = DEFAULT_INSTANCE_MODE;
if(value != NULL)
{
if ( 0 == strcmp(value, "InstanceNumber") ) {
cwmp->conf.instance_mode = INSTANCE_MODE_NUMBER;
} else {
cwmp->conf.instance_mode = INSTANCE_MODE_ALIAS;
}
free(value);
value = NULL;
}
}
else
{
return error;
}
return CWMP_OK;
}
int get_lwn_config(struct config *conf)
{
int error;

1
cwmp.c
View file

@ -17,6 +17,7 @@
#include <stdlib.h>
#include <time.h>
#include "cwmp.h"
#include "http.h"
#include "backupSession.h"
#include "xml.h"
#include "log.h"

View file

@ -18,6 +18,7 @@
#include "log.h"
#include "external.h"
#include "dmentry.h"
#include "dmcommon.h"
#include "ubus.h"
#include "diagnostic.h"
#include <netinet/in.h>
@ -688,10 +689,10 @@ int cwmp_start_diagnostic(int diagnostic_type)
extract_stats(DOWNLOAD_DUMP_FILE, DOWNLOAD_DIAGNOSTIC_HTTP, DOWNLOAD_DIAGNOSTIC);
if(strncmp(url,DOWNLOAD_PROTOCOL_FTP,strlen(DOWNLOAD_PROTOCOL_FTP)) == 0)
extract_stats(DOWNLOAD_DUMP_FILE, DOWNLOAD_DIAGNOSTIC_FTP, DOWNLOAD_DIAGNOSTIC);
cwmp_root_cause_event_ipdiagnostic(&cwmp_main);
cwmp_root_cause_event_ipdiagnostic();
}
else if (status && strncmp(status, "Error_", strlen("Error_")) == 0)
cwmp_root_cause_event_ipdiagnostic(&cwmp_main);
cwmp_root_cause_event_ipdiagnostic();
free(status);
}
else
@ -706,10 +707,10 @@ int cwmp_start_diagnostic(int diagnostic_type)
extract_stats(UPLOAD_DUMP_FILE, DOWNLOAD_DIAGNOSTIC_HTTP, UPLOAD_DIAGNOSTIC);
if(strncmp(url,DOWNLOAD_PROTOCOL_FTP,strlen(DOWNLOAD_PROTOCOL_FTP)) == 0)
extract_stats(UPLOAD_DUMP_FILE, DOWNLOAD_DIAGNOSTIC_FTP, UPLOAD_DIAGNOSTIC);
cwmp_root_cause_event_ipdiagnostic(&cwmp_main);
cwmp_root_cause_event_ipdiagnostic();
}
else if (status && strncmp(status, "Error_", strlen("Error_")) == 0)
cwmp_root_cause_event_ipdiagnostic(&cwmp_main);
cwmp_root_cause_event_ipdiagnostic();
free(status);
free(size);
}

View file

@ -139,6 +139,7 @@ static int lookup_sub_value(char *dest, size_t size, const char *data,
const char *q2;
const char *qn;
unsigned int diff;
if (0 == size)
return 0;
keylen = strlen(key);
@ -177,8 +178,9 @@ static int lookup_sub_value(char *dest, size_t size, const char *data,
}
else
{
if (size > (q2 - q1) + 1)
size = (q2 - q1) + 1;
diff = (q2 - q1) + 1;
if (size > diff)
size = diff;
size--;
memcpy(dest, q1, size);
dest[size] = '\0';

View file

@ -195,7 +195,7 @@ int get_interface_enable_ubus(char *iface, char *refparam, struct dmctx *ctx, ch
{
json_object *res;
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", iface}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", iface, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "up", 0, NULL, value, NULL);
return 0;
@ -442,7 +442,7 @@ int network_get_ipaddr(char **value, char *iface)
json_object *res;
char *ipv6_value = "";
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", iface}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", iface, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "ipv4-address", 0, "address", value, NULL);
json_select(res, "ipv6-address", 0, "address", &ipv6_value, NULL);

View file

@ -14,6 +14,7 @@
#include <sys/types.h>
#include <libubox/blobmsg_json.h>
#include <json-c/json.h>
#include <unistd.h>
#include "dmcwmp.h"
#define NVRAM_FILE "/proc/nvram/WpaKey"
#define MAX_DHCP_LEASES 256

View file

@ -155,7 +155,7 @@ struct prefix_method prefix_methods[] = {
int dm_entry_set_prefix_methods_enable(void)
{
int i = 0;
unsigned int i = 0;
for (i = 0; i < ARRAY_SIZE(prefix_methods); i++) {
if (prefix_methods[i].set_enable) {
prefix_methods[i].enable = prefix_methods[i].set_enable();
@ -172,7 +172,7 @@ char *handle_update_instance(int instance_ranck, struct dmctx *ctx, char **last_
char *instance, *inst_mode;
char *alias;
int i = 0;
int pos = instance_ranck - 1;
unsigned int pos = instance_ranck - 1;
unsigned int alias_resister = 0, max, action;
void *argv[argc];
@ -443,6 +443,42 @@ void free_all_list_fault_param(struct dmctx *ctx)
}
}
int update_param_instance_alias(struct dmctx *ctx, char *param, char **new_param)
{
char *pch, *spch, *p;
char buf[512];
int i = 0, j = 0;
char *dup = dmstrdup(param);
p = buf;
for (pch = strtok_r(dup, ".", &spch); pch != NULL; pch = strtok_r(NULL, ".", &spch)) {
if (isdigit(pch[0])) {
dmstrappendchr(p, '.');
dmstrappendstr(p, pch);
i++;
} else if (pch[0]== '[') {
dmstrappendchr(p, '.');
dmstrappendstr(p, ctx->inst_buf[i]);
i++;
} else {
if(j > 0) {
dmstrappendchr(p, '.');
dmstrappendstr(p, pch);
}
if(j == 0) {
dmstrappendstr(p, pch);
j++;
}
}
}
if (param[strlen(param)-1] == '.')
dmstrappendchr(p, '.');
dmstrappendend(p);
*new_param = dmstrdup(buf);
dmfree(dup);
return 0;
}
void add_list_enabled_notify(char *param, char *notification, char *value)
{
struct dm_enabled_notify *dm_enabled_notify;
@ -567,42 +603,6 @@ static int remove_parameter_notification(char *param)
return 0;
}
int update_param_instance_alias(struct dmctx *ctx, char *param, char **new_param)
{
char *pch, *spch, *p;
char buf[512];
int i = 0, j = 0;
char *dup = dmstrdup(param);
p = buf;
for (pch = strtok_r(dup, ".", &spch); pch != NULL; pch = strtok_r(NULL, ".", &spch)) {
if (isdigit(pch[0])) {
dmstrappendchr(p, '.');
dmstrappendstr(p, pch);
i++;
} else if (pch[0]== '[') {
dmstrappendchr(p, '.');
dmstrappendstr(p, ctx->inst_buf[i]);
i++;
} else {
if(j > 0) {
dmstrappendchr(p, '.');
dmstrappendstr(p, pch);
}
if(j == 0) {
dmstrappendstr(p, pch);
j++;
}
}
}
if (param[strlen(param)-1] == '.')
dmstrappendchr(p, '.');
dmstrappendend(p);
*new_param = dmstrdup(buf);
dmfree(dup);
return 0;
}
static int set_parameter_notification(struct dmctx *ctx, char *param, char *value)
{
char *tmp = NULL, *buf = NULL, *pch, *new_param;
@ -673,13 +673,13 @@ static int check_obj_is_nl1(char *refparam, char *inparam, int ndot)
{
unsigned int len, i;
len = strlen(refparam);
for (i = len - 1; i >= 0; i--) {
if (refparam[i] == '.') {
for (i = len; i > 0; i--) {
if (refparam[i-1] == '.') {
if (--ndot == 0)
break;
}
}
i++;
//i++;
if (strlen(inparam) == i)
return 0;
return -1;
@ -712,7 +712,7 @@ int string_to_bool(char *v, bool *b)
* **********/
int dm_entry_get_value(struct dmctx *ctx)
{
int i;
unsigned int i;
ctx->faultcode = FAULT_9005;
if (ctx->in_param[0] == '\0' || check_param_prefix(ctx) == 0) {
@ -806,7 +806,7 @@ static int get_value_inparam_isobj_check_param(DMPARAM_API_ARGS)
int dm_entry_get_name(struct dmctx *ctx)
{
int i;
unsigned int i;
ctx->faultcode = FAULT_9005;
if (ctx->in_param[0] == '\0' && ctx->nextlevel == 1) {
ctx->method_obj=&get_name_emptyin_nl1_obj;
@ -932,7 +932,7 @@ static int get_name_emptyin_nl1_param(DMPARAM_API_ARGS)
* ********************/
int dm_entry_get_notification(struct dmctx *ctx)
{
int i;
unsigned int i;
ctx->faultcode = FAULT_9005;
if (ctx->in_param[0] == '\0' || check_param_prefix(ctx) == 0) {
@ -1031,7 +1031,7 @@ static int get_notification_inparam_isobj_check_param(DMPARAM_API_ARGS)
***************/
int dm_entry_inform(struct dmctx *ctx)
{
int i;
unsigned int i;
ctx->method_obj = &inform_check_obj;
ctx->method_param = &inform_check_param;
for (i = 0; i < ARRAY_SIZE(prefix_methods); i++) {
@ -1064,7 +1064,7 @@ static int inform_check_param(DMPARAM_API_ARGS)
* **************/
int dm_entry_add_object(struct dmctx *ctx)
{
int i;
unsigned int i;
if (ctx->tree)
return FAULT_9005;
ctx->method_obj=&add_object_obj;
@ -1110,7 +1110,7 @@ static int add_object_param(DMPARAM_API_ARGS)
* **************/
int dm_entry_delete_object(struct dmctx *ctx)
{
int i;
unsigned int i;
if (ctx->tree == 1)
return FAULT_9005;
ctx->method_obj=&delete_object_obj;
@ -1148,7 +1148,7 @@ static int delete_object_param(DMPARAM_API_ARGS)
* **************/
int dm_entry_set_value(struct dmctx *ctx)
{
int i;
unsigned int i;
if (ctx->in_param[0] == '\0' || ctx->in_param[strlen(ctx->in_param)-1] == '.' ) {
return FAULT_9005;
} else {
@ -1211,7 +1211,7 @@ static int set_value_check_param(DMPARAM_API_ARGS)
* ****************/
int dm_entry_set_notification(struct dmctx *ctx)
{
int i;
unsigned int i;
if (ctx->in_param[0] == '\0') {
return FAULT_9009;
} else {
@ -1277,7 +1277,7 @@ static int set_notification_check_param(DMPARAM_API_ARGS)
********************/
int dm_entry_enabled_notify(struct dmctx *ctx)
{
int i;
unsigned int i;
ctx->method_obj = &enabled_notify_check_obj;
ctx->method_param = &enabled_notify_check_param;
for (i = 0; i < ARRAY_SIZE(prefix_methods); i++) {
@ -1324,7 +1324,7 @@ static int enabled_notify_check_param(DMPARAM_API_ARGS)
*****************/
int dm_entry_get_linker(struct dmctx *ctx)
{
int i;
unsigned int i;
ctx->method_obj = &get_linker_check_obj;
ctx->method_param = &get_linker_check_param;
for (i = 0; i < ARRAY_SIZE(prefix_methods); i++) {
@ -1361,7 +1361,7 @@ static int get_linker_check_param(DMPARAM_API_ARGS)
*****************/
int dm_entry_get_linker_value(struct dmctx *ctx)
{
int i;
unsigned int i;
ctx->method_obj = &get_linker_value_check_obj;
ctx->method_param = &get_linker_value_check_param;
dmentry_instance_lookup_inparam(ctx);

View file

@ -265,6 +265,7 @@ char *get_last_instance_icwmpd(char *package, char *section, char *opt_inst);
char *get_last_instance_lev2(char *package, char *section, char *opt_inst, char *opt_check, char *value_check);
char *handle_update_instance(int instance_ranck, struct dmctx *ctx, char **last_inst, char * (*up_instance)(int action, char **last_inst, void *argv[]), int argc, ...);
void free_all_list_enabled_lwnotify();
#ifndef TRACE
#define TRACE_TYPE 0
static inline void trace_empty_func()

View file

@ -17,6 +17,7 @@
#include "dmentry.h"
#include "cwmp.h"
#include "log.h"
#include "wepkey.h"
LIST_HEAD(head_package_change);
@ -309,7 +310,7 @@ int dm_entry_restart_services()
list_for_each_entry(pc, &head_package_change, list) {
if(strcmp(pc->package, "cwmp") == 0)
continue;
dmubus_call_set("uci", "commit", UBUS_ARGS{{"config", pc->package}}, 1);
dmubus_call_set("uci", "commit", UBUS_ARGS{{"config", pc->package, String}}, 1);
}
free_all_list_package_change(&head_package_change);

View file

@ -22,4 +22,5 @@ int dm_ctx_clean(struct dmctx *ctx);
int dm_ctx_clean_sub(struct dmctx *ctx);
void dm_entry_cli(int argc, char** argv);
void wepkey_cli(int argc, char** argv);
void dmentry_instance_lookup_inparam(struct dmctx *ctx);
#endif

View file

@ -6,6 +6,7 @@
#ifndef __DMMEM_H
#define __DMMEM_H
void dmfree(void *m);
static inline void dm_empty_func()
{
}
@ -28,7 +29,7 @@ struct dmmem {
char mem[0];
};
inline void *__dmmalloc
void *__dmmalloc
(
#ifdef WITH_MEMTRACK
const char *file, const char *func, int line,
@ -36,7 +37,7 @@ const char *file, const char *func, int line,
size_t size
);
inline void *__dmcalloc
void *__dmcalloc
(
#ifdef WITH_MEMTRACK
const char *file, const char *func, int line,
@ -51,7 +52,7 @@ const char *file, const char *func, int line,
#endif /*WITH_MEMTRACK*/
const char *s
);
inline void dmfree(void *m);
//inline void dmfree(void *m);
void dmcleanmem();
#endif /*WITH_MEMLEACKSEC*/
int __dmasprintf

View file

@ -14,12 +14,15 @@
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/klog.h>
#include "dmcwmp.h"
#include "dmuci.h"
#include "dmubus.h"
#include "dmcommon.h"
#include "deviceinfo.h"
inline int entry_method_device_info_vcf(struct dmctx *ctx);
inline int entry_method_device_info_vcf_instance(struct dmctx *ctx, char *ivcf);
struct dev_vcf cur_dev_vcf = {0};
inline int init_args_vcf(struct dmctx *ctx, struct uci_section *s)

View file

@ -153,7 +153,7 @@ int set_management_server_periodic_inform_time(char *refparam, struct dmctx *ctx
if (!(strptime(value, "%Y-%m-%dT%H:%M:%S", &tm))) {
return 0;
}
sprintf(buf, "%d", mktime(&tm));
sprintf(buf, "%ld", mktime(&tm));
dmuci_set_value("cwmp", "acs", "periodic_inform_time", buf);
cwmp_set_end_session(END_SESSION_RELOAD);
return 0;

View file

@ -22,6 +22,7 @@
#include "softwaremodules.h"
struct software_module cur_software_module = {0};
inline int entry_softwaremodules_deploymentunit_instance(struct dmctx *ctx, char *idu);
inline int init_args_du_entry(struct dmctx *ctx, struct uci_section *s)
{

View file

@ -15,6 +15,7 @@ struct software_module
struct uci_section *softsection;
};
int update_softwaremodules_url(char *uuid, char *url);
char *get_softwaremodules_url(char *uuid);
char *get_softwaremodules_uuid(char *url);
char *get_softwaremodules_username(char *uuid);
char *get_softwaremodules_pass(char *uuid);

View file

@ -104,7 +104,15 @@ inline int entry_voice_service_capabilities_codecs(struct dmctx *ctx, char *ivoi
inline int entry_services_voice_service_voiceprofile(struct dmctx *ctx, char *ivoice);
inline int entry_services_voice_service_line(struct dmctx *ctx, char *ivoice, char *profile_num);
inline int entry_services_voice_service_line_codec_list(struct dmctx *ctx, char *ivoice, char *profile_num, char *line_num);
int entry_method_root_Service_sub(struct dmctx *ctx, char *ivoice);
inline int entry_method_Service(struct dmctx *ctx);
inline int init_allowed_sip_codecs();
int get_voice_service_max_line();
inline int entry_services_voice_service_line_codec_list_instance(struct dmctx *ctx, char *ivoice, char *profile_num, char *line_num, char *codec_num);
inline int entry_services_voice_service_line_codec_list_instance(struct dmctx *ctx, char *ivoice, char *profile_num, char *line_num, char *codec_num);
inline int entry_services_voice_service_line_instance(struct dmctx *ctx, char *ivoice, char *profile_num, char *line_num);
inline int entry_services_voice_service_voiceprofile_instance (struct dmctx *ctx, char *ivoice, char *profile_num);
inline int entry_voice_service_capabilities_codecs_instance(struct dmctx *ctx, char *ivoice, char *id);
///////////////////////////////INIT ARGS//////////////////
void wait_voice_service_up(void)
@ -122,7 +130,7 @@ inline int init_allowed_sip_codecs()
{
json_object *res = NULL;
char id[8], priority[24], ptime[24];
int i;
unsigned int i;
available_sip_codecs = 0;
dmubus_call("asterisk", "codecs", UBUS_ARGS{}, 0, &res);
if(res) {
@ -555,7 +563,7 @@ int get_entry_id(char *refparam, struct dmctx *ctx, char **value)
int get_capabilities_sip_codec(char *refparam, struct dmctx *ctx, char **value)
{
int i;
unsigned int i;
struct codec_args *cdcargs = (struct codec_args *)(ctx->args);
bool sep = false;
for (i = 0; i < ARRAY_SIZE(capabilities_sip_codecs); i++) {
@ -569,7 +577,7 @@ int get_capabilities_sip_codec(char *refparam, struct dmctx *ctx, char **value)
int get_capabilities_sip_bitrate(char *refparam, struct dmctx *ctx, char **value)
{
int i;
unsigned int i;
struct codec_args *cdcargs = (struct codec_args *)(ctx->args);
for (i = 0; i < ARRAY_SIZE(capabilities_sip_codecs); i++) {
if(capabilities_sip_codecs[i].enumid == cdcargs->enumid) {
@ -582,7 +590,7 @@ int get_capabilities_sip_bitrate(char *refparam, struct dmctx *ctx, char **value
int get_capabilities_sip_pperiod(char *refparam, struct dmctx *ctx, char **value)
{
int i;
unsigned int i;
struct codec_args *cdcargs = (struct codec_args *)(ctx->args);
for (i = 0; i < ARRAY_SIZE(capabilities_sip_codecs); i++) {
if(capabilities_sip_codecs[i].enumid == cdcargs->enumid) {
@ -656,7 +664,7 @@ int set_voice_profile_reset(char *refparam, struct dmctx *ctx, int action, char
case VALUESET:
string_to_bool(value, &b);
if(b) {
dmubus_call_set("uci", "commit", UBUS_ARGS{{"config", "voice_client"}}, 1);
dmubus_call_set("uci", "commit", UBUS_ARGS{{"config", "voice_client", String}}, 1);
return 0;
}
return 0;
@ -1046,7 +1054,7 @@ int set_voice_profile_sip_dtmfmethod(char *refparam, struct dmctx *ctx, int acti
int get_sip_profile_region(char *refparam, struct dmctx *ctx, char **value)
{
int i;
unsigned int i;
dmuci_get_option_value_string("voice_client", "BRCM", "country", value);
for (i = 0; i < ARRAY_SIZE(capabilities_regions); i++) {
@ -1060,7 +1068,7 @@ int get_sip_profile_region(char *refparam, struct dmctx *ctx, char **value)
int set_sip_profile_region(char *refparam, struct dmctx *ctx, int action, char *value)
{
int i;
unsigned int i;
struct sip_args *sipargs = (struct sip_args *)(ctx->args);
switch (action) {
@ -1187,7 +1195,7 @@ int set_voice_profile_rtp_localportmax(char *refparam, struct dmctx *ctx, int ac
int get_voice_service_vp_rtp_dscp(char *refparam, struct dmctx *ctx, char **value)
{
int i;
unsigned int i;
char *tmp;
*value = "0";
@ -1203,7 +1211,7 @@ int get_voice_service_vp_rtp_dscp(char *refparam, struct dmctx *ctx, char **val
int set_voice_service_vp_rtp_dscp(char *refparam, struct dmctx *ctx, int action, char *value)
{
int i;
unsigned int i;
struct sip_args *sipargs = (struct sip_args *)(ctx->args);
switch (action) {
@ -1593,7 +1601,9 @@ int codec_compare(const void *s1, const void *s2)
void codec_priority_sort(struct uci_section *sip_section, char *new_codec)
{
int j, k = 0, h = 0, size = ARRAY_SIZE(codec_option_array);
unsigned int j;
int k = 0, h = 0, size = ARRAY_SIZE(codec_option_array);
char *ucodec, *coption, *poption;
bool found;
struct codec sipcodec[ARRAY_SIZE(codec_option_array)+1] = {0};
@ -1642,7 +1652,8 @@ void codec_priority_sort(struct uci_section *sip_section, char *new_codec)
void codec_priority_update(struct uci_section *sip_section)
{
bool found;
int i, j;
int i;
unsigned int j;
char *priority = NULL;
char *codec;
char pid[4] = "1";
@ -1676,7 +1687,7 @@ int get_codec_entry_id(char *refparam, struct dmctx *ctx, char **value)
int capabilities_sip_codecs_get_codec(char *refparam, struct dmctx *ctx, char **value)
{
int i;
unsigned int i;
struct line_codec_args *line_codecargs = (struct line_codec_args *)ctx->args;
for (i = 0; i < ARRAY_SIZE(capabilities_sip_codecs); i++) {
@ -1690,7 +1701,7 @@ int capabilities_sip_codecs_get_codec(char *refparam, struct dmctx *ctx, char **
int capabilities_sip_codecs_get_bitrate(char *refparam, struct dmctx *ctx, char **value)
{
int i;
unsigned int i;
struct line_codec_args *line_codecargs = (struct line_codec_args *)ctx->args;
for (i = 0; i < ARRAY_SIZE(capabilities_sip_codecs); i++) {
@ -1704,7 +1715,7 @@ int capabilities_sip_codecs_get_bitrate(char *refparam, struct dmctx *ctx, char
int get_capabilities_sip_codecs_pperiod(char *refparam, struct dmctx *ctx, char **value)
{
int i;
unsigned int i;
struct line_codec_args *line_codecargs = (struct line_codec_args *)ctx->args;
dmuci_get_value_by_section_string(line_codecargs->sip_section, line_codecargs->ptime_cdc, value);
if ((*value)[0] != '\0')
@ -1720,7 +1731,7 @@ int get_capabilities_sip_codecs_pperiod(char *refparam, struct dmctx *ctx, char
int get_line_codec_list_enable(char *refparam, struct dmctx *ctx, char **value)
{
int i;
unsigned int i;
char *val;
struct line_codec_args *line_codecargs = (struct line_codec_args *)ctx->args;
@ -1759,7 +1770,7 @@ int set_line_codec_list_packetization(char *refparam, struct dmctx *ctx, int act
int set_line_codec_list_enable(char *refparam, struct dmctx *ctx, int action, char *value)
{
bool b;
int j;
unsigned int j;
char *codec;
struct line_codec_args *line_codecargs = (struct line_codec_args *)ctx->args;
int error = string_to_bool(value, &b);
@ -1794,7 +1805,7 @@ int set_line_codec_list_enable(char *refparam, struct dmctx *ctx, int action, ch
int set_line_codec_list_priority(char *refparam, struct dmctx *ctx, int action, char *value)
{
int i;
unsigned int i;
char *val;
struct line_codec_args *line_codecargs = (struct line_codec_args *)ctx->args;
@ -1944,7 +1955,7 @@ int entry_method_root_Service(struct dmctx *ctx)
{
IF_MATCH(ctx, DMROOT"Services.") {
DMOBJECT(DMROOT"Services.", ctx, "0", 1, NULL, NULL, NULL);
DMOBJECT(DMROOT"Services.VoiceService.", ctx, "0", 1, NULL, NULL, NULL, NULL);
DMOBJECT(DMROOT"Services.VoiceService.", ctx, "0", 1, NULL, NULL, NULL);
SUBENTRY(entry_method_Service, ctx);
return 0;
}

View file

@ -23,6 +23,8 @@ struct pforwardrgs cur_pforwardrgs = {0};
inline int entry_xinteno_ipacccfg_listcfgobj(struct dmctx *ctx);
inline int entry_xinteno_ipacccfg_portforwarding(struct dmctx *ctx);
inline int entry_xinteno_ipacccfg_portforwarding_instance(struct dmctx *ctx, char *iforward);
inline int entry_xinteno_ipacccfg_listcfgobj_instance(struct dmctx *ctx, char *irule);
inline int init_args_ipacc(struct dmctx *ctx, struct uci_section *s)
{
struct ipaccargs *args = &cur_ipaccargs;

View file

@ -16,6 +16,7 @@
#include "dmuci.h"
#include "dmubus.h"
#include "dmcommon.h"
#include "dmentry.h"
#include "x_inteno_se_owsd.h"
struct owsd_listenargs cur_owsd_listenargs = {0};

View file

@ -14,6 +14,7 @@
#include <unistd.h>
#include "dmcwmp.h"
#include "dmuci.h"
#include "dmcommon.h"
int get_pwr_mgmt_value_ethapd(char *refparam, struct dmctx *ctx, char **value)
{

View file

@ -19,8 +19,10 @@
struct linterfargs cur_linterfargs = {0};
struct wifaceargs cur_wifaceargs = {0};
static inline void laninterface_lookup(char *eths[], int *size);
inline int entry_laninterface_lan(struct dmctx *ctx);
inline int entry_laninterface_wlan(struct dmctx *ctx);
int entry_laninterface_lan(struct dmctx *ctx);
int entry_laninterface_wlan(struct dmctx *ctx);
inline int entry_laninterface_wlan_instance(struct dmctx *ctx, char *wli);
inline int entry_laninterface_lan_instance(struct dmctx *ctx, char *li);
//////////////////////INIT ARGS////////////////////////////////
static inline int init_lan_interface_args(char *lif, struct uci_section *port_sec)
{
@ -86,7 +88,7 @@ static inline void laninterface_lookup(char *eths[], int *size)
*size = n;
}
inline void init_laninterface_lan(struct dmctx *ctx)
void init_laninterface_lan(struct dmctx *ctx)
{
struct linterfargs *args = &cur_linterfargs;
ctx->args = (void *)args;
@ -130,7 +132,7 @@ int set_wlan_conf_alias(char *refparam, struct dmctx *ctx, int action, char *val
return 0;
}
/////////////SUB ENTRIES///////////////
inline int entry_laninterface_lan(struct dmctx *ctx)
int entry_laninterface_lan(struct dmctx *ctx)
{
char *ei, *ei_last = NULL;
int i = 0;
@ -148,7 +150,7 @@ inline int entry_laninterface_lan(struct dmctx *ctx)
return 0;
}
inline int entry_laninterface_wlan(struct dmctx *ctx)
int entry_laninterface_wlan(struct dmctx *ctx)
{
struct uci_section *s = NULL;
char *wi, *wi_last = NULL;

View file

@ -11,12 +11,17 @@
#include <ctype.h>
#include <uci.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "cwmp.h"
#include "dmcwmp.h"
#include "dmuci.h"
#include "dmubus.h"
#include "dmcommon.h"
#include "dmentry.h"
#include "landevice.h"
#include "wepkey.h"
#define DELIMITOR ","
#define TAILLE 10
#define MAX_PROC_ARP 256
@ -32,6 +37,8 @@ inline int entry_landevice_wlanconfiguration_associateddevice_instance(struct dm
inline int entry_landevice_lanethernetinterfaceconfig_instance(struct dmctx *ctx, char *idev, char *ieth);
inline int entry_landevice_host_instance(struct dmctx *ctx, char *idev, char *idx);
inline int entry_landevice_wlanconfiguration_wepkey_instance(struct dmctx *ctx, char *idev, char *iwlan, char *iwep);
inline int entry_landevice_dhcpconditionalservingpool_option_instance(struct dmctx *ctx, char * idev, char *icondpool, char *idx);
inline int entry_landevice_lanhostconfigmanagement_dhcpconditionalservingpool_instance(struct dmctx *ctx, char * idev, char *icondpool);
inline int entry_landevice_lanhostconfigmanagement_dhcpconditionalservingpool(struct dmctx *ctx, char *idev);
@ -158,7 +165,7 @@ void update_dhcp_conf_start(int i, void *data)
dm_ctx_init(&dmctx);
dmuci_get_option_value_string("network", dhcp_param->interface, "ipaddr", &ipaddr);
if (ipaddr[0] == '\0') {
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", dhcp_param->interface}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", dhcp_param->interface, String}}, 1, &res);
if (res) {
json_select(res, "ipv4-address", 0, "address", &ipaddr, NULL);
}
@ -168,7 +175,7 @@ void update_dhcp_conf_start(int i, void *data)
dmuci_get_option_value_string("network", dhcp_param->interface, "netmask", &mask);
if (mask[0] == '\0') {
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", dhcp_param->interface}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", dhcp_param->interface, String}}, 1, &res);
if (res) {
json_select(res, "ipv4-address", 0, "mask", &mask, NULL);
if (mask[0] == '\0')
@ -199,7 +206,7 @@ void update_dhcp_conf_end(int i, void *data)
dm_ctx_init(&dmctx);
dmuci_get_option_value_string("network", dhcp_param->interface, "ipaddr", &ipaddr);
if (ipaddr[0] == '\0') {
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", dhcp_param->interface}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", dhcp_param->interface, String}}, 1, &res);
if (res) {
json_select(res, "ipv4-address", 0, "address", &ipaddr, NULL);
}
@ -209,7 +216,7 @@ void update_dhcp_conf_end(int i, void *data)
dmuci_get_option_value_string("network", dhcp_param->interface, "netmask", &mask);
if (mask[0] == '\0') {
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", dhcp_param->interface}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", dhcp_param->interface, String}}, 1, &res);
if (res) {
json_select(res, "ipv4-address", 0, "mask", &mask, NULL);
if (mask[0] == '\0')
@ -246,7 +253,7 @@ int get_dhcp_option_last_inst(struct uci_section *ss)
int dr = 0;
struct uci_section *s;
uci_path_foreach_sections(icwmpd, "dmmap", section_name(cur_dhcppoolargs.dhcppoolsection), s) {
uci_path_foreach_sections(icwmpd, "dmmap", section_name(ss), s) {
dmuci_get_value_by_section_string(s, "optioninst", &tmp);
if (tmp[0] == '\0')
break;
@ -541,7 +548,7 @@ int get_lan_dns(char *refparam, struct dmctx *ctx, char **value)
struct ldlanargs *lanargs = (struct ldlanargs *)ctx->args;
char *lan_name = section_name(lanargs->ldlansection);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", lan_name}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", lan_name, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_parse_array(res, "dns-server", -1, NULL, value);
if ((*value)[0] == '\0') {
@ -698,7 +705,7 @@ int get_lan_dhcp_interval_address(struct dmctx *ctx, char **value, int option)
}
dmuci_get_value_by_section_string(lanargs->ldlansection, "ipaddr", &ipaddr);
if (ipaddr[0] == '\0') {
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", lan_name}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", lan_name, String}}, 1, &res);
if (res)
json_select(res, "ipv4-address", 0, "address", &ipaddr, NULL);
}
@ -707,7 +714,7 @@ int get_lan_dhcp_interval_address(struct dmctx *ctx, char **value, int option)
}
dmuci_get_value_by_section_string(lanargs->ldlansection, "netmask", &mask);
if (mask[0] == '\0') {
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", lan_name}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", lan_name, String}}, 1, &res);
if (res) {
json_select(res, "ipv4-address", 0, "mask", &mask, NULL);
if (mask[0] == '\0') {
@ -945,7 +952,7 @@ int get_lan_dhcp_subnetmask(char *refparam, struct dmctx *ctx, char **value)
if (s == NULL || (*value)[0] == '\0')
dmuci_get_value_by_section_string(lanargs->ldlansection, "netmask", value);
if ((*value)[0] == '\0') {
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", lan_name}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", lan_name, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "ipv4-address", 0, "mask", &mask, NULL);
int i_mask = atoi(mask);
@ -1213,7 +1220,7 @@ int get_interface_ipaddress(char *refparam, struct dmctx *ctx, char **value)
if (strcmp(proto, "static") == 0)
dmuci_get_value_by_section_string(ipargs->ldipsection, "ipaddr", value);
else {
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", lan_name}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", lan_name, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "ipv4-address", 0, "address", value, NULL);
}
@ -1250,7 +1257,7 @@ int get_interface_subnetmask(char *refparam, struct dmctx *ctx, char **value)
if (strcmp(proto, "static") == 0)
dmuci_get_value_by_section_string(ipargs->ldipsection, "netmask", value);
else {
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", lan_name}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", lan_name, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "ipv4-address", 0, "mask", &val, NULL);
tmp = cidr2netmask(atoi(val));
@ -1424,7 +1431,7 @@ int get_lan_eth_iface_cfg_enable(char *refparam, struct dmctx *ctx, char **value
json_object *res;
struct ldethargs *ethargs = (struct ldethargs *)ctx->args;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", ethargs->eth}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", ethargs->eth, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "up", -1, NULL, value, NULL);
return 0;
@ -1498,7 +1505,7 @@ int set_lan_eth_iface_cfg_maxbitrate(char *refparam, struct dmctx *ctx, int acti
char *val = NULL;
char *duplex;
struct ldethargs *ethargs = (struct ldethargs *)ctx->args;
struct uci_section *s, *sec;
struct uci_section *s, *sec = NULL;
switch (action) {
case VALUECHECK:
@ -1563,7 +1570,7 @@ int set_lan_eth_iface_cfg_duplexmode(char *refparam, struct dmctx *ctx, int acti
{
char *m, *spch, *rate, *val = NULL;
struct ldethargs *ethargs = (struct ldethargs *)ctx->args;
struct uci_section *s, *sec;
struct uci_section *s, *sec = NULL;
switch (action) {
case VALUECHECK:
@ -1606,7 +1613,7 @@ int get_lan_eth_iface_cfg_stats_tx_bytes(char *refparam, struct dmctx *ctx, char
json_object *res;
struct ldethargs *ethargs = (struct ldethargs *)ctx->args;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", ethargs->eth}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", ethargs->eth, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", 0, "tx_bytes", value, NULL);
return 0;
@ -1617,7 +1624,7 @@ int get_lan_eth_iface_cfg_stats_rx_bytes(char *refparam, struct dmctx *ctx, char
json_object *res;
struct ldethargs *ethargs = (struct ldethargs *)ctx->args;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", ethargs->eth}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", ethargs->eth, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", 0, "rx_bytes", value, NULL);
return 0;
@ -1628,7 +1635,7 @@ int get_lan_eth_iface_cfg_stats_tx_packets(char *refparam, struct dmctx *ctx, ch
json_object *res;
struct ldethargs *ethargs = (struct ldethargs *)ctx->args;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", ethargs->eth}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", ethargs->eth, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", 0, "tx_packets", value, NULL);
return 0;
@ -1639,7 +1646,7 @@ int get_lan_eth_iface_cfg_stats_rx_packets(char *refparam, struct dmctx *ctx, ch
json_object *res;
struct ldethargs *ethargs = (struct ldethargs *)ctx->args;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", ethargs->eth}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", ethargs->eth, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", 0, "rx_packets", value, NULL);
return 0;
@ -1667,7 +1674,7 @@ char *get_interface_type(char *mac, char *ndev)
else {
p = wunit;
}
dmubus_call("router.wireless", "stas", UBUS_ARGS{{"vif", p}}, 1, &res);
dmubus_call("router.wireless", "stas", UBUS_ARGS{{"vif", p, String}}, 1, &res);
if(res) {
json_object_object_foreach(res, key, val) {
json_select(val, "assoc_mac", 0, NULL, &value, NULL);
@ -2155,6 +2162,26 @@ int set_wlan_wep_key_index(char *refparam, struct dmctx *ctx, int action, char *
return 0;
}
int set_wlan_pre_shared_key(char *refparam, struct dmctx *ctx, int action, char *value)
{
char *encryption;
struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args;
switch (action) {
case VALUECHECK:
return 0;
case VALUESET:
dmuci_get_value_by_section_string(wlanargs->lwlansection, "encryption", &encryption);
if (!strstr(encryption, "psk")) {
reset_wlan(wlanargs->lwlansection);
dmuci_set_value_by_section(wlanargs->lwlansection, "gtk_rekey", "3600");
dmuci_set_value_by_section(wlanargs->lwlansection, "encryption", "psk");
}
dmuci_set_value_by_section(wlanargs->lwlansection, "key", value);
return 0;
}
return 0;
}
int set_wlan_key_passphrase(char *refparam, struct dmctx *ctx, int action, char *value)
{
char *option, *encryption;
@ -2611,7 +2638,7 @@ int get_wlan_total_associations(char *refparam, struct dmctx *ctx, char **value)
char *wunit, buf[8];
struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args;
dmubus_call("router.wireless", "stas", UBUS_ARGS{{"vif", wlanargs->wiface}}, 1, &res);
dmubus_call("router.wireless", "stas", UBUS_ARGS{{"vif", wlanargs->wiface, String}}, 1, &res);
DM_ASSERT(res, *value = "0");
json_object_object_foreach(res, key, val) {
if (strstr(key, "sta-"))
@ -2626,7 +2653,7 @@ int get_wlan_devstatus_statistics_tx_bytes(char *refparam, struct dmctx *ctx, ch
struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args;
json_object *res;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", wlanargs->wiface}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", wlanargs->wiface, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", -1, "tx_bytes", value, NULL);
return 0;
@ -2637,7 +2664,7 @@ int get_wlan_devstatus_statistics_rx_bytes(char *refparam, struct dmctx *ctx, ch
json_object *res;
struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", wlanargs->wiface}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", wlanargs->wiface, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", 0, "rx_bytes", value, NULL);
return 0;
@ -2648,7 +2675,7 @@ int get_wlan_devstatus_statistics_tx_packets(char *refparam, struct dmctx *ctx,
json_object *res;
struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", wlanargs->wiface}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", wlanargs->wiface, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", 0, "tx_packets", value, NULL);
return 0;
@ -2660,7 +2687,7 @@ int get_wlan_devstatus_statistics_rx_packets(char *refparam, struct dmctx *ctx,
char *val = NULL;
struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", wlanargs->wiface}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", wlanargs->wiface, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", 0, "rx_packets", value, NULL);
return 0;
@ -2930,26 +2957,6 @@ int get_wlan_associated_authenticationstate(char *refparam, struct dmctx *ctx, c
return 0;
}
int set_wlan_pre_shared_key(char *refparam, struct dmctx *ctx, int action, char *value)
{
char *encryption;
struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args;
switch (action) {
case VALUECHECK:
return 0;
case VALUESET:
dmuci_get_value_by_section_string(wlanargs->lwlansection, "encryption", &encryption);
if (!strstr(encryption, "psk")) {
reset_wlan(wlanargs->lwlansection);
dmuci_set_value_by_section(wlanargs->lwlansection, "gtk_rekey", "3600");
dmuci_set_value_by_section(wlanargs->lwlansection, "encryption", "psk");
}
dmuci_set_value_by_section(wlanargs->lwlansection, "key", value);
return 0;
}
return 0;
}
int get_wlan_psk_assoc_MACAddress(char *refparam, struct dmctx *ctx, char **value)
{
json_object *res;
@ -2960,7 +2967,7 @@ int get_wlan_psk_assoc_MACAddress(char *refparam, struct dmctx *ctx, char **valu
dmuci_get_value_by_section_string(wlanargs->lwlansection, "encryption", &encryption);
if (strstr(encryption, "psk")) {
sprintf(sta_pki, "sta-%d", wlanargs->pki);
dmubus_call("router.wireless", "stas", UBUS_ARGS{{"vif", wlanargs->wiface}}, 1, &res);
dmubus_call("router.wireless", "stas", UBUS_ARGS{{"vif", wlanargs->wiface, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, sta_pki, -1, "macaddr", value, NULL);
return 0;
@ -3037,7 +3044,7 @@ int set_x_inteno_se_frequency(char *refparam, struct dmctx *ctx, int action, cha
else if (value[0] == '5' || value[0] == '2')
{
uci_foreach_sections("wireless", "wifi-device", s) {
dmubus_call("router.wireless", "status", UBUS_ARGS{{"vif", section_name(s)}}, 1, &res);
dmubus_call("router.wireless", "status", UBUS_ARGS{{"vif", section_name(s), String}}, 1, &res);
if(res)
{
json_select(res, "frequency", 0, NULL, &freq, NULL);
@ -3419,7 +3426,7 @@ inline int entry_landevice_wlanconfiguration(struct dmctx *ctx, struct uci_secti
sprintf(buf, "%s.%d", wiface, wlctl_num);
wiface = buf;
}
dmubus_call("router.wireless", "status", UBUS_ARGS{{"vif", wiface}}, 1, &res);
dmubus_call("router.wireless", "status", UBUS_ARGS{{"vif", wiface, String}}, 1, &res);
init_ldargs_wlan(ctx, sss, wlctl_num, ss, section_name(ss), wiface, res, 0);
wlctl_num++;
SUBENTRY(entry_landevice_wlanconfiguration_instance, ctx, idev, iwlan);
@ -3472,7 +3479,7 @@ inline int entry_landevice_wlanconfiguration_associateddevice(struct dmctx *ctx,
char *idx, *idx_last = NULL;
struct ldwlanargs *wlanargs = (struct ldwlanargs *)ctx->args;
dmubus_call("router.wireless", "stas", UBUS_ARGS{{"vif", wlanargs->wiface}}, 1, &res);
dmubus_call("router.wireless", "stas", UBUS_ARGS{{"vif", wlanargs->wiface, String}}, 1, &res);
if (res) {
char *value;
json_object_object_foreach(res, key, wl_client_obj) {

View file

@ -629,7 +629,7 @@ int get_bridge_status(char *refparam, struct dmctx *ctx, char **value)
{
json_object *res;
struct args_layer2 *args = (struct args_layer2 *)ctx->args;
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", section_name(args->layer2section)}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", section_name(args->layer2section), String}}, 1, &res);
DM_ASSERT(res, *value = "0");
json_select(res, "up", 0, NULL, value, NULL);
return 0;
@ -648,10 +648,10 @@ int set_bridge_status(char *refparam, struct dmctx *ctx, int action, char *value
return 0;
case VALUESET:
if (b) {
dmubus_call_set("network.interface", "up", UBUS_ARGS{{"interface", section_name(args->layer2section)}}, 1);
dmubus_call_set("network.interface", "up", UBUS_ARGS{{"interface", section_name(args->layer2section), String}}, 1);
}
else {
dmubus_call_set("network.interface", "down", UBUS_ARGS{{"interface", section_name(args->layer2section)}}, 1);
dmubus_call_set("network.interface", "down", UBUS_ARGS{{"interface", section_name(args->layer2section), String}}, 1);
}
return 0;
}

View file

@ -11,7 +11,9 @@
#include <uci.h>
#include <ctype.h>
#include <arpa/inet.h>
#include "dmcwmp.h"
#include "dmentry.h"
#include "dmuci.h"
#include "dmubus.h"
#include "dmcommon.h"
@ -460,7 +462,7 @@ char *get_layer3_interface(struct dmctx *ctx)
if (!strstr(bval, "br-")) {
uci_foreach_option_cont("network", "interface", "ifname", bval, ss) {
ifname = section_name(ss);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", ifname}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", ifname, String}}, 1, &res);
if (res) {
json_select(res, "device", 0, NULL, &device, NULL);
if (strcmp(bval, device) == 0) {

View file

@ -185,7 +185,7 @@ int check_multiwan_interface(struct uci_section *interface_section, char *fwan)
if (type[0] == '\0' || cn < 2)
return 0;
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", section_name(interface_section)}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", section_name(interface_section), String}}, 1, &res);
if (res) {
json_select(res, "device", -1, NULL, &device, NULL);
}
@ -888,7 +888,7 @@ int get_wan_eth_intf_enable(char *refparam, struct dmctx *ctx, char **value)
struct wanargs *wandargs = (struct wanargs *)ctx->args;
json_object *res;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", wandargs->fdev}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", wandargs->fdev, String}}, 1, &res);
DM_ASSERT(res, *value = "0");
json_select(res, "up", -1, NULL, &val, NULL);
if (val) {
@ -917,7 +917,7 @@ int set_wan_eth_intf_enable(char *refparam, struct dmctx *ctx, int action, char
return 0;
case VALUESET: //ENHANCEMENT look for function to start and stop the ethernet driver
string_to_bool(value, &b);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", wandargs->fdev}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", wandargs->fdev, String}}, 1, &res);
if (res) {
json_select(res, "up", 0, NULL, &enable, NULL);
string_to_bool(enable, &enable_b);
@ -939,7 +939,7 @@ int set_wan_eth_intf_enable(char *refparam, struct dmctx *ctx, int action, char
goto end;
}
else {
dmubus_call("network.interface", "status", UBUS_ARGS{{"name", section_name(s)}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"name", section_name(s), String}}, 1, &res);
if (res) {
json_select(res, "device", -1, NULL, &device, NULL);
if (strstr(device, wandargs->fdev)) {
@ -962,7 +962,7 @@ int get_wan_eth_intf_status(char *refparam, struct dmctx *ctx, char **value)
struct wanargs *wandargs = (struct wanargs *)ctx->args;
json_object *res;
bool b;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", wandargs->fdev}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", wandargs->fdev, String}}, 1, &res);
DM_ASSERT(res, *value = "Disabled");
json_select(res, "up", 0, NULL, value, NULL);
if (*value) {
@ -979,7 +979,7 @@ int get_wan_eth_intf_mac(char *refparam, struct dmctx *ctx, char **value)
{
struct wanargs *wandargs = (struct wanargs *)ctx->args;
json_object *res;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", wandargs->fdev}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", wandargs->fdev, String}}, 1, &res);
DM_ASSERT(res, *value = "00:00:00:00:00:00");
json_select(res, "macaddr", 0, NULL, value, NULL);
if (!(*value) || (*value)[0] == '\0') {
@ -993,7 +993,7 @@ int get_wan_eth_intf_stats_tx_bytes(char *refparam, struct dmctx *ctx, char **va
struct wanargs *wandargs = (struct wanargs *)ctx->args;
json_object *res;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", wandargs->fdev}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", wandargs->fdev, String}}, 1, &res);
DM_ASSERT(res, *value = "0");
json_select(res, "statistics", 0, "tx_bytes", value, NULL);
if (!(*value) || (*value)[0] == '\0') {
@ -1007,7 +1007,7 @@ int get_wan_eth_intf_stats_rx_bytes(char *refparam, struct dmctx *ctx, char **va
struct wanargs *wandargs = (struct wanargs *)ctx->args;
json_object *res;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", wandargs->fdev}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", wandargs->fdev, String}}, 1, &res);
DM_ASSERT(res, *value = "0");
json_select(res, "statistics", 0, "rx_bytes", value, NULL);
if (!(*value) || (*value)[0] == '\0') {
@ -1021,7 +1021,7 @@ int get_wan_eth_intf_stats_tx_packets(char *refparam, struct dmctx *ctx, char **
struct wanargs *wandargs = (struct wanargs *)ctx->args;
json_object *res;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", wandargs->fdev}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", wandargs->fdev, String}}, 1, &res);
DM_ASSERT(res, *value = "0");
json_select(res, "statistics", 0, "tx_packets", value, NULL);
if (!(*value) || (*value)[0] == '\0') {
@ -1035,7 +1035,7 @@ int get_wan_eth_intf_stats_rx_packets(char *refparam, struct dmctx *ctx, char **
struct wanargs *wandargs = (struct wanargs *)ctx->args;
json_object *res;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", wandargs->fdev}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", wandargs->fdev, String}}, 1, &res);
DM_ASSERT(res, *value = "0");
json_select(res, "statistics", 0, "rx_packets", value, NULL);
if (!(*value) || (*value)[0] == '\0') {
@ -1135,7 +1135,8 @@ int set_wan_dsl_link_config_atm_encapsulation(char *refparam, struct dmctx *ctx,
{
int i;
struct uci_section *s;
char *type, *encapsulation, *encaptype, *pch;
char *type, *pch;
char *encapsulation = NULL, *encaptype = NULL;
struct wancdevargs *wandcdevargs = (struct wancdevargs *)ctx->args;
switch (action) {
@ -1218,7 +1219,7 @@ int get_wan_device_mng_status(char *refparam, struct dmctx *ctx, char **value)
struct wancprotoargs *wandcprotoargs = (struct wancprotoargs *) (ctx->args);
intf = section_name(wandcprotoargs->wancprotosection);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", intf}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", intf, String}}, 1, &res);
DM_ASSERT(res, *value = "Disconnected");
if (json_select(res, "up", 0, NULL, &status, NULL) != -1)
{
@ -1527,7 +1528,7 @@ int get_wan_device_ppp_status(char *refparam, struct dmctx *ctx, char **value)
struct wancprotoargs *wandcprotoargs = (struct wancprotoargs *) (ctx->args);
intf = section_name(wandcprotoargs->wancprotosection);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", intf}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", intf, String}}, 1, &res);
DM_ASSERT(res, *value = "");
if (json_select(res, "up", 0, NULL, &status, NULL) != -1)
{
@ -1565,10 +1566,10 @@ int get_wan_device_mng_interface_mac(char *refparam, struct dmctx *ctx, char **v
*value = "";
intf = section_name(wandcprotoargs->wancprotosection);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", intf}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", intf, String}}, 1, &res);
DM_ASSERT(res, *value = "");
if (json_select(res, "device", 0, NULL, &device, NULL) != -1) {
dmubus_call("network.device", "status", UBUS_ARGS{{"name", device}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", device, String}}, 1, &res);
if (res) {
json_select(res, "macaddr", 0, NULL, value, NULL);
return 0;
@ -1647,7 +1648,7 @@ int get_layer2_interface(char *wan_name, char **ifname)
dmuci_get_option_value_string("network", wan_name, "type", &wtype);
if(wtype[0] == '\0' || strcmp(wtype, "anywan") == 0)
{
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", wan_name}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", wan_name, String}}, 1, &res);
if (res) {
json_select(res, "device", -1, NULL, &device, NULL);
if(device[0] != '\0') {
@ -1945,7 +1946,7 @@ inline int ubus_get_wan_stats(json_object *res, char **value, char *stat_mod)
dmuci_get_option_value_string("network", section_name(cur_wancprotoargs.wancprotosection), "proto", &proto);
if (strcmp(proto, "dhcp") == 0 || strcmp(proto, "pppoe") == 0)
{
dmubus_call("network.device", "status", UBUS_ARGS{{"name", cur_wancdevargs.wan_ifname}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", cur_wancdevargs.wan_ifname, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", 0, stat_mod, value, NULL);
return 0;
@ -1956,28 +1957,28 @@ inline int ubus_get_wan_stats(json_object *res, char **value, char *stat_mod)
int get_wan_link_connection_eth_bytes_received(char *refparam, struct dmctx *ctx, char **value)
{
json_object *res;
json_object *res = NULL;
ubus_get_wan_stats(res, value, "rx_bytes");
return 0;
}
int get_wan_link_connection_eth_bytes_sent(char *refparam, struct dmctx *ctx, char **value)
{
json_object *res;
json_object *res = NULL;
ubus_get_wan_stats(res, value, "tx_bytes");
return 0;
}
int get_wan_link_connection_eth_pack_received(char *refparam, struct dmctx *ctx, char **value)
{
json_object *res;
json_object *res = NULL;
ubus_get_wan_stats(res, value, "rx_packets");
return 0;
}
int get_wan_link_connection_eth_pack_sent(char *refparam, struct dmctx *ctx, char **value)
{
json_object *res;
json_object *res = NULL;
ubus_get_wan_stats(res, value, "tx_packets");
return 0;
}
@ -2056,7 +2057,7 @@ int set_wan_ppp_con_alias(char *refparam, struct dmctx *ctx, int action, char *v
return 0;
}
/////////////SUB ENTRIES///////////////
inline int entry_wandevice_sub(struct dmctx *ctx)
int entry_wandevice_sub(struct dmctx *ctx)
{
int i = 0;
bool notif_permission;
@ -2095,7 +2096,7 @@ inline int entry_wandevice_sub(struct dmctx *ctx)
return 0;
}
inline int entry_wandevice_wanconnectiondevice(struct dmctx *ctx, char *dev, int i, char *cwritable)
int entry_wandevice_wanconnectiondevice(struct dmctx *ctx, char *dev, int i, char *cwritable)
{
struct uci_section *s = NULL;
char *fwan;
@ -2123,7 +2124,7 @@ inline int entry_wandevice_wanconnectiondevice(struct dmctx *ctx, char *dev, int
return 0;
}
inline int entry_wandevice_wanprotocolconnection(struct dmctx *ctx, char *idev, char *iwan, char *fwan)
int entry_wandevice_wanprotocolconnection(struct dmctx *ctx, char *idev, char *iwan, char *fwan)
{
struct uci_section *ss = NULL;
char *pack, *stype, *p, *iconp_ip_last = NULL, *iconp_ppp_last = NULL;
@ -2179,7 +2180,7 @@ int entry_method_root_WANDevice(struct dmctx *ctx)
inline int entry_wandevice_sub_instance(struct dmctx *ctx, char *dev, int i, char *cwritable, bool notif_permission)
{
IF_MATCH(ctx, DMROOT"WANDevice.", dev) {
IF_MATCH(ctx, DMROOT"WANDevice.%s.", dev) {
DMOBJECT(DMROOT"WANDevice.%s.", ctx, "0", notif_permission, NULL, NULL, NULL, dev);
DMPARAM("Alias", ctx, "1", get_wan_dev_alias, set_wan_dev_alias, NULL, 0, 1, UNDEF, NULL);
DMOBJECT(DMROOT"WANDevice.%s.WANConnectionDevice.", ctx, cwritable, notif_permission, add_wan_wanconnectiondevice, delete_wan_wanconnectiondevice_all, NULL, dev);

View file

@ -21,6 +21,7 @@
struct sewifiargs cur_wifiargs = {0};
inline int entry_sewifi_radio(struct dmctx *ctx);
inline int entry_sewifi_radio_instance(struct dmctx *ctx, char *wnum);
inline int init_se_wifi(struct dmctx *ctx, struct uci_section *s)
{
struct sewifiargs *args = &cur_wifiargs;
@ -36,7 +37,7 @@ int get_wifi_frequency(char *refparam, struct dmctx *ctx, char **value)
struct sewifiargs *wifiargs = (struct sewifiargs *)ctx->args;
char *wlan_name = section_name(wifiargs->sewifisection);
dmubus_call("router.wireless", "status", UBUS_ARGS{{"vif", wlan_name}}, 1, &res);
dmubus_call("router.wireless", "status", UBUS_ARGS{{"vif", wlan_name, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "frequency", 0, NULL, &freq, NULL);
dmastrcat(value, freq, "GHz"); // MEM WILL BE FREED IN DMMEMCLEAN

View file

@ -314,7 +314,7 @@ int get_br_enable(char *refparam, struct dmctx *ctx, char **value)
json_object *res;
char *br_name;
dmastrcat(&br_name, "br-", section_name(cur_bridging_args.bridge_sec));
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", br_name}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", br_name, String}}, 1, &res);
DM_ASSERT(res, *value = "false");
json_select(res, "up", 0, NULL, value, NULL);
return 0;
@ -323,7 +323,7 @@ int get_br_enable(char *refparam, struct dmctx *ctx, char **value)
int get_br_status(char *refparam, struct dmctx *ctx, char **value)
{
json_object *res;
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", section_name(cur_bridging_args.bridge_sec)}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", section_name(cur_bridging_args.bridge_sec), String}}, 1, &res);
DM_ASSERT(res, *value = "Disabled");
json_select(res, "up", 0, NULL, value, NULL);
if(strcmp(*value,"true") == 0)
@ -342,10 +342,10 @@ int set_br_enable(char *refparam, struct dmctx *ctx, int action, char *value)
return 0;
case VALUESET:
if (b) {
dmubus_call_set("network.interface", "up", UBUS_ARGS{{"interface", section_name(cur_bridging_args.bridge_sec)}}, 1);
dmubus_call_set("network.interface", "up", UBUS_ARGS{{"interface", section_name(cur_bridging_args.bridge_sec), String}}, 1);
}
else {
dmubus_call_set("network.interface", "down", UBUS_ARGS{{"interface", section_name(cur_bridging_args.bridge_sec)}}, 1);
dmubus_call_set("network.interface", "down", UBUS_ARGS{{"interface", section_name(cur_bridging_args.bridge_sec), String}}, 1);
}
return 0;
}
@ -375,7 +375,7 @@ int get_br_port_status(char *refparam, struct dmctx *ctx, char **value)
{
json_object *res;
dmuci_get_value_by_section_string(cur_bridging_port_args.bridge_port_sec, "ifname", value);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", *value}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", *value, String}}, 1, &res);
DM_ASSERT(res, *value = "Down");
json_select(res, "up", 0, NULL, value, NULL);
if (strcmp(*value,"true") == 0)
@ -409,7 +409,7 @@ int get_br_port_stats_tx_bytes(char *refparam, struct dmctx *ctx, char **value)
{
json_object *res;
dmuci_get_value_by_section_string(cur_bridging_port_args.bridge_port_sec, "ifname", value);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", *value}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", *value, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", 0, "tx_bytes", value, NULL);
return 0;
@ -421,7 +421,7 @@ int get_br_port_stats_rx_bytes(char *refparam, struct dmctx *ctx, char **value)
struct ldethargs *ethargs = (struct ldethargs *)ctx->args;
dmuci_get_value_by_section_string(cur_bridging_port_args.bridge_port_sec, "ifname", value);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", *value}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", *value, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", 0, "rx_bytes", value, NULL);
return 0;
@ -433,7 +433,7 @@ int get_br_port_stats_tx_packets(char *refparam, struct dmctx *ctx, char **value
struct ldethargs *ethargs = (struct ldethargs *)ctx->args;
dmuci_get_value_by_section_string(cur_bridging_port_args.bridge_port_sec, "ifname", value);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", *value}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", *value, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", 0, "tx_packets", value, NULL);
return 0;
@ -445,7 +445,7 @@ int get_br_port_stats_rx_packets(char *refparam, struct dmctx *ctx, char **value
struct ldethargs *ethargs = (struct ldethargs *)ctx->args;
dmuci_get_value_by_section_string(cur_bridging_port_args.bridge_port_sec, "ifname", value);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", *value}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", *value, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", 0, "rx_packets", value, NULL);
return 0;

View file

@ -137,7 +137,7 @@ int get_dns_server(char *refparam, struct dmctx *ctx, char **value)
json_object *res;
int len;
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", cur_dhcp_args.interface}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", cur_dhcp_args.interface, String}}, 1, &res);
if(res)
json_parse_array(res, "dns-server", -1, NULL, value);
else
@ -286,7 +286,7 @@ int get_dhcp_interval_address(struct dmctx *ctx, char **value, int option)
}
dmuci_get_option_value_string("network", cur_dhcp_args.interface, "ipaddr", &ipaddr);
if (ipaddr[0] == '\0') {
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", cur_dhcp_args.interface}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", cur_dhcp_args.interface, String}}, 1, &res);
if (res)
json_select(res, "ipv4-address", 0, "address", &ipaddr, NULL);
}
@ -295,7 +295,7 @@ int get_dhcp_interval_address(struct dmctx *ctx, char **value, int option)
}
dmuci_get_option_value_string("network", cur_dhcp_args.interface, "netmask", &mask);
if (mask[0] == '\0') {
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", cur_dhcp_args.interface}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", cur_dhcp_args.interface, String}}, 1, &res);
if (res) {
json_select(res, "ipv4-address", 0, "mask", &mask, NULL);
if (mask[0] == '\0') {
@ -341,7 +341,7 @@ int set_dhcp_address_min(char *refparam, struct dmctx *ctx, int action, char *va
case VALUESET:
dmuci_get_option_value_string("network", cur_dhcp_args.interface, "ipaddr", &ipaddr);
if (ipaddr[0] == '\0') {
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", cur_dhcp_args.interface}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", cur_dhcp_args.interface, String}}, 1, &res);
if (res) {
json_select(res, "ipv4-address", 0, "address", &ipaddr, NULL);
}
@ -351,7 +351,7 @@ int set_dhcp_address_min(char *refparam, struct dmctx *ctx, int action, char *va
dmuci_get_option_value_string("network", cur_dhcp_args.interface, "netmask", &mask);
if (mask[0] == '\0') {
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", cur_dhcp_args.interface}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", cur_dhcp_args.interface, String}}, 1, &res);
if (res) {
json_select(res, "ipv4-address", 0, "mask", &mask, NULL);
if (mask[0] == '\0')
@ -392,7 +392,7 @@ int set_dhcp_address_max(char *refparam, struct dmctx *ctx, int action, char *va
dmuci_get_option_value_string("network", cur_dhcp_args.interface, "ipaddr", &ipaddr);
if (ipaddr[0] == '\0') {
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", cur_dhcp_args.interface}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", cur_dhcp_args.interface, String}}, 1, &res);
if (res) {
json_select(res, "ipv4-address", 0, "address", &ipaddr, NULL);
}
@ -402,7 +402,7 @@ int set_dhcp_address_max(char *refparam, struct dmctx *ctx, int action, char *va
dmuci_get_option_value_string("network", cur_dhcp_args.interface, "netmask", &mask);
if (mask[0] == '\0') {
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", cur_dhcp_args.interface}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", cur_dhcp_args.interface, String}}, 1, &res);
if (res) {
json_select(res, "ipv4-address", 0, "mask", &mask, NULL);
if (mask[0] == '\0')
@ -513,7 +513,7 @@ int get_dhcp_subnetmask(char *refparam, struct dmctx *ctx, char **value)
if (s == NULL || (*value)[0] == '\0')
dmuci_get_option_value_string("network", cur_dhcp_args.interface, "netmask", value);
if ((*value)[0] == '\0') {
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", cur_dhcp_args.interface}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", cur_dhcp_args.interface, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "ipv4-address", 0, "mask", &mask, NULL);
int i_mask = atoi(mask);

View file

@ -59,7 +59,7 @@ int get_eth_port_enable(char *refparam, struct dmctx *ctx, char **value)
} else
ifname = dmstrdup(cur_eth_port_args.ifname);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", ifname}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", ifname, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "up", -1, NULL, value, NULL);
dmfree(ifname);
@ -166,7 +166,7 @@ int get_eth_port_mac_address(char *refparam, struct dmctx *ctx, char **value)
{
json_object *res;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", cur_eth_port_args.ifname}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", cur_eth_port_args.ifname, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "macaddr", -1, NULL, value, NULL);
return 0;
@ -232,7 +232,7 @@ int get_eth_port_stats_tx_bytes(char *refparam, struct dmctx *ctx, char **value)
{
json_object *res;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", cur_eth_port_args.ifname}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", cur_eth_port_args.ifname, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", 0, "tx_bytes", value, NULL);
return 0;
@ -242,7 +242,7 @@ int get_eth_port_stats_rx_bytes(char *refparam, struct dmctx *ctx, char **value)
{
json_object *res;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", cur_eth_port_args.ifname}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", cur_eth_port_args.ifname, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", 0, "rx_bytes", value, NULL);
return 0;
@ -252,7 +252,7 @@ int get_eth_port_stats_tx_packets(char *refparam, struct dmctx *ctx, char **valu
{
json_object *res;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", cur_eth_port_args.ifname}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", cur_eth_port_args.ifname, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", 0, "tx_packets", value, NULL);
return 0;
@ -262,7 +262,7 @@ int get_eth_port_stats_rx_packets(char *refparam, struct dmctx *ctx, char **valu
{
json_object *res;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", cur_eth_port_args.ifname}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", cur_eth_port_args.ifname, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", 0, "rx_packets", value, NULL);
return 0;

View file

@ -144,7 +144,7 @@ char *get_interface_type(char *mac, char *ndev)
else {
p = wunit;
}
dmubus_call("router.wireless", "stas", UBUS_ARGS{{"vif", p}}, 1, &res);
dmubus_call("router.wireless", "stas", UBUS_ARGS{{"vif", p, String}}, 1, &res);
if(res) {
json_object_object_foreach(res, key, val) {
json_select(val, "macaddr", 0, NULL, &value, NULL);

View file

@ -414,7 +414,7 @@ int get_ip_int_lower_layer(char *refparam, struct dmctx *ctx, char **value)
return 0;
}
} else if (wtype[0] == '\0' || strcmp(wtype, "anywan") == 0) {
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", section_name(cur_ip_args.ip_sec)}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", section_name(cur_ip_args.ip_sec), String}}, 1, &res);
dmuci_get_value_by_section_string(cur_ip_args.ip_sec, "ifname", &wifname);
strcpy (linker, wifname);
if (res) {
@ -695,13 +695,13 @@ inline int entry_ip_interface(struct dmctx *ctx)
continue;
dmuci_get_value_by_section_string(net_sec, "ipaddr", &ipv4addr);
if (ipv4addr[0] == '\0') {
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", section_name(net_sec)}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", section_name(net_sec), String}}, 1, &res);
if (res)
json_select(res, "ipv4-address", 0, "address", &ipv4addr, NULL);
}
dmuci_get_value_by_section_string(net_sec, "ip6addr", &ipv6addr);
if (ipv6addr[0] == '\0') {
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", section_name(net_sec)}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", section_name(net_sec), String}}, 1, &res);
if (res)
json_select(res, "ipv6-address", 0, "address", &ipv6addr, NULL);
}

View file

@ -81,7 +81,7 @@ int get_ppp_status(char *refparam, struct dmctx *ctx, char **value)
json_object *res = NULL;
bool bstatus = false, bpend = false;
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", section_name(cur_ppp_args.ppp_sec)}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", section_name(cur_ppp_args.ppp_sec), String}}, 1, &res);
DM_ASSERT(res, *value = "");
if (json_select(res, "up", 0, NULL, &status, NULL) != -1)
{
@ -137,7 +137,7 @@ inline int ubus_get_wan_stats(json_object *res, char **value, char *stat_mod)
dmuci_get_value_by_section_string(cur_ppp_args.ppp_sec, "ifname", &ifname);
dmuci_get_value_by_section_string(cur_ppp_args.ppp_sec, "proto", &proto);
if (strcmp(proto, "pppoe") == 0) {
dmubus_call("network.device", "status", UBUS_ARGS{{"name", ifname}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", ifname, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", 0, stat_mod, value, NULL);
}

View file

@ -414,7 +414,7 @@ char *get_router_ipv4forwarding_interface(struct dmctx *ctx)
if (!strstr(bval, "br-")) {
uci_foreach_option_cont("network", "interface", "ifname", bval, ss) {
ifname = section_name(ss);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", ifname}}, 1, &res);
dmubus_call("network.interface", "status", UBUS_ARGS{{"interface", ifname, String}}, 1, &res);
if (res) {
json_select(res, "device", 0, NULL, &device, NULL);
if (strcmp(bval, device) == 0) {

View file

@ -516,7 +516,7 @@ int get_ptm_lower_layer(char *refparam, struct dmctx *ctx, char **value)
inline int ubus_atm_stats(json_object *res, char **value, char *stat_mod)
{
dmubus_call("network.device", "status", UBUS_ARGS{{"name", cur_atm_args.ifname}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", cur_atm_args.ifname, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", 0, stat_mod, value, NULL);
return 0;
@ -553,7 +553,7 @@ int get_atm_stats_pack_sent(char *refparam, struct dmctx *ctx, char **value)
inline int ubus_ptm_stats(json_object *res, char **value, char *stat_mod)
{
dmubus_call("network.device", "status", UBUS_ARGS{{"name", cur_ptm_args.ifname}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", cur_ptm_args.ifname, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", 0, stat_mod, value, NULL);
return 0;

View file

@ -105,7 +105,7 @@ int get_wlan_bssid(char *refparam, struct dmctx *ctx, char **value)
json_object *res;
wlan_name = section_name(cur_wifi_radio_args.wifi_radio_sec);
dmubus_call("router.wireless", "status", UBUS_ARGS{{"vif", wlan_name}}, 1, &res);
dmubus_call("router.wireless", "status", UBUS_ARGS{{"vif", wlan_name, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "bssid", 0, NULL, value, NULL);
return 0;
@ -174,7 +174,7 @@ int get_radio_frequency(char *refparam, struct dmctx *ctx, char **value)
char *freq;
json_object *res;
char *wlan_name = section_name(cur_wifi_radio_args.wifi_radio_sec);
dmubus_call("router.wireless", "status", UBUS_ARGS{{"vif", wlan_name}}, 1, &res);
dmubus_call("router.wireless", "status", UBUS_ARGS{{"vif", wlan_name, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "frequency", 0, NULL, &freq, NULL);
if(strcmp(freq, "2") == 0 ) {
@ -194,7 +194,7 @@ int get_radio_operating_channel_bandwidth(char *refparam, struct dmctx *ctx, cha
if (value[0] == '\0')
{
wlan_name = section_name(cur_wifi_radio_args.wifi_radio_sec);
dmubus_call("router.wireless", "status", UBUS_ARGS{{"vif", wlan_name}}, 1, &res);
dmubus_call("router.wireless", "status", UBUS_ARGS{{"vif", wlan_name, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "bandwidth", 0, NULL, &bandwith, NULL);
dmastrcat(value, bandwith, "MHz"); // MEM WILL BE FREED IN DMMEMCLEAN
@ -276,7 +276,7 @@ int get_radio_supported_standard(char *refparam, struct dmctx *ctx, char **value
char *freq, *wlan_name;
json_object *res;
wlan_name = section_name(cur_wifi_radio_args.wifi_radio_sec);
dmubus_call("router.wireless", "status", UBUS_ARGS{{"vif", wlan_name}}, 1, &res);
dmubus_call("router.wireless", "status", UBUS_ARGS{{"vif", wlan_name, String}}, 1, &res);
DM_ASSERT(res, *value = "b, g, n");
json_select(res, "frequency", 0, NULL, &freq, NULL);
if (strcmp(freq, "5") == 0)
@ -311,7 +311,7 @@ int set_radio_operating_standard(char *refparam, struct dmctx *ctx, int action,
return 0;
case VALUESET:
wlan_name = section_name(cur_wifi_radio_args.wifi_radio_sec);
dmubus_call("router.wireless", "status", UBUS_ARGS{{"vif", wlan_name}}, 1, &res);
dmubus_call("router.wireless", "status", UBUS_ARGS{{"vif", wlan_name, String}}, 1, &res);
json_select(res, "frequency", 0, NULL, &freq, NULL);
if (strcmp(freq, "5") == 0) {
if (strcmp(value, "n") == 0)
@ -355,7 +355,7 @@ int get_radio_channel(char *refparam, struct dmctx *ctx, char **value)
dmuci_get_value_by_section_string(cur_wifi_radio_args.wifi_radio_sec, "channel", value);
if (strcmp(*value, "auto") == 0 || (*value)[0] == '\0') {
wlan_name = section_name(cur_wifi_radio_args.wifi_radio_sec);
dmubus_call("router.wireless", "status", UBUS_ARGS{{"vif", wlan_name}}, 1, &res);
dmubus_call("router.wireless", "status", UBUS_ARGS{{"vif", wlan_name, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "channel", 0, NULL, value, NULL);
}
@ -400,7 +400,7 @@ int set_radio_auto_channel_enable(char *refparam, struct dmctx *ctx, int action,
value = "auto";
else {
wlan_name = section_name(cur_wifi_radio_args.wifi_radio_sec);
dmubus_call("router.wireless", "status", UBUS_ARGS{{"vif", wlan_name}}, 1, &res);
dmubus_call("router.wireless", "status", UBUS_ARGS{{"vif", wlan_name, String}}, 1, &res);
if(res == NULL)
return 0;
else
@ -416,7 +416,7 @@ int get_radio_statistics_tx_bytes(char *refparam, struct dmctx *ctx, char **valu
{
json_object *res;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", section_name(cur_wifi_radio_args.wifi_radio_sec)}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", section_name(cur_wifi_radio_args.wifi_radio_sec), String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", -1, "tx_bytes", value, NULL);
return 0;
@ -425,7 +425,7 @@ int get_radio_statistics_tx_bytes(char *refparam, struct dmctx *ctx, char **valu
int get_radio_statistics_rx_bytes(char *refparam, struct dmctx *ctx, char **value)
{
json_object *res;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", section_name(cur_wifi_radio_args.wifi_radio_sec)}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", section_name(cur_wifi_radio_args.wifi_radio_sec), String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", 0, "rx_bytes", value, NULL);
return 0;
@ -434,7 +434,7 @@ int get_radio_statistics_rx_bytes(char *refparam, struct dmctx *ctx, char **valu
int get_radio_statistics_tx_packets(char *refparam, struct dmctx *ctx, char **value)
{
json_object *res;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", section_name(cur_wifi_radio_args.wifi_radio_sec)}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", section_name(cur_wifi_radio_args.wifi_radio_sec), String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", 0, "tx_packets", value, NULL);
return 0;
@ -443,7 +443,7 @@ int get_radio_statistics_tx_packets(char *refparam, struct dmctx *ctx, char **va
int get_radio_statistics_rx_packets(char *refparam, struct dmctx *ctx, char **value)
{
json_object *res;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", section_name(cur_wifi_radio_args.wifi_radio_sec)}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", section_name(cur_wifi_radio_args.wifi_radio_sec), String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", 0, "rx_packets", value, NULL);
return 0;
@ -452,7 +452,7 @@ int get_radio_statistics_rx_packets(char *refparam, struct dmctx *ctx, char **va
int get_ssid_statistics_tx_bytes(char *refparam, struct dmctx *ctx, char **value)
{
json_object *res;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", cur_wifi_ssid_args.ifname}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", cur_wifi_ssid_args.ifname, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", -1, "tx_bytes", value, NULL);
return 0;
@ -461,7 +461,7 @@ int get_ssid_statistics_tx_bytes(char *refparam, struct dmctx *ctx, char **value
int get_ssid_statistics_rx_bytes(char *refparam, struct dmctx *ctx, char **value)
{
json_object *res;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", cur_wifi_ssid_args.ifname}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", cur_wifi_ssid_args.ifname, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", 0, "rx_bytes", value, NULL);
return 0;
@ -470,7 +470,7 @@ int get_ssid_statistics_rx_bytes(char *refparam, struct dmctx *ctx, char **value
int get_ssid_statistics_tx_packets(char *refparam, struct dmctx *ctx, char **value)
{
json_object *res;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", cur_wifi_ssid_args.ifname}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", cur_wifi_ssid_args.ifname, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", 0, "tx_packets", value, NULL);
return 0;
@ -479,7 +479,7 @@ int get_ssid_statistics_tx_packets(char *refparam, struct dmctx *ctx, char **val
int get_ssid_statistics_rx_packets(char *refparam, struct dmctx *ctx, char **value)
{
json_object *res;
dmubus_call("network.device", "status", UBUS_ARGS{{"name", cur_wifi_ssid_args.ifname}}, 1, &res);
dmubus_call("network.device", "status", UBUS_ARGS{{"name", cur_wifi_ssid_args.ifname, String}}, 1, &res);
DM_ASSERT(res, *value = "");
json_select(res, "statistics", 0, "rx_packets", value, NULL);
return 0;
@ -561,7 +561,7 @@ int get_access_point_total_associations(char *refparam, struct dmctx *ctx, char
int i = 0;
json_object *res;
char *wunit, buf[8];
dmubus_call("router.wireless", "stas", UBUS_ARGS{{"vif", cur_wifi_ssid_args.ifname}}, 1, &res);
dmubus_call("router.wireless", "stas", UBUS_ARGS{{"vif", cur_wifi_ssid_args.ifname, String}}, 1, &res);
DM_ASSERT(res, *value = "0");
json_object_object_foreach(res, key, val) {
if (strstr(key, "sta-"))

View file

@ -17,6 +17,7 @@
#include <stdarg.h>
#include <stdio.h>
#include <uci.h>
#include <ctype.h>
#include "dmuci.h"
#include "dmmem.h"

View file

@ -148,6 +148,14 @@ struct uci_section *dmuci_walk_state_section(char *package, char *stype, void *a
struct uci_section *dmuci_walk_section_icwmpd(char *package, char *stype, void *arg1, void *arg2, int cmp , int (*filter)(struct uci_section *s, void *value), struct uci_section *prev_section, int walk);
char *dmuci_set_value_by_section_icwmpd(struct uci_section *s, char *option, char *value);
int dmuci_add_section_icwmpd(char *package, char *stype, struct uci_section **s, char **value);
int dmuci_add_state_section(char *package, char *stype, struct uci_section **s, char **value);
char *dmuci_set_varstate_value(char *package, char *section, char *option, char *value);
char *dmuci_set_value_icwmpd(char *package, char *section, char *option, char *value);
int dmuci_delete_by_section_icwmpd(struct uci_section *s, char *option, char *value);
int dmuci_rename_section_by_section(struct uci_section *s, char *value);
int dmuci_exit_icwmpd(void);
int dmuci_init_icwmpd(void);
#define NEW_UCI_PATH(UCI_PATH, CPATH, DPATH) \
struct uci_context *uci_ctx_##UCI_PATH; \
const char *uci_savedir_##UCI_PATH = DPATH; \

View file

@ -24,6 +24,7 @@
#include "jshn.h"
#include "external.h"
#include "dmcwmp.h"
#include "dmentry.h"
#include "deviceinfo.h"
LIST_HEAD(list_value_change);
@ -75,7 +76,7 @@ void cwmp_save_event_container (struct cwmp *cwmp,struct event_container *event_
struct event_container *cwmp_add_event_container (struct cwmp *cwmp, int event_code, char *command_key)
{
static unsigned int id;
static int id;
struct event_container *event_container;
struct session *session;
struct list_head *ilist;

View file

@ -186,8 +186,9 @@ void external_init()
close(pfds_out[0]);
if (signal(SIGPIPE, SIG_IGN) == SIG_ERR)
{
DD(ERROR, "icwmp script intialization: signal ignoring error");
}
external_read_pipe_input(NULL);
DD(INFO, "icwmp script is listening");

7
http.c
View file

@ -20,6 +20,8 @@
#include <arpa/inet.h>
#include <unistd.h>
#include <fcntl.h>
#include <uci.h>
#include "external.h"
#include "cwmp.h"
#include "log.h"
#include "xml.h"
@ -48,8 +50,7 @@ static struct http_client http_c;
static CURL *curl;
#endif
int
http_client_init(struct cwmp *cwmp)
int http_client_init(struct cwmp *cwmp)
{
char *dhcp_dis;
char *acs_var_stat;
@ -153,7 +154,7 @@ http_get_response(void *buffer, size_t size, size_t rxed, char **msg_in)
{
char *c;
if (asprintf(&c, "%s%.*s", *msg_in, size * rxed, buffer) == -1) {
if (asprintf(&c, "%s%.*s", *msg_in, size * rxed, (char *)buffer) == -1) {
FREE(*msg_in);
return -1;
}

View file

@ -42,10 +42,12 @@ struct search_keywords {
extern pthread_mutex_t mutex_backup_session;
int cwmp_init_backup_session(struct cwmp *cwmp, char **ret, enum backup_loading load);
void bkp_session_save();
int cwmp_load_saved_session(struct cwmp *cwmp, char **acsurl, enum backup_loading load);
mxml_node_t *bkp_session_insert_event(int index, char *command_key, int id, char *status);
void bkp_session_delete_event(int id, char *status);
void bkp_session_simple_insert_in_parent(char *parent, char *child, char *value);
void bkp_session_insert_parameter(mxml_node_t *b, char *name);
void bkp_session_simple_insert(char *parent, char *child, char *value);
void bkp_session_move_inform_to_inform_send ();
@ -64,4 +66,7 @@ void bkp_session_delete_transfer_complete(struct transfer_complete *ptransfer_co
void bkp_session_insert_schedule_download(struct schedule_download *pschedule_download);
void bkp_session_insert_apply_schedule_download(struct apply_schedule_download *papply_schedule_download);
void bkp_session_delete_apply_schedule_download(struct apply_schedule_download *papply_schedule_download);
void bkp_session_delete_du_state_change_complete(struct du_state_change_complete *pdu_state_change_complete);
void bkp_session_delete_schedule_download(struct schedule_download *pschedule_download);
void bkp_session_insert_du_state_change_complete(struct du_state_change_complete *pdu_state_change_complete);
#endif /* _BACKUPSESSION_H__ */

View file

@ -201,8 +201,8 @@ typedef struct config {
bool lw_notification_enable;
char *lw_notification_hostname;
int lw_notification_port;
unsigned int amd_version;
unsigned int supported_amd_version;
int amd_version;
int supported_amd_version;
unsigned int instance_mode;
unsigned int session_timeout;
bool xmpp_enable;
@ -336,6 +336,12 @@ extern struct list_head list_lw_value_change;
extern struct list_head list_value_change;
extern pthread_mutex_t mutex_value_change;
int cwmp_config_reload(struct cwmp *cwmp);
int cwmp_move_session_to_session_send (struct cwmp *cwmp, struct session *session);
int cwmp_schedule_rpc (struct cwmp *cwmp, struct session *session);
int run_session_end_func (struct session *session);
int cwmp_move_session_to_session_queue (struct cwmp *cwmp, struct session *session);
int cwmp_session_destructor (struct cwmp *cwmp, struct session *session);
int dm_add_end_session(void(*function)(int a, void *d), int action, void *data);
int apply_end_session();
struct rpc *cwmp_add_session_rpc_cpe (struct session *session, int type);
@ -348,6 +354,7 @@ void cwmp_save_event_container (struct cwmp *cwmp,struct event_container *event_
void *thread_event_periodic (void *v);
void cwmp_add_notification(void);
int netlink_init(void);
int netlink_init_v6(void);
char * mix_get_time(void);
char * mix_get_time_of(time_t t_time);
void *thread_exit_program (void *v);
@ -358,4 +365,13 @@ void cwmp_set_end_session (unsigned int end_session_flag);
void *thread_handle_notify(void *v);
int zlib_compress (char *message, unsigned char **zmsg, int *zlen, int type);
int cwmp_get_int_event_code(char *code);
int cwmp_apply_acs_changes ();
int cwmp_init(int argc, char** argv,struct cwmp *cwmp);
int cwmp_config_reload(struct cwmp *cwmp);
int uci_get_value(char *cmd,char **value);
int uci_set_state_value(char *cmd);
int uci_get_state_value(char *cmd,char **value);
int save_acs_bkp_config(struct cwmp *cwmp);
int get_instance_mode_config();
int get_amd_version_config();
#endif /* _CWMP_H__ */

View file

@ -21,6 +21,7 @@ static char *fc_script = "./ext/openwrt/scripts/icwmp.sh";
static char *fc_script = "/usr/sbin/icwmp";
#endif
void external_du_change_stateFaultResp (char *fault_code, char *version, char *name);
void external_downloadFaultResp (char *fault_code);
void external_fetch_downloadFaultResp (char **fault_code);
void external_uploadFaultResp (char *fault_code);
@ -32,6 +33,8 @@ int external_download(char *url, char *size, char *type, char *user, char *pass,
int external_upload(char *url, char *type, char *user, char *pass, char *name);
int external_apply(char *action, char *arg,time_t c);
int external_change_du_state_uninstall(char *package_name);
void external_fetch_du_change_stateFaultResp (char **fault, char **version, char **name);
int external_change_du_state_download(char *url, char *user, char *pass);
int external_handle_action(int (*external_handler)(char *msg));
void external_add_list_paramameter(char *param_name, char *param_data, char *param_type, char *fault_code);
void external_free_list_parameter();

View file

@ -13,6 +13,7 @@
#include <stdint.h>
#include <libubox/uloop.h>
#include <cwmp.h>
#ifdef HTTP_CURL
#include <curl/curl.h>

View file

@ -24,6 +24,12 @@ enum log_severity_enum {
DEBUG
};
void puts_log(int severity, const char *fmt, ...);
int log_set_log_file_name (char *value);
int log_set_file_max_size(char *value);
int log_set_on_console(char *value);
int log_set_on_file(char *value);
int log_set_severity_idx (char *value);
#define DEFAULT_LOG_FILE_SIZE 10240
#define DEFAULT_LOG_FILE_NAME "/var/log/icwmpd.log"
#define DEFAULT_LOG_SEVERITY INFO

View file

@ -300,6 +300,7 @@ int cwmp_rpc_acs_destroy_data_du_state_change_complete(struct session *session,
int xml_handle_message(struct session *session);
int xml_prepare_msg_out(struct session *session);
int xml_prepare_lwnotification_message(char **msg_out);
int xml_set_cwmp_id_rpc_cpe(struct session *session);
int cwmp_create_fault_message(struct session *session, struct rpc *rpc_cpe, int fault_code);
int cwmp_get_fault_code (int fault_code);
int cwmp_scheduleInform_remove_all();
@ -319,5 +320,18 @@ int cwmp_launch_change_du_state_download(struct operations *poperation, struct o
int cwmp_launch_update_du_state_download(char *user, char *pass, char *url, struct opresult **pchange_du_state_complete);
const char *whitespace_cb(mxml_node_t *node, int where);
int cwmp_root_cause_TransferComplete (struct cwmp *cwmp, struct transfer_complete *p);
int cwmp_root_cause_dustatechangeComplete (struct cwmp *cwmp, struct du_state_change_complete *p);
int cwmp_root_cause_events (struct cwmp *cwmp);
void cwmp_root_cause_event_ipdiagnostic(void);
int xml_set_cwmp_id(struct session *session);
int xml_send_message(struct cwmp *cwmp, struct session *session, struct rpc *rpc);
int cwmp_free_download_request(struct download *download);
int cwmp_free_upload_request(struct upload *upload);
int cwmp_free_schedule_download_request(struct schedule_download *schedule_download);
int cwmp_add_apply_schedule_download(struct schedule_download *schedule_download, char *start_time);
int cwmp_free_apply_schedule_download_request(struct apply_schedule_download *apply_schedule_download);
char *calculate_lwnotification_cnonce();
void sotfware_version_value_change(struct cwmp *cwmp, struct transfer_complete *p);
#endif

2
log.c
View file

@ -94,7 +94,7 @@ void puts_log(int severity, const char *fmt, ...)
time_t t;
struct tm *Tm;
struct timeval tv;
FILE *pLog;
FILE *pLog = NULL;
struct stat st;
long int size = 0;
char log_file_name_bak[256];

View file

@ -123,7 +123,7 @@ static void netlink_new_msg(struct uloop_fd *ufd, unsigned events)
return;
}
while (msg_size > sizeof(*nlh)) {
while (msg_size - sizeof(*nlh) > 0) {
int len = nlh->nlmsg_len;
int req_len = len - sizeof(*nlh);
@ -159,7 +159,7 @@ static void netlink_new_msg_v6(struct uloop_fd *ufd, unsigned events)
return;
}
while (msg_size > sizeof(*nlh)) {
while (msg_size - sizeof(*nlh) > 0 ) {
int len = nlh->nlmsg_len;
int req_len = len - sizeof(*nlh);

33
xml.c
View file

@ -15,6 +15,7 @@
#include <stdint.h>
#include <microxml.h>
#include <time.h>
#include "http.h"
#include "cwmp.h"
#include "xml.h"
#include "external.h"
@ -49,17 +50,17 @@ LIST_HEAD(list_schedule_inform);
static pthread_mutex_t mutex_schedule_inform = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t threshold_schedule_inform;
const static char *soap_env_url = "http://schemas.xmlsoap.org/soap/envelope/";
const static char *soap_enc_url = "http://schemas.xmlsoap.org/soap/encoding/";
const static char *xsd_url = "http://www.w3.org/2001/XMLSchema";
const static char *xsi_url = "http://www.w3.org/2001/XMLSchema-instance";
static const char *soap_env_url = "http://schemas.xmlsoap.org/soap/envelope/";
static const char *soap_enc_url = "http://schemas.xmlsoap.org/soap/encoding/";
static const char *xsd_url = "http://www.w3.org/2001/XMLSchema";
static const char *xsi_url = "http://www.w3.org/2001/XMLSchema-instance";
typedef struct DEVICE_ID_STRUCT {
char *device_id_name;
char *parameter_name;
} DEVICE_ID_STRUCT;
const static char *cwmp_urls[] = {
static const char *cwmp_urls[] = {
"urn:dslforum-org:cwmp-1-0",
"urn:dslforum-org:cwmp-1-1",
"urn:dslforum-org:cwmp-1-2",
@ -125,6 +126,8 @@ const struct rpc_acs_method rpc_acs_methods[] = {
[RPC_ACS_DU_STATE_CHANGE_COMPLETE] = {"DUStateChangeComplete", cwmp_rpc_acs_prepare_du_state_change_complete, NULL, cwmp_rpc_acs_destroy_data_du_state_change_complete}
};
int cwmp_free_change_du_state_request(struct change_du_state *change_du_state);
int cwmp_launch_uninstall_du_state(char *package_name, struct opresult **pchange_du_state_complete);
static int xml_recreate_namespace(mxml_node_t *tree)
{
@ -3386,7 +3389,7 @@ int cwmp_launch_change_du_state_download(struct operations *poperations, struct
{
int i, error = FAULT_CPE_NO_FAULT;
char *download_startTime;
struct opresult *p;
struct opresult *p = NULL;
char *fault_code;
char *package_version;
char *package_name;
@ -3841,14 +3844,14 @@ int cwmp_handle_rpc_cpe_change_du_state(struct session *session, struct rpc *rpc
pthread_t change_du_state_thread;
char *c, *tmp, *file_type = NULL;
int error = FAULT_CPE_NO_FAULT;
struct change_du_state *change_du_state,*ichange_du_state;
struct change_du_state *change_du_state = NULL,*ichange_du_state;
struct transfer_complete *ptransfer_complete;
struct list_head *ilist, *ilist1;
time_t scheduled_time;
time_t download_delay;
bool cond_signal = false;
int i = 0;
struct operations *elem;
struct operations *elem = NULL;
struct installop *p;
struct uninstallop *q;
struct updateop *r;
@ -4041,11 +4044,11 @@ int cwmp_handle_rpc_cpe_download(struct session *session, struct rpc *rpc)
pthread_t download_thread;
char *c, *tmp, *file_type = NULL;
int error = FAULT_CPE_NO_FAULT;
struct download *download,*idownload;
struct download *download = NULL,*idownload;
struct transfer_complete *ptransfer_complete;
struct list_head *ilist;
time_t scheduled_time;
time_t download_delay;
time_t scheduled_time = 0;
time_t download_delay = 0;
bool cond_signal = false;
if (asprintf(&c, "%s:%s", ns.cwmp, "Download") == -1)
@ -4237,7 +4240,7 @@ int cwmp_handle_rpc_cpe_schedule_download(struct session *session, struct rpc *r
char *windowmode0 = NULL, *windowmode1 = NULL;
int i = 0, j = 0;
int error = FAULT_CPE_NO_FAULT;
struct schedule_download *schedule_download,*ischedule_download;
struct schedule_download *schedule_download = NULL,*ischedule_download;
struct transfer_complete *ptransfer_complete;
struct list_head *ilist;
time_t scheduled_time;
@ -4494,11 +4497,11 @@ int cwmp_handle_rpc_cpe_upload(struct session *session, struct rpc *rpc)
pthread_t upload_thread;
char *c, *tmp, *file_type = NULL;
int error = FAULT_CPE_NO_FAULT;
struct upload *upload,*iupload;
struct upload *upload = NULL,*iupload;
struct transfer_complete *ptransfer_complete;
struct list_head *ilist;
time_t scheduled_time;
time_t upload_delay;
time_t scheduled_time = 0;
time_t upload_delay = 0;
bool cond_signal = false;
if (asprintf(&c, "%s:%s", ns.cwmp, "Upload") == -1)