Commit Graph
4123 Commits
Author SHA1 Message Date
Andrew Lassalle b0f40cf966 port-qmi: Increase the reference counter of the QrtrNode
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-22 14:56:42 -07:00
Aleksander Morgado a357777d39 port-qmi: apply master MTU handling to all multiplexing types in qmi_wwan
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-21 08:26:44 +00:00
Aleksander Morgado b100189f49 broadband-modem: plug memleak when listing profiles
==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-17 15:58:57 +02:00
Aleksander Morgado f9231bad34 base-manager: skip using g_warning() in process_initial_kernel_events()
Use mm_obj_warn() instead.
2021-06-16 11:59:51 +02:00
Aleksander Morgado 4cf12bb8bc helpers: skip g_warning() in mm_3gpp_parse_ws46_test_response()
Use mm_obj_warn() instead.
2021-06-16 11:59:51 +02:00
Aleksander Morgado 89bbc2ccb8 core: dump fatal initialization errors to stderr 2021-06-16 11:59:51 +02:00
Aleksander Morgado 8905cf4670 filter: trivial: reorder WWAN rule before the TTY ones 2021-06-16 11:59:51 +02:00
Aleksander Morgado 9639e52726 filter: remove support for TTY blacklist, TTY greylist and TTY default allowed
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-16 11:59:51 +02:00
Aleksander Morgado 00c1bbfd57 filter: remove LEGACY and PARANOID filter types
Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/390
2021-06-16 11:59:42 +02:00
Ivan Mikhanchuk 4b4ce6c445 port-serial: do not call config_fd on wwan qcdm port
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-11 17:22:04 -07:00
Eric Caruso 611d598836 mm-sim-qmi: parse ICCID as hex instead of BCD 2021-06-10 06:47:18 -07:00
Stephan Gerhold 43d705ab93 udev: Ignore WWAN "FIREHOSE" ports
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-09 14:52:56 +02:00
Stephan Gerhold 4282c8d843 udev: Match WWAN "type" attribute instead of device name
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-09 13:49:08 +02:00
Aleksander Morgado ac18b5ac5b udev: only flag as candidates the wwan ports, not the full device
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-06 15:23:36 +02:00
Aleksander Morgado 464c0d464c core: skip suggesting FCC unlock may be needed
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-06 12:11:10 +02:00
Aleksander Morgado eefcf9204f shared-qmi: add missing g_autoptr() NULL initializer 2021-06-02 09:56:00 +02:00
Aleksander Morgado e25a585c9f broadband-modem-mbim: skip switch() when selecting MBIM services
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.
2021-06-01 09:36:53 +02:00
Jarvis-Jiang-G 52bf2c6411 mbim: Increase mbim_device_open_full timeout
After fwupd upgrade with mbim-qdu method, MM sometimes generate plugin failed with the regenerated MHI driver.
This patch increases the mbim_device_open_full timeout from 30 seconds to 45 seconds to prevent such issue.
Signed-off-by: Jarvis Jiang <jarvis.w.jiang@gmail.com>
2021-05-31 17:19:50 +08:00
Aleksander Morgado 695e9932db bearer-mbim: implement reload_connection_status()
Implement connection status reloading for MBIM based bearers.

Based on a patch by Dylan Van Assche <me@dylanvanassche.be>
2021-05-26 13:14:52 +00:00
Aleksander Morgado a97bc9912f bearer-qmi: implement reload_connection_status() for the sync operation
The original load_connection_status() method would return an
UNSUPPORTED error if connection monitoring wasn't required (which is
the default in most QMI modems).

The new reload_connection_status() method requires the check to always
be done unconditionally.

We take most of the original logic in the load_connection_status() for
the new reload_connection_status(), and we add the UNSUPPORTED error
logic exclusively in the new load_connection_status().
2021-05-26 13:14:52 +00:00
Aleksander Morgado 2466ddbdaf broadband-bearer: reuse the same method for load and reload
The load_() method is used for connection monitoring; while the
reload_() method is used to sync connection status after a
suspend/resume operation. The same method can be used for both things
in the case of AT+CGACT? based modems.
2021-05-26 13:14:52 +00:00
Aleksander Morgado 6c1d4808b1 base-bearer: ignore cancellation during sync()
There is no input cancellable in the method, so the GTask will never
get cancelled from the outside.
2021-05-26 13:14:52 +00:00
Aleksander Morgado e096b50208 iface-modem,bearer-list: sync all bearers one after the other
Do not launch N checks for N bearers and ignore their result. Instead,
go one by one, and report errors one by one.
2021-05-26 13:14:52 +00:00
Aleksander Morgado e4f7da5624 base-bearer: propagate the new connection status after reload
Just triggering a connection status reload won't change the actual
bearer object state.

We change the signature of the reload_connection_status_finish()
method so that it returns the actual reloaded bearer connection
status, and so both the load_ and reload_ methods can be implemented
with exactly the same method, something that was not possible before.

Once we get the new connection status reloaded, we apply it in the
bearer object only if it's DISCONNECTED (and it wasn't DISCONNECTED
before). This should cover the true real case we're interested in, and
nothing else (i.e. we won't overcomplicate the logic attempting to
handle disconnected->connected transitions detected in the sync()
operation).
2021-05-26 13:14:52 +00:00
Aleksander Morgado 8cfc2a237a base-bearer: fix connection reload completion
If we called the class reload_connection_status() method, we should
call the class reload_connection_status_finish() as well.
2021-05-26 13:14:52 +00:00
Aleksander Morgado 29a1c24538 base-bearer: improve comments of the load/reload_connection_status() methods 2021-05-26 13:14:52 +00:00
Dylan Van Assche 8913bab1c5 base-bearer: synchronize state when resuming
Refresh connection status on resume to confirm
that the connection bearers are still valid.
2021-05-26 13:14:52 +00:00
Aleksander Morgado 0a99cca277 iface-modem: ignore cancellation during sync()
There is no input cancellable in the method, so the GTask will never
get cancelled from the outside.
2021-05-26 13:14:52 +00:00
Aleksander Morgado 8a70dbe34b iface-modem: remove the signal quality enforced refresh during sync()
when mm_iface_modem_refresh_signal() is called, we'll restart the
signal quality refresh logic already, there is no need to request
an enforced start.

