From 0b72d9b5666f1e8bc6df82357f2e8325eb5d6adb Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Fri, 26 Feb 2021 11:29:04 +0100 Subject: [PATCH] port-qmi: flag multiplexing as unsupported in BAM-DMUX In BAM-DMUX based setups we already have multiple network interfaces exposed in the system, which we bind to using the SIO port number. So, disable QMAP multiplexing in this case, to simplify the setup and avoid attempting to create additional net links when connecting multiple bearers. --- src/mm-port-qmi.c | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/mm-port-qmi.c b/src/mm-port-qmi.c index 0bbcd5ed..9ac8937e 100644 --- a/src/mm-port-qmi.c +++ b/src/mm-port-qmi.c @@ -986,8 +986,13 @@ load_kernel_data_format_current (MMPortQmi *self, * on the current expected data format; i.e. if 802-3 is currently selected it * will say link management is unsupported, even if it would be supported once * we change it to raw-ip */ - if (supports_links) - *supports_links = qmi_device_check_link_supported (device, NULL); + if (supports_links) { + /* For BAM-DMUX based setups, raw-ip only and no multiplexing */ + if (g_strcmp0 (self->priv->net_driver, "bam-dmux") == 0) + *supports_links = FALSE; + else + *supports_links = qmi_device_check_link_supported (device, NULL); + } /* For any driver other than qmi_wwan, assume raw-ip */ if (mm_port_get_subsys (MM_PORT (self)) != MM_PORT_SUBSYS_USBMISC) @@ -1010,6 +1015,15 @@ load_kernel_data_format_capabilities (MMPortQmi *self, gboolean *supports_qmap_raw_ip, gboolean *supports_qmap_pass_through) { + /* For BAM-DMUX based setups, raw-ip only and no multiplexing */ + if (g_strcmp0 (self->priv->net_driver, "bam-dmux") == 0) { + *supports_802_3 = FALSE; + *supports_raw_ip = TRUE; + *supports_qmap_raw_ip = FALSE; + *supports_qmap_pass_through = FALSE; + return; + } + /* For any driver other than qmi_wwan, assume raw-ip */ if (mm_port_get_subsys (MM_PORT (self)) != MM_PORT_SUBSYS_USBMISC) { *supports_802_3 = FALSE; @@ -1147,9 +1161,14 @@ internal_setup_data_format_finish (MMPortQmi *self, *out_max_multiplexed_links = 0; mm_obj_dbg (self, "wda data aggregation protocol unsupported: no multiplexed bearers allowed"); } else { + /* if BAM-DMUX we already have multiple network interfaces, so no multiplexing */ + if (g_strcmp0 (self->priv->net_driver, "bam-dmux") == 0) { + *out_max_multiplexed_links = 0; + mm_obj_dbg (self, "bam-dmux link management disabled: no multiplexed bearers allowed"); + } /* if multiplex backend may be rmnet, MAX-MIN */ - if ((mm_port_get_subsys (MM_PORT (self)) != MM_PORT_SUBSYS_USBMISC) || - ctx->kernel_data_format_qmap_pass_through_supported) { + else if ((mm_port_get_subsys (MM_PORT (self)) != MM_PORT_SUBSYS_USBMISC) || + ctx->kernel_data_format_qmap_pass_through_supported) { *out_max_multiplexed_links = 1 + (QMI_DEVICE_MUX_ID_MAX - QMI_DEVICE_MUX_ID_MIN); mm_obj_dbg (self, "rmnet link management supported: %u multiplexed bearers allowed", *out_max_multiplexed_links);