aboutsummaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2021-07-27port-mbim: increase timeout of first command after port openAleksander Morgado
The port open operation may be happening very early after the device has booted, so let's give the module some more time to reply the very first MBIM query we do. The original 10s seems to be a bit tight in some cases. See https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/405#note_1006746
2021-07-27port-qmi: open without data format explicitly if requested by userAleksander Morgado
Regardless of whether WDA is supported or not.
2021-07-27port-qmi: early check if WDA is supportedAleksander Morgado
We should check if WDA is supported before running any other logic that may change the state of the kernel or the modem. E.g. if we don't do this as the first step, the loading of the supported kernel data modes may end up changing the expected kernel data mode to raw-ip.
2021-07-27port-qmi: cleanly close device if an open operation failedAleksander Morgado
ModemManager[703345]: <debug> [1626962477.971869] [modem0] couldn't open QMI port with data format update: Unexpected kernel data mode: cannot setup using CTL ModemManager[703345]: <debug> [1626962477.972197] [cdc-wdm0/qmi] Opening QMI device... ModemManager[703345]: <debug> [1626962477.972310] [cdc-wdm0/qmi] Checking if QMI device already opening... ModemManager[703345]: <warn> [1626962477.975182] [modem0] couldn't start initialization: QMI device open/close operation in progress
2021-07-27port-qmi: support devices that only run in 802.3 modeAleksander Morgado
E.g. the ZTE MF190 has a very old QMI firmware that is not able to run CTL Set Data Format (raw-ip). ModemManager[666366]: [/dev/cdc-wdm0] QMI Device supports 4 services: ModemManager[666366]: [/dev/cdc-wdm0] ctl (1.2) ModemManager[666366]: [/dev/cdc-wdm0] wds (1.3) ModemManager[666366]: [/dev/cdc-wdm0] dms (1.2) ModemManager[666366]: [/dev/cdc-wdm0] nas (1.0) ModemManager[666366]: [/dev/cdc-wdm0] Setting network port data format... ModemManager[666366]: [/dev/cdc-wdm0] Sent message... <<<<<< RAW: <<<<<< length = 21 <<<<<< data = 01:14:00:00:00:00:00:03:26:00:09:00:10:02:00:02:00:01:01:00:00 ModemManager[666366]: [/dev/cdc-wdm0] Sent generic request (translated)... <<<<<< QMUX: <<<<<< length = 20 <<<<<< flags = 0x00 <<<<<< service = "ctl" <<<<<< client = 0 <<<<<< QMI: <<<<<< flags = "none" <<<<<< transaction = 3 <<<<<< tlv_length = 9 <<<<<< message = "Set Data Format" (0x0026) <<<<<< TLV: <<<<<< type = "Protocol" (0x10) <<<<<< length = 2 <<<<<< value = 02:00 <<<<<< translated = raw-ip <<<<<< TLV: <<<<<< type = "Format" (0x01) <<<<<< length = 1 <<<<<< value = 00 <<<<<< translated = absent ModemManager[666366]: [/dev/cdc-wdm0] Received message... <<<<<< RAW: <<<<<< length = 19 <<<<<< data = 01:12:00:80:00:00:01:03:26:00:07:00:02:04:00:01:00:2D:00 ModemManager[666366]: [/dev/cdc-wdm0] Received generic response (translated)... <<<<<< QMUX: <<<<<< length = 18 <<<<<< flags = 0x80 <<<<<< service = "ctl" <<<<<< client = 0 <<<<<< QMI: <<<<<< flags = "response" <<<<<< transaction = 3 <<<<<< tlv_length = 7 <<<<<< message = "Set Data Format" (0x0026) <<<<<< TLV: <<<<<< type = "Result" (0x02) <<<<<< length = 4 <<<<<< value = 01:00:2D:00 <<<<<< translated = FAILURE: InvalidDataFormat ModemManager[666366]: <debug> [1626961628.001354] [cdc-wdm0/qmi] QMI port open operation failed: QMI protocol error (45): 'InvalidDataFormat' ModemManager[666366]: <warn> [1626961628.002563] [modem0] couldn't start initialization: QMI protocol error (45): 'InvalidDataFormat' ModemManager[666366]: <warn> [1626961628.004181] [modem0] couldn't initialize: 'Modem is unusable, cannot fully initialize'
2021-07-27broadband-modem-qmi: remove trailing whitespacesAleksander Morgado
2021-07-26bearer-mbim: Disable multiplex support for wwan devicesLoic Poulain
WWAN network devices expose link management over netlink (wwan type), but it is not yet supported by libmbim. Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
2021-07-26kernel-device: Add get_wwandev_sysfs_pathLoic Poulain
The wwan subsystem is a new bus agnostic framework exposing wwan device and its components (ports, netdev...). It can be useful to get the wwan device a device belongs to Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
2021-07-26mm-sim-mbim: Remove trailing F in ICCIDPavan Holla
QMI modems remove trailing F in 19 digit ICCID. Do the same on MBIM modems for consistency.
2021-07-21port-qmi: open dpm port automatically in case of IPA net driverJoel Selvaraj
Requires IPA kernel driver to expose the TX and RX endpoint IDs through sysfs. Available from linux 5.14 onwards.
2021-07-21base-modem: set net sysfs pathJoel Selvaraj
Required by MMPortQmi for fetching the TX and RX endpoint IDs through sysfs from linux 5.14 onwards
2021-07-21port-qmi: allow MMPortQmi to get the net sysfs pathJoel Selvaraj
Will be set by base modem when organizing ports, similar to net driver name. Required for fetching the TX and RX endpoint IDs through sysfs from linux 5.14 onwards.
2021-07-14broadband-modem-mbim: fix passing new slots array in the set operationAleksander Morgado
2021-07-14broadband-modem-mbim: slot index in MM starts at 1Aleksander Morgado
When querying the slots using "Slot info status", the modem expects the slot index passed in the [0,number_slots-1] range. But for the ModemManager API, the slot indices start at 1; i.e. they are in the [1,number_of_slots] range. Consider that wen reporting the current slot index using MBIM.
2021-07-14mm-broadband-modem-mbim: implement the set_primary_sim_slot() method for DSSAZhangMingjie
2021-07-14mm-broadband-modem-mbim: implement the load_sim_slots() method for DSSAZhangMingjie
2021-07-14modem-qmi: disable call list check in case of QMIJoel Selvaraj
Fixes AT load call list function messing up with the call list in case of both AT+QMI is available for a given modem.
2021-07-13bearer-mbim: never update bearer properties sent by the userAleksander Morgado
We should never run any mm_bearer_properties_set_X() operations ourselves for the properties received by the user, or otherwise the logic comparing the bearers will fail and we may end up creating one bearer per connection attempt.
2021-07-13base-bearer: setup common default for unknown multiplex fallbackAleksander Morgado
If the user doesn't provide a specific multiplex setting, we'll fallback to a predefined default. For now, the default is REQUESTED.
2021-07-13broadband-bearer: multiplexing is not supported in generic AT based bearerAleksander Morgado
2021-07-12shared-qmi: fix use of uninitialized memoryAleksander Morgado
==636642== Syscall param socketcall.sendto(msg) points to uninitialised byte(s) ==636642== at 0x5282BAC: send (in /usr/lib/libpthread-2.33.so) ==636642== by 0x4EF20AF: UnknownInlinedFun (gsocket.c:3426) ==636642== by 0x4EF20AF: g_socket_send_with_blocking (gsocket.c:3529) ==636642== by 0x4EDF176: g_output_stream_write (goutputstream.c:242) ==636642== by 0x4EDF2D4: g_output_stream_write_all (goutputstream.c:301) ==636642== by 0x4A5CDAC: endpoint_send (qmi-endpoint-qmux.c:409) ==636642== by 0x4A5B963: qmi_endpoint_send (qmi-endpoint.c:225) ==636642== by 0x4A55408: qmi_device_command_abortable (qmi-device.c:2897) ==636642== by 0x4A554C3: qmi_device_command_full (qmi-device.c:2923) ==636642== by 0x4B52664: qmi_client_nas_set_system_selection_preference (qmi-nas.c:61099) ==636642== by 0x1F6FDC: register_in_network_sssp (mm-shared-qmi.c:455) ==636642== by 0x1F71E6: mm_shared_qmi_3gpp_register_in_network (mm-shared-qmi.c:505) ==636642== by 0x19FCF0: mm_iface_modem_3gpp_register_in_network (mm-iface-modem-3gpp.c:484) ==636642== Address 0x880a3b3 is 19 bytes inside a block of size 32 alloc'd ==636642== at 0x484383F: realloc (vg_replace_malloc.c:1192) ==636642== by 0x50DC130: g_realloc (gmem.c:171) ==636642== by 0x50A067C: g_array_maybe_expand (garray.c:1009) ==636642== by 0x50A0A0C: UnknownInlinedFun (garray.c:520) ==636642== by 0x50A0A0C: g_array_append_vals (garray.c:509) ==636642== by 0x50A0A9E: g_byte_array_append (garray.c:2430) ==636642== by 0x4A4B70D: qmi_message_tlv_write_guint8 (qmi-message.c:686) ==636642== by 0x4B14CA8: __qmi_message_nas_set_system_selection_preference_request_create (qmi-nas.c:33477) ==636642== by 0x4B525B6: qmi_client_nas_set_system_selection_preference (qmi-nas.c:61087) ==636642== by 0x1F6FDC: register_in_network_sssp (mm-shared-qmi.c:455) ==636642== by 0x1F71E6: mm_shared_qmi_3gpp_register_in_network (mm-shared-qmi.c:505) ==636642== by 0x19FCF0: mm_iface_modem_3gpp_register_in_network (mm-iface-modem-3gpp.c:484) ==636642== by 0x1B0BD4: check_next_registration (mm-iface-modem-simple.c:154)
2021-07-12iface-modem: ignore warning when trying to disconnect signal handlerAleksander Morgado
The signal handler may have been already removed during dispose of the modem object, which is run manually through g_object_run_dispose(). Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/399
2021-07-12iface-modem: refactor new SIM slots array creationAleksander Morgado
2021-07-12shared-qmi,iface-modem : Do not reprobe on hotswap in inactive slotPavan Holla
Prior to this change, a hotswap on the inactive slot would result in reprobe of the modem. With this change, the sim object would be updated, but no reprobe will be performed. The advantage is 1) we do not drop connections on the active slot 2) Slot status on the inactive slot is susceptible to firmware bugs. We have seen scenarios where the inactive slot is reported as absent/ iccid={0}, followed by a correction. We should not reprobe the modem if our active slot hasn't changed.
2021-07-11broadband-modem-mbim: allow disabling the use of the Intel Firmware Update ↵Aleksander Morgado
service Not all manufacturers expect this service to be used for the simple purpose of reseting the modem. It works with Sierra Wireless devices (e.g. EM7345, XMM7160_V1.1_MODEM_01.1349.12), but it doesn't work with Cinterion devices (e.g. mPLS62-w, XMM7160_V1.1_MBIM_NAND_ADAPT_R). So allow plugins to disable its use entirely.
2021-07-09utils: remove custom g_ptr_array_find_with_equal_func()Aleksander Morgado
This was required when building with GLib < 2.54, but we now require 2.56 as minimum, so it is no longer needed.
2021-07-09iface-modem: don't fail enabling if modem_power_up() isn't implementedAleksander Morgado
There are modems (e.g. Nokia, Thuraya, Iridium) which don't require or don't support power management, and therefore there is no way to either load or update the power status. In those modems we just assume ON is the current and only value (set in the skeleton during initialization) and so when we attempt to update the power state to ON during enabling, the logic should not break. Fix the logic by making sure the requested_power_setup() function pointers are only checked for validity after ensuring we're not already in the desired power state. Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/398
2021-07-08modem-qmi: implement voice unsolicited events and process all_call_status ↵Joel Selvaraj
indication
2021-07-08modem-qmi: implement voice check support and create call functionalityJoel Selvaraj
2021-07-08call-qmi: implement call start, hangup and acceptJoel Selvaraj
2021-07-08call-qmi: new `MMCallQmi' objectJoel Selvaraj
2021-07-06mm-sim-mbim: Remove update of remaining attemptsMichal Mazur
Calling the mm_iface_modem_update_unlock_retries function directly from pin_set_enter_ready caused a notification to be send too early with invalid number of attempts to unlock on MBIM modems. The mm_iface_modem_update_unlock_retries is already called for all modems from send_pin_ready (mm-base-sim.c).
2021-07-01iface-modem-location: print 0-prefixed LAC/TAC/CID values in logAleksander Morgado
Each with its expected corresponding length.
2021-06-22port-qmi: Increase the reference counter of the QrtrNodeAndrew Lassalle
Currently, we are not increasing the reference counter of the QrtrNode when creating a PortQmi for a QRTR port, and we are clearing the object when disposing the port.
2021-06-21port-qmi: apply master MTU handling to all multiplexing types in qmi_wwanAleksander Morgado
If using rmnet and IP passthrough setting in qmi_wwan, also configure the master interface with an MTU equal to the maximum data aggregation size. Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/367
2021-06-17broadband-modem: plug memleak when listing profilesAleksander Morgado
==4263== 747 (72 direct, 675 indirect) bytes in 3 blocks are definitely lost in loss record 5,739 of 5,787 ==4263== at 0x4842839: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==4263== by 0x50C6DE8: g_malloc (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6800.1) ==4263== by 0x50DDFF1: g_slice_alloc (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6800.1) ==4263== by 0x50B8EB9: g_list_prepend (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6800.1) ==4263== by 0x27CE4C: mm_3gpp_parse_cgdcont_read_response (mm-modem-helpers.c:1845) ==4263== by 0x1E5485: profile_manager_cgdcont_query_ready (mm-broadband-modem.c:10200) ==4263== by 0x4ED54A1: g_simple_async_result_complete (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.6800.1) ==4263== by 0x18605E: at_command_ready (mm-base-modem-at.c:538) ==4263== by 0x4ED54A1: g_simple_async_result_complete (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.6800.1) ==4263== by 0x25ADFA: serial_command_ready (mm-port-serial-at.c:393) ==4263== by 0x4ED54A1: g_simple_async_result_complete (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.6800.1) ==4263== by 0x254752: command_context_complete_and_free (mm-port-serial.c:141)
2021-06-16base-manager: skip using g_warning() in process_initial_kernel_events()Aleksander Morgado
Use mm_obj_warn() instead.
2021-06-16helpers: skip g_warning() in mm_3gpp_parse_ws46_test_response()Aleksander Morgado
Use mm_obj_warn() instead.
2021-06-16core: dump fatal initialization errors to stderrAleksander Morgado
2021-06-16filter: trivial: reorder WWAN rule before the TTY onesAleksander Morgado
2021-06-16filter: remove support for TTY blacklist, TTY greylist and TTY default allowedAleksander Morgado
These lists were used in the corresponding TTY_BLACKLIST and TTY_MANUAL_SCAN_ONLY filter rules, in the LEGACY and PARANOID filter types, which are no longer supported. The DEFAULT_ALLOWED filter rule made sense only in the LEGACY filter type, and therefore it is also now removed, leaving the DEFAULT_FORBIDDEN fallback rule exclusively. In other words, there is now no way to ask ModemManager to implicitly allow TTY ports; the only way to do that is by explicit making the TTY ports fall in one filter rule that would allow them.
2021-06-16filter: remove LEGACY and PARANOID filter typesAleksander Morgado
Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/390
2021-06-11port-serial: do not call config_fd on wwan qcdm portIvan Mikhanchuk
wwan qcdm port is not a serial port, calling config_fd on it will always fail, i.e.: ModemManager[124587]: <debug> [1619584182.125262] [wwan0p1QCDM/probe] probing QCDM... ModemManager[124587]: <debug> [1619584182.125398] [wwan0p1QCDM/qcdm] opening serial port... ModemManager[124587]: <debug> [1619584182.151759] [wwan0p1QCDM/qcdm] failed to configure serial device ModemManager[124587]: <warn> [1619584182.151836] [wwan0p1QCDM/qcdm] failed to open serial device ModemManager[124587]: <warn> [1619584182.170152] [plugin-manager] task 1,wwan0p1QCDM: error when checking support with plugin 'generic': (wwan/wwan0p1QCDM) Failed to open QCDM port: Failed to open QCDM port: -2
2021-06-10mm-sim-qmi: parse ICCID as hex instead of BCDEric Caruso
2021-06-09udev: Ignore WWAN "FIREHOSE" portsStephan Gerhold
FIREHOSE ports are used for firmware updates which are done independently from ModemManager, so we should ignore those ports. A similar change was originally made by Loic Poulain here: https://gitlab.freedesktop.org/loicpoulain/ModemManager/-/commit/32b0eb79cdbb37afe33abb72fd948be3cbaf6a2d
2021-06-09udev: Match WWAN "type" attribute instead of device nameStephan Gerhold
Recent changes in the WWAN framework in the kernel changed the WWAN port names from e.g. "wwan0p1AT" and "wwan0p2QMI" to "wwan0at0" and "wwan0qmi0" [1, 2]. This means that the udev rules no longer match since AT/QMI are now lower-case and no longer at the end of the name. However, recently additionally a "type" sysfs attribute was added for all WWAN ports [3], which makes it much more reliable to match the WWAN port names without relying on their exact device name. Add some additional udev rules to apply the port hints based on the "type" sysfs attributes. This fixes the port enumeration on newer Linux kernels that include the aforementioned commits. Note that we still need to keep the old udev rules for now since Linux 5.13 does not have the "type" attribute yet. [1]: https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit/?id=392c26f7f133b9f09e5f58db1ce6ef4b3b4df49f [2]: https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit/?id=f458709ff40b0d992fec496952f79c7820dd3fde [3]: https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit/?id=b3e22e10fdda8e7be3830289a4a63ae8b88d450c
2021-06-06udev: only flag as candidates the wwan ports, not the full deviceAleksander Morgado
Explicitly ignore the "wwan_dev" device as it is not associated with separate ports (which is what MM needs), but with the whole device instead. See https://lists.freedesktop.org/archives/modemmanager-devel/2021-May/008629.html
2021-06-06core: skip suggesting FCC unlock may be neededAleksander Morgado
This message is too specific, and there are a lot of cases where it wouldn't apply. E.g. when a MBIM module is stuck in low power mode due to some other reason (like hardware rfkill), this message would pop up to the users and completely confuse them.
2021-06-02shared-qmi: add missing g_autoptr() NULL initializerAleksander Morgado
2021-06-01broadband-modem-mbim: skip switch() when selecting MBIM servicesAleksander Morgado
Having a switch() for the MBIM services when processing indications forces us to update it on every new MBIM service added to libmbim, because we build with -Wswitch-enum by default. This warning type is extremely useful, and we should not stop using it, so let's simplify a bit the indication handling code and skip using a switch(). There are right now only 4 different service indications expected, so it shouldn't be a big deal.