aboutsummaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2023-05-24broadband-modem-mbim: common process for packet service messagesAleksander Morgado
Both the packet service indications and the packet service set response messages will be processed in the same way. This ensures that the packet service state reported during the set response, along with the additional info provided in that message (e.g. speeds) are taken into account. This change also avoids fully relying on the packet service indications sent by the modem, as the indication may not be sent after a successful update operation (given that the operation response already contains the last valid state).
2023-05-22mm-modem-helpers-ublox: added support for ublox LARA-R6001 / LARA-R6001D modulesKristian Sloth Lauszus
2023-05-18charsets: fix read of uninitialized memory in gsm unpacked conversionAleksander Morgado
==1==WARNING: MemorySanitizer: use-of-uninitialized-value #0 0x59c6c88a31ef in gsm_ext_char_to_utf8 src/mm-charsets.c:256:13 #1 0x59c6c88a31ef in charset_gsm_unpacked_to_utf8 src/mm-charsets.c:339:20 #2 0x59c6c88a31ef in mm_modem_charset_bytearray_to_utf8 src/mm-charsets.c:857:30 #3 0x59c6c889babd in sms_decode_address src/mm-sms-part-3gpp.c:143:16 #4 0x59c6c8899d3a in mm_sms_part_3gpp_new_from_binary_pdu src/mm-sms-part-3gpp.c:514:15
2023-05-17broadband-modem: plug leak processing SIM loading stepsAleksander Morgado
==6971== 52 (16 direct, 36 indirect) bytes in 1 blocks are definitely lost in loss record 3,764 of 6,140 ==6971== at 0x4842839: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==6971== by 0x4A1ADE8: g_malloc (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6800.1) ==6971== by 0x4A31FF1: g_slice_alloc (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6800.1) ==6971== by 0x4A3266D: g_slice_alloc0 (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6800.1) ==6971== by 0x49FD397: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6800.1) ==6971== by 0x49FD8B4: g_error_new_valist (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6800.1) ==6971== by 0x49FDACE: g_set_error (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.6800.1) ==6971== by 0x187A4C: mm_base_modem_peek_best_at_port (mm-base-modem.c:1129) ==6971== by 0x184116: _at_command (mm-base-modem-at.c:634) ==6971== by 0x1841FE: mm_base_modem_at_command (mm-base-modem-at.c:660) ==6971== by 0x18F6F1: load_sim_identifier (mm-base-sim.c:2016) ==6971== by 0x18CA03: mm_base_sim_load_sim_identifier (mm-base-sim.c:820)
2023-05-17modem-helpers-mbim: allow optional outputs in mm_signal_from_mbim_signal_state()Nagi Marupaka
Fixes 470dff235c70683928ab0eb39c64151a8a4ceb7c
2023-05-12broadband-modem-mbim: account for race condition in quick hot swap caseNagi Marupaka
On MBIM modems, when the SIM is ejected and re-inserted in a quick manner, the state machine logic encounters a race condition and eventually, the modem response for subscriber status is ignored. This change accounts for that state transition without erroring out. Fixes #672.
2023-05-12mm-broadband-modem-mbim: fix log prints in certain notificationsNagi Marupaka
2023-05-11mm-iface-modem: increase the SIM retries to 7Nagi Marupaka
In some cases modem is taking 7 tries to detect an initialized SIM.
2023-05-11broadband-modem-mbim: use MBIMEx v2 signal loading explicitly if supportedAleksander Morgado
2023-05-11iface-modem-signal: launch explicit signal query after setting up thresholdsAleksander Morgado
2023-05-11broadband-modem-mbim: non-zero interval when enabling thresholdsAleksander Morgado
Fix bug in Fibocom FM350 modem where a non-zero signal strength interval needs to be configured as part of threshold setup. Fixes #733
2023-05-11sierra: port type hints for RC7611Aleksander Morgado
2023-05-10Revert "iface-modem-signal: send a query after threshold set up"Aleksander Morgado
This reverts commit 17ed63637fea7ab7238880ec5eb75df910355dd2. We were reusing the signal_state_query_ready() callback in the wrong way.
2023-05-10iface-modem-signal: send a query after threshold set upNagi Marupaka
After the setup of threshold for signal state notifications, trigger a query of the current signal state values.
2023-05-10broadband-modem-qmi: enable/disable messaging AT unsolicited events tooSebastian Krzyszkowiak
When the host is resuming from system suspend, QMI indications sent by the modem at resume time can be lost. The exact reason why it happens is still unknown. Until this is fixed, ModemManager currently workarounds that in QMI mode by listening and reacting to AT URCs too, which are being received reliably. In order to achieve that, messaging_setup_unsolicited_events chains the parent's implementation with its own, effectively setting up handlers for both AT and QMI channels. This worked fine on modems such as EG25 which enable SMS indications by default. However, some modems, such as BM818, don't have these indications enabled on boot and don't report incoming messages via AT unless requested via AT+CNMI. To make SMS handling on resume reliable on such modems, make sure that MMBroadbandModemQmi also enables/disables unsolicited events in the same way it already sets up handlers for them. Signed-off-by: Sebastian Krzyszkowiak <dos@dosowisko.net>
2023-05-03shared-qmi: don't assume cancellation signal handler is setup in the ↵Aleksander Morgado
registration wait The cancellation_id will not be set if the cancellable is already cancelled by the time g_cancellable_connect() is called.
2023-05-03shared-qmi: ensure cancellation is setup last in the registration waitAleksander Morgado
register_in_network_cancelled() may be called early if the given cancellable is already cancelled, and if so, we want it to remove the timeout and signal handler, which should have been configured before setting up the cancellation signal handler.
2023-05-03broadband-modem-mbim: group together all runtime state while enabled in its ↵Aleksander Morgado
own struct
2023-05-03bearer-list: rename variables in the foreach contextsAleksander Morgado
So that the variable names in each context identify the action being performed, to easier reading.
2023-05-03broadband-modem-mbim: ignore registration set error if NwError=0 reportedAleksander Morgado
Returning an error in the registration set request completely breaks the async operation requesting the explicit registration, even if the modem may have already been registered via indications while waiting for the set request to be completed. We now ignore the registration set error if it returns a generic failure with NwError=0, as in certain Qualcomm based devices. We ignore unconditionally, without explicitly checking if we're registered or not, because the upper logic will anyway do that. Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/723
2023-05-03broadband-modem-mbim: ensure cached state info is reseted on disableAleksander Morgado
So that it is reloaded fresh once re-enabled, otherwise we may be using stale state values that are not in sync with the state reported in the interface skeletons.
2023-05-03iface-modem-3gpp: skip interface updates if it's disabledAleksander Morgado
E.g. we don't want to update the 3GPP registration state to "idle" if the interface has already been disabled: <msg> [1681814812.903723] [modem0] 3GPP registration state changed (idle -> unknown) <inf> [1681814812.903842] [modem0] consolidated registration state: cs 'idle', ps 'idle', eps 'idle', 5gs 'unknown' --> 'unknown' <dbg> [1681814812.906194] [modem0] disabling the Modem interface... <inf> [1681814812.911148] [modem0] disabled modem <dbg> [1681814812.913453] [ttyACM0/at] device open count is 0 (close) <dbg> [1681814812.913629] [ttyACM0/at] closing serial port... <dbg> [1681814812.915559] [ttyACM0/at] serial port closed <msg> [1681814812.916569] [modem0] state changed (disabling -> disabled) <dbg> [1681814868.945069] [/dev/cdc-wdm4] number of consecutive timeouts: 1 <msg> [1681814868.950724] [modem0] 3GPP registration state changed (unknown -> idle) <inf> [1681814868.950885] [modem0] consolidated registration state: cs 'idle', ps 'idle', eps 'idle', 5gs 'unknown' --> 'idle' <msg> [1681814868.951797] [modem0] state changed (disabled -> enabled) <dbg> [1681814868.955740] [modem0] registration in network: cancelled <wrn> [1681814868.958562] [modem0] registration in network failed: Operation was cancelled
2023-05-03iface-modem-3gpp: coding style updates in initialization sequenceAleksander Morgado
2023-05-03iface-modem-3gpp: coding style changes in initial EPS bearer update logicAleksander Morgado
2023-05-03iface-modem-simple: improve logging and cancellability in network ↵Aleksander Morgado
registration sequence
2023-05-03iface-modem-3gpp: coding style updates in enabling/disabling sequencesAleksander Morgado
2023-05-03broadband-modem: explicitly abort ongoing attempt when disablingAleksander Morgado
2023-05-03bearer-list: new common method to disconnect one or all bearersAleksander Morgado
2023-05-03iface-modem-3gpp: allow cancelling the wait for packet service stateAleksander Morgado
When a request to disable the modem arrives while the packet service state wait is ongoing we were not correctly cancelling the operation. The main reason for this is that this operation does not change the modem state, and so the "wait for final state" logic in the disabling sequence was not being considered. We solve this by plugging in the Simple.Connect() operation cancellable in the wait for packet service state operation. The connection attempt will be cancelled during the disabling sequence as well, and when that happens we will explicitly halt the packet service state wait as well.
2023-05-03iface-modem-3gpp: minor rename of variablesAleksander Morgado
2023-05-03broadband-modem-qmi: use DSD system status to report packet service stateAleksander Morgado
We now support modem-reported packet service state, instead of guessing it in the 3GPP interface logic. The DSD system status reporting a valid access technology is an indication that the packet service is ready. Instead of holding back the registration status until the DSD system status reports a valid value, we will now report the modem as registered, and bind the DSD system status exclusively to the packet service status. In the simple connection attempt we're already waiting first for being registered, and then for being attached in PS.
2023-05-03broadband-modem-mbim: minor refactor in speeds reportingAleksander Morgado
2023-05-03broadband-modem-mbim: report packet service state updatesAleksander Morgado
Use the Packet Service messages to report the state of PS domain, instead of guessing.
2023-05-03iface-modem-3gpp: don't guess packet service state if modem can report itAleksander Morgado
In certain protocols like QMI or MBIM we may be able to report an exact packet service state, so there is no need to guess it, as the guess may not always be right. The logic will track automatically whether modem-reported packet service states are available, and use them if so. Otherwise, it'll try to guess as we were doing before (e.g. if registered in EPS, packet service is considered attached).
2023-04-27libmm-glib: separate files for flags and enums typesAleksander Morgado
This allows us to skip needing to include the non-existent build_string_from_mask() or get_string() counterparts in the documentation index.
2023-04-27build-aux,mkenums: import custom mkenums tool from libqmi/libmbimAleksander Morgado
We're going to use certain new features included in the custom tool.
2023-04-19iface-modem-3gpp: don't compare profile-name on attach APNsAndrew Lassalle
When a request to set a new eps bearer settings is received, ignore the profile-name when comparing the previous configuration with the new one, since the modem's profile might already have a name that won't match the settings provided by the user. Profile names are used in QMI modems. If the profile name does not match the existing one, the modem will detach and reattach to the network.
2023-04-19helpers-mbim: fix MMSignal selection based on data classAleksander Morgado
MbimDataClass is a flags bitmask, not an enumeration. This logic was broken if the reported data class was e.g. 4G+5GNSA.
2023-04-14daemon: update copyrightAleksander Morgado
2023-04-13udev: new ID_MM_REQUIRED tagAleksander Morgado
Users with QMI or MBIM capable modems may want to ensure that these are never managed using plain AT commands, as that also involves using PPP. This fallback to AT could happen if the QMI or MBIM port probing fails for whatever reason. The new `ID_MM_REQUIRED` udev tag allows specifying that a given port MUST be successfully grabbed when creating a new modem object, or otherwise the modem object will not be created at all (even if there are other fallback control ports like AT that could have been used). Use this tag with caution. It is assumed that when this tag is used some other external process may be monitoring the existence of the modem object in DBus as exposed by ModemManager, and if it does not appear for any reason then the modem would be reseted with some other mechanism (e.g. GPIOs, if available). If no such mechanism to autorecover the modem is in place, using this tag may leave the modem exposed in the kernel but ignored by ModemManager. This tag must be applied on the specific port for which the existence and usability must be ensured. E.g. flagging the MBIM port of the Fibocom L850 module as required: $ vim /lib/udev/rules.d/78-mm-test.rules ACTION!="add|change|move|bind", GOTO="mm_test_rules_end" SUBSYSTEMS=="usb", ATTRS{bInterfaceNumber}=="?*", ENV{.MM_USBIFNUM}="$attr{bInterfaceNumber}" ATTRS{idVendor}=="2cb7", ATTRS{idProduct}=="0007", ENV{.MM_USBIFNUM}=="00", ENV{ID_MM_REQUIRED}="1" LABEL="mm_test_rules_end" $ sudo udevadm control --reload $ sudo udevadm trigger $ sudo udevadm info -p /sys/class/usbmisc/cdc-wdm0 ... E: ID_MM_REQUIRED=1 E: ID_MM_CANDIDATE=1
2023-04-13plugin: refactor how list of probe flags is builtAleksander Morgado
To make it clearer that the initial list of flags must be the one based on which ones are expected in the subsystem and which one the plugin is requesting.
2023-04-13port-probe: perform auto detection of port type hints for wwanAleksander Morgado
We can remove the port type hint udev tags for the wwan subsystem, as that logic is now incorporated in the port type hint processing logic in the daemon itself. This makes it clearer to know what exact hints are being used, as the logic is in a single place and it has proper logging of all possible cases.
2023-04-13port-probe: perform auto detection of port type hints for cdc_wdmAleksander Morgado
Do not do this in the plugin; instead, do it along with the logic that looks for port type hints in udev, so that we can properly warn if things don't match.
2023-04-13port-probe: improve logging of detected port type hints in udev tagsAleksander Morgado
Explicitly log when a tag is found, and also warn if too many por type hints are provided in the same port.
2023-04-13port-probe: simplify AT port type hints handlingAleksander Morgado
When processing the hints for port probing we don't care if the AT port is flagged as primary or secondary.
2023-04-13sierra: add port hints for HL7812Marcus Folkesson
Signed-off-by: Marcus Folkesson <marcus.folkesson@gmail.com>
2023-04-12port-serial: close_force() may dispose the last object referenceAleksander Morgado
2023-04-11base-modem-at: use better names for pairs of dependent cancellablesLubomir Rintel
We cancel AT commands (or sequences) on cancellation of the modem's cancellable as well as of the optional user-provided one. However, the GTask can be associated with only one. That's okay if the user didn't supply one -- we just use the modem's cancellable only. Otherwise we chain the cancellables together (also cancel the user one with the modem one) at cost of some extra complexity. This aims to make the above a little clearer by using hopefully better names. Suggested-by: Aleksander Morgado <aleksandermj@chromium.org>
2023-04-11base-modem-at: make abort_task_if_port_unusable() unref the GTaskLubomir Rintel
Aleksander seems to prefer it this way. Looks better. Suggested-by: Aleksander Morgado <aleksandermj@chromium.org>
2023-04-11base-modem: remove mm_base_modem_get_cancellable()Lubomir Rintel
No users left for the getter that takes a reference after a port of MMBaseModemAT to GTask. peek_cancellable() is used instead, because the GTask constructor takes a reference itself.