From ba9f2e8022e6226f5d5ff6f86e9eba6b179bd4fe Mon Sep 17 00:00:00 2001 From: KavyaShivalingaiah Date: Mon, 11 Aug 2025 21:05:18 +0530 Subject: [PATCH 01/16] SHARMAN-3454 : Wanmanager gets Crashed and Not able to reach internet on LAN and WAN due to webconfig post (#139) Reason for change: wanmanager crashes when webconfig blob request is processed. Test Procedure: Updated in Jira. Risks: none Priority: P2 Signed-off-by: kavya.shivalingaiah@sky.uk --- source/WanManager/wanmgr_webconfig_apis.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) 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: */ /** From ddd5ba7b642ae3c43a7ed226588960e2a2d35f91 Mon Sep 17 00:00:00 2001 From: ksaipr036 Date: Thu, 14 Aug 2025 20:06:09 +0530 Subject: [PATCH 02/16] RDKBACCL-907: [TDK][AUTO][BPI] CcspAdvSecuritySsp keeps restarting and eth_wan_mac value is not updated (#138) Reason for Change: BPI Device Mac is not getting updated in eth_wan_mac sysevent and in AdvSecurity logs Test Procedure: Build should get compile and eth_wan_mac value should be board MAC address Risks: Low Signed-off-by: ksaipr036 --- source/WanManager/wanmgr_net_utils.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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)); From d60a0158e61b2518a07186438b693f6d4a5a051e Mon Sep 17 00:00:00 2001 From: rdkcmf Date: Mon, 18 Aug 2025 14:50:12 +0100 Subject: [PATCH 03/16] Deploy cla action (#128) --- .github/workflows/cla.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .github/workflows/cla.yml diff --git a/.github/workflows/cla.yml b/.github/workflows/cla.yml new file mode 100644 index 00000000..05504793 --- /dev/null +++ b/.github/workflows/cla.yml @@ -0,0 +1,13 @@ +name: "CLA" +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@main + secrets: + PERSONAL_ACCESS_TOKEN: ${{ secrets.CLA_ASSISTANT }} \ No newline at end of file From b4ab8d13ff17464778d71db33c6464827d245654 Mon Sep 17 00:00:00 2001 From: pradeeptakdas <37864641+pradeeptakdas@users.noreply.github.com> Date: Tue, 19 Aug 2025 12:10:17 -0400 Subject: [PATCH 04/16] RDKBDEV-3234: remove dependency on dbus (#129) * RDKBDEV-3234: remove dependency on dbus Reason for change: remove dependency on dbus Test Proedure: Sanity. Risks: None. Signed-off-by: Andre McCurdy * Update Makefile.am --------- Signed-off-by: Andre McCurdy Co-authored-by: Andre McCurdy Co-authored-by: Augusto S. Mainardi <115101745+guto86@users.noreply.github.com> --- configure.ac | 2 -- source/TR-181/netmonitor/Makefile.am | 4 ++-- source/WanManager/Makefile.am | 7 ++++--- 3 files changed, 6 insertions(+), 7 deletions(-) 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/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/Makefile.am b/source/WanManager/Makefile.am index 7b6c526c..bcbe84b1 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_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 From ea213bd8f85c480280379ea98973e984250b082c Mon Sep 17 00:00:00 2001 From: sindhu-krishnan <102755514+sindhu-krishnan@users.noreply.github.com> Date: Tue, 19 Aug 2025 21:48:43 +0530 Subject: [PATCH 05/16] RDKB-60124 : Add T2 for DNS (#140) * Update wanmgr_rdkbus_apis.c * Update wanmgr_rdkbus_apis.c * Update wanmgr_rdkbus_apis.c * Update wanmgr_rdkbus_apis.c * Update wanmgr_rdkbus_apis.c * Update wanmgr_rdkbus_apis.c * Update wanmgr_rdkbus_apis.c * Update wanmgr_rdkbus_apis.c * Update wanmgr_rdkbus_apis.c * Update wanmgr_rdkbus_apis.c * Update wanmgr_rdkbus_apis.c * Update wanmgr_rdkbus_apis.c * Update wanmgr_rdkbus_apis.c * Update wanmgr_rdkbus_apis.c * Update wanmgr_rdkbus_apis.c * Update wanmgr_rdkbus_apis.c * Update wanmgr_rdkbus_apis.c --------- Co-authored-by: Augusto S. Mainardi <115101745+guto86@users.noreply.github.com> --- .../middle_layer_src/wanmgr_rdkbus_apis.c | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) 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..72b7297f 100644 --- a/source/TR-181/middle_layer_src/wanmgr_rdkbus_apis.c +++ b/source/TR-181/middle_layer_src/wanmgr_rdkbus_apis.c @@ -1826,6 +1826,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 +2029,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", uptime_str); + dns_start_sent = 1; + } + } #endif } } From 624f9bdb6d9f42e7de1772eda35b08496922be01 Mon Sep 17 00:00:00 2001 From: KavyaShivalingaiah Date: Tue, 19 Aug 2025 21:55:05 +0530 Subject: [PATCH 06/16] RDKB-58521 : WAN Manager Telemetry Markers 2.0 - Phase 1 (#141) * RDKB-58521 : WAN Manager Telemetry Markers 2.0 - Phase 1 Reason for change: Implementing Telemetry support for Wanmanager. Scalable to handle further telemetry versions Test Procedure: Updated in Jira. Risks: none Priority: P1 Signed-off-by: kavya.shivalingaiah@sky.uk * RDKB-58521 : WAN Manager Telemetry Markers 2.0 - Phase 1 Reason for change: Implementing Telemetry support for Wanmanager. Scalable to handle further telemetry versions Test Procedure: Updated in Jira. Risks: none Priority: P1 Signed-off-by: kavya.shivalingaiah@sky.uk --------- Signed-off-by: kavya.shivalingaiah@sky.uk Co-authored-by: Augusto S. Mainardi <115101745+guto86@users.noreply.github.com> --- source/TR-181/include/wanmgr_dml.h | 1 + .../wanmgr_dml_iface_v2_apis.c | 7 +- .../wanmgr_rbus_handler_apis.c | 59 ++++- .../middle_layer_src/wanmgr_rdkbus_apis.c | 14 +- .../middle_layer_src/wanmgr_rdkbus_utils.c | 5 +- .../DHCPv6cMsgHandler/dhcpv6c_msg_apis.c | 11 +- source/WanManager/Makefile.am | 4 +- source/WanManager/wanmgr_data.c | 13 +- source/WanManager/wanmgr_dhcpv6_apis.c | 3 +- source/WanManager/wanmgr_interface_sm.c | 19 +- source/WanManager/wanmgr_ipc.c | 55 +++++ source/WanManager/wanmgr_policy_auto_impl.c | 5 + .../wanmgr_policy_parallel_scan_impl.c | 10 + source/WanManager/wanmgr_t2_telemetry.c | 205 ++++++++++++++++++ source/WanManager/wanmgr_t2_telemetry.h | 65 ++++++ source/WanManager/wanmgr_telemetry.c | 44 ++++ source/WanManager/wanmgr_telemetry.h | 47 ++++ 17 files changed, 546 insertions(+), 21 deletions(-) create mode 100644 source/WanManager/wanmgr_t2_telemetry.c create mode 100644 source/WanManager/wanmgr_t2_telemetry.h create mode 100644 source/WanManager/wanmgr_telemetry.c create mode 100644 source/WanManager/wanmgr_telemetry.h 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 72b7297f..1b0a2939 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); } } @@ -2064,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/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 bcbe84b1..4bf0cc2b 100644 --- a/source/WanManager/Makefile.am +++ b/source/WanManager/Makefile.am @@ -31,8 +31,8 @@ wanmanager_CPPFLAGS = -I$(top_srcdir)/source/TR-181/middle_layer_src \ 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 $(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 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_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..7f2b6e90 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" @@ -660,11 +662,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 +677,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 +701,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 +710,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", @@ -1734,6 +1743,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 +1766,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 +1979,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 +2748,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 +2888,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 +2905,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 +2976,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_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_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_ From e18f3a204c1a7cc49412a0c43bc72f480ea3541a Mon Sep 17 00:00:00 2001 From: KavyaShivalingaiah Date: Fri, 29 Aug 2025 16:34:23 +0530 Subject: [PATCH 07/16] CMXB7-6291:Gateway operation mode changes from Docsis to Ethwan when XLE connected on Port 4 (#143) * CMXB7-6291:Gateway operation mode changes from Docsis to Ethwan when XLE connected on Port 4 Reason for change: Added logic to execute ti_udhcpc if intel flag is defined. Test Procedure: Updated in Jira. Risks: none Priority: P1 Signed-off-by: kavya.shivalingaiah@sky.uk * CMXB7-6291:Gateway operation mode changes from Docsis to Ethwan when XLE connected on Port 4 Reason for change: Added logic to execute ti_udhcpc if intel flag is defined. Test Procedure: Updated in Jira. Risks: none Priority: P1 Signed-off-by: kavya.shivalingaiah@sky.uk * CMXB7-6291:Gateway operation mode changes from Docsis to Ethwan when XLE connected on Port 4 Reason for change: Added logic to execute ti_udhcpc if intel flag is defined. Test Procedure: Updated in Jira. Risks: none Priority: P1 Signed-off-by: kavya.shivalingaiah@sky.uk * CMXB7-6291:Gateway operation mode changes from Docsis to Ethwan when XLE connected on Port 4 Reason for change: Added logic to execute ti_udhcpc if intel flag is defined. Test Procedure: Updated in Jira. Risks: none Priority: P1 Signed-off-by: kavya.shivalingaiah@sky.uk * CMXB7-6291:Gateway operation mode changes from Docsis to Ethwan when XLE connected on Port 4 Reason for change: Added logic to execute ti_udhcpc if intel flag is defined. Test Procedure: Updated in Jira. Risks: none Priority: P1 Signed-off-by: kavya.shivalingaiah@sky.uk * CMXB7-6291:Gateway operation mode changes from Docsis to Ethwan when XLE connected on Port 4 Reason for change: Added logic to execute ti_udhcpc if intel flag is defined. Test Procedure: Updated in Jira. Risks: none Priority: P1 Signed-off-by: kavya.shivalingaiah@sky.uk * CMXB7-6291:Gateway operation mode changes from Docsis to Ethwan when XLE connected on Port 4 Reason for change: Added logic to execute ti_udhcpc if intel flag is defined. Test Procedure: Updated in Jira. Risks: none Priority: P1 Signed-off-by: kavya.shivalingaiah@sky.uk --------- Signed-off-by: kavya.shivalingaiah@sky.uk --- .../WanManager/wanmgr_policy_autowan_impl.c | 45 +++++++++++++++---- 1 file changed, 36 insertions(+), 9 deletions(-) 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; From cdbbd4ae1f9843b699a9117ee97e7f7d8f0d2344 Mon Sep 17 00:00:00 2001 From: sindhu-krishnan <102755514+sindhu-krishnan@users.noreply.github.com> Date: Wed, 3 Sep 2025 16:01:59 +0530 Subject: [PATCH 08/16] RDKB-60124: T2 event Marker for DNS Readiness (#144) * Update wanmgr_rdkbus_apis.c --------- Co-authored-by: Augusto S. Mainardi <115101745+guto86@users.noreply.github.com> --- source/TR-181/middle_layer_src/wanmgr_rdkbus_apis.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 1b0a2939..61384c56 100644 --- a/source/TR-181/middle_layer_src/wanmgr_rdkbus_apis.c +++ b/source/TR-181/middle_layer_src/wanmgr_rdkbus_apis.c @@ -2054,7 +2054,7 @@ ANSC_STATUS Update_Interface_Status() } snprintf(uptime_str, sizeof(uptime_str), "%lld", uptime_ms); - t2_event_s("SYST_INFO_DNSSTART", uptime_str); + t2_event_s("SYST_INFO_DNSSTART_split", uptime_str); dns_start_sent = 1; } } From 2c09e50256b4913304cd6d647389bab0939a0aa0 Mon Sep 17 00:00:00 2001 From: Stephen Barrett Date: Fri, 5 Sep 2025 16:10:48 +0100 Subject: [PATCH 09/16] Update CODEOWNERS --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From e8c147d299517edb86ad828255cdc4f994e82e1a Mon Sep 17 00:00:00 2001 From: LakshminarayananShenbagaraj Date: Wed, 10 Sep 2025 11:44:15 +0100 Subject: [PATCH 10/16] RDKB-60436 : Cold Standby Support in WAN Manager for WiFi Hotspot Failover. Reason for change: RDKB-59763 - Develop that US acceptance criteria. Test Procedure: Build should passed WANManager functionality should work without any issue Risks: Medium Signed-off-by: LakshminarayananShenbagaraj --- .../TR-181/netmonitor/network_route_monitor.c | 84 +++++- source/WanManager/wanmgr_interface_sm.c | 251 ++++++++++++++---- 2 files changed, 284 insertions(+), 51 deletions(-) diff --git a/source/TR-181/netmonitor/network_route_monitor.c b/source/TR-181/netmonitor/network_route_monitor.c index 5ba2f54d..957377d7 100644 --- a/source/TR-181/netmonitor/network_route_monitor.c +++ b/source/TR-181/netmonitor/network_route_monitor.c @@ -19,7 +19,11 @@ /* ---- Include Files ---------------------------------------- */ #include +#include +#include #include +#include +#include #include "ipc_msg.h" #include "network_route_monitor.h" #include "ansc_platform.h" @@ -39,6 +43,7 @@ static bool g_toggle_flag = TRUE; #define LOOP_TIMEOUT 100000 // timeout in milliseconds. This is the state machine loop interval #define SYSEVENT_IPV6_TOGGLE "ipv6Toggle" +#define SYSEVENT_IPV6_ADDR_UPDATE "ipv6AddressUpdate" #define SYSEVENT_OPEN_MAX_RETRIES 6 #define SE_SERVER_WELL_KNOWN_PORT 52367 #define SE_VERSION 1 @@ -64,6 +69,7 @@ static bool g_toggle_flag = TRUE; #endif /* ---- Private Function Prototypes -------------------------- */ static void parse_rtattr(struct rtattr *tb[], int max, struct rtattr *rta, int len); // Parse the route entries +static ANSC_STATUS parse_addrattr(struct nlmsghdr *nlh); // Parse the interface address entries static ANSC_STATUS isDefaultGatewaypresent(struct nlmsghdr* nlmsgHdr); // check for default gateway #if defined(FEATURE_MAPT) && defined(NAT46_KERNEL_SUPPORT) @@ -182,6 +188,74 @@ static void parse_rtattr(struct rtattr *tb[], int max, struct rtattr *rta, int l } } +static ANSC_STATUS parse_addrattr(struct nlmsghdr *nlh) +{ + ANSC_STATUS ret = ANSC_STATUS_FAILURE; + struct ifaddrmsg *ifa = NLMSG_DATA(nlh); + char ifname[IF_NAMESIZE], + ipv6_addr[INET6_ADDRSTRLEN], + eventInfo[BUFLEN_512] = {0}; + unsigned int prefix_length = 0, + pref_lifetime = 0, + valid_lifetime = 0; + + //Allow only for Global Scope + if (ifa->ifa_scope != RT_SCOPE_UNIVERSE) { + return ret; + } + + if (if_indextoname(ifa->ifa_index, ifname) == NULL) { + DBG_MONITOR_PRINT("%s-%d [ADDR EVENT] Failed to retreive interface name for ifindex=%d\n", __FUNCTION__, __LINE__, ifa->ifa_index); + return ret; + } + + //DBG_MONITOR_PRINT("%s-%d [ADDR EVENT] ifindex=%d name=%s family=%d\n", __FUNCTION__, __LINE__, ifa->ifa_index, ifname, ifa->ifa_family); + + int len = nlh->nlmsg_len - NLMSG_LENGTH(sizeof(*ifa)); + struct rtattr *rta = IFA_RTA(ifa); + + for (; RTA_OK(rta, len); rta = RTA_NEXT(rta, len)) { + if (rta->rta_type == IFA_ADDRESS) { + if (ifa->ifa_family == AF_INET6) { + inet_ntop(AF_INET6, RTA_DATA(rta), ipv6_addr, sizeof(ipv6_addr)); + + //Ignore link-local & multicast addresses + if (strncmp(ipv6_addr, "fe80", 4) == 0 || strncmp(ipv6_addr, "ff", 2) == 0) { + continue; + } + + prefix_length = ifa->ifa_prefixlen; + DBG_MONITOR_PRINT("%s-%d [ADDR EVENT] IPv6 address: %s/%d\n", __FUNCTION__, __LINE__, ipv6_addr, ifa->ifa_prefixlen); + } + } + if (rta->rta_type == IFA_CACHEINFO) { + struct ifa_cacheinfo *ci = RTA_DATA(rta); + pref_lifetime = ci->ifa_prefered; + valid_lifetime = ci->ifa_valid; + DBG_MONITOR_PRINT("%s-%d [ADDR EVENT] preferred_lft=%u sec, valid_lft=%u sec\n", + __FUNCTION__, __LINE__, + ci->ifa_prefered, ci->ifa_valid); + } + } + + if (nlh->nlmsg_type == RTM_NEWADDR) + { + snprintf(eventInfo, sizeof(eventInfo), "NEWADDR|%s|%s|%u|%u|%u", ifname, ipv6_addr, prefix_length, pref_lifetime, valid_lifetime); + sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_IPV6_ADDR_UPDATE, eventInfo, 0); + DBG_MONITOR_PRINT("%s-%d [ADDR EVENT] RTM_NEWADDR (new/updated address) for '%s' interface, Event '%s' Info '%s'\n", __FUNCTION__, __LINE__, ifname, SYSEVENT_IPV6_ADDR_UPDATE, eventInfo); + ret = ANSC_STATUS_SUCCESS; + } + else if (nlh->nlmsg_type == RTM_DELADDR) + { + snprintf(eventInfo, sizeof(eventInfo), "DELADDR|%s|%s|%u|%u|%u", ifname, ipv6_addr, prefix_length, pref_lifetime, valid_lifetime); + sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_IPV6_ADDR_UPDATE, eventInfo, 0); + DBG_MONITOR_PRINT("%s-%d [ADDR EVENT] RTM_DELADDR (address removed/expired) for '%s' interface, Event '%s' Info '%s'\n", __FUNCTION__, __LINE__, ifname, SYSEVENT_IPV6_ADDR_UPDATE, eventInfo); + ret = ANSC_STATUS_SUCCESS; + } + + return ret; +} + static ANSC_STATUS isDefaultGatewaypresent(struct nlmsghdr* nlmsgHdr) { struct rtmsg* route_entry = NLMSG_DATA(nlmsgHdr); @@ -225,7 +299,7 @@ static ANSC_STATUS NetMonitor_InitNetlinkRouteMonitorFd() memset(&addr, 0, sizeof(addr)); addr.nl_family = AF_NETLINK; - addr.nl_groups = RTMGRP_IPV6_ROUTE; + addr.nl_groups = RTMGRP_IPV6_ROUTE | RTMGRP_IPV6_IFADDR; if (0 > bind(netlinkRouteMonitorFd, (struct sockaddr *) &addr, sizeof(addr))) { DBG_MONITOR_PRINT("%s Failed to bind netlink socket: %s\n", __FUNCTION__, strerror(errno)); @@ -350,6 +424,14 @@ static void NetMonitor_ProcessNetlinkRouteMonitorFd() } break; } + case RTM_NEWADDR: + case RTM_DELADDR: + { + DBG_MONITOR_PRINT("%s-%d: Trace \n", __FUNCTION__, __LINE__); + parse_addrattr(nl_msgHdr); + DBG_MONITOR_PRINT("%s-%d: Trace \n", __FUNCTION__, __LINE__); + break; + } default: break; } diff --git a/source/WanManager/wanmgr_interface_sm.c b/source/WanManager/wanmgr_interface_sm.c index 7f2b6e90..e069b32e 100644 --- a/source/WanManager/wanmgr_interface_sm.c +++ b/source/WanManager/wanmgr_interface_sm.c @@ -35,7 +35,6 @@ #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 @@ -49,7 +48,6 @@ #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" @@ -84,6 +82,8 @@ static eWanState_t wan_state_mapt_active(WanMgr_IfaceSM_Controller_t* pWanIfaceC static eWanState_t wan_state_refreshing_wan(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); static eWanState_t wan_state_deconfiguring_wan(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); static eWanState_t wan_state_exit(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); +static eWanState_t wan_state_phy_down(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); +static eWanState_t wan_state_phy_configuring(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); /*WAN Manager Transitions*/ static eWanState_t wan_transition_start(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); @@ -99,6 +99,7 @@ static eWanState_t wan_transition_ipv6_down(WanMgr_IfaceSM_Controller_t* pWanIfa static eWanState_t wan_transition_dual_stack_down(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); static eWanState_t wan_transition_standby(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); static eWanState_t wan_transition_standby_deconfig_ips(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); +static eWanState_t wan_transition_vlan_configure(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); #if defined(FEATURE_MAPT) || defined(FEATURE_SUPPORT_MAPT_NAT46) static eWanState_t wan_transition_mapt_feature_refresh(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); @@ -106,6 +107,9 @@ static eWanState_t wan_transition_mapt_up(WanMgr_IfaceSM_Controller_t* pWanIface static eWanState_t wan_transition_mapt_down(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); extern int mapt_feature_enable_changed; #endif //FEATURE_MAPT +static eWanState_t wan_transition_configuring_interface(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); +static eWanState_t wan_transition_phy_deconfiguring(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); +static eWanState_t wan_transition_wan_deconfigured(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); static eWanState_t wan_transition_exit(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); static ANSC_STATUS WanMgr_StartConnectivityCheck(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); @@ -441,7 +445,7 @@ static void WanMgr_MonitorDhcpApps (WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl) // let the caller state handle RefreshDHCP=TRUE scenario CcspTraceError(("%s %d: IP Mode change detected, handle RefreshDHCP & later monitor DHCP apps\n", __FUNCTION__, __LINE__)); //reset flag here, if the IP mode and source changes are addressed. - if(((p_VirtIf->IP.IPv6Source != DML_WAN_IP_SOURCE_DHCP || p_VirtIf->IP.Mode == DML_WAN_IP_MODE_NO_IP) && p_VirtIf->IP.Dhcp4cStatus != DHCPC_STARTED && p_VirtIf->IP.Dhcp6cStatus != DHCPC_STARTED)|| //TODO : check why only IP.IPv6Source checked? + if((((p_VirtIf->IP.IPv6Source != DML_WAN_IP_SOURCE_DHCP && p_VirtIf->IP.IPv6Source != DML_WAN_IP_SOURCE_SLAAC) || p_VirtIf->IP.Mode == DML_WAN_IP_MODE_NO_IP) && p_VirtIf->IP.Dhcp4cStatus != DHCPC_STARTED && p_VirtIf->IP.Dhcp6cStatus != DHCPC_STARTED)|| //TODO : check why only IP.IPv6Source checked? (p_VirtIf->IP.Mode == DML_WAN_IP_MODE_IPV6_ONLY && p_VirtIf->IP.Dhcp4cStatus != DHCPC_STARTED && p_VirtIf->IP.Dhcp6cStatus == DHCPC_STARTED) || //IPv6 only mode, reset if DHCPv4 not running and v6 running (p_VirtIf->IP.Mode == DML_WAN_IP_MODE_IPV4_ONLY && p_VirtIf->IP.Dhcp4cStatus == DHCPC_STARTED&& p_VirtIf->IP.Dhcp6cStatus != DHCPC_STARTED) || //IPv4 only mode, reset if DHCPv4 running and v6 not running (p_VirtIf->IP.Mode == DML_WAN_IP_MODE_DUAL_STACK && p_VirtIf->IP.Dhcp4cStatus == DHCPC_STARTED && p_VirtIf->IP.Dhcp6cStatus == DHCPC_STARTED)) //Dual stack mode, reset if DHCPv4 running and v6 running @@ -471,7 +475,7 @@ static void WanMgr_MonitorDhcpApps (WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl) //Check if IPv6 dhcp client is still running - handling runtime crash of dhcp client if ((p_VirtIf->IP.Mode == DML_WAN_IP_MODE_IPV6_ONLY || p_VirtIf->IP.Mode == DML_WAN_IP_MODE_DUAL_STACK) && // IP.Mode supports V6 - p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP && // uses DHCP client + ( ( p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP ) || ( p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_SLAAC ) ) && // uses DHCP client (p_VirtIf->IP.Dhcp6cPid == -1 || // DHCP cleint failed to start (p_VirtIf->IP.Dhcp6cPid > 0 && // dhcp started by ISM WanMgr_IsPIDRunning(p_VirtIf->IP.Dhcp6cPid) != TRUE))) // but DHCP client not running @@ -485,7 +489,7 @@ static void WanMgr_MonitorDhcpApps (WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl) Force_IPv6_toggle(p_VirtIf->Name); } WanManager_StartDhcpv6Client(p_VirtIf, pInterface->IfaceType); - CcspTraceInfo(("%s %d - SELFHEAL - Started dhcp6c on interface %s, dhcpv6_pid %d \n", __FUNCTION__, __LINE__, p_VirtIf->Name)); + CcspTraceInfo(("%s %d - SELFHEAL - Started dhcp6c on interface %s, dhcpv6_pid %d \n", __FUNCTION__, __LINE__, p_VirtIf->Name, p_VirtIf->IP.Dhcp6cPid)); #ifdef ENABLE_FEATURE_TELEMETRY2_0 t2_event_d("SYS_ERROR_DHCPV6Client_notrunning", 1); #endif @@ -662,13 +666,11 @@ 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; @@ -677,14 +679,11 @@ 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; @@ -701,7 +700,6 @@ 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"))); @@ -710,7 +708,6 @@ 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", @@ -1254,7 +1251,7 @@ static int wan_setUpIPv4(WanMgr_IfaceSM_Controller_t * pWanIfaceCtrl) sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_WAN_STATUS, WAN_STATUS_STARTED, 0); CcspTraceInfo(("%s %d - wan-status event set to started \n", __FUNCTION__, __LINE__)); - if(p_VirtIf->IP.Ipv4Data.ifname[0] != '\0' && pInterface->IfaceType != REMOTE_IFACE) + if(p_VirtIf->IP.Ipv4Data.ifname[0] != '\0' && pInterface->IfaceType != REMOTE_IFACE && (WAN_IFACE_CONN_TYPE_COLD_STANDBY != pInterface->IfaceConnectionType)) { syscfg_set_commit(NULL, SYSCFG_WAN_INTERFACE_NAME, p_VirtIf->IP.Ipv4Data.ifname); } @@ -1432,7 +1429,7 @@ static int wan_setUpIPv6(WanMgr_IfaceSM_Controller_t * pWanIfaceCtrl) /* Set the current WAN Interface name */ sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_CURRENT_WAN_IFNAME, p_VirtIf->IP.Ipv6Data.ifname, 0); - if(p_VirtIf->IP.Ipv6Data.ifname[0] != '\0' && pInterface->IfaceType != REMOTE_IFACE) + if(p_VirtIf->IP.Ipv6Data.ifname[0] != '\0' && pInterface->IfaceType != REMOTE_IFACE && (WAN_IFACE_CONN_TYPE_COLD_STANDBY != pInterface->IfaceConnectionType) ) { syscfg_set_commit(NULL, SYSCFG_WAN_INTERFACE_NAME, p_VirtIf->IP.Ipv6Data.ifname); } @@ -1518,6 +1515,22 @@ static int wan_tearDownIPv6(WanMgr_IfaceSM_Controller_t * pWanIfaceCtrl) AnscTraceError(("%s %d - Failed to remove inactive address \n", __FUNCTION__,__LINE__)); } + //Remove the default route and IPv6 address explitcly when SLAAC mode since no prefix + if ( DML_WAN_IP_SOURCE_SLAAC == p_VirtIf->IP.IPv6Source ) + { + char acCmdLine[BUFLEN_128] = {0}; + CcspTraceInfo(("%s %d - Deleting IPv6 default route for '%s' interface\n", __FUNCTION__, __LINE__, p_VirtIf->Name)); + snprintf(acCmdLine, sizeof(acCmdLine), "ip -6 route del default dev %s", p_VirtIf->Name); + if (WanManager_DoSystemActionWithStatus("ip -6 route delete default", acCmdLine) != 0) + CcspTraceError(("%s-%d Failed to run cmd: %s", __FUNCTION__, __LINE__, acCmdLine)); + + CcspTraceInfo(("%s %d - Deleting IPv6 global address route for '%s' interface\n", __FUNCTION__, __LINE__, p_VirtIf->Name)); + memset(acCmdLine, 0, sizeof(acCmdLine)); + snprintf(acCmdLine, sizeof(acCmdLine), "ip -6 addr flush scope global dev %s", p_VirtIf->Name); + if (WanManager_DoSystemActionWithStatus("ip -6 addr flush scope global dev", acCmdLine) != 0) + CcspTraceError(("%s-%d Failed to run cmd: %s", __FUNCTION__, __LINE__, acCmdLine)); + } + // Reset sysvevents. char previousPrefix[BUFLEN_48] = {0}; char previousPrefix_vldtime[BUFLEN_48] = {0}; @@ -1743,7 +1756,6 @@ 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); } @@ -1766,7 +1778,6 @@ 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); } @@ -1865,6 +1876,34 @@ static eWanState_t wan_transition_start(WanMgr_IfaceSM_Controller_t* pWanIfaceCt CcspTraceInfo(("%s %d - Already WAN interface %s created\n", __FUNCTION__, __LINE__, p_VirtIf->Name)); } + /*Should Update available status */ + Update_Interface_Status(); + + CcspTraceInfo(("%s %d - Interface '%s' - TRANSITION START\n", __FUNCTION__, __LINE__, pInterface->Name)); + + p_VirtIf->Interface_SM_Running = TRUE; + + WanManager_GetDateAndUptime( buffer, &uptime ); + LOG_CONSOLE("%s [tid=%ld] Wan_init_start:%d\n", buffer, syscall(SYS_gettid), uptime); + + WanMgr_GetSelectedIPMode(p_VirtIf); //Get SelectedIPMode + + WanManager_PrintBootEvents (WAN_INIT_START); + + return WAN_STATE_PHY_CONFIGURING; +} + +static eWanState_t wan_transition_vlan_configure(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl) +{ + CcspTraceInfo(("%s %d \n", __FUNCTION__, __LINE__)); + if((pWanIfaceCtrl == NULL) || (pWanIfaceCtrl->pIfaceData == NULL)) + { + return ANSC_STATUS_FAILURE; + } + + DML_WAN_IFACE* pInterface = pWanIfaceCtrl->pIfaceData; + DML_VIRTUAL_IFACE* p_VirtIf = WanMgr_getVirtualIfaceById(pInterface->VirtIfList, pWanIfaceCtrl->VirIfIdx); + /*TODO: VLAN should not be set for Remote Interface, for More info, refer RDKB-42676*/ if( p_VirtIf->VLAN.Enable == TRUE && p_VirtIf->VLAN.Status == WAN_IFACE_LINKSTATUS_DOWN && pInterface->IfaceType != REMOTE_IFACE) { @@ -1879,19 +1918,7 @@ static eWanState_t wan_transition_start(WanMgr_IfaceSM_Controller_t* pWanIfaceCt WanMgr_RdkBus_ConfigureVlan(p_VirtIf, TRUE); } - /*Should Update available status */ - Update_Interface_Status(); - - CcspTraceInfo(("%s %d - Interface '%s' - TRANSITION START\n", __FUNCTION__, __LINE__, pInterface->Name)); - - p_VirtIf->Interface_SM_Running = TRUE; - - WanManager_GetDateAndUptime( buffer, &uptime ); - LOG_CONSOLE("%s [tid=%ld] Wan_init_start:%d\n", buffer, syscall(SYS_gettid), uptime); - - WanMgr_GetSelectedIPMode(p_VirtIf); //Get SelectedIPMode - - WanManager_PrintBootEvents (WAN_INIT_START); + CcspTraceInfo(("%s %d - Interface '%s' - TRANSITION VLAN CONFIGURE\n", __FUNCTION__, __LINE__, pInterface->Name)); return WAN_STATE_VLAN_CONFIGURING; } @@ -1979,9 +2006,8 @@ 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 || p_VirtIf->VLAN.Status == WAN_IFACE_LINKSTATUS_UP ) + if( p_VirtIf->VLAN.Status == WAN_IFACE_LINKSTATUS_CONFIGURING ) { CcspTraceInfo(("%s %d: LinkStatus is still CONFIGURING. Set to down\n", __FUNCTION__, __LINE__)); p_VirtIf->VLAN.Status = WAN_IFACE_LINKSTATUS_DOWN; @@ -2040,7 +2066,7 @@ static eWanState_t wan_transition_wan_validated(WanMgr_IfaceSM_Controller_t* pWa DML_WAN_IFACE* pInterface = pWanIfaceCtrl->pIfaceData; DML_VIRTUAL_IFACE* p_VirtIf = WanMgr_getVirtualIfaceById(pInterface->VirtIfList, pWanIfaceCtrl->VirIfIdx); - if((p_VirtIf->IP.IPv4Source == DML_WAN_IP_SOURCE_DHCP || p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP) && (p_VirtIf->IP.SelectedModeTimerStatus != EXPIRED) ) + if((p_VirtIf->IP.IPv4Source == DML_WAN_IP_SOURCE_DHCP || p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP || p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_SLAAC ) && (p_VirtIf->IP.SelectedModeTimerStatus != EXPIRED) ) { /* Clear DHCP data */ WanManager_ClearDHCPData(p_VirtIf); @@ -2071,7 +2097,7 @@ static eWanState_t wan_transition_wan_validated(WanMgr_IfaceSM_Controller_t* pWa WanManager_StartDhcpv4Client(p_VirtIf,pInterface->Name, pInterface->IfaceType); } - if(p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP && (p_VirtIf->IP.Dhcp6cStatus != DHCPC_STARTED) && + if(((p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP) || (p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_SLAAC) ) && (p_VirtIf->IP.Dhcp6cStatus != DHCPC_STARTED) && (p_VirtIf->IP.Mode == DML_WAN_IP_MODE_DUAL_STACK || p_VirtIf->IP.Mode == DML_WAN_IP_MODE_IPV6_ONLY)) { /* Start all interface with accept ra disbaled */ @@ -2566,7 +2592,7 @@ static eWanState_t wan_transition_ipv6_down(WanMgr_IfaceSM_Controller_t* pWanIfa pInterface->BaseInterfaceStatus != WAN_IFACE_PHY_STATUS_UP || (p_VirtIf->VLAN.Enable == TRUE && p_VirtIf->VLAN.Status == WAN_IFACE_LINKSTATUS_DOWN) || (p_VirtIf->PPP.Enable == TRUE && p_VirtIf->PPP.LinkStatus != WAN_IFACE_PPP_LINK_STATUS_UP) || - (p_VirtIf->IP.RefreshDHCP == TRUE && (p_VirtIf->IP.IPv6Source != DML_WAN_IP_SOURCE_DHCP || + (p_VirtIf->IP.RefreshDHCP == TRUE && ((p_VirtIf->IP.IPv6Source != DML_WAN_IP_SOURCE_DHCP && p_VirtIf->IP.IPv6Source != DML_WAN_IP_SOURCE_SLAAC) || (p_VirtIf->IP.Mode != DML_WAN_IP_MODE_IPV6_ONLY && p_VirtIf->IP.Mode != DML_WAN_IP_MODE_DUAL_STACK)))) { CcspTraceInfo(("%s %d: Stopping DHCP v6\n", __FUNCTION__, __LINE__)); @@ -2600,6 +2626,9 @@ static eWanState_t wan_transition_ipv6_down(WanMgr_IfaceSM_Controller_t* pWanIfa WanMgr_Rbus_EventPublishHandler(param_name, "", RBUS_STRING); WanManager_UpdateInterfaceStatus (p_VirtIf, WANMGR_IFACE_CONNECTION_IPV6_DOWN); + //Disable accept_ra + WanMgr_Configure_accept_ra(p_VirtIf, FALSE); + if(p_VirtIf->Status == WAN_IFACE_STATUS_UP) { if (wan_tearDownIPv6(pWanIfaceCtrl) != RETURN_OK) @@ -2619,8 +2648,6 @@ static eWanState_t wan_transition_ipv6_down(WanMgr_IfaceSM_Controller_t* pWanIfa Update_Interface_Status(); sysevent_get(sysevent_fd, sysevent_token, SYSEVENT_IPV4_CONNECTION_STATE, buf, sizeof(buf)); - //Disable accept_ra - WanMgr_Configure_accept_ra(p_VirtIf, FALSE); if(p_VirtIf->IP.Ipv4Status == WAN_IFACE_IPV4_STATE_UP && !strcmp(buf, WAN_STATUS_UP)) { @@ -2694,7 +2721,7 @@ static eWanState_t wan_transition_mapt_feature_refresh(WanMgr_IfaceSM_Controller WanManager_ConfigurePPPSession(p_VirtIf, TRUE); } - if (p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP && + if ((p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP || p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_SLAAC ) && (p_VirtIf->IP.Mode == DML_WAN_IP_MODE_DUAL_STACK || p_VirtIf->IP.Mode == DML_WAN_IP_MODE_IPV6_ONLY)) { // MAPT config changed, if we got a v6 lease at this stage, send a v6 RELEASE @@ -2748,7 +2775,6 @@ 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) @@ -2865,6 +2891,70 @@ static eWanState_t wan_transition_mapt_down(WanMgr_IfaceSM_Controller_t* pWanIfa } #endif //FEATURE_MAPT +static eWanState_t wan_transition_configuring_interface(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl) +{ + CcspTraceInfo(("%s %d \n", __FUNCTION__, __LINE__)); + + if((pWanIfaceCtrl == NULL) || (pWanIfaceCtrl->pIfaceData == NULL)) + { + return ANSC_STATUS_FAILURE; + } + + DML_WAN_IFACE* pInterface = pWanIfaceCtrl->pIfaceData; + + // Check the interface type is cold standby then needs to be activate/decativate at runtime + if( WAN_IFACE_CONN_TYPE_COLD_STANDBY == pInterface->IfaceConnectionType ) + { + // Configure Interface + if ( ANSC_STATUS_FAILURE == WanManager_RdkBus_EnableInterface(pInterface, TRUE) ) + { + CcspTraceInfo(("%s %d - Interface '%s' - TRANSITION PHY CONFIGURING\n", __FUNCTION__, __LINE__, pInterface->Name)); + return WAN_STATE_PHY_CONFIGURING; + } + } + + CcspTraceInfo(("%s %d - Interface '%s' - TRANSITION STATE PHY DOWN\n", __FUNCTION__, __LINE__, pInterface->Name)); + return WAN_STATE_PHY_DOWN; +} + +static eWanState_t wan_transition_phy_deconfiguring(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl) +{ + CcspTraceInfo(("%s %d \n", __FUNCTION__, __LINE__)); + + if((pWanIfaceCtrl == NULL) || (pWanIfaceCtrl->pIfaceData == NULL)) + { + return ANSC_STATUS_FAILURE; + } + + DML_WAN_IFACE* pInterface = pWanIfaceCtrl->pIfaceData; + + // Check the interface type is cold standby then needs to be activate/decativate at runtime + if( WAN_IFACE_CONN_TYPE_COLD_STANDBY == pInterface->IfaceConnectionType ) + { + // Configure Interface + WanManager_RdkBus_EnableInterface(pInterface, FALSE); + pInterface->BaseInterfaceStatus = WAN_IFACE_PHY_STATUS_DOWN; + } + + CcspTraceInfo(("%s %d - Interface '%s' - TRANSITION STATE PHY CONFIGURING\n", __FUNCTION__, __LINE__, pInterface->Name)); + return WAN_STATE_PHY_CONFIGURING; +} + +static eWanState_t wan_transition_wan_deconfigured(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl) +{ + CcspTraceInfo(("%s %d \n", __FUNCTION__, __LINE__)); + + if((pWanIfaceCtrl == NULL) || (pWanIfaceCtrl->pIfaceData == NULL)) + { + return ANSC_STATUS_FAILURE; + } + + DML_WAN_IFACE* pInterface = pWanIfaceCtrl->pIfaceData; + + CcspTraceInfo(("%s %d - Interface '%s' - TRANSITION STATE PHY DOWN\n", __FUNCTION__, __LINE__, pInterface->Name)); + return WAN_STATE_PHY_DOWN; +} + static eWanState_t wan_transition_exit(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl) { CcspTraceInfo(("%s %d \n", __FUNCTION__, __LINE__)); @@ -2888,7 +2978,6 @@ 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; @@ -2905,7 +2994,6 @@ 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) @@ -2964,6 +3052,8 @@ static eWanState_t wan_transition_standby_deconfig_ips(WanMgr_IfaceSM_Controller } } + WanMgr_Configure_accept_ra(p_VirtIf, FALSE); + if (p_VirtIf->IP.Ipv6Status == WAN_IFACE_IPV6_STATE_UP) { CcspTraceInfo(("%s %d - Deconfiguring Ipv6 for %s \n", __FUNCTION__, __LINE__, p_VirtIf->Name)); @@ -2974,10 +3064,6 @@ static eWanState_t wan_transition_standby_deconfig_ips(WanMgr_IfaceSM_Controller p_VirtIf->IP.Ipv6Changed = TRUE; //We have deconfigured Ipv6 from the device. set this flag to configure again when moves back to active. } - 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) { @@ -2992,6 +3078,61 @@ static eWanState_t wan_transition_standby_deconfig_ips(WanMgr_IfaceSM_Controller /*********************************************************************************/ /**************************** STATES *********************************************/ /*********************************************************************************/ +static eWanState_t wan_state_phy_configuring(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl) +{ + if((pWanIfaceCtrl == NULL) || (pWanIfaceCtrl->pIfaceData == NULL)) + { + return ANSC_STATUS_FAILURE; + } + + DML_WAN_IFACE* pInterface = pWanIfaceCtrl->pIfaceData; + DML_VIRTUAL_IFACE* p_VirtIf = WanMgr_getVirtualIfaceById(pInterface->VirtIfList, pWanIfaceCtrl->VirIfIdx); + + if (pWanIfaceCtrl->WanEnable == FALSE || + pInterface->Selection.Enable == FALSE || + p_VirtIf->Enable == FALSE || + pInterface->Selection.Status == WAN_IFACE_NOT_SELECTED) + { + return wan_transition_exit(pWanIfaceCtrl); + } + + + //TBC: Workaround, Wait in current state if the component not ready + if((0 == strncmp(pInterface->BaseInterface,WIFI_BASE_IFACE_PATH, strlen(WIFI_BASE_IFACE_PATH))) && + (access("/tmp/wifi_ready_to_process", F_OK) != 0)) + { + return WAN_STATE_PHY_CONFIGURING; + } + + return wan_transition_configuring_interface(pWanIfaceCtrl); +} + +static eWanState_t wan_state_phy_down(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl) +{ + if((pWanIfaceCtrl == NULL) || (pWanIfaceCtrl->pIfaceData == NULL)) + { + return ANSC_STATUS_FAILURE; + } + + DML_WAN_IFACE* pInterface = pWanIfaceCtrl->pIfaceData; + DML_VIRTUAL_IFACE* p_VirtIf = WanMgr_getVirtualIfaceById(pInterface->VirtIfList, pWanIfaceCtrl->VirIfIdx); + + if (pWanIfaceCtrl->WanEnable == FALSE || + pInterface->Selection.Enable == FALSE || + p_VirtIf->Enable == FALSE || + pInterface->Selection.Status == WAN_IFACE_NOT_SELECTED) + { + return wan_transition_phy_deconfiguring(pWanIfaceCtrl); + } + + if ( pInterface->BaseInterfaceStatus == WAN_IFACE_PHY_STATUS_UP ) + { + return wan_transition_vlan_configure(pWanIfaceCtrl); + } + + return WAN_STATE_PHY_DOWN; +} + static eWanState_t wan_state_vlan_configuring(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl) { if((pWanIfaceCtrl == NULL) || (pWanIfaceCtrl->pIfaceData == NULL)) @@ -3084,7 +3225,7 @@ static eWanState_t wan_state_ppp_configuring(WanMgr_IfaceSM_Controller_t* pWanIf if(p_VirtIf->PPP.Enable == TRUE) { if(p_VirtIf->PPP.LinkStatus == WAN_IFACE_PPP_LINK_STATUS_UP && - !((p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP && + !(((p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP || p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_SLAAC ) && (p_VirtIf->IP.Mode == DML_WAN_IP_MODE_DUAL_STACK || p_VirtIf->IP.Mode == DML_WAN_IP_MODE_IPV6_ONLY)) && p_VirtIf->PPP.IPV6CPStatus != WAN_IFACE_IPV6CP_STATUS_UP)) //If dhcpv6 used on PPP interface wait for IPv6cp status { @@ -3228,7 +3369,7 @@ static eWanState_t wan_state_obtaining_ip_addresses(WanMgr_IfaceSM_Controller_t* WanManager_StopDhcpv4Client(p_VirtIf, STOP_DHCP_WITH_RELEASE); } - if(p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP && + if((p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP || p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_SLAAC ) && (p_VirtIf->IP.Mode == DML_WAN_IP_MODE_IPV6_ONLY || p_VirtIf->IP.Mode == DML_WAN_IP_MODE_DUAL_STACK)) { if(p_VirtIf->IP.Dhcp6cStatus != DHCPC_STARTED) @@ -3390,7 +3531,7 @@ static eWanState_t wan_state_ipv4_leased(WanMgr_IfaceSM_Controller_t* pWanIfaceC //Start dhcpv6 client if Ip mode changed runtime if(p_VirtIf->IP.RefreshDHCP == TRUE && - p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP && + ( p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP || p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_SLAAC ) && p_VirtIf->IP.Mode == DML_WAN_IP_MODE_DUAL_STACK && p_VirtIf->IP.Dhcp6cStatus != DHCPC_STARTED) { @@ -3524,7 +3665,7 @@ static eWanState_t wan_state_ipv6_leased(WanMgr_IfaceSM_Controller_t* pWanIfaceC else if (p_VirtIf->IP.Ipv6Status == WAN_IFACE_IPV6_STATE_DOWN || (p_VirtIf->VLAN.Enable == TRUE && p_VirtIf->VLAN.Status == WAN_IFACE_LINKSTATUS_DOWN )|| (p_VirtIf->PPP.Enable == TRUE && p_VirtIf->PPP.LinkStatus != WAN_IFACE_PPP_LINK_STATUS_UP)|| // PPP is Enabled but DOWN - (p_VirtIf->IP.RefreshDHCP == TRUE && (p_VirtIf->IP.IPv6Source != DML_WAN_IP_SOURCE_DHCP || // Ipv6source is not dhcp + (p_VirtIf->IP.RefreshDHCP == TRUE && ((p_VirtIf->IP.IPv6Source != DML_WAN_IP_SOURCE_DHCP && p_VirtIf->IP.IPv6Source != DML_WAN_IP_SOURCE_SLAAC ) || // Ipv6source is not dhcp (p_VirtIf->IP.Mode != DML_WAN_IP_MODE_IPV6_ONLY && p_VirtIf->IP.Mode != DML_WAN_IP_MODE_DUAL_STACK)))) { return wan_transition_ipv6_down(pWanIfaceCtrl); @@ -3669,7 +3810,7 @@ static eWanState_t wan_state_dual_stack_active(WanMgr_IfaceSM_Controller_t* pWan } } else if (p_VirtIf->IP.Ipv6Status == WAN_IFACE_IPV6_STATE_DOWN || - (p_VirtIf->IP.RefreshDHCP == TRUE && ( p_VirtIf->IP.IPv6Source != DML_WAN_IP_SOURCE_DHCP || + (p_VirtIf->IP.RefreshDHCP == TRUE && ( ( p_VirtIf->IP.IPv6Source != DML_WAN_IP_SOURCE_DHCP && p_VirtIf->IP.IPv6Source != DML_WAN_IP_SOURCE_SLAAC ) || (p_VirtIf->IP.Mode != DML_WAN_IP_MODE_DUAL_STACK && p_VirtIf->IP.Mode != DML_WAN_IP_MODE_IPV6_ONLY)))) { /* TODO: Add IPoE Health Check failed for IPv6 here */ @@ -3960,7 +4101,7 @@ static eWanState_t wan_state_deconfiguring_wan(WanMgr_IfaceSM_Controller_t* pWan return WAN_STATE_DECONFIGURING_WAN; } - return wan_transition_exit(pWanIfaceCtrl); + return wan_transition_wan_deconfigured(pWanIfaceCtrl); } static eWanState_t wan_state_exit(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl) @@ -4128,6 +4269,16 @@ static void* WanMgr_InterfaceSMThread( void *arg ) // process state switch (iface_sm_state) { + case WAN_STATE_PHY_CONFIGURING: + { + iface_sm_state = wan_state_phy_configuring(pWanIfaceCtrl); + break; + } + case WAN_STATE_PHY_DOWN: + { + iface_sm_state = wan_state_phy_down(pWanIfaceCtrl); + break; + } case WAN_STATE_VLAN_CONFIGURING: { iface_sm_state = wan_state_vlan_configuring(pWanIfaceCtrl); From b053e480291a24a980a360fc5b3cea9d15c8127b Mon Sep 17 00:00:00 2001 From: LakshminarayananShenbagaraj Date: Wed, 10 Sep 2025 12:13:35 +0100 Subject: [PATCH 11/16] Revert "RDKB-60436 : Cold Standby Support in WAN Manager for WiFi Hotspot Failover." This reverts commit e8c147d299517edb86ad828255cdc4f994e82e1a. --- .../TR-181/netmonitor/network_route_monitor.c | 84 +----- source/WanManager/wanmgr_interface_sm.c | 251 ++++-------------- 2 files changed, 51 insertions(+), 284 deletions(-) diff --git a/source/TR-181/netmonitor/network_route_monitor.c b/source/TR-181/netmonitor/network_route_monitor.c index 957377d7..5ba2f54d 100644 --- a/source/TR-181/netmonitor/network_route_monitor.c +++ b/source/TR-181/netmonitor/network_route_monitor.c @@ -19,11 +19,7 @@ /* ---- Include Files ---------------------------------------- */ #include -#include -#include #include -#include -#include #include "ipc_msg.h" #include "network_route_monitor.h" #include "ansc_platform.h" @@ -43,7 +39,6 @@ static bool g_toggle_flag = TRUE; #define LOOP_TIMEOUT 100000 // timeout in milliseconds. This is the state machine loop interval #define SYSEVENT_IPV6_TOGGLE "ipv6Toggle" -#define SYSEVENT_IPV6_ADDR_UPDATE "ipv6AddressUpdate" #define SYSEVENT_OPEN_MAX_RETRIES 6 #define SE_SERVER_WELL_KNOWN_PORT 52367 #define SE_VERSION 1 @@ -69,7 +64,6 @@ static bool g_toggle_flag = TRUE; #endif /* ---- Private Function Prototypes -------------------------- */ static void parse_rtattr(struct rtattr *tb[], int max, struct rtattr *rta, int len); // Parse the route entries -static ANSC_STATUS parse_addrattr(struct nlmsghdr *nlh); // Parse the interface address entries static ANSC_STATUS isDefaultGatewaypresent(struct nlmsghdr* nlmsgHdr); // check for default gateway #if defined(FEATURE_MAPT) && defined(NAT46_KERNEL_SUPPORT) @@ -188,74 +182,6 @@ static void parse_rtattr(struct rtattr *tb[], int max, struct rtattr *rta, int l } } -static ANSC_STATUS parse_addrattr(struct nlmsghdr *nlh) -{ - ANSC_STATUS ret = ANSC_STATUS_FAILURE; - struct ifaddrmsg *ifa = NLMSG_DATA(nlh); - char ifname[IF_NAMESIZE], - ipv6_addr[INET6_ADDRSTRLEN], - eventInfo[BUFLEN_512] = {0}; - unsigned int prefix_length = 0, - pref_lifetime = 0, - valid_lifetime = 0; - - //Allow only for Global Scope - if (ifa->ifa_scope != RT_SCOPE_UNIVERSE) { - return ret; - } - - if (if_indextoname(ifa->ifa_index, ifname) == NULL) { - DBG_MONITOR_PRINT("%s-%d [ADDR EVENT] Failed to retreive interface name for ifindex=%d\n", __FUNCTION__, __LINE__, ifa->ifa_index); - return ret; - } - - //DBG_MONITOR_PRINT("%s-%d [ADDR EVENT] ifindex=%d name=%s family=%d\n", __FUNCTION__, __LINE__, ifa->ifa_index, ifname, ifa->ifa_family); - - int len = nlh->nlmsg_len - NLMSG_LENGTH(sizeof(*ifa)); - struct rtattr *rta = IFA_RTA(ifa); - - for (; RTA_OK(rta, len); rta = RTA_NEXT(rta, len)) { - if (rta->rta_type == IFA_ADDRESS) { - if (ifa->ifa_family == AF_INET6) { - inet_ntop(AF_INET6, RTA_DATA(rta), ipv6_addr, sizeof(ipv6_addr)); - - //Ignore link-local & multicast addresses - if (strncmp(ipv6_addr, "fe80", 4) == 0 || strncmp(ipv6_addr, "ff", 2) == 0) { - continue; - } - - prefix_length = ifa->ifa_prefixlen; - DBG_MONITOR_PRINT("%s-%d [ADDR EVENT] IPv6 address: %s/%d\n", __FUNCTION__, __LINE__, ipv6_addr, ifa->ifa_prefixlen); - } - } - if (rta->rta_type == IFA_CACHEINFO) { - struct ifa_cacheinfo *ci = RTA_DATA(rta); - pref_lifetime = ci->ifa_prefered; - valid_lifetime = ci->ifa_valid; - DBG_MONITOR_PRINT("%s-%d [ADDR EVENT] preferred_lft=%u sec, valid_lft=%u sec\n", - __FUNCTION__, __LINE__, - ci->ifa_prefered, ci->ifa_valid); - } - } - - if (nlh->nlmsg_type == RTM_NEWADDR) - { - snprintf(eventInfo, sizeof(eventInfo), "NEWADDR|%s|%s|%u|%u|%u", ifname, ipv6_addr, prefix_length, pref_lifetime, valid_lifetime); - sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_IPV6_ADDR_UPDATE, eventInfo, 0); - DBG_MONITOR_PRINT("%s-%d [ADDR EVENT] RTM_NEWADDR (new/updated address) for '%s' interface, Event '%s' Info '%s'\n", __FUNCTION__, __LINE__, ifname, SYSEVENT_IPV6_ADDR_UPDATE, eventInfo); - ret = ANSC_STATUS_SUCCESS; - } - else if (nlh->nlmsg_type == RTM_DELADDR) - { - snprintf(eventInfo, sizeof(eventInfo), "DELADDR|%s|%s|%u|%u|%u", ifname, ipv6_addr, prefix_length, pref_lifetime, valid_lifetime); - sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_IPV6_ADDR_UPDATE, eventInfo, 0); - DBG_MONITOR_PRINT("%s-%d [ADDR EVENT] RTM_DELADDR (address removed/expired) for '%s' interface, Event '%s' Info '%s'\n", __FUNCTION__, __LINE__, ifname, SYSEVENT_IPV6_ADDR_UPDATE, eventInfo); - ret = ANSC_STATUS_SUCCESS; - } - - return ret; -} - static ANSC_STATUS isDefaultGatewaypresent(struct nlmsghdr* nlmsgHdr) { struct rtmsg* route_entry = NLMSG_DATA(nlmsgHdr); @@ -299,7 +225,7 @@ static ANSC_STATUS NetMonitor_InitNetlinkRouteMonitorFd() memset(&addr, 0, sizeof(addr)); addr.nl_family = AF_NETLINK; - addr.nl_groups = RTMGRP_IPV6_ROUTE | RTMGRP_IPV6_IFADDR; + addr.nl_groups = RTMGRP_IPV6_ROUTE; if (0 > bind(netlinkRouteMonitorFd, (struct sockaddr *) &addr, sizeof(addr))) { DBG_MONITOR_PRINT("%s Failed to bind netlink socket: %s\n", __FUNCTION__, strerror(errno)); @@ -424,14 +350,6 @@ static void NetMonitor_ProcessNetlinkRouteMonitorFd() } break; } - case RTM_NEWADDR: - case RTM_DELADDR: - { - DBG_MONITOR_PRINT("%s-%d: Trace \n", __FUNCTION__, __LINE__); - parse_addrattr(nl_msgHdr); - DBG_MONITOR_PRINT("%s-%d: Trace \n", __FUNCTION__, __LINE__); - break; - } default: break; } diff --git a/source/WanManager/wanmgr_interface_sm.c b/source/WanManager/wanmgr_interface_sm.c index e069b32e..7f2b6e90 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" @@ -82,8 +84,6 @@ static eWanState_t wan_state_mapt_active(WanMgr_IfaceSM_Controller_t* pWanIfaceC static eWanState_t wan_state_refreshing_wan(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); static eWanState_t wan_state_deconfiguring_wan(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); static eWanState_t wan_state_exit(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); -static eWanState_t wan_state_phy_down(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); -static eWanState_t wan_state_phy_configuring(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); /*WAN Manager Transitions*/ static eWanState_t wan_transition_start(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); @@ -99,7 +99,6 @@ static eWanState_t wan_transition_ipv6_down(WanMgr_IfaceSM_Controller_t* pWanIfa static eWanState_t wan_transition_dual_stack_down(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); static eWanState_t wan_transition_standby(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); static eWanState_t wan_transition_standby_deconfig_ips(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); -static eWanState_t wan_transition_vlan_configure(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); #if defined(FEATURE_MAPT) || defined(FEATURE_SUPPORT_MAPT_NAT46) static eWanState_t wan_transition_mapt_feature_refresh(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); @@ -107,9 +106,6 @@ static eWanState_t wan_transition_mapt_up(WanMgr_IfaceSM_Controller_t* pWanIface static eWanState_t wan_transition_mapt_down(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); extern int mapt_feature_enable_changed; #endif //FEATURE_MAPT -static eWanState_t wan_transition_configuring_interface(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); -static eWanState_t wan_transition_phy_deconfiguring(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); -static eWanState_t wan_transition_wan_deconfigured(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); static eWanState_t wan_transition_exit(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); static ANSC_STATUS WanMgr_StartConnectivityCheck(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl); @@ -445,7 +441,7 @@ static void WanMgr_MonitorDhcpApps (WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl) // let the caller state handle RefreshDHCP=TRUE scenario CcspTraceError(("%s %d: IP Mode change detected, handle RefreshDHCP & later monitor DHCP apps\n", __FUNCTION__, __LINE__)); //reset flag here, if the IP mode and source changes are addressed. - if((((p_VirtIf->IP.IPv6Source != DML_WAN_IP_SOURCE_DHCP && p_VirtIf->IP.IPv6Source != DML_WAN_IP_SOURCE_SLAAC) || p_VirtIf->IP.Mode == DML_WAN_IP_MODE_NO_IP) && p_VirtIf->IP.Dhcp4cStatus != DHCPC_STARTED && p_VirtIf->IP.Dhcp6cStatus != DHCPC_STARTED)|| //TODO : check why only IP.IPv6Source checked? + if(((p_VirtIf->IP.IPv6Source != DML_WAN_IP_SOURCE_DHCP || p_VirtIf->IP.Mode == DML_WAN_IP_MODE_NO_IP) && p_VirtIf->IP.Dhcp4cStatus != DHCPC_STARTED && p_VirtIf->IP.Dhcp6cStatus != DHCPC_STARTED)|| //TODO : check why only IP.IPv6Source checked? (p_VirtIf->IP.Mode == DML_WAN_IP_MODE_IPV6_ONLY && p_VirtIf->IP.Dhcp4cStatus != DHCPC_STARTED && p_VirtIf->IP.Dhcp6cStatus == DHCPC_STARTED) || //IPv6 only mode, reset if DHCPv4 not running and v6 running (p_VirtIf->IP.Mode == DML_WAN_IP_MODE_IPV4_ONLY && p_VirtIf->IP.Dhcp4cStatus == DHCPC_STARTED&& p_VirtIf->IP.Dhcp6cStatus != DHCPC_STARTED) || //IPv4 only mode, reset if DHCPv4 running and v6 not running (p_VirtIf->IP.Mode == DML_WAN_IP_MODE_DUAL_STACK && p_VirtIf->IP.Dhcp4cStatus == DHCPC_STARTED && p_VirtIf->IP.Dhcp6cStatus == DHCPC_STARTED)) //Dual stack mode, reset if DHCPv4 running and v6 running @@ -475,7 +471,7 @@ static void WanMgr_MonitorDhcpApps (WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl) //Check if IPv6 dhcp client is still running - handling runtime crash of dhcp client if ((p_VirtIf->IP.Mode == DML_WAN_IP_MODE_IPV6_ONLY || p_VirtIf->IP.Mode == DML_WAN_IP_MODE_DUAL_STACK) && // IP.Mode supports V6 - ( ( p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP ) || ( p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_SLAAC ) ) && // uses DHCP client + p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP && // uses DHCP client (p_VirtIf->IP.Dhcp6cPid == -1 || // DHCP cleint failed to start (p_VirtIf->IP.Dhcp6cPid > 0 && // dhcp started by ISM WanMgr_IsPIDRunning(p_VirtIf->IP.Dhcp6cPid) != TRUE))) // but DHCP client not running @@ -489,7 +485,7 @@ static void WanMgr_MonitorDhcpApps (WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl) Force_IPv6_toggle(p_VirtIf->Name); } WanManager_StartDhcpv6Client(p_VirtIf, pInterface->IfaceType); - CcspTraceInfo(("%s %d - SELFHEAL - Started dhcp6c on interface %s, dhcpv6_pid %d \n", __FUNCTION__, __LINE__, p_VirtIf->Name, p_VirtIf->IP.Dhcp6cPid)); + CcspTraceInfo(("%s %d - SELFHEAL - Started dhcp6c on interface %s, dhcpv6_pid %d \n", __FUNCTION__, __LINE__, p_VirtIf->Name)); #ifdef ENABLE_FEATURE_TELEMETRY2_0 t2_event_d("SYS_ERROR_DHCPV6Client_notrunning", 1); #endif @@ -666,11 +662,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; @@ -679,11 +677,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; @@ -700,6 +701,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"))); @@ -708,6 +710,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", @@ -1251,7 +1254,7 @@ static int wan_setUpIPv4(WanMgr_IfaceSM_Controller_t * pWanIfaceCtrl) sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_WAN_STATUS, WAN_STATUS_STARTED, 0); CcspTraceInfo(("%s %d - wan-status event set to started \n", __FUNCTION__, __LINE__)); - if(p_VirtIf->IP.Ipv4Data.ifname[0] != '\0' && pInterface->IfaceType != REMOTE_IFACE && (WAN_IFACE_CONN_TYPE_COLD_STANDBY != pInterface->IfaceConnectionType)) + if(p_VirtIf->IP.Ipv4Data.ifname[0] != '\0' && pInterface->IfaceType != REMOTE_IFACE) { syscfg_set_commit(NULL, SYSCFG_WAN_INTERFACE_NAME, p_VirtIf->IP.Ipv4Data.ifname); } @@ -1429,7 +1432,7 @@ static int wan_setUpIPv6(WanMgr_IfaceSM_Controller_t * pWanIfaceCtrl) /* Set the current WAN Interface name */ sysevent_set(sysevent_fd, sysevent_token, SYSEVENT_CURRENT_WAN_IFNAME, p_VirtIf->IP.Ipv6Data.ifname, 0); - if(p_VirtIf->IP.Ipv6Data.ifname[0] != '\0' && pInterface->IfaceType != REMOTE_IFACE && (WAN_IFACE_CONN_TYPE_COLD_STANDBY != pInterface->IfaceConnectionType) ) + if(p_VirtIf->IP.Ipv6Data.ifname[0] != '\0' && pInterface->IfaceType != REMOTE_IFACE) { syscfg_set_commit(NULL, SYSCFG_WAN_INTERFACE_NAME, p_VirtIf->IP.Ipv6Data.ifname); } @@ -1515,22 +1518,6 @@ static int wan_tearDownIPv6(WanMgr_IfaceSM_Controller_t * pWanIfaceCtrl) AnscTraceError(("%s %d - Failed to remove inactive address \n", __FUNCTION__,__LINE__)); } - //Remove the default route and IPv6 address explitcly when SLAAC mode since no prefix - if ( DML_WAN_IP_SOURCE_SLAAC == p_VirtIf->IP.IPv6Source ) - { - char acCmdLine[BUFLEN_128] = {0}; - CcspTraceInfo(("%s %d - Deleting IPv6 default route for '%s' interface\n", __FUNCTION__, __LINE__, p_VirtIf->Name)); - snprintf(acCmdLine, sizeof(acCmdLine), "ip -6 route del default dev %s", p_VirtIf->Name); - if (WanManager_DoSystemActionWithStatus("ip -6 route delete default", acCmdLine) != 0) - CcspTraceError(("%s-%d Failed to run cmd: %s", __FUNCTION__, __LINE__, acCmdLine)); - - CcspTraceInfo(("%s %d - Deleting IPv6 global address route for '%s' interface\n", __FUNCTION__, __LINE__, p_VirtIf->Name)); - memset(acCmdLine, 0, sizeof(acCmdLine)); - snprintf(acCmdLine, sizeof(acCmdLine), "ip -6 addr flush scope global dev %s", p_VirtIf->Name); - if (WanManager_DoSystemActionWithStatus("ip -6 addr flush scope global dev", acCmdLine) != 0) - CcspTraceError(("%s-%d Failed to run cmd: %s", __FUNCTION__, __LINE__, acCmdLine)); - } - // Reset sysvevents. char previousPrefix[BUFLEN_48] = {0}; char previousPrefix_vldtime[BUFLEN_48] = {0}; @@ -1756,6 +1743,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); } @@ -1778,6 +1766,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); } @@ -1876,34 +1865,6 @@ static eWanState_t wan_transition_start(WanMgr_IfaceSM_Controller_t* pWanIfaceCt CcspTraceInfo(("%s %d - Already WAN interface %s created\n", __FUNCTION__, __LINE__, p_VirtIf->Name)); } - /*Should Update available status */ - Update_Interface_Status(); - - CcspTraceInfo(("%s %d - Interface '%s' - TRANSITION START\n", __FUNCTION__, __LINE__, pInterface->Name)); - - p_VirtIf->Interface_SM_Running = TRUE; - - WanManager_GetDateAndUptime( buffer, &uptime ); - LOG_CONSOLE("%s [tid=%ld] Wan_init_start:%d\n", buffer, syscall(SYS_gettid), uptime); - - WanMgr_GetSelectedIPMode(p_VirtIf); //Get SelectedIPMode - - WanManager_PrintBootEvents (WAN_INIT_START); - - return WAN_STATE_PHY_CONFIGURING; -} - -static eWanState_t wan_transition_vlan_configure(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl) -{ - CcspTraceInfo(("%s %d \n", __FUNCTION__, __LINE__)); - if((pWanIfaceCtrl == NULL) || (pWanIfaceCtrl->pIfaceData == NULL)) - { - return ANSC_STATUS_FAILURE; - } - - DML_WAN_IFACE* pInterface = pWanIfaceCtrl->pIfaceData; - DML_VIRTUAL_IFACE* p_VirtIf = WanMgr_getVirtualIfaceById(pInterface->VirtIfList, pWanIfaceCtrl->VirIfIdx); - /*TODO: VLAN should not be set for Remote Interface, for More info, refer RDKB-42676*/ if( p_VirtIf->VLAN.Enable == TRUE && p_VirtIf->VLAN.Status == WAN_IFACE_LINKSTATUS_DOWN && pInterface->IfaceType != REMOTE_IFACE) { @@ -1918,7 +1879,19 @@ static eWanState_t wan_transition_vlan_configure(WanMgr_IfaceSM_Controller_t* pW WanMgr_RdkBus_ConfigureVlan(p_VirtIf, TRUE); } - CcspTraceInfo(("%s %d - Interface '%s' - TRANSITION VLAN CONFIGURE\n", __FUNCTION__, __LINE__, pInterface->Name)); + /*Should Update available status */ + Update_Interface_Status(); + + CcspTraceInfo(("%s %d - Interface '%s' - TRANSITION START\n", __FUNCTION__, __LINE__, pInterface->Name)); + + p_VirtIf->Interface_SM_Running = TRUE; + + WanManager_GetDateAndUptime( buffer, &uptime ); + LOG_CONSOLE("%s [tid=%ld] Wan_init_start:%d\n", buffer, syscall(SYS_gettid), uptime); + + WanMgr_GetSelectedIPMode(p_VirtIf); //Get SelectedIPMode + + WanManager_PrintBootEvents (WAN_INIT_START); return WAN_STATE_VLAN_CONFIGURING; } @@ -2006,8 +1979,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; @@ -2066,7 +2040,7 @@ static eWanState_t wan_transition_wan_validated(WanMgr_IfaceSM_Controller_t* pWa DML_WAN_IFACE* pInterface = pWanIfaceCtrl->pIfaceData; DML_VIRTUAL_IFACE* p_VirtIf = WanMgr_getVirtualIfaceById(pInterface->VirtIfList, pWanIfaceCtrl->VirIfIdx); - if((p_VirtIf->IP.IPv4Source == DML_WAN_IP_SOURCE_DHCP || p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP || p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_SLAAC ) && (p_VirtIf->IP.SelectedModeTimerStatus != EXPIRED) ) + if((p_VirtIf->IP.IPv4Source == DML_WAN_IP_SOURCE_DHCP || p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP) && (p_VirtIf->IP.SelectedModeTimerStatus != EXPIRED) ) { /* Clear DHCP data */ WanManager_ClearDHCPData(p_VirtIf); @@ -2097,7 +2071,7 @@ static eWanState_t wan_transition_wan_validated(WanMgr_IfaceSM_Controller_t* pWa WanManager_StartDhcpv4Client(p_VirtIf,pInterface->Name, pInterface->IfaceType); } - if(((p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP) || (p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_SLAAC) ) && (p_VirtIf->IP.Dhcp6cStatus != DHCPC_STARTED) && + if(p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP && (p_VirtIf->IP.Dhcp6cStatus != DHCPC_STARTED) && (p_VirtIf->IP.Mode == DML_WAN_IP_MODE_DUAL_STACK || p_VirtIf->IP.Mode == DML_WAN_IP_MODE_IPV6_ONLY)) { /* Start all interface with accept ra disbaled */ @@ -2592,7 +2566,7 @@ static eWanState_t wan_transition_ipv6_down(WanMgr_IfaceSM_Controller_t* pWanIfa pInterface->BaseInterfaceStatus != WAN_IFACE_PHY_STATUS_UP || (p_VirtIf->VLAN.Enable == TRUE && p_VirtIf->VLAN.Status == WAN_IFACE_LINKSTATUS_DOWN) || (p_VirtIf->PPP.Enable == TRUE && p_VirtIf->PPP.LinkStatus != WAN_IFACE_PPP_LINK_STATUS_UP) || - (p_VirtIf->IP.RefreshDHCP == TRUE && ((p_VirtIf->IP.IPv6Source != DML_WAN_IP_SOURCE_DHCP && p_VirtIf->IP.IPv6Source != DML_WAN_IP_SOURCE_SLAAC) || + (p_VirtIf->IP.RefreshDHCP == TRUE && (p_VirtIf->IP.IPv6Source != DML_WAN_IP_SOURCE_DHCP || (p_VirtIf->IP.Mode != DML_WAN_IP_MODE_IPV6_ONLY && p_VirtIf->IP.Mode != DML_WAN_IP_MODE_DUAL_STACK)))) { CcspTraceInfo(("%s %d: Stopping DHCP v6\n", __FUNCTION__, __LINE__)); @@ -2626,9 +2600,6 @@ static eWanState_t wan_transition_ipv6_down(WanMgr_IfaceSM_Controller_t* pWanIfa WanMgr_Rbus_EventPublishHandler(param_name, "", RBUS_STRING); WanManager_UpdateInterfaceStatus (p_VirtIf, WANMGR_IFACE_CONNECTION_IPV6_DOWN); - //Disable accept_ra - WanMgr_Configure_accept_ra(p_VirtIf, FALSE); - if(p_VirtIf->Status == WAN_IFACE_STATUS_UP) { if (wan_tearDownIPv6(pWanIfaceCtrl) != RETURN_OK) @@ -2648,6 +2619,8 @@ static eWanState_t wan_transition_ipv6_down(WanMgr_IfaceSM_Controller_t* pWanIfa Update_Interface_Status(); sysevent_get(sysevent_fd, sysevent_token, SYSEVENT_IPV4_CONNECTION_STATE, buf, sizeof(buf)); + //Disable accept_ra + WanMgr_Configure_accept_ra(p_VirtIf, FALSE); if(p_VirtIf->IP.Ipv4Status == WAN_IFACE_IPV4_STATE_UP && !strcmp(buf, WAN_STATUS_UP)) { @@ -2721,7 +2694,7 @@ static eWanState_t wan_transition_mapt_feature_refresh(WanMgr_IfaceSM_Controller WanManager_ConfigurePPPSession(p_VirtIf, TRUE); } - if ((p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP || p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_SLAAC ) && + if (p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP && (p_VirtIf->IP.Mode == DML_WAN_IP_MODE_DUAL_STACK || p_VirtIf->IP.Mode == DML_WAN_IP_MODE_IPV6_ONLY)) { // MAPT config changed, if we got a v6 lease at this stage, send a v6 RELEASE @@ -2775,6 +2748,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) @@ -2891,70 +2865,6 @@ static eWanState_t wan_transition_mapt_down(WanMgr_IfaceSM_Controller_t* pWanIfa } #endif //FEATURE_MAPT -static eWanState_t wan_transition_configuring_interface(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl) -{ - CcspTraceInfo(("%s %d \n", __FUNCTION__, __LINE__)); - - if((pWanIfaceCtrl == NULL) || (pWanIfaceCtrl->pIfaceData == NULL)) - { - return ANSC_STATUS_FAILURE; - } - - DML_WAN_IFACE* pInterface = pWanIfaceCtrl->pIfaceData; - - // Check the interface type is cold standby then needs to be activate/decativate at runtime - if( WAN_IFACE_CONN_TYPE_COLD_STANDBY == pInterface->IfaceConnectionType ) - { - // Configure Interface - if ( ANSC_STATUS_FAILURE == WanManager_RdkBus_EnableInterface(pInterface, TRUE) ) - { - CcspTraceInfo(("%s %d - Interface '%s' - TRANSITION PHY CONFIGURING\n", __FUNCTION__, __LINE__, pInterface->Name)); - return WAN_STATE_PHY_CONFIGURING; - } - } - - CcspTraceInfo(("%s %d - Interface '%s' - TRANSITION STATE PHY DOWN\n", __FUNCTION__, __LINE__, pInterface->Name)); - return WAN_STATE_PHY_DOWN; -} - -static eWanState_t wan_transition_phy_deconfiguring(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl) -{ - CcspTraceInfo(("%s %d \n", __FUNCTION__, __LINE__)); - - if((pWanIfaceCtrl == NULL) || (pWanIfaceCtrl->pIfaceData == NULL)) - { - return ANSC_STATUS_FAILURE; - } - - DML_WAN_IFACE* pInterface = pWanIfaceCtrl->pIfaceData; - - // Check the interface type is cold standby then needs to be activate/decativate at runtime - if( WAN_IFACE_CONN_TYPE_COLD_STANDBY == pInterface->IfaceConnectionType ) - { - // Configure Interface - WanManager_RdkBus_EnableInterface(pInterface, FALSE); - pInterface->BaseInterfaceStatus = WAN_IFACE_PHY_STATUS_DOWN; - } - - CcspTraceInfo(("%s %d - Interface '%s' - TRANSITION STATE PHY CONFIGURING\n", __FUNCTION__, __LINE__, pInterface->Name)); - return WAN_STATE_PHY_CONFIGURING; -} - -static eWanState_t wan_transition_wan_deconfigured(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl) -{ - CcspTraceInfo(("%s %d \n", __FUNCTION__, __LINE__)); - - if((pWanIfaceCtrl == NULL) || (pWanIfaceCtrl->pIfaceData == NULL)) - { - return ANSC_STATUS_FAILURE; - } - - DML_WAN_IFACE* pInterface = pWanIfaceCtrl->pIfaceData; - - CcspTraceInfo(("%s %d - Interface '%s' - TRANSITION STATE PHY DOWN\n", __FUNCTION__, __LINE__, pInterface->Name)); - return WAN_STATE_PHY_DOWN; -} - static eWanState_t wan_transition_exit(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl) { CcspTraceInfo(("%s %d \n", __FUNCTION__, __LINE__)); @@ -2978,6 +2888,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; @@ -2994,6 +2905,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) @@ -3052,8 +2964,6 @@ static eWanState_t wan_transition_standby_deconfig_ips(WanMgr_IfaceSM_Controller } } - WanMgr_Configure_accept_ra(p_VirtIf, FALSE); - if (p_VirtIf->IP.Ipv6Status == WAN_IFACE_IPV6_STATE_UP) { CcspTraceInfo(("%s %d - Deconfiguring Ipv6 for %s \n", __FUNCTION__, __LINE__, p_VirtIf->Name)); @@ -3064,6 +2974,10 @@ static eWanState_t wan_transition_standby_deconfig_ips(WanMgr_IfaceSM_Controller p_VirtIf->IP.Ipv6Changed = TRUE; //We have deconfigured Ipv6 from the device. set this flag to configure again when moves back to active. } + 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) { @@ -3078,61 +2992,6 @@ static eWanState_t wan_transition_standby_deconfig_ips(WanMgr_IfaceSM_Controller /*********************************************************************************/ /**************************** STATES *********************************************/ /*********************************************************************************/ -static eWanState_t wan_state_phy_configuring(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl) -{ - if((pWanIfaceCtrl == NULL) || (pWanIfaceCtrl->pIfaceData == NULL)) - { - return ANSC_STATUS_FAILURE; - } - - DML_WAN_IFACE* pInterface = pWanIfaceCtrl->pIfaceData; - DML_VIRTUAL_IFACE* p_VirtIf = WanMgr_getVirtualIfaceById(pInterface->VirtIfList, pWanIfaceCtrl->VirIfIdx); - - if (pWanIfaceCtrl->WanEnable == FALSE || - pInterface->Selection.Enable == FALSE || - p_VirtIf->Enable == FALSE || - pInterface->Selection.Status == WAN_IFACE_NOT_SELECTED) - { - return wan_transition_exit(pWanIfaceCtrl); - } - - - //TBC: Workaround, Wait in current state if the component not ready - if((0 == strncmp(pInterface->BaseInterface,WIFI_BASE_IFACE_PATH, strlen(WIFI_BASE_IFACE_PATH))) && - (access("/tmp/wifi_ready_to_process", F_OK) != 0)) - { - return WAN_STATE_PHY_CONFIGURING; - } - - return wan_transition_configuring_interface(pWanIfaceCtrl); -} - -static eWanState_t wan_state_phy_down(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl) -{ - if((pWanIfaceCtrl == NULL) || (pWanIfaceCtrl->pIfaceData == NULL)) - { - return ANSC_STATUS_FAILURE; - } - - DML_WAN_IFACE* pInterface = pWanIfaceCtrl->pIfaceData; - DML_VIRTUAL_IFACE* p_VirtIf = WanMgr_getVirtualIfaceById(pInterface->VirtIfList, pWanIfaceCtrl->VirIfIdx); - - if (pWanIfaceCtrl->WanEnable == FALSE || - pInterface->Selection.Enable == FALSE || - p_VirtIf->Enable == FALSE || - pInterface->Selection.Status == WAN_IFACE_NOT_SELECTED) - { - return wan_transition_phy_deconfiguring(pWanIfaceCtrl); - } - - if ( pInterface->BaseInterfaceStatus == WAN_IFACE_PHY_STATUS_UP ) - { - return wan_transition_vlan_configure(pWanIfaceCtrl); - } - - return WAN_STATE_PHY_DOWN; -} - static eWanState_t wan_state_vlan_configuring(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl) { if((pWanIfaceCtrl == NULL) || (pWanIfaceCtrl->pIfaceData == NULL)) @@ -3225,7 +3084,7 @@ static eWanState_t wan_state_ppp_configuring(WanMgr_IfaceSM_Controller_t* pWanIf if(p_VirtIf->PPP.Enable == TRUE) { if(p_VirtIf->PPP.LinkStatus == WAN_IFACE_PPP_LINK_STATUS_UP && - !(((p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP || p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_SLAAC ) && + !((p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP && (p_VirtIf->IP.Mode == DML_WAN_IP_MODE_DUAL_STACK || p_VirtIf->IP.Mode == DML_WAN_IP_MODE_IPV6_ONLY)) && p_VirtIf->PPP.IPV6CPStatus != WAN_IFACE_IPV6CP_STATUS_UP)) //If dhcpv6 used on PPP interface wait for IPv6cp status { @@ -3369,7 +3228,7 @@ static eWanState_t wan_state_obtaining_ip_addresses(WanMgr_IfaceSM_Controller_t* WanManager_StopDhcpv4Client(p_VirtIf, STOP_DHCP_WITH_RELEASE); } - if((p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP || p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_SLAAC ) && + if(p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP && (p_VirtIf->IP.Mode == DML_WAN_IP_MODE_IPV6_ONLY || p_VirtIf->IP.Mode == DML_WAN_IP_MODE_DUAL_STACK)) { if(p_VirtIf->IP.Dhcp6cStatus != DHCPC_STARTED) @@ -3531,7 +3390,7 @@ static eWanState_t wan_state_ipv4_leased(WanMgr_IfaceSM_Controller_t* pWanIfaceC //Start dhcpv6 client if Ip mode changed runtime if(p_VirtIf->IP.RefreshDHCP == TRUE && - ( p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP || p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_SLAAC ) && + p_VirtIf->IP.IPv6Source == DML_WAN_IP_SOURCE_DHCP && p_VirtIf->IP.Mode == DML_WAN_IP_MODE_DUAL_STACK && p_VirtIf->IP.Dhcp6cStatus != DHCPC_STARTED) { @@ -3665,7 +3524,7 @@ static eWanState_t wan_state_ipv6_leased(WanMgr_IfaceSM_Controller_t* pWanIfaceC else if (p_VirtIf->IP.Ipv6Status == WAN_IFACE_IPV6_STATE_DOWN || (p_VirtIf->VLAN.Enable == TRUE && p_VirtIf->VLAN.Status == WAN_IFACE_LINKSTATUS_DOWN )|| (p_VirtIf->PPP.Enable == TRUE && p_VirtIf->PPP.LinkStatus != WAN_IFACE_PPP_LINK_STATUS_UP)|| // PPP is Enabled but DOWN - (p_VirtIf->IP.RefreshDHCP == TRUE && ((p_VirtIf->IP.IPv6Source != DML_WAN_IP_SOURCE_DHCP && p_VirtIf->IP.IPv6Source != DML_WAN_IP_SOURCE_SLAAC ) || // Ipv6source is not dhcp + (p_VirtIf->IP.RefreshDHCP == TRUE && (p_VirtIf->IP.IPv6Source != DML_WAN_IP_SOURCE_DHCP || // Ipv6source is not dhcp (p_VirtIf->IP.Mode != DML_WAN_IP_MODE_IPV6_ONLY && p_VirtIf->IP.Mode != DML_WAN_IP_MODE_DUAL_STACK)))) { return wan_transition_ipv6_down(pWanIfaceCtrl); @@ -3810,7 +3669,7 @@ static eWanState_t wan_state_dual_stack_active(WanMgr_IfaceSM_Controller_t* pWan } } else if (p_VirtIf->IP.Ipv6Status == WAN_IFACE_IPV6_STATE_DOWN || - (p_VirtIf->IP.RefreshDHCP == TRUE && ( ( p_VirtIf->IP.IPv6Source != DML_WAN_IP_SOURCE_DHCP && p_VirtIf->IP.IPv6Source != DML_WAN_IP_SOURCE_SLAAC ) || + (p_VirtIf->IP.RefreshDHCP == TRUE && ( p_VirtIf->IP.IPv6Source != DML_WAN_IP_SOURCE_DHCP || (p_VirtIf->IP.Mode != DML_WAN_IP_MODE_DUAL_STACK && p_VirtIf->IP.Mode != DML_WAN_IP_MODE_IPV6_ONLY)))) { /* TODO: Add IPoE Health Check failed for IPv6 here */ @@ -4101,7 +3960,7 @@ static eWanState_t wan_state_deconfiguring_wan(WanMgr_IfaceSM_Controller_t* pWan return WAN_STATE_DECONFIGURING_WAN; } - return wan_transition_wan_deconfigured(pWanIfaceCtrl); + return wan_transition_exit(pWanIfaceCtrl); } static eWanState_t wan_state_exit(WanMgr_IfaceSM_Controller_t* pWanIfaceCtrl) @@ -4269,16 +4128,6 @@ static void* WanMgr_InterfaceSMThread( void *arg ) // process state switch (iface_sm_state) { - case WAN_STATE_PHY_CONFIGURING: - { - iface_sm_state = wan_state_phy_configuring(pWanIfaceCtrl); - break; - } - case WAN_STATE_PHY_DOWN: - { - iface_sm_state = wan_state_phy_down(pWanIfaceCtrl); - break; - } case WAN_STATE_VLAN_CONFIGURING: { iface_sm_state = wan_state_vlan_configuring(pWanIfaceCtrl); From adb087f882d6ebae8ff0b12de1ee2ce8062dc3b8 Mon Sep 17 00:00:00 2001 From: Parthiban Selvaraj <167313466+S-Parthiban-Selvaraj@users.noreply.github.com> Date: Tue, 16 Sep 2025 14:59:12 +0100 Subject: [PATCH 12/16] CBR2-2208 : Compilation error when enabling DHCP Manager (#149) wanmgr(dhcp): guard MAP-T field in DHCPv6 lease debug print Wrap the maptAssigned field and its printf argument in copyDhcpv6Data() with #ifdef FEATURE_MAPT, and adjust the format/argument list accordingly. This prevents a format/argument mismatch and allows successful compilation when FEATURE_MAPT is not enabled. Signed-off-by: Parthiban Selvaraj --- source/WanManager/wanmgr_dhcp_event_handler.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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); From 92fcd76f6eacdd3e76b25eb4436e870c1062f6ed Mon Sep 17 00:00:00 2001 From: rdkcmf Date: Thu, 25 Sep 2025 17:02:15 +0100 Subject: [PATCH 13/16] Deploy cla action --- .github/workflows/cla.yml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/cla.yml b/.github/workflows/cla.yml index 05504793..c58b1b0b 100644 --- a/.github/workflows/cla.yml +++ b/.github/workflows/cla.yml @@ -1,13 +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] + types: [opened, closed, synchronize] jobs: CLA-Lite: name: "Signature" - uses: rdkcentral/cmf-actions/.github/workflows/cla.yml@main + uses: rdkcentral/cmf-actions/.github/workflows/cla.yml@v1 secrets: - PERSONAL_ACCESS_TOKEN: ${{ secrets.CLA_ASSISTANT }} \ No newline at end of file + PERSONAL_ACCESS_TOKEN: ${{ secrets.CLA_ASSISTANT }} From 0d7694d749eb37f812d8be40be77dfbfaa2ed008 Mon Sep 17 00:00:00 2001 From: Parthiban Selvaraj <167313466+S-Parthiban-Selvaraj@users.noreply.github.com> Date: Mon, 6 Oct 2025 14:24:53 +0100 Subject: [PATCH 14/16] RDKB-61835 : Update Ipv6 sysevents when Ipv6 configured. (#152) * RDKB-61835 : Update Ipv6 sysevents when Ipv6 configured. Signed-off-by: Parthiban Selvaraj * Changing buffer size --------- Signed-off-by: Parthiban Selvaraj --- source/WanManager/wanmgr_interface_sm.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/source/WanManager/wanmgr_interface_sm.c b/source/WanManager/wanmgr_interface_sm.c index 7f2b6e90..7aed6054 100644 --- a/source/WanManager/wanmgr_interface_sm.c +++ b/source/WanManager/wanmgr_interface_sm.c @@ -1364,7 +1364,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); @@ -1385,12 +1385,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) { @@ -1418,15 +1429,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__)); From 72d6e127c9a757d51774cf788fc92c87d83735c4 Mon Sep 17 00:00:00 2001 From: KavyaShivalingaiah Date: Tue, 7 Oct 2025 20:06:40 +0530 Subject: [PATCH 15/16] RDKB-61845: In telemetry2_0 Event markers are assigned without component name (#153) T2 component initialising Signed-off-by: kavya.shivalingaiah@sky.uk --------- Signed-off-by: kavya.shivalingaiah@sky.uk --- source/WanManager/wanmgr_main.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) 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; } From 31ba6354b71476c0846caa1d34bb1bb0c42b6aa2 Mon Sep 17 00:00:00 2001 From: manigandanj <47597704+manigandanj@users.noreply.github.com> Date: Fri, 10 Oct 2025 19:34:35 +0530 Subject: [PATCH 16/16] RDKBACCL-537: USB Dongle(RNDIS/MODEM type) support to CellularManager (#148) Reason for change: CellularManager handles both usb0 and wwan0, thus avoiding the copy of wwan0 interface name Test procedure: Tested RNDIS USB tethering feature Risks: Low Signed-off-by: Manigandan Gopalakrishnan --- source/WanManager/wanmgr_interface_sm.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/WanManager/wanmgr_interface_sm.c b/source/WanManager/wanmgr_interface_sm.c index 7aed6054..6bbab1a5 100644 --- a/source/WanManager/wanmgr_interface_sm.c +++ b/source/WanManager/wanmgr_interface_sm.c @@ -372,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; } }