diff --git a/cli/mmcli-modem.c b/cli/mmcli-modem.c
index 0a7f1518..18e7356f 100644
--- a/cli/mmcli-modem.c
+++ b/cli/mmcli-modem.c
@@ -260,6 +260,9 @@ print_modem_info (void)
gchar *own_numbers_string;
MMModemBand *bands = NULL;
guint n_bands = 0;
+ MMModemPortInfo *ports = NULL;
+ guint n_ports = 0;
+ gchar *ports_string;
MMUnlockRetries *unlock_retries;
guint signal_quality = 0;
gboolean signal_quality_recent = FALSE;
@@ -288,6 +291,9 @@ print_modem_info (void)
mm_modem_get_supported_bands (ctx->modem, &bands, &n_bands);
supported_bands_string = mm_common_build_bands_string (bands, n_bands);
g_free (bands);
+ mm_modem_get_ports (ctx->modem, &ports, &n_ports);
+ ports_string = mm_common_build_ports_string (ports, n_ports);
+ mm_modem_port_info_array_free (ports, n_ports);
if (mm_modem_get_current_modes (ctx->modem, &allowed_modes, &preferred_mode)) {
allowed_modes_string = mm_modem_mode_build_string_from_mask (allowed_modes);
preferred_mode_string = mm_modem_mode_build_string_from_mask (preferred_mode);
@@ -371,11 +377,13 @@ print_modem_info (void)
" System | device: '%s'\n"
" | drivers: '%s'\n"
" | plugin: '%s'\n"
- " | primary port: '%s'\n",
+ " | primary port: '%s'\n"
+ " | ports: '%s'\n",
VALIDATE_UNKNOWN (mm_modem_get_device (ctx->modem)),
VALIDATE_UNKNOWN (drivers_string),
VALIDATE_UNKNOWN (mm_modem_get_plugin (ctx->modem)),
- VALIDATE_UNKNOWN (mm_modem_get_primary_port (ctx->modem)));
+ VALIDATE_UNKNOWN (mm_modem_get_primary_port (ctx->modem)),
+ VALIDATE_UNKNOWN (ports_string));
/* Numbers related stuff */
g_print (" -------------------------\n"
@@ -489,6 +497,7 @@ print_modem_info (void)
VALIDATE_PATH (mm_modem_get_sim_path (ctx->modem)));
g_print ("\n");
+ g_free (ports_string);
g_free (supported_ip_families_string);
g_free (current_bands_string);
g_free (supported_bands_string);
diff --git a/docs/reference/api/ModemManager-sections.txt b/docs/reference/api/ModemManager-sections.txt
index 20c6440d..f2d0ded7 100644
--- a/docs/reference/api/ModemManager-sections.txt
+++ b/docs/reference/api/ModemManager-sections.txt
@@ -32,6 +32,7 @@ MMModemState
MMModemStateFailedReason
MMModemStateChangeReason
MMModemPowerState
+MMModemPortType
MMSmsPduType
MMSmsState
MMSmsDeliveryState
diff --git a/docs/reference/libmm-glib/libmm-glib-sections.txt b/docs/reference/libmm-glib/libmm-glib-sections.txt
index 60c2137e..1784b4c1 100644
--- a/docs/reference/libmm-glib/libmm-glib-sections.txt
+++ b/docs/reference/libmm-glib/libmm-glib-sections.txt
@@ -74,6 +74,7 @@ mm_object_get_type
MMModem
MMModem
MMModemModeCombination
+MMModemPortInfo
mm_modem_get_path
mm_modem_dup_path
@@ -95,6 +96,8 @@ mm_modem_get_plugin
mm_modem_dup_plugin
mm_modem_get_primary_port
mm_modem_dup_primary_port
+mm_modem_peek_ports
+mm_modem_get_ports
mm_modem_get_device
mm_modem_dup_device
mm_modem_get_equipment_identifier
@@ -162,6 +165,8 @@ mm_modem_delete_bearer_sync
mm_modem_command
mm_modem_command_finish
mm_modem_command_sync
+
+mm_modem_port_info_array_free
MMModemClass
MMModemPrivate
@@ -970,6 +975,7 @@ mm_modem_lock_get_string
mm_modem_access_technology_build_string_from_mask
mm_modem_mode_build_string_from_mask
mm_modem_band_get_string
+mm_modem_port_type_get_string
mm_modem_3gpp_registration_state_get_string
mm_modem_3gpp_facility_build_string_from_mask
mm_modem_3gpp_network_availability_get_string
@@ -1013,6 +1019,7 @@ mm_modem_3gpp_facility_get_string
mm_modem_3gpp_network_availability_build_string_from_mask
mm_modem_3gpp_ussd_session_state_build_string_from_mask
mm_firmware_image_type_build_string_from_mask
+mm_modem_port_type_build_string_from_mask
MM_TYPE_BEARER_IP_FAMILY
MM_TYPE_BEARER_IP_METHOD
@@ -1036,6 +1043,7 @@ MM_TYPE_MODEM_STATE
MM_TYPE_MODEM_STATE_FAILED_REASON
MM_TYPE_MODEM_STATE_CHANGE_REASON
MM_TYPE_MODEM_POWER_STATE
+MM_TYPE_MODEM_PORT_TYPE
MM_TYPE_SMS_DELIVERY_STATE
MM_TYPE_SMS_PDU_TYPE
MM_TYPE_SMS_STATE
@@ -1063,6 +1071,7 @@ mm_modem_state_change_reason_get_type
mm_modem_state_get_type
mm_modem_state_failed_reason_get_type
mm_modem_power_state_get_type
+mm_modem_port_type_get_type
mm_sms_delivery_state_get_type
mm_sms_pdu_type_get_type
mm_sms_state_get_type
@@ -1443,6 +1452,8 @@ mm_gdbus_modem_dup_plugin
mm_gdbus_modem_get_power_state
mm_gdbus_modem_get_primary_port
mm_gdbus_modem_dup_primary_port
+mm_gdbus_modem_get_ports
+mm_gdbus_modem_dup_ports
mm_gdbus_modem_get_revision
mm_gdbus_modem_dup_revision
mm_gdbus_modem_get_signal_quality
@@ -1511,6 +1522,7 @@ mm_gdbus_modem_set_model
mm_gdbus_modem_set_own_numbers
mm_gdbus_modem_set_plugin
mm_gdbus_modem_set_primary_port
+mm_gdbus_modem_set_ports
mm_gdbus_modem_set_revision
mm_gdbus_modem_set_signal_quality
mm_gdbus_modem_set_sim
diff --git a/include/ModemManager-enums.h b/include/ModemManager-enums.h
index b268925c..f90b223b 100644
--- a/include/ModemManager-enums.h
+++ b/include/ModemManager-enums.h
@@ -394,6 +394,28 @@ typedef enum { /*< underscore_name=mm_modem_band >*/
MM_MODEM_BAND_ANY = 256
} MMModemBand;
+/**
+ * MMModemPortType:
+ * @MM_MODEM_PORT_TYPE_UNKNOWN: Unknown.
+ * @MM_MODEM_PORT_TYPE_NET: Net port.
+ * @MM_MODEM_PORT_TYPE_AT: AT port.
+ * @MM_MODEM_PORT_TYPE_QCDM: QCDM port.
+ * @MM_MODEM_PORT_TYPE_GPS: GPS port.
+ * @MM_MODEM_PORT_TYPE_QMI: QMI port.
+ * @MM_MODEM_PORT_TYPE_MBIM: MBIM port.
+ *
+ * Type of modem port.
+ */
+typedef enum { /*< underscore_name=mm_modem_port_type >*/
+ MM_MODEM_PORT_TYPE_UNKNOWN = 1,
+ MM_MODEM_PORT_TYPE_NET = 2,
+ MM_MODEM_PORT_TYPE_AT = 3,
+ MM_MODEM_PORT_TYPE_QCDM = 4,
+ MM_MODEM_PORT_TYPE_GPS = 5,
+ MM_MODEM_PORT_TYPE_QMI = 6,
+ MM_MODEM_PORT_TYPE_MBIM = 7
+} MMModemPortType;
+
/**
* MMSmsPduType:
* @MM_SMS_PDU_TYPE_UNKNOWN: Unknown type.
diff --git a/introspection/org.freedesktop.ModemManager1.Modem.xml b/introspection/org.freedesktop.ModemManager1.Modem.xml
index b599dd1f..8643a9a3 100644
--- a/introspection/org.freedesktop.ModemManager1.Modem.xml
+++ b/introspection/org.freedesktop.ModemManager1.Modem.xml
@@ -326,6 +326,16 @@
-->
+
+
+