diff --git a/package/network/config/ltq-vdsl-vr11-app/Makefile b/package/network/config/ltq-vdsl-vr11-app/Makefile index 4e26ee459a1..e56e90f9964 100644 --- a/package/network/config/ltq-vdsl-vr11-app/Makefile +++ b/package/network/config/ltq-vdsl-vr11-app/Makefile @@ -9,7 +9,7 @@ include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=ltq-vdsl-vr11-app PKG_VERSION:=4.23.1 -PKG_RELEASE:=3 +PKG_RELEASE:=4 PKG_BASE_NAME:=dsl_cpe_control UGW_VERSION=8.5.2.10 diff --git a/package/network/config/ltq-vdsl-vr11-app/patches/200-autoboot.patch b/package/network/config/ltq-vdsl-vr11-app/patches/200-autoboot.patch index 3397c7f024e..5625af97725 100644 --- a/package/network/config/ltq-vdsl-vr11-app/patches/200-autoboot.patch +++ b/package/network/config/ltq-vdsl-vr11-app/patches/200-autoboot.patch @@ -1,9 +1,13 @@ This enables automatic connection after the control daemon is started, and also changes the way the connection is stopped on termination. -Using the autoboot restart command is necessary because the stop command -would stop the autoboot thread, and the driver offers no working way to -start it again later, short of unloading and reloading the module. +Using the autoboot restart command (in combination with configuring the +state machine to wait) is necessary because the stop command would stop +the autoboot thread, and the driver offers no working way to start it +again later, short of unloading and reloading the module. + +The disconnection code is also moved to a separate function, so it can +be called in other exit code paths than the one for SIGTERM. --- a/src/dsl_cpe_init_cfg.c +++ b/src/dsl_cpe_init_cfg.c @@ -18,18 +22,19 @@ start it again later, short of unloading and reloading the module. 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 -@@ -7338,6 +7338,7 @@ DSL_CPE_STATIC DSL_void_t DSL_CPE_Termi - { - DSL_Error_t nRet = DSL_SUCCESS; - DSL_int_t nDevice = 0; +@@ -7252,6 +7252,58 @@ static DSL_boolean_t DSL_CPE_DebugAndTes + #endif /* defined(DSL_DEBUG_TOOL_INTERFACE) || defined(INCLUDE_DSL_CPE_DTI_SUPPORT) */ + #endif /* defined(INCLUDE_DSL_JSON_PARSING) && (INCLUDE_DSL_JSON_PARSING == 1) */ + ++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 = DSL_NULL; - -@@ -7349,8 +7350,32 @@ DSL_CPE_STATIC DSL_void_t DSL_CPE_Termi - - for (nDevice = 0; nDevice < DSL_CPE_DSL_ENTITIES; ++nDevice) - { ++ DSL_AutobootControl_t sAutobootCtl; ++ ++ for (nDevice = 0; nDevice < DSL_CPE_DSL_ENTITIES; ++nDevice) ++ { + g_bWaitBeforeConfigWrite[nDevice] = DSL_TRUE; + g_bWaitBeforeLinkActivation[nDevice] = DSL_TRUE; + g_bWaitBeforeRestart[nDevice] = DSL_TRUE; @@ -54,29 +59,88 @@ start it again later, short of unloading and reloading the module. + DSL_CPE_CRLF, nDevice, sAutobootCfg.accessCtl.nReturn)); + } + - memset(&sAutobootCtl, 0, sizeof(DSL_AutobootControl_t)); -- sAutobootCtl.data.nCommand = DSL_AUTOBOOT_CTRL_STOP; ++ memset(&sAutobootCtl, 0, sizeof(DSL_AutobootControl_t)); + sAutobootCtl.data.nCommand = DSL_AUTOBOOT_CTRL_RESTART; - - nRet = (DSL_Error_t)DSL_CPE_Ioctl( - DSL_CPE_GetGlobalContext()->fd[nDevice], -@@ -7359,13 +7384,13 @@ DSL_CPE_STATIC DSL_void_t DSL_CPE_Termi - if (nRet < DSL_SUCCESS) - { - DSL_CCA_DEBUG(DSL_CCA_DBG_ERR, (DSL_CPE_PREFIX -- "Autoboot stop for device (%d) failed!, nRet = %d!" ++ ++ nRet = (DSL_Error_t)DSL_CPE_Ioctl( ++ DSL_CPE_GetGlobalContext()->fd[nDevice], ++ DSL_FIO_AUTOBOOT_CONTROL_SET, (DSL_int_t)&sAutobootCtl); ++ ++ if (nRet < DSL_SUCCESS) ++ { ++ DSL_CCA_DEBUG(DSL_CCA_DBG_ERR, (DSL_CPE_PREFIX + "Autoboot restart for device (%d) failed!, nRet = %d!" - DSL_CPE_CRLF, nDevice, sAutobootCtl.accessCtl.nReturn)); - } - } - - DSL_CCA_DEBUG(DSL_CCA_DBG_MSG, (DSL_CPE_PREFIX -- "Autoboot stop executed" DSL_CPE_CRLF)); -+ "Autoboot restart executed" DSL_CPE_CRLF)); ++ DSL_CPE_CRLF, nDevice, sAutobootCtl.accessCtl.nReturn)); ++ } ++ } ++ ++ DSL_CCA_DEBUG(DSL_CCA_DBG_MSG, (DSL_CPE_PREFIX ++ "Connection shutdown finished." DSL_CPE_CRLF)); ++} ++ + #ifndef RTEMS + /** + Signal handler. +@@ -7327,6 +7379,8 @@ DSL_CPE_STATIC DSL_void_t DSL_CPE_CLI_Q + DSL_CPE_STATIC DSL_void_t DSL_CPE_Interruption(void) + { ++ DSL_CPE_ShutdownConnection(); ++ DSL_CPE_DaemonExit(); -@@ -8798,4 +8823,4 @@ DSL_CPE_STATIC DSL_Error_t DSL_CPE_Firmw + #ifdef INCLUDE_DSL_CPE_CLI_SUPPORT +@@ -7336,37 +7390,16 @@ DSL_CPE_STATIC DSL_void_t DSL_CPE_Inter + + DSL_CPE_STATIC DSL_void_t DSL_CPE_Termination(void) + { +- DSL_Error_t nRet = DSL_SUCCESS; +- DSL_int_t nDevice = 0; +- DSL_AutobootControl_t sAutobootCtl; + DSL_CPE_Control_Context_t *pCtrlCtx = DSL_NULL; + ++ DSL_CPE_ShutdownConnection(); ++ + pCtrlCtx = DSL_CPE_GetGlobalContext(); + if (pCtrlCtx != DSL_NULL) + { + pCtrlCtx->bEvtRun = DSL_FALSE; + } + +- for (nDevice = 0; nDevice < DSL_CPE_DSL_ENTITIES; ++nDevice) +- { +- memset(&sAutobootCtl, 0, sizeof(DSL_AutobootControl_t)); +- sAutobootCtl.data.nCommand = DSL_AUTOBOOT_CTRL_STOP; +- +- nRet = (DSL_Error_t)DSL_CPE_Ioctl( +- DSL_CPE_GetGlobalContext()->fd[nDevice], +- DSL_FIO_AUTOBOOT_CONTROL_SET, (DSL_int_t)&sAutobootCtl); +- +- if (nRet < DSL_SUCCESS) +- { +- DSL_CCA_DEBUG(DSL_CCA_DBG_ERR, (DSL_CPE_PREFIX +- "Autoboot stop for device (%d) failed!, nRet = %d!" +- DSL_CPE_CRLF, nDevice, sAutobootCtl.accessCtl.nReturn)); +- } +- } +- +- DSL_CCA_DEBUG(DSL_CCA_DBG_MSG, (DSL_CPE_PREFIX +- "Autoboot stop executed" DSL_CPE_CRLF)); +- + DSL_CPE_DaemonExit(); + + #ifdef INCLUDE_DSL_CPE_CLI_SUPPORT +@@ -8551,6 +8584,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; + } +@@ -8798,4 +8834,4 @@ DSL_CPE_STATIC DSL_Error_t DSL_CPE_Firmw pDecimal)); return nErrCode; diff --git a/package/network/config/ltq-vdsl-vr11-app/patches/300-ubus.patch b/package/network/config/ltq-vdsl-vr11-app/patches/300-ubus.patch index fc0dd70bc1b..1fe1eac1e8a 100644 --- a/package/network/config/ltq-vdsl-vr11-app/patches/300-ubus.patch +++ b/package/network/config/ltq-vdsl-vr11-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}; -@@ -7831,6 +7834,8 @@ DSL_int_t dsl_cpe_daemon ( +@@ -7839,6 +7842,8 @@ DSL_int_t dsl_cpe_daemon ( #endif /* defined(INCLUDE_DSL_JSON_PARSING) && (INCLUDE_DSL_JSON_PARSING == 1) */ #endif /* RTEMS*/ @@ -19,7 +19,7 @@ /* Open DSL_CPE_MAX_DSL_ENTITIES devices*/ for (nDevice = 0; nDevice < DSL_CPE_DSL_ENTITIES; nDevice++) { -@@ -8367,6 +8372,7 @@ DSL_int_t dsl_cpe_daemon ( +@@ -8375,6 +8380,7 @@ DSL_int_t dsl_cpe_daemon ( #endif /* INCLUDE_DSL_CPE_CLI_SUPPORT */ DSL_CPE_CONTROL_EXIT: