Commit Graph
8843 Commits
Author SHA1 Message Date
Yegor Yefremov af992c2f1a .editorconfig: fix insert_final_newline behaviour
Enable insert_final_newline to comply with the current style.
2024-03-18 12:17:57 +01:00
Samuel Valery ba9901e2be mm-bearer-qmi: Disconnect extended IP config handler
There exists code paths in which the IPv4 and IPv6 WDS extended IP
config indication signal handlers are not disconnected. This results in
a ModemManager crash when an indication signal handler callback is
invoked for a bearer that no longer exists. ModemManager crashes because
the callback function (extended_ip_config_indication_received) tries to
write a log and use the ID of a non-existent bearer.

This patch ensures the extended IP config signal handlers are
disconnected when the bearer connection is reset.

Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/794
2024-03-14 08:01:14 +10:00
Aleksander Morgado 002179ca7f base-bearer: log user requests 2024-03-13 13:02:23 +00:00
Aleksander Morgado 28e3642767 base-call: log user requests 2024-03-13 13:02:23 +00:00
Aleksander Morgado 8a8591f4dc base-sim: log user requests 2024-03-13 13:02:23 +00:00
Aleksander Morgado f7d22f407d iface-modem-voice: log user requests 2024-03-13 13:02:23 +00:00
Aleksander Morgado a47cec9ba6 iface-modem-time: log user requests 2024-03-13 13:02:23 +00:00
Aleksander Morgado 72f8b6082c iface-modem-signal: log user requests 2024-03-13 13:02:23 +00:00
Aleksander Morgado b51c581d55 iface-modem-location: log user requests 2024-03-13 13:02:23 +00:00
Aleksander Morgado c45a89065b iface-modem-firmware: log user requests 2024-03-13 12:29:28 +00:00
Aleksander Morgado 422f00768d iface-modem-3gpp-ussd: log user requests 2024-03-13 12:27:00 +00:00
bolan wang 532472f686 plugins,fibocom: Add the udev rules for FM135 modules
This patch add fibocom FM135 to 77-mm-fibocom-port-types.rules file. The vid and pid of the module is "2cb7 0115".
2024-03-13 10:56:16 +00:00
Z-张旭 93548c29cc mm-port-probe: ignore the fastboot port of the wwan device during port detection 2024-03-13 04:19:49 +00:00
Aleksander Morgado 306566ad7e quectel: implement shared quectel logic in MBIM modem 2024-03-13 03:57:57 +00:00
Aleksander Morgado 87fb47b9ab quectel: minor code reordering 2024-03-13 03:57:57 +00:00
Aleksander Morgado 8c208f7bcf xmm: ignore +XBIPI URCs 2024-03-13 03:52:35 +00:00
Aleksander Morgado 4b0b9dde02 fibocom: setup common shared setup ports in all modems
Make sure all Fibocom modem implementations use the shared port setup
logic that adds the SIM READY URC ignore rule.
2024-03-13 03:52:35 +00:00
Aleksander Morgado 8512ff4442 fibocom: setup shared fibocom management on AT-only modem
The generic MMBroadbandModemFibocom object uses the shared Fibocom
settings to load the update settings. This logic does not use the
Private info right now, but there is no reason why it wouldn't do it
in the future. Also, for consistency, it makes sense to ensure the
shared interface setup is the same in all implementations, we should
not have only some allowing to initialize the Private info.
2024-03-13 03:52:35 +00:00
Kamesh Relangi 2dac0a9e4f build: fix dependencies in huawei plugin helpers
Compilation errors due to generated files is observed when
compiling in multi threaded environment, as the generated files
getting generated after they have been referred.

Fix: Added dependency in meson so that it will ensure that the
header is generated.

Ref fail log:
../mobile-broadband/ModemManager/src/plugins/huawei/mm-modem-helpers-huawei.c:29:10:
fatal error: mm-huawei-enums-types.h: No such file or directory
   29 | #include "mm-huawei-enums-types.h"
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.

