diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 9ba9a2cf..bcdfbfa1 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -2,4 +2,4 @@ # the repository. Unless a later match takes precedence, # @org/actor will be requested for # review when someone opens a pull request. -* @rdkcentral/wanmanager-owners +* @rdkcentral/wanmanager-maintainers diff --git a/.github/workflows/cla.yml b/.github/workflows/cla.yml new file mode 100644 index 00000000..c58b1b0b --- /dev/null +++ b/.github/workflows/cla.yml @@ -0,0 +1,20 @@ +name: "CLA" + +permissions: + contents: read + pull-requests: write + actions: write + statuses: write + +on: + issue_comment: + types: [created] + pull_request_target: + types: [opened, closed, synchronize] + +jobs: + CLA-Lite: + name: "Signature" + uses: rdkcentral/cmf-actions/.github/workflows/cla.yml@v1 + secrets: + PERSONAL_ACCESS_TOKEN: ${{ secrets.CLA_ASSISTANT }} diff --git a/configure.ac b/configure.ac index 850a9e75..a0e0ad5c 100644 --- a/configure.ac +++ b/configure.ac @@ -124,8 +124,6 @@ dnl Checks for library functions. AC_FUNC_MALLOC AC_CHECK_FUNCS([memset strdup strerror]) -PKG_CHECK_MODULES([DBUS],[dbus-1 >= 1.6.18]) - AC_CONFIG_FILES([Makefile source/Makefile source/TR-181/Makefile diff --git a/source/TR-181/include/wanmgr_dml.h b/source/TR-181/include/wanmgr_dml.h index 62ac0891..4706be21 100644 --- a/source/TR-181/include/wanmgr_dml.h +++ b/source/TR-181/include/wanmgr_dml.h @@ -581,6 +581,7 @@ typedef struct _DML_WAN_INTERFACE DATAMODEL_MARKING Marking; UINT NoOfVirtIfs; DML_VIRTUAL_IFACE* VirtIfList; + BOOL bSendSelectionTimerExpired; } DML_WAN_IFACE; diff --git a/source/TR-181/middle_layer_src/wanmgr_dml_iface_v2_apis.c b/source/TR-181/middle_layer_src/wanmgr_dml_iface_v2_apis.c index 26665b46..3dcb1e2a 100644 --- a/source/TR-181/middle_layer_src/wanmgr_dml_iface_v2_apis.c +++ b/source/TR-181/middle_layer_src/wanmgr_dml_iface_v2_apis.c @@ -43,6 +43,7 @@ #if defined (_XB6_PRODUCT_REQ_) || defined (_CBR2_PRODUCT_REQ_) || defined(_PLATFORM_RASPBERRYPI_) #include "wanmgr_utils.h" #endif +#include "wanmgr_telemetry.h" extern WANMGR_DATA_ST gWanMgrDataBase; /*********************************************************************** @@ -1618,6 +1619,7 @@ BOOL WanVirtualIf_SetParamBoolValue(ANSC_HANDLE hInsContext, char* ParamName, BO WanMgr_SetConnectivityCheckTypeToPSM(p_VirtIf, type); p_VirtIf->IP.WCC_TypeChanged = TRUE; p_VirtIf->IP.ConnectivityCheckType = type; + WanMgr_ProcessTelemetryMarker(p_VirtIf,WAN_INFO_CONNECTIVITY_CHECK_TYPE); ret = TRUE; } } @@ -2088,6 +2090,7 @@ BOOL WanIfIpCfg_SetParamUlongValue(ANSC_HANDLE hInsContext, char* ParamName, ULO p_VirtIf->IP.RefreshDHCP = TRUE; p_VirtIf->IP.ModeForceEnable = TRUE; CcspTraceInfo(("%s %d IP.%s changed for %s to %d. ModeForceEnable set and Refreshing DHCP \n", __FUNCTION__, __LINE__, ParamName, p_VirtIf->Name, p_VirtIf->IP.Mode)); + WanMgr_ProcessTelemetryMarker(p_VirtIf,WAN_INFO_IP_MODE); } ret = TRUE; } @@ -2098,6 +2101,7 @@ BOOL WanIfIpCfg_SetParamUlongValue(ANSC_HANDLE hInsContext, char* ParamName, ULO p_VirtIf->IP.IPv4Source = uValue; p_VirtIf->IP.RefreshDHCP = TRUE; CcspTraceInfo(("%s %d IP.%s changed for %s to %d. Refreshing DHCP \n", __FUNCTION__, __LINE__, ParamName, p_VirtIf->Name,p_VirtIf->IP.IPv4Source)); + WanMgr_ProcessTelemetryMarker(p_VirtIf,WAN_INFO_IPv4_CONFIG_TYPE); } ret = TRUE; } @@ -2107,7 +2111,8 @@ BOOL WanIfIpCfg_SetParamUlongValue(ANSC_HANDLE hInsContext, char* ParamName, ULO { p_VirtIf->IP.IPv6Source = uValue; p_VirtIf->IP.RefreshDHCP = TRUE; - CcspTraceInfo(("%s %d IP.%s changed for %s to %d. Refreshing DHCP \n", __FUNCTION__, __LINE__, ParamName, p_VirtIf->Name,p_VirtIf->IP.IPv4Source)); + CcspTraceInfo(("%s %d IP.%s changed for %s to %d. Refreshing DHCP \n", __FUNCTION__, __LINE__, ParamName, p_VirtIf->Name,p_VirtIf->IP.IPv6Source)); + WanMgr_ProcessTelemetryMarker(p_VirtIf,WAN_INFO_IPv6_CONFIG_TYPE); } ret = TRUE; } diff --git a/source/TR-181/middle_layer_src/wanmgr_rbus_handler_apis.c b/source/TR-181/middle_layer_src/wanmgr_rbus_handler_apis.c index f47f3481..1b4e913f 100644 --- a/source/TR-181/middle_layer_src/wanmgr_rbus_handler_apis.c +++ b/source/TR-181/middle_layer_src/wanmgr_rbus_handler_apis.c @@ -23,6 +23,7 @@ #include "wanmgr_rbus_handler_apis.h" #include "wanmgr_rdkbus_apis.h" #include "dmsb_tr181_psm_definitions.h" +#include "wanmgr_telemetry.h" enum { ENUM_PHY = 1, @@ -455,6 +456,14 @@ rbusError_t WanMgr_Interface_SetHandler(rbusHandle_t handle, rbusProperty_t prop char String[20] = {0}; strncpy(String , rbusValue_GetString(value, NULL),sizeof(String)-1); CcspTraceInfo(("%s-%d : %s BaseInterfaceStatus changed to %s\n", __FUNCTION__, __LINE__, pWanDmlIface->Name, String)); + if (strncmp(String,"Down",strlen(String)) == 0) + { + WanMgr_ProcessTelemetryMarker(p_VirtIf,WAN_ERROR_PHY_DOWN); + } + else if (strncmp(String,"Up",strlen(String)) == 0) + { + WanMgr_ProcessTelemetryMarker(p_VirtIf,WAN_INFO_PHY_UP); + } WanMgr_StringToEnum(&pWanDmlIface->BaseInterfaceStatus, ENUM_PHY, String); if (pWanDmlIface->Sub.BaseInterfaceStatusSub) { @@ -479,6 +488,10 @@ rbusError_t WanMgr_Interface_SetHandler(rbusHandle_t handle, rbusProperty_t prop { char String[20] = {0}; strncpy(String , rbusValue_GetString(value, NULL),sizeof(String)-1); + if(strncmp(String,"Down",strlen(String)) == 0) + { + WanMgr_ProcessTelemetryMarker(p_VirtIf,WAN_ERROR_VLAN_DOWN); + } WanMgr_StringToEnum(&p_VirtIf->VLAN.Status, ENUM_WAN_LINKSTATUS, String); if (pWanDmlIface->Sub.WanLinkStatusSub) { @@ -786,10 +799,22 @@ static void WanMgr_Rbus_EventReceiveHandler(rbusHandle_t handle, rbusEvent_t con if( strstr(pParamName, WANMGR_INFACE_PHY_STATUS_SUFFIX) != NULL ) { + if(strncmp(pValue,"Down",strlen(pValue)) == 0) + { + WanMgr_ProcessTelemetryMarker(WanMgr_getVirtualIfaceById( pWanIfaceData->VirtIfList,0),WAN_ERROR_PHY_DOWN); + } + else if (strncmp(pValue,"Up",strlen(pValue)) == 0) + { + WanMgr_ProcessTelemetryMarker(WanMgr_getVirtualIfaceById( pWanIfaceData->VirtIfList,0),WAN_INFO_PHY_UP); + } WanMgr_StringToEnum(&pWanIfaceData->BaseInterfaceStatus, ENUM_PHY, pValue); } else if( strstr(pParamName, WANMGR_INFACE_WAN_LINKSTATUS_SUFFIX) != NULL ) { + if (strncmp(pValue,"Down",strlen(pValue)) == 0 ) + { + WanMgr_ProcessTelemetryMarker(WanMgr_getVirtualIfaceById( pWanIfaceData->VirtIfList,0),WAN_ERROR_VLAN_DOWN); + } WanMgr_StringToEnum(&pWanIfaceData->VirtIfList->VLAN.Status, ENUM_WAN_LINKSTATUS, pValue); if(pWanIfaceData->VirtIfList->VLAN.Status == WAN_IFACE_LINKSTATUS_UP) { @@ -1597,6 +1622,16 @@ void *WanMgr_WanRemoteIfaceConfigure_thread(void *arg) } } + pWanDmlIfaceData = WanMgr_GetIfaceData_locked(cpeInterfaceIndex); + if (pWanDmlIfaceData != NULL) + { + DML_WAN_IFACE* pWanDmlIface = &(pWanDmlIfaceData->data); + WanMgr_ProcessTelemetryMarker(WanMgr_getVirtualIfaceById( pWanDmlIface->VirtIfList,0),WAN_INFO_IPv4_CONFIG_TYPE); + WanMgr_ProcessTelemetryMarker(WanMgr_getVirtualIfaceById( pWanDmlIface->VirtIfList,0),WAN_INFO_IPv6_CONFIG_TYPE); + WanMgr_ProcessTelemetryMarker(WanMgr_getVirtualIfaceById( pWanDmlIface->VirtIfList,0),WAN_INFO_CONNECTIVITY_CHECK_TYPE); + WanMgr_ProcessTelemetryMarker(WanMgr_getVirtualIfaceById( pWanDmlIface->VirtIfList,0),WAN_INFO_IP_MODE); + WanMgrDml_GetIfaceData_release(pWanDmlIfaceData); + } free(pDeviceChangeEvent); pthread_exit(NULL); return NULL; @@ -1699,10 +1734,22 @@ static void CPEInterface_AsyncMethodHandler( } else if( WANMGR_PHY_STATUS_CHECK ) { + if(strncmp(pValue,"Down",strlen(pValue)) == 0) + { + WanMgr_ProcessTelemetryMarker(WanMgr_getVirtualIfaceById( pWanIfaceData->VirtIfList,0),WAN_ERROR_PHY_DOWN); + } + else if(strncmp(pValue,"Up",strlen(pValue)) == 0) + { + WanMgr_ProcessTelemetryMarker(WanMgr_getVirtualIfaceById( pWanIfaceData->VirtIfList,0),WAN_INFO_PHY_UP); + } WanMgr_StringToEnum(&pWanIfaceData->BaseInterfaceStatus, ENUM_PHY, pValue); } else if( WANMGR_WAN_LINKSTATUS_CHECK ) { + if(strncmp(pValue,"Down",strlen(pValue)) == 0) + { + WanMgr_ProcessTelemetryMarker(WanMgr_getVirtualIfaceById( pWanIfaceData->VirtIfList,0),WAN_ERROR_VLAN_DOWN); + } WanMgr_StringToEnum(&pWanIfaceData->VirtIfList->VLAN.Status, ENUM_WAN_LINKSTATUS, pValue); if(pWanIfaceData->VirtIfList->VLAN.Status == WAN_IFACE_LINKSTATUS_UP) { @@ -1868,7 +1915,17 @@ static void WanMgr_TandD_EventHandler(rbusHandle_t handle, rbusEvent_t const* ev DML_VIRTUAL_IFACE *p_VirtIf = WanMgr_GetVirtIfDataByAlias_locked(Alias); if(p_VirtIf != NULL) - { + { + if(res == WAN_CONNECTIVITY_UP) + { + WanMgr_ProcessTelemetryMarker(p_VirtIf,WAN_INFO_CONNECTIVITY_CHECK_STATUS_UP_IPV4); + WanMgr_ProcessTelemetryMarker(p_VirtIf,WAN_INFO_CONNECTIVITY_CHECK_STATUS_UP_IPV6); + } + else if(res == WAN_CONNECTIVITY_DOWN) + { + WanMgr_ProcessTelemetryMarker(p_VirtIf,WAN_ERROR_CONNECTIVITY_CHECK_STATUS_DOWN_IPV4); + WanMgr_ProcessTelemetryMarker(p_VirtIf,WAN_ERROR_CONNECTIVITY_CHECK_STATUS_DOWN_IPV6); + } p_VirtIf->IP.Ipv4ConnectivityStatus = res; p_VirtIf->IP.Ipv6ConnectivityStatus = res; WanMgr_VirtualIfaceData_release(p_VirtIf); diff --git a/source/TR-181/middle_layer_src/wanmgr_rdkbus_apis.c b/source/TR-181/middle_layer_src/wanmgr_rdkbus_apis.c index 142600d0..61384c56 100644 --- a/source/TR-181/middle_layer_src/wanmgr_rdkbus_apis.c +++ b/source/TR-181/middle_layer_src/wanmgr_rdkbus_apis.c @@ -41,7 +41,8 @@ #ifdef RBUS_BUILD_FLAG_ENABLE #include "wanmgr_rbus_handler_apis.h" #endif //RBUS_BUILD_FLAG_ENABLE -// +#include "wanmgr_telemetry.h" + #define PSM_ENABLE_STRING_TRUE "TRUE" #define PSM_ENABLE_STRING_FALSE "FALSE" #define PPP_LINKTYPE_PPPOA "PPPoA" @@ -326,6 +327,7 @@ int get_Virtual_Interface_FromPSM(ULONG instancenum, ULONG virtInsNum ,DML_VIRTU if (retPsmGet == CCSP_SUCCESS) { _ansc_sscanf(param_value, "%d", &(pVirtIf->IP.Mode)); + WanMgr_ProcessTelemetryMarker(pVirtIf,WAN_INFO_IP_MODE); } _ansc_memset(param_name, 0, sizeof(param_name)); @@ -335,6 +337,7 @@ int get_Virtual_Interface_FromPSM(ULONG instancenum, ULONG virtInsNum ,DML_VIRTU if(retPsmGet == CCSP_SUCCESS) { _ansc_sscanf(param_value, "%d", &(pVirtIf->IP.IPv4Source)); + WanMgr_ProcessTelemetryMarker(pVirtIf,WAN_INFO_IPv4_CONFIG_TYPE); } _ansc_memset(param_name, 0, sizeof(param_name)); @@ -350,6 +353,7 @@ int get_Virtual_Interface_FromPSM(ULONG instancenum, ULONG virtInsNum ,DML_VIRTU if(retPsmGet == CCSP_SUCCESS) { _ansc_sscanf(param_value, "%d", &(pVirtIf->IP.IPv6Source)); + WanMgr_ProcessTelemetryMarker(pVirtIf,WAN_INFO_IPv6_CONFIG_TYPE); } _ansc_memset(param_name, 0, sizeof(param_name)); @@ -384,6 +388,7 @@ int get_Virtual_Interface_FromPSM(ULONG instancenum, ULONG virtInsNum ,DML_VIRTU if(retPsmGet == CCSP_SUCCESS) { _ansc_sscanf(param_value, "%d", &(pVirtIf->IP.ConnectivityCheckType)); + WanMgr_ProcessTelemetryMarker(pVirtIf,WAN_INFO_CONNECTIVITY_CHECK_TYPE); } } @@ -399,6 +404,7 @@ int get_Remote_Virtual_Interface_FromPSM(ULONG instancenum, ULONG virtInsNum ,DM if(retPsmGet == CCSP_SUCCESS) { _ansc_sscanf(param_value, "%d", &(pVirtIf->IP.ConnectivityCheckType)); + WanMgr_ProcessTelemetryMarker(pVirtIf,WAN_INFO_CONNECTIVITY_CHECK_TYPE); } } @@ -1826,6 +1832,9 @@ int Update_Current_ActiveDNS(char* CurrentActiveDNS) if((fp = fopen(RESOLV_CONF_FILE, "r")) == NULL) { CcspTraceError(("%s %d - Open %s error!\n", __FUNCTION__, __LINE__, RESOLV_CONF_FILE)); +#ifdef ENABLE_FEATURE_TELEMETRY2_0 + t2_event_d("SYST_ERROR_DNSFAIL", 1); +#endif return RETURN_ERR; } @@ -2026,8 +2035,29 @@ ANSC_STATUS Update_Interface_Status() publishCurrentActiveDNS = TRUE; #endif CcspTraceInfo(("%s %d - SYS_INFO_DNS_updated - old : [%s] new : [%s]\n",__FUNCTION__,__LINE__,prevCurrentActiveDNS,CurrentActiveDNS)); + #ifdef ENABLE_FEATURE_TELEMETRY2_0 - t2_event_d("SYS_INFO_DNS_updated", 1); + t2_event_d("SYS_INFO_DNS_updated", 1); + struct timespec uptime; + long long uptime_ms = 0; + char uptime_str[32]="0"; + static bool dns_start_sent = 0; + + + if (!dns_start_sent) { + if (CurrentActiveDNS && strlen(CurrentActiveDNS) > 0 && + strcmp(CurrentActiveDNS, "127.0.0.1") != 0 && + strcmp(CurrentActiveDNS, "::1") != 0 ) { + if (clock_gettime(CLOCK_MONOTONIC, &uptime) == 0) + { + uptime_ms = (long long)uptime.tv_sec * 1000LL + (uptime.tv_nsec / 1000000LL); + } + snprintf(uptime_str, sizeof(uptime_str), "%lld", uptime_ms); + + t2_event_s("SYST_INFO_DNSSTART_split", uptime_str); + dns_start_sent = 1; + } + } #endif } } @@ -2040,6 +2070,12 @@ ANSC_STATUS Update_Interface_Status() strncpy(prevCurrentActiveInterface,pWanDmlData->CurrentActiveInterface, sizeof(prevCurrentActiveInterface) - 1); memset(pWanDmlData->CurrentActiveInterface, 0, sizeof(pWanDmlData->CurrentActiveInterface)); strncpy(pWanDmlData->CurrentActiveInterface,CurrentActiveInterface, sizeof(pWanDmlData->CurrentActiveInterface) - 1); + DML_VIRTUAL_IFACE* pVirtIf = WanMgr_GetVIfByName_VISM_running_locked((devMode == GATEWAY_MODE) ? CurrentActiveInterface : CELLULARMGR_WAN_NAME); + if(pVirtIf != NULL) + { + WanMgr_ProcessTelemetryMarker(pVirtIf,WAN_INFO_WAN_UP); + WanMgr_VirtualIfaceData_release(pVirtIf); + } #ifdef RBUS_BUILD_FLAG_ENABLE publishCurrentActiveInf = TRUE; #endif //RBUS_BUILD_FLAG_ENABLE diff --git a/source/TR-181/middle_layer_src/wanmgr_rdkbus_utils.c b/source/TR-181/middle_layer_src/wanmgr_rdkbus_utils.c index 891fe4a3..feb42c74 100644 --- a/source/TR-181/middle_layer_src/wanmgr_rdkbus_utils.c +++ b/source/TR-181/middle_layer_src/wanmgr_rdkbus_utils.c @@ -59,6 +59,7 @@ #include "wanmgr_data.h" #include "wanmgr_dhcpv4_apis.h" #include "wanmgr_dhcpv6_apis.h" +#include "wanmgr_telemetry.h" #define UPSTREAM_SET_MAX_RETRY_COUNT 10 // max. retry count for Upstream set requests #define DATAMODEL_PARAM_LENGTH 256 @@ -142,6 +143,7 @@ ANSC_STATUS WanMgr_SetDnsConnectivityCheck(BOOL Enable) p_VirtIf->IP.ConnectivityCheckType = type; p_VirtIf->IP.WCC_TypeChanged = TRUE; retStatus = ANSC_STATUS_SUCCESS; + WanMgr_ProcessTelemetryMarker(p_VirtIf,WAN_INFO_CONNECTIVITY_CHECK_TYPE); CcspTraceInfo(("%s-%d: RFC- DNS Connectivity Check %s, Type=%s", __FUNCTION__, __LINE__, (Enable? "Enabled":"Disabled"), (Enable? "TAD":"None"))); } @@ -1009,6 +1011,7 @@ ANSC_STATUS WanMgr_RdkBus_ConfigureVlan(DML_VIRTUAL_IFACE* pVirtIf, BOOL VlanEn if(ret != ANSC_STATUS_SUCCESS) { CcspTraceError(("%s %d DM set %s %s failed\n", __FUNCTION__,__LINE__, acSetParamName, acSetParamValue)); + WanMgr_ProcessTelemetryMarker(pVirtIf,WAN_ERROR_VLAN_CREATION_FAILED); return ANSC_STATUS_FAILURE; } @@ -1191,4 +1194,4 @@ BOOL WanMgr_isBridgeModeEnabled() } return FALSE; -} \ No newline at end of file +} diff --git a/source/TR-181/netmonitor/Makefile.am b/source/TR-181/netmonitor/Makefile.am index 491171fb..b62a3613 100644 --- a/source/TR-181/netmonitor/Makefile.am +++ b/source/TR-181/netmonitor/Makefile.am @@ -25,6 +25,6 @@ netmonitor_CPPFLAGS = -I$(top_srcdir)/source/TR-181/middle_layer_src \ -I$(top_srcdir)/source/TR-181/include \ -I$(top_srcdir)/source/WanManager -netmonitor_CFLAGS = -DFEATURE_SUPPORT_RDKLOG $(DBUS_CFLAGS) $(SYSTEMD_CFLAGS) +netmonitor_CFLAGS = -DFEATURE_SUPPORT_RDKLOG $(SYSTEMD_CFLAGS) netmonitor_SOURCES = network_route_monitor.c -netmonitor_LDADD = -lccsp_common -lrdkloggers $(DBUS_LIBS) $(SYSTEMD_LDFLAGS) -lhal_platform -lapi_dhcpv4c -lwebconfig_framework -lmsgpackc -lnanomsg -lsyscfg -lsysevent -lpthread -lsecure_wrapper +netmonitor_LDADD = -lccsp_common -lrdkloggers $(SYSTEMD_LDFLAGS) -lhal_platform -lapi_dhcpv4c -lwebconfig_framework -lmsgpackc -lnanomsg -lsyscfg -lsysevent -lpthread -lsecure_wrapper diff --git a/source/WanManager/DHCPv6cMsgHandler/dhcpv6c_msg_apis.c b/source/WanManager/DHCPv6cMsgHandler/dhcpv6c_msg_apis.c index 957b17f0..c3a1d824 100644 --- a/source/WanManager/DHCPv6cMsgHandler/dhcpv6c_msg_apis.c +++ b/source/WanManager/DHCPv6cMsgHandler/dhcpv6c_msg_apis.c @@ -56,6 +56,7 @@ #include "wanmgr_dml.h" #include "wanmgr_data.h" #include "dhcpv6c_msg_apis.h" +#include "wanmgr_telemetry.h" /* * Macro definitions @@ -700,7 +701,15 @@ static void * WanMgr_DhcpV6MsgHandler() } else { - WanMgr_MaptParseOpt95Response(dhcpv6_data.sitePrefix, opt95_dBuf, &dhcpv6_data); + if(STATUS_SUCCESS != WanMgr_MaptParseOpt95Response(dhcpv6_data.sitePrefix, opt95_dBuf, &dhcpv6_data)) + { + DML_VIRTUAL_IFACE* pVirtIf = WanMgr_GetVIfByName_VISM_running_locked(dhcpv6_data.ifname); + if(pVirtIf != NULL) + { + WanMgr_ProcessTelemetryMarker(pVirtIf,WAN_ERROR_MAPT_STATUS_FAILED); + WanMgr_VirtualIfaceData_release(pVirtIf); + } + } } #endif // MAPT_UNIFICATION_ENABLED } diff --git a/source/WanManager/Makefile.am b/source/WanManager/Makefile.am index 7b6c526c..4bf0cc2b 100644 --- a/source/WanManager/Makefile.am +++ b/source/WanManager/Makefile.am @@ -28,10 +28,11 @@ wanmanager_CPPFLAGS = -I$(top_srcdir)/source/TR-181/middle_layer_src \ -I$(top_srcdir)/source/WanManager/MaptParsing \ -I${PKG_CONFIG_SYSROOT_DIR}$(includedir)/rbus -wanmanager_CFLAGS = -DFEATURE_SUPPORT_RDKLOG $(DBUS_CFLAGS) $(SYSTEMD_CFLAGS) +wanmanager_CFLAGS = -DFEATURE_SUPPORT_RDKLOG $(SYSTEMD_CFLAGS) wanmanager_CFLAGS += -DGIT_VERSION=\"$(GIT_VERSION)\" -wanmanager_SOURCES = wanmgr_webconfig_apis.c wanmgr_webconfig.c wanmgr_main.c wanmgr_ssp_action.c wanmgr_ssp_messagebus_interface.c wanmgr_core.c wanmgr_controller.c wanmgr_data.c wanmgr_sysevents.c wanmgr_interface_sm.c wanmgr_utils.c wanmgr_net_utils.c wanmgr_dhcpv4_apis.c wanmgr_dhcpv6_apis.c wanmgr_ipc.c wanmgr_dhcpv4_internal.c wanmgr_dhcpv6_internal.c wanmgr_policy_auto_impl.c dm_pack_datamodel.c wanmgr_wan_failover.c wanmgr_policy_parallel_scan_impl.c wanmgr_dhcp_legacy_apis.c -wanmanager_LDADD = $(wanmanager_DEPENDENCIES) -lccsp_common -lrdkloggers $(DBUS_LIBS) $(SYSTEMD_LDFLAGS) -lhal_platform -lapi_dhcpv4c -lnanomsg -lwebconfig_framework -lmsgpackc -lprivilege -lrbus -lsecure_wrapper + +wanmanager_SOURCES = wanmgr_webconfig_apis.c wanmgr_webconfig.c wanmgr_main.c wanmgr_ssp_action.c wanmgr_ssp_messagebus_interface.c wanmgr_core.c wanmgr_controller.c wanmgr_data.c wanmgr_sysevents.c wanmgr_interface_sm.c wanmgr_utils.c wanmgr_net_utils.c wanmgr_dhcpv4_apis.c wanmgr_dhcpv6_apis.c wanmgr_ipc.c wanmgr_dhcpv4_internal.c wanmgr_dhcpv6_internal.c wanmgr_policy_auto_impl.c dm_pack_datamodel.c wanmgr_wan_failover.c wanmgr_policy_parallel_scan_impl.c wanmgr_dhcp_legacy_apis.c wanmgr_telemetry.c wanmgr_t2_telemetry.c +wanmanager_LDADD = $(wanmanager_DEPENDENCIES) -lccsp_common -lrdkloggers $(SYSTEMD_LDFLAGS) -lhal_platform -lapi_dhcpv4c -lnanomsg -lwebconfig_framework -lmsgpackc -lprivilege -lrbus -lsecure_wrapper if WAN_UNIFICATION_ENABLED @@ -46,4 +47,4 @@ if DHCPMANAGER_ENABLED wanmanager_SOURCES += wanmgr_dhcp_event_handler.c else wanmanager_LDADD += -ldhcp_client_utils -endif \ No newline at end of file +endif diff --git a/source/WanManager/wanmgr_data.c b/source/WanManager/wanmgr_data.c index 80b6cabb..1e59874f 100644 --- a/source/WanManager/wanmgr_data.c +++ b/source/WanManager/wanmgr_data.c @@ -75,18 +75,6 @@ void WanMgr_SetConfigData_Default(DML_WANMGR_CONFIG* pWanDmlConfig) pWanDmlConfig->UseWANMACForManagementServices = FALSE; pWanDmlConfig->InterfaceVLANMarkingSupport = FALSE; - /*In Modem/Extender Mode, CurrentActiveInterface should be always Mesh Interface Name*/ -#if defined (RDKB_EXTENDER_ENABLED) - char buf[BUFLEN_16] = {0}; - if( 0 == syscfg_get(NULL, SYSCFG_DEVICE_NETWORKING_MODE, buf, sizeof(buf)) ) - { //1-Extender Mode 0-Gateway Mode - if (atoi(buf) == (MODEM_MODE-1)) - { - strncpy(pWanDmlConfig->CurrentActiveInterface, MESH_IFNAME, sizeof(MESH_IFNAME)); - } - } -#endif - } } @@ -811,6 +799,7 @@ void WanMgr_IfaceData_Init(WanMgr_Iface_Data_t* pIfaceData, UINT iface_index) pWanDmlIface->NoOfVirtIfs = 1; pWanDmlIface->Type = WAN_IFACE_TYPE_UNCONFIGURED; + pWanDmlIface->bSendSelectionTimerExpired = TRUE; } } diff --git a/source/WanManager/wanmgr_dhcp_event_handler.c b/source/WanManager/wanmgr_dhcp_event_handler.c index 92f4e3c9..9c3775cb 100644 --- a/source/WanManager/wanmgr_dhcp_event_handler.c +++ b/source/WanManager/wanmgr_dhcp_event_handler.c @@ -79,11 +79,17 @@ static void copyDhcpv6Data(WANMGR_IPV6_DATA* pDhcpv6Data, const DHCP_MGR_IPV6_MS "| addrAssigned : %-40d |\n" "| prefixAssigned : %-40d |\n" "| domainNameAssigned : %-40d |\n" +#ifdef FEATURE_MAPT "| maptAssigned : %-40d |\n" +#endif "=================================================================\n", leaseInfo->ifname, leaseInfo->address, leaseInfo->nameserver, leaseInfo->nameserver1, leaseInfo->domainName, leaseInfo->sitePrefix, leaseInfo->prefixPltime, leaseInfo->prefixVltime, - leaseInfo->addrAssigned, leaseInfo->prefixAssigned, leaseInfo->domainNameAssigned, leaseInfo->maptAssigned)); + leaseInfo->addrAssigned, leaseInfo->prefixAssigned, leaseInfo->domainNameAssigned +#ifdef FEATURE_MAPT + , leaseInfo->maptAssigned +#endif + )); strncpy(pDhcpv6Data->ifname, leaseInfo->ifname, sizeof(pDhcpv6Data->ifname) - 1); strncpy(pDhcpv6Data->address, leaseInfo->address, sizeof(pDhcpv6Data->address) - 1); diff --git a/source/WanManager/wanmgr_dhcpv6_apis.c b/source/WanManager/wanmgr_dhcpv6_apis.c index 390bc031..fd4a058f 100644 --- a/source/WanManager/wanmgr_dhcpv6_apis.c +++ b/source/WanManager/wanmgr_dhcpv6_apis.c @@ -1895,7 +1895,8 @@ ANSC_STATUS wanmgr_handle_dhcpv6_event_data(DML_VIRTUAL_IFACE * pVirtIf) } // update current IPv6 Data memcpy(&(pVirtIf->IP.Ipv6Data), &(Ipv6DataNew), sizeof(WANMGR_IPV6_DATA)); - pVirtIf->IP.Ipv6Status = WAN_IFACE_IPV6_STATE_UP; + // update IPv6 Status + WanManager_UpdateInterfaceStatus(pVirtIf,WANMGR_IFACE_CONNECTION_IPV6_UP); } #ifdef FEATURE_MAPT diff --git a/source/WanManager/wanmgr_interface_sm.c b/source/WanManager/wanmgr_interface_sm.c index 7534c700..6bbab1a5 100644 --- a/source/WanManager/wanmgr_interface_sm.c +++ b/source/WanManager/wanmgr_interface_sm.c @@ -35,6 +35,7 @@ #include "wanmgr_dhcpv4_apis.h" #include "wanmgr_dhcpv6_apis.h" #include "secure_wrapper.h" +#include "wanmgr_telemetry.h" #ifdef ENABLE_FEATURE_TELEMETRY2_0 #include #endif @@ -48,6 +49,7 @@ #define IPOE_HEALTH_CHECK_V4_STATUS "ipoe_health_check_ipv4_status" #define IPOE_HEALTH_CHECK_V6_STATUS "ipoe_health_check_ipv6_status" #define IPOE_STATUS_FAILED "failed" +#define IPOE_STATUS_IDLE "idle" #endif #define POSTD_START_FILE "/tmp/.postd_started" @@ -370,7 +372,8 @@ static BOOL WanMgr_RestartFindExistingLink (WanMgr_IfaceSM_Controller_t* pWanIfa //TODO : NEW_DESIGN check VLAN status for Cellular p_VirtIf->VLAN.Status = WAN_IFACE_LINKSTATUS_UP; - strncpy(p_VirtIf->Name, CELLULARMGR_WAN_NAME, sizeof(p_VirtIf->Name)); + if(p_VirtIf->Name[0] == '\0') + strncpy(p_VirtIf->Name, CELLULARMGR_WAN_NAME, sizeof(p_VirtIf->Name)); ret = TRUE; } } @@ -660,11 +663,13 @@ void WanManager_UpdateInterfaceStatus(DML_VIRTUAL_IFACE* pVirtIf, wanmgr_iface_s sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_IPV4_TIME_ZONE, pVirtIf->IP.Ipv4Data.timeZone, 0); } #endif + WanMgr_ProcessTelemetryMarker(pVirtIf,WAN_INFO_IPv4_UP); pVirtIf->IP.Ipv4Status = WAN_IFACE_IPV4_STATE_UP; break; } case WANMGR_IFACE_CONNECTION_DOWN: { + WanMgr_ProcessTelemetryMarker(pVirtIf,WAN_ERROR_IPv4_DOWN); pVirtIf->IP.Ipv4Status = WAN_IFACE_IPV4_STATE_DOWN; pVirtIf->IP.Ipv4Changed = FALSE; pVirtIf->IP.Ipv4Renewed = FALSE; @@ -673,11 +678,14 @@ void WanManager_UpdateInterfaceStatus(DML_VIRTUAL_IFACE* pVirtIf, wanmgr_iface_s } case WANMGR_IFACE_CONNECTION_IPV6_UP: { + WanMgr_ProcessTelemetryMarker(pVirtIf,WAN_INFO_IPv6_UP); pVirtIf->IP.Ipv6Status = WAN_IFACE_IPV6_STATE_UP; break; } case WANMGR_IFACE_CONNECTION_IPV6_DOWN: { + WanMgr_ProcessTelemetryMarker(pVirtIf,WAN_ERROR_IPv6_DOWN); + WanMgr_ProcessTelemetryMarker(pVirtIf,WAN_ERROR_MAPT_STATUS_DOWN); pVirtIf->IP.Ipv6Status = WAN_IFACE_IPV6_STATE_DOWN; pVirtIf->IP.Ipv6Changed = FALSE; pVirtIf->IP.Ipv6Renewed = FALSE; @@ -694,6 +702,7 @@ void WanManager_UpdateInterfaceStatus(DML_VIRTUAL_IFACE* pVirtIf, wanmgr_iface_s #if defined(FEATURE_MAPT) || defined(FEATURE_SUPPORT_MAPT_NAT46) case WANMGR_IFACE_MAPT_START: { + WanMgr_ProcessTelemetryMarker(pVirtIf,WAN_INFO_MAPT_STATUS_UP); pVirtIf->MAP.MaptStatus = WAN_IFACE_MAPT_STATE_UP; CcspTraceInfo(("mapt: %s \n", ((iface_status == WANMGR_IFACE_MAPT_START) ? "UP" : (iface_status == WANMGR_IFACE_MAPT_STOP) ? "DOWN" : "N/A"))); @@ -702,6 +711,7 @@ void WanManager_UpdateInterfaceStatus(DML_VIRTUAL_IFACE* pVirtIf, wanmgr_iface_s } case WANMGR_IFACE_MAPT_STOP: { + WanMgr_ProcessTelemetryMarker(pVirtIf,WAN_ERROR_MAPT_STATUS_DOWN); pVirtIf->MAP.MaptStatus = WAN_IFACE_MAPT_STATE_DOWN; // reset MAPT flag pVirtIf->MAP.MaptChanged = FALSE; // reset MAPT flag CcspTraceInfo(("mapt: %s \n", @@ -1355,7 +1365,7 @@ static int wan_setUpIPv6(WanMgr_IfaceSM_Controller_t * pWanIfaceCtrl) } int ret = RETURN_OK; - char buf[BUFLEN_32] = {0}; + char buf[BUFLEN_128] = {0}; DML_WAN_IFACE * pInterface = pWanIfaceCtrl->pIfaceData; DML_VIRTUAL_IFACE* p_VirtIf = WanMgr_getVirtualIfaceById(pInterface->VirtIfList, pWanIfaceCtrl->VirIfIdx); @@ -1376,12 +1386,23 @@ static int wan_setUpIPv6(WanMgr_IfaceSM_Controller_t * pWanIfaceCtrl) { CcspTraceInfo(("%s %d - IPv6 DNS servers configured successfully \n", __FUNCTION__, __LINE__)); } + + sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_IPV6_STATUS, WAN_STATUS_UP, 0); + sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_WAN6_IP_ADDRESS, p_VirtIf->IP.Ipv6Data.address, 0); + snprintf(buf, sizeof(buf), "%s %s", p_VirtIf->IP.Ipv6Data.nameserver, p_VirtIf->IP.Ipv6Data.nameserver1); + sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_IPV6_NS, buf, 0); + if(p_VirtIf->IP.Ipv6Data.ipv6_TimeOffset) + { + snprintf(buf, sizeof(buf), "%d", p_VirtIf->IP.Ipv6Data.ipv6_TimeOffset); + sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_IPV6_TIME_OFFSET, buf, 0); + } sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_IPV6_CONNECTION_STATE, WAN_STATUS_UP, 0); sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_RADVD_RESTART, NULL, 0); sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_DHCP_SERVER_RESTART, NULL, 0); sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_FIREWALL_RESTART, NULL, 0); sysevent_get(sysevent_fd, sysevent_token, SYSEVENT_WAN_STATUS, buf, sizeof(buf)); + //TODO: Firewall IPv6 FORWARD rules are not working if SYSEVENT_WAN_SERVICE_STATUS is set for REMOTE_IFACE. Modify firewall similar for backup interface similar to primary. if (strcmp(buf, WAN_STATUS_STARTED)&& pInterface->IfaceType != REMOTE_IFACE) { @@ -1409,15 +1430,7 @@ static int wan_setUpIPv6(WanMgr_IfaceSM_Controller_t * pWanIfaceCtrl) sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_WAN_SERVICE_STATUS, WAN_STATUS_STARTED, 0); sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_WAN_STATUS, WAN_STATUS_STARTED, 0); - sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_IPV6_STATUS, WAN_STATUS_UP, 0); - sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_WAN6_IP_ADDRESS, p_VirtIf->IP.Ipv6Data.address, 0); - snprintf(buf, sizeof(buf), "%s %s", p_VirtIf->IP.Ipv6Data.nameserver, p_VirtIf->IP.Ipv6Data.nameserver1); - sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_IPV6_NS, buf, 0); - if(p_VirtIf->IP.Ipv6Data.ipv6_TimeOffset) - { - snprintf(buf, sizeof(buf), "%d", p_VirtIf->IP.Ipv6Data.ipv6_TimeOffset); - sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_IPV6_TIME_OFFSET, buf, 0); - } + CcspTraceInfo(("%s %d - wan-status event set to started \n", __FUNCTION__, __LINE__)); @@ -1734,6 +1747,7 @@ static ANSC_STATUS WanMgr_SendMsgTo_ConnectivityCheck(WanMgr_IfaceSM_Controller_ { if(p_VirtIf->IP.Ipv4Renewed == TRUE && (strcmp(IHC_status, IPOE_STATUS_FAILED) == 0)) { + WanMgr_ProcessTelemetryMarker(p_VirtIf,WAN_WARN_CONNECTIVITY_CHECK_STATUS_FAILED_IPV4); //Restarting firewall to add IPOE_HEALTH_CHECK firewall rules. sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_FIREWALL_RESTART, NULL, 0); } @@ -1756,6 +1770,7 @@ static ANSC_STATUS WanMgr_SendMsgTo_ConnectivityCheck(WanMgr_IfaceSM_Controller_ { if(p_VirtIf->IP.Ipv6Renewed == TRUE && (strcmp(IHC_status, IPOE_STATUS_FAILED) == 0)) { + WanMgr_ProcessTelemetryMarker(p_VirtIf,WAN_WARN_CONNECTIVITY_CHECK_STATUS_FAILED_IPV6); //Restarting firewall to add IPOE_HEALTH_CHECK firewall rules. sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_FIREWALL_RESTART, NULL, 0); } @@ -1968,8 +1983,9 @@ static eWanState_t wan_transition_physical_interface_down(WanMgr_IfaceSM_Control if (pInterface->IfaceType != REMOTE_IFACE) //TODO NEW_DESIGN rework for remote interface { WanMgr_RdkBus_ConfigureVlan(p_VirtIf, FALSE); + WanMgr_ProcessTelemetryMarker(p_VirtIf,WAN_ERROR_VLAN_DOWN); /* VLAN link is not created yet if LinkStatus is CONFIGURING. Change it to down. */ - if( p_VirtIf->VLAN.Status == WAN_IFACE_LINKSTATUS_CONFIGURING ) + if( p_VirtIf->VLAN.Status == WAN_IFACE_LINKSTATUS_CONFIGURING || p_VirtIf->VLAN.Status == WAN_IFACE_LINKSTATUS_UP ) { CcspTraceInfo(("%s %d: LinkStatus is still CONFIGURING. Set to down\n", __FUNCTION__, __LINE__)); p_VirtIf->VLAN.Status = WAN_IFACE_LINKSTATUS_DOWN; @@ -2736,6 +2752,7 @@ static eWanState_t wan_transition_mapt_up(WanMgr_IfaceSM_Controller_t* pWanIface if (ret != RETURN_OK) { CcspTraceError(("%s %d - Failed to configure MAP-T \n", __FUNCTION__, __LINE__)); + WanMgr_ProcessTelemetryMarker(WanMgr_getVirtualIfaceById( pInterface->VirtIfList,0),WAN_ERROR_MAPT_STATUS_FAILED); } if (p_VirtIf->IP.Dhcp4cStatus == DHCPC_STARTED) @@ -2875,6 +2892,7 @@ static eWanState_t wan_transition_exit(WanMgr_IfaceSM_Controller_t* pWanIfaceCtr Update_Interface_Status(); CcspTraceInfo(("%s %d - Interface '%s' - EXITING STATE MACHINE\n", __FUNCTION__, __LINE__, pInterface->Name)); + WanMgr_ProcessTelemetryMarker(p_VirtIf,WAN_ERROR_WAN_DOWN); p_VirtIf->Interface_SM_Running = FALSE; return WAN_STATE_EXIT; @@ -2891,6 +2909,7 @@ static eWanState_t wan_transition_standby(WanMgr_IfaceSM_Controller_t* pWanIface DML_WAN_IFACE* pInterface = pWanIfaceCtrl->pIfaceData; DML_VIRTUAL_IFACE* p_VirtIf = WanMgr_getVirtualIfaceById(pInterface->VirtIfList, pWanIfaceCtrl->VirIfIdx); + WanMgr_ProcessTelemetryMarker(p_VirtIf, WAN_INFO_WAN_STANDBY); p_VirtIf->Status = WAN_IFACE_STATUS_STANDBY; if (pWanIfaceCtrl->interfaceIdx != -1) @@ -2961,6 +2980,8 @@ static eWanState_t wan_transition_standby_deconfig_ips(WanMgr_IfaceSM_Controller WanMgr_Configure_accept_ra(p_VirtIf, FALSE); + WanMgr_ProcessTelemetryMarker(p_VirtIf, WAN_INFO_WAN_STANDBY); + p_VirtIf->Status = WAN_IFACE_STATUS_STANDBY; if (pWanIfaceCtrl->interfaceIdx != -1) { diff --git a/source/WanManager/wanmgr_ipc.c b/source/WanManager/wanmgr_ipc.c index ffa4f285..bd2b1442 100644 --- a/source/WanManager/wanmgr_ipc.c +++ b/source/WanManager/wanmgr_ipc.c @@ -25,6 +25,7 @@ #include "wanmgr_data.h" #include "wanmgr_sysevents.h" #include "wanmgr_dhcpv4_apis.h" +#include "wanmgr_telemetry.h" #define WANMGR_MAX_IPC_PROCCESS_TRY 5 #define WANMGR_IPC_PROCCESS_TRY_WAIT_TIME 100000 //us @@ -199,6 +200,14 @@ static ANSC_STATUS WanMgr_IpcNewIhcMsg(ipc_ihc_data_t *pIhcMsg) CcspTraceInfo(("Setting IPV6 Connection state to UP \n")); sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_IPV6_CONNECTION_STATE, WAN_STATUS_UP, 0); } + { + DML_VIRTUAL_IFACE* pVirtIf = WanMgr_GetVIfByName_VISM_running_locked(pIhcMsg->ifName); + if(pVirtIf != NULL) + { + WanMgr_ProcessTelemetryMarker(pVirtIf,WAN_INFO_CONNECTIVITY_CHECK_STATUS_UP_IPV6); + WanMgr_VirtualIfaceData_release(pVirtIf); + } + } break; case IPOE_MSG_IHC_ECHO_IPV4_UP: /* Check if we get the IPv4 connection UP message from the @@ -212,15 +221,61 @@ static ANSC_STATUS WanMgr_IpcNewIhcMsg(ipc_ihc_data_t *pIhcMsg) CcspTraceInfo(("Setting IPv4 Connection state to UP \n")); sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_IPV4_CONNECTION_STATE, WAN_STATUS_UP, 0); } + { + DML_VIRTUAL_IFACE* pVirtIf = WanMgr_GetVIfByName_VISM_running_locked(pIhcMsg->ifName); + if(pVirtIf != NULL) + { + WanMgr_ProcessTelemetryMarker(pVirtIf,WAN_INFO_CONNECTIVITY_CHECK_STATUS_UP_IPV4); + WanMgr_VirtualIfaceData_release(pVirtIf); + } + } break; case IPOE_MSG_IHC_ECHO_FAIL_IPV4: CcspTraceInfo(("[%s-%d] Received IPOE_MSG_IHC_ECHO_FAIL_IPV4 from IHC for intf: %s \n", __FUNCTION__, __LINE__, pIhcMsg->ifName)); + { + DML_VIRTUAL_IFACE* pVirtIf = WanMgr_GetVIfByName_VISM_running_locked(pIhcMsg->ifName); + if(pVirtIf != NULL) + { + WanMgr_ProcessTelemetryMarker(pVirtIf,WAN_WARN_CONNECTIVITY_CHECK_STATUS_FAILED_IPV4); + WanMgr_VirtualIfaceData_release(pVirtIf); + } + } return WanMgr_SetInterfaceStatus(pIhcMsg->ifName, WANMGR_IFACE_CONNECTION_DOWN); break; case IPOE_MSG_IHC_ECHO_FAIL_IPV6: CcspTraceInfo(("[%s-%d] Received IPOE_MSG_IHC_ECHO_FAIL_IPV6 from IHC for intf: %s \n", __FUNCTION__, __LINE__, pIhcMsg->ifName)); + { + DML_VIRTUAL_IFACE* pVirtIf = WanMgr_GetVIfByName_VISM_running_locked(pIhcMsg->ifName); + if(pVirtIf != NULL) + { + WanMgr_ProcessTelemetryMarker(pVirtIf,WAN_WARN_CONNECTIVITY_CHECK_STATUS_FAILED_IPV6); + WanMgr_VirtualIfaceData_release(pVirtIf); + } + } return WanMgr_SetInterfaceStatus(pIhcMsg->ifName, WANMGR_IFACE_CONNECTION_IPV6_DOWN); break; + case IPOE_MSG_IHC_ECHO_IPV4_IDLE: + CcspTraceInfo(("[%s-%d] Received IPOE_MSG_IHC_ECHO_IPV4_IDLE from IHC for intf: %s \n", __FUNCTION__, __LINE__, pIhcMsg->ifName)); + { + DML_VIRTUAL_IFACE* pVirtIf = WanMgr_GetVIfByName_VISM_running_locked(pIhcMsg->ifName); + if(pVirtIf != NULL) + { + WanMgr_ProcessTelemetryMarker(pVirtIf,WAN_WARN_CONNECTIVITY_CHECK_STATUS_IDLE_IPV4); + WanMgr_VirtualIfaceData_release(pVirtIf); + } + } + break; + case IPOE_MSG_IHC_ECHO_IPV6_IDLE: + CcspTraceInfo(("[%s-%d] Received IPOE_MSG_IHC_ECHO_FAIL_IPV4 from IHC for intf: %s \n", __FUNCTION__, __LINE__, pIhcMsg->ifName)); + { + DML_VIRTUAL_IFACE* pVirtIf = WanMgr_GetVIfByName_VISM_running_locked(pIhcMsg->ifName); + if(pVirtIf != NULL) + { + WanMgr_ProcessTelemetryMarker(pVirtIf,WAN_WARN_CONNECTIVITY_CHECK_STATUS_IDLE_IPV6); + WanMgr_VirtualIfaceData_release(pVirtIf); + } + } + break; default: CcspTraceError(("[%s-%d] Invalid message type \n", __FUNCTION__, __LINE__)); return ANSC_STATUS_FAILURE; diff --git a/source/WanManager/wanmgr_main.c b/source/WanManager/wanmgr_main.c index 04bda428..87c9fbe6 100644 --- a/source/WanManager/wanmgr_main.c +++ b/source/WanManager/wanmgr_main.c @@ -324,6 +324,9 @@ int main(int argc, char* argv[]) fputs(cmd, fd); fclose(fd); } +#ifdef ENABLE_FEATURE_TELEMETRY2_0 + t2_init("wanmanager"); +#endif #ifdef INCLUDE_BREAKPAD breakpad_ExceptionHandler(); @@ -379,9 +382,7 @@ int main(int argc, char* argv[]) waitUntilSystemReady(); WanMgrDmlWanWebConfigInit(); -#ifdef ENABLE_FEATURE_TELEMETRY2_0 - t2_init(COMPONENT_NAME_WANMANAGER); -#endif + if ( bRunAsDaemon ) { //MAIN THREAD @@ -397,7 +398,6 @@ int main(int argc, char* argv[]) } } - //CORE FINALISE WanMgr_Core_Finalise(); @@ -412,7 +412,7 @@ int main(int argc, char* argv[]) //DATA DELETE WanMgr_Data_Delete(); - + return 0; } diff --git a/source/WanManager/wanmgr_net_utils.c b/source/WanManager/wanmgr_net_utils.c index 339ade06..55b0e5c9 100644 --- a/source/WanManager/wanmgr_net_utils.c +++ b/source/WanManager/wanmgr_net_utils.c @@ -2661,7 +2661,7 @@ ANSC_STATUS WanManager_get_interface_mac(char *interfaceName, char* macAddress, fgets(fOutput, sizeof(fOutput), fp); fclose(fp); - if((fOutput[0] != '0') && (strlen(fOutput) != 0)) + if((fOutput[0] != '\0') && (strlen(fOutput) != 0)) { /* Remove \n char from the buffer */ if ((ptr = strchr(fOutput, '\n'))) @@ -2669,7 +2669,7 @@ ANSC_STATUS WanManager_get_interface_mac(char *interfaceName, char* macAddress, *ptr = 0; } - if((fOutput[0] != '0') && (strlen(fOutput) != 0)) + if(strlen(fOutput) != 0) { snprintf(macAddress, macAddressSize, "%s", fOutput); CcspTraceInfo(("%s %d: [%s] Interface MAC Address = [%s]\n", __FUNCTION__, __LINE__, interfaceName, macAddress)); diff --git a/source/WanManager/wanmgr_policy_auto_impl.c b/source/WanManager/wanmgr_policy_auto_impl.c index c2110e4f..0aa101f6 100644 --- a/source/WanManager/wanmgr_policy_auto_impl.c +++ b/source/WanManager/wanmgr_policy_auto_impl.c @@ -28,6 +28,7 @@ #include "wanmgr_rdkbus_apis.h" #include "wanmgr_wan_failover.h" #include "wanmgr_net_utils.h" +#include "wanmgr_telemetry.h" /* ---- Global Constants -------------------------- */ #define SELECTION_PROCESS_LOOP_TIMEOUT 250000 // timeout in microseconds. This is the state machine loop interval @@ -896,6 +897,8 @@ static WcAwPolicyState_t Transition_RestartSelectionInterface (WanMgr_Policy_Con { CcspTraceInfo(("%s %d: Resetting FO scan thread\n", __FUNCTION__, __LINE__)); pWanConfigData->data.ResetFailOverScan = TRUE; + DML_WAN_IFACE* pWanIfaceData = &(pWanConfigData->data); + pWanIfaceData->bSendSelectionTimerExpired = TRUE; WanMgrDml_GetConfigData_release(pWanConfigData); } @@ -1110,6 +1113,7 @@ static WcAwPolicyState_t State_WaitForInterface (WanMgr_Policy_Controller_t * pW // timer expired for selected iface but there is another interface that can be used CcspTraceInfo(("%s %d: Validation Timer expired for interface index:%d and there is another iface that can be possibly used as Wan interface\n", __FUNCTION__, __LINE__, pWanController->activeInterfaceIdx)); + WanMgr_ProcessTelemetryMarker(WanMgr_getVirtualIfaceById( pActiveInterface->VirtIfList,0),WAN_WARN_IP_OBTAIN_TIMER_EXPIRED); return Transition_InterfaceInvalid(pWanController); } @@ -1193,6 +1197,7 @@ static WcAwPolicyState_t State_ScanningInterface (WanMgr_Policy_Controller_t * p { CcspTraceInfo(("%s %d: Validation Timer expired for interface index:%d and there is another iface that can be possibly used as Wan interface\n", __FUNCTION__, __LINE__, pWanController->activeInterfaceIdx)); + WanMgr_ProcessTelemetryMarker(WanMgr_getVirtualIfaceById( pActiveInterface->VirtIfList,0),WAN_WARN_IP_OBTAIN_TIMER_EXPIRED); return Transition_InterfaceDeselect(pWanController); } } diff --git a/source/WanManager/wanmgr_policy_autowan_impl.c b/source/WanManager/wanmgr_policy_autowan_impl.c index c966320c..885ec980 100644 --- a/source/WanManager/wanmgr_policy_autowan_impl.c +++ b/source/WanManager/wanmgr_policy_autowan_impl.c @@ -1642,9 +1642,32 @@ static INT StartWanClients(WanMgr_AutoWan_SMInfo_t *pSmInfo) if(ret != 0) { CcspTraceWarning(("%s-%d : Failure writing to /proc file\n", __FUNCTION__, __LINE__)); } +#if defined(INTEL_PUMA7) + if(0 == strncmp(udhcpcEnable, "true", 4)) + { + v_secure_system("killall udhcpc"); + ret = v_secure_system("udhcpc -i %s &", pFixedInterface->VirtIfList->Name); + if(ret != 0) + { + CcspTraceWarning(("%s : Failure in executing command via v_secure_system. ret:[%d] \n",__FUNCTION__, ret)); + } + CcspTraceInfo(("%s %d - udhcpc start inf %s \n", __FUNCTION__, __LINE__,pFixedInterface->VirtIfList->Name)); + } + else + { + v_secure_system("killall ti_udhcpc"); + ret = v_secure_system("ti_udhcpc -plugin /lib/libert_dhcpv4_plugin.so -i %s -H DocsisGateway -p /var/run/eRT_ti_udhcpc.pid -B -b 4 &",pFixedInterface->VirtIfList->Name); + if(ret != 0) + { + CcspTraceWarning(("%s : Failure in executing command via v_secure_system. ret:[%d] \n",__FUNCTION__, ret)); + } + CcspTraceInfo(("%s %d - ti_udhcpc start inf %s \n", __FUNCTION__, __LINE__,pFixedInterface->VirtIfList->Name)); + } +#endif v_secure_system("killall udhcpc"); ret = v_secure_system("udhcpc -i %s &", pFixedInterface->VirtIfList->Name); - if(ret != 0) { + if(ret != 0) + { CcspTraceWarning(("%s : Failure in executing command via v_secure_system. ret:[%d] \n",__FUNCTION__, ret)); } CcspTraceInfo(("%s %d - udhcpc start inf %s \n", __FUNCTION__, __LINE__,pFixedInterface->VirtIfList->Name)); @@ -1696,29 +1719,33 @@ static INT StartWanClients(WanMgr_AutoWan_SMInfo_t *pSmInfo) { v_secure_system("killall udhcpc"); ret = v_secure_system("/sbin/udhcpc -i %s -p /tmp/udhcpc.erouter0.pid -s /etc/udhcpc.script &",pFixedInterface->VirtIfList->Name); - if(ret != 0) { + if(ret != 0) + { CcspTraceWarning(("%s : Failure in executing command via v_secure_system. ret:[%d] \n",__FUNCTION__, ret)); } + CcspTraceInfo(("%s %d - udhcpc start inf %s \n", __FUNCTION__, __LINE__,pFixedInterface->VirtIfList->Name)); } else { v_secure_system("killall ti_udhcpc"); - ret = v_secure_system("ti_udhcpc -plugin /lib/libert_dhcpv4_plugin.so -i %s -H DocsisGateway -p /var/run/eRT_ti_udhcpc.pid -B -b 4 &", - pFixedInterface->VirtIfList->Name); - if(ret != 0) { + ret = v_secure_system("ti_udhcpc -plugin /lib/libert_dhcpv4_plugin.so -i %s -H DocsisGateway -p /var/run/eRT_ti_udhcpc.pid -B -b 4 &",pFixedInterface->VirtIfList->Name); + if(ret != 0) + { CcspTraceWarning(("%s : Failure in executing command via v_secure_system. ret:[%d] \n",__FUNCTION__, ret)); } + CcspTraceInfo(("%s %d - ti_udhcpc start inf %s \n", __FUNCTION__, __LINE__,pFixedInterface->VirtIfList->Name)); } #else - CcspTraceInfo(("%s - mode= %s wanPhyName= %s\n",__FUNCTION__,WanModeStr(WAN_MODE_PRIMARY),wanPhyName)); - + v_secure_system("killall udhcpc"); ret = v_secure_system("udhcpc -i %s &",pFixedInterface->VirtIfList->Name); - if(ret != 0) { + if(ret != 0) + { CcspTraceWarning(("%s : Failure in executing command via v_secure_system. ret:[%d] \n",__FUNCTION__, ret)); } CcspTraceInfo(("%s %d - udhcpc start inf %s \n", __FUNCTION__, __LINE__,pFixedInterface->VirtIfList->Name)); -#endif + +#endif } } break; diff --git a/source/WanManager/wanmgr_policy_parallel_scan_impl.c b/source/WanManager/wanmgr_policy_parallel_scan_impl.c index 98b2e3b4..7c77d22b 100644 --- a/source/WanManager/wanmgr_policy_parallel_scan_impl.c +++ b/source/WanManager/wanmgr_policy_parallel_scan_impl.c @@ -28,6 +28,7 @@ #include "wanmgr_rdkbus_apis.h" #include "wanmgr_wan_failover.h" #include "wanmgr_net_utils.h" +#include "wanmgr_telemetry.h" #define ETH_HW_CONFIGURATION_DM "Device.Ethernet.Interface.%d.Upstream" #define ETH_PHY_PATH_DM "Device.Ethernet.X_RDK_Interface.%d" @@ -613,6 +614,7 @@ static WcPsPolicyState_t Transition_RestartScan (WanMgr_Policy_Controller_t * pW WanMgr_RdkBus_AddIntfToLanBridge(pWanIfaceData->BaseInterface, FALSE); } } + pWanIfaceData->bSendSelectionTimerExpired = TRUE; WanMgrDml_GetIfaceData_release(pWanDmlIfaceData); } } @@ -807,6 +809,14 @@ static WcPsPolicyState_t State_ScanningInterface (WanMgr_Policy_Controller_t * p { /*If timer expired select the highest priority active interface */ CcspTraceInfo(("%s %d SelectionTimeOut expired. Selecting Highest(available) priority interface id(%d)\n", __FUNCTION__, __LINE__, pWanController->activeInterfaceIdx)); + + WanMgr_Iface_Data_t* pWanDmlIfaceData = WanMgr_GetIfaceData_locked(highPriorityValidIface); + if(pWanDmlIfaceData != NULL) + { + DML_WAN_IFACE* pWanIfaceData = &(pWanDmlIfaceData->data); + WanMgr_ProcessTelemetryMarker(WanMgr_getVirtualIfaceById( pWanIfaceData->VirtIfList,0),WAN_WARN_IP_OBTAIN_TIMER_EXPIRED); + WanMgrDml_GetIfaceData_release(pWanDmlIfaceData); + } return Transition_SelectingInterface(pWanController); }else { diff --git a/source/WanManager/wanmgr_t2_telemetry.c b/source/WanManager/wanmgr_t2_telemetry.c new file mode 100644 index 00000000..fd5b3c76 --- /dev/null +++ b/source/WanManager/wanmgr_t2_telemetry.c @@ -0,0 +1,205 @@ +#include "wanmgr_t2_telemetry.h" +#include "wanmgr_rdkbus_utils.h" + +#define BUFFER_LENGTH_256 256 +static char MarkerArguments[BUFFER_LENGTH_256] = {0}; + +/*append api appends key value in pairs, separated by DELIMITER*/ +static void wanmgr_telemetry_append_key_value(char* key, const char* value) +{ + if(value != NULL && strlen(MarkerArguments) < BUFFER_LENGTH_256 ) + { + if(strlen(MarkerArguments)>0) + { + strncat(MarkerArguments,WANMGR_T2_TELEMETRY_MARKER_ARG_DELIMITER,sizeof(MarkerArguments)); + } + strncat(MarkerArguments,key,sizeof(MarkerArguments)); + strncat(MarkerArguments,WANMGR_T2_TELEMETRY_MARKER_KEY_VALUE_DELIMITER,sizeof(MarkerArguments)); + strncat(MarkerArguments,value,sizeof(MarkerArguments)); + } +} + +/*This api processes the Marker struct, + * gets the data required to send to T2 marker*/ +ANSC_STATUS wanmgr_process_T2_telemetry_event(WanMgr_Telemetry_Marker_t *Marker) +{ + DML_WAN_IFACE *pIntf = Marker->pInterface; + DML_VIRTUAL_IFACE *pVirtIntf = Marker->pVirtInterface; + memset(MarkerArguments,0,sizeof(MarkerArguments)); + char tempStr[128] = {0}; + + if(pIntf == NULL || pVirtIntf == NULL) + { + return ANSC_STATUS_FAILURE; + } + + wanmgr_telemetry_append_key_value(WANMGR_T2_PHY_INTERFACE_STRING,pIntf->DisplayName); + wanmgr_telemetry_append_key_value(WANMGR_T2_WAN_INTERFACE_STRING,pIntf->Name); + + switch(Marker->enTelemetryMarkerID) + { + case WAN_ERROR_PHY_DOWN: + if(pIntf->BaseInterfaceStatus == WAN_IFACE_PHY_STATUS_DOWN) + { + return ANSC_STATUS_SUCCESS; + } + break; + + case WAN_INFO_PHY_UP: + if(pIntf->BaseInterfaceStatus == WAN_IFACE_PHY_STATUS_UP) + { + return ANSC_STATUS_SUCCESS; + } + break; + + case WAN_INFO_WAN_UP: + break; + + case WAN_ERROR_WAN_DOWN: + if(!(pIntf->Selection.Status == WAN_IFACE_VALIDATING || + pIntf->Selection.Status == WAN_IFACE_SELECTED || + pIntf->Selection.Status == WAN_IFACE_ACTIVE)) + { + return ANSC_STATUS_SUCCESS; + } + break; + + case WAN_INFO_WAN_STANDBY: + if(pVirtIntf->Status == WAN_IFACE_STATUS_STANDBY) + { + return ANSC_STATUS_SUCCESS; + } + break; + + case WAN_INFO_IPv4_CONFIG_TYPE: + memset(tempStr,0,sizeof(tempStr)); + strcat(tempStr,"IPv4Source-"); + strcat(tempStr,WanMgr_Telemetry_IpSourceStr[pVirtIntf->IP.IPv4Source]); + wanmgr_telemetry_append_key_value(WANMGR_T2_WANMGR_SPLIT_VAL_STRING, tempStr); + break; + + case WAN_INFO_IPv6_CONFIG_TYPE: + memset(tempStr,0,sizeof(tempStr)); + strcat(tempStr,"IPv6Source-"); + strcat(tempStr,WanMgr_Telemetry_IpSourceStr[pVirtIntf->IP.IPv6Source]); + wanmgr_telemetry_append_key_value(WANMGR_T2_WANMGR_SPLIT_VAL_STRING,tempStr); + break; + + case WAN_INFO_CONNECTIVITY_CHECK_TYPE: + wanmgr_telemetry_append_key_value(WANMGR_T2_WANMGR_SPLIT_VAL_STRING,WanMgr_Telemetry_ConnectivityTypeStr[pVirtIntf->IP.ConnectivityCheckType]); + break; + + case WAN_INFO_CONNECTIVITY_CHECK_STATUS_UP_IPV4: + wanmgr_telemetry_append_key_value(WANMGR_T2_WANMGR_SPLIT_VAL_STRING,"IPv4"); + break; + + case WAN_INFO_CONNECTIVITY_CHECK_STATUS_UP_IPV6: + wanmgr_telemetry_append_key_value(WANMGR_T2_WANMGR_SPLIT_VAL_STRING,"IPv6"); + break; + + case WAN_ERROR_CONNECTIVITY_CHECK_STATUS_DOWN_IPV4: + wanmgr_telemetry_append_key_value(WANMGR_T2_WANMGR_SPLIT_VAL_STRING,"IPv4"); + break; + + case WAN_ERROR_CONNECTIVITY_CHECK_STATUS_DOWN_IPV6: + wanmgr_telemetry_append_key_value(WANMGR_T2_WANMGR_SPLIT_VAL_STRING,"IPv6"); + break; + + case WAN_WARN_CONNECTIVITY_CHECK_STATUS_FAILED_IPV4: + wanmgr_telemetry_append_key_value(WANMGR_T2_WANMGR_SPLIT_VAL_STRING,"IPv4"); + break; + + case WAN_WARN_CONNECTIVITY_CHECK_STATUS_FAILED_IPV6: + wanmgr_telemetry_append_key_value(WANMGR_T2_WANMGR_SPLIT_VAL_STRING,"IPv6"); + break; + + case WAN_WARN_CONNECTIVITY_CHECK_STATUS_IDLE_IPV4: + wanmgr_telemetry_append_key_value(WANMGR_T2_WANMGR_SPLIT_VAL_STRING,"IPv4"); + break; + + case WAN_WARN_CONNECTIVITY_CHECK_STATUS_IDLE_IPV6: + wanmgr_telemetry_append_key_value(WANMGR_T2_WANMGR_SPLIT_VAL_STRING,"IPv6"); + break; + + case WAN_INFO_IP_MODE: + wanmgr_telemetry_append_key_value(WANMGR_T2_WANMGR_SPLIT_VAL_STRING,WanMgr_Telemetry_IpModeStr[pVirtIntf->IP.Mode]); + break; + + case WAN_INFO_IPv4_UP: + if(pVirtIntf->IP.Ipv4Status == WAN_IFACE_IPV4_STATE_UP) + { + return ANSC_STATUS_SUCCESS; + } + wanmgr_telemetry_append_key_value(WANMGR_T2_SELECTION_STATUS_STRING,(pIntf->Selection.Status == WAN_IFACE_ACTIVE) ? "Active" : (pIntf->Selection.Status == WAN_IFACE_VALIDATING) ? "Validating" : (pIntf->Selection.Status == WAN_IFACE_SELECTED ) ? "Selected" : "Standby"); + break; + + case WAN_ERROR_IPv4_DOWN: + if(pVirtIntf->IP.Ipv4Status == WAN_IFACE_IPV4_STATE_DOWN) + { + return ANSC_STATUS_SUCCESS; + } + wanmgr_telemetry_append_key_value(WANMGR_T2_SELECTION_STATUS_STRING,(pIntf->Selection.Status == WAN_IFACE_ACTIVE) ? "Active" : (pIntf->Selection.Status == WAN_IFACE_VALIDATING) ? "Validating" : (pIntf->Selection.Status == WAN_IFACE_SELECTED ) ? "Selected" : "Standby"); + break; + + case WAN_INFO_IPv6_UP: + if(pVirtIntf->IP.Ipv6Status == WAN_IFACE_IPV6_STATE_UP) + { + return ANSC_STATUS_SUCCESS; + } + wanmgr_telemetry_append_key_value(WANMGR_T2_SELECTION_STATUS_STRING,(pIntf->Selection.Status == WAN_IFACE_ACTIVE) ? "Active" : (pIntf->Selection.Status == WAN_IFACE_VALIDATING) ? "Validating" : (pIntf->Selection.Status == WAN_IFACE_SELECTED ) ? "Selected" : "Standby"); + break; + + case WAN_ERROR_IPv6_DOWN: + if(pVirtIntf->IP.Ipv6Status == WAN_IFACE_IPV6_STATE_DOWN) + { + return ANSC_STATUS_SUCCESS; + } + wanmgr_telemetry_append_key_value(WANMGR_T2_SELECTION_STATUS_STRING,(pIntf->Selection.Status == WAN_IFACE_ACTIVE) ? "Active" : (pIntf->Selection.Status == WAN_IFACE_VALIDATING) ? "Validating" : (pIntf->Selection.Status == WAN_IFACE_SELECTED ) ? "Selected" : "Standby"); + break; + + case WAN_INFO_MAPT_STATUS_UP: + if(pVirtIntf->MAP.MaptStatus == WAN_IFACE_MAPT_STATE_UP) + { + return ANSC_STATUS_SUCCESS; + } + wanmgr_telemetry_append_key_value(WANMGR_T2_SELECTION_STATUS_STRING,(pIntf->Selection.Status == WAN_IFACE_ACTIVE) ? "Active" : (pIntf->Selection.Status == WAN_IFACE_VALIDATING) ? "Validating" : (pIntf->Selection.Status == WAN_IFACE_SELECTED ) ? "Selected" : "Standby"); + break; + + case WAN_ERROR_MAPT_STATUS_DOWN: + if(pVirtIntf->MAP.MaptStatus == WAN_IFACE_MAPT_STATE_DOWN) + { + return ANSC_STATUS_SUCCESS; + } + wanmgr_telemetry_append_key_value(WANMGR_T2_SELECTION_STATUS_STRING,(pIntf->Selection.Status == WAN_IFACE_ACTIVE) ? "Active" : (pIntf->Selection.Status == WAN_IFACE_VALIDATING) ? "Validating" : (pIntf->Selection.Status == WAN_IFACE_SELECTED ) ? "Selected" : "Standby"); + break; + + case WAN_ERROR_MAPT_STATUS_FAILED: + break; + + case WAN_ERROR_VLAN_DOWN: + if(pVirtIntf->VLAN.Status == WAN_IFACE_LINKSTATUS_DOWN) + { + return ANSC_STATUS_SUCCESS; + } + wanmgr_telemetry_append_key_value(WANMGR_T2_VIRT_WAN_INTERFACE_STRING,pVirtIntf->Name); + break; + + case WAN_ERROR_VLAN_CREATION_FAILED: + wanmgr_telemetry_append_key_value(WANMGR_T2_VIRT_WAN_INTERFACE_STRING,pVirtIntf->Name); + break; + + case WAN_WARN_IP_OBTAIN_TIMER_EXPIRED: + if(pIntf->bSendSelectionTimerExpired != TRUE) + { + return ANSC_STATUS_SUCCESS; + } + pIntf->bSendSelectionTimerExpired = FALSE; + break; + + default: + ; + } + t2_event_s(WanMgr_TelemetryEventStr[Marker->enTelemetryMarkerID],MarkerArguments); + CcspTraceInfo(("%s %d: Successfully sent Telemetry event [%s] with arguments = [%s].\n",__FUNCTION__, __LINE__,WanMgr_TelemetryEventStr[Marker->enTelemetryMarkerID],MarkerArguments)); + return ANSC_STATUS_SUCCESS; +} diff --git a/source/WanManager/wanmgr_t2_telemetry.h b/source/WanManager/wanmgr_t2_telemetry.h new file mode 100644 index 00000000..8a650863 --- /dev/null +++ b/source/WanManager/wanmgr_t2_telemetry.h @@ -0,0 +1,65 @@ +#ifndef _WAN_T2_TELEMETRY_MARKER_H_ +#define _WAN_T2_TELEMETRY_MARKER_H_ + +#include "wanmgr_telemetry.h" + +#define WANMGR_T2_TELEMETRY_MARKER_ARG_DELIMITER "," +#define WANMGR_T2_TELEMETRY_MARKER_KEY_VALUE_DELIMITER ":" +#define WANMGR_T2_PHY_INTERFACE_STRING "PHY_TYPE" +#define WANMGR_T2_WAN_INTERFACE_STRING "WAN_NAME" +#define WANMGR_T2_VIRT_WAN_INTERFACE_STRING "VIRT_WAN_NAME" +#define WANMGR_T2_SELECTION_STATUS_STRING "INTERFACE_SELECTION_STATUS" +#define WANMGR_T2_WANMGR_SPLIT_VAL_STRING "SPLIT_VAL" + +static const char * const WanMgr_TelemetryEventStr[] = +{ + [WAN_INFO_PHY_TYPE] = "WAN_INFO_PHY_TYPE_split", + [WAN_ERROR_PHY_DOWN] = "WAN_ERROR_PHY_DOWN_split", + [WAN_INFO_PHY_UP] = "WAN_INFO_PHY_UP_split", + [WAN_WARN_IP_OBTAIN_TIMER_EXPIRED] = "WAN_WARN_IP_OBTAIN_TIMER_EXPIRED_split", + [WAN_INFO_WAN_UP] = "WAN_INFO_WAN_UP_split", + [WAN_INFO_WAN_STANDBY] = "WAN_INFO_WAN_STANDBY_split", + [WAN_ERROR_WAN_DOWN] = "WAN_ERROR_WAN_DOWN_split", + [WAN_INFO_IPv4_CONFIG_TYPE] = "WAN_INFO_IP_CONFIG_TYPE_split", + [WAN_INFO_IPv6_CONFIG_TYPE] = "WAN_INFO_IP_CONFIG_TYPE_split", + [WAN_INFO_IPv4_UP] = "WAN_INFO_IPv4_UP_split", + [WAN_ERROR_IPv4_DOWN] = "WAN_ERROR_IPv4_DOWN_split", + [WAN_INFO_IPv6_UP] = "WAN_INFO_IPv6_UP_split", + [WAN_ERROR_IPv6_DOWN] = "WAN_ERROR_IPv6_DOWN_split", + [WAN_INFO_IP_MODE] = "WAN_INFO_IP_MODE_split", + [WAN_INFO_CONNECTIVITY_CHECK_TYPE] = "WAN_INFO_CONNECTIVITY_CHECK_TYPE_split", + [WAN_INFO_CONNECTIVITY_CHECK_STATUS_UP_IPV4] = "WAN_INFO_CONNECTIVITY_CHECK_STATUS_UP_split", + [WAN_INFO_CONNECTIVITY_CHECK_STATUS_UP_IPV6] = "WAN_INFO_CONNECTIVITY_CHECK_STATUS_UP_split", + [WAN_ERROR_CONNECTIVITY_CHECK_STATUS_DOWN_IPV4] = "WAN_ERROR_CONNECTIVITY_CHECK_STATUS_DOWN_split", + [WAN_ERROR_CONNECTIVITY_CHECK_STATUS_DOWN_IPV6] = "WAN_ERROR_CONNECTIVITY_CHECK_STATUS_DOWN_split", + [WAN_WARN_CONNECTIVITY_CHECK_STATUS_FAILED_IPV4] = "WAN_WARN_CONNECTIVITY_CHECK_STATUS_FAILED_split", + [WAN_WARN_CONNECTIVITY_CHECK_STATUS_FAILED_IPV6] = "WAN_WARN_CONNECTIVITY_CHECK_STATUS_FAILED_split", + [WAN_WARN_CONNECTIVITY_CHECK_STATUS_IDLE_IPV4] = "WAN_WARN_CONNECTIVITY_CHECK_STATUS_IDLE_split", + [WAN_WARN_CONNECTIVITY_CHECK_STATUS_IDLE_IPV6] = "WAN_WARN_CONNECTIVITY_CHECK_STATUS_IDLE_split", + [WAN_INFO_MAPT_STATUS_UP] = "WAN_INFO_MAPT_STATUS_UP_split", + [WAN_ERROR_MAPT_STATUS_DOWN] = "WAN_ERROR_MAPT_STATUS_DOWN_split", + [WAN_ERROR_MAPT_STATUS_FAILED] = "WAN_ERROR_MAPT_STATUS_FAILED_split", + [WAN_ERROR_VLAN_DOWN] = "WAN_ERROR_VLAN_DOWN_split", + [WAN_ERROR_VLAN_CREATION_FAILED] = "WAN_ERROR_VLAN_CREATION_FAILED_split" +}; +static const char * const WanMgr_Telemetry_IpSourceStr[] = +{ + [DML_WAN_IP_SOURCE_STATIC] = "STATIC", + [DML_WAN_IP_SOURCE_DHCP] = "DHCP", + [DML_WAN_IP_SOURCE_PPP] = "PPP" +}; +static const char * const WanMgr_Telemetry_IpModeStr[] = +{ + [DML_WAN_IP_MODE_IPV4_ONLY] = "IPV4_ONLY", + [DML_WAN_IP_MODE_IPV6_ONLY] = "IPV6_ONLY", + [DML_WAN_IP_MODE_DUAL_STACK] = "DUAL_STACK", + [DML_WAN_IP_MODE_NO_IP] = "NO_IP" +}; + +static const char * const WanMgr_Telemetry_ConnectivityTypeStr[] = +{ + [WAN_CONNECTIVITY_TYPE_NO_CHECK] = "NO_CHECK", + [WAN_CONNECTIVITY_TYPE_IHC] = "IHC", + [WAN_CONNECTIVITY_TYPE_TAD] = "DNS" +}; +#endif //_WAN_T2_TELEMETRY_MARKER_H_ diff --git a/source/WanManager/wanmgr_telemetry.c b/source/WanManager/wanmgr_telemetry.c new file mode 100644 index 00000000..dc2c801b --- /dev/null +++ b/source/WanManager/wanmgr_telemetry.c @@ -0,0 +1,44 @@ +#include "wanmgr_telemetry.h" +#include "wanmgr_rdkbus_utils.h" +#include "wanmgr_data.h" +#ifdef ENABLE_FEATURE_TELEMETRY2_0 +#include "wanmgr_t2_telemetry.h" +#endif + +/* A generic api for telemetry marker, + * it gets the pVirtIf, fills necessary struct info and + * sends them to appropriate telemetry api (either T2 or T3 and so on) + * to be further processed.*/ + +ANSC_STATUS WanMgr_ProcessTelemetryMarker( DML_VIRTUAL_IFACE *pVirtIf , WanMgr_TelemetryEvent_t telemetry_marker) +{ + if(pVirtIf == NULL) + { + return ANSC_STATUS_FAILURE; + } + WanMgr_Iface_Data_t* pWanDmlIfaceData = WanMgr_GetIfaceData_locked(pVirtIf->baseIfIdx); + if(pWanDmlIfaceData == NULL) + { + return ANSC_STATUS_FAILURE; + } + DML_WAN_IFACE *pIntf = &(pWanDmlIfaceData->data); + WanMgrDml_GetIfaceData_release(pWanDmlIfaceData); + + WanMgr_Telemetry_Marker_t Marker = {0}; + Marker.pVirtInterface = pVirtIf; + Marker.pInterface = pIntf; + Marker.enTelemetryMarkerID = telemetry_marker; + +#ifdef ENABLE_FEATURE_TELEMETRY2_0 + if(ANSC_STATUS_FAILURE == wanmgr_process_T2_telemetry_event(&Marker)) + { + CcspTraceError(("%s %d: ERROR processing telemetry event %s.\n",__FUNCTION__, __LINE__,WanMgr_TelemetryEventStr[Marker.enTelemetryMarkerID])); + } + else + { + CcspTraceInfo(("%s %d: SUCCESS processing telemetry event %s.\n",__FUNCTION__, __LINE__,WanMgr_TelemetryEventStr[Marker.enTelemetryMarkerID])); + } +#endif + + return ANSC_STATUS_SUCCESS; +} diff --git a/source/WanManager/wanmgr_telemetry.h b/source/WanManager/wanmgr_telemetry.h new file mode 100644 index 00000000..8ebeac38 --- /dev/null +++ b/source/WanManager/wanmgr_telemetry.h @@ -0,0 +1,47 @@ +#ifndef _WAN_TELEMETRY_MARKER_H_ +#define _WAN_TELEMETRY_MARKER_H_ +#include "ansc_platform.h" +#include "ansc_string_util.h" +#include "wanmgr_dml.h" + +typedef enum WanMgr_TelemetryEvent +{ + WAN_INFO_PHY_TYPE = 1, + WAN_ERROR_PHY_DOWN, + WAN_INFO_PHY_UP, + WAN_WARN_IP_OBTAIN_TIMER_EXPIRED, + WAN_INFO_WAN_UP, + WAN_INFO_WAN_STANDBY, + WAN_ERROR_WAN_DOWN, + WAN_INFO_IPv4_CONFIG_TYPE, + WAN_INFO_IPv6_CONFIG_TYPE, + WAN_INFO_IPv4_UP, + WAN_ERROR_IPv4_DOWN, + WAN_INFO_IPv6_UP, + WAN_ERROR_IPv6_DOWN, + WAN_INFO_IP_MODE, + WAN_INFO_CONNECTIVITY_CHECK_TYPE, + WAN_INFO_CONNECTIVITY_CHECK_STATUS_UP_IPV4, + WAN_INFO_CONNECTIVITY_CHECK_STATUS_UP_IPV6, + WAN_ERROR_CONNECTIVITY_CHECK_STATUS_DOWN_IPV4, + WAN_ERROR_CONNECTIVITY_CHECK_STATUS_DOWN_IPV6, + WAN_WARN_CONNECTIVITY_CHECK_STATUS_FAILED_IPV4, + WAN_WARN_CONNECTIVITY_CHECK_STATUS_FAILED_IPV6, + WAN_WARN_CONNECTIVITY_CHECK_STATUS_IDLE_IPV4, + WAN_WARN_CONNECTIVITY_CHECK_STATUS_IDLE_IPV6, + WAN_INFO_MAPT_STATUS_UP, + WAN_ERROR_MAPT_STATUS_DOWN, + WAN_ERROR_MAPT_STATUS_FAILED, + WAN_ERROR_VLAN_DOWN, + WAN_ERROR_VLAN_CREATION_FAILED +}WanMgr_TelemetryEvent_t; + +typedef struct _WANMGR_TELEMETRY_MARKER_ +{ + WanMgr_TelemetryEvent_t enTelemetryMarkerID; + DML_WAN_IFACE *pInterface; + DML_VIRTUAL_IFACE *pVirtInterface; +} WanMgr_Telemetry_Marker_t; + +ANSC_STATUS WanMgr_ProcessTelemetryMarker(DML_VIRTUAL_IFACE* pVirtIf, WanMgr_TelemetryEvent_t telemetry_marker); +#endif //_WAN_TELEMETRY_MARKER_H_ diff --git a/source/WanManager/wanmgr_webconfig_apis.c b/source/WanManager/wanmgr_webconfig_apis.c index c1806327..95c0cfab 100644 --- a/source/WanManager/wanmgr_webconfig_apis.c +++ b/source/WanManager/wanmgr_webconfig_apis.c @@ -27,14 +27,17 @@ #include "ccsp_syslog.h" #include "ccsp_message_bus.h" #include "ccsp_base_api.h" -#include "wanmgr_dml_iface_apis.h" #include "wanmgr_net_utils.h" #include "wanmgr_webconfig_apis.h" #include "wanmgr_webconfig.h" #include "wanmgr_data.h" #include "wanmgr_dml_apis.h" #include "messagebus_interface_helper.h" - +#if defined(WAN_MANAGER_UNIFICATION_ENABLED) +#include "wanmgr_dml_iface_v2_apis.h" +#else +#include "wanmgr_dml_iface_apis.h" +#endif /** WAN_MANAGER_UNIFICATION_ENABLED */ /* WanMgr_Process_Webconfig_Request: */ /**