Try to perform an orderly shutdown via L3 request before the connection
is stopped on exit.

--- a/src/dsl_cpe_control.c
+++ b/src/dsl_cpe_control.c
@@ -7252,15 +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_EnableConnection(void)
+{
+   DSL_Error_t nRet = DSL_SUCCESS;
+   DSL_int_t nDevice = 0;
+   DSL_G997_PowerManagementStateForcedTrigger_t sPowerManagementStateForcedTrigger;
+
+   for (nDevice = 0; nDevice < DSL_CPE_DSL_ENTITIES; ++nDevice)
+   {
+      memset(&sPowerManagementStateForcedTrigger, 0x0,
+         sizeof(DSL_G997_PowerManagementStateForcedTrigger_t));
+      sPowerManagementStateForcedTrigger.data.nPowerManagementState = DSL_G997_PMSF_L3_TO_L0;
+
+      nRet = (DSL_Error_t)DSL_CPE_Ioctl(
+         DSL_CPE_GetGlobalContext()->fd[nDevice],
+         DSL_FIO_G997_POWER_MANAGEMENT_STATE_FORCED_TRIGGER,
+         (DSL_int_t)&sPowerManagementStateForcedTrigger);
+
+      if (nRet < DSL_SUCCESS)
+      {
+         DSL_CCA_DEBUG(DSL_CCA_DBG_ERR, (DSL_CPE_PREFIX
+            "Transition to L0 state (%d) failed!, nRet = %d!"
+            DSL_CPE_CRLF, nDevice, sPowerManagementStateForcedTrigger.accessCtl.nReturn));
+      }
+   }
+}
+
 DSL_CPE_STATIC DSL_void_t DSL_CPE_ShutdownConnection(void)
 {
    DSL_Error_t nRet = DSL_SUCCESS;
    DSL_int_t nDevice = 0;
+   DSL_G997_PowerManagementStateForcedTrigger_t sPowerManagementStateForcedTrigger;
    DSL_AutobootConfig_t sAutobootCfg;
    DSL_AutobootControl_t sAutobootCtl;
 
    for (nDevice = 0; nDevice < DSL_CPE_DSL_ENTITIES; ++nDevice)
    {
+      memset(&sPowerManagementStateForcedTrigger, 0x0,
+         sizeof(DSL_G997_PowerManagementStateForcedTrigger_t));
+      sPowerManagementStateForcedTrigger.data.nPowerManagementState = DSL_G997_PMSF_LX_TO_L3;
+
+      nRet = (DSL_Error_t)DSL_CPE_Ioctl(
+         DSL_CPE_GetGlobalContext()->fd[nDevice],
+         DSL_FIO_G997_POWER_MANAGEMENT_STATE_FORCED_TRIGGER,
+         (DSL_int_t)&sPowerManagementStateForcedTrigger);
+
+      if (nRet < DSL_SUCCESS)
+      {
+         DSL_CCA_DEBUG(DSL_CCA_DBG_ERR, (DSL_CPE_PREFIX
+            "Transition to L3 state (%d) failed!, nRet = %d!"
+            DSL_CPE_CRLF, nDevice, sPowerManagementStateForcedTrigger.accessCtl.nReturn));
+      }
+
       g_bWaitBeforeConfigWrite[nDevice]    = DSL_TRUE;
       g_bWaitBeforeLinkActivation[nDevice] = DSL_TRUE;
       g_bWaitBeforeRestart[nDevice]        = DSL_TRUE;
@@ -8318,6 +8361,8 @@ DSL_int_t dsl_cpe_daemon (
 #endif /* defined(INCLUDE_DSL_JSON_PARSING) && (INCLUDE_DSL_JSON_PARSING == 1) */
    }
 
+   DSL_CPE_EnableConnection();
+
 #ifdef INCLUDE_DSL_CPE_CLI_SUPPORT
 #ifndef DSL_CPE_REMOVE_PIPE_SUPPORT
    if (DSL_CPE_Pipe_Init (pCtrlCtx) == DSL_ERROR)
