Align code to cancel diagnostics

This commit is contained in:
Suvendhu Hansa 2024-03-27 16:58:59 +05:30
parent 1a5ed79a01
commit e63d09f97d
8 changed files with 97 additions and 91 deletions

View file

@ -491,7 +491,7 @@ static void load_download(mxml_node_t *tree)
list_add(&(download_request->list), ilist->prev); list_add(&(download_request->list), ilist->prev);
if (download_request->scheduled_time != 0) if (download_request->scheduled_time != 0)
count_download_queue++; count_download_queue++;
cwmp_set_end_session(END_SESSION_DOWNLOAD, true); cwmp_set_end_session(END_SESSION_DOWNLOAD);
} }
static void load_schedule_download(mxml_node_t *tree) 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); list_add(&(download_request->list), ilist->prev);
if (download_request->timewindowstruct[0].windowstart != 0) if (download_request->timewindowstruct[0].windowstart != 0)
count_download_queue++; count_download_queue++;
cwmp_set_end_session(END_SESSION_SCHEDULE_DOWNLOAD, true); cwmp_set_end_session(END_SESSION_SCHEDULE_DOWNLOAD);
} }
static void load_upload(mxml_node_t *tree) 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); list_add(&(upload_request->list), ilist->prev);
if (upload_request->scheduled_time != 0) if (upload_request->scheduled_time != 0)
count_upload_queue++; count_upload_queue++;
cwmp_set_end_session(END_SESSION_UPLOAD, true); cwmp_set_end_session(END_SESSION_UPLOAD);
} }
static void load_change_du_state(mxml_node_t *tree) 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); load_xml_node_data(BKP_CDU, tree, &bkp_xml_cdu);
list_add_tail(&(change_du_state_request->list_operation), &(list_change_du_state)); list_add_tail(&(change_du_state_request->list_operation), &(list_change_du_state));
cwmp_set_end_session(END_SESSION_CDU, true); cwmp_set_end_session(END_SESSION_CDU);
} }
void load_du_state_change_complete(mxml_node_t *tree) void load_du_state_change_complete(mxml_node_t *tree)

View file

@ -152,75 +152,77 @@ struct diagnostic_input nslookup_diagnostics[] = {
{ "Timeout", "Device.DNS.Diagnostics.NSLookupDiagnostics.Timeout", NULL } { "Timeout", "Device.DNS.Diagnostics.NSLookupDiagnostics.Timeout", NULL }
}; };
static unsigned int get_diagnostic_flag(const char *parameter_name)
{
if (CWMP_STRLEN(parameter_name) == 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;
}
if (strcmp(parameter_name, "Device.PacketCaptureDiagnostics.DiagnosticsState") == 0) {
return END_SESSION_PACKETCAPTURE_DIAGNOSTIC;
}
if (strcmp(parameter_name, "Device.SelfTestDiagnostics.DiagnosticsState") == 0) {
return END_SESSION_SELFTEST_DIAGNOSTIC;
}
return 0;
}
void set_diagnostic_state_end_session_flag(char *parameter_name, char *value) void set_diagnostic_state_end_session_flag(char *parameter_name, char *value)
{ {
bool flag; unsigned int flag = 0;
if (CWMP_STRLEN(parameter_name) == 0 || CWMP_STRLEN(value) == 0) if (CWMP_STRLEN(parameter_name) == 0 || CWMP_STRLEN(value) == 0)
return; return;
flag = get_diagnostic_flag(parameter_name);
if (flag == 0)
return;
if (strcmp(value, "Requested") == 0) { if (strcmp(value, "Requested") == 0) {
flag = true; cwmp_set_end_session(flag);
} else if (strcmp(value, "Canceled") == 0) { } else if (strcmp(value, "Canceled") == 0) {
flag = false; cwmp_clear_end_session(flag);
} else {
return;
} }
if (strcmp(parameter_name, "Device.IP.Diagnostics.DownloadDiagnostics.DiagnosticsState") == 0) { return;
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, flag);
return;
}
if (strcmp(parameter_name, "Device.IP.Diagnostics.IPPing.DiagnosticsState") == 0) {
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, flag);
return;
}
if (strcmp(parameter_name, "Device.IP.Diagnostics.TraceRoute.DiagnosticsState") == 0) {
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, flag);
return;
}
if (strcmp(parameter_name, "Device.DNS.Diagnostics.NSLookupDiagnostics.DiagnosticsState") == 0) {
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, flag);
return;
}
if (strcmp(parameter_name, "Device.WiFi.NeighboringWiFiDiagnostic.DiagnosticsState") == 0) {
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, flag);
return;
}
if (strcmp(parameter_name, "Device.SelfTestDiagnostics.DiagnosticsState") == 0) {
cwmp_set_end_session(END_SESSION_SELFTEST_DIAGNOSTIC, flag);
return;
}
} }
static bool set_specific_diagnostic_object_parameter_structure_value(struct diagnostic_input (*diagnostics_array)[], int number_inputs, char *parameter, char *value) static bool set_specific_diagnostic_object_parameter_structure_value(struct diagnostic_input (*diagnostics_array)[], int number_inputs, char *parameter, char *value)

