diff --git a/src/dsl_fapi.c b/src/dsl_fapi.c index e83021a1775045c1077671b8ac23e17451d12e60..cdbb2b9d0cb738a61f0308a0c3bd7b317af4cbe8 100644 --- a/src/dsl_fapi.c +++ b/src/dsl_fapi.c @@ -1751,7 +1751,6 @@ enum fapi_dsl_status fapi_dsl_channel_get(struct fapi_dsl_ctx *ctx, struct dsl_f } dsl_driver_data; DSL_DslModeSelection_t dsl_mode = DSL_MODE_NA; unsigned int offset; - unsigned int max_offset; int ret, fd; if (ctx == NULL) @@ -1813,7 +1812,7 @@ enum fapi_dsl_status fapi_dsl_channel_get(struct fapi_dsl_ctx *ctx, struct dsl_f /* Device.DSL.Channel.LinkEncapsulationSupported */ memset(&dsl_driver_data.system_interface_config, 0x00, sizeof(DSL_SystemInterfaceConfig_t)); - offset = max_offset = 0; + offset = 0; dsl_driver_data.system_interface_config.nDslMode = DSL_MODE_ADSL; ret = ioctl(fd, DSL_FIO_SYSTEM_INTERFACE_CONFIG_GET, (int)&dsl_driver_data.system_interface_config); if ((ret < 0) && (dsl_driver_data.system_interface_config.accessCtl.nReturn < DSL_SUCCESS)) { @@ -1842,12 +1841,6 @@ enum fapi_dsl_status fapi_dsl_channel_get(struct fapi_dsl_ctx *ctx, struct dsl_f } offset = strlen(obj->link_encapsulation_supported); } - if (offset) { - ++offset; - max_offset = (offset < sizeof(obj->link_encapsulation_supported)) ? - offset : sizeof(obj->link_encapsulation_supported) - 1; - obj->link_encapsulation_supported[max_offset] = ','; - } memset(&dsl_driver_data.system_interface_config, 0x00, sizeof(DSL_SystemInterfaceConfig_t)); @@ -1857,25 +1850,34 @@ enum fapi_dsl_status fapi_dsl_channel_get(struct fapi_dsl_ctx *ctx, struct dsl_f LOGF_LOG_ERROR("DSL FAPI: Device.DSL.Channel.LinkEncapsulationSupported:" "error code %d\n", dsl_driver_data.system_interface_config.accessCtl.nReturn); } else { + const char *link_encap = NULL; + switch (dsl_driver_data.system_interface_config.data.nTcLayer) { case DSL_TC_ATM: - strlcpy(obj->link_encapsulation_supported + offset, - "G.993.2_Annex_K_ATM", sizeof(obj->link_encapsulation_supported) - offset); + link_encap = "G.993.2_Annex_K_ATM"; break; case DSL_TC_EFM: case DSL_TC_EFM_FORCED: - strlcpy(obj->link_encapsulation_supported + offset, - "G.993.2_Annex_K_PTM", sizeof(obj->link_encapsulation_supported) - offset); + link_encap = "G.993.2_Annex_K_PTM"; break; case DSL_TC_AUTO: - strlcpy(obj->link_encapsulation_supported + offset, - "G.994.1 (Auto)", sizeof(obj->link_encapsulation_supported) - offset); + link_encap = "G.994.1 (Auto)"; break; default: - obj->link_encapsulation_supported[max_offset] = '\0'; + break; + } + + if (link_encap != NULL) { + if (offset > 0) { + strlcpy(obj->link_encapsulation_supported + offset, + ",", sizeof(obj->link_encapsulation_supported) - offset); + offset++; + } + strlcpy(obj->link_encapsulation_supported + offset, + link_encap, sizeof(obj->link_encapsulation_supported) - offset); } }