From a6675cd334e68d987b7f7d78f68489132d39b030 Mon Sep 17 00:00:00 2001 From: aj970 Date: Wed, 21 Jan 2026 10:29:15 +0000 Subject: [PATCH 1/4] Trigger zebra restart once LAN started Signed-off-by: aj970 --- .../scripts/init/service.d/service_routed.sh | 20 ++++++ .../service_deviceMode/service_devicemode.c | 31 ++++++++- source/service_routed/service_routed.c | 69 +++++++++++++++++-- 3 files changed, 114 insertions(+), 6 deletions(-) diff --git a/source/scripts/init/service.d/service_routed.sh b/source/scripts/init/service.d/service_routed.sh index 41421dde..f7fe2587 100755 --- a/source/scripts/init/service.d/service_routed.sh +++ b/source/scripts/init/service.d/service_routed.sh @@ -39,8 +39,23 @@ # $1 is the calling event (current_wan_state current_lan_state ipv6_prefix) #------------------------------------------------------------------ +# Function to log messages with timestamp +log() { + local level="$1"; shift + local message="$*" + local timestamp + local log_file + timestamp=$(date +'%Y-%m-%d %H:%M:%S') + echo "$timestamp [$level] $message" | tee -a "$LOG_FILE" + log_file="/rdklogs/logs/service_routed_$(date +'%Y-%m-%d').log" + echo "$timestamp [$level] $message" | tee -a "$log_file" +} + source /etc/device.properties +# Start logging +log INFO "Script started." + SERVICE_NAME="routed" LANULASupport=`sysevent get LANULASupport` case "$1" in @@ -59,15 +74,20 @@ case "$1" in wan-status) status=$(sysevent get wan-status) if [ "$status" == "started" ]; then + log INFO "WAN status started. Starting routed service." service_routed start elif [ "$status" == "stopped" ]; then + log INFO "WAN status stopped. Stopping routed service." service_routed stop fi ;; lan-status) status=$(sysevent get lan-status) if [ "$status" == "started" ]; then + log INFO "LAN status started. Starting routed service." service_routed start + log INFO "LAN status started. Restarting zebra." + service_routed radv-restart elif [ "$status" == "stopped" ]; then # As per Sky requirement, radvd should run with ULA prefix though the wan-status is down if [ "$BOX_TYPE" != "HUB4" ] && [ "$BOX_TYPE" != "SR300" ] && [ "$BOX_TYPE" != "SE501" ] && [ "$BOX_TYPE" != "SR213" ] && [ "$BOX_TYPE" != "WNXL11BWL" ] && [ "$LANULASupport" != "true" ]; then diff --git a/source/service_deviceMode/service_devicemode.c b/source/service_deviceMode/service_devicemode.c index 3626ba66..48d83197 100644 --- a/source/service_deviceMode/service_devicemode.c +++ b/source/service_deviceMode/service_devicemode.c @@ -63,6 +63,21 @@ #include #include "ccsp_memory.h" +#define LOG_FILE "/rdklogs/logs/Debug_devicemode.txt" +#define APPLY_PRINT(fmt ...) {\ +FILE *logfp = fopen(LOG_FILE , "a+");\ +if (logfp){\ +time_t s = time(NULL);\ +struct tm* current_time = localtime(&s);\ +fprintf(logfp, "[%02d:%02d:%02d] ",\ +current_time->tm_hour,\ +current_time->tm_min,\ +current_time->tm_sec);\ +fprintf(logfp, fmt);\ +fclose(logfp);\ +}\ +}\ + #ifdef FEATURE_SUPPORT_ONBOARD_LOGGING #include #define LOGGING_MODULE "Utopia" @@ -304,18 +319,21 @@ int runCommandInShellBlocking(char *command) int service_stop(int mode) { + APPLY_PRINT("%s: Stopping services according to device mode %d\n", __FUNCTION__, mode); char buf[256]; memset(buf,0,sizeof(buf)); switch(mode) { case DEVICE_MODE_ROUTER: { + APPLY_PRINT("%s: Stopping services for ROUTER mode\n", __FUNCTION__); sysevent_set(sysevent_fd, sysevent_token, "lan-stop", "", 0); sysevent_set(sysevent_fd, sysevent_token, "ipv4-down", "5", 0); #if defined (_COSA_BCM_ARM_) sysevent_set(sysevent_fd, sysevent_token, "wan-stop", "", 0); #endif //lte-1312 + APPLY_PRINT("%s: Killing zebra process\n", __FUNCTION__); runCommandInShellBlocking("killall zebra"); snprintf(buf,sizeof(buf),"execute_dir %s stop", ROUTER_MODE_SERVICES_PATH_1); runCommandInShellBlocking(buf); @@ -325,8 +343,10 @@ int service_stop(int mode) case DEVICE_MODE_EXTENDER: { #if defined (_COSA_BCM_ARM_) + APPLY_PRINT("%s: Stopping WAN services for EXTENDER mode\n", __FUNCTION__); sysevent_set(sysevent_fd, sysevent_token, "wan-stop", "", 0); #endif + APPLY_PRINT("%s: Stopping LAN services for EXTENDER mode\n", __FUNCTION__); sysevent_set(sysevent_fd, sysevent_token, "lan-stop", "", 0); sysevent_set(sysevent_fd, sysevent_token, "ipv4-down", "5", 0); runCommandInShellBlocking("systemctl stop CcspLMLite.service"); @@ -375,6 +395,7 @@ int GetL2InterfaceNameFromPsm(int instanceNumber, char *pName, int len) int service_start(int mode) { + APPLY_PRINT("%s: Starting services according to device mode %d\n", __FUNCTION__, mode); char buf[256]; memset(buf,0,sizeof(buf)); int rc = -1; @@ -382,19 +403,23 @@ int service_start(int mode) { case DEVICE_MODE_ROUTER: { + APPLY_PRINT("%s: Starting services for ROUTER mode\n", __FUNCTION__); int bridgemode = 0; if( 0 == syscfg_get( NULL, "bridge_mode", buf, sizeof(buf) ) ) { bridgemode = atoi(buf); + APPLY_PRINT("%s: bridge_mode value is %d \n", __FUNCTION__, bridgemode); } snprintf(buf,sizeof(buf),"execute_dir %s", ROUTER_MODE_SERVICES_PATH_1); runCommandInShellBlocking(buf); if (bridgemode == 0) { + APPLY_PRINT("%s: Starting LAN services\n", __FUNCTION__); sysevent_set(sysevent_fd, sysevent_token, "lan-start", "", 0); } else { + APPLY_PRINT("%s: Bridge mode is enabled, skipping LAN start\n", __FUNCTION__); sysevent_set(sysevent_fd, sysevent_token, "bridge-start", "", 0); } // Do wan start only in XB technicolor for xb->xb backup wan testing. @@ -417,13 +442,17 @@ int service_start(int mode) sysevent_set(sysevent_fd, sysevent_token, "lnf-setup", buf, 0); #endif runCommandInShellBlocking("systemctl restart CcspLMLite.service"); - sysevent_set(sysevent_fd, sysevent_token, "zebra-restart", "", 0); + char lanStartVal[64] = {0}; + sysevent_get(sysevent_fd, sysevent_token, "lan-status", lanStartVal, sizeof(lanStartVal)); + APPLY_PRINT("%s: lan-status value is %s \n", __FUNCTION__, lanStartVal); + // sysevent_set(sysevent_fd, sysevent_token, "zebra-restart", "", 0); } break; case DEVICE_MODE_EXTENDER: { char tmpbuf[64] = {0}; //lte-1312 + APPLY_PRINT("%s, killing zebra process when switching to extender mode \n", __FUNCTION__); runCommandInShellBlocking("killall zebra"); sysevent_set(sysevent_fd, sysevent_token, "lan-start", "", 0); sysevent_set(sysevent_fd, sysevent_token, "lan_status-dhcp", "started", 0); diff --git a/source/service_routed/service_routed.c b/source/service_routed/service_routed.c index 34e7ca35..dec08a90 100644 --- a/source/service_routed/service_routed.c +++ b/source/service_routed/service_routed.c @@ -92,6 +92,23 @@ static const char* const service_routed_component_id = "ccsp.routed"; fclose(fptr1);\ }\ } + +#include +#define LOG_FILE "/rdklogs/logs/service_routed.txt" +#define APPLY_PRINT(fmt ...) {\ +FILE *logfp = fopen(LOG_FILE , "a+");\ +if (logfp){\ +time_t s = time(NULL);\ +struct tm* current_time = localtime(&s);\ +fprintf(logfp, "[%02d:%02d:%02d] ",\ +current_time->tm_hour,\ +current_time->tm_min,\ +current_time->tm_sec);\ +fprintf(logfp, fmt);\ +fclose(logfp);\ +}\ +}\ + #include #endif @@ -2000,12 +2017,15 @@ STATIC void checkIfModeIsSwitched(int sefd, token_t setok) #endif STATIC int radv_start(struct serv_routed *sr) { + APPLY_PRINT("%s: Starting radv daemon\n", __FUNCTION__); #ifdef RDKB_EXTENDER_ENABLED int deviceMode = GetDeviceNetworkMode(); + APPLY_PRINT("%s: Device Mode is %d\n", __FUNCTION__, deviceMode); if ( DEVICE_MODE_EXTENDER == deviceMode ) { fprintf(logfptr, "Device is EXT mode , no need of running zebra for radv\n"); + APPLY_PRINT("%s: Device is EXT mode , no need of running zebra for radv\n", __FUNCTION__); return -1; } #endif @@ -2039,8 +2059,10 @@ STATIC int radv_start(struct serv_routed *sr) char aBridgeMode[8]; syscfg_get(NULL, "bridge_mode", aBridgeMode, sizeof(aBridgeMode)); + APPLY_PRINT("%s: Bridge mode is %s and LAN value = %d\n", __FUNCTION__, aBridgeMode, sr->lan_ready); if ((!strcmp(aBridgeMode, "0")) && (!sr->lan_ready)) { fprintf(logfptr, "%s: LAN is not ready !\n", __FUNCTION__); + APPLY_PRINT("%s: LAN is not ready !\n", __FUNCTION__); return -1; } #endif @@ -2052,10 +2074,12 @@ STATIC int radv_start(struct serv_routed *sr) result = getLanIpv6Info(&ipv6_enable, &ula_enable); if(result != 0) { fprintf(logfptr, "getLanIpv6Info failed"); + APPLY_PRINT("%s: getLanIpv6Info failed", __FUNCTION__); return -1; } if(ipv6_enable == 0) { daemon_stop(ZEBRA_PID_FILE, "zebra"); + APPLY_PRINT("%s: IPv6 is not enabled so stopping zebra for radv\n", __FUNCTION__); return -1; } } @@ -2073,6 +2097,7 @@ STATIC int radv_start(struct serv_routed *sr) if (gen_zebra_conf(sr->sefd, sr->setok) != 0) { fprintf(logfptr, "%s: fail to save zebra config\n", __FUNCTION__); + APPLY_PRINT("%s: fail to save zebra config\n", __FUNCTION__); return -1; } @@ -2100,15 +2125,28 @@ STATIC int radv_start(struct serv_routed *sr) v_secure_system("zebra -d -f %s -P 0 2> /tmp/.zedra_error", ZEBRA_CONF_FILE); printf("DHCPv6 is %s. Starting zebra Process\n", (bEnabled?"Enabled":"Disabled")); + APPLY_PRINT("%s : Zebra Process Started\n", __FUNCTION__); + APPLY_PRINT("%s : DHCPv6 is %s. Starting zebra Process\n", __FUNCTION__, (bEnabled?"Enabled":"Disabled")); #else + APPLY_PRINT("%s : Starting Zebra Process\n", __FUNCTION__); v_secure_system("zebra -d -f %s -P 0 2> /tmp/.zedra_error", ZEBRA_CONF_FILE); + APPLY_PRINT("%s : Zebra Process Started\n", __FUNCTION__); #endif + + if(is_daemon_running(ZEBRA_PID_FILE, "zebra") == 0) + { + APPLY_PRINT("%s: Failed to start zebra process\n", __FUNCTION__); + } + else { + APPLY_PRINT("%s: Zebra is running\n", __FUNCTION__); + } return 0; } STATIC int radv_stop(struct serv_routed *sr) { + APPLY_PRINT("%s : Stopping radv services \n", __FUNCTION__); if(is_daemon_running(ZEBRA_PID_FILE, "zebra")) { return 0; @@ -2118,8 +2156,10 @@ STATIC int radv_stop(struct serv_routed *sr) STATIC int radv_restart(struct serv_routed *sr) { + APPLY_PRINT("%s: Restarting radv daemon\n", __FUNCTION__); if (radv_stop(sr) != 0){ fprintf(logfptr, "%s: radv_stop error\n", __FUNCTION__); + APPLY_PRINT("%s: radv_stop error\n", __FUNCTION__); } return radv_start(sr); } @@ -2224,6 +2264,7 @@ STATIC int rip_restart(struct serv_routed *sr) STATIC int serv_routed_start(struct serv_routed *sr) { + APPLY_PRINT("%s: Starting radv daemon\n", __FUNCTION__); #if !defined (_HUB4_PRODUCT_REQ_) || defined (_WNXL11BWL_PRODUCT_REQ_) char rtmod[16]; char prefix[64]; @@ -2235,6 +2276,7 @@ STATIC int serv_routed_start(struct serv_routed *sr) if (!sr->lan_ready) { fprintf(logfptr, "%s: LAN is not ready !\n", __FUNCTION__); + APPLY_PRINT("%s: LAN is not ready !\n", __FUNCTION__); return -1; } #if !defined (_HUB4_PRODUCT_REQ_) || defined (_WNXL11BWL_PRODUCT_REQ_) @@ -2262,6 +2304,7 @@ STATIC int serv_routed_start(struct serv_routed *sr) /* RA daemon */ if (radv_start(sr) != 0) { fprintf(logfptr, "%s: radv_start error\n", __FUNCTION__); + APPLY_PRINT("%s: radv_start error\n", __FUNCTION__); sysevent_set(sr->sefd, sr->setok, "routed-status", "error", 0); return -1; } @@ -2293,6 +2336,7 @@ STATIC int serv_routed_start(struct serv_routed *sr) STATIC int serv_routed_stop(struct serv_routed *sr) { + APPLY_PRINT("%s: Stopping service routed\n", __FUNCTION__); if (!serv_can_stop(sr->sefd, sr->setok, "routed")) return -1; @@ -2316,6 +2360,7 @@ STATIC int serv_routed_stop(struct serv_routed *sr) STATIC int serv_routed_restart(struct serv_routed *sr) { + APPLY_PRINT("%s: Restarting service routed\n", __FUNCTION__); if (serv_routed_stop(sr) != 0){ fprintf(logfptr, "%s: serv_routed_stop error\n", __FUNCTION__); } @@ -2324,6 +2369,7 @@ STATIC int serv_routed_restart(struct serv_routed *sr) STATIC int serv_routed_init(struct serv_routed *sr) { + APPLY_PRINT("%s: Initializing service routed\n", PROG_NAME); char wan_st[16], lan_st[16]; memset(sr, 0, sizeof(struct serv_routed)); @@ -2331,16 +2377,21 @@ STATIC int serv_routed_init(struct serv_routed *sr) if ((sr->sefd = sysevent_open(SE_SERV, SE_SERVER_WELL_KNOWN_PORT, SE_VERSION, PROG_NAME, &sr->setok)) < 0) { fprintf(logfptr, "%s: fail to open sysevent\n", __FUNCTION__); + APPLY_PRINT("%s: fail to open sysevent\n", __FUNCTION__); return -1; } sysevent_get(sr->sefd, sr->setok, "wan-status", wan_st, sizeof(wan_st)); - if (strcmp(wan_st, "started") == 0) + if (strcmp(wan_st, "started") == 0) { sr->wan_ready = true; + APPLY_PRINT("%s: WAN is ready and WAN value = %d\n", __FUNCTION__, sr->wan_ready); + } sysevent_get(sr->sefd, sr->setok, "lan-status", lan_st, sizeof(lan_st)); - if (strcmp(lan_st, "started") == 0) + if (strcmp(lan_st, "started") == 0) { sr->lan_ready = true; + APPLY_PRINT("%s: LAN is ready & LAN value = %d\n", __FUNCTION__, sr->lan_ready); + } return 0; } @@ -2674,6 +2725,7 @@ STATIC void usage(void) int service_routed_main(int argc, char *argv[]) { + APPLY_PRINT("%s: Entering %s\n", PROG_NAME, __FUNCTION__); int i; struct serv_routed sr; logfptr = fopen ( LOG_FILE_NAME , "a+"); @@ -2709,15 +2761,22 @@ int service_routed_main(int argc, char *argv[]) } #endif /** _RDKB_GLOBAL_PRODUCT_REQ_ */ #endif + APPLY_PRINT("%s: Initializing service routed\n", PROG_NAME); if (serv_routed_init(&sr) != 0){ exit(1); } + APPLY_PRINT("%s: Service routed initialized\n", PROG_NAME); + APPLY_PRINT("%s: Executing command `%s'\n", PROG_NAME, argv[1]); for (i = 0; i < NELEMS(cmd_ops); i++) { if (strcmp(argv[1], cmd_ops[i].cmd) != 0 || !cmd_ops[i].exec) continue; - - if (cmd_ops[i].exec(&sr) != 0){ - fprintf(logfptr, "[%s]: fail to exec `%s'\n", PROG_NAME, cmd_ops[i].cmd); + int rc1 = cmd_ops[i].exec(&sr); + if (rc1 != 0) { + fprintf(logfptr,"[%s]: `%s` failed: rc=%d errno=%d (%s)\n", PROG_NAME, cmd_ops[i].cmd, rc1, errno, strerror(errno)); + APPLY_PRINT("[%s]: `%s` failed: rc=%d errno=%d (%s)\n", PROG_NAME, cmd_ops[i].cmd, rc1, errno, strerror(errno)); + } else { + fprintf(logfptr, "[%s]: `%s` succeeded\n", PROG_NAME, cmd_ops[i].cmd); + APPLY_PRINT("[%s]: `%s` succeeded\n", PROG_NAME, cmd_ops[i].cmd); } break; } From 3a15608c6ad503d68c38f1c5fff9a254b7e893c4 Mon Sep 17 00:00:00 2001 From: aj970 Date: Wed, 21 Jan 2026 10:29:15 +0000 Subject: [PATCH 2/4] Trigger zebra restart once LAN started Signed-off-by: aj970 --- .../scripts/init/service.d/service_routed.sh | 21 +----- .../service_deviceMode/service_devicemode.c | 29 -------- source/service_routed/service_routed.c | 73 ++++--------------- 3 files changed, 15 insertions(+), 108 deletions(-) diff --git a/source/scripts/init/service.d/service_routed.sh b/source/scripts/init/service.d/service_routed.sh index f7fe2587..230cb50b 100755 --- a/source/scripts/init/service.d/service_routed.sh +++ b/source/scripts/init/service.d/service_routed.sh @@ -39,23 +39,8 @@ # $1 is the calling event (current_wan_state current_lan_state ipv6_prefix) #------------------------------------------------------------------ -# Function to log messages with timestamp -log() { - local level="$1"; shift - local message="$*" - local timestamp - local log_file - timestamp=$(date +'%Y-%m-%d %H:%M:%S') - echo "$timestamp [$level] $message" | tee -a "$LOG_FILE" - log_file="/rdklogs/logs/service_routed_$(date +'%Y-%m-%d').log" - echo "$timestamp [$level] $message" | tee -a "$log_file" -} - source /etc/device.properties -# Start logging -log INFO "Script started." - SERVICE_NAME="routed" LANULASupport=`sysevent get LANULASupport` case "$1" in @@ -74,20 +59,16 @@ case "$1" in wan-status) status=$(sysevent get wan-status) if [ "$status" == "started" ]; then - log INFO "WAN status started. Starting routed service." service_routed start elif [ "$status" == "stopped" ]; then - log INFO "WAN status stopped. Stopping routed service." service_routed stop fi ;; lan-status) status=$(sysevent get lan-status) if [ "$status" == "started" ]; then - log INFO "LAN status started. Starting routed service." service_routed start - log INFO "LAN status started. Restarting zebra." - service_routed radv-restart + service_routed radv-restart elif [ "$status" == "stopped" ]; then # As per Sky requirement, radvd should run with ULA prefix though the wan-status is down if [ "$BOX_TYPE" != "HUB4" ] && [ "$BOX_TYPE" != "SR300" ] && [ "$BOX_TYPE" != "SE501" ] && [ "$BOX_TYPE" != "SR213" ] && [ "$BOX_TYPE" != "WNXL11BWL" ] && [ "$LANULASupport" != "true" ]; then diff --git a/source/service_deviceMode/service_devicemode.c b/source/service_deviceMode/service_devicemode.c index 48d83197..fc8ce2d4 100644 --- a/source/service_deviceMode/service_devicemode.c +++ b/source/service_deviceMode/service_devicemode.c @@ -63,21 +63,6 @@ #include #include "ccsp_memory.h" -#define LOG_FILE "/rdklogs/logs/Debug_devicemode.txt" -#define APPLY_PRINT(fmt ...) {\ -FILE *logfp = fopen(LOG_FILE , "a+");\ -if (logfp){\ -time_t s = time(NULL);\ -struct tm* current_time = localtime(&s);\ -fprintf(logfp, "[%02d:%02d:%02d] ",\ -current_time->tm_hour,\ -current_time->tm_min,\ -current_time->tm_sec);\ -fprintf(logfp, fmt);\ -fclose(logfp);\ -}\ -}\ - #ifdef FEATURE_SUPPORT_ONBOARD_LOGGING #include #define LOGGING_MODULE "Utopia" @@ -319,21 +304,18 @@ int runCommandInShellBlocking(char *command) int service_stop(int mode) { - APPLY_PRINT("%s: Stopping services according to device mode %d\n", __FUNCTION__, mode); char buf[256]; memset(buf,0,sizeof(buf)); switch(mode) { case DEVICE_MODE_ROUTER: { - APPLY_PRINT("%s: Stopping services for ROUTER mode\n", __FUNCTION__); sysevent_set(sysevent_fd, sysevent_token, "lan-stop", "", 0); sysevent_set(sysevent_fd, sysevent_token, "ipv4-down", "5", 0); #if defined (_COSA_BCM_ARM_) sysevent_set(sysevent_fd, sysevent_token, "wan-stop", "", 0); #endif //lte-1312 - APPLY_PRINT("%s: Killing zebra process\n", __FUNCTION__); runCommandInShellBlocking("killall zebra"); snprintf(buf,sizeof(buf),"execute_dir %s stop", ROUTER_MODE_SERVICES_PATH_1); runCommandInShellBlocking(buf); @@ -343,10 +325,8 @@ int service_stop(int mode) case DEVICE_MODE_EXTENDER: { #if defined (_COSA_BCM_ARM_) - APPLY_PRINT("%s: Stopping WAN services for EXTENDER mode\n", __FUNCTION__); sysevent_set(sysevent_fd, sysevent_token, "wan-stop", "", 0); #endif - APPLY_PRINT("%s: Stopping LAN services for EXTENDER mode\n", __FUNCTION__); sysevent_set(sysevent_fd, sysevent_token, "lan-stop", "", 0); sysevent_set(sysevent_fd, sysevent_token, "ipv4-down", "5", 0); runCommandInShellBlocking("systemctl stop CcspLMLite.service"); @@ -395,7 +375,6 @@ int GetL2InterfaceNameFromPsm(int instanceNumber, char *pName, int len) int service_start(int mode) { - APPLY_PRINT("%s: Starting services according to device mode %d\n", __FUNCTION__, mode); char buf[256]; memset(buf,0,sizeof(buf)); int rc = -1; @@ -403,23 +382,19 @@ int service_start(int mode) { case DEVICE_MODE_ROUTER: { - APPLY_PRINT("%s: Starting services for ROUTER mode\n", __FUNCTION__); int bridgemode = 0; if( 0 == syscfg_get( NULL, "bridge_mode", buf, sizeof(buf) ) ) { bridgemode = atoi(buf); - APPLY_PRINT("%s: bridge_mode value is %d \n", __FUNCTION__, bridgemode); } snprintf(buf,sizeof(buf),"execute_dir %s", ROUTER_MODE_SERVICES_PATH_1); runCommandInShellBlocking(buf); if (bridgemode == 0) { - APPLY_PRINT("%s: Starting LAN services\n", __FUNCTION__); sysevent_set(sysevent_fd, sysevent_token, "lan-start", "", 0); } else { - APPLY_PRINT("%s: Bridge mode is enabled, skipping LAN start\n", __FUNCTION__); sysevent_set(sysevent_fd, sysevent_token, "bridge-start", "", 0); } // Do wan start only in XB technicolor for xb->xb backup wan testing. @@ -442,9 +417,6 @@ int service_start(int mode) sysevent_set(sysevent_fd, sysevent_token, "lnf-setup", buf, 0); #endif runCommandInShellBlocking("systemctl restart CcspLMLite.service"); - char lanStartVal[64] = {0}; - sysevent_get(sysevent_fd, sysevent_token, "lan-status", lanStartVal, sizeof(lanStartVal)); - APPLY_PRINT("%s: lan-status value is %s \n", __FUNCTION__, lanStartVal); // sysevent_set(sysevent_fd, sysevent_token, "zebra-restart", "", 0); } break; @@ -452,7 +424,6 @@ int service_start(int mode) { char tmpbuf[64] = {0}; //lte-1312 - APPLY_PRINT("%s, killing zebra process when switching to extender mode \n", __FUNCTION__); runCommandInShellBlocking("killall zebra"); sysevent_set(sysevent_fd, sysevent_token, "lan-start", "", 0); sysevent_set(sysevent_fd, sysevent_token, "lan_status-dhcp", "started", 0); diff --git a/source/service_routed/service_routed.c b/source/service_routed/service_routed.c index dec08a90..067d8ca2 100644 --- a/source/service_routed/service_routed.c +++ b/source/service_routed/service_routed.c @@ -93,22 +93,6 @@ static const char* const service_routed_component_id = "ccsp.routed"; }\ } -#include -#define LOG_FILE "/rdklogs/logs/service_routed.txt" -#define APPLY_PRINT(fmt ...) {\ -FILE *logfp = fopen(LOG_FILE , "a+");\ -if (logfp){\ -time_t s = time(NULL);\ -struct tm* current_time = localtime(&s);\ -fprintf(logfp, "[%02d:%02d:%02d] ",\ -current_time->tm_hour,\ -current_time->tm_min,\ -current_time->tm_sec);\ -fprintf(logfp, fmt);\ -fclose(logfp);\ -}\ -}\ - #include #endif @@ -2017,15 +2001,11 @@ STATIC void checkIfModeIsSwitched(int sefd, token_t setok) #endif STATIC int radv_start(struct serv_routed *sr) { - APPLY_PRINT("%s: Starting radv daemon\n", __FUNCTION__); - #ifdef RDKB_EXTENDER_ENABLED int deviceMode = GetDeviceNetworkMode(); - APPLY_PRINT("%s: Device Mode is %d\n", __FUNCTION__, deviceMode); if ( DEVICE_MODE_EXTENDER == deviceMode ) { fprintf(logfptr, "Device is EXT mode , no need of running zebra for radv\n"); - APPLY_PRINT("%s: Device is EXT mode , no need of running zebra for radv\n", __FUNCTION__); return -1; } #endif @@ -2058,11 +2038,8 @@ STATIC int radv_start(struct serv_routed *sr) char aBridgeMode[8]; syscfg_get(NULL, "bridge_mode", aBridgeMode, sizeof(aBridgeMode)); - - APPLY_PRINT("%s: Bridge mode is %s and LAN value = %d\n", __FUNCTION__, aBridgeMode, sr->lan_ready); if ((!strcmp(aBridgeMode, "0")) && (!sr->lan_ready)) { fprintf(logfptr, "%s: LAN is not ready !\n", __FUNCTION__); - APPLY_PRINT("%s: LAN is not ready !\n", __FUNCTION__); return -1; } #endif @@ -2073,13 +2050,11 @@ STATIC int radv_start(struct serv_routed *sr) { result = getLanIpv6Info(&ipv6_enable, &ula_enable); if(result != 0) { - fprintf(logfptr, "getLanIpv6Info failed"); - APPLY_PRINT("%s: getLanIpv6Info failed", __FUNCTION__); + fprintf(logfptr, "getLanIpv6Info failed"); return -1; } if(ipv6_enable == 0) { daemon_stop(ZEBRA_PID_FILE, "zebra"); - APPLY_PRINT("%s: IPv6 is not enabled so stopping zebra for radv\n", __FUNCTION__); return -1; } } @@ -2097,7 +2072,6 @@ STATIC int radv_start(struct serv_routed *sr) if (gen_zebra_conf(sr->sefd, sr->setok) != 0) { fprintf(logfptr, "%s: fail to save zebra config\n", __FUNCTION__); - APPLY_PRINT("%s: fail to save zebra config\n", __FUNCTION__); return -1; } @@ -2125,28 +2099,16 @@ STATIC int radv_start(struct serv_routed *sr) v_secure_system("zebra -d -f %s -P 0 2> /tmp/.zedra_error", ZEBRA_CONF_FILE); printf("DHCPv6 is %s. Starting zebra Process\n", (bEnabled?"Enabled":"Disabled")); - APPLY_PRINT("%s : Zebra Process Started\n", __FUNCTION__); - APPLY_PRINT("%s : DHCPv6 is %s. Starting zebra Process\n", __FUNCTION__, (bEnabled?"Enabled":"Disabled")); #else - APPLY_PRINT("%s : Starting Zebra Process\n", __FUNCTION__); v_secure_system("zebra -d -f %s -P 0 2> /tmp/.zedra_error", ZEBRA_CONF_FILE); - APPLY_PRINT("%s : Zebra Process Started\n", __FUNCTION__); #endif - - if(is_daemon_running(ZEBRA_PID_FILE, "zebra") == 0) - { - APPLY_PRINT("%s: Failed to start zebra process\n", __FUNCTION__); - } - else { - APPLY_PRINT("%s: Zebra is running\n", __FUNCTION__); - } return 0; } STATIC int radv_stop(struct serv_routed *sr) { - APPLY_PRINT("%s : Stopping radv services \n", __FUNCTION__); + if(is_daemon_running(ZEBRA_PID_FILE, "zebra")) { return 0; @@ -2155,11 +2117,9 @@ STATIC int radv_stop(struct serv_routed *sr) } STATIC int radv_restart(struct serv_routed *sr) -{ - APPLY_PRINT("%s: Restarting radv daemon\n", __FUNCTION__); +{ if (radv_stop(sr) != 0){ - fprintf(logfptr, "%s: radv_stop error\n", __FUNCTION__); - APPLY_PRINT("%s: radv_stop error\n", __FUNCTION__); + fprintf(logfptr, "%s: radv_stop error\n", __FUNCTION__); } return radv_start(sr); } @@ -2264,7 +2224,7 @@ STATIC int rip_restart(struct serv_routed *sr) STATIC int serv_routed_start(struct serv_routed *sr) { - APPLY_PRINT("%s: Starting radv daemon\n", __FUNCTION__); + #if !defined (_HUB4_PRODUCT_REQ_) || defined (_WNXL11BWL_PRODUCT_REQ_) char rtmod[16]; char prefix[64]; @@ -2276,7 +2236,7 @@ STATIC int serv_routed_start(struct serv_routed *sr) if (!sr->lan_ready) { fprintf(logfptr, "%s: LAN is not ready !\n", __FUNCTION__); - APPLY_PRINT("%s: LAN is not ready !\n", __FUNCTION__); + return -1; } #if !defined (_HUB4_PRODUCT_REQ_) || defined (_WNXL11BWL_PRODUCT_REQ_) @@ -2304,7 +2264,7 @@ STATIC int serv_routed_start(struct serv_routed *sr) /* RA daemon */ if (radv_start(sr) != 0) { fprintf(logfptr, "%s: radv_start error\n", __FUNCTION__); - APPLY_PRINT("%s: radv_start error\n", __FUNCTION__); + sysevent_set(sr->sefd, sr->setok, "routed-status", "error", 0); return -1; } @@ -2336,7 +2296,7 @@ STATIC int serv_routed_start(struct serv_routed *sr) STATIC int serv_routed_stop(struct serv_routed *sr) { - APPLY_PRINT("%s: Stopping service routed\n", __FUNCTION__); + if (!serv_can_stop(sr->sefd, sr->setok, "routed")) return -1; @@ -2360,7 +2320,7 @@ STATIC int serv_routed_stop(struct serv_routed *sr) STATIC int serv_routed_restart(struct serv_routed *sr) { - APPLY_PRINT("%s: Restarting service routed\n", __FUNCTION__); + if (serv_routed_stop(sr) != 0){ fprintf(logfptr, "%s: serv_routed_stop error\n", __FUNCTION__); } @@ -2369,7 +2329,7 @@ STATIC int serv_routed_restart(struct serv_routed *sr) STATIC int serv_routed_init(struct serv_routed *sr) { - APPLY_PRINT("%s: Initializing service routed\n", PROG_NAME); + char wan_st[16], lan_st[16]; memset(sr, 0, sizeof(struct serv_routed)); @@ -2377,20 +2337,20 @@ STATIC int serv_routed_init(struct serv_routed *sr) if ((sr->sefd = sysevent_open(SE_SERV, SE_SERVER_WELL_KNOWN_PORT, SE_VERSION, PROG_NAME, &sr->setok)) < 0) { fprintf(logfptr, "%s: fail to open sysevent\n", __FUNCTION__); - APPLY_PRINT("%s: fail to open sysevent\n", __FUNCTION__); + return -1; } sysevent_get(sr->sefd, sr->setok, "wan-status", wan_st, sizeof(wan_st)); if (strcmp(wan_st, "started") == 0) { sr->wan_ready = true; - APPLY_PRINT("%s: WAN is ready and WAN value = %d\n", __FUNCTION__, sr->wan_ready); + } sysevent_get(sr->sefd, sr->setok, "lan-status", lan_st, sizeof(lan_st)); if (strcmp(lan_st, "started") == 0) { sr->lan_ready = true; - APPLY_PRINT("%s: LAN is ready & LAN value = %d\n", __FUNCTION__, sr->lan_ready); + } return 0; @@ -2725,7 +2685,7 @@ STATIC void usage(void) int service_routed_main(int argc, char *argv[]) { - APPLY_PRINT("%s: Entering %s\n", PROG_NAME, __FUNCTION__); + int i; struct serv_routed sr; logfptr = fopen ( LOG_FILE_NAME , "a+"); @@ -2761,22 +2721,17 @@ int service_routed_main(int argc, char *argv[]) } #endif /** _RDKB_GLOBAL_PRODUCT_REQ_ */ #endif - APPLY_PRINT("%s: Initializing service routed\n", PROG_NAME); if (serv_routed_init(&sr) != 0){ exit(1); } - APPLY_PRINT("%s: Service routed initialized\n", PROG_NAME); - APPLY_PRINT("%s: Executing command `%s'\n", PROG_NAME, argv[1]); for (i = 0; i < NELEMS(cmd_ops); i++) { if (strcmp(argv[1], cmd_ops[i].cmd) != 0 || !cmd_ops[i].exec) continue; int rc1 = cmd_ops[i].exec(&sr); if (rc1 != 0) { fprintf(logfptr,"[%s]: `%s` failed: rc=%d errno=%d (%s)\n", PROG_NAME, cmd_ops[i].cmd, rc1, errno, strerror(errno)); - APPLY_PRINT("[%s]: `%s` failed: rc=%d errno=%d (%s)\n", PROG_NAME, cmd_ops[i].cmd, rc1, errno, strerror(errno)); } else { fprintf(logfptr, "[%s]: `%s` succeeded\n", PROG_NAME, cmd_ops[i].cmd); - APPLY_PRINT("[%s]: `%s` succeeded\n", PROG_NAME, cmd_ops[i].cmd); } break; } From 53e452b62650dc5f19a5da62303f3e2f2e360107 Mon Sep 17 00:00:00 2001 From: aj970 Date: Wed, 21 Jan 2026 10:29:15 +0000 Subject: [PATCH 3/4] Trigger zebra restart once LAN started Signed-off-by: aj970 --- source/service_routed/service_routed.c | 34 ++++++++------------------ 1 file changed, 10 insertions(+), 24 deletions(-) diff --git a/source/service_routed/service_routed.c b/source/service_routed/service_routed.c index 067d8ca2..34e7ca35 100644 --- a/source/service_routed/service_routed.c +++ b/source/service_routed/service_routed.c @@ -92,7 +92,6 @@ static const char* const service_routed_component_id = "ccsp.routed"; fclose(fptr1);\ }\ } - #include #endif @@ -2001,6 +2000,7 @@ STATIC void checkIfModeIsSwitched(int sefd, token_t setok) #endif STATIC int radv_start(struct serv_routed *sr) { + #ifdef RDKB_EXTENDER_ENABLED int deviceMode = GetDeviceNetworkMode(); if ( DEVICE_MODE_EXTENDER == deviceMode ) @@ -2038,6 +2038,7 @@ STATIC int radv_start(struct serv_routed *sr) char aBridgeMode[8]; syscfg_get(NULL, "bridge_mode", aBridgeMode, sizeof(aBridgeMode)); + if ((!strcmp(aBridgeMode, "0")) && (!sr->lan_ready)) { fprintf(logfptr, "%s: LAN is not ready !\n", __FUNCTION__); return -1; @@ -2050,7 +2051,7 @@ STATIC int radv_start(struct serv_routed *sr) { result = getLanIpv6Info(&ipv6_enable, &ula_enable); if(result != 0) { - fprintf(logfptr, "getLanIpv6Info failed"); + fprintf(logfptr, "getLanIpv6Info failed"); return -1; } if(ipv6_enable == 0) { @@ -2108,7 +2109,6 @@ STATIC int radv_start(struct serv_routed *sr) STATIC int radv_stop(struct serv_routed *sr) { - if(is_daemon_running(ZEBRA_PID_FILE, "zebra")) { return 0; @@ -2117,9 +2117,9 @@ STATIC int radv_stop(struct serv_routed *sr) } STATIC int radv_restart(struct serv_routed *sr) -{ +{ if (radv_stop(sr) != 0){ - fprintf(logfptr, "%s: radv_stop error\n", __FUNCTION__); + fprintf(logfptr, "%s: radv_stop error\n", __FUNCTION__); } return radv_start(sr); } @@ -2224,7 +2224,6 @@ STATIC int rip_restart(struct serv_routed *sr) STATIC int serv_routed_start(struct serv_routed *sr) { - #if !defined (_HUB4_PRODUCT_REQ_) || defined (_WNXL11BWL_PRODUCT_REQ_) char rtmod[16]; char prefix[64]; @@ -2236,7 +2235,6 @@ STATIC int serv_routed_start(struct serv_routed *sr) if (!sr->lan_ready) { fprintf(logfptr, "%s: LAN is not ready !\n", __FUNCTION__); - return -1; } #if !defined (_HUB4_PRODUCT_REQ_) || defined (_WNXL11BWL_PRODUCT_REQ_) @@ -2264,7 +2262,6 @@ STATIC int serv_routed_start(struct serv_routed *sr) /* RA daemon */ if (radv_start(sr) != 0) { fprintf(logfptr, "%s: radv_start error\n", __FUNCTION__); - sysevent_set(sr->sefd, sr->setok, "routed-status", "error", 0); return -1; } @@ -2296,7 +2293,6 @@ STATIC int serv_routed_start(struct serv_routed *sr) STATIC int serv_routed_stop(struct serv_routed *sr) { - if (!serv_can_stop(sr->sefd, sr->setok, "routed")) return -1; @@ -2320,7 +2316,6 @@ STATIC int serv_routed_stop(struct serv_routed *sr) STATIC int serv_routed_restart(struct serv_routed *sr) { - if (serv_routed_stop(sr) != 0){ fprintf(logfptr, "%s: serv_routed_stop error\n", __FUNCTION__); } @@ -2329,7 +2324,6 @@ STATIC int serv_routed_restart(struct serv_routed *sr) STATIC int serv_routed_init(struct serv_routed *sr) { - char wan_st[16], lan_st[16]; memset(sr, 0, sizeof(struct serv_routed)); @@ -2337,21 +2331,16 @@ STATIC int serv_routed_init(struct serv_routed *sr) if ((sr->sefd = sysevent_open(SE_SERV, SE_SERVER_WELL_KNOWN_PORT, SE_VERSION, PROG_NAME, &sr->setok)) < 0) { fprintf(logfptr, "%s: fail to open sysevent\n", __FUNCTION__); - return -1; } sysevent_get(sr->sefd, sr->setok, "wan-status", wan_st, sizeof(wan_st)); - if (strcmp(wan_st, "started") == 0) { + if (strcmp(wan_st, "started") == 0) sr->wan_ready = true; - - } sysevent_get(sr->sefd, sr->setok, "lan-status", lan_st, sizeof(lan_st)); - if (strcmp(lan_st, "started") == 0) { + if (strcmp(lan_st, "started") == 0) sr->lan_ready = true; - - } return 0; } @@ -2685,7 +2674,6 @@ STATIC void usage(void) int service_routed_main(int argc, char *argv[]) { - int i; struct serv_routed sr; logfptr = fopen ( LOG_FILE_NAME , "a+"); @@ -2727,11 +2715,9 @@ int service_routed_main(int argc, char *argv[]) for (i = 0; i < NELEMS(cmd_ops); i++) { if (strcmp(argv[1], cmd_ops[i].cmd) != 0 || !cmd_ops[i].exec) continue; - int rc1 = cmd_ops[i].exec(&sr); - if (rc1 != 0) { - fprintf(logfptr,"[%s]: `%s` failed: rc=%d errno=%d (%s)\n", PROG_NAME, cmd_ops[i].cmd, rc1, errno, strerror(errno)); - } else { - fprintf(logfptr, "[%s]: `%s` succeeded\n", PROG_NAME, cmd_ops[i].cmd); + + if (cmd_ops[i].exec(&sr) != 0){ + fprintf(logfptr, "[%s]: fail to exec `%s'\n", PROG_NAME, cmd_ops[i].cmd); } break; } From 3730dff7c41681b88f5cc0de5225d1697f968f78 Mon Sep 17 00:00:00 2001 From: aj970 Date: Wed, 21 Jan 2026 10:29:15 +0000 Subject: [PATCH 4/4] Trigger zebra restart once LAN started Signed-off-by: aj970 --- source/scripts/init/service.d/service_routed.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/scripts/init/service.d/service_routed.sh b/source/scripts/init/service.d/service_routed.sh index 230cb50b..64bd127b 100755 --- a/source/scripts/init/service.d/service_routed.sh +++ b/source/scripts/init/service.d/service_routed.sh @@ -68,7 +68,7 @@ case "$1" in status=$(sysevent get lan-status) if [ "$status" == "started" ]; then service_routed start - service_routed radv-restart + service_routed radv-start elif [ "$status" == "stopped" ]; then # As per Sky requirement, radvd should run with ULA prefix though the wan-status is down if [ "$BOX_TYPE" != "HUB4" ] && [ "$BOX_TYPE" != "SR300" ] && [ "$BOX_TYPE" != "SE501" ] && [ "$BOX_TYPE" != "SR213" ] && [ "$BOX_TYPE" != "WNXL11BWL" ] && [ "$LANULASupport" != "true" ]; then