Age | Commit message (Collapse) | Author |
|
|
|
Kernel driver mhi-net sets a custom MTU for the netdevice: use the
same value when resetting the netdevice to its initial state.
This is important especially when rmnet is used on top of mhi-net,
since rmnet netdevices get their initial MTU from the mhi-net one.
|
|
The NL668 doesn't seem to support multiplexing, as it fails to
transfer data even in the one multiplexed PDN case.
|
|
Rely exclusively on whether a global IPv6 was given or not, regardless
of what the DNS or gateway settings are, same as we do for IPv4.
Also, assume we only get 1 single IPv6 address. No need to have a
FIXME to add support for more addresses.
|
|
This will make device probing slower unconditionally, but it should
also ensure newer more complex devices that take longer to boot are
handled properly.
|
|
The current requested downlink data aggregation protocol maximum size is
set to 32768, but this is not accordingly set as the MTU of the main
qmi_wwan interface, that is instead set to RMNET_MAX_PACKET_SIZE that is
16384.
So, the modem is able to send QMAP aggregated blocks larger than 16384,
but the driver is not able to properly collect them, since the URB size
is 16384.
It is not simply possible to set qmi_wwan main interface MTU to the
returned dl max aggregated size, since when creating the rmnet netdevice
the rmnet kernel module automatically set the mtu as the size of the
parent netdevice MTU - the qmap header size (4), but this won't work
because the rmnet kernel module does not support MTU > 16384.
As an immediate fix, set the requested dl dap max size to 16384, while
thinking about how to refactor the logic for supporting higher values.
qmi_wwan inbox qmap management is not affected by this issue.
|
|
It could happen that when MM starts the aggregation protocol is already
configured on the modem side (e.g. if MM is stopped and restarted): this
prevents the links to be properly configured, resulting in using the qmimux
multiplex implementation even if rmnet is available.
Fix the issue by always performing the first time the links reset procedure,
even if the data format on the modem side is the expected one.
|
|
When using QMAPv5 and QMAPv4 the checksum is enabled by default
at the modem level, so it should be also enabled when creating the
rmnet netdevices: add the required flags also when rmnet is used
through qmi_wwan.
|
|
We should not update speeds on already disconnected bearers.
|
|
|
|
unconditionally
|
|
DST is already included in TZ offset. Adjust tests accordingly.
|
|
^NTCT seems to be used to enable or disable ^NWTIME messages.
|
|
FEATURE_NOT_SUPPORTED is equal 1 in the enum FeatureSupport, as a
result even if QGPS isn't supported by modem debug message printed
available support.
|
|
qmi_device_list_links can return TRUE, but with a NULL value for
the links list: check for validity before using the list.
|
|
(ModemManager:10426): GLib-GObject-WARNING **: 09:44:23.142: invalid cast from 'MMBroadbandModemQmiQuectel' to 'MMBroadbandModemMbim'
**
ERROR:../git/src/mm-broadband-modem-mbim.c:284:mm_broadband_modem_mbim_peek_port_mbim: assertion failed: (MM_IS_BROADBAND_MODEM_MBIM (self))
Bail out! ERROR:../git/src/mm-broadband-modem-mbim.c:284:mm_broadband_modem_mbim_peek_port_mbim: assertion failed: (MM_IS_BROADBAND_MODEM_MBIM (self))
See https://lists.freedesktop.org/archives/modemmanager-devel/2023-July/009729.html
|
|
|
|
ctx->supl is allocated in mm_shared_qmi_location_set_supl_server
using g_strdup. g_strdup requires to free string when unneeded.
The problem could be reproduced using following commands
```
while true; do
mmcli -m any --location-set-supl-server="supl.google.com:7276";
mem=$(cat /proc/$(pgrep ModemManager)/statm | awk '{print $6}')
echo $(date +"%s"), $mem | tee -a mm-leak.log;
done;
```
|
|
NL668 doesn't correctly support more than one multiplexed PDN
connection. Limit this explicitly so that it never attempts to use
more than one.
# mmcli -m a --simple-connect="multiplex=requested,apn=internet,ip-type=ipv4v6,apn-type=default"
successfully connected the modem
# mmcli -m a --simple-connect="multiplex=requested,apn=internet2,ip-type=ipv4v6,apn-type=default"
error: couldn't connect the modem: 'GDBus.Error:org.freedesktop.ModemManager1.Error.Core.Unsupported: Invalid bearer properties: Maximum number of multiplexed bearers reached'
|
|
Certain QMI or MBIM devices may not be able to support multiplexing at
all, or they may support a limited amount of links.
The new ID_MM_MAX_MULTIPLEXED_LINKS udev tag allows specifying the
maximum number of supported multiplexed links; e.g. 0 to report none
supported or 1 to report that one single multiplexed link is
supported.
|
|
Since 503e886c02 the events on inactive SIMs don't trigger a full
modem reprobe, and the slot index check is fully unused.
|
|
Explicitly return TRUE to indicate success because otherwise the
caller will expect a valid GError set.
|
|
Adding support for carrier lock for MBIM modems using google simlock
mechanism.
|
|
Otherwise the state cached by the protocol implementation will be
different to the one exposed in the 3GPP interface.
|
|
Both the register state indications and the register state set
response messages will be processed in the same way.
This ensures that the registration state reported during the set
response, along with the additional info provided in that
message (e.g. access technologies) are taken into account.
This change also avoids fully relying on the register state
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).
|
|
When running the 3GPP registration checks (e.g. after reaching enabled
state, or when synchronizing state after a quick suspend/resume), we
also update the current packet service state explicitly, without
needing to fully rely on the indications.
|
|
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).
|
|
|
|
==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
|
|
==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)
|
|
Fixes 470dff235c70683928ab0eb39c64151a8a4ceb7c
|
|
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.
|
|
|
|
In some cases modem is taking 7 tries to detect an initialized SIM.
|
|
|
|
|
|
Fix bug in Fibocom FM350 modem where a non-zero signal strength
interval needs to be configured as part of threshold setup.
Fixes #733
|
|
|
|
This reverts commit 17ed63637fea7ab7238880ec5eb75df910355dd2.
We were reusing the signal_state_query_ready() callback in the wrong
way.
|
|
After the setup of threshold for signal state notifications, trigger a
query of the current signal state values.
|
|
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>
|
|
registration wait
The cancellation_id will not be set if the cancellable is already
cancelled by the time g_cancellable_connect() is called.
|
|
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.
|
|
own struct
|
|
So that the variable names in each context identify the action being
performed, to easier reading.
|
|
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
|
|
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.
|
|
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
|
|
|
|
|