From 9a72ca34c3e66949718e35e7082731ac17802fa7 Mon Sep 17 00:00:00 2001 From: Omar Kallel Date: Thu, 9 Mar 2023 18:16:46 +0100 Subject: [PATCH] Ticket #10128: icwmp: Diagnostics handling improvements --- src/diagnostic.c | 36 ++++++++++++++++++++++++++++++++++++ src/diagnostic.h | 1 + src/rpc.c | 2 ++ src/session.h | 28 +++++++++++++++------------- 4 files changed, 54 insertions(+), 13 deletions(-) diff --git a/src/diagnostic.c b/src/diagnostic.c index 30687c4..a708d25 100644 --- a/src/diagnostic.c +++ b/src/diagnostic.c @@ -18,6 +18,7 @@ #include "ubus_utils.h" #include "log.h" #include "event.h" +#include "session.h" struct diagnostic_input { char *input_name; @@ -152,6 +153,41 @@ struct diagnostic_input nslookup_diagnostics_array[NSLKUP_NUMBER_INPUTS] = { // { "Timeout", "Device.DNS.Diagnostics.NSLookupDiagnostics.Timeout", NULL } }; +int get_diagnostic_state_flag(char *parameter_name, char *value) +{ + if (strcmp(value, "Requested") != 0) + return 0; + + if (strcmp(parameter_name, "Device.IP.Diagnostics.DownloadDiagnostics.DiagnosticsState") == 0) + return END_SESSION_DOWNLOAD_DIAGNOSTIC; + + if (strcmp(parameter_name, "Device.IP.Diagnostics.UploadDiagnostics.DiagnosticsState") == 0) + return END_SESSION_UPLOAD_DIAGNOSTIC; + + if (strcmp(parameter_name, "Device.IP.Diagnostics.IPPing.DiagnosticsState") == 0) + return END_SESSION_IPPING_DIAGNOSTIC; + + if (strcmp(parameter_name, "Device.IP.Diagnostics.ServerSelectionDiagnostics.DiagnosticsState") == 0) + return END_SESSION_SERVERSELECTION_DIAGNOSTIC; + + if (strcmp(parameter_name, "Device.IP.Diagnostics.TraceRoute.DiagnosticsState") == 0) + return END_SESSION_TRACEROUTE_DIAGNOSTIC; + + if (strcmp(parameter_name, "Device.IP.Diagnostics.UDPEchoDiagnostics.DiagnosticsState") == 0) + return END_SESSION_UDPECHO_DIAGNOSTIC; + + if (strcmp(parameter_name, "Device.DNS.Diagnostics.NSLookupDiagnostics.DiagnosticsState") == 0) + return END_SESSION_NSLOOKUP_DIAGNOSTIC; + + if (strcmp(parameter_name, "Device.IP.Diagnostics.IPLayerCapacityMetrics.DiagnosticsState") == 0) + return END_SESSION_IPLAYERCAPACITY_DIAGNOSTIC; + + if (strcmp(parameter_name, "Device.​WiFi.​NeighboringWiFiDiagnostic.DiagnosticsState") == 0) + return END_SESSION_NEIGBORING_WIFI_DIAGNOSTIC; + + return 0; +} + static bool set_specific_diagnostic_object_parameter_structure_value(struct diagnostic_input (*diagnostics_array)[], int number_inputs, char *parameter, char *value) { int i; diff --git a/src/diagnostic.h b/src/diagnostic.h index 5789d1d..e7b8bd4 100644 --- a/src/diagnostic.h +++ b/src/diagnostic.h @@ -15,6 +15,7 @@ #define __DIAGNOSTIC__H bool set_diagnostic_parameter_structure_value(char *parameter_name, char *value); +int get_diagnostic_state_flag(char *parameter_name, char *value); int cwmp_wifi_neighboring__diagnostics(); int cwmp_download_diagnostics(); diff --git a/src/rpc.c b/src/rpc.c index 4afab39..be9ef58 100755 --- a/src/rpc.c +++ b/src/rpc.c @@ -1024,6 +1024,8 @@ int cwmp_handle_rpc_cpe_set_parameter_values(struct rpc *rpc) list_for_each_entry (param_value, &list_set_param_value, list) { set_interface_reset_request(param_value->name, param_value->value); set_diagnostic_parameter_structure_value(param_value->name, param_value->value); + int diag_flag = get_diagnostic_state_flag(param_value->name, param_value->value); + cwmp_set_end_session(diag_flag); } cwmp_free_all_xml_data_list(&xml_list_set_param_value); diff --git a/src/session.h b/src/session.h index 414a34f..9184726 100644 --- a/src/session.h +++ b/src/session.h @@ -58,24 +58,26 @@ enum end_session_enum END_SESSION_EXTERNAL_ACTION = 1 << 1, END_SESSION_RELOAD = 1 << 2, END_SESSION_FACTORY_RESET = 1 << 3, - END_SESSION_IPPING_DIAGNOSTIC = 1 << 4, - END_SESSION_DOWNLOAD_DIAGNOSTIC = 1 << 5, - END_SESSION_UPLOAD_DIAGNOSTIC = 1 << 6, - END_SESSION_X_FACTORY_RESET_SOFT = 1 << 7, + END_SESSION_X_FACTORY_RESET_SOFT = 1 << 4, + + END_SESSION_IPPING_DIAGNOSTIC = 1 << 5, + END_SESSION_DOWNLOAD_DIAGNOSTIC = 1 << 6, + END_SESSION_UPLOAD_DIAGNOSTIC = 1 << 7, END_SESSION_NSLOOKUP_DIAGNOSTIC = 1 << 8, END_SESSION_TRACEROUTE_DIAGNOSTIC = 1 << 9, END_SESSION_UDPECHO_DIAGNOSTIC = 1 << 10, END_SESSION_SERVERSELECTION_DIAGNOSTIC = 1 << 11, END_SESSION_NEIGBORING_WIFI_DIAGNOSTIC = 1<<12, - END_SESSION_SET_NOTIFICATION_UPDATE = 1 << 13, - END_SESSION_RESTART_SERVICES = 1 << 14, - END_SESSION_INIT_NOTIFY = 1 << 15, - END_SESSION_DOWNLOAD = 1 << 16, - END_SESSION_SCHEDULE_DOWNLOAD = 1 << 17, - END_SESSION_UPLOAD = 1 << 18, - END_SESSION_SCHEDULE_INFORM = 1 << 19, - END_SESSION_CDU = 1 << 20, - END_SESSION_IPLAYERCAPACITY_DIAGNOSTIC = 1 << 21 + END_SESSION_IPLAYERCAPACITY_DIAGNOSTIC = 1 << 13, + + END_SESSION_SET_NOTIFICATION_UPDATE = 1 << 14, + END_SESSION_RESTART_SERVICES = 1 << 15, + END_SESSION_INIT_NOTIFY = 1 << 16, + END_SESSION_DOWNLOAD = 1 << 17, + END_SESSION_SCHEDULE_DOWNLOAD = 1 << 18, + END_SESSION_UPLOAD = 1 << 19, + END_SESSION_SCHEDULE_INFORM = 1 << 20, + END_SESSION_CDU = 1 << 21 }; enum enum_session_status