From 663389c4cf1029f5c76f9f7f5c9ce01d2029f833 Mon Sep 17 00:00:00 2001 From: Jan Hoffmann Date: Fri, 12 Jul 2024 15:49:51 +0200 Subject: [PATCH] ltq-vdsl-vr9-app: always disconnect on exit Move the code for disconnection on exit to a separate function, and also call it in the code path for the "quit" CLI command. While at it, make the patch description a bit clearer. Signed-off-by: Jan Hoffmann --- .../network/config/ltq-vdsl-vr9-app/Makefile | 2 +- .../patches/200-autoboot.patch | 52 ++++++++++++------- .../patches/201-sigterm.patch | 4 +- .../ltq-vdsl-vr9-app/patches/300-ubus.patch | 4 +- 4 files changed, 37 insertions(+), 25 deletions(-) diff --git a/package/network/config/ltq-vdsl-vr9-app/Makefile b/package/network/config/ltq-vdsl-vr9-app/Makefile index e2042bf314..51b88231f7 100644 --- a/package/network/config/ltq-vdsl-vr9-app/Makefile +++ b/package/network/config/ltq-vdsl-vr9-app/Makefile @@ -9,7 +9,7 @@ include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=ltq-vdsl-vr9-app PKG_VERSION:=4.17.18.6 -PKG_RELEASE:=6 +PKG_RELEASE:=7 PKG_BASE_NAME:=dsl_cpe_control PKG_SOURCE:=$(PKG_BASE_NAME)_vrx-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=@OPENWRT diff --git a/package/network/config/ltq-vdsl-vr9-app/patches/200-autoboot.patch b/package/network/config/ltq-vdsl-vr9-app/patches/200-autoboot.patch index d949162f58..2d3a6a822e 100644 --- a/package/network/config/ltq-vdsl-vr9-app/patches/200-autoboot.patch +++ b/package/network/config/ltq-vdsl-vr9-app/patches/200-autoboot.patch @@ -1,9 +1,10 @@ This enables automatic connection after the control daemon is started, and also stops the connection on termination. -Using the autoboot restart command is necessary because the stop command -doesn't actually stop the connection, and would also leave the driver in -a state where an explicit start command is necessary to connect again. +Using the autoboot restart command (in combination with configuring the +state machine to wait) is necessary because the stop command doesn't +actually stop the connection, and would also leave the driver in a state +where an explicit start command is necessary to connect again. --- a/src/dsl_cpe_init_cfg.c +++ b/src/dsl_cpe_init_cfg.c @@ -18,25 +19,17 @@ a state where an explicit start command is necessary to connect again. DSL_CPE_LINE_ACTIVATE_CTRL_SET(DSL_G997_INHIBIT_LDSF, DSL_G997_INHIBIT_ACSF, DSL_G997_NORMAL_STARTUP), --- a/src/dsl_cpe_control.c +++ b/src/dsl_cpe_control.c -@@ -6515,10 +6515,13 @@ DSL_CPE_STATIC void DSL_CPE_Termination - DSL_CPE_STATIC DSL_void_t DSL_CPE_Termination (void) - { - #ifdef INCLUDE_DSL_CPE_CLI_SUPPORT -- DSL_int_t nDevice = 0; - DSL_char_t buf[32] = "quit"; - #endif +@@ -6491,6 +6491,57 @@ DSL_int32_t DSL_CPE_DeviceInit ( + return ret; + } ++DSL_CPE_STATIC DSL_void_t DSL_CPE_ShutdownConnection(void) ++{ + DSL_Error_t nRet = DSL_SUCCESS; + DSL_int_t nDevice = 0; + DSL_AutobootConfig_t sAutobootCfg; + DSL_AutobootControl_t sAutobootCtl; - DSL_CPE_Control_Context_t *pCtrlCtx; - - pCtrlCtx = DSL_CPE_GetGlobalContext(); -@@ -6527,6 +6530,50 @@ DSL_CPE_STATIC DSL_void_t DSL_CPE_Termi - pCtrlCtx->bRun = DSL_FALSE; - } - ++ + for (nDevice = 0; nDevice < DSL_CPE_MAX_DSL_ENTITIES; ++nDevice) + { + g_bWaitBeforeConfigWrite[nDevice] = DSL_TRUE; @@ -79,8 +72,27 @@ a state where an explicit start command is necessary to connect again. + } + + DSL_CCA_DEBUG(DSL_CCA_DBG_MSG, (DSL_CPE_PREFIX -+ "Autoboot restart executed" DSL_CPE_CRLF)); ++ "Connection shutdown finished." DSL_CPE_CRLF)); ++} + + /** + Termination handler. Will clean up in case of ctrl-c. +@@ -6521,6 +6572,8 @@ DSL_CPE_STATIC DSL_void_t DSL_CPE_Termi + + DSL_CPE_Control_Context_t *pCtrlCtx; + ++ DSL_CPE_ShutdownConnection(); + - #ifdef INCLUDE_DSL_CPE_CLI_SUPPORT - for (nDevice = 0; nDevice < DSL_CPE_MAX_DSL_ENTITIES; nDevice++) + pCtrlCtx = DSL_CPE_GetGlobalContext(); + if (pCtrlCtx != DSL_NULL) { +@@ -7416,6 +7469,9 @@ void DSL_CPE_main(void) + DSL_CPE_STATIC DSL_Error_t DSL_CPE_Control_Exit (DSL_void_t * pContext) + { + dummy_console_t *pConsole = pContext; ++ ++ DSL_CPE_ShutdownConnection(); ++ + pConsole->bRun = DSL_FALSE; + return DSL_SUCCESS; + } diff --git a/package/network/config/ltq-vdsl-vr9-app/patches/201-sigterm.patch b/package/network/config/ltq-vdsl-vr9-app/patches/201-sigterm.patch index 4e97835983..5397a139f5 100644 --- a/package/network/config/ltq-vdsl-vr9-app/patches/201-sigterm.patch +++ b/package/network/config/ltq-vdsl-vr9-app/patches/201-sigterm.patch @@ -1,6 +1,6 @@ --- a/src/dsl_cpe_control.c +++ b/src/dsl_cpe_control.c -@@ -6504,7 +6504,7 @@ DSL_CPE_STATIC void DSL_CPE_Termination +@@ -6555,7 +6555,7 @@ DSL_CPE_STATIC void DSL_CPE_Termination /* ignore the signal, we'll handle by ourself */ signal (sig, SIG_IGN); @@ -9,7 +9,7 @@ { DSL_CCA_DEBUG(DSL_CCA_DBG_MSG, (DSL_CPE_PREFIX "terminated" DSL_CPE_CRLF)); DSL_CPE_Termination (); -@@ -6803,6 +6803,7 @@ DSL_int_t dsl_cpe_daemon ( +@@ -6809,6 +6809,7 @@ DSL_int_t dsl_cpe_daemon ( #ifndef RTEMS signal (SIGINT, DSL_CPE_TerminationHandler); diff --git a/package/network/config/ltq-vdsl-vr9-app/patches/300-ubus.patch b/package/network/config/ltq-vdsl-vr9-app/patches/300-ubus.patch index d257ca2fc4..b0cdaa1bcf 100644 --- a/package/network/config/ltq-vdsl-vr9-app/patches/300-ubus.patch +++ b/package/network/config/ltq-vdsl-vr9-app/patches/300-ubus.patch @@ -10,7 +10,7 @@ DSL_char_t *g_sFirmwareName1 = DSL_NULL; DSL_FirmwareFeatures_t g_nFwFeatures1 = {DSL_FW_XDSLMODE_CLEANED, DSL_FW_XDSLFEATURE_CLEANED, DSL_FW_XDSLFEATURE_CLEANED}; -@@ -6806,6 +6809,8 @@ DSL_int_t dsl_cpe_daemon ( +@@ -6812,6 +6815,8 @@ DSL_int_t dsl_cpe_daemon ( signal (SIGTERM, DSL_CPE_TerminationHandler); #endif /* RTEMS*/ @@ -19,7 +19,7 @@ /* Open DSL_CPE_MAX_DSL_ENTITIES devices*/ for (nDevice = 0; nDevice < DSL_CPE_MAX_DSL_ENTITIES; nDevice++) { -@@ -7260,6 +7265,7 @@ DSL_int_t dsl_cpe_daemon ( +@@ -7266,6 +7271,7 @@ DSL_int_t dsl_cpe_daemon ( #endif /* INCLUDE_DSL_CPE_CLI_SUPPORT */ DSL_CPE_CONTROL_EXIT: -- 2.30.2