diff --git a/arch/intel_usg/boards/arm_shared/scripts/network_response.sh b/arch/intel_usg/boards/arm_shared/scripts/network_response.sh index 0370beb..78e1d18 100644 --- a/arch/intel_usg/boards/arm_shared/scripts/network_response.sh +++ b/arch/intel_usg/boards/arm_shared/scripts/network_response.sh @@ -87,13 +87,19 @@ checkForWanFailOver() echo_t "currentWanIf: $currentWanIf defaultWanIf: $defaultWanIf" if [ "x$currentWanIf" = "x" ] || [ "$currentWanIf" == "$defaultWanIf" ];then AllowRemoteInterfaces=`dmcli eRT getv Device.X_RDK_WanManager.AllowRemoteInterfaces | grep value | cut -f3 -d : | cut -f2 -d" "` - Interface_Available_Status=`dmcli eRT getv Device.X_RDK_WanManager.InterfaceAvailableStatus | grep -i "REMOTE_LTE,1"` - echo_t "AllowRemoteInterfaces: $AllowRemoteInterfaces Interface_Available_Status: $Interface_Available_Status" + Interface_Available_Status=`dmcli eRT getv Device.X_RDK_WanManager.InterfaceAvailableStatus | grep -i "REMOTE_LTE,1"` + HS_Interface_Available_Status=`dmcli eRT getv Device.X_RDK_WanManager.InterfaceAvailableStatus | grep -i "HOTSPOT,1"` + echo_t "AllowRemoteInterfaces: $AllowRemoteInterfaces Interface_Available_Status: $Interface_Available_Status HS_Interface_Available_Status: $HS_Interface_Available_Status" if [[ "x$Interface_Available_Status" != "x" ]] && [ "$AllowRemoteInterfaces" = "true" ] then #LTE wan interface is available echo_t "Network Response: checkForWanFailOver : enabled" return 1 + elif [[ "x$HS_Interface_Available_Status" != "x" ]] + then + #Hotspot wan interface is available + echo_t "Network Response: checkForWanFailOver : enabled" + return 1 else echo_t "Network Response: checkForWanFailOver : disabled" return 0 diff --git a/source/TR-181/middle_layer_src/cosa_rbus_handler_apis.c b/source/TR-181/middle_layer_src/cosa_rbus_handler_apis.c index 565f894..c8f4c46 100644 --- a/source/TR-181/middle_layer_src/cosa_rbus_handler_apis.c +++ b/source/TR-181/middle_layer_src/cosa_rbus_handler_apis.c @@ -28,6 +28,7 @@ #include "safec_lib_common.h" #include "cosa_dhcpv6_apis.h" #include "syscfg/syscfg.h" +#include "secure_wrapper.h" #if defined (RBUS_WAN_IP) #include "cosa_deviceinfo_dml.h" @@ -1343,6 +1344,81 @@ rbusError_t eventWANIPSubHandler(rbusHandle_t handle, rbusEventSubAction_t actio #endif /*RBUS_WAN_IP*/ +#if defined(RBUS_BUILD_FLAG_ENABLE) && !defined(_HUB4_PRODUCT_REQ_) && !defined(RDKB_EXTENDER_ENABLED) +static void Cosa_Rbus_Handler_WanStatus_EventHandler(rbusHandle_t handle, rbusEvent_t const* event, rbusEventSubscription_t* subscription) +{ + (void)handle; + (void)subscription; + + const char* eventName = event->name; + + if (eventName == NULL) + { + CcspTraceError(("%s %d : FAILED , value is NULL\n",__FUNCTION__, __LINE__)); + return; + } + + CcspTraceInfo(("%s %d: Received %s\n", __FUNCTION__, __LINE__, eventName)); + + // CurrentStatus Event + if( 0 == strncmp(eventName, WANMGR_CURRENT_STATUS_TR181, strlen(WANMGR_CURRENT_STATUS_TR181)) ) + { + rbusValue_t value; + value = rbusObject_GetValue(event->data, NULL); + + char acStatus[16] = {0}; + if (value != NULL) + { + const char* statusStr = rbusValue_GetString(value, NULL); + if (statusStr != NULL) + { + strncpy(acStatus, statusStr, sizeof(acStatus) - 1); + acStatus[sizeof(acStatus) - 1] = '\0'; + } + else + { + CcspTraceError(("%s %d : FAILED , rbusValue_GetString returned NULL\n",__FUNCTION__, __LINE__)); + return; + } + } + else + { + CcspTraceError(("%s %d : FAILED , rbusObject_GetValue returned NULL\n",__FUNCTION__, __LINE__)); + return; + } + CcspTraceInfo(("%s: Event:%s Status:%s\n", __FUNCTION__, eventName, acStatus)); + + // Trigger Network Response script + if( 0 == strcmp(acStatus, "Up") ) + { + v_secure_system("sh /etc/network_response.sh &"); + } +#if defined (_XB6_PRODUCT_REQ_) + else + { + v_secure_system("sh /etc/network_response.sh OnlyForNoRf &"); + } +#endif /** _XB6_PRODUCT_REQ_ */ + } +} + +/** Cosa_Rbus_Handler_SubscribeWanStatusEvent() */ +void Cosa_Rbus_Handler_SubscribeWanStatusEvent( void ) +{ + rbusError_t rc; + + /* Timeout value of 60 seconds is chosen to balance responsiveness and resource usage for WAN status event subscription. + This duration allows sufficient time for event delivery and processing under typical network conditions. */ + rc = rbusEvent_Subscribe(handle, WANMGR_CURRENT_STATUS_TR181, Cosa_Rbus_Handler_WanStatus_EventHandler, NULL, 60); + if(rc != RBUS_ERROR_SUCCESS) + { + CcspTraceError(("%s %d - Failed to Subscribe %s, Error=%s\n", __FUNCTION__, __LINE__, WANMGR_CURRENT_STATUS_TR181, rbusError_ToString(rc))); + return; + } + CcspTraceInfo(("%s %d - Successfully subscribed to %s\n", __FUNCTION__, __LINE__, WANMGR_CURRENT_STATUS_TR181)); +} +#endif /** RBUS_BUILD_FLAG_ENABLE && !_HUB4_PRODUCT_REQ_ && !RDKB_EXTENDER_ENABLED */ + #if defined (WAN_FAILOVER_SUPPORTED) || defined(RDKB_EXTENDER_ENABLED) || defined(RBUS_BUILD_FLAG_ENABLE) || defined(_HUB4_PRODUCT_REQ_) || defined (_PLATFORM_RASPBERRYPI_) || defined (WIFI_MANAGE_SUPPORTED) || defined (RBUS_WAN_IP) /*********************************************************************** @@ -1392,6 +1468,12 @@ rbusError_t devCtrlRbusInit() //initialize sysevent PAM_Rbus_SyseventInit(); #endif + +#if defined(RBUS_BUILD_FLAG_ENABLE) && !defined(_HUB4_PRODUCT_REQ_) && !defined(RDKB_EXTENDER_ENABLED) + //Subscribe WAN Status Event + Cosa_Rbus_Handler_SubscribeWanStatusEvent(); +#endif /** RBUS_BUILD_FLAG_ENABLE && !_HUB4_PRODUCT_REQ_ && !RDKB_EXTENDER_ENABLED */ + return rc; } #endif diff --git a/source/TR-181/middle_layer_src/cosa_rbus_handler_apis.h b/source/TR-181/middle_layer_src/cosa_rbus_handler_apis.h index ac15050..c9c2e5a 100644 --- a/source/TR-181/middle_layer_src/cosa_rbus_handler_apis.h +++ b/source/TR-181/middle_layer_src/cosa_rbus_handler_apis.h @@ -39,6 +39,7 @@ #define PRIMARY_WAN_IPv6_ADDRESS "Device.DeviceInfo.X_COMCAST-COM_WAN_IPv6" #endif /*RBUS_WAN_IP*/ +#define WANMGR_CURRENT_STATUS_TR181 "Device.X_RDK_WanManager.CurrentStatus" #define ARRAY_SZ(x) (sizeof(x) / sizeof((x)[0])) #if defined (WAN_FAILOVER_SUPPORTED) || defined(RDKB_EXTENDER_ENABLED) @@ -91,6 +92,10 @@ rbusError_t RRD_SetBoolHandler(rbusHandle_t handle, rbusProperty_t property, rbu rbusError_t devCtrlRbusInit(); #endif +#if defined(RBUS_BUILD_FLAG_ENABLE) && !defined(_HUB4_PRODUCT_REQ_) && !defined(RDKB_EXTENDER_ENABLED) +void Cosa_Rbus_Handler_SubscribeWanStatusEvent( void ); +#endif /** RBUS_BUILD_FLAG_ENABLE && !_HUB4_PRODUCT_REQ_ && !RDKB_EXTENDER_ENABLED */ + #if defined (RBUS_WAN_IP) typedef struct { char* event_name;