From 1a5ed79a014ff3e9633b70b310bf3f21dea6f036 Mon Sep 17 00:00:00 2001 From: Suvendhu Hansa Date: Wed, 20 Mar 2024 15:39:46 +0530 Subject: [PATCH] Improvement for diagnostics --- src/backupSession.c | 8 ++++---- src/diagnostic.c | 31 +++++++++++++++++++------------ src/reboot.c | 2 +- src/rpc.c | 24 ++++++++++++------------ src/session.c | 8 ++++++-- src/session.h | 2 +- src/ubus_utils.c | 2 +- 7 files changed, 44 insertions(+), 33 deletions(-) diff --git a/src/backupSession.c b/src/backupSession.c index 235d8eb..e55bd6d 100644 --- a/src/backupSession.c +++ b/src/backupSession.c @@ -491,7 +491,7 @@ static void load_download(mxml_node_t *tree) list_add(&(download_request->list), ilist->prev); if (download_request->scheduled_time != 0) count_download_queue++; - cwmp_set_end_session(END_SESSION_DOWNLOAD); + cwmp_set_end_session(END_SESSION_DOWNLOAD, true); } static void load_schedule_download(mxml_node_t *tree) @@ -540,7 +540,7 @@ static void load_schedule_download(mxml_node_t *tree) list_add(&(download_request->list), ilist->prev); if (download_request->timewindowstruct[0].windowstart != 0) count_download_queue++; - cwmp_set_end_session(END_SESSION_SCHEDULE_DOWNLOAD); + cwmp_set_end_session(END_SESSION_SCHEDULE_DOWNLOAD, true); } static void load_upload(mxml_node_t *tree) @@ -578,7 +578,7 @@ static void load_upload(mxml_node_t *tree) list_add(&(upload_request->list), ilist->prev); if (upload_request->scheduled_time != 0) count_upload_queue++; - cwmp_set_end_session(END_SESSION_UPLOAD); + cwmp_set_end_session(END_SESSION_UPLOAD, true); } static void load_change_du_state(mxml_node_t *tree) @@ -600,7 +600,7 @@ static void load_change_du_state(mxml_node_t *tree) load_xml_node_data(BKP_CDU, tree, &bkp_xml_cdu); list_add_tail(&(change_du_state_request->list_operation), &(list_change_du_state)); - cwmp_set_end_session(END_SESSION_CDU); + cwmp_set_end_session(END_SESSION_CDU, true); } void load_du_state_change_complete(mxml_node_t *tree) diff --git a/src/diagnostic.c b/src/diagnostic.c index 8c05034..3d827fb 100644 --- a/src/diagnostic.c +++ b/src/diagnostic.c @@ -154,64 +154,71 @@ struct diagnostic_input nslookup_diagnostics[] = { void set_diagnostic_state_end_session_flag(char *parameter_name, char *value) { + bool flag; + if (CWMP_STRLEN(parameter_name) == 0 || CWMP_STRLEN(value) == 0) return; - if (strcmp(value, "Requested") != 0) + if (strcmp(value, "Requested") == 0) { + flag = true; + } else if (strcmp(value, "Canceled") == 0) { + flag = false; + } else { return; + } if (strcmp(parameter_name, "Device.IP.Diagnostics.DownloadDiagnostics.DiagnosticsState") == 0) { - cwmp_set_end_session(END_SESSION_DOWNLOAD_DIAGNOSTIC); + cwmp_set_end_session(END_SESSION_DOWNLOAD_DIAGNOSTIC, flag); return; } if (strcmp(parameter_name, "Device.IP.Diagnostics.UploadDiagnostics.DiagnosticsState") == 0) { - cwmp_set_end_session(END_SESSION_UPLOAD_DIAGNOSTIC); + cwmp_set_end_session(END_SESSION_UPLOAD_DIAGNOSTIC, flag); return; } if (strcmp(parameter_name, "Device.IP.Diagnostics.IPPing.DiagnosticsState") == 0) { - cwmp_set_end_session(END_SESSION_IPPING_DIAGNOSTIC); + cwmp_set_end_session(END_SESSION_IPPING_DIAGNOSTIC, flag); return; } if (strcmp(parameter_name, "Device.IP.Diagnostics.ServerSelectionDiagnostics.DiagnosticsState") == 0) { - cwmp_set_end_session(END_SESSION_SERVERSELECTION_DIAGNOSTIC); + cwmp_set_end_session(END_SESSION_SERVERSELECTION_DIAGNOSTIC, flag); return; } if (strcmp(parameter_name, "Device.IP.Diagnostics.TraceRoute.DiagnosticsState") == 0) { - cwmp_set_end_session(END_SESSION_TRACEROUTE_DIAGNOSTIC); + cwmp_set_end_session(END_SESSION_TRACEROUTE_DIAGNOSTIC, flag); return; } if (strcmp(parameter_name, "Device.IP.Diagnostics.UDPEchoDiagnostics.DiagnosticsState") == 0) { - cwmp_set_end_session(END_SESSION_UDPECHO_DIAGNOSTIC); + cwmp_set_end_session(END_SESSION_UDPECHO_DIAGNOSTIC, flag); return; } if (strcmp(parameter_name, "Device.DNS.Diagnostics.NSLookupDiagnostics.DiagnosticsState") == 0) { - cwmp_set_end_session(END_SESSION_NSLOOKUP_DIAGNOSTIC); + cwmp_set_end_session(END_SESSION_NSLOOKUP_DIAGNOSTIC, flag); return; } if (strcmp(parameter_name, "Device.IP.Diagnostics.IPLayerCapacityMetrics.DiagnosticsState") == 0) { - cwmp_set_end_session(END_SESSION_IPLAYERCAPACITY_DIAGNOSTIC); + cwmp_set_end_session(END_SESSION_IPLAYERCAPACITY_DIAGNOSTIC, flag); return; } if (strcmp(parameter_name, "Device.WiFi.NeighboringWiFiDiagnostic.DiagnosticsState") == 0) { - cwmp_set_end_session(END_SESSION_NEIGBORING_WIFI_DIAGNOSTIC); + cwmp_set_end_session(END_SESSION_NEIGBORING_WIFI_DIAGNOSTIC, flag); return; } if (strcmp(parameter_name, "Device.PacketCaptureDiagnostics.DiagnosticsState") == 0) { - cwmp_set_end_session(END_SESSION_PACKETCAPTURE_DIAGNOSTIC); + cwmp_set_end_session(END_SESSION_PACKETCAPTURE_DIAGNOSTIC, flag); return; } if (strcmp(parameter_name, "Device.SelfTestDiagnostics.DiagnosticsState") == 0) { - cwmp_set_end_session(END_SESSION_SELFTEST_DIAGNOSTIC); + cwmp_set_end_session(END_SESSION_SELFTEST_DIAGNOSTIC, flag); return; } } diff --git a/src/reboot.c b/src/reboot.c index 2216f81..7f1cbf9 100644 --- a/src/reboot.c +++ b/src/reboot.c @@ -33,7 +33,7 @@ void cwmp_delay_reboot(struct uloop_timeout *timeout __attribute__((unused))) { set_uci_path_value(NULL, "cwmp.cpe.delay_reboot", "-1"); if (cwmp_main->session->session_status.last_status == SESSION_RUNNING) { - cwmp_set_end_session(END_SESSION_REBOOT); + cwmp_set_end_session(END_SESSION_REBOOT, true); } else { cwmp_reboot("delay_reboot"); exit(EXIT_SUCCESS); diff --git a/src/rpc.c b/src/rpc.c index 0356fd9..db8d1e2 100755 --- a/src/rpc.c +++ b/src/rpc.c @@ -1090,7 +1090,7 @@ int cwmp_handle_rpc_cpe_set_parameter_values(struct rpc *rpc) goto fault; } - cwmp_set_end_session(END_SESSION_RESTART_SERVICES | END_SESSION_SET_NOTIFICATION_UPDATE | END_SESSION_RELOAD); + cwmp_set_end_session(END_SESSION_RESTART_SERVICES | END_SESSION_SET_NOTIFICATION_UPDATE | END_SESSION_RELOAD, true); return 0; fault: @@ -1160,7 +1160,7 @@ int cwmp_handle_rpc_cpe_set_parameter_attributes(struct rpc *rpc) goto fault; } - cwmp_set_end_session(END_SESSION_SET_NOTIFICATION_UPDATE | END_SESSION_RESTART_SERVICES | END_SESSION_INIT_NOTIFY); + cwmp_set_end_session(END_SESSION_SET_NOTIFICATION_UPDATE | END_SESSION_RESTART_SERVICES | END_SESSION_INIT_NOTIFY, true); return 0; fault: @@ -1252,7 +1252,7 @@ int cwmp_handle_rpc_cpe_add_object(struct rpc *rpc) FREE(object_name); FREE(parameter_key); FREE(res.instance); - cwmp_set_end_session(END_SESSION_RESTART_SERVICES); + cwmp_set_end_session(END_SESSION_RESTART_SERVICES, true); return 0; fault: @@ -1336,7 +1336,7 @@ int cwmp_handle_rpc_cpe_delete_object(struct rpc *rpc) FREE(object_name); FREE(parameter_key); FREE(res.instance); - cwmp_set_end_session(END_SESSION_RESTART_SERVICES); + cwmp_set_end_session(END_SESSION_RESTART_SERVICES, true); return 0; fault: @@ -1421,7 +1421,7 @@ int cwmp_handle_rpc_cpe_factory_reset(struct rpc *rpc) goto fault; } - cwmp_set_end_session(END_SESSION_FACTORY_RESET); + cwmp_set_end_session(END_SESSION_FACTORY_RESET, true); return 0; @@ -1446,7 +1446,7 @@ int cwmp_handle_rpc_cpe_x_factory_reset_soft(struct rpc *rpc) if (!b) goto fault; - cwmp_set_end_session(END_SESSION_X_FACTORY_RESET_SOFT); + cwmp_set_end_session(END_SESSION_X_FACTORY_RESET_SOFT, true); return 0; @@ -1583,7 +1583,7 @@ int cwmp_handle_rpc_cpe_reboot(struct rpc *rpc) goto fault; } - cwmp_set_end_session(END_SESSION_REBOOT); + cwmp_set_end_session(END_SESSION_REBOOT, true); FREE(command_key); return 0; @@ -1669,7 +1669,7 @@ int cwmp_handle_rpc_cpe_schedule_inform(struct rpc *rpc) bkp_session_save(); FREE(command_key); - cwmp_set_end_session(END_SESSION_SCHEDULE_INFORM); + cwmp_set_end_session(END_SESSION_SCHEDULE_INFORM, true); return 0; fault: @@ -1749,7 +1749,7 @@ int cwmp_handle_rpc_cpe_change_du_state(struct rpc *rpc) change_du_state->id = cwmp_main->cdu_id; bkp_session_insert_change_du_state(change_du_state); bkp_session_save(); - cwmp_set_end_session(END_SESSION_CDU); + cwmp_set_end_session(END_SESSION_CDU, true); return 0; fault: @@ -1885,7 +1885,7 @@ int cwmp_handle_rpc_cpe_download(struct rpc *rpc) } else { CWMP_LOG(INFO, "Download will start at the end of session"); } - cwmp_set_end_session(END_SESSION_DOWNLOAD); + cwmp_set_end_session(END_SESSION_DOWNLOAD, true); } return 0; @@ -2044,7 +2044,7 @@ int cwmp_handle_rpc_cpe_schedule_download(struct rpc *rpc) error = FAULT_CPE_INTERNAL_ERROR; goto fault; } - cwmp_set_end_session(END_SESSION_SCHEDULE_DOWNLOAD); + cwmp_set_end_session(END_SESSION_SCHEDULE_DOWNLOAD, true); return 0; fault: @@ -2180,7 +2180,7 @@ int cwmp_handle_rpc_cpe_upload(struct rpc *rpc) } else { CWMP_LOG(INFO, "Upload will start at the end of session"); } - cwmp_set_end_session(END_SESSION_UPLOAD); + cwmp_set_end_session(END_SESSION_UPLOAD, true); } return 0; diff --git a/src/session.c b/src/session.c index a5d6dc8..8530d7e 100644 --- a/src/session.c +++ b/src/session.c @@ -634,9 +634,13 @@ struct rpc *cwmp_add_session_rpc_acs_head(int type) return rpc_acs; } -void cwmp_set_end_session(unsigned int flag) +void cwmp_set_end_session(unsigned int flag, bool set) { - end_session_flag |= flag; + if (set) { + end_session_flag |= flag; + } else { + end_session_flag &= ~(flag); + } } int run_session_end_func(void) diff --git a/src/session.h b/src/session.h index a9bcd62..074f7a9 100644 --- a/src/session.h +++ b/src/session.h @@ -90,7 +90,7 @@ enum enum_session_status extern unsigned int end_session_flag; -void cwmp_set_end_session(unsigned int flag); +void cwmp_set_end_session(unsigned int flag, bool set); struct rpc *build_sessin_rcp_cpe(int type); struct rpc *cwmp_add_session_rpc_acs(int type); struct rpc *cwmp_add_session_rpc_acs_head(int type); diff --git a/src/ubus_utils.c b/src/ubus_utils.c index 18f518e..d12b0c0 100644 --- a/src/ubus_utils.c +++ b/src/ubus_utils.c @@ -71,7 +71,7 @@ static int reload_cmd(struct blob_buf *b) { CWMP_LOG(INFO, "triggered ubus reload"); if (cwmp_main->session->session_status.last_status == SESSION_RUNNING) { - cwmp_set_end_session(END_SESSION_RELOAD); + cwmp_set_end_session(END_SESSION_RELOAD, true); blobmsg_add_u32(b, "status", 0); blobmsg_add_string(b, "info", "Session running, reload at the end of the session"); } else {