Ticket #10128: icwmp: Diagnostics handling improvements

This commit is contained in:
Omar Kallel 2023-03-09 18:16:46 +01:00
parent 08604a791d
commit 9a72ca34c3
4 changed files with 54 additions and 13 deletions

View file

@ -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;

View file

@ -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();

View file

@ -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);

View file

@ -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