Signed-off-by: Kamesh Relangi <quic_krelangi@quicinc.com>
2024-03-12 12:06:42 +00:00
Aleksander Morgado 818bcd40d7 iface-modem-firmware: fix assert if ports have been removed
The logic to build the generic device ids may run by the time we have
already removed the ports in the modem. If so, just cleanly error out
and avoid the assertion.

   0x00007df14bb03a3f (libc.so.6 - pthread_kill.c: 44)     __pthread_kill_implementation
   0x00007df14bab8c6c (libc.so.6 - raise.c: 26)    raise
   0x00007df14baa4462 (libc.so.6 - abort.c: 79)    abort
   0x00007df14c2c8686 (libglib-2.0.so.0 - gtestutils.c: 3450)      g_assertion_message
   0x00007df14c2c86fa (libglib-2.0.so.0 - gtestutils.c: 3476)      g_assertion_message_expr
   0x000059ff23c90c90 (ModemManager - mm-iface-modem-firmware.c: 353)      mm_iface_firmware_build_generic_device_ids
   0x000059ff23ceef7d (ModemManager - mm-shared-fibocom.c: 495)    fibocom_at_port_get_firmware_version_ready
   0x00007df14c158e57 (libgio-2.0.so.0 - gtask.c: 1309)    g_task_return_now
   0x00007df14c158e8a (libgio-2.0.so.0 - gtask.c: 1323)    complete_in_idle_cb
   0x00007df14c2a47a4 (libglib-2.0.so.0 - gmain.c: 3460)   g_main_dispatch
   0x00007df14c2a47a4 (libglib-2.0.so.0 - gmain.c: 4200)   g_main_context_dispatch
   0x00007df14c2a4ac3 (libglib-2.0.so.0 - gmain.c: 4276)   g_main_context_iterate
   0x00007df14c2a4d41 (libglib-2.0.so.0 - gmain.c: 4479)   g_main_loop_run
   0x000059ff23c43741 (ModemManager - main.c: 221) main
   0x00007df14baa46c5 (libc.so.6 - libc_start_call_main.h: 58)     __libc_start_call_main
   0x00007df14baa4781 (libc.so.6 - libc-start.c: 389)      __libc_start_main_impl
   0x000059ff23c430b0 (ModemManager + 0x000b00b0)  _start
   0x00007ffc53d5bd27
2024-03-12 11:54:53 +00:00
Aleksander Morgado bd255849dc base-manager: reprobe device on late port additions
There is no guarantee from the kernel that the ports of a given device
will all be notified via uevents on a timely manner. We assume it, but
we cannot be completely sure.

There are two main scenarios that we have been seen when the ports of a
device are not notified close enough to each other:

 * A modem object is created, but not with the desired control protocol.
   E.g. a QMI or MBIM modem would end up controlled via AT commands if
   the cdc-wdm port was added too late.

 * A modem object is not created at all, and the device object was
   removed completely. E.g. when the net port addition in a QMI or MBIM
   modem happens too late.

In order to avoid those cases, we will now fully reprobe all the ports
of the device from scratch whenever a new valid port addition happens
after the initial probing of the device has already been completed. If a
modem object is available at that time, we will remove it right away.
2024-03-12 10:15:59 +00:00
Aleksander Morgado 07f1f58642 modem-helpers: rework AT string quote operation and add unit tests
Rework the AT string quote operation to build the output with the
GString helper, instead of manually calculating how many bytes we'll
need in the output. It just makes it clearer.
2024-03-12 10:15:59 +00:00
Aleksander Morgado 311d6f389e broadband-modem: fix crash when ports gone while setting up messaging URCs
We cannot assume that the ports may be peeked after the AT sequence
has finished, because they may have been already removed. We can store
a full port reference instead, to ensure the validity of the objects
at that time.

  ==19351== Process terminating with default action of signal 5 (SIGTRAP)
  ==19351==    at 0x4A1DB24: g_logv (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6800.1)
  ==19351==    by 0x4A1DDB2: g_log (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6800.1)
  ==19351==    by 0x28B54E: mm_port_get_device (mm-port.c:62)
  ==19351==    by 0x1B1247: modem_messaging_enable_unsolicited_events_secondary_ready (mm-broadband-modem.c:7373)
  ==19351==    by 0x4BA37D8: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.6800.1)
  ==19351==    by 0x4BA381C: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.6800.1)
  ==19351==    by 0x4A157EE: g_main_context_dispatch (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6800.1)
  ==19351==    by 0x4A68D27: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6800.1)
  ==19351==    by 0x4A14E52: g_main_loop_run (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6800.1)
  ==19351==    by 0x176B91: main (main.c:236)
2024-03-12 10:15:59 +00:00
Aleksander Morgado aec461132c base-modem-at: switch command error handling to g_autoptr 2024-03-12 10:15:59 +00:00
Aleksander Morgado f90778df43 port-probe: switch command error handling to g_autoptr 2024-03-12 10:15:59 +00:00
Aleksander Morgado 7c2aed6d52 device: remove unused get_port_probe_list() method 2024-03-12 10:15:59 +00:00
Aleksander Morgado b99757a1f4 fibocom: don't be strict on required drivers
Requiring an explicit set of drivers should only be done when we have
different plugins supporting different types of devices of the same
manufacturer based on the drivers in use (e.g. as in the Sierra case).

When the plugin includes a list of required drivers, the plugin filter
will only assume the plugin can be used if at least one of the
available ports is exposed with one of the drivers in the list.

Because of this, if we start probing some ports before all the
expected ports are reported, we may end up not selecting a given
plugin just because the driver match should have been done in a
not-yet-notified port.

E.g. on system boot:
 * ttyACM0 is notified.
 * min probing time elapses so ttyACM0 probing starts
 * Fibocom plugin is not selected for ttyACM0 as no matched
   driver ("cdc_acm") is given in the the list of drivers of the
   plugin.
 * cdc-wdm0 and wwan0 drivers are notified.
 * MM creates generic MBIM modem with the Fibocom plugin, but without
   XMM features support, because the ttyACM0 port probing was not done
   by the Fibocom plugin.

And if we reset the modem after that:
 * ttyACM0 is notified.
 * cdc-wdm0 and wwan0 drivers are notified.
 * min probing time elapses so probing starts for all ports
 * Fibocom plugin is selected for all port probings as "cdc_mbim" is
   listed in the list of drivers of the plugin.
 * MM creates XMM-capable MBIM modem with the Fibocom plugin.
2024-03-11 12:36:15 +00:00
Lukas Voegl f8295bd641 cinterion: keep dual-sim order
mm_parse_uint_list() sorts available SIMs and possibly changes the order of the active / non-active SIM.
A custom parser is added, which keeps the order of all SIMs.

Signed-off-by: Lukas Voegl <lvoegl@tdt.de>
2024-03-04 09:11:36 +00:00
Yegor Yefremov ad6772df34 .gitlab-ci.yml: use meson instead of ninja where possible
Replace all ninja invocations but for the uninstall target with
meson.

meson build command can be omitted when executing test and install
targets that depend on compile target.
2024-02-27 15:11:48 +01:00
Aleksander Morgado b4285e9388 bearer-qmi: use complete_connect() in in all steps of the attempt
The connect_cleanup() method takes care of cleaning up the ongoing
connect cancellables stored in the MMBearerQmi private data. Not using
it would lead to assert failures when disposing the bearer object.

  0x00007ca75b4dea3f (libc.so.6 - pthread_kill.c: 44)     __pthread_kill_implementation
  0x00007ca75b493c6c (libc.so.6 - raise.c: 26)    raise
  0x00007ca75b47f462 (libc.so.6 - abort.c: 79)    abort
  0x00007ca75bca4688 (libglib-2.0.so.0 - gtestutils.c: 3450)      g_assertion_message
  0x00007ca75bca46fc (libglib-2.0.so.0 - gtestutils.c: 3476)      g_assertion_message_expr
  0x00005785d2f5aec4 (ModemManager - mm-bearer-qmi.c: 2974)       dispose
  0x00007ca75ba4cd0b (libgobject-2.0.so.0 - gobject.c: 3891)      g_object_unref
  0x00007ca75bc7c834 (libglib-2.0.so.0 - glist.c: 1092)   g_list_foreach
  0x00007ca75bc7c834 (libglib-2.0.so.0 - glist.c: 246)    g_list_free_full
  0x00005785d2f071a7 (ModemManager - mm-bearer-list.c: 456)       dispose
  0x00007ca75ba4cd0b (libgobject-2.0.so.0 - gobject.c: 3891)      g_object_unref
  0x00005785d2f0cf5f (ModemManager - mm-broadband-modem.c: 13420) dispose
  0x00007ca75ba4cb6f (libgobject-2.0.so.0 - gobject.c: 1448)      g_object_run_dispose
  0x00005785d2f20ae1 (ModemManager - mm-device.c: 418)    clear_modem
  0x00005785d2f20d9d (ModemManager - mm-device.c: 461)    modem_valid
  0x00007ca75ba4820e (libgobject-2.0.so.0 - gclosure.c: 832)      g_closure_invoke
  0x00007ca75ba5cd00 (libgobject-2.0.so.0 - gsignal.c: 3812)      signal_emit_unlocked_R
  0x00007ca75ba5dd8b (libgobject-2.0.so.0 - gsignal.c: 3565)      g_signal_emit_valist
  0x00007ca75ba5e1d5 (libgobject-2.0.so.0 - gsignal.c: 3622)      g_signal_emit
  0x00007ca75ba51c6a (libgobject-2.0.so.0 - gobject.c: 1428)      g_object_dispatch_properties_changed
  0x00007ca75ba4d159 (libgobject-2.0.so.0 - gobject.c: 1552)      g_object_notify_by_spec_internal
  0x00005785d2efdf62 (ModemManager - mm-base-modem.c: 1783)       base_modem_invalid_idle
  0x00007ca75bc807a4 (libglib-2.0.so.0 - gmain.c: 3460)   g_main_dispatch
  0x00007ca75bc807a4 (libglib-2.0.so.0 - gmain.c: 4200)   g_main_context_dispatch
  0x00007ca75bc80ac3 (libglib-2.0.so.0 - gmain.c: 4276)   g_main_context_iterate
  0x00007ca75bc80d41 (libglib-2.0.so.0 - gmain.c: 4479)   g_main_loop_run
  0x00005785d2ef07df (ModemManager - main.c: 236) main
  0x00007ca75b47f6c5 (libc.so.6 - libc_start_call_main.h: 58)     __libc_start_call_main
  0x00007ca75b47f781 (libc.so.6 - libc-start.c: 389)      __libc_start_main_impl
  0x00005785d2ef0130 (ModemManager + 0x000b1130)  _start
  0x00007ffd10207c37
