aboutsummaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2022-05-25base-sim: don't reload properties that may have been already initializedAleksander Morgado
If we created the SIM objects during the SIM slots processing, we should not attempt to reload the settings that were already set during the re-initialization, as that may end up clearing the initial properties.
2022-05-25base-sim: remove bogus comments in initializationAleksander Morgado
All properties loaded during initialization are meant to be loaded only once, no point in saying that for each property.
2022-05-25broadband-modem-mbim: assume no lock is required in eSIM without profilesAleksander Morgado
2022-05-24bearer-mbim: plug user cancellable to all MBIM operationsAleksander Morgado
2022-05-24bearer-mbim: if connection attempt fails, trigger an explicit disconnectionAleksander Morgado
E.g. if the error reported by the MbimDevice is a timeout error, it means the connection attempt is still ongoing in the device, we need to ask it to stop.
2022-05-24bearer-mbim: use common helper to build disconnection messageAleksander Morgado
2022-05-24filter: add vendor id/subsystem vendor id filterDaniele Palmas
Some PCI modems prefer customizing the subsytem vendor ID, instead of the vendor ID. Add a filter for the couple vendor/subsystem vendor IDs.
2022-05-24base-modem: add subsystem vendor ID propertyDaniele Palmas
Subsystem vendor ID can be used for identifying PCI modems, so expose the property.
2022-05-24kernel-device, generic: add subsystem vendor ID supportDaniele Palmas
Add subsystem vendor ID support, that can be used in pci devices instead of vendor ID customization.
2022-05-20base-modem: if ABORTED during initialization, modem not exportedAleksander Morgado
Commit b497de325 introduced a change by which some common errors (e.g. SIM missing) would be reported as MM_CORE_ERROR_ABORTED. This had the undesired effect of making the MMBaseModem object not flag as valid the modem, because the returned error wasn't MM_CORE_ERROR_WRONG_STATE. We now change this logic so that only ABORTED makes the modem object not flagged as valid, and we'll do that only if the Modem interface isn't exposed in DBus. Fixes b497de325
2022-05-20mm-bearer-mbim: fix connect_set_ready always parse result for needing to ↵Jack Song
check NwError on failure Issue and bugfix suggestion by Aleksander Morgado. Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/549
2022-05-20broadband-modem-mbim: ignore SIM swap events during a slot switch actionAleksander Morgado
When we explicitly request to perform a SIM slot switch operation, we should ignore the 'slot info status' and 'subscriber ready status' indications that report an active SIM slot change, or otherwise they'll end up interfering with the correct reporting of the slot switch operation. We could have attempted to complete the slot switch operation early using the indications, but that solution would have forced us to assume that theinfo in the indications is the one we had requested, which is not easy because the 'slot info status' indication is reported once for each slot, so a single SIM slot switch operation triggers multiple 'slot info status' indications, as well as additional 'subscriber ready status' indications reporting the same. Fixes suggested by Pavan Holla <pholla@chromium.org> and tested by Jinjian Song <Jinjian.Song@fibocom.com>. Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/550
2022-05-20iface-modem: common SIM event reporting logicAleksander Morgado
We no longer have separate mm_base_modem_process_sim_event() and mm_broadband_modem_sim_hot_swap_detected() methods. The only difference between both of them was that one of them would attempt to cleanup the ports context associated to the SIM hot swap event logic as soon as a swap was detected, in order to avoid queueing up multiple such events. The previous logic wasn't working well, though, as there could be mixed AT+QMI or AT+MBIM devices that would also require that same cleanup and so we didn't always know which one should have been called. Now we have a single mm_iface_modem_process_sim_event() method, which will trigger the reprobe and disabling, but which will also perform the cleanup of the SIM ports swap setup as specified by the implementation. So, if a plugin explicitly initializes the serial ports context for SIM hot swap handling, it should also explicitly clean it up. Also, the initialization of the serial ports context for SIM hot swap handling is no longer done automatically for all modems, it will be done only for those modems using it; i.e. the modems that explicitly report support SIM hot swap handling using AT URCs.
2022-05-20iface-modem: remove MM_IFACE_MODEM_SIM_HOT_SWAP_CONFIGURED propertyAleksander Morgado
This property is used in the MMIfaceModem to flag whether the SIM hot swap setup has been performed or not. The flag is now moved to the iface-specific private context. The property was also used in AT-based modems, so that implementations supporting the SIM hot swap via AT URCs could flag the upper layers whether the enabling of the feature was done correctly or not, and if so, create and keep the AT ports context open. But this feature only made sense in AT-based modems, i.e. an MBIM modem that detects SIM hot swaps via MBIM indications exclusively should not require the AT ports context open for anything. The check in the MMBroadbandModem object has therefore been removed, and the logic will be updated so that it only applies to AT-based modems.
2022-05-20iface-modem: initialization restart support moved to iface-specific private ↵Aleksander Morgado
context
2022-05-20iface-modem: rework signal check logic to use the iface-specific private contextAleksander Morgado
The signal and access tech loading operation was using a context that contained both overall state and state specific to the current attempt. The overall modem state is now moved to the iface-specific private context, and the state specific to the operation is kept in a GTask that is bound to the ongoing loading operation.
2022-05-20iface-modem: move recent signal quality handling to iface-specific private ↵Aleksander Morgado
context
2022-05-20iface-modem: move state update context to iface-specific private contextAleksander Morgado
Avoid keeping separate per-operation contexts, it doesn't make sense. Just have one single Private context for the whole interface where we can add support for all operations performed by the interface.
2022-05-20broadband-modem-mbim: don't disable subscriber info if used by SIM hotswapAleksander Morgado
The SIM hot swap operation relies on multiple different types of indications, but the most important one is the subscriber info indication. We should make sure that indication is kept enabled for as long as the SIM hot swap detection should be active. We also skip using the MM_IFACE_MODEM_SIM_HOT_SWAP_CONFIGURED property, which should be removed or made MMBroadbandModem-specific, as it is only really used in the AT-based SIM hot swap detection logic.
2022-05-20broadband-modem-mbim: reset enable flags if enabling them failedAleksander Morgado
This is not extremely important, because we don't really flag as disabled those indications that failed to be enabled (as usually we attempt to enable them in a group, not one by one), but in this case this will allow us to keep a clean state after a failed SIM hot swap setup.
2022-05-19broadband-modem-mbim: plug memleak when MBIMEx v2 not supportedAleksander Morgado
==11025== 40 bytes in 1 blocks are definitely lost in loss record 3,313 of 5,483 ==11025== at 0x483E7C5: malloc (vg_replace_malloc.c:380) ==11025== by 0x4A32CA9: g_malloc (in /usr/lib/libglib-2.0.so.0.7000.2) ==11025== by 0x4A4A082: g_slice_alloc (in /usr/lib/libglib-2.0.so.0.7000.2) ==11025== by 0x49F8574: g_array_sized_new (in /usr/lib/libglib-2.0.so.0.7000.2) ==11025== by 0x24DEB1: load_supported_modes_mbim (mm-broadband-modem-mbim.c:958) ==11025== by 0x24E2D5: modem_load_supported_modes (mm-broadband-modem-mbim.c:1042) ==11025== by 0x1D4DC5: interface_initialization_step (mm-iface-modem.c:5718) ==11025== by 0x1D26D6: load_device_identifier_ready (mm-iface-modem.c:4903) ==11025== by 0x4BACB83: ??? (in /usr/lib/libgio-2.0.so.0.7000.2) ==11025== by 0x4BACBB8: ??? (in /usr/lib/libgio-2.0.so.0.7000.2) ==11025== by 0x4A2A434: g_main_context_dispatch (in /usr/lib/libglib-2.0.so.0.7000.2) ==11025== by 0x4A7E7B8: ??? (in /usr/lib/libglib-2.0.so.0.7000.2)
2022-05-18mm-broadband-modem-qmi: Update access technology based on "NAS system info" ↵Prakash Pabba
or "NAS serving system" For NR5G NSA, both LTE and NR5G should be set in access technology. Use NAS "system info" or "serving system", instead of NAS "signal info" or "signal strength", for deciding access technology based on current registration state.
2022-05-13broadband-modem-mbim: fix additional double GError freeAleksander Morgado
We're returning the GError as GTask result, we should not explicitly free it ourselves. Same as the previous fix, should solve the crash sometimes seen in https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/550
2022-05-13broadband-modem-mbim: fix double GError freeAleksander Morgado
We're returning the GError as GTask result, we should not explicitly free it ourselves. Fixes the crash sometimes seen in https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/550 ==15994== Invalid free() / delete / delete[] / realloc() ==15994== at 0x484B27F: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==15994== by 0x4F9A8A0: g_error_free (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7102.0) ==15994== by 0x2251CC: ??? (in /usr/sbin/ModemManager) ==15994== by 0x4DD2B48: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.7102.0) ==15994== by 0x4DD2D4A: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.7102.0) ==15994== by 0x4CA9049: ??? (in /usr/lib/x86_64-linux-gnu/libmbim-glib.so.4.6.0) ==15994== by 0x4CB0367: ??? (in /usr/lib/x86_64-linux-gnu/libmbim-glib.so.4.6.0) ==15994== by 0x4FAF287: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7102.0) ==15994== by 0x4FAEC03: g_main_context_dispatch (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7102.0) ==15994== by 0x5003497: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7102.0) ==15994== by 0x4FAE282: g_main_loop_run (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7102.0) ==15994== by 0x16916F: main (in /usr/sbin/ModemManager) ==15994== Address 0x80db490 is 0 bytes inside a block of size 16 free'd ==15994== at 0x484B27F: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==15994== by 0x4F9A8A0: g_error_free (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7102.0) ==15994== by 0x1984FA: ??? (in /usr/sbin/ModemManager) ==15994== by 0x4DD2B48: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.7102.0) ==15994== by 0x4DD2D4A: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.7102.0) ==15994== by 0x2251A6: ??? (in /usr/sbin/ModemManager) ==15994== by 0x4DD2B48: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.7102.0) ==15994== by 0x4DD2D4A: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.7102.0) ==15994== by 0x4CA9049: ??? (in /usr/lib/x86_64-linux-gnu/libmbim-glib.so.4.6.0) ==15994== by 0x4CB0367: ??? (in /usr/lib/x86_64-linux-gnu/libmbim-glib.so.4.6.0) ==15994== by 0x4FAF287: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7102.0) ==15994== by 0x4FAEC03: g_main_context_dispatch (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7102.0) ==15994== Block was alloc'd at ==15994== at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==15994== by 0x4FB76F8: g_malloc (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7102.0) ==15994== by 0x4FCF1A4: g_slice_alloc (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7102.0) ==15994== by 0x4FCF80D: g_slice_alloc0 (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7102.0) ==15994== by 0x4F9A3A6: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7102.0) ==15994== by 0x4F9A5A3: g_error_copy (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7102.0) ==15994== by 0x4CA903E: ??? (in /usr/lib/x86_64-linux-gnu/libmbim-glib.so.4.6.0) ==15994== by 0x4CB0367: ??? (in /usr/lib/x86_64-linux-gnu/libmbim-glib.so.4.6.0) ==15994== by 0x4FAF287: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7102.0) ==15994== by 0x4FAEC03: g_main_context_dispatch (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7102.0) ==15994== by 0x5003497: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7102.0) ==15994== by 0x4FAE282: g_main_loop_run (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.7102.0)
2022-05-11broadband-modem-mbim: fix task completion when peeking device failsAleksander Morgado
We cannot call peek_device() when we have already created a GTask for the async operation, because if the operation failed we would be completing the async operation with a totally different GTask than the one we had created ourselves, triggering memory leaks and leaving modem references around that should not exist (as the GTask we create holds a modem reference). Issue found in the context of debugging this, may actually be fully related: https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/550
2022-05-11broadband-modem-mbim: minor coding style changesAleksander Morgado
2022-05-03mm-iface-modem: mark signal strength as recent on initDylan Van Assche
When initializing the Modem interface, we set the signal strength to the default value (0%) and we are certain this is the recent value until the modem reports the actual signal strength if available. Therefore, mark the signal strength as recent instead of cached.
2022-04-29mm-iface-modem: set signal quality to 0% on shutdownDylan Van Assche
If a modem is disabled, the signal quality is still set to the cached value, even though the modem is not connected to any network anymore. Set the signal quality to 0% when the interface is removed from DBus. Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/558
2022-04-27bearer-qmi: fix QmiWdRequestedSettings->QmiWdsRequestedSettings typoAleksander Morgado
2022-04-27bearer-qmi: use the new QmiWdRequestedSettings enum typeAleksander Morgado
And bump libqmi to 1.31.5, which is the version introducing the rename.
2022-04-22iface-modem-3gpp-profile-manager: fix copy-paste error on tags for quarksMaxim Anisimov
Ussd module initialization does not work correctly because the tags match. Signed-off-by: Maxim Anisimov <maxim.anisimov.ua@gmail.com>
2022-04-20mm-log: hiding personal info while loggingsom
During mm logging, some of the information like simIccId, Telephone numbers need to be hidden from displaying in the logs to protect some of the user information. Implemented for MBIM requiring libmbim 1.27.6, which is the development version that includes the needed API.
2022-04-08sms: prevent crash if date is out of rangeCarlo Lobrano
g_date_time_new, and g_date_time_new_utc return NULL if inputs are out of range, and currently mm_new_iso8601_time passes the GDateTime created by those two functions to date_time_format_iso8601 without checking for NULL values, causing a g_date_time_format_iso8601 crash if PDU data is corrupted with wrong date. To prevent this, mm_new_iso8601_time now can return NULL and set a new GError if GDateTime created by g_date_time_new is NULL. Fixes #546
2022-04-07modem-mbim: update default error when network error is out of rangesom
When the modem sends an error which is outside the range defined in MBIM_NW_ERROR list then MM should use a default error(MBIM_NW_ERROR_NONE) instead of crash.
2022-04-05base-bearer: integrate connection status dispatcher scriptsAleksander Morgado
2022-04-05dispatcher-connection: new dispatcher for connection status scriptsAleksander Morgado
The user or the packages can install custom dispatcher scripts that will be run by the ModemManaer daemon itself upon bearer connection status updates. Scripts installed by users should go into the /etc/ModemManager/connection.d directory. Scripts installed by packages should go into the /usr/lib/ModemManager/connection.d directory. The name of the script will specify the order how it's run, so it's suggested to name them with a numeric prefix, e.g. "99-something".
2022-04-05dispatcher-fcc-unlock: inherit from the base dispatcher objectAleksander Morgado
2022-04-05dispatcher: new generic object to handle script dispatchersAleksander Morgado
Based on the FCC unlock specific one, but without any FCC unlock specific constraint.
2022-04-05profile-manager: profile-id and apn-type check not required for user settingssom
When the user provides the profile parameter, as per the MM documentation profile-id is an optional parameter. So with the fix the profile-id check in input is removed. apn-type is also optional when the user provides the settings. This check is also removed as part of the fix.
2022-04-04port-serial: ensure the port object is valid after BUFFER_FULL handlingAleksander Morgado
The BUFFER_FULL signal handler is effectively working in the same way as the response buffer processor, in both cases we may have scheduled the completion of the serial command, and that in turn may end up fully disposing the port object. We must make sure the port object is valid for as long as we need it in this function, so we take a reference while processing the response buffer. Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/535
2022-03-30qmi: Fall back to NAS SSP/NAS TP capabilitiesSven Schwermer
If no DMS capabilities are reported, we fall back to the capabilities reported by NAS SSP or NAS TP. Signed-off-by: Sven Schwermer <sven.schwermer@disruptive-technologies.com>
2022-03-29broadband-modem-mbim: Set InitialEPSBearer's authentication to CHAP when is ↵Andrew Lassalle
UNKNOWN This is the same behavior that is used when creating the bearer in mm-bearer-mbim.
2022-03-29core: remove "all rights reserved" from copyright linesAleksander Morgado
The rights each contributor has are the ones stated by the GPL/LGPL, not more and not less.
2022-03-28mm-netlink: use unaligned netlink attribute lengthBjørn Mork
Alignment padding is not accounted for in the netlink attribute length. Fix to avoid warnings later if we add shorter fixed length attributes, even though it currently makes no difference since we only add a 4 byte attribute Signed-off-by: Bjørn Mork <bjorn@mork.no>
2022-03-28mm-netlink: only change IFF_UP flagBjørn Mork
This fixes the missing NOARP flag on the second and following VLAN sub-interfaces when multiplexing over the cdc_mbim driver. ifi_change specifies all the flags we want to change. Any listed flag which isn't set in ifi_flags will be cleared by the kernel: if (ifm->ifi_change) flags = (flags & ifm->ifi_change) | (rtnl_dev_get_flags(dev) & ~ifm->ifi_change); Drivers like cdc_mbim set some netdev flags by default, indicating supported or unsupported features. The driver emulates an ethernet netdev but it doesn't implement ARP. Clearing NOARP on cdc_mbim netdevs will block IP transmissions, waiting for an ARP reply we never will receive. Signed-off-by: Bjørn Mork <bjorn@mork.no>
2022-03-28foxconn: use new qmi service(fox) to get firmware versionFreedom Liu
foxconn modules get firmware version: Try with the new FOX service first. If FOX service failed, try with DMS service. T99W175(vid:105b) ; T77W968(0489:e0b4 ; 0489:e0b5): qmi service: dms T99W265(0489:e0da ; 0489:e0db): qmi service: fox
2022-03-23shared-qmi: ignore slot status indications until initial status is knownStephan Gerhold
Recent ModemManager versions no longer work on the Samsung A5 (Qualcomm MSM8916) smartphone: MM ends up in an infinite loop trying to probe the modem over and over again. Looking at the debug log it seems to be related to a "Slot Status" indication that comes in during probe time and causes MM to restart the probing process: [/dev/wwan0qmi0] Sent generic request (translated)... << QMUX: service = "uim" << QMI: message = "Register Events" (0x002E) << TLV: translated = physical-slot-status [/dev/wwan0qmi0] Received generic indication (translated)... << QMUX: service = "uim" << QMI: message = "Slot Status" (0x0048) << TLV: translated = { [0] = '[ physical_card_status = 'present', ... [/dev/wwan0qmi0] Received generic response (translated)... << QMUX: service = "uim" << QMI: message = "Register Events" (0x002E) << TLV: translated = SUCCESS [modem42] registered for slot status indications [/dev/wwan0qmi0] Sent generic request (translated)... << QMUX: service = "uim" << QMI: message = "Get Slot Status" (0x0047) [modem42] received slot status indication [modem42] An active slot had a status change, will reprobe the modem <infinite loop> The "Slot Status" indication (uim_slot_status_indication_cb) arrives immediately after starting to listen for the event, which is before ModemManager has actually loaded the initial slot status in uim_get_slot_status_ready. In this situation !slot_array_status_equal() will always cause the modem to reprobe, even though it is not necessary during the probe phase. To fix this add a simple check to uim_slot_status_indication_cb() that ignores the indication if the initial slot status was not loaded yet.
2022-03-22broadband-modem-mbim: consolidate initialized SIM creation methodAleksander Morgado
The logic to create a new SIM object from the slot status info was used in several places.
2022-03-22broadband-modem-mbim: update sim-type and esim-status of inactive slotsom
During initialization if the number of slots is more than 1 then update the sim-type and esim-status of the inactive slot as well.
2022-03-16test,modem-helpers: add test for the EM9191 COPS=? responseAleksander Morgado
Including 5GNR network reporting (act=12) https://forum.sierrawireless.com/t/5g-network-scan-with-the-em9191-operation-not-allowed/26374/9