View file

@ -33,7 +33,7 @@ void cwmp_delay_reboot(struct uloop_timeout *timeout __attribute__((unused)))
{ {
set_uci_path_value(NULL, "cwmp.cpe.delay_reboot", "-1"); set_uci_path_value(NULL, "cwmp.cpe.delay_reboot", "-1");
if (cwmp_main->session->session_status.last_status == SESSION_RUNNING) { if (cwmp_main->session->session_status.last_status == SESSION_RUNNING) {
cwmp_set_end_session(END_SESSION_REBOOT, true); cwmp_set_end_session(END_SESSION_REBOOT);
} else { } else {
cwmp_reboot("delay_reboot"); cwmp_reboot("delay_reboot");
exit(EXIT_SUCCESS); exit(EXIT_SUCCESS);

View file

@ -1090,7 +1090,7 @@ int cwmp_handle_rpc_cpe_set_parameter_values(struct rpc *rpc)
goto fault; goto fault;
} }
cwmp_set_end_session(END_SESSION_RESTART_SERVICES | END_SESSION_SET_NOTIFICATION_UPDATE | END_SESSION_RELOAD, true); cwmp_set_end_session(END_SESSION_RESTART_SERVICES | END_SESSION_SET_NOTIFICATION_UPDATE | END_SESSION_RELOAD);
return 0; return 0;
fault: fault:
@ -1160,7 +1160,7 @@ int cwmp_handle_rpc_cpe_set_parameter_attributes(struct rpc *rpc)
goto fault; goto fault;
} }
cwmp_set_end_session(END_SESSION_SET_NOTIFICATION_UPDATE | END_SESSION_RESTART_SERVICES | END_SESSION_INIT_NOTIFY, true); cwmp_set_end_session(END_SESSION_SET_NOTIFICATION_UPDATE | END_SESSION_RESTART_SERVICES | END_SESSION_INIT_NOTIFY);
return 0; return 0;
fault: fault:
@ -1252,7 +1252,7 @@ int cwmp_handle_rpc_cpe_add_object(struct rpc *rpc)
FREE(object_name); FREE(object_name);
FREE(parameter_key); FREE(parameter_key);
FREE(res.instance); FREE(res.instance);
cwmp_set_end_session(END_SESSION_RESTART_SERVICES, true); cwmp_set_end_session(END_SESSION_RESTART_SERVICES);
return 0; return 0;
fault: fault:
@ -1336,7 +1336,7 @@ int cwmp_handle_rpc_cpe_delete_object(struct rpc *rpc)
FREE(object_name); FREE(object_name);
FREE(parameter_key); FREE(parameter_key);
FREE(res.instance); FREE(res.instance);
cwmp_set_end_session(END_SESSION_RESTART_SERVICES, true); cwmp_set_end_session(END_SESSION_RESTART_SERVICES);
return 0; return 0;
fault: fault:
@ -1421,7 +1421,7 @@ int cwmp_handle_rpc_cpe_factory_reset(struct rpc *rpc)
goto fault; goto fault;
} }
cwmp_set_end_session(END_SESSION_FACTORY_RESET, true); cwmp_set_end_session(END_SESSION_FACTORY_RESET);
return 0; return 0;
@ -1446,7 +1446,7 @@ int cwmp_handle_rpc_cpe_x_factory_reset_soft(struct rpc *rpc)
if (!b) if (!b)
goto fault; goto fault;
cwmp_set_end_session(END_SESSION_X_FACTORY_RESET_SOFT, true); cwmp_set_end_session(END_SESSION_X_FACTORY_RESET_SOFT);
return 0; return 0;
@ -1583,7 +1583,7 @@ int cwmp_handle_rpc_cpe_reboot(struct rpc *rpc)
goto fault; goto fault;
} }
cwmp_set_end_session(END_SESSION_REBOOT, true); cwmp_set_end_session(END_SESSION_REBOOT);
FREE(command_key); FREE(command_key);
return 0; return 0;
@ -1669,7 +1669,7 @@ int cwmp_handle_rpc_cpe_schedule_inform(struct rpc *rpc)
bkp_session_save(); bkp_session_save();
FREE(command_key); FREE(command_key);
cwmp_set_end_session(END_SESSION_SCHEDULE_INFORM, true); cwmp_set_end_session(END_SESSION_SCHEDULE_INFORM);
return 0; return 0;
fault: fault:
@ -1749,7 +1749,7 @@ int cwmp_handle_rpc_cpe_change_du_state(struct rpc *rpc)
change_du_state->id = cwmp_main->cdu_id; change_du_state->id = cwmp_main->cdu_id;
bkp_session_insert_change_du_state(change_du_state); bkp_session_insert_change_du_state(change_du_state);
bkp_session_save(); bkp_session_save();
cwmp_set_end_session(END_SESSION_CDU, true); cwmp_set_end_session(END_SESSION_CDU);
return 0; return 0;
fault: fault:
@ -1885,7 +1885,7 @@ int cwmp_handle_rpc_cpe_download(struct rpc *rpc)
} else { } else {
CWMP_LOG(INFO, "Download will start at the end of session"); CWMP_LOG(INFO, "Download will start at the end of session");
} }
cwmp_set_end_session(END_SESSION_DOWNLOAD, true); cwmp_set_end_session(END_SESSION_DOWNLOAD);
} }
return 0; return 0;
@ -2044,7 +2044,7 @@ int cwmp_handle_rpc_cpe_schedule_download(struct rpc *rpc)
error = FAULT_CPE_INTERNAL_ERROR; error = FAULT_CPE_INTERNAL_ERROR;
goto fault; goto fault;
} }
cwmp_set_end_session(END_SESSION_SCHEDULE_DOWNLOAD, true); cwmp_set_end_session(END_SESSION_SCHEDULE_DOWNLOAD);
return 0; return 0;
fault: fault:
@ -2180,7 +2180,7 @@ int cwmp_handle_rpc_cpe_upload(struct rpc *rpc)
} else { } else {
CWMP_LOG(INFO, "Upload will start at the end of session"); CWMP_LOG(INFO, "Upload will start at the end of session");
} }
cwmp_set_end_session(END_SESSION_UPLOAD, true); cwmp_set_end_session(END_SESSION_UPLOAD);
} }
return 0; return 0;

