mirror of
https://dev.iopsys.eu/bbf/icwmp.git
synced 2025-12-10 07:44:41 +01:00
Ticket refs #6359: icwmp: Reduce I/O on filesystem
This commit is contained in:
parent
61a71148da
commit
0aa8c57c41
18 changed files with 118 additions and 50 deletions
|
|
@ -5,7 +5,6 @@ include:
|
||||||
stages:
|
stages:
|
||||||
- static_code_analysis
|
- static_code_analysis
|
||||||
- unit_test
|
- unit_test
|
||||||
- api_test
|
|
||||||
- functional_test
|
- functional_test
|
||||||
|
|
||||||
variables:
|
variables:
|
||||||
|
|
@ -28,7 +27,7 @@ run_unit_test:
|
||||||
- unit-test-coverage.xml
|
- unit-test-coverage.xml
|
||||||
|
|
||||||
run_api_test:
|
run_api_test:
|
||||||
stage: api_test
|
stage: functional_test
|
||||||
image: iopsys/code-analysis:latest
|
image: iopsys/code-analysis:latest
|
||||||
allow_failure: false
|
allow_failure: false
|
||||||
script:
|
script:
|
||||||
|
|
|
||||||
|
|
@ -1102,10 +1102,8 @@ int bkp_session_check_file()
|
||||||
int cwmp_init_backup_session(struct cwmp *cwmp, char **ret, enum backup_loading load)
|
int cwmp_init_backup_session(struct cwmp *cwmp, char **ret, enum backup_loading load)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
if (bkp_session_check_file())
|
if (bkp_session_check_file())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
error = cwmp_load_saved_session(cwmp, ret, load);
|
error = cwmp_load_saved_session(cwmp, ret, load);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
31
common.c
31
common.c
|
|
@ -297,11 +297,10 @@ void get_firewall_zone_name_by_wan_iface(char *if_wan, char **zone_name)
|
||||||
*/
|
*/
|
||||||
void cwmp_reboot(char *command_key)
|
void cwmp_reboot(char *command_key)
|
||||||
{
|
{
|
||||||
cwmp_uci_set_value("cwmp", "acs", "ParameterKey", command_key);
|
cwmp_uci_set_varstate_value("cwmp", "cpe", "ParameterKey", command_key);
|
||||||
cwmp_commit_package("cwmp", UCI_STANDARD_CONFIG);
|
cwmp_commit_package("cwmp", UCI_VARSTATE_CONFIG);
|
||||||
|
|
||||||
sync();
|
cwmp_ubus_call("rpc-sys", "reboot", CWMP_UBUS_ARGS{ {} }, 0, NULL, NULL);
|
||||||
reboot(RB_AUTOBOOT);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -657,3 +656,27 @@ char *generate_random_string(size_t size)
|
||||||
}
|
}
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int copy_file(char *source_file, char *target_file)
|
||||||
|
{
|
||||||
|
char ch;
|
||||||
|
FILE *source, *target;
|
||||||
|
source = fopen(source_file, "r");
|
||||||
|
if (source == NULL) {
|
||||||
|
printf("Not able to open the source file: %s\n", source_file);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
target = fopen(target_file, "w");
|
||||||
|
if (target == NULL) {
|
||||||
|
fclose(source);
|
||||||
|
printf("Not able to open the target file: %s\n", target_file);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
while( (ch = fgetc(source) ) != EOF)
|
||||||
|
fputc(ch, target);
|
||||||
|
|
||||||
|
printf("File copied successfully.\n");
|
||||||
|
fclose(source);
|
||||||
|
fclose(target);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
||||||
36
cwmp.c
36
cwmp.c
|
|
@ -548,6 +548,27 @@ void clean_custom_inform_parameters()
|
||||||
nbre_boot_inform = 0;
|
nbre_boot_inform = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int create_cwmp_var_state_files()
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Create Notifications empty uci package
|
||||||
|
*/
|
||||||
|
if (!file_exists(CWMP_VARSTATE_UCI_PACKAGE)) {
|
||||||
|
FILE *fptr = fopen(CWMP_VARSTATE_UCI_PACKAGE, "w+");
|
||||||
|
if (fptr)
|
||||||
|
fclose(fptr);
|
||||||
|
else
|
||||||
|
return CWMP_GEN_ERR;
|
||||||
|
}
|
||||||
|
if (!folder_exists("/var/state/icwmpd")) {
|
||||||
|
if (mkdir("/var/state/icwmpd", S_IRWXU | S_IRWXG | S_IRWXO) == -1) {
|
||||||
|
CWMP_LOG(INFO, "Not able to create the folder /var/state/icwmpd");
|
||||||
|
return CWMP_GEN_ERR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return CWMP_OK;
|
||||||
|
}
|
||||||
|
|
||||||
static int cwmp_init(int argc, char **argv, struct cwmp *cwmp)
|
static int cwmp_init(int argc, char **argv, struct cwmp *cwmp)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
|
|
@ -558,6 +579,7 @@ static int cwmp_init(int argc, char **argv, struct cwmp *cwmp)
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
icwmp_init_list_services();
|
icwmp_init_list_services();
|
||||||
|
|
||||||
/* Only One instance should run*/
|
/* Only One instance should run*/
|
||||||
cwmp->pid_file = fopen("/var/run/icwmpd.pid", "w+");
|
cwmp->pid_file = fopen("/var/run/icwmpd.pid", "w+");
|
||||||
fcntl(fileno(cwmp->pid_file), F_SETFD, fcntl(fileno(cwmp->pid_file), F_GETFD) | FD_CLOEXEC);
|
fcntl(fileno(cwmp->pid_file), F_SETFD, fcntl(fileno(cwmp->pid_file), F_GETFD) | FD_CLOEXEC);
|
||||||
|
|
@ -580,6 +602,9 @@ static int cwmp_init(int argc, char **argv, struct cwmp *cwmp)
|
||||||
memcpy(&(cwmp->env), &env, sizeof(struct env));
|
memcpy(&(cwmp->env), &env, sizeof(struct env));
|
||||||
INIT_LIST_HEAD(&(cwmp->head_session_queue));
|
INIT_LIST_HEAD(&(cwmp->head_session_queue));
|
||||||
|
|
||||||
|
if ((error = create_cwmp_var_state_files()))
|
||||||
|
return error;
|
||||||
|
|
||||||
cwmp_uci_init();
|
cwmp_uci_init();
|
||||||
if ((error = global_conf_init(cwmp)))
|
if ((error = global_conf_init(cwmp)))
|
||||||
return error;
|
return error;
|
||||||
|
|
@ -596,6 +621,7 @@ static int cwmp_init(int argc, char **argv, struct cwmp *cwmp)
|
||||||
|
|
||||||
static void cwmp_free(struct cwmp *cwmp)
|
static void cwmp_free(struct cwmp *cwmp)
|
||||||
{
|
{
|
||||||
|
CWMP_LOG(INFO, "%s:%s line %d", __FILE__, __FUNCTION__, __LINE__);
|
||||||
FREE(cwmp->deviceid.manufacturer);
|
FREE(cwmp->deviceid.manufacturer);
|
||||||
FREE(cwmp->deviceid.serialnumber);
|
FREE(cwmp->deviceid.serialnumber);
|
||||||
FREE(cwmp->deviceid.productclass);
|
FREE(cwmp->deviceid.productclass);
|
||||||
|
|
@ -627,6 +653,8 @@ static void cwmp_free(struct cwmp *cwmp)
|
||||||
|
|
||||||
static void *thread_cwmp_signal_handler_thread(void *arg)
|
static void *thread_cwmp_signal_handler_thread(void *arg)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
CWMP_LOG(INFO, "%s:%s line %d", __FILE__, __FUNCTION__, __LINE__);
|
||||||
sigset_t *set = (sigset_t *)arg;
|
sigset_t *set = (sigset_t *)arg;
|
||||||
int s, signal_num;
|
int s, signal_num;
|
||||||
|
|
||||||
|
|
@ -638,7 +666,8 @@ static void *thread_cwmp_signal_handler_thread(void *arg)
|
||||||
CWMP_LOG(INFO, "Catch of Signal(%d)", signal_num);
|
CWMP_LOG(INFO, "Catch of Signal(%d)", signal_num);
|
||||||
|
|
||||||
if (signal_num == SIGINT || signal_num == SIGTERM) {
|
if (signal_num == SIGINT || signal_num == SIGTERM) {
|
||||||
|
//copy_file(CWMP_BKP_FILE, "/etc/icwmpd/.icwmpd_backup_session.xml");
|
||||||
|
CWMP_LOG(INFO, "%s:%s line %d", __FILE__, __FUNCTION__, __LINE__);
|
||||||
signal_exit = true;
|
signal_exit = true;
|
||||||
|
|
||||||
if (!ubus_exit)
|
if (!ubus_exit)
|
||||||
|
|
@ -675,20 +704,25 @@ int main(int argc, char **argv)
|
||||||
sigset_t set;
|
sigset_t set;
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
|
CWMP_LOG(INFO, "%s:%s line %d", __FILE__, __FUNCTION__, __LINE__);
|
||||||
if ((error = cwmp_init(argc, argv, cwmp)))
|
if ((error = cwmp_init(argc, argv, cwmp)))
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
CWMP_LOG(INFO, "STARTING ICWMP with PID :%d", getpid());
|
CWMP_LOG(INFO, "STARTING ICWMP with PID :%d", getpid());
|
||||||
cwmp->start_time = time(NULL);
|
cwmp->start_time = time(NULL);
|
||||||
|
|
||||||
|
CWMP_LOG(INFO, "%s:%s line %d", __FILE__, __FUNCTION__, __LINE__);
|
||||||
if ((error = cwmp_init_backup_session(cwmp, NULL, ALL)))
|
if ((error = cwmp_init_backup_session(cwmp, NULL, ALL)))
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
|
CWMP_LOG(INFO, "%s:%s line %d", __FILE__, __FUNCTION__, __LINE__);
|
||||||
if ((error = cwmp_root_cause_events(cwmp)))
|
if ((error = cwmp_root_cause_events(cwmp)))
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
|
CWMP_LOG(INFO, "%s:%s line %d", __FILE__, __FUNCTION__, __LINE__);
|
||||||
configure_var_state(cwmp);
|
configure_var_state(cwmp);
|
||||||
http_server_init();
|
http_server_init();
|
||||||
|
CWMP_LOG(INFO, "%s:%s line %d", __FILE__, __FUNCTION__, __LINE__);
|
||||||
|
|
||||||
sigemptyset(&set);
|
sigemptyset(&set);
|
||||||
sigaddset(&set, SIGINT);
|
sigaddset(&set, SIGINT);
|
||||||
|
|
|
||||||
17
cwmp_uci.c
17
cwmp_uci.c
|
|
@ -16,7 +16,7 @@ struct uci_paths uci_save_conf_paths[] = {
|
||||||
[UCI_STANDARD_CONFIG] = { "/etc/config", "/tmp/.uci", NULL },
|
[UCI_STANDARD_CONFIG] = { "/etc/config", "/tmp/.uci", NULL },
|
||||||
[UCI_DB_CONFIG] = { "/lib/db/config", NULL, NULL },
|
[UCI_DB_CONFIG] = { "/lib/db/config", NULL, NULL },
|
||||||
[UCI_BOARD_DB_CONFIG] = { "/etc/board-db/config", NULL, NULL },
|
[UCI_BOARD_DB_CONFIG] = { "/etc/board-db/config", NULL, NULL },
|
||||||
[UCI_VARSTATE_CONFIG] = { "/var/state", NULL, NULL },
|
[UCI_VARSTATE_CONFIG] = { "/var/state", NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -315,7 +315,6 @@ int cwmp_uci_set_varstate_value(char *package, char*section, char *option, char
|
||||||
return cwmp_uci_set_value_string(package, section, option, value, UCI_VARSTATE_CONFIG);
|
return cwmp_uci_set_value_string(package, section, option, value, UCI_VARSTATE_CONFIG);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int uci_set_value_by_path(char *path, char *value, uci_config_paths uci_type)
|
int uci_set_value_by_path(char *path, char *value, uci_config_paths uci_type)
|
||||||
{
|
{
|
||||||
struct uci_ptr ptr;
|
struct uci_ptr ptr;
|
||||||
|
|
@ -413,7 +412,7 @@ char *cwmp_uci_list_to_string(struct uci_list *list, char *delimitor)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cwmp_uci_get_option_value_list(char *package, char *section, char *option, struct uci_list **value)
|
int cwmp_uci_get_option_value_list(char *package, char *section, char *option, uci_config_paths uci_type, struct uci_list **value)
|
||||||
{
|
{
|
||||||
struct uci_element *e = NULL;
|
struct uci_element *e = NULL;
|
||||||
struct uci_ptr ptr = {0};
|
struct uci_ptr ptr = {0};
|
||||||
|
|
@ -422,7 +421,7 @@ int cwmp_uci_get_option_value_list(char *package, char *section, char *option, s
|
||||||
int option_type;
|
int option_type;
|
||||||
*value = NULL;
|
*value = NULL;
|
||||||
|
|
||||||
if (cwmp_uci_lookup_ptr(uci_save_conf_paths[UCI_STANDARD_CONFIG].uci_ctx, &ptr, package, section, option, NULL))
|
if (cwmp_uci_lookup_ptr(uci_save_conf_paths[uci_type].uci_ctx, &ptr, package, section, option, NULL))
|
||||||
return UCI_ERR_PARSE;
|
return UCI_ERR_PARSE;
|
||||||
|
|
||||||
if (ptr.o) {
|
if (ptr.o) {
|
||||||
|
|
@ -457,6 +456,16 @@ int cwmp_uci_get_option_value_list(char *package, char *section, char *option, s
|
||||||
return option_type;
|
return option_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int cwmp_uci_get_cwmp_standard_option_value_list(char *package, char *section, char *option, struct uci_list **value)
|
||||||
|
{
|
||||||
|
return cwmp_uci_get_option_value_list(package, section, option, UCI_STANDARD_CONFIG, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
int cwmp_uci_get_cwmp_varstate_option_value_list(char *package, char *section, char *option, struct uci_list **value)
|
||||||
|
{
|
||||||
|
return cwmp_uci_get_option_value_list(package, section, option, UCI_VARSTATE_CONFIG, value);
|
||||||
|
}
|
||||||
|
|
||||||
int cwmp_uci_add_list_value(char *package, char *section, char *option, char *value, uci_config_paths uci_type)
|
int cwmp_uci_add_list_value(char *package, char *section, char *option, char *value, uci_config_paths uci_type)
|
||||||
{
|
{
|
||||||
struct uci_ptr ptr = {0};
|
struct uci_ptr ptr = {0};
|
||||||
|
|
|
||||||
|
|
@ -292,8 +292,8 @@ int apply_downloaded_file(struct cwmp *cwmp, struct download *pdownload, struct
|
||||||
error = FAULT_CPE_INVALID_ARGUMENTS;
|
error = FAULT_CPE_INVALID_ARGUMENTS;
|
||||||
|
|
||||||
if ((error == FAULT_CPE_NO_FAULT) && (pdownload->file_type[0] == '1' || pdownload->file_type[0] == '3')) {
|
if ((error == FAULT_CPE_NO_FAULT) && (pdownload->file_type[0] == '1' || pdownload->file_type[0] == '3')) {
|
||||||
cwmp_uci_set_value("cwmp", "acs", "ParameterKey", pdownload->command_key ? pdownload->command_key : "");
|
cwmp_uci_set_varstate_value("cwmp", "cpe", "ParameterKey", pdownload->command_key ? pdownload->command_key : "");
|
||||||
cwmp_commit_package("cwmp", UCI_STANDARD_CONFIG);
|
cwmp_commit_package("cwmp", UCI_VARSTATE_CONFIG);
|
||||||
if (pdownload->file_type[0] == '3') {
|
if (pdownload->file_type[0] == '3') {
|
||||||
CWMP_LOG(INFO, "Download and apply new vendor config file is done successfully");
|
CWMP_LOG(INFO, "Download and apply new vendor config file is done successfully");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ date +%s > timestamp.log
|
||||||
echo "Compiling icmwp"
|
echo "Compiling icmwp"
|
||||||
build_icwmp
|
build_icwmp
|
||||||
|
|
||||||
|
mkdir -p /var/state/icwmpd
|
||||||
echo "Starting dependent services"
|
echo "Starting dependent services"
|
||||||
supervisorctl status all
|
supervisorctl status all
|
||||||
supervisorctl update
|
supervisorctl update
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,8 @@ configure_genieacs
|
||||||
echo "Configuring ACS URL"
|
echo "Configuring ACS URL"
|
||||||
configure_acs_url
|
configure_acs_url
|
||||||
|
|
||||||
|
mkdir -p /var/state/icwmpd
|
||||||
|
|
||||||
echo "Starting icwmpd deamon"
|
echo "Starting icwmpd deamon"
|
||||||
supervisorctl start icwmpd
|
supervisorctl start icwmpd
|
||||||
sleep 5
|
sleep 5
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ exec_cmd cp /builds/iopsys/icwmp/test/files/etc/icwmpd/* /etc/icwmpd
|
||||||
|
|
||||||
exec_cmd mkdir -p /var/state
|
exec_cmd mkdir -p /var/state
|
||||||
exec_cmd cp /builds/iopsys/icwmp/test/files/var/state/cwmp /var/state
|
exec_cmd cp /builds/iopsys/icwmp/test/files/var/state/cwmp /var/state
|
||||||
|
mkdir -p /var/state/icwmpd
|
||||||
|
|
||||||
echo "Starting dependent services"
|
echo "Starting dependent services"
|
||||||
supervisorctl status all
|
supervisorctl status all
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@
|
||||||
#define RPC_SEND 1
|
#define RPC_SEND 1
|
||||||
|
|
||||||
#define CWMP_BACKUP_SESSION "<cwmp></cwmp>"
|
#define CWMP_BACKUP_SESSION "<cwmp></cwmp>"
|
||||||
#define CWMP_BKP_FILE "/etc/icwmpd/.icwmpd_backup_session.xml"
|
#define CWMP_BKP_FILE "/var/state/icwmpd/.icwmpd_backup_session.xml"
|
||||||
typedef enum backup_loading
|
typedef enum backup_loading
|
||||||
{
|
{
|
||||||
ALL,
|
ALL,
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,7 @@
|
||||||
#define DEFAULT_ACSURL "http://192.168.1.1:8080/openacs/acs"
|
#define DEFAULT_ACSURL "http://192.168.1.1:8080/openacs/acs"
|
||||||
#define MAX_NBRE_SERVICES 256
|
#define MAX_NBRE_SERVICES 256
|
||||||
#define FIREWALL_CWMP "/etc/firewall.cwmp"
|
#define FIREWALL_CWMP "/etc/firewall.cwmp"
|
||||||
|
#define CWMP_VARSTATE_UCI_PACKAGE "/var/state/cwmp"
|
||||||
|
|
||||||
extern char *commandKey;
|
extern char *commandKey;
|
||||||
extern bool thread_end;
|
extern bool thread_end;
|
||||||
|
|
@ -483,6 +484,7 @@ bool icwmp_validate_int_in_range(char *arg, int min, int max);
|
||||||
void load_forced_inform_json_file(struct cwmp *cwmp);
|
void load_forced_inform_json_file(struct cwmp *cwmp);
|
||||||
void clean_custom_inform_parameters();
|
void clean_custom_inform_parameters();
|
||||||
char *generate_random_string(size_t size);
|
char *generate_random_string(size_t size);
|
||||||
|
int copy_file(char *source_file, char *target_file);
|
||||||
#ifndef FREE
|
#ifndef FREE
|
||||||
#define FREE(x) \
|
#define FREE(x) \
|
||||||
do { \
|
do { \
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,7 @@ typedef enum uci_config_paths
|
||||||
UCI_STANDARD_CONFIG,
|
UCI_STANDARD_CONFIG,
|
||||||
UCI_DB_CONFIG,
|
UCI_DB_CONFIG,
|
||||||
UCI_BOARD_DB_CONFIG,
|
UCI_BOARD_DB_CONFIG,
|
||||||
UCI_VARSTATE_CONFIG,
|
UCI_VARSTATE_CONFIG
|
||||||
}uci_config_paths;
|
}uci_config_paths;
|
||||||
|
|
||||||
enum uci_val_type
|
enum uci_val_type
|
||||||
|
|
@ -125,7 +125,8 @@ int cwmp_uci_init();
|
||||||
void cwmp_uci_exit(void);
|
void cwmp_uci_exit(void);
|
||||||
void cwmp_uci_reinit(void);
|
void cwmp_uci_reinit(void);
|
||||||
int cwmp_uci_lookup_ptr(struct uci_context *ctx, struct uci_ptr *ptr, char *package, char *section, char *option, char *value);
|
int cwmp_uci_lookup_ptr(struct uci_context *ctx, struct uci_ptr *ptr, char *package, char *section, char *option, char *value);
|
||||||
int cwmp_uci_get_option_value_list(char *package, char *section, char *option, struct uci_list **value);
|
int cwmp_uci_get_cwmp_standard_option_value_list(char *package, char *section, char *option, struct uci_list **value);
|
||||||
|
int cwmp_uci_get_cwmp_varstate_option_value_list(char *package, char *section, char *option, struct uci_list **value);
|
||||||
int uci_get_state_value(char *cmd, char **value);
|
int uci_get_state_value(char *cmd, char **value);
|
||||||
int uci_set_value_by_path(char *cmd, char *value, uci_config_paths uci_type);
|
int uci_set_value_by_path(char *cmd, char *value, uci_config_paths uci_type);
|
||||||
int cwmp_uci_set_value_by_path(char *path, char *value);
|
int cwmp_uci_set_value_by_path(char *path, char *value);
|
||||||
|
|
|
||||||
|
|
@ -48,8 +48,7 @@ extern struct list_head list_param_obj_notify;
|
||||||
uci_foreach_element(list_notif, e) { \*/
|
uci_foreach_element(list_notif, e) { \*/
|
||||||
|
|
||||||
|
|
||||||
|
#define DM_ENABLED_NOTIFY "/var/state/icwmpd/.dm_enabled_notify"
|
||||||
#define DM_ENABLED_NOTIFY "/etc/icwmpd/.dm_enabled_notify"
|
|
||||||
#define NOTIFY_FILE "/etc/icwmpd/.icwmpd_notify"
|
#define NOTIFY_FILE "/etc/icwmpd/.icwmpd_notify"
|
||||||
void ubus_check_value_change_callback(struct ubus_request *req, int type, struct blob_attr *msg);
|
void ubus_check_value_change_callback(struct ubus_request *req, int type, struct blob_attr *msg);
|
||||||
void cwmp_update_enabled_notify_file(void);
|
void cwmp_update_enabled_notify_file(void);
|
||||||
|
|
|
||||||
|
|
@ -81,12 +81,12 @@ int add_uci_option_notification(char *parameter_name, int notification)
|
||||||
struct uci_section *s = NULL;
|
struct uci_section *s = NULL;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
ret = cwmp_uci_get_section_type("cwmp", "@notifications[0]", UCI_STANDARD_CONFIG, ¬ification_type);
|
ret = cwmp_uci_get_section_type("cwmp", "@notifications[0]", UCI_VARSTATE_CONFIG, ¬ification_type);
|
||||||
if (notification_type == NULL || notification_type[0] == '\0') {
|
if (notification_type == NULL || notification_type[0] == '\0') {
|
||||||
cwmp_uci_add_section("cwmp", "notifications", UCI_STANDARD_CONFIG, &s);
|
cwmp_uci_add_section("cwmp", "notifications", UCI_VARSTATE_CONFIG, &s);
|
||||||
}
|
}
|
||||||
ret = cwmp_uci_add_list_value("cwmp", "@notifications[0]", notifications[notification], parameter_name, UCI_STANDARD_CONFIG);
|
ret = cwmp_uci_add_list_value("cwmp", "@notifications[0]", notifications[notification], parameter_name, UCI_VARSTATE_CONFIG);
|
||||||
ret = cwmp_commit_package("cwmp", UCI_STANDARD_CONFIG);
|
ret = cwmp_commit_package("cwmp", UCI_VARSTATE_CONFIG);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -99,7 +99,7 @@ bool check_parent_with_different_notification(char *parameter_name, int notifica
|
||||||
for (i = 0; i < 7; i++) {
|
for (i = 0; i < 7; i++) {
|
||||||
if (i == notification)
|
if (i == notification)
|
||||||
continue;
|
continue;
|
||||||
option_type = cwmp_uci_get_option_value_list("cwmp", "@notifications[0]", notifications[i], &list_notif);
|
option_type = cwmp_uci_get_cwmp_varstate_option_value_list("cwmp", "@notifications[0]", notifications[i], &list_notif);
|
||||||
if (list_notif) {
|
if (list_notif) {
|
||||||
uci_foreach_element(list_notif, e) {
|
uci_foreach_element(list_notif, e) {
|
||||||
if (parameter_is_subobject_of_parameter(e->name, parameter_name))
|
if (parameter_is_subobject_of_parameter(e->name, parameter_name))
|
||||||
|
|
@ -121,19 +121,19 @@ bool update_notifications_list(char *parameter_name, int notification)
|
||||||
bool update_ret = true;
|
bool update_ret = true;
|
||||||
|
|
||||||
for (i = 0; i < 7; i++) {
|
for (i = 0; i < 7; i++) {
|
||||||
option_type = cwmp_uci_get_option_value_list("cwmp", "@notifications[0]", notifications[i], &list_notif);
|
option_type = cwmp_uci_get_cwmp_varstate_option_value_list("cwmp", "@notifications[0]", notifications[i], &list_notif);
|
||||||
if (list_notif) {
|
if (list_notif) {
|
||||||
uci_foreach_element_safe(list_notif, tmp, e) {
|
uci_foreach_element_safe(list_notif, tmp, e) {
|
||||||
if (e->name == NULL)
|
if (e->name == NULL)
|
||||||
continue;
|
continue;
|
||||||
ename = strdup(e->name);
|
ename = strdup(e->name);
|
||||||
if ((strcmp(parameter_name, e->name) == 0 && (i != notification)) || parameter_is_subobject_of_parameter(parameter_name, e->name))
|
if ((strcmp(parameter_name, e->name) == 0 && (i != notification)) || parameter_is_subobject_of_parameter(parameter_name, e->name))
|
||||||
cwmp_uci_del_list_value("cwmp", "@notifications[0]", notifications[i], e->name, UCI_STANDARD_CONFIG);
|
cwmp_uci_del_list_value("cwmp", "@notifications[0]", notifications[i], e->name, UCI_VARSTATE_CONFIG);
|
||||||
if (ename && (strcmp(parameter_name, ename) == 0 || parameter_is_subobject_of_parameter(ename, parameter_name) ) && (i == notification))
|
if (ename && (strcmp(parameter_name, ename) == 0 || parameter_is_subobject_of_parameter(ename, parameter_name) ) && (i == notification))
|
||||||
update_ret = false;
|
update_ret = false;
|
||||||
FREE(ename);
|
FREE(ename);
|
||||||
}
|
}
|
||||||
cwmp_commit_package("cwmp", UCI_STANDARD_CONFIG);
|
cwmp_commit_package("cwmp", UCI_VARSTATE_CONFIG);
|
||||||
}
|
}
|
||||||
if (option_type == UCI_TYPE_STRING)
|
if (option_type == UCI_TYPE_STRING)
|
||||||
cwmp_free_uci_list(list_notif);
|
cwmp_free_uci_list(list_notif);
|
||||||
|
|
@ -173,7 +173,7 @@ int get_parameter_family_notifications(char *parameter_name, struct list_head *c
|
||||||
char *parent_param = NULL;
|
char *parent_param = NULL;
|
||||||
|
|
||||||
for (i = 0; i < 7; i++) {
|
for (i = 0; i < 7; i++) {
|
||||||
option_type = cwmp_uci_get_option_value_list("cwmp", "@notifications[0]", notifications[i], &list_notif);
|
option_type = cwmp_uci_get_cwmp_varstate_option_value_list("cwmp", "@notifications[0]", notifications[i], &list_notif);
|
||||||
if (list_notif) {
|
if (list_notif) {
|
||||||
uci_foreach_element(list_notif, e) {
|
uci_foreach_element(list_notif, e) {
|
||||||
if (parameter_is_subobject_of_parameter(parameter_name, e->name)) {
|
if (parameter_is_subobject_of_parameter(parameter_name, e->name)) {
|
||||||
|
|
@ -276,7 +276,7 @@ void create_list_param_obj_notify()
|
||||||
struct uci_element *e = NULL;
|
struct uci_element *e = NULL;
|
||||||
int i, option_type;
|
int i, option_type;
|
||||||
for (i = 0; i < 7; i++) {
|
for (i = 0; i < 7; i++) {
|
||||||
option_type = cwmp_uci_get_option_value_list("cwmp", "@notifications[0]", notifications[i], &list_notif);
|
option_type = cwmp_uci_get_cwmp_varstate_option_value_list("cwmp", "@notifications[0]", notifications[i], &list_notif);
|
||||||
if (list_notif) {
|
if (list_notif) {
|
||||||
uci_foreach_element(list_notif, e) {
|
uci_foreach_element(list_notif, e) {
|
||||||
add_dm_parameter_to_list(&list_param_obj_notify, e->name, "", "", i, false);
|
add_dm_parameter_to_list(&list_param_obj_notify, e->name, "", "", i, false);
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,7 @@ int get_parameter_notification_from_notifications_uci_list(char *parameter_name)
|
||||||
struct uci_list *list_notif;
|
struct uci_list *list_notif;
|
||||||
struct uci_element *e;
|
struct uci_element *e;
|
||||||
for (i = 0; i < 7; i++) {
|
for (i = 0; i < 7; i++) {
|
||||||
option_type = cwmp_uci_get_option_value_list("cwmp", "@notifications[0]", notifications_test[i], &list_notif);
|
option_type = cwmp_uci_get_cwmp_varstate_option_value_list("cwmp", "@notifications[0]", notifications_test[i], &list_notif);
|
||||||
if (list_notif) {
|
if (list_notif) {
|
||||||
uci_foreach_element(list_notif, e) {
|
uci_foreach_element(list_notif, e) {
|
||||||
if (strcmp(e->name, parameter_name) == 0) {
|
if (strcmp(e->name, parameter_name) == 0) {
|
||||||
|
|
|
||||||
|
|
@ -186,7 +186,7 @@ static void cwmp_uci_list_tests(void **state)
|
||||||
error = cwmp_uci_add_list_value("cwmp", "cpe", "optionlist", "val2", UCI_STANDARD_CONFIG);
|
error = cwmp_uci_add_list_value("cwmp", "cpe", "optionlist", "val2", UCI_STANDARD_CONFIG);
|
||||||
assert_int_equal(error, UCI_OK);
|
assert_int_equal(error, UCI_OK);
|
||||||
cwmp_commit_package("cwmp", UCI_STANDARD_CONFIG);
|
cwmp_commit_package("cwmp", UCI_STANDARD_CONFIG);
|
||||||
error = cwmp_uci_get_option_value_list("cwmp", "cpe", "optionlist", &list);
|
error = cwmp_uci_get_cwmp_standard_option_value_list("cwmp", "cpe", "optionlist", &list);
|
||||||
assert_int_equal(error, UCI_TYPE_LIST);
|
assert_int_equal(error, UCI_TYPE_LIST);
|
||||||
list_string = cwmp_uci_list_to_string(list, ",");
|
list_string = cwmp_uci_list_to_string(list, ",");
|
||||||
assert_non_null(list_string);
|
assert_non_null(list_string);
|
||||||
|
|
@ -200,7 +200,7 @@ static void cwmp_uci_list_tests(void **state)
|
||||||
error = cwmp_uci_add_list_value("cwmp", "wrong_section", "optionlist", "val2", UCI_STANDARD_CONFIG);
|
error = cwmp_uci_add_list_value("cwmp", "wrong_section", "optionlist", "val2", UCI_STANDARD_CONFIG);
|
||||||
assert_int_equal(error, UCI_ERR_INVAL);
|
assert_int_equal(error, UCI_ERR_INVAL);
|
||||||
cwmp_commit_package("cwmp", UCI_STANDARD_CONFIG);
|
cwmp_commit_package("cwmp", UCI_STANDARD_CONFIG);
|
||||||
error = cwmp_uci_get_option_value_list("cwmp", "wrong_section", "optionlist", &list);
|
error = cwmp_uci_get_cwmp_standard_option_value_list("cwmp", "wrong_section", "optionlist", &list);
|
||||||
assert_int_equal(error, UCI_ERR_NOTFOUND);
|
assert_int_equal(error, UCI_ERR_NOTFOUND);
|
||||||
assert_null(list);
|
assert_null(list);
|
||||||
list_string = cwmp_uci_list_to_string(list, ",");
|
list_string = cwmp_uci_list_to_string(list, ",");
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@ config acs 'acs'
|
||||||
option periodic_inform_enable 'true'
|
option periodic_inform_enable 'true'
|
||||||
option periodic_inform_interval '1800'
|
option periodic_inform_interval '1800'
|
||||||
option periodic_inform_time '0001-01-01T00:00:00Z'
|
option periodic_inform_time '0001-01-01T00:00:00Z'
|
||||||
option ParameterKey ''
|
|
||||||
option dhcp_discovery 'disable'
|
option dhcp_discovery 'disable'
|
||||||
# compression possible configs: GZIP, Deflate, Disabled
|
# compression possible configs: GZIP, Deflate, Disabled
|
||||||
option compression 'Disabled'
|
option compression 'Disabled'
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,8 @@ exec_cmd cp test/files/etc/icwmpd/custom_notification* /etc/icwmpd
|
||||||
# Test a valid custom notification json file
|
# Test a valid custom notification json file
|
||||||
#
|
#
|
||||||
rm /var/log/icwmpd.log
|
rm /var/log/icwmpd.log
|
||||||
uci delete cwmp.@notifications[0]
|
uci -c /var/state delete cwmp.@notifications[0]
|
||||||
uci commit cwmp
|
uci -c /var/state commit cwmp
|
||||||
|
|
||||||
exec_cmd uci set cwmp.cpe.custom_notify_json="/etc/icwmpd/custom_notification_valid.json"
|
exec_cmd uci set cwmp.cpe.custom_notify_json="/etc/icwmpd/custom_notification_valid.json"
|
||||||
uci commit cwmp
|
uci commit cwmp
|
||||||
|
|
@ -27,12 +27,12 @@ sleep 7
|
||||||
|
|
||||||
supervisorctl stop icwmpd
|
supervisorctl stop icwmpd
|
||||||
|
|
||||||
notif1=`uci get cwmp.@notifications[0].active | grep "Device.Users."`
|
notif1=`uci -c /var/state get cwmp.@notifications[0].active | grep "Device.Users."`
|
||||||
if [[ $notif1 != *"Device.Users."* ]]; then
|
if [[ $notif1 != *"Device.Users."* ]]; then
|
||||||
echo "FAIL: active notifications list doesn't contain Device.Users. parameter"
|
echo "FAIL: active notifications list doesn't contain Device.Users. parameter"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
notif2=`uci get cwmp.@notifications[0].passive | grep "Device.WiFi.SSID.1.SSID"`
|
notif2=`uci -c /var/state get cwmp.@notifications[0].passive | grep "Device.WiFi.SSID.1.SSID"`
|
||||||
if [[ $notif2 != *"Device.WiFi.SSID.1.SSID"* ]]; then
|
if [[ $notif2 != *"Device.WiFi.SSID.1.SSID"* ]]; then
|
||||||
echo "FAIL: active notifications list doesn't contain Device.WiFi.SSID.1.SSID parameter"
|
echo "FAIL: active notifications list doesn't contain Device.WiFi.SSID.1.SSID parameter"
|
||||||
exit 1
|
exit 1
|
||||||
|
|
@ -46,8 +46,8 @@ echo "PASS test valid custom notification json file"
|
||||||
# Test custom notification invalid json file
|
# Test custom notification invalid json file
|
||||||
#
|
#
|
||||||
rm /var/log/icwmpd.log
|
rm /var/log/icwmpd.log
|
||||||
uci delete cwmp.@notifications[0]
|
uci -c /var/state delete cwmp.@notifications[0]
|
||||||
uci commit cwmp
|
uci -c /var/state commit cwmp
|
||||||
|
|
||||||
exec_cmd uci set cwmp.cpe.custom_notify_json="/etc/icwmpd/custom_notification_invalid_json.json"
|
exec_cmd uci set cwmp.cpe.custom_notify_json="/etc/icwmpd/custom_notification_invalid_json.json"
|
||||||
uci commit cwmp
|
uci commit cwmp
|
||||||
|
|
@ -56,12 +56,12 @@ supervisorctl start icwmpd
|
||||||
sleep 7
|
sleep 7
|
||||||
supervisorctl stop icwmpd
|
supervisorctl stop icwmpd
|
||||||
|
|
||||||
notif1=`uci get cwmp.@notifications[0].active | grep "Device.Users."`
|
notif1=`uci -c /var/state get cwmp.@notifications[0].active | grep "Device.Users."`
|
||||||
if [[ $notif1 == *"Device.Users."* ]]; then
|
if [[ $notif1 == *"Device.Users."* ]]; then
|
||||||
echo "FAIL: the json file is invalid, the active notifcation list shouldn't contain Device.Users. parameter"
|
echo "FAIL: the json file is invalid, the active notifcation list shouldn't contain Device.Users. parameter"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
notif2=`uci get cwmp.@notifications[0].passive | grep "Device.WiFi.SSID.1.SSID"`
|
notif2=`uci -c /var/state get cwmp.@notifications[0].passive | grep "Device.WiFi.SSID.1.SSID"`
|
||||||
if [[ $notif2 == *"Device.WiFi.SSID.1.SSID"* ]]; then
|
if [[ $notif2 == *"Device.WiFi.SSID.1.SSID"* ]]; then
|
||||||
echo "FAIL: the json file is invalid, the active notifcation list shouldn't contain Device.WiFi.SSID.1.SSID parameter"
|
echo "FAIL: the json file is invalid, the active notifcation list shouldn't contain Device.WiFi.SSID.1.SSID parameter"
|
||||||
exit 1
|
exit 1
|
||||||
|
|
@ -81,8 +81,8 @@ rm /etc/icwmpd/.icwmpd_notify
|
||||||
# Test custom notification json file containing forced active notification
|
# Test custom notification json file containing forced active notification
|
||||||
#
|
#
|
||||||
rm /var/log/icwmpd.log
|
rm /var/log/icwmpd.log
|
||||||
uci delete cwmp.@notifications[0]
|
uci -c /var/state delete cwmp.@notifications[0]
|
||||||
uci commit cwmp
|
uci -c /var/state commit cwmp
|
||||||
|
|
||||||
exec_cmd uci set cwmp.cpe.custom_notify_json="/etc/icwmpd/custom_notification_forced.json"
|
exec_cmd uci set cwmp.cpe.custom_notify_json="/etc/icwmpd/custom_notification_forced.json"
|
||||||
uci commit cwmp
|
uci commit cwmp
|
||||||
|
|
@ -91,12 +91,12 @@ supervisorctl start icwmpd
|
||||||
sleep 7
|
sleep 7
|
||||||
supervisorctl stop icwmpd
|
supervisorctl stop icwmpd
|
||||||
|
|
||||||
notif1=`uci get cwmp.@notifications[0].active | grep "Device.Users."`
|
notif1=`uci -c /var/state get cwmp.@notifications[0].active | grep "Device.Users."`
|
||||||
if [[ $notif1 != *"Device.Users."* ]]; then
|
if [[ $notif1 != *"Device.Users."* ]]; then
|
||||||
echo "FAIL: active notifications list doesn't contain Device.Users. parameter"
|
echo "FAIL: active notifications list doesn't contain Device.Users. parameter"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
notif2=`uci get cwmp.@notifications[0].passive | grep "Device.DeviceInfo.ProvisioningCode"`
|
notif2=`uci -c /var/state get cwmp.@notifications[0].passive | grep "Device.DeviceInfo.ProvisioningCode"`
|
||||||
if [[ $notif2 == *"Device.DeviceInfo.ProvisioningCode"* ]]; then
|
if [[ $notif2 == *"Device.DeviceInfo.ProvisioningCode"* ]]; then
|
||||||
echo "FAIL: passive notifications list contains Device.DeviceInfo.ProvisioningCode while it's a forced active notification paramter"
|
echo "FAIL: passive notifications list contains Device.DeviceInfo.ProvisioningCode while it's a forced active notification paramter"
|
||||||
exit 1
|
exit 1
|
||||||
|
|
@ -116,8 +116,8 @@ rm /etc/icwmpd/.icwmpd_notify
|
||||||
# Test custom notification json file containing invalid parameter path
|
# Test custom notification json file containing invalid parameter path
|
||||||
#
|
#
|
||||||
rm /var/log/icwmpd.log
|
rm /var/log/icwmpd.log
|
||||||
uci delete cwmp.@notifications[0]
|
uci -c /var/state delete cwmp.@notifications[0]
|
||||||
uci commit cwmp
|
uci -c /var/state commit cwmp
|
||||||
|
|
||||||
exec_cmd uci set cwmp.cpe.custom_notify_json="/etc/icwmpd/custom_notification_invalid_parameter.json"
|
exec_cmd uci set cwmp.cpe.custom_notify_json="/etc/icwmpd/custom_notification_invalid_parameter.json"
|
||||||
uci commit cwmp
|
uci commit cwmp
|
||||||
|
|
@ -126,12 +126,12 @@ supervisorctl start icwmpd
|
||||||
sleep 7
|
sleep 7
|
||||||
supervisorctl stop icwmpd
|
supervisorctl stop icwmpd
|
||||||
|
|
||||||
notif1=`uci get cwmp.@notifications[0].active | grep "Device.Users."`
|
notif1=`uci -c /var/state get cwmp.@notifications[0].active | grep "Device.Users."`
|
||||||
if [[ $notif1 != *"Device.Users."* ]]; then
|
if [[ $notif1 != *"Device.Users."* ]]; then
|
||||||
echo "FAIL: active notifications list doesn't contain Device.Users. parameter"
|
echo "FAIL: active notifications list doesn't contain Device.Users. parameter"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
notif2=`uci get cwmp.@notifications[0].passive | grep "Device.WiFi.SSID.1.SD"`
|
notif2=`uci -c /var/state get cwmp.@notifications[0].passive | grep "Device.WiFi.SSID.1.SD"`
|
||||||
if [[ $notif2 == *"Device.WiFi.SSID.1.SD"* ]]; then
|
if [[ $notif2 == *"Device.WiFi.SSID.1.SD"* ]]; then
|
||||||
echo "FAIL: passive notifications list contains Device.WiFi.SSID.1.SD while it's a wrong parameter path"
|
echo "FAIL: passive notifications list contains Device.WiFi.SSID.1.SD while it's a wrong parameter path"
|
||||||
exit 1
|
exit 1
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue