From e228177d2e48add775edbf8efb65019f22e1c147 Mon Sep 17 00:00:00 2001 From: Amin Ben Ramdhane Date: Tue, 25 May 2021 10:40:30 +0100 Subject: [PATCH] ManagementServer: add support for ScheduleReboot and DelayReboot parameters --- dmtree/json/tr181.json | 34 ++++++++++++++++++++++-- dmtree/tr181/managementserver.c | 46 +++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 2 deletions(-) diff --git a/dmtree/json/tr181.json b/dmtree/json/tr181.json index 2506eede..afc9dcfc 100644 --- a/dmtree/json/tr181.json +++ b/dmtree/json/tr181.json @@ -2314,7 +2314,22 @@ "protocols": [ "cwmp" ], - "datatype": "dateTime" + "datatype": "dateTime", + "mapping": [ + { + "type": "uci", + "uci": { + "file": "cwmp", + "section": { + "type": "cpe", + "name": "cpe" + }, + "option": { + "name": "schedule_reboot" + } + } + } + ] }, "DelayReboot": { "type": "int", @@ -2329,7 +2344,22 @@ "min": -1 } ], - "unit": "seconds" + "unit": "seconds", + "mapping": [ + { + "type": "uci", + "uci": { + "file": "cwmp", + "section": { + "type": "cpe", + "name": "cpe" + }, + "option": { + "name": "delay_reboot" + } + } + } + ] }, "PeriodicInformEnable": { "type": "boolean", diff --git a/dmtree/tr181/managementserver.c b/dmtree/tr181/managementserver.c index 9d264892..cefb20f3 100644 --- a/dmtree/tr181/managementserver.c +++ b/dmtree/tr181/managementserver.c @@ -86,6 +86,50 @@ static int set_management_server_passwd(char *refparam, struct dmctx *ctx, void return 0; } +/*#Device.ManagementServer.ScheduleReboot!UCI:cwmp/cpe,cpe/schedule_reboot*/ +static int get_management_server_schedule_reboot(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + dmuci_get_option_value_string("cwmp", "cpe", "schedule_reboot", value); + return 0; +} + +static int set_management_server_schedule_reboot(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) +{ + switch (action) { + case VALUECHECK: + if (dm_validate_dateTime(value)) + return FAULT_9007; + break; + case VALUESET: + dmuci_set_value("cwmp", "cpe", "schedule_reboot", value); + bbf_set_end_session_flag(ctx, BBF_END_SESSION_RELOAD); + break; + } + return 0; +} + +/*#Device.ManagementServer.DelayReboot!UCI:cwmp/cpe,cpe/delay_reboot*/ +static int get_management_server_delay_reboot(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + *value = dmuci_get_option_value_fallback_def("cwmp", "cpe", "delay_reboot", "-1"); + return 0; +} + +static int set_management_server_delay_reboot(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) +{ + switch (action) { + case VALUECHECK: + if (dm_validate_int(value, RANGE_ARGS{{"-1",NULL}}, 1)) + return FAULT_9007; + break; + case VALUESET: + dmuci_set_value("cwmp", "cpe", "delay_reboot", value); + bbf_set_end_session_flag(ctx, BBF_END_SESSION_RELOAD); + break; + } + return 0; +} + /*#Device.ManagementServer.ParameterKey!UCI:cwmp/acs,acs/ParameterKey*/ static int get_management_server_key(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { @@ -542,6 +586,8 @@ DMLEAF tManagementServerParams[] = { {"URL", &DMWRITE, DMT_STRING, get_management_server_url, set_management_server_url, BBFDM_CWMP}, {"Username", &DMWRITE, DMT_STRING, get_management_server_username, set_management_server_username, BBFDM_CWMP}, {"Password", &DMWRITE, DMT_STRING, get_empty, set_management_server_passwd, BBFDM_CWMP}, +{"ScheduleReboot", &DMWRITE, DMT_TIME, get_management_server_schedule_reboot, set_management_server_schedule_reboot, BBFDM_CWMP}, +{"DelayReboot", &DMWRITE, DMT_INT, get_management_server_delay_reboot, set_management_server_delay_reboot, BBFDM_CWMP}, {"PeriodicInformEnable", &DMWRITE, DMT_BOOL, get_management_server_periodic_inform_enable, set_management_server_periodic_inform_enable, BBFDM_CWMP}, {"PeriodicInformInterval", &DMWRITE, DMT_UNINT, get_management_server_periodic_inform_interval, set_management_server_periodic_inform_interval, BBFDM_CWMP}, {"PeriodicInformTime", &DMWRITE, DMT_TIME, get_management_server_periodic_inform_time, set_management_server_periodic_inform_time, BBFDM_CWMP},