The enforced start was also modifying ctx->enabled unconditionally,
which is really not ok. This logic would be enabled only when we're
registered, and that logic is fine, no need to change that.
2021-05-26 13:14:52 +00:00
Aleksander Morgado 7156d5ee50 broadband-modem: abort sync if locked SIM card found
We made sure that the after resume synchronization was only started on
modems that had been enabled (and so unlocked). If we detect a locked
SIM card during the sync operation, it's either because the SIM card
was swapped, or because the modem was fully shutdown during the
suspension (and so the SIM requires SIM-PIN again).

Either way, we cannot sync the state cleanly at this point, we must
trigger a full modem reprobe in order to move back the modem state to
Locked.
2021-05-26 13:14:52 +00:00
Aleksander Morgado 8a6b18198d broadband-modem: fix state machine logic when synchronizing modem interface 2021-05-26 13:14:52 +00:00
Aleksander Morgado 14325d85a8 broadband-modem: fail synchronization if no modem exported in DBus 2021-05-26 13:14:52 +00:00
Dylan Van Assche 0e47ba4041 iface-modem: synchronize state when resuming
Refresh signal strength and access technologies,
check for SIM swaps, and check if the SIM is locked.
The modem may have switched to a different
access technologies or have a different signal strength
when resuming. Moreover, the user may swap or remove
the SIM when suspended.
2021-05-26 13:14:52 +00:00
Aleksander Morgado 3afa8e6f3b broadband-modem: skip 3GPP interface sync if no 3GPP support 2021-05-26 13:14:52 +00:00
Aleksander Morgado 890694e0c3 broadband-modem: fix type in the ready() for iface_modem_3gpp_sync()
When calling an async method ona given type, the convention is to use
the same type in the corresponding ready() method, so that we can use
it without additional casts on the finish().
2021-05-26 13:14:52 +00:00
Aleksander Morgado e716a306b1 iface-modem-3gpp: ignore cancellation during sync()
There is no input cancellable in the method, so the GTask will never
get cancelled from the outside.
2021-05-26 13:14:52 +00:00
Aleksander Morgado e46e36b36e iface-modem-3gpp: remove redundant log message
It doesn't give us any valuable information, so just remove it.
2021-05-26 13:14:52 +00:00
Aleksander Morgado 7c5e27caf9 iface-modem-3gpp: fix double GError free on registration sync failure 2021-05-26 13:14:52 +00:00
Aleksander Morgado 5b3709e61e iface-modem-3gpp: use g_autoptr() for the MMBearerProperties during sync 2021-05-26 13:14:52 +00:00
Dylan Van Assche 84aa134ad9 iface-modem-3gpp: synchronize state when resuming
On resume, refresh the EPS bearers and 3GPP registration
as the registration and bearers may expired during suspend.
2021-05-26 13:14:52 +00:00
Aleksander Morgado a9868638a7 iface-modem-time: ignore cancellation during sync()
There is no input cancellable in the method, so the GTask will never
get cancelled from the outside.
2021-05-26 13:14:52 +00:00
Aleksander Morgado ac1ff45f44 broadband-modem: skip time interface sync if no time support 2021-05-26 13:14:52 +00:00
Dylan Van Assche 41db2e5e82 iface-modem-time: synchronize state when resuming
On resume, fetch the current network time as
the network time may be changed when suspended.
2021-05-26 13:14:52 +00:00
Aleksander Morgado e58d525826 broadband-modem: skip synchronization after resume if not needed
The synchronization after resume should only be needed on enabled
modems, as otherwise there is really no chance that the state of the
modem may have changed during suspend.

E.g. if a modem is failed because it doesn't have a SIM card, or if
the SIM-PIN is locked, or if the modem has never been enabled, there
is no point in attempting to synchronize the runtime state of the
modem.
2021-05-26 13:14:52 +00:00
Aleksander Morgado 42bc953749 broadband-modem: ignore cancellation during sync()
There is no input cancellable in the method, so the GTask will never
get cancelled from the outside.
2021-05-26 13:14:52 +00:00
Aleksander Morgado eaf14b8d79 base-modem: make sync() available only if suspend-resume enabled 2021-05-26 13:14:52 +00:00
Aleksander Morgado eb5ae16ac4 base-modem: don't fail if sync() isn't implemented 2021-05-26 13:14:52 +00:00
Aleksander Morgado 728e6cd398 base-modem: fix modem_sync() operation handling
The mm_base_modem_sync() method is an asynchronous method that
receives a callback and user data, and therefore we MUST always
complete the async method calling that callback. Set that up with a
GTask as usual.

Also, the mm_base_modem_sync_finish() method should be implemented
along with mm_base_modem_sync(), not in the source file of the
caller of the async method. The finish() always depends on how the
async method was implemented, in our case using a GTask.
2021-05-26 13:14:52 +00:00
Aleksander Morgado 6397aacfdb base-manager: avoid using the mm_ prefix for static private methods 2021-05-26 13:14:52 +00:00
Aleksander Morgado 8f48ba21af base-manager: don't assume a MMDevice always holds a MMModem
There are cases, e.g. during modem object disposal, where this is not
true.
2021-05-26 13:14:52 +00:00