2024-02-21 09:28:35 +00:00
Aleksander Morgado 6a8797927c build: unstable release version bump tp 1.23.4 2024-02-19 14:58:32 +00:00
Garfield Watkins 4d360e3b22 plugin: include MM_PLUGIN_ALLOWED_SINGLE_AT in port probing
Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/822
2024-02-19 11:35:53 +00:00
Dan Williams 004450f9a9 base-modem: retry AT+CNUM a couple times if the SIM is busy
Seen on a Huawei UMG1831 when plugged in while ModemManager is already running.

ModemManager[45407]: <dbg> [1707842298.719505] [ttyUSB2/at] device open count is 3 (open)
ModemManager[45407]: <dbg> [1707842298.719642] [ttyUSB2/at] --> 'AT+CNUM<CR>'
ModemManager[45407]: <dbg> [1707842298.728802] [ttyUSB2/at] <-- '<CR><LF>+CME ERROR: 14<CR><LF>'
ModemManager[45407]: <dbg> [1707842298.728946] [ttyUSB2/at] operation failure: 14 (SIM busy)
ModemManager[45407]: <dbg> [1707842302.097846] [ttyUSB2/at] --> 'AT+CNUM<CR>'
ModemManager[45407]: <dbg> [1707842302.109435] [ttyUSB2/at] <-- '<CR><LF>+CME ERROR: 14<CR><LF>'
ModemManager[45407]: <dbg> [1707842302.109645] [ttyUSB2/at] operation failure: 14 (SIM busy)
ModemManager[45407]: <dbg> [1707842305.098165] [ttyUSB2/at] --> 'AT+CNUM<CR>'
ModemManager[45407]: <dbg> [1707842305.107692] [ttyUSB2/at] <-- '<CR><LF>+CNUM: "","+11234567890",145<CR><LF><CR><LF><CR><LF>OK<CR><LF>'

Signed-off-by: Dan Williams <dcbw@redhat.com>
2024-02-19 11:24:27 +00:00
Dan Williams ded76a0abb base-modem-at: add optional wait before sending command in a sequence
Can be used for easier command retries where the generic sequence code
handles the GTimeout source.

Signed-off-by: Dan Williams <dcbw@redhat.com>
2024-02-19 11:24:27 +00:00
Aleksander Morgado b3708636b1 mtk: fix reported nw error in FM350 < 29.22.13
The network error needs to be scaled down.
2024-02-15 21:08:57 +00:00
Aleksander Morgado 8dffb76f1e broadband-modem-mbim: allow normalizing the nw error value
Required for modems that don't provide a correct 3GPP network error
value.
2024-02-15 21:08:57 +00:00
Aleksander Morgado b313a603aa mtk: remove IP packet filters during connection in FM350 < 29.23.06
Old firmware versions of the FM350 had some internal IP packet filters
installed, which prevented proper IPv6 connectivity in certain cases.

