Age | Commit message (Collapse) | Author |
|
Subsystem device ID can be used for identifying PCI modems,
so expose the property.
Signed-off-by: Sushrut Shree Trivedi <quic_sushruts@quicinc.com>
|
|
Add subsystem device ID support, that can be used in pci devices
instead of vendor/device ID customization.
Signed-off-by: Sushrut Shree Trivedi <quic_sushruts@quicinc.com>
|
|
The quectel modems that are not using QMI could receive DTMF events but
no dbus notification was sent to the user space. This patch adds the
DTMF notification support to the quectel plugin.
Signed-off-by: Kévin L'hôpital <kevin.lhopital@savoirfairelinux.com>
|
|
Since we're also now reading responses we need to check sender
credentials to make sure we're talking to the kernel, and not
some other process spoofing netlink.
Signed-off-by: Dan Williams <dan@ioncontrol.co>
|
|
Just to make it explicit that there is no more logic running
afterwards.
|
|
We should not assert if the modem is flagged as invalid but an
outstanding enabling request is processed. Let's exit gracefully and
let the object get properly disposed afterwards.
(libc.so.6 - pthread_kill.c: 44) __pthread_kill_implementation
(libc.so.6 - raise.c: 26) raise
(libc.so.6 - abort.c: 79) abort
(libglib-2.0.so.0 - gtestutils.c: 3450) g_assertion_message
(libglib-2.0.so.0 - gtestutils.c: 3476) g_assertion_message_expr
(ModemManager - mm-broadband-modem.c) enable
(ModemManager - mm-iface-modem.c: 2340) handle_enable_auth_ready
(libgio-2.0.so.0 - gtask.c: 1309) g_task_return_now
(libgio-2.0.so.0 - gtask.c: 1378) g_task_return
(ModemManager - mm-base-modem.c: 2011) lock_after_authorize_ready
(libgio-2.0.so.0 - gtask.c: 1309) g_task_return_now
(libgio-2.0.so.0 - gtask.c: 1378) g_task_return
(ModemManager - mm-base-modem.c: 1841) base_modem_operation_run
(ModemManager - mm-base-modem.c: 764) state_operation_ready
(libgio-2.0.so.0 - gtask.c: 1309) g_task_return_now
(libgio-2.0.so.0 - gtask.c: 1323) complete_in_idle_cb
(libglib-2.0.so.0 - gmain.c: 3460) g_main_dispatch
(libglib-2.0.so.0 - gmain.c: 4200) g_main_context_dispatch
(libglib-2.0.so.0 - gmain.c: 4276) g_main_context_iterate
(libglib-2.0.so.0 - gmain.c: 4479) g_main_loop_run
(ModemManager - main.c: 236) main
(libc.so.6 - libc_start_call_main.h: 58) __libc_start_call_main
(libc.so.6 - libc-start.c: 360) __libc_start_main_impl
(ModemManager + 0x000b8850) _start
|
|
Closes #953
|
|
registration
Some modems succeed on enabling "system info" and disabling "serving system" in one
transaction, even though they don't support "system info". This commit separates the
two: first, try to enable "system info", and if it succeeds then disable "serving system".
|
|
elogind sends PrepareForSleep(false) when resuming but doesn't necessarily
send PrepareForSleep(true) when sleeping. This means we didn't necessarily
drop our previous inhibitor when it's time to take a new one. So instead of
asserting that we dropped our previous inhibitor, just reuse it.
|
|
|
|
Seen on a Qualcomm-based Quectel EG915Q on the diag port:
ModemManager[34547]: <dbg> [1732077670.330527] [ttyUSB0/at] <-- ' \0\0\0\8\0\0\0\2\0\0\0\0`%\160$"\6\169\128\200\1\30\197\142\0G\184\225\128\0\1+\127\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254\255\255\255\255\255\255\255\254'
Signed-off-by: Dan Williams <dan@ioncontrol.co>
|
|
If by any chance the same ports needs to go through AT and
QMI/MBIM probing, make sure the serial port created during
AT probing is closed before starting the QMI/MBIM probing.
|
|
|
|
|
|
Remove stray tabs.
Signed-off-by: Dan Williams <dan@ioncontrol.co>
|
|
The hotplugged flag was added to simplify modem probe on first time it
is created. Before the re-probe it must be set to FALSE to destroy all
existing netlink interfaces and force full reconfiguration.
|
|
|
|
The CBMs are read via unsolicted events for which we register
an event handler.
We don't enable unsolicted events explicitly as this already happens
via the `+CNMI=*,*,2,*,*` whens setting up unsolicted events in
`modem_messaging_enable_unsolicited_events` (ETSI TS 127 005).
|
|
This adds support for the Cell Broadcast interface allowing to
receive, list, read and delete Cell Broadcast messages via the
org.freedesktop.ModemManager1.Modem.CellBroadcast and
org.freedesktop.ModemManager1.Cbm interfaces.
Signed-off-by: Guido Günther <agx@sigxcpu.org>
|
|
|
|
This allows to parse the CBMs parameters like channel, part number and
message text. We parse uncompressed GSM7 and UCS2 encodings as
described in 3GPP TS 23.038.
Signed-off-by: Guido Günther <agx@sigxcpu.org>
|
|
This will allow us to fetch cell broadcast messages.
Signed-off-by: Guido Günther <agx@sigxcpu.org>
|
|
This can be used for cell broadcast messages as well
Signed-off-by: Guido Günther <agx@sigxcpu.org>
|
|
Signed-off-by: Lukas Voegl <lvoegl@tdt.de>
|
|
When setting an operator, AT+COPS overwrites the currently set allowed mode. Equally, the other way around, when setting the current mode, the configured operator is overwritten.
Signed-off-by: Lukas Voegl <lvoegl@tdt.de>
|
|
it's unknown
|
|
network reject indications
==3851== Conditional jump or move depends on uninitialised value(s)
==3851== at 0x23CF65: network_reject_indication_cb (mm-broadband-modem-qmi.c:5434)
==3851== by 0x4D00865: g_cclosure_marshal_VOID__BOXEDv (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.7200.4)
==3851== by 0x4D196FF: g_signal_emit_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.7200.4)
==3851== by 0x4D19862: g_signal_emit (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.7200.4)
==3851== by 0x4F7C250: process_indication (qmi-nas.c:70290)
==3851== by 0x4DFA6C4: __qmi_client_process_indication (qmi-client.c:172)
==3851== by 0x4DFEE2D: process_indication_idle (qmi-device.c:1697)
==3851== by 0x4A26C43: g_main_context_dispatch (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7200.4)
==3851== by 0x4A7C2B7: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7200.4)
==3851== by 0x4A262B2: g_main_loop_run (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7200.4)
==3851== by 0x178042: main (main.c:236)
Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/931
|
|
Referenced commit broke custom init flows because the AT port
was not opened when custom inits were run, which was the case
before the commit landed.
Rework probing flow to follow a step model like much of our
other code, and ensure that the AT port is opened as part
of the custom init flow.
Fixes: 7937a89a37e941e9a77cddcce8226c316fe70821 port-probe: rework and consolidate port probe flow for AT/QCDM/QMI/MBIM
Signed-off-by: Dan Williams <dan@ioncontrol.co>
|
|
FM350 modems report an invalid rssi threshold (always 0) in the signal-state response message.
It results in signal quality not being updated. We can use this patch to workaround this bug.
|
|
0x00007bcb78abf8b4 (libglib-2.0.so.0 -gtestutils.c:3450) ??g_assertion_message
0x00007bcb78abf928 (libglib-2.0.so.0 -gtestutils.c:3476) ??g_assertion_message_expr
0x00005594f143b221 (ModemManager -mm-shared-qmi.c:6651) loc_location_get_predicted_orbits_data_source_indication_cb
0x00007bcb78866043 (libgobject-2.0.so.0 -gmarshal.c:1686) ??g_cclosure_marshal_VOID__BOXEDv
0x00007bcb7886338b (libgobject-2.0.so.0 -gclosure.c:895) _g_closure_invoke_va
0x00007bcb78878a10 (libgobject-2.0.so.0 -gsignal.c:3472) ??g_signal_emit_valist
0x00007bcb78879486 (libgobject-2.0.so.0 -gsignal.c:3622) ??g_signal_emit
0x00007bcb785acc70 (libqmi-glib.so.5 -qmi-loc.c:16976) process_indication
0x00007bcb78520ede (libqmi-glib.so.5 -qmi-device.c:1697) process_indication_idle
0x00007bcb78a9b75c (libglib-2.0.so.0 -gmain.c:3460) ??g_main_dispatch
0x00007bcb78a9b75c (libglib-2.0.so.0 -gmain.c:4200) ??g_main_context_dispatch
0x00007bcb78a9ba81 (libglib-2.0.so.0 -gmain.c:4276) g_main_context_iterate
0x00007bcb78a9bcff (libglib-2.0.so.0 -gmain.c:4479) ??g_main_loop_run
0x00005594f13a7463 (ModemManager -main.c:236) ??main
0x00007bcb7825c705 (libc.so.6 -libc_start_call_main.h:58) ??__libc_start_call_main
0x00007bcb7825c7c1 (libc.so.6 -libc-start.c:360) ??__libc_start_main_impl
0x00005594f13a6da0 (ModemManager + 0x000b5da0) ??_start
|
|
|
|
The NL668-EAU is a 4G, 3G, 2G CAT4 modem from fibocom.
https://www.fibocom.com/en/products/LTECat-NL668-EAU.html
Signed-off-by: Florian Eckert <fe@dev.tdt.de>
|
|
The NL668-EAU 4G, 3G, 2G CAT4 is a modem from fibocom and is using a diffrent
USB_VID for this modem. By adding the new USB_VID, the 'fibocom' plugin is
now responsible and not the 'generic' plugin.
Signed-off-by: Florian Eckert <fe@dev.tdt.de>
|
|
There is no guarantee that during an enabling operation the skeleton
for the Modem interface unconditionally exists, e.g. the modem may
have been flagged as invalid and untracked from DBus during the
operation.
Just remove the assertion, because mm_iface_modem_enable() will
already cleanly fail if the skeleton object is not found.
Thread 0 (crashed),
0 libc.so.6!__pthread_kill_implementation [pthread_kill.c : 44 + 0x0],
1 libc.so.6!raise [raise.c : 26 + 0xb],
2 libc.so.6!abort [abort.c : 79 + 0xa],
3 libglib-2.0.so.0!g_assertion_message [gtestutils.c : 3450 + 0x5],
4 libglib-2.0.so.0!g_assertion_message_expr [gtestutils.c : 3476 + 0x14],
5 ModemManager!enabling_step [mm-broadband-modem.c : 0 + 0x7],
6 libgio-2.0.so.0!g_task_return_now [gtask.c : 1309 + 0x5],
7 libgio-2.0.so.0!g_task_return [gtask.c : 1378 + 0x8],
8 ModemManager!parent_enabling_started_ready [mm-broadband-modem-mbim.c : 3239 + 0xd],
9 libgio-2.0.so.0!g_task_return_now [gtask.c : 1309 + 0x5],
10 libgio-2.0.so.0!complete_in_idle_cb [gtask.c : 1323 + 0x5],
11 libglib-2.0.so.0!g_main_dispatch [gmain.c : 3460 + 0x2],
|
|
The logic should consider that mm_parse_uint_list() may return NULL
without setting the output GError, in the case where an empty string
is given.
This should ideally be changed in the mm_parse_uint_list() itself, but
that approach is not trivial as the method is being used in multiple
different places.
This change exclusively tries to solve this crash.
0x000057435d315eca (ModemManager - mm-shared-quectel.c: 1060) ctzu_test_ready
0x00007eea3d019e86 (libgio-2.0.so.0 - gtask.c: 1309) g_task_return_now
0x00007eea3d018e50 (libgio-2.0.so.0 - gtask.c: 1378) g_task_return
0x000057435d268eab (ModemManager - mm-base-modem-at.c: 544) at_command_ready
0x00007eea3d019e86 (libgio-2.0.so.0 - gtask.c: 1309) g_task_return_now
0x00007eea3d018e50 (libgio-2.0.so.0 - gtask.c: 1378) g_task_return
0x000057435d318a18 (ModemManager - mm-port-serial-at.c: 350) serial_command_ready
0x00007eea3d019e86 (libgio-2.0.so.0 - gtask.c: 1309) g_task_return_now
0x00007eea3d018e50 (libgio-2.0.so.0 - gtask.c: 1378) g_task_return
0x000057435d31c7bd (ModemManager - mm-port-serial.c: 734) port_serial_got_response
0x000057435d31cc3e (ModemManager - mm-port-serial.c: 911) parse_response_buffer
0x000057435d31cc3e (ModemManager - mm-port-serial.c: 1028) common_input_available
0x00007eea3d16591b (libglib-2.0.so.0 - gmain.c: 3460) g_main_dispatch
0x00007eea3d16591b (libglib-2.0.so.0 - gmain.c: 4200) g_main_context_dispatch
0x00007eea3d165c37 (libglib-2.0.so.0 - gmain.c: 4276) g_main_context_iterate
0x00007eea3d165eb5 (libglib-2.0.so.0 - gmain.c: 4479) g_main_loop_run
0x000057435d25f5bf (ModemManager - main.c: 236) main
0x00007eea3c980705 (libc.so.6 - libc_start_call_main.h: 58) __libc_start_call_main
0x00007eea3c9807c1 (libc.so.6 - libc-start.c: 360) __libc_start_main_impl
0x000057435d25ef10 (ModemManager + 0x000b3f10) _start
0x00007ffcc0b5d517
|
|
Signed-off-by: Stig M. Baugstø <1129097-stigma@users.noreply.gitlab.freedesktop.org>
|
|
Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/884
Signed-off-by: Stig M. Baugstø <1129097-stigma@users.noreply.gitlab.freedesktop.org>
|
|
Simple plugin handling Cellient (vid 0x2692) modems. Optional QMI
through the WITH_QMI compile flag. Disables QMI WDS PCO for the
Qualcomm-branded MPL200 by setting the ID_MM_QMI_PCO_DISABLED udev
tag, effectively preventing a modem crash.
Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/842
Signed-off-by: Stig M. Baugstø <1129097-stigma@users.noreply.gitlab.freedesktop.org>
|
|
Some modems like the Qualcomm-based Cellient MPL200 and SimTech
SIM7100E will crash some time after requesting operator reserved PCO.
The new udev tag ID_MM_QMI_PCO_DISABLED disables the PCO settings
request when set, indirectly disabling PCO.
Signed-off-by: Stig M. Baugstø <1129097-stigma@users.noreply.gitlab.freedesktop.org>
|
|
The vid:pid information of a given device is useful information,
especially when analyzing user provided logs.
This change makes the vid:pid information be included at msg level in
the same message that reports the plugin in use. It also removes some
redundant messages.
|
|
Certain QMI-based USB modems will report an "unknown" power state upon
boot, before our first attempt to set one:
$ sudo qmicli --dms-get-operating-mode -d /dev/cdc-wdm0 -p
[/dev/cdc-wdm0] Operating mode retrieved:
Mode: 'unknown'
HW restricted: 'no'
Due to this, the logic trying to recover the previous power state
during an attach settings update would end up asserting:
[modem3] set initial EPS bearer settings state (3/5): recover previous power state
**
ERROR:../src/mm-iface-modem.c:4554:mm_iface_modem_set_power_state:
code should not be reached
Bail out! ERROR:../src/mm-iface-modem.c:4554:mm_iface_modem_set_power_state:
code should not be reached
Aborted
This is a rare case, and instead of handling it in the QMI specific
implementation, we can try to fix it in a safer way directly in the
logic that handles the attach settings update. If we ever detect that
the reported power state is "unknown", we will default it to "on"
while emitting a warning.
|
|
If the DeviceContext is cancelled, we remove it from the list of
tracked DeviceContexts in the MMPluginManager, so that new port
additions happening at the same time don't end up being added to
it.
This should allow an early cancellation of the DeviceContext without
asserting on g_assert (!device_context->extra_probing_time_id) as
there is no chance that a new port addition has reseted the extra
probing time timeout.
0x00007c1154f16abf (libc.so.6 - pthread_kill.c: 44) __pthread_kill_implementation
0x00007c1154ecbf0c (libc.so.6 - raise.c: 26) raise
0x00007c1154eb74aa (libc.so.6 - abort.c: 79) abort
0x00007c11556c08a9 (libglib-2.0.so.0 - gtestutils.c: 3450) g_assertion_message
0x00007c11556c091d (libglib-2.0.so.0 - gtestutils.c: 3476) g_assertion_message_expr
0x00005897d1ed6e7b (ModemManager - mm-plugin-manager.c: 805) device_context_unref
0x00005897d1ed6ab9 (ModemManager - mm-plugin-manager.c: 163) common_async_context_free
0x00005897d1ed5dd6 (ModemManager - mm-plugin-manager.c: 1136) port_context_run_ready
0x00007c1155550e86 (libgio-2.0.so.0 - gtask.c: 1309) g_task_return_now
0x00007c115554fe50 (libgio-2.0.so.0 - gtask.c: 1378) g_task_return
0x00007c115555047b (libgio-2.0.so.0 - gtask.c: 2022) g_task_return_new_error
0x00005897d1ed581a (ModemManager - mm-plugin-manager.c: 296) port_context_complete
0x00005897d1ed6259 (ModemManager - mm-plugin-manager.c) plugin_supports_port_ready
0x00007c1155550e86 (libgio-2.0.so.0 - gtask.c: 1309) g_task_return_now
0x00007c1155550eb9 (libgio-2.0.so.0 - gtask.c: 1323) complete_in_idle_cb
0x00007c115569c91b (libglib-2.0.so.0 - gmain.c: 3460) g_main_dispatch
0x00007c115569c91b (libglib-2.0.so.0 - gmain.c: 4200) g_main_context_dispatch
0x00007c115569cc37 (libglib-2.0.so.0 - gmain.c: 4276) g_main_context_iterate
0x00007c115569ceb5 (libglib-2.0.so.0 - gmain.c: 4479) g_main_loop_run
0x00005897d1e715bf (ModemManager - main.c: 236) main
0x00007c1154eb7705 (libc.so.6 - libc_start_call_main.h: 58) __libc_start_call_main
0x00007c1154eb77c1 (libc.so.6 - libc-start.c: 360) __libc_start_main_impl
0x00005897d1e70f10 (ModemManager + 0x000b3f10) _start
0x00007ffd5acc5057
Manually reproducing this issue was challenging, so adding here the
steps taken, for reference. This is with ModemManager running with
--no-udev (i.e. port additions reported via mmcli). The key to
reproduce the problem is the different timing between the port
additions and removals of the three ttyACM ports.
COUNT=1
while ((COUNT < 10000)); do
echo "$COUNT..."
COUNT=$((COUNT + 1))
(
sudo mmcli --report-kernel-event="name=ttyACM0,subsystem=tty,action=add"
TIMEOUT="0.0$(((RANDOM % 10) + 1))"
sleep $TIMEOUT
sudo mmcli --report-kernel-event="name=ttyACM0,subsystem=tty,action=remove"
) &
(
sudo mmcli --report-kernel-event="name=ttyACM1,subsystem=tty,action=add"
TIMEOUT="0.0$(((RANDOM % 10) + 1))"
sleep $TIMEOUT
sudo mmcli --report-kernel-event="name=ttyACM1,subsystem=tty,action=remove"
) &
(
sudo mmcli --report-kernel-event="name=ttyACM2,subsystem=tty,action=add"
TIMEOUT="0.0$(((RANDOM % 10) + 1))"
sleep $TIMEOUT
sudo mmcli --report-kernel-event="name=ttyACM2,subsystem=tty,action=remove"
) &
TIMEOUT="0.0$(((RANDOM % 10) + 1))"
sleep $TIMEOUT
COUNT=$((COUNT + 1))
done
|
|
(ModemManager:2925): GLib-CRITICAL **: 09:21:32.082: g_propagate_error: assertion 'src != NULL' failed
(ModemManager:2925): GLib-GIO-CRITICAL **: 09:21:32.083: g_task_return_error: assertion 'error != NULL' failed`
Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/916
|
|
Fixes a16ad2757dc5c9b94aeb0e4276a4eb3d0007a729
|
|
API support has been added to set default storage for SMS.
Changes were made to get, set the deafult storage value.
|
|
These are already synchronized at interface level, so there is already
a guarantee that they won't happen at the same time.
|
|
The power up and down operations are already synchronized at
interface level, so there is already a guarantee that they won't
happen at the same time.
For the reset and power off operations, it is assumed that the modem
will either reset or power off, so there should be no need to sync
those operations with others, as the modem object will eventually go
away altogether in both cases.
|
|
E.g. if aborting the initialization sequence.
|
|
If we are going to inhibit the modem or fully reprobe it after a SIM
switch event, we should forbid further operations done with the modem
object.
This logic can be tested by queing different operations one after the
other, and then adding a last device inhibition ("override" operation)
that should trigger the early abort of all non-running operations,
e.g.:
mmcli -m a -e &
sleep 0.2
mmcli -m a --3gpp-set-initial-eps-bearer-settings="apn=internet,ip-type=ipv4v6,force=true" &
sleep 0.2
mmcli -m a -d &
sleep 0.2
mmcli -m a -e &
sleep 0.2
mmcli -m a --set-power-state-low &
sleep 0.2
mmcli -m a -e &
sleep 0.2
mmcli -m a --inhibit
This previous sequence produces MM logs as follows:
<dbg> [1726567756.430308] [modem0] [operation 22] default - enable: scheduled
<dbg> [1726567756.430806] [modem0] [operation 22] default - enable: lock acquired
<dbg> [1726567756.623746] [modem0] [operation 23] default - set-initial-eps-bearer-settings: scheduled
<dbg> [1726567756.751743] [modem0] [operation 22] default - enable: lock released
<dbg> [1726567756.752027] [modem0] [operation 23] default - set-initial-eps-bearer-settings: lock acquired
<dbg> [1726567756.823739] [modem0] [operation 24] default - disable: scheduled
<dbg> [1726567757.049581] [modem0] [operation 25] default - enable: scheduled
<dbg> [1726567757.250165] [modem0] [operation 26] default - set-power-state: scheduled
<dbg> [1726567757.450518] [modem0] [operation 27] default - enable: scheduled
<dbg> [1726567757.676362] [modem0] [operation 28] override - disabling: override requested - no new operations will be allowed
<dbg> [1726567757.678792] [modem0] [operation 24] default - disable: aborted early
<dbg> [1726567757.679866] [modem0] [operation 25] default - enable: aborted early
<dbg> [1726567757.680157] [modem0] [operation 26] default - set-power-state: aborted early
<dbg> [1726567757.680496] [modem0] [operation 27] default - enable: aborted early
<dbg> [1726567759.695780] [modem0] [operation 23] default - set-initial-eps-bearer-settings: lock released
<dbg> [1726567759.695935] [modem0] [operation 28] override - disabling: lock acquired
<dbg> [1726567759.872196] [modem0] [operation 28] override - disabling: lock released
|
|
If a request to lock the operation with the override type arrives, all
pending operations will be immediately cancelled, and no new lock
requests will be allowed.
|