From 95a9418e04950946ecc611aec2a17c3879795bca Mon Sep 17 00:00:00 2001 From: Amin Ben Ramdhane Date: Tue, 23 Aug 2022 11:42:57 +0000 Subject: [PATCH] T#8530: Diagnostics: Add supports for missing parameters --- dmtree/tr143/diagnostics.c | 139 ++++++++++++++++++++++++----- dmtree/tr181/dns.c | 15 ++-- scripts/{bbf_uci_api => bbf_api} | 21 +++++ scripts/download_launch | 5 +- scripts/ipping_launch | 4 +- scripts/nslookup_launch | 13 +-- scripts/serverselection_launch | 4 +- scripts/traceroute_launch | 15 +--- scripts/udpecho_launch | 4 +- scripts/upload_launch | 5 +- test/cmocka/functional_test_bbfd.c | 12 ++- 11 files changed, 182 insertions(+), 55 deletions(-) rename scripts/{bbf_uci_api => bbf_api} (53%) diff --git a/dmtree/tr143/diagnostics.c b/dmtree/tr143/diagnostics.c index ffe91786..b588fd06 100644 --- a/dmtree/tr143/diagnostics.c +++ b/dmtree/tr143/diagnostics.c @@ -214,6 +214,12 @@ static int set_ip_ping_DSCP(char *refparam, struct dmctx *ctx, void *data, char return 0; } +static int get_IPDiagnosticsIPPing_IPAddressUsed(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + *value = get_diagnostics_option("ipping", "IPAddressUsed"); + return 0; +} + static int get_ip_ping_success_count(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { *value = get_diagnostics_option_fallback_def("ipping", "SuccessCount", "0"); @@ -479,6 +485,12 @@ static int get_IPDiagnosticsTraceRoute_ResponseTime(char *refparam, struct dmctx return 0; } +static int get_IPDiagnosticsTraceRoute_IPAddressUsed(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + *value = get_diagnostics_option("traceroute", "IPAddressUsed"); + return 0; +} + static int get_IPDiagnosticsTraceRoute_RouteHopsNumberOfEntries(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { *value = get_diagnostics_option_fallback_def("traceroute", "NumberOfHops", "0"); @@ -688,6 +700,12 @@ static int set_IPDiagnosticsDownloadDiagnostics_NumberOfConnections(char *refpar return 0; } +static int get_IPDiagnosticsDownloadDiagnostics_IPAddressUsed(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + *value = get_diagnostics_option("download", "IPAddressUsed"); + return 0; +} + static int get_IPDiagnosticsDownloadDiagnostics_ROMTime(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { *value = get_diagnostics_option_fallback_def("download", "ROMtime", "0001-01-01T00:00:00.000000Z"); @@ -1034,6 +1052,12 @@ static int set_IPDiagnosticsUploadDiagnostics_NumberOfConnections(char *refparam return 0; } +static int get_IPDiagnosticsUploadDiagnostics_IPAddressUsed(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + *value = get_diagnostics_option("upload", "IPAddressUsed"); + return 0; +} + static int get_IPDiagnosticsUploadDiagnostics_ROMTime(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { *value = get_diagnostics_option_fallback_def("upload", "ROMtime", "0001-01-01T00:00:00.000000Z"); @@ -1419,6 +1443,12 @@ static int set_IPDiagnosticsUDPEchoDiagnostics_ProtocolVersion(char *refparam, s return 0; } +static int get_IPDiagnosticsUDPEchoDiagnostics_IPAddressUsed(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + *value = get_diagnostics_option("udpechodiag", "IPAddressUsed"); + return 0; +} + static int get_IPDiagnosticsUDPEchoDiagnostics_SuccessCount(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { *value = get_diagnostics_option_fallback_def("udpechodiag", "SuccessCount", "0"); @@ -1640,6 +1670,12 @@ static int get_IPDiagnosticsServerSelectionDiagnostics_MaximumResponseTime(char return 0; } +static int get_IPDiagnosticsServerSelectionDiagnostics_IPAddressUsed(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) +{ + *value = get_diagnostics_option("serverselection", "IPAddressUsed"); + return 0; +} + /************************************************************* * ENTRY METHOD **************************************************************/ @@ -1747,6 +1783,8 @@ static int operate_IPDiagnostics_IPPing(char *refparam, struct dmctx *ctx, void // Allocate uci_ctx_bbfdm dmuci_init_bbfdm(); + char *ipping_status = get_diagnostics_option("ipping", "DiagnosticState"); + char *ipping_ip_address_used = get_diagnostics_option("ipping", "IPAddressUsed"); char *ipping_success_count = get_diagnostics_option("ipping", "SuccessCount"); char *ipping_failure_count = get_diagnostics_option("ipping", "FailureCount"); char *ipping_average_response_time = get_diagnostics_option("ipping", "AverageResponseTime"); @@ -1756,6 +1794,8 @@ static int operate_IPDiagnostics_IPPing(char *refparam, struct dmctx *ctx, void char *ipping_minimum_response_time_detailed = get_diagnostics_option("ipping", "MinimumResponseTimeDetailed"); char *ipping_maximum_response_time_detailed = get_diagnostics_option("ipping", "MaximumResponseTimeDetailed"); + add_list_parameter(ctx, dmstrdup("Status"), ipping_status, DMT_TYPE[DMT_STRING], NULL); + add_list_parameter(ctx, dmstrdup("IPAddressUsed"), ipping_ip_address_used, DMT_TYPE[DMT_STRING], NULL); add_list_parameter(ctx, dmstrdup("SuccessCount"), ipping_success_count, DMT_TYPE[DMT_UNINT], NULL); add_list_parameter(ctx, dmstrdup("FailureCount"), ipping_failure_count, DMT_TYPE[DMT_UNINT], NULL); add_list_parameter(ctx, dmstrdup("AverageResponseTime"), ipping_average_response_time, DMT_TYPE[DMT_UNINT], NULL); @@ -1784,6 +1824,10 @@ static operation_args ip_diagnostics_trace_route_args = { "Status", "IPAddressUsed", "ResponseTime", + "RouteHops.{i}.Host", + "RouteHops.{i}.HostAddress", + "RouteHops.{i}.ErrorCode", + "RouteHops.{i}.RTTimes", NULL } }; @@ -1803,6 +1847,7 @@ static int operate_IPDiagnostics_TraceRoute(char *refparam, struct dmctx *ctx, v char *route_hops_errorcode = NULL; int i = 1; + init_diagnostics_operation("RouteHops", TRACEROUTE_PATH); init_diagnostics_operation("traceroute", TRACEROUTE_PATH); char *host = dmjson_get_value((json_object *)value, 1, "Host"); @@ -1834,7 +1879,11 @@ static int operate_IPDiagnostics_TraceRoute(char *refparam, struct dmctx *ctx, v // Allocate uci_ctx_bbfdm dmuci_init_bbfdm(); + char *status = get_diagnostics_option("traceroute", "DiagnosticState"); + char *ip_address_used = get_diagnostics_option("traceroute", "IPAddressUsed"); char *response_time = get_diagnostics_option("traceroute", "ResponseTime"); + add_list_parameter(ctx, dmstrdup("Status"), status, DMT_TYPE[DMT_STRING], NULL); + add_list_parameter(ctx, dmstrdup("IPAddressUsed"), ip_address_used, DMT_TYPE[DMT_STRING], NULL); add_list_parameter(ctx, dmstrdup("ResponseTime"), response_time, DMT_TYPE[DMT_UNINT], NULL); uci_path_foreach_sections(bbfdm, DMMAP_DIAGNOSTIGS, "RouteHops", s) { @@ -1886,6 +1935,19 @@ static operation_args ip_diagnostics_download_args = { "PeriodOfFullLoading", "TCPOpenRequestTime", "TCPOpenResponseTime", + "PerConnectionResult.{i}.ROMTime", + "PerConnectionResult.{i}.BOMTime", + "PerConnectionResult.{i}.EOMTime", + "PerConnectionResult.{i}.TestBytesReceived", + "PerConnectionResult.{i}.TotalBytesReceived", + "PerConnectionResult.{i}.TotalBytesSent", + "PerConnectionResult.{i}.TCPOpenRequestTime", + "PerConnectionResult.{i}.TCPOpenResponseTime", + "IncrementalResult.{i}.TestBytesReceived", + "IncrementalResult.{i}.TotalBytesReceived", + "IncrementalResult.{i}.TotalBytesSent", + "IncrementalResult.{i}.StartTime", + "IncrementalResult.{i}.EndTime", NULL } }; @@ -1921,6 +1983,8 @@ static int operate_IPDiagnostics_DownloadDiagnostics(char *refparam, struct dmct if (start_upload_download_diagnostic(DOWNLOAD_DIAGNOSTIC) == -1) return CMD_FAIL; + char *status = get_diagnostics_option("download", "DiagnosticState"); + char *ip_address_used = get_diagnostics_option("download", "IPAddressUsed"); char *romtime = get_diagnostics_option("download", "ROMtime"); char *bomtime = get_diagnostics_option("download", "BOMtime"); char *eomtime = get_diagnostics_option("download", "EOMtime"); @@ -1934,6 +1998,8 @@ static int operate_IPDiagnostics_DownloadDiagnostics(char *refparam, struct dmct char *tcp_open_request_time = get_diagnostics_option("download", "TCPOpenRequestTime"); char *tcp_open_response_time = get_diagnostics_option("download", "TCPOpenResponseTime"); + add_list_parameter(ctx, dmstrdup("Status"), status, DMT_TYPE[DMT_STRING], NULL); + add_list_parameter(ctx, dmstrdup("IPAddressUsed"), ip_address_used, DMT_TYPE[DMT_STRING], NULL); add_list_parameter(ctx, dmstrdup("ROMTime"), romtime, DMT_TYPE[DMT_TIME], NULL); add_list_parameter(ctx, dmstrdup("BOMTime"), bomtime, DMT_TYPE[DMT_TIME], NULL); add_list_parameter(ctx, dmstrdup("EOMTime"), eomtime, DMT_TYPE[DMT_TIME], NULL); @@ -1980,6 +2046,19 @@ static operation_args ip_diagnostics_upload_args = { "PeriodOfFullLoading", "TCPOpenRequestTime", "TCPOpenResponseTime", + "PerConnectionResult.{i}.ROMTime", + "PerConnectionResult.{i}.BOMTime", + "PerConnectionResult.{i}.EOMTime", + "PerConnectionResult.{i}.TestBytesSent", + "PerConnectionResult.{i}.TotalBytesReceived", + "PerConnectionResult.{i}.TotalBytesSent", + "PerConnectionResult.{i}.TCPOpenRequestTime", + "PerConnectionResult.{i}.TCPOpenResponseTime", + "IncrementalResult.{i}.TestBytesSent", + "IncrementalResult.{i}.TotalBytesReceived", + "IncrementalResult.{i}.TotalBytesSent", + "IncrementalResult.{i}.StartTime", + "IncrementalResult.{i}.EndTime", NULL } }; @@ -2021,6 +2100,8 @@ static int operate_IPDiagnostics_UploadDiagnostics(char *refparam, struct dmctx if (start_upload_download_diagnostic(UPLOAD_DIAGNOSTIC) == -1) return CMD_FAIL; + char *upload_status = get_diagnostics_option("upload", "DiagnosticState"); + char *upload_ip_address_used = get_diagnostics_option("upload", "IPAddressUsed"); char *upload_romtime = get_diagnostics_option("upload", "ROMtime"); char *upload_bomtime = get_diagnostics_option("upload", "BOMtime"); char *upload_eomtime = get_diagnostics_option("upload", "EOMtime"); @@ -2034,6 +2115,8 @@ static int operate_IPDiagnostics_UploadDiagnostics(char *refparam, struct dmctx char *upload_tcp_open_request_time = get_diagnostics_option("upload", "TCPOpenRequestTime"); char *upload_tcp_open_response_time = get_diagnostics_option("upload", "TCPOpenResponseTime"); + add_list_parameter(ctx, dmstrdup("Status"), upload_status, DMT_TYPE[DMT_STRING], NULL); + add_list_parameter(ctx, dmstrdup("IPAddressUsed"), upload_ip_address_used, DMT_TYPE[DMT_STRING], NULL); add_list_parameter(ctx, dmstrdup("ROMTime"), upload_romtime, DMT_TYPE[DMT_TIME], NULL); add_list_parameter(ctx, dmstrdup("BOMTime"), upload_bomtime, DMT_TYPE[DMT_TIME], NULL); add_list_parameter(ctx, dmstrdup("EOMTime"), upload_eomtime, DMT_TYPE[DMT_TIME], NULL); @@ -2053,33 +2136,33 @@ static int operate_IPDiagnostics_UploadDiagnostics(char *refparam, struct dmctx static operation_args ip_diagnostics_udpecho_args = { .in = (const char *[]) { "Interface", - "UploadURL", + "Host", + "Port", + "NumberOfRepetitions", + "Timeout", + "DataBlockSize", "DSCP", - "EthernetPriority", - "TestFileLength", - "TimeBasedTestDuration", - "TimeBasedTestMeasurementInterval", - "TimeBasedTestMeasurementOffset", + "InterTransmissionTime", "ProtocolVersion", - "NumberOfConnections", - "EnablePerConnectionResults", + "EnableIndividualPacketResults", NULL }, .out = (const char *[]) { "Status", "IPAddressUsed", - "ROMTime", - "BOMTime", - "EOMTime", - "TestBytesSent", - "TotalBytesReceived", - "TotalBytesSent", - "TestBytesSentUnderFullLoading", - "TotalBytesReceivedUnderFullLoading", - "TotalBytesSentUnderFullLoading", - "PeriodOfFullLoading", - "TCPOpenRequestTime", - "TCPOpenResponseTime", + "SuccessCount", + "FailureCount", + "AverageResponseTime", + "MinimumResponseTime", + "MaximumResponseTime", + "IndividualPacketResult.{i}.PacketSuccess", + "IndividualPacketResult.{i}.PacketSendTime", + "IndividualPacketResult.{i}.PacketReceiveTime", + "IndividualPacketResult.{i}.TestGenSN", + "IndividualPacketResult.{i}.TestRespSN", + "IndividualPacketResult.{i}.TestRespRcvTimeStamp", + "IndividualPacketResult.{i}.TestRespReplyTimeStamp", + "IndividualPacketResult.{i}.TestRespReplyFailureCount", NULL } }; @@ -2125,12 +2208,16 @@ static int operate_IPDiagnostics_UDPEchoDiagnostics(char *refparam, struct dmctx // Allocate uci_ctx_bbfdm dmuci_init_bbfdm(); + char *status = get_diagnostics_option("udpechodiag", "DiagnosticState"); + char *ip_address_used = get_diagnostics_option("udpechodiag", "IPAddressUsed"); char *udpecho_success_count = get_diagnostics_option("udpechodiag", "SuccessCount"); char *udpecho_failure_count = get_diagnostics_option("udpechodiag", "FailureCount"); char *udpecho_average_response_time = get_diagnostics_option("udpechodiag", "AverageResponseTime"); char *udpecho_minimum_response_time = get_diagnostics_option("udpechodiag", "MinimumResponseTime"); char *udpecho_maximum_response_time = get_diagnostics_option("udpechodiag", "MaximumResponseTime"); + add_list_parameter(ctx, dmstrdup("Status"), status, DMT_TYPE[DMT_STRING], NULL); + add_list_parameter(ctx, dmstrdup("IPAddressUsed"), ip_address_used, DMT_TYPE[DMT_STRING], NULL); add_list_parameter(ctx, dmstrdup("SuccessCount"), udpecho_success_count, DMT_TYPE[DMT_UNINT], NULL); add_list_parameter(ctx, dmstrdup("FailureCount"), udpecho_failure_count, DMT_TYPE[DMT_UNINT], NULL); add_list_parameter(ctx, dmstrdup("AverageResponseTime"), udpecho_average_response_time, DMT_TYPE[DMT_UNINT], NULL); @@ -2158,7 +2245,7 @@ static operation_args ip_diagnostics_server_selection_args = { "MaximumResponseTime", "IPAddressUsed", NULL - } + } }; static int get_operate_args_IPDiagnostics_ServerSelectionDiagnostics(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) @@ -2198,15 +2285,19 @@ static int operate_IPDiagnostics_ServerSelectionDiagnostics(char *refparam, stru // Allocate uci_ctx_bbfdm dmuci_init_bbfdm(); + char *status = get_diagnostics_option("serverselection", "DiagnosticState"); char *fasthost = get_diagnostics_option("serverselection", "FastestHost"); char *average_response_time = get_diagnostics_option("serverselection", "AverageResponseTime"); char *minimum_response_time = get_diagnostics_option("serverselection", "MinimumResponseTime"); char *maximum_response_time = get_diagnostics_option("serverselection", "MaximumResponseTime"); + char *ip_address_used = get_diagnostics_option("serverselection", "IPAddressUsed"); + add_list_parameter(ctx, dmstrdup("Status"), status, DMT_TYPE[DMT_STRING], NULL); add_list_parameter(ctx, dmstrdup("FastestHost"), fasthost, DMT_TYPE[DMT_STRING], NULL); add_list_parameter(ctx, dmstrdup("AverageResponseTime"), average_response_time, DMT_TYPE[DMT_UNINT], NULL); add_list_parameter(ctx, dmstrdup("MinimumResponseTime"), minimum_response_time, DMT_TYPE[DMT_UNINT], NULL); add_list_parameter(ctx, dmstrdup("MaximumResponseTime"), maximum_response_time, DMT_TYPE[DMT_UNINT], NULL); + add_list_parameter(ctx, dmstrdup("IPAddressUsed"), ip_address_used, DMT_TYPE[DMT_STRING], NULL); return CMD_SUCCESS; } @@ -2260,6 +2351,7 @@ DMLEAF tIPDiagnosticsIPPingParams[] = { {"Timeout", &DMWRITE, DMT_UNINT, get_ip_ping_timeout, set_ip_ping_timeout, BBFDM_CWMP}, {"DataBlockSize", &DMWRITE, DMT_UNINT, get_ip_ping_block_size, set_ip_ping_block_size, BBFDM_CWMP}, {"DSCP", &DMWRITE, DMT_UNINT, get_ip_ping_DSCP, set_ip_ping_DSCP, BBFDM_CWMP}, +{"IPAddressUsed", &DMREAD, DMT_STRING, get_IPDiagnosticsIPPing_IPAddressUsed, NULL, BBFDM_CWMP}, {"SuccessCount", &DMREAD, DMT_UNINT, get_ip_ping_success_count, NULL, BBFDM_CWMP}, {"FailureCount", &DMREAD, DMT_UNINT, get_ip_ping_failure_count, NULL, BBFDM_CWMP}, {"AverageResponseTime", &DMREAD, DMT_UNINT, get_ip_ping_average_response_time, NULL, BBFDM_CWMP}, @@ -2290,6 +2382,7 @@ DMLEAF tIPDiagnosticsTraceRouteParams[] = { {"DSCP", &DMWRITE, DMT_UNINT, get_IPDiagnosticsTraceRoute_DSCP, set_IPDiagnosticsTraceRoute_DSCP, BBFDM_CWMP}, {"MaxHopCount", &DMWRITE, DMT_UNINT, get_IPDiagnosticsTraceRoute_MaxHopCount, set_IPDiagnosticsTraceRoute_MaxHopCount, BBFDM_CWMP}, {"ResponseTime", &DMREAD, DMT_UNINT, get_IPDiagnosticsTraceRoute_ResponseTime, NULL, BBFDM_CWMP}, +{"IPAddressUsed", &DMREAD, DMT_STRING, get_IPDiagnosticsTraceRoute_IPAddressUsed, NULL, BBFDM_CWMP}, {"RouteHopsNumberOfEntries", &DMREAD, DMT_UNINT, get_IPDiagnosticsTraceRoute_RouteHopsNumberOfEntries, NULL, BBFDM_CWMP}, {0} }; @@ -2322,6 +2415,7 @@ DMLEAF tIPDiagnosticsDownloadDiagnosticsParams[] = { {"EthernetPriority", &DMWRITE, DMT_UNINT, get_IPDiagnosticsDownloadDiagnostics_EthernetPriority, set_IPDiagnosticsDownloadDiagnostics_EthernetPriority, BBFDM_CWMP}, {"ProtocolVersion", &DMWRITE, DMT_STRING, get_IPDiagnosticsDownloadDiagnostics_ProtocolVersion, set_IPDiagnosticsDownloadDiagnostics_ProtocolVersion, BBFDM_CWMP}, {"NumberOfConnections", &DMWRITE, DMT_UNINT, get_IPDiagnosticsDownloadDiagnostics_NumberOfConnections, set_IPDiagnosticsDownloadDiagnostics_NumberOfConnections, BBFDM_CWMP}, +{"IPAddressUsed", &DMREAD, DMT_STRING, get_IPDiagnosticsDownloadDiagnostics_IPAddressUsed, NULL, BBFDM_CWMP}, {"ROMTime", &DMREAD, DMT_TIME, get_IPDiagnosticsDownloadDiagnostics_ROMTime, NULL, BBFDM_CWMP}, {"BOMTime", &DMREAD, DMT_TIME, get_IPDiagnosticsDownloadDiagnostics_BOMTime, NULL, BBFDM_CWMP}, {"EOMTime", &DMREAD, DMT_TIME, get_IPDiagnosticsDownloadDiagnostics_EOMTime, NULL, BBFDM_CWMP}, @@ -2371,6 +2465,7 @@ DMLEAF tIPDiagnosticsUploadDiagnosticsParams[] = { {"TestFileLength", &DMWRITE, DMT_UNINT, get_IPDiagnosticsUploadDiagnostics_TestFileLength, set_IPDiagnosticsUploadDiagnostics_TestFileLength, BBFDM_CWMP}, {"ProtocolVersion", &DMWRITE, DMT_STRING, get_IPDiagnosticsUploadDiagnostics_ProtocolVersion, set_IPDiagnosticsUploadDiagnostics_ProtocolVersion, BBFDM_CWMP}, {"NumberOfConnections", &DMWRITE, DMT_UNINT, get_IPDiagnosticsUploadDiagnostics_NumberOfConnections, set_IPDiagnosticsUploadDiagnostics_NumberOfConnections, BBFDM_CWMP}, +{"IPAddressUsed", &DMREAD, DMT_STRING, get_IPDiagnosticsUploadDiagnostics_IPAddressUsed, NULL, BBFDM_CWMP}, {"ROMTime", &DMREAD, DMT_TIME, get_IPDiagnosticsUploadDiagnostics_ROMTime, NULL, BBFDM_CWMP}, {"BOMTime", &DMREAD, DMT_TIME, get_IPDiagnosticsUploadDiagnostics_BOMTime, NULL, BBFDM_CWMP}, {"EOMTime", &DMREAD, DMT_TIME, get_IPDiagnosticsUploadDiagnostics_EOMTime, NULL, BBFDM_CWMP}, @@ -2415,6 +2510,7 @@ DMLEAF tIPDiagnosticsUDPEchoDiagnosticsParams[] = { {"DSCP", &DMWRITE, DMT_UNINT, get_IPDiagnosticsUDPEchoDiagnostics_DSCP, set_IPDiagnosticsUDPEchoDiagnostics_DSCP, BBFDM_CWMP}, {"InterTransmissionTime", &DMWRITE, DMT_UNINT, get_IPDiagnosticsUDPEchoDiagnostics_InterTransmissionTime, set_IPDiagnosticsUDPEchoDiagnostics_InterTransmissionTime, BBFDM_CWMP}, {"ProtocolVersion", &DMWRITE, DMT_STRING, get_IPDiagnosticsUDPEchoDiagnostics_ProtocolVersion, set_IPDiagnosticsUDPEchoDiagnostics_ProtocolVersion, BBFDM_CWMP}, +{"IPAddressUsed", &DMREAD, DMT_STRING, get_IPDiagnosticsUDPEchoDiagnostics_IPAddressUsed, NULL, BBFDM_CWMP}, {"SuccessCount", &DMREAD, DMT_UNINT, get_IPDiagnosticsUDPEchoDiagnostics_SuccessCount, NULL, BBFDM_CWMP}, {"FailureCount", &DMREAD, DMT_UNINT, get_IPDiagnosticsUDPEchoDiagnostics_FailureCount, NULL, BBFDM_CWMP}, {"AverageResponseTime", &DMREAD, DMT_UNINT, get_IPDiagnosticsUDPEchoDiagnostics_AverageResponseTime, NULL, BBFDM_CWMP}, @@ -2437,5 +2533,6 @@ DMLEAF tIPDiagnosticsServerSelectionDiagnosticsParams[] = { {"MinimumResponseTime", &DMREAD, DMT_UNINT, get_IPDiagnosticsServerSelectionDiagnostics_MinimumResponseTime, NULL, BBFDM_CWMP}, {"AverageResponseTime", &DMREAD, DMT_UNINT, get_IPDiagnosticsServerSelectionDiagnostics_AverageResponseTime, NULL, BBFDM_CWMP}, {"MaximumResponseTime", &DMREAD, DMT_UNINT, get_IPDiagnosticsServerSelectionDiagnostics_MaximumResponseTime, NULL, BBFDM_CWMP}, +{"IPAddressUsed", &DMREAD, DMT_STRING, get_IPDiagnosticsServerSelectionDiagnostics_IPAddressUsed, NULL, BBFDM_CWMP}, {0} }; diff --git a/dmtree/tr181/dns.c b/dmtree/tr181/dns.c index 3f5f4061..660854af 100644 --- a/dmtree/tr181/dns.c +++ b/dmtree/tr181/dns.c @@ -743,11 +743,13 @@ static operation_args dns_diagnostics_nslookup_args = { }, .out = (const char *[]) { "Status", - "AnswerType", - "HostNameReturned", - "IPAddresses", - "DNSServerIP", - "ResponseTime", + "SuccessCount", + "Result.{i}.Status", + "Result.{i}.AnswerType", + "Result.{i}.HostNameReturned", + "Result.{i}.IPAddresses", + "Result.{i}.DNSServerIP", + "Result.{i}.ResponseTime", NULL } }; @@ -769,6 +771,7 @@ static int operate_DNSDiagnostics_NSLookupDiagnostics(char *refparam, struct dmc char *nslookup_response_time[2] = {0}; int i = 1; + init_diagnostics_operation("NSLookupResult", NSLOOKUP_PATH); init_diagnostics_operation("nslookup", NSLOOKUP_PATH); char *hostname = dmjson_get_value((json_object *)value, 1, "HostName"); @@ -793,7 +796,9 @@ static int operate_DNSDiagnostics_NSLookupDiagnostics(char *refparam, struct dmc // Allocate uci_ctx_bbfdm dmuci_init_bbfdm(); + char *status = get_diagnostics_option("nslookup", "DiagnosticState"); char *success_count = get_diagnostics_option("nslookup", "SuccessCount"); + add_list_parameter(ctx, dmstrdup("Status"), status, DMT_TYPE[DMT_STRING], NULL); add_list_parameter(ctx, dmstrdup("SuccessCount"), success_count, DMT_TYPE[DMT_UNINT], NULL); uci_path_foreach_sections(bbfdm, DMMAP_DIAGNOSTIGS, "NSLookupResult", s) { diff --git a/scripts/bbf_uci_api b/scripts/bbf_api similarity index 53% rename from scripts/bbf_uci_api rename to scripts/bbf_api index b30974bb..fe620965 100755 --- a/scripts/bbf_uci_api +++ b/scripts/bbf_api @@ -23,3 +23,24 @@ uci_get_bbf_dmmap() { val=$($UCI_GET_BBF_DMMAP $1) echo ${val:-$2} } + +get_ip_addr_used() { + protocol=$1 + interface=$2 + + if [ "$protocol" = "IPv6" ]; then + if [ -n "$interface" ]; then + ip_addr_used=$(ifstatus "$interface" | jsonfilter -e '@["ipv6-address"][0].address') + else + ip_addr_used=$(ip -6 route | grep default | awk -F ' ' '{print $9}') + fi + else + if [ -n "$interface" ]; then + ip_addr_used=$(ifstatus "$interface" | jsonfilter -e '@["ipv4-address"][0].address') + else + ip_addr_used=$(ip route | grep default | awk -F ' ' '{print $9}') + fi + fi + + echo ${ip_addr_used} +} \ No newline at end of file diff --git a/scripts/download_launch b/scripts/download_launch index 8c310bdd..c422a204 100755 --- a/scripts/download_launch +++ b/scripts/download_launch @@ -3,7 +3,7 @@ # Author: IMEN Bhiri # Author: AMIN Ben Ramdhane -. /usr/share/bbfdm/bbf_uci_api +. /usr/share/bbfdm/bbf_api CAPTURE_FILE="/tmp/download_dump" @@ -12,8 +12,11 @@ download_launch() { device=$2 [ "$url" = "" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.download.DiagnosticState=Error_InitConnectionFailed; $UCI_COMMIT_BBF_DMMAP; return; } + interface=$(uci_get_bbf_dmmap dmmap_diagnostics.download.interface) protocol=$(uci_get_bbf_dmmap dmmap_diagnostics.download.ProtocolVersion Any) if [ "$protocol" = "IPv4" ]; then proto="--ipv4"; elif [ "$protocol" = "IPv6" ]; then proto="--ipv6"; else proto=""; fi + ip_addr_used=$(get_ip_addr_used $protocol $interface) + $UCI_SET_BBF_DMMAP dmmap_diagnostics.download.IPAddressUsed="$ip_addr_used" # Disable acceleration on Broadcom devices to capture all packets with tcpdump [ -e /usr/sbin/fcctl ] && { fcctl disable >/dev/null 2>&1; fcctl flush >/dev/null 2>&1; } diff --git a/scripts/ipping_launch b/scripts/ipping_launch index 115d5ec1..286420cd 100755 --- a/scripts/ipping_launch +++ b/scripts/ipping_launch @@ -3,7 +3,7 @@ # Author: MOHAMED Kallel # Author: AMIN Ben Ramdhane -. /usr/share/bbfdm/bbf_uci_api +. /usr/share/bbfdm/bbf_api ipping_error() { @@ -28,6 +28,8 @@ ipping_launch() { protocol=$(uci_get_bbf_dmmap dmmap_diagnostics.ipping.ProtocolVersion Any) [ -n "$interface" ] && device=$(ifstatus "$interface" | jsonfilter -e @.device) && device="-I $device" || device="" if [ "$protocol" = "IPv4" ]; then proto="-4"; elif [ "$protocol" = "IPv6" ]; then proto="-6"; else proto=""; fi + ip_addr_used=$(get_ip_addr_used $protocol $interface) + $UCI_SET_BBF_DMMAP dmmap_diagnostics.ipping.IPAddressUsed="$ip_addr_used" [ "$host" = "" ] && return timeout=$((timeout/1000)) [ "$timeout" = "0" ] && timeout="1" diff --git a/scripts/nslookup_launch b/scripts/nslookup_launch index d31f34d3..9f77113f 100755 --- a/scripts/nslookup_launch +++ b/scripts/nslookup_launch @@ -2,7 +2,7 @@ # Copyright (C) 2022 iopsys Software Solutions AB # Author: AMIN Ben Ramdhane -. /usr/share/bbfdm/bbf_uci_api +. /usr/share/bbfdm/bbf_api LOG_FILE="/tmp/nslookup.log" @@ -16,7 +16,6 @@ nslookup_launch() { j=0 success_count=0 [ -e "${LOG_FILE}" ] && rm ${LOG_FILE} - delete_all_results while [ $i -lt "$cnt" ]; do i=$((i+1)) time1=$(date +%s) @@ -46,7 +45,7 @@ nslookup_launch() { var=$(echo "$line" | tr -d '\t' | tr -d ' ' | grep "Name:" | awk -F':' '{print $2}') [ -n "$var" ] && { HostNameReturned=$var; status="Success"; AnswerType="Authoritative"; success_count=$((success_count+1)); continue; } - var=$(echo "$line" | grep "Address " | awk -F':' '{print substr($0, index($0,$2))}' | tr -d '\t' | tr -d ' ') + var=$(echo "$line" | grep "Address: " | awk -F':' '{print substr($0, index($0,$2))}' | tr -d '\t' | tr -d ' ') [ -n "$var" ] && { [ -z "$address" ] && address="$var" || address="$address,$var"; continue; } var=$(echo "$line" | tr -d '\t' | tr -d ' ' | grep "ResponseTime:" | awk -F':' '{print $2}') @@ -74,15 +73,7 @@ nslookup_launch() { $UCI_COMMIT_BBF_DMMAP } -delete_all_results() { - for j in $($UCI_SHOW_BBF_DMMAP dmmap_diagnostics | grep "dmmap_diagnostics.@NSLookupResult.*=NSLookupResult"); do - $UCI_DELETE_BBF_DMMAP dmmap_diagnostics.@NSLookupResult[-1] - done - $UCI_COMMIT_BBF_DMMAP -} - nslookup_stop_diagnostic() { - delete_all_results pids=$(pgrep -f nslookup_launch) if [ -n "$pids" ]; then kill -9 "$pids" >/dev/null 2>&1 diff --git a/scripts/serverselection_launch b/scripts/serverselection_launch index 631a1157..14bb7c3b 100755 --- a/scripts/serverselection_launch +++ b/scripts/serverselection_launch @@ -2,7 +2,7 @@ # Copyright (C) 2022 iopsys Software Solutions AB # Author: AMIN Ben Ramdhane -. /usr/share/bbfdm/bbf_uci_api +. /usr/share/bbfdm/bbf_api serverselection_launch() { hostlist=$(uci_get_bbf_dmmap dmmap_diagnostics.serverselection.HostList) @@ -13,6 +13,8 @@ serverselection_launch() { protoversion=$(uci_get_bbf_dmmap dmmap_diagnostics.serverselection.ProtocolVersion Any) protocol=$(uci_get_bbf_dmmap dmmap_diagnostics.serverselection.Protocol ICMP) if [ "$protoversion" = "IPv4" ]; then proto="-4"; elif [ "$protoversion" = "IPv6" ]; then proto="-6"; else proto=""; fi + ip_addr_used=$(get_ip_addr_used $protoversion $interface) + $UCI_SET_BBF_DMMAP dmmap_diagnostics.serverselection.IPAddressUsed="$ip_addr_used" [ "$hostlist" = "" ] && return timeout=$((timeout/1000)) [ "$timeout" = "0" ] && timeout="1" diff --git a/scripts/traceroute_launch b/scripts/traceroute_launch index c649d2fb..569b2edf 100755 --- a/scripts/traceroute_launch +++ b/scripts/traceroute_launch @@ -2,23 +2,24 @@ # Copyright (C) 2022 iopsys Software Solutions AB # Author: AMIN Ben Ramdhane -. /usr/share/bbfdm/bbf_uci_api +. /usr/share/bbfdm/bbf_api traceroute_launch() { host=$(uci_get_bbf_dmmap dmmap_diagnostics.traceroute.Host) cnt=$(uci_get_bbf_dmmap dmmap_diagnostics.traceroute.NumberOfTries 3) - dsize=$(uci_get_bbf_dmmap dmmap_diagnostics.traceroute.DataBlockSize 38) + dsize=$(uci_get_bbf_dmmap dmmap_diagnostics.traceroute.DataBlockSize 64) timeout=$(uci_get_bbf_dmmap dmmap_diagnostics.traceroute.Timeout 5000) maxhop=$(uci_get_bbf_dmmap dmmap_diagnostics.traceroute.MaxHops 30) interface=$(uci_get_bbf_dmmap dmmap_diagnostics.traceroute.interface) protocol=$(uci_get_bbf_dmmap dmmap_diagnostics.traceroute.ProtocolVersion Any) [ -n "$interface" ] && device=$(ifstatus "$interface" | jsonfilter -e @.device) && device="-i $device" || device="" if [ "$protocol" = "IPv4" ]; then proto="-4"; elif [ "$protocol" = "IPv6" ]; then proto="-6"; else proto=""; fi + ip_addr_used=$(get_ip_addr_used $protocol $interface) + $UCI_SET_BBF_DMMAP dmmap_diagnostics.traceroute.IPAddressUsed="$ip_addr_used" [ "$host" = "" ] && return timeout=$((timeout/1000)) [ "$timeout" = "0" ] && timeout="1" i=-2 - delete_all_route_hops rm -f /tmp/traceres traceroute -m $maxhop -w $timeout -q $cnt $proto $device $host $dsize 2>&1 >/tmp/traceres while read _ host ip time _; do @@ -41,15 +42,7 @@ traceroute_launch() { $UCI_COMMIT_BBF_DMMAP } -delete_all_route_hops() { - for j in $($UCI_SHOW_BBF_DMMAP dmmap_diagnostics | grep "dmmap_diagnostics.@RouteHops.*=RouteHops"); do - $UCI_DELETE_BBF_DMMAP dmmap_diagnostics.@RouteHops[-1] - $UCI_COMMIT_BBF_DMMAP - done -} - traceroute_stop() { - delete_all_route_hops pids=$(pgrep -f traceroute_launch) if [ -n "$pids" ]; then kill -9 "$pids" >/dev/null 2>&1 diff --git a/scripts/udpecho_launch b/scripts/udpecho_launch index 93a4f1f8..655a53bc 100755 --- a/scripts/udpecho_launch +++ b/scripts/udpecho_launch @@ -2,7 +2,7 @@ # Copyright (C) 2022 iopsys Software Solutions AB # Author: AMIN Ben Ramdhane -. /usr/share/bbfdm/bbf_uci_api +. /usr/share/bbfdm/bbf_api udpecho_error() { @@ -27,6 +27,8 @@ udpecho_launch() { inter_time=$(uci_get_bbf_dmmap dmmap_diagnostics.udpechodiag.InterTransmissionTime 1000) [ -n "$interface" ] && device=$(ifstatus "$interface" | jsonfilter -e @.device) && device="-i $device" || device="" if [ "$protocol" = "IPv4" ]; then proto="4"; elif [ "$protocol" = "IPv6" ]; then proto="6"; else proto="4"; fi + ip_addr_used=$(get_ip_addr_used $protocol $interface) + $UCI_SET_BBF_DMMAP dmmap_diagnostics.udpechodiag.IPAddressUsed="$ip_addr_used" tos=$((dscp<<2)) inter_time=$((inter_time/1000)) [ "$inter_time" = "0" ] && inter_time="1" diff --git a/scripts/upload_launch b/scripts/upload_launch index 111917c3..f58f202a 100755 --- a/scripts/upload_launch +++ b/scripts/upload_launch @@ -3,7 +3,7 @@ # Author: IMEN Bhiri # Author: AMIN Ben Ramdhane -. /usr/share/bbfdm/bbf_uci_api +. /usr/share/bbfdm/bbf_api CAPTURE_FILE="/tmp/upload_dump" @@ -13,8 +13,11 @@ upload_launch() { size=$3 [ "$url" = "" ] && { $UCI_SET_BBF_DMMAP dmmap_diagnostics.upload.DiagnosticState=Error_InitConnectionFailed; $UCI_COMMIT_BBF_DMMAP; return; } + interface=$(uci_get_bbf_dmmap dmmap_diagnostics.upload.interface) protocol=$(uci_get_bbf_dmmap dmmap_diagnostics.upload.ProtocolVersion Any) if [ "$protocol" = "IPv4" ]; then proto="--ipv4"; elif [ "$protocol" = "IPv6" ]; then proto="--ipv6"; else proto=""; fi + ip_addr_used=$(get_ip_addr_used $protocol $interface) + $UCI_SET_BBF_DMMAP dmmap_diagnostics.upload.IPAddressUsed="$ip_addr_used" # Disable acceleration on Broadcom devices to capture all packets with tcpdump [ -e /usr/sbin/fcctl ] && { fcctl disable >/dev/null 2>&1; fcctl flush >/dev/null 2>&1; } diff --git a/test/cmocka/functional_test_bbfd.c b/test/cmocka/functional_test_bbfd.c index 7e2b1a60..e79be7a0 100644 --- a/test/cmocka/functional_test_bbfd.c +++ b/test/cmocka/functional_test_bbfd.c @@ -1176,14 +1176,22 @@ static void test_api_bbfdm_valid_standard_operate(void **state) assert_int_equal(fault, CMD_SUCCESS); list_for_each_entry(n, &ctx->list_parameter, list) { - if (DM_STRCMP(n->name, "SuccessCount") == 0) { + if (DM_STRCMP(n->name, "Status") == 0) { + assert_string_equal(n->data, "Complete"); + assert_string_equal(n->type, "xsd:string"); + } else if (DM_STRCMP(n->name, "IPAddressUsed") == 0) { + assert_string_equal(n->data, ""); + assert_string_equal(n->type, "xsd:string"); + } else if (DM_STRCMP(n->name, "SuccessCount") == 0) { assert_string_equal(n->data, "1"); + assert_string_equal(n->type, "xsd:unsignedInt"); } else if (DM_STRCMP(n->name, "FailureCount") == 0) { assert_string_equal(n->data, "0"); + assert_string_equal(n->type, "xsd:unsignedInt"); } else { assert_string_not_equal(n->data, "0"); + assert_string_equal(n->type, "xsd:unsignedInt"); } - assert_string_equal(n->type, "xsd:unsignedInt"); } }