This workaround ensures that the IP packet filters get removed
whenever a data connection is up. Because we don't know when exactly
the filters get installed, we do this removal periodically along with
the bearer stats query.
2024-02-15 21:06:59 +00:00
Aleksander Morgado 2f306e8e7c mtk: multiplex support only available in FM350 >= 29.23.06
Old versions of the FM350 firmware were able to support multiplex with
multiple PDNs more or less consistently, except on very specific cases
like Verizon.

The newest firmware versions support multiplex on any carrier, so we
can enable back the feature depending on the firmware version number.
2024-02-15 21:01:53 +00:00
Aleksander Morgado 2f5ebfadee iface-modem: create bearer list after loading revision
Modems may have certain features only available in new firmware
versions. We should try to load the firmware revision as soon as
possible, even before creating the bearer list, as that informs
already about multiplexing support in the device.
2024-02-15 21:01:52 +00:00
Aleksander Morgado 1373ca7e51 mtk: expect async SLAAC only in FM350 >= 29.23.06
Async SLAAC implementation in the FM350 is only available since
29.23.06, so only wait for the IP configuration indications reporting
the SLAAC result in newer versions.
2024-02-15 21:01:52 +00:00
Aleksander Morgado f31f42dda1 bearer-mbim: support async IP configuration indications reporting SLAAC result
When IPv6 is requested during a connection attempt, two things may
happen: either the modem itself runs SLAAC, or otherwise the host is
the one that should run SLAAC.

Until now we have assumed that the first IP configuration query that
is run upon finishing a connection attempt always gives us a "final
result", so if the modem did run SLAAC by itself, we would have
expected to see a global IPv6 reported in that first query. And if
there was no global IPv6 reported, then we would have assumed that the
host was the one tasked with running SLAAC.

There is a third option that we now consider, which is the case where
the first IP configuration query does not report a global IPv6, but
the modem is really running SLAAC, and the global IPv6 address will be
reported via a IP configuration indication as soon as SLAAC finishes.

This third option cannot be assumed by default, because it introduces
the possibility of MM waiting for the indication with the SLAAC
results and that indication never arriving in the 10s timeout used as
default. If a modem is supposed to use this third option, the feature
must be explicitly flagged by the modem plugin.
2024-02-15 21:01:52 +00:00
Aleksander Morgado b0add8c03b broadband-modem-mbim: request IP configuration indications
The modem object doesn't process the IP configuration updates reported
by the modem, but the MBIM bearer object may do so if waiting for
async SLAAC updates.
2024-02-15 21:01:52 +00:00
Aleksander Morgado 1befca4573 cinterion: disable periodic signal checks in MBIM modems 2024-02-15 13:01:00 +00:00
Aleksander Morgado 91828ecc65 quectel: disable periodic signal checks in MBIM modems 2024-02-15 13:01:00 +00:00
Aleksander Morgado 3c35212f7c telit: disable periodic signal checks in MBIM modems 2024-02-15 13:01:00 +00:00
Yegor Yefremov 29d237bcb7 .gitignore: ignore Visual Studio Code directory and file 2024-02-14 08:36:23 +01:00
RICCIARDI-Adrien ef126455b8 plugins: mtk: Added MT6229 USB modem support.
This modem is used for instance on the CAT B100 phone.

Signed-off-by: RICCIARDI-Adrien <adrien.ricciardi@hotmail.fr>
2024-02-12 22:34:01 +00:00
Aleksander Morgado b61adb1626 iface-modem: also run disable on failed low power mode update
If the user requested to set the modem in low power mode while
enabled, the user is also expecting the device to be implicitly
disabled.

If for any reason setting the modem to low power mode fails (e.g. it
could be not supported by the device), we should still try to run the
modem disabling sequence, as that is the expectation.
2024-02-08 14:31:19 +00:00
Florian Eckert f6795754bc broadband-modem-qmi: change operator description priority
If an IoT SIM card is used, the service name is always used as the operator
description. This is not what is expected. Therefore the priority is
changed with this commit, so that the long name is tried to be set first,
then the short name and finally the service name.

Signed-off-by: Florian Eckert <fe@dev.tdt.de>
2024-02-07 16:31:33 +01:00
Florian Eckert 521349d5fc broadband-modem-qmi: add debug messages on operator description set
With the current implementation it was not possible to find out which
operator description is now exactly used. By adding a log message, it is
now clear which operator description is now set.

Signed-off-by: Florian Eckert <fe@dev.tdt.de>
2024-02-07 16:31:06 +01:00