aboutsummaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2021-10-20iface-modem-signal: bind together polling and threshold based setupsAleksander Morgado
The values exposed in the Signal interface must not be cleared every time polling is disabled, because the user may have also enabled threshold based loading. And viceversa; if the user disables threshold based polling, we should not unconditionally clear the values as polling may still be enabled. We setup a common Private context associated to the interface, and we keep the current state there, which is also in sync with the DBus interface. We will only clear the signal values if both polling-based and threshold-based setups are disabled. Following the same reasoning, the mm_iface_modem_signal_update() method used by implementations to report new signal quality details is updated so that it's a no-op if no polling-based or threshold-based setup has been enabled.
2021-10-20iface-modem-signal: implement support for SetupThresholds()Som_SP
Also allow updating the per-access technology signal quality information via indications. Includes updates by Aleksander Morgado to fix coding style issues and some other GTask related problems.
2021-10-19broadband-modem-mbim: early complete successful mode changesAleksander Morgado
When changing the allowed modes using the "Register State Set" request, the response would arrive once we have been registered in the network. This is obviously not ideal, as we just want to know if the mode preference was changed, we don't care if we're registered or not. Instead of waiting for the response to arrive or to timeout, we now also process incoming indications that arrive during the wait time, and if any of them shows the preferred modes to be the same ones as we just requested, we complete the operation right away.
2021-10-19broadband-modem-mbim: sync current modes and registration requestsAleksander Morgado
In MBIM we use the same "Register State Set Request" for 2 different things: configuring the allowed modes, and selecting the operator to use (manual/automatic). We need to keep track of which were the last things requested by the user so that we don't overwrite previous user actions when we process newer ones.
2021-10-19broadband-modem-mbim: fix MM_MODEM_MODE_ANY handling in set current modesAleksander Morgado
2021-10-19broadband-modem-mbim: add 5G support to supported modes loadingAleksander Morgado
2021-10-19helpers-mbim: add support for 3GPP2 data classesAleksander Morgado
Just for completeness.
2021-10-19broadband-modem-mbim: flag 5G as supported based on data capabilitiesAleksander Morgado
2021-10-19broadband-modem-mbim: implement current mode switching using 'Register State v2'Aleksander Morgado
Use the new Preferred Data Classes field in the Register State v2 message in order to know if the modes requested in the Set message are the expected ones or not. Based on an initial implementation by Som_SP <somashekhar.puttagangaiah@intel.com>
2021-10-18broadband-modem-mbim: fix signal quality reporting with MBIMEx v2.0Aleksander Morgado
When we enable MBIMEx v2.0, the "Signal State" responses and indications no longer report a valid RSSI value; and instead, they report per access technology RSRP/RSRQ values. >>>>>> Header: >>>>>> length = 116 >>>>>> type = indicate-status (0x80000007) >>>>>> transaction = 0 >>>>>> Fragment header: >>>>>> total = 1 >>>>>> current = 0 >>>>>> Contents: >>>>>> service = 'basic-connect' (a289cc33-bcbb-8b4f-b6b0-133ec2aae6df) >>>>>> cid = 'signal-state' (0x0000000b) >>>>>> Fields: >>>>>> Rssi = '99' >>>>>> ErrorRate = '99' >>>>>> SignalStrengthInterval = '5' >>>>>> RssiThreshold = '2' >>>>>> ErrorRateThreshold = '4294967295' >>>>>> RsrpSnr = '{ >>>>>> [0] = { >>>>>> Rsrp = '0' >>>>>> Snr = '0' >>>>>> RsrpThreshold = '4294967295' >>>>>> SnrThreshold = '4294967295' >>>>>> SystemType = '5g-nsa' >>>>>> }, >>>>>> [1] = { >>>>>> Rsrp = '49' >>>>>> Snr = '45' >>>>>> RsrpThreshold = '4294967295' >>>>>> SnrThreshold = '4294967295' >>>>>> SystemType = 'lte' >>>>>> }, >>>>>> }'
2021-10-18modem-helpers: setup common RSSI to signal quality converterAleksander Morgado
2021-10-18modem-helpers: remove unexistent method headerAleksander Morgado
2021-10-17broadband-modem-qmi: Add the profile name to profilesAndrew Lassalle
2021-10-16port-mbim: request MBIMEx v2.0Aleksander Morgado
The ModemManager codebase has been ported to support Basic Connect v2 messages as defined in MBIMEx v2.0, so at this point we can now switch to use it by default whenever possible.
2021-10-16broadband-modem-mbim: support 'Signal State' from MBIMEx v2.0Aleksander Morgado
2021-10-16bearer-mbim: support 'Packet Service' from MBIMEx v2.0Aleksander Morgado
2021-10-16broadband-modem-mbim: support 'Packet Service' from MBIMEx v2.0Aleksander Morgado
2021-10-16broadband-modem-mbim: support 'Register State' from MBIMEx v2.0Aleksander Morgado
2021-10-16broadband-modem-mbim: pass MbimDevice to notification parsersAleksander Morgado
We're going to enable the Microsoft extensions by default, and in order to properly parse the notification messages, we'll need to know which is the currently agreed MBIMEx version. So, pass down the MbimDevice to every notification parser. Not all of them will need it, so just for completeness.
2021-10-14qcom-soc: require udev tag for portsAleksander Morgado
Since the 'wwan' subsystem addition to the qcom-soc plugin, the rules to say a modem is handled by this plugin are too broad, and the plugin attempts to support any kind of device exposed by the WWAN subsystem, not just those from Qualcomm SoCs. Update the plugin to require a new ID_MM_QCOM_SOC udev tag that is set in the plugin udev rules, given that these rules already check for the expected SoC drivers (bam-dmux, ipa, qcom-q6v5-mss).
2021-10-14build,meson: Remove unnecessary empty lineIñigo Martínez
2021-10-13broadband-modem-qmi: fix non-initialized GErrorAleksander Morgado
2021-10-13broadband-modem-mbim: coding style fixes in the SAR implementationAleksander Morgado
2021-10-13broadband-modem-mbim: use a dynamically allocated MbimSarConfigStateAleksander Morgado
It makes reading the code a bit easier.
2021-10-13iface-modem-sar: fix initialization sequence completionAleksander Morgado
We cannot just return without completing the GTask. If we see the support check method failed, just keep on with the state machine so that the GTask is completed in the FAIL_IF_UNSUPPORTED step. Also, don't assume GError is set if FALSE is returned. This is the only kind of async method where we allow this right now.
2021-10-13broadband-modem-mbim: implement the sar interfaceJack Song
2021-10-13broadband-modem: add the sar interfacelvmaorui
2021-10-13build,meson: add SAR interface support in the daemonAleksander Morgado
2021-10-13iface-modem-sar: new `MMIfaceModemSar` interfacelvmaorui
2021-10-13mm-broadband-modem-mbim: treat NO_ESIM_PROFILE as failureAleksander Morgado
2021-10-11iface-modem: Allow SetPowerState(Low|On) on failed stateAndrew Lassalle
In some modems, the modem's radio can be ON when no SIM card is present. In this case, the modem is in failed state, and the host cannot set the power state to LOW. Since we we will allow the host to set the power to LOW, we should allow it to set it back to ON.
2021-10-11api: new TDS capabilityDaniele Palmas
2021-10-11modem-helpers: change deprecated MBIM_NW_ERROR_UNKNOWN to MBIM_NW_ERROR_NONEDaniele Palmas
2021-10-04mm-bearer-mbim: unref not needed and it is causing crashAmol Lad
2021-10-03Update signal strength indicator thresholdsFrederic Martinsons
These are thresholds for RSSI so nothing is expected to be greater than 0. This will allow to have a better granularity (even if with some modem, we are limited in the number of thresholds configured) These new thresholds will give the following signal quality range: - 11% for -110 dBm - 30% for -94 dBm - 50% for -82 dBm - 70% for -69 dBm - 90% for -57 dBm We are expecting to receive indication sreport every time the signal strength crosses one of the configured thresholds. Signed-off-by: Frederic Martinsons <frederic.martinsons@sigfox.com>
2021-10-03iface-modem-3gpp-profile-manager: correct a GError instance ownershipLubomir Rintel
The call to g_task_return_error() takes ownership of the GError passed to it; we must not free it ourselves upon automatic pointer cleanup. Otherwise a crash can be triggered in the error handling path: ModemManager[259816]: <debug> [1633088468.157848] [modem0/modemu/at] <-- '<CR><LF>OK<CR><LF>' ModemManager[259816]: <debug> [1633088468.159832] [modem0] stored profile with id '1' ModemManager[259816]: <debug> [1633088468.160501] [modem0] set profile state (7/8): list after ModemManager[259816]: <debug> [1633088468.161686] [modem0/modemu/at] device open count is 3 (open) ModemManager[259816]: <debug> [1633088468.162320] [modem0/modemu/at] device open count is 2 (close) ModemManager[259816]: <debug> [1633088468.162746] [modem0/modemu/at] --> 'AT+CGDCONT?<CR>' ModemManager[259816]: <debug> [1633088468.177437] [modem0/modemu/at] <-- '<CR><LF>ERROR<CR><LF>' ModemManager[259816]: <debug> [1633088468.178011] [modem0/modemu/at] operation failure: 100 (Unknown error) ModemManager[259816]: <warn> [1633088468.182420] [modem0/bearer0] connection attempt #1 failed: Couldn't validate update of profile '1': Unknown error ModemManager[259816]: <info> [1633088468.193156] [modem0/bearer0] connection #1 finished: duration 0s, tx: 0 bytes, rx: 0 bytes ModemManager[259816]: <debug> [1633088468.194280] [modem0] couldn't connect bearer: Couldn't validate update of profile '1': Unknown error ==259816== Invalid read of size 4 ==259816== at 0x4FF66CF: UnknownInlinedFun (gerror.c:535) ==259816== by 0x4FF66CF: g_error_free (gerror.c:832) ==259816== by 0x1A7F49: UnknownInlinedFun (glib-autocleanups.h:52) ==259816== by 0x1A7F49: UnknownInlinedFun (glib-autocleanups.h:52) ==259816== by 0x1A7F49: profile_manager_get_profile_after_ready (mm-iface-modem-3gpp-profile-manager.c:140) ==259816== by 0x4E342C9: g_task_return_now (gtask.c:1219) ==259816== by 0x4E344CA: UnknownInlinedFun (gtask.c:1289) ==259816== by 0x4E344CA: g_task_return (gtask.c:1245) ==259816== by 0x1A867C: get_profile_list_ready (mm-iface-modem-3gpp-profile-manager.c:680) ==259816== by 0x4E342C9: g_task_return_now (gtask.c:1219) ==259816== by 0x4E344CA: UnknownInlinedFun (gtask.c:1289) ==259816== by 0x4E344CA: g_task_return (gtask.c:1245) ==259816== by 0x1A3DB5: internal_list_profiles_ready (mm-iface-modem-3gpp-profile-manager.c:774) ==259816== by 0x4E342C9: g_task_return_now (gtask.c:1219) ==259816== by 0x4E344CA: UnknownInlinedFun (gtask.c:1289) ==259816== by 0x4E344CA: g_task_return (gtask.c:1245) ==259816== by 0x1D7B8B: profile_manager_cgdcont_query_ready (mm-broadband-modem.c:10240) ==259816== by 0x4E1DB61: g_simple_async_result_complete (gsimpleasyncresult.c:802) ==259816== Address 0x9286da0 is 0 bytes inside a block of size 16 free'd ==259816== at 0x48440E4: free (vg_replace_malloc.c:755) ==259816== by 0x500FD1C: g_free (gmem.c:199) ==259816== by 0x502A22F: g_slice_free1 (gslice.c:1180) ==259816== by 0x4FF6780: g_error_free (gerror.c:864) ==259816== by 0x1B22D2: connect_bearer_ready (mm-iface-modem-simple.c:286) ==259816== by 0x4E342C9: g_task_return_now (gtask.c:1219) ==259816== by 0x4E344CA: UnknownInlinedFun (gtask.c:1289) ==259816== by 0x4E344CA: g_task_return (gtask.c:1245) ==259816== by 0x18031A: connect_ready (mm-base-bearer.c:917) ==259816== by 0x4E342C9: g_task_return_now (gtask.c:1219) ==259816== by 0x4E344CA: UnknownInlinedFun (gtask.c:1289) ==259816== by 0x4E344CA: g_task_return (gtask.c:1245) ==259816== by 0x18329B: connect_3gpp_ready (mm-broadband-bearer.c:918) ==259816== by 0x4E342C9: g_task_return_now (gtask.c:1219) ==259816== Block was alloc'd at ==259816== at 0x484186F: malloc (vg_replace_malloc.c:380) ==259816== by 0x5013408: g_malloc (gmem.c:106) ==259816== by 0x502ACB4: g_slice_alloc (gslice.c:1069) ==259816== by 0x502B33D: g_slice_alloc0 (gslice.c:1095) ==259816== by 0x4FF64E6: g_error_allocate (gerror.c:702) ==259816== by 0x4FF6F03: UnknownInlinedFun (gerror.c:716) ==259816== by 0x4FF6F03: g_error_copy (gerror.c:886) ==259816== by 0x4E1D0A0: g_simple_async_result_set_from_error (gsimpleasyncresult.c:676) ==259816== by 0x236AAB: port_serial_got_response (mm-port-serial.c:744) ==259816== by 0x23B0F1: UnknownInlinedFun (mm-port-serial.c:934) ==259816== by 0x23B0F1: common_input_available (mm-port-serial.c:1035) ==259816== by 0x500AF9E: UnknownInlinedFun (gmain.c:3337) ==259816== by 0x500AF9E: g_main_context_dispatch (gmain.c:4055) ==259816== by 0x505F607: g_main_context_iterate.constprop.0 (gmain.c:4131) ==259816== by 0x500A562: g_main_loop_run (gmain.c:4329)
2021-10-03broadband-modem: ensure mm_broadband_modem_create_device_identifier() sets ↵Lubomir Rintel
an error on all bad returns modem_load_device_identifier_finish() expect it to do so and trips an assertion failure in g_propagate_error(): ModemManager[256038]: <warn> [1633083601.491190] [modem0] couldn't load equipment identifier: Unknown error ModemManager[256038]: <debug> [1633083601.491204] [modem0] loading device identifier... ModemManager[256038]: <debug> [1633083601.491215] [modem0/modemu/at] device open count is 3 (open) ModemManager[256038]: <debug> [1633083601.491231] [modem0/modemu/at] device open count is 2 (close) ModemManager[256038]: <debug> [1633083601.491254] [modem0/modemu/at] --> 'ATI<CR>' ModemManager[256038]: <debug> [1633083601.494616] [modem0/modemu/at] <-- '<CR><LF>ERROR<CR><LF>' ModemManager[256038]: <debug> [1633083601.494643] [modem0/modemu/at] operation failure: 100 (Unknown error) (ModemManager:256038): GLib-CRITICAL **: 06:20:01.494: g_propagate_error: assertion 'src != NULL' failed Thread 1 "ModemManager" received signal SIGTRAP, Trace/breakpoint trap. g_logv (log_domain=0x7ffff77d1071 "GLib", log_level=G_LOG_LEVEL_CRITICAL, format=<optimized out>, args=<optimized out>) at ../glib/gmessages.c:1413 1413 g_private_set (&g_log_depth, GUINT_TO_POINTER (depth)); Missing separate debuginfos, use: dnf debuginfo-install libmbim-1.26.0-2.el9.x86_64 libqmi-1.30.2-1.el9.x86_64 (gdb) bt #0 g_logv (log_domain=0x7ffff77d1071 "GLib", log_level=G_LOG_LEVEL_CRITICAL, format=<optimized out>, args=<optimized out>) at ../glib/gmessages.c:1413 #1 0x00007ffff77813d3 in g_log (log_domain=<optimized out>, log_level=<optimized out>, format=<optimized out>) at ../glib/gmessages.c:1451 #2 0x000055555561122d in modem_load_device_identifier_finish (self=0x5555557e62d0, res=<optimized out>, error=0x7fffffffd320) at /usr/src/debug/ModemManager-1.18.2-1.el9.x86_64/src/mm-broadband-modem.c:1168 #3 0x00005555555ea69a in load_device_identifier_ready (self=0x5555557e62d0, res=0x5555557ea6b0, task=task@entry=0x7fffe8011e20 [GTask]) at /usr/src/debug/ModemManager-1.18.2-1.el9.x86_64/src/mm-iface-modem.c:4727 #4 0x00007ffff7951b62 in g_simple_async_result_complete (simple=0x5555557ea6b0 [GSimpleAsyncResult]) at ../gio/gsimpleasyncresult.c:802 #5 0x00005555555d1b0a in at_sequence_parse_response (port=<optimized out>, res=<optimized out>, ctx=ctx@entry=0x5555557ed7f0) at /usr/src/debug/ModemManager-1.18.2-1.el9.x86_64/src/mm-base-modem-at.c:250 #6 0x00007ffff7951b62 in g_simple_async_result_complete (simple=0x5555557e5440 [GSimpleAsyncResult]) at ../gio/gsimpleasyncresult.c:802 #7 0x00005555556805dc in serial_command_ready (port=<optimized out>, res=<optimized out>, simple=simple@entry=0x5555557e5440 [GSimpleAsyncResult]) at /usr/src/debug/ModemManager-1.18.2-1.el9.x86_64/src/mm-port-serial-at.c:378 #8 0x00007ffff7951b62 in g_simple_async_result_complete (simple=0x5555557d6730 [GSimpleAsyncResult]) at ../gio/gsimpleasyncresult.c:802 #9 0x000055555567fb35 in command_context_complete_and_free (ctx=ctx@entry=0x7fffe800c200, idle=idle@entry=0) at /usr/src/debug/ModemManager-1.18.2-1.el9.x86_64/src/mm-port-serial.c:141 #10 0x0000555555682a96 in port_serial_got_response (self=0x5555557dd4e0 [MMPortSerialAt], parsed_response=0x0, error=0x5555557d5040) at /usr/src/debug/ModemManager-1.18.2-1.el9.x86_64/src/mm-port-serial.c:755 #11 0x00005555556870d2 in parse_response_buffer (self=<optimized out>) at /usr/src/debug/ModemManager-1.18.2-1.el9.x86_64/src/mm-port-serial.c:934 #12 common_input_available (self=0x5555557dd4e0 [MMPortSerialAt], condition=(G_IO_NVAL | unknown: 0xf762a5c0)) at /usr/src/debug/ModemManager-1.18.2-1.el9.x86_64/src/mm-port-serial.c:1035 #13 0x00007ffff7778f9f in g_main_dispatch (context=0x5555557527c0) at ../glib/gmain.c:3337 #14 g_main_context_dispatch (context=0x5555557527c0) at ../glib/gmain.c:4055 #15 0x00007ffff77cd608 in g_main_context_iterate.constprop.0 (context=0x5555557527c0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/gmain.c:4131 #16 0x00007ffff7778563 in g_main_loop_run (loop=0x55555576da60) at ../glib/gmain.c:4329 #17 0x00005555555b7b60 in main (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/ModemManager-1.18.2-1.el9.x86_64/src/main.c:216
2021-09-23sms: increase send timeout to 5 minutesBenoît Monin
The timeout for sms send operation can exceed the current value, so increase it to 5 minutes. Timeouts up to 4 minutes have been observed in the following test scenario: * Power up the modem and wait for registration. * Right when the modem is registered, attenuate the rf signal or remove the antenna. * Immediately try to send an sms. Increasing the timeout cover this corner case.
2021-09-21modem-qmi,sim-qmi: read personalization retries from Card StatusMichal Mazur
2021-09-21modem-mbim: enter LOCKED state when SIM is incompatibleMichal Mazur
According to MBIM specification, the subscriber state is INITIALIZED when SIM card is incompatible with enabled modem personalization lock. This patch introduce additional check for enabled PIN lock in such case and fixes depersonalization of one lock if several are enabled.
2021-09-19Fix -Wmaybe-uninitialized warningYegor Yefremov
Initialize the scheme variable to QMI_VOICE_USS_DATA_CODING_SCHEME_UNKNOWN to avoid the warning.
2021-09-19sim-mbim: always close UICC channel, even on errorAleksander Morgado
Don't close the UICC channel only when the EID was successfully load. If for any reason it failed, also close the channel.
2021-09-19sim-mbim: coding style fixes in the EID loadingAleksander Morgado
2021-09-19sim-mbim: add support for loading eid via mbim protocolSom_SP
Support is added to set eid dbus interface property using MBIM protocol when the inserted sim is esim.
2021-09-16build,meson: simplify build of daemon enums sourcesAleksander Morgado
2021-09-15build,meson: make PLUGINDIR an absolute pathAleksander Morgado
Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/433
2021-09-10build,meson: Fix suspend/resume optionIñigo Martínez
The suspend/resume option does not build properly if journal option is disabled. This is beacause the journal option is check to add suspend/resume code. It has been fixed by replacing journal option check by the suspend/resume option.
2021-09-10core: remove execution bit from file modes in source filesAleksander Morgado
2021-09-08broadband-modem-qmi: don't error out on empty call listAleksander Morgado
Only error out if the required TLVs are missing.
2021-09-08iface-modem-voice: avoid warning with -Wincompatible-pointer-typesAleksander Morgado
../src/mm-iface-modem-voice.c: In function ‘mm_iface_modem_voice_reload_all_calls’: ../src/mm-iface-modem-voice.c:2549:64: warning: passing argument 2 of ‘((MMIfaceModemVoice *)g_type_interface_peek((void *)((GTypeInstance *)self)->g_class, mm_iface_modem_voice_get_type()))->load_call_list’ from incompatible pointer type [-Wincompatible-pointer-types] 2549 | reload_all_calls_ready, | ^~~~~~~~~~~~~~~~~~~~~~ | | | void (*)(MMIfaceModemVoice *, GAsyncResult *, GTask *) {aka void (*)(struct _MMIfaceModemVoice *, struct _GAsyncResult *, struct _GTask *)} ../src/mm-iface-modem-voice.c:2549:64: note: expected ‘GAsyncReadyCallback’ {aka ‘void (*)(struct _GObject *, struct _GAsyncResult *, void *)’} but argument is of type ‘void (*)(MMIfaceModemVoice *, GAsyncResult *, GTask *)’ {aka ‘void (*)(struct _MMIfaceModemVoice *, struct _GAsyncResult *, struct _GTask *)’}