Age | Commit message (Collapse) | Author |
|
check NwError on failure
Issue and bugfix suggestion by Aleksander Morgado.
Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/549
|
|
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
|
|
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.
|
|
|
|
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.
|
|
context
|
|
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.
|
|
context
|
|
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.
|
|
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.
|
|
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.
|
|
It is important to gracefully stop the session before starting the
next session, making sure the engine is completely stopped. This can
be ensured by waiting for the +XLSRSTOP URC just after having received
the +XLSRSTOP command response.
We'll do an explicit wait for that URC with a 10s timeout, in order to
avoid waiting forever if the URC is never received. It will be assumed
that the engine is off if the 10s timeout happens, in the same way as
we were doing until now.
During the wait time for the URC, the operation task ownership is
shared among the response processor, the URC handler and the timeout
source. Once any of them decides to complete the task, the others will
automatically avoid attempting to complete the same task.
Based on a patch originally developed by:
Som_SP <somashekhar.puttagangaiah@intel.com>
|
|
==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)
|
|
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.
|
|
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
|
|
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)
|
|
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
|
|
|
|
This reverts commit 115a5d876ee57943f1ec6d8ebcb3328d821ec80a.
|
|
Add a udev filter to identify pci wwan ports from fibocom modems.
|
|
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.
|
|
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
|
|
Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/559
|
|
|
|
And bump libqmi to 1.31.5, which is the version introducing the rename.
|
|
Ussd module initialization does not work correctly because the tags match.
Signed-off-by: Maxim Anisimov <maxim.anisimov.ua@gmail.com>
|
|
|
|
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.
|
|
Issue and bugfix suggestion by Alex Leopoldo Villacís Lasso.
Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/552
|
|
The PLS63 is a drop-in replacement for PLS62 model, however it uses
different USB SoC and enumerates differently on the USB bus.
This commit adds relevant type hints with a correct Vendor and Product
IDs so that the device is correctly discovered. Without these type hints
the modem would not work correctly as it uses wrong port for PPP.
|
|
In some cases the "base" software package string does not have the
currently expected format of \d{2}.\d{2}.\d{3}. Specifically the last
triplet of characters might not be digits. For example a valid version
string might be 25.20.-04, which the current regex is unable to parse.
This change replace the previous regex with one less restrictive,
checking only the first part of the version's format.
|
|
test input strings for test_telit_parse_swpkgv_response invert <CR> and
<LF>. The correct match is \r for <CR> and \n for <LF>.
|
|
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
|
|
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.
|
|
Currently the Telit modem implements modem_after_sim_unlock() with 1s
timeout, however the #QSS URC management (introduced later) waits for
QSS=1 URC in csim_unlock_periodic_check up to 3s, which makes this 1s
delay not necessary anymore.
see also:
https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/3
|
|
Just a minimal example that prints the events in syslog
|
|
|
|
|
|
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".
|
|
|
|
Based on the FCC unlock specific one, but without any FCC unlock
specific constraint.
|
|
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.
|
|
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
|
|
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>
|
|
UNKNOWN
This is the same behavior that is used when creating the bearer in
mm-bearer-mbim.
|
|
MBIM and QMI fallback to CHAP when a username or password is present
but no authentication type was provided. Consider CHAP==UNKNOWN when
using loose comparison.
|
|
The rights each contributor has are the ones stated by the GPL/LGPL,
not more and not less.
|
|
|
|
Some modems, like LE910C1-EUX, express the LTE part of #BND output in
HEX format, but currently the MM parser for such case is limited to
modems that have "ext_4g_bands". This commits use the new MMTelitModel
info to decide how to parse #BND command output.
Fixes #487
|
|
Telit revision string can be used to identify the specific model, which
in turn is useful to specialize the behavior of the plugin.
This change adds revision parsing to detect some telit modems. Initially
it adds the ones that have different behaviors in #BND output parsing
for example.
|