View file

@ -634,13 +634,14 @@ struct rpc *cwmp_add_session_rpc_acs_head(int type)
return rpc_acs; return rpc_acs;
} }
void cwmp_set_end_session(unsigned int flag, bool set) void cwmp_set_end_session(unsigned int flag)
{ {
if (set) { end_session_flag |= flag;
end_session_flag |= flag; }
} else {
end_session_flag &= ~(flag); void cwmp_clear_end_session(unsigned int flag)
} {
end_session_flag &= ~(flag);
} }
int run_session_end_func(void) int run_session_end_func(void)

View file

@ -90,7 +90,8 @@ enum enum_session_status
extern unsigned int end_session_flag; extern unsigned int end_session_flag;
void cwmp_set_end_session(unsigned int flag, bool set); void cwmp_set_end_session(unsigned int flag);
void cwmp_clear_end_session(unsigned int flag);
struct rpc *build_sessin_rcp_cpe(int type); struct rpc *build_sessin_rcp_cpe(int type);
struct rpc *cwmp_add_session_rpc_acs(int type); struct rpc *cwmp_add_session_rpc_acs(int type);
struct rpc *cwmp_add_session_rpc_acs_head(int type); struct rpc *cwmp_add_session_rpc_acs_head(int type);

View file

@ -71,7 +71,7 @@ static int reload_cmd(struct blob_buf *b)
{ {
CWMP_LOG(INFO, "triggered ubus reload"); CWMP_LOG(INFO, "triggered ubus reload");
if (cwmp_main->session->session_status.last_status == SESSION_RUNNING) { if (cwmp_main->session->session_status.last_status == SESSION_RUNNING) {
cwmp_set_end_session(END_SESSION_RELOAD, true); cwmp_set_end_session(END_SESSION_RELOAD);
blobmsg_add_u32(b, "status", 0); blobmsg_add_u32(b, "status", 0);
blobmsg_add_string(b, "info", "Session running, reload at the end of the session"); blobmsg_add_string(b, "info", "Session running, reload at the end of the session");
} else { } else {

View file

@ -99,12 +99,14 @@ if [[ $res != *"9009"* ]]; then
fi fi
log "ADD METHOD: Correct Path" log "ADD METHOD: Correct Path"
res=$(./icwmpd -c add Device.IP.Interface. 2>&1) res=$(./icwmpd -c add Device.DHCPv4.Relay.Forwarding. 2>&1)
if [[ $res != *"Device.IP.Interface."* ]]; then if [[ $res != *"Device.DHCPv4.Relay.Forwarding."* ]]; then
log "Error: Add Method with correct path doesn't work correctly" log "Error: Add Method with correct path doesn't work correctly"
exit 1 exit 1
fi fi
del_path=$(echo "${res}" | cut -d' ' -f 2)
log "ADD METHOD: Wrong Path" log "ADD METHOD: Wrong Path"
res=$(./icwmpd -c add Device.DeviceInfo.VendorLogFil 2>&1) res=$(./icwmpd -c add Device.DeviceInfo.VendorLogFil 2>&1)
if [[ $res != *"9005"* ]]; then if [[ $res != *"9005"* ]]; then
@ -119,16 +121,16 @@ if [[ $res != *"9005"* ]]; then
exit 1 exit 1
fi fi
log "DELETE METHOD: Correct Path && one instance" log "DELETE METHOD: Correct Path ${del_path} && one instance"
res=$(./icwmpd -c del Device.IP.Interface.2. 2>&1) res=$(./icwmpd -c del "${del_path}" 2>&1)
if [[ $res != *"Deleted Device.IP.Interface.2."* ]]; then if [[ $res != *"Deleted ${del_path}"* ]]; then
log "Error: Delete Method with correct path && one instance doesn't work correctly" log "Error: Delete Method with correct path && one instance doesn't work correctly"
exit 1 exit 1
fi fi
log "DELETE METHOD: Correct Path && all instance" log "DELETE METHOD: Correct Path && all instance"
res=$(./icwmpd -c del Device.IP.Interface. 2>&1) res=$(./icwmpd -c del Device.DHCPv4.Relay.Forwarding. 2>&1)
if [[ $res != *"Deleted Device.IP.Interface."* ]]; then if [[ $res != *"Deleted Device.DHCPv4.Relay.Forwarding."* ]]; then
log "Error: Delete Method with correct path && all instances doesn't work correctly" log "Error: Delete Method with correct path && all instances doesn't work correctly"
exit 1 exit 1
fi fi