Commit Graph

7923 Commits

Author SHA1 Message Date
Aleksander Morgado
049ebb7084 api,profile-manager: new 'IndexField' property
For most protocols, the operations to manage profiles require a unique
'profile-id' as index. This applies to AT, QMI and generic MBIM.

But for MBIM using the Microsoft Extensions for profile management,
this is no longer true; the device expects the 'apn-type' to be the
index.

This new property lets the user know which is the expected index field
in the Delete() and Set() operations.
2021-12-24 14:06:13 +01:00
Aleksander Morgado
b90d64192a broadband-modem-mbim: support profile properties from MbimProvisionedContextElementV2
Microsoft defined a new extended version of the "provisioned contexts"
operation from the generic MBIM basic connect service. This extended
version adds several new settings that can be stored in the profile
(e.g. IP type, media type, roaming allowance...).

But this new version has a huge drawback; we cannot specify single
profiles via their unique id while we perform update/delete operations
in the modem. Instead, Microsoft explains that we should use the
context type to identify the target context; but this will ONLY work
if we have one context defined for each type. As soon as we have
multiple contexts of the same type, this operation may fail or
otherwise update multiple contexts at once.
2021-12-24 14:06:11 +01:00
Aleksander Morgado
6ba245cedc broadband-modem-mbim: new profile settings not available in MBIM protocol
At least not yet.
2021-12-24 14:05:35 +01:00
Aleksander Morgado
1b37ccc27a broadband-modem-qmi: new profile settings not available in QMI protocol
At least not yet.
2021-12-24 14:05:35 +01:00
Aleksander Morgado
ebe9a33411 broadband-modem: new profile settings not available in generic AT protocol 2021-12-24 14:05:35 +01:00
Aleksander Morgado
87eaac8f9d iface-modem-3gpp: don't compare new properties when matching initial EPS bearer 2021-12-24 14:05:35 +01:00
Aleksander Morgado
e7c55f5f70 cli: indent all profile property names to the same column 2021-12-24 14:05:35 +01:00
Aleksander Morgado
a896f88bf9 cli: don't use dashes in 3GPP profile human output 2021-12-24 14:05:35 +01:00
Aleksander Morgado
3c0d94ac03 cli: new 'profile-source' setting in 3GPP profile 2021-12-24 14:05:35 +01:00
Aleksander Morgado
fb0b00db16 cli: new 'roaming-allowance' in 3GPP profile and bearer properties 2021-12-24 14:05:35 +01:00
Aleksander Morgado
99ca2f5a1c cli: new 'profile enabled' setting in 3GPP profile 2021-12-24 14:05:35 +01:00
Aleksander Morgado
41887b3fb7 cli: new 'access-type-preference' in 3GPP profile and bearer properties 2021-12-24 14:05:32 +01:00
Aleksander Morgado
50fc0101f5 libmm-glib: new 'profile-source' in 3GPP profile
Not applicable to bearer properties, as this is exclusively a proflie
management setting, unrelated to connection attempts.
2021-12-24 14:03:15 +01:00
Aleksander Morgado
f6a91b2250 libmm-glib: new 'roaming-allowance' in 3GPP profile and bearer properties 2021-12-24 14:03:15 +01:00
Aleksander Morgado
24e634229d libmm-glib: new 'profile-enabled' in 3GPP profile
Not applicable to bearer properties, as this is exclusively a proflie
management setting, unrelated to connection attempts.
2021-12-24 14:03:15 +01:00
Aleksander Morgado
e61fd7ca58 libmm-glib: new 'access-type-preference' in 3GPP profile and bearer properties 2021-12-24 14:03:13 +01:00
Aleksander Morgado
fc6bc84d22 api,bearer: new 'profile-source' setting
Sometimes it's useful to know how a given stored profile was created,
so devices can store and report this kind of information.
2021-12-24 14:02:30 +01:00
Aleksander Morgado
73a29c3e33 api,bearer: new 'roaming-allowance' setting
The 'allow-roaming' setting should be considered deprecated for 3GPP
devices that support the new 'roaming-allowance' setting, which is
much more detailed (as it allows to differentiate between partner and
non-partner networks) and may also be stored as part of a profile.
2021-12-24 14:02:30 +01:00
Aleksander Morgado
52538defe1 api,bearer: specify how 'allow-roaming' works
This is never part of profile settings, it's a volatile configuration
applicable to the connection attempt ongoing with the given bearer
settings.
2021-12-24 14:02:30 +01:00
Aleksander Morgado
1010c3be4e api,bearer: new 'profile-enabled' setting
This setting is stored as part of the profile in the device, and
allows the user to specify that a given profile must not be used in
any way by the modem (if set to 'FALSE').
2021-12-24 14:02:30 +01:00
Aleksander Morgado
339b51652a api,bearer: new 'access-type-preference' setting
In 5G capable devices, which can support multiple types of access
types (either 3GPP or non-3GPP), the UE may request to use a 3GPP
access type exclusively, prefer a 3GPP access type, or just report no
preference.

When supported, this field may also be part of the settings that can
be stored as part of a profile.
2021-12-24 14:02:28 +01:00
Aleksander Morgado
93709f8dc2 broadband-modem-mbim: implement 5GNR registration settings update 2021-12-24 12:41:27 +00:00
Aleksander Morgado
296cce0bbb broadband-modem-mbim: implement 5GNR registration settings loading 2021-12-24 12:41:27 +00:00
Aleksander Morgado
61675e1555 iface-modem-3gpp: implement support for updating 5GNR registration settings 2021-12-24 12:41:27 +00:00
Aleksander Morgado
396f9c533a iface-modem-3gpp: minor coding style change 2021-12-24 12:41:27 +00:00
Aleksander Morgado
60fe68f609 iface-modem-3gpp: implement loading 5GNR registration settings during init 2021-12-24 12:41:27 +00:00
Aleksander Morgado
a6dd7ac60f cli,modem: add 5GNR registration settings in modem info output 2021-12-24 12:41:27 +00:00
Aleksander Morgado
dcf9bb4ee8 cli,modem-3gpp: new '--3gpp-set-nr5g-registration-settings' action 2021-12-24 12:41:27 +00:00
Aleksander Morgado
5395a85443 libmm-glib,modem-3gpp: add support to get/set 5GNR registration settings 2021-12-24 12:41:27 +00:00
Aleksander Morgado
22657021fb libmm-glib: new helper to handle the 5GNR registration settings 2021-12-24 12:41:27 +00:00
Aleksander Morgado
724342deac api,modem3gpp: add DRX cycle in 5G registration settings 2021-12-24 12:41:27 +00:00
Som_SP
e951008ae8 api,modem3gpp: new 5G registration settings support and MICO mode
A new set of property+method is added to be able to configure the 5G
specific registration settings, initially defining the support for the
MICO mode.

The property name starts with "Nr5g" instead of "5gNr" because of the
limitations imposed by the GObject type system on how properties with
numbers can be named.
2021-12-24 12:41:27 +00:00
Xeonacid
922bc2df5f build,meson: Remove incorrect args for i18n.merge_file
`i18n.merge_file` has been ignoring positional arguments for a time and explicitly rejects with error since meson 0.60.0.
2021-12-23 09:14:02 +08:00
Jakob Hauser
db228b2859 broadband-modem-qmi: Introduce udev flag for reduced facility lock query
The udev flag "ID_MM_QMI_FACILITY_LOCK_QUERY_REDUCED" allows to skip
facility lock state query "get_ck_status" on the DMS path for devices
where this isn't implemented properly.

On devices that have enabled "device locks", this flag won't work well.
Skipping the query doesn't disable the locks.

Fixes #448
2021-12-20 05:10:14 +01:00
Alexander Yashin
f95fb11b93 ublox: add support to SIM hot swap
Main thing that's required to get modem hot-swapping to work is the
UDCONF=50,1 command(see u-blox AT-command manual). But there are a lot
of u-blox modules which do not support this command. So in this patch,
it's supposed that this thing is configured beforehand(Like the UUSBCONF
functioning mode) for modules, where SIM hot-swaping feature is
possible. For the modems where it's not, the patch will not have any effects.

----

For ublox modems, CIEV: 12(X) messages allow to know if
SIM is (un)plugged. The values are encoded as:
    - 0: no SIM detected
    - 1: SIM detected

It's required from a modem to generate these events about the SIM
detection state.

To set up these `CIEV: 12,(X)` URC events the `+CMER=1,0,0,1,0` command
is used. That command is supported by almost all u-blox modems except
SARA-G300/SARA-G310/LEON-G1(For these models the hot-swap feature will
not work).

As this 12 that is used in CIEV may be completely different in other
modules, the test command parsing is quite important to get that index
number. So, this logic is also added in cind_simind_format_check_ready
function.

----

It seems that it's necessary to issue this `+CMER` set up there despite
that the `+CMER` configuration will take place later in the 3GPP
interface enabling sequence. Because without it simind indications
will not be enabled at all.
CMER configuration may be later overwritten by 3GPP interface enabling
sequence, but in the worst-case scenario only hot-swap feature will not
work.
2021-12-13 13:20:39 +03:00
Alexander Yashin
2de0e89589 plugins: ublox: bearer: SIM absence should not break disconnect
If we have a modem with an established connection, and then the
SIM is getting removed from that modem, this forces modem reprobing
sequence.

It looks like that:
```
 mm-base-modem:mm_base_modem_process_sim_event
 -> mm-base-modem:mm_base_modem_disable
 -> mm-base-modem:disable
 -> mm-broadband-modem:common_disable
 -> mm-broadband-modem:disabling_step,
 -> ctx->step=DISABLING_STEP_FIRST
 -> ctx->step=DISABLING_STEP_WAIT_FOR_FINAL_STATE
 -> ctx->step=DISABLING_STEP_DISCONNECT_BEARERS
```

At this stage, there is no actual connection existing already, but
bearer objects still exist and are still marked as connected.
So, if there were any active bearers - they will be disconnected.

In order to disconnect, ublox bearer sends +CGACT=0,%u, modem then
will return CME ERROR: 10(SIM not inserted):
```
[modem0/ttyACM0/at] --> 'AT+CGACT=0,1<CR>'
[modem0/ttyACM0/at] <-- '<CR><LF>+CME ERROR: 10<CR><LF>'
[modem0/ttyACM0/at] operation failure: 10 (SIM not inserted)
[modem0/bearer0] couldn't disconnect: SIM not inserted
```
this error will break disabling and reprobing. To fix that, it's
require to add 'SIM not inserted' state as a valid condition to
continue bearer disconnection.
2021-12-13 13:20:39 +03:00
Aleksander Morgado
029ea68ce4 base-bearer: make sure 'ReloadStatsSupported' is set before transitioning to 'Connected'
By the time we report the bearer as 'Connected', the DBus client
should also be able to know right away the value of
'ReloadStatsSupported', instead of needing to wait for it to be
updated asynchronously.

This logic adds one additional step in the generic connection
sequence for this purpose, which is run after the modem is connected
but before we report the state change via DBus.
2021-12-13 09:35:28 +00:00
Frederic Martinsons
9fc3d15d29 api, dbus, bearer: Add ReloadStatsSupported bearer dbus property
This property means that the current bearer can reload stats and read TX
and RX bytes transmitted.

The property is initiliazed as soon as the bearer is connected.

Signed-off-by: Frederic Martinsons <frederic.martinsons@sigfox.com>
2021-12-13 09:35:28 +00:00
Aleksander Morgado
07c4e95ac9 api,enums: minor alignment fix in comments 2021-12-11 22:12:13 +01:00
Aleksander Morgado
b094fe4427 port-probe: duplicate amount of AT probing attempts
We originally did only 3 attempts every 3s, so the maximum probing
time for a given TTY port looking for AT capabilities was 9 seconds.
We now duplicate the amount of times, so up to 18s of port probing,
which is quite a lot more than before, but unfortunately it's needed
because most new modems take a lot of time to boot up internally.

The way to avoid this long probing time is to make sure port type
hints for the possible AT ports are set correctly.

Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/issues/379
2021-12-11 20:22:57 +00:00
Aleksander Morgado
2c34ebe80c port-mbim: support MBIMEx v3.0
The ModemManager codebase has been ported to support Basic Connect v3
messages as defined in MBIMEx v3.0, so at this point we can now switch
to use it by default whenever possible.
2021-12-11 13:13:37 +01:00
Aleksander Morgado
2cf8b7858e broadband-modem-mbim,bearer-mbim: support packet service from MBIMEx v3.0
Whenever MBIMEx v3.0 is enabled, the logic should create requests and
parse responses using the updated format.

Based on an initial implementation by Som_SP <somashekhar.puttagangaiah@intel.com>
2021-12-11 13:13:33 +01:00
Aleksander Morgado
3382e421cc broadband-modem-mbim,bearer-mbim: support connect from MBIMEx v3.0
Whenever MBIMEx v3.0 is enabled, the logic should create requests and
parse responses using the updated format.

Based on an initial implementation by Som_SP <somashekhar.puttagangaiah@intel.com>
2021-12-11 13:12:55 +01:00
Aleksander Morgado
9940bd9dbe broadband-modem-mbim: treat 'no eSIM profile' as initialized
When an eSIM doesn't have any profile set, we should treat it as fully
ready to be used; i.e. so that a new SIM object can be created and
initialized.

In this state, the "eSIM status" property will say "No profiles".
2021-12-11 12:53:37 +01:00
Aleksander Morgado
36402df05b sim-mbim: load 'SimType', 'Removability' and 'EsimStatus' properties
We can use the MBIMEx v3.0 support to load the SIM type, SIM
removability details and eSIM status.
2021-12-11 12:53:37 +01:00
Aleksander Morgado
c76da3bed9 broadband-modem-mbim,sim-mbim: support subscriber ready status from MBIMEx 3.0
Whenever MBIMEx v3.0 is enabled, the logic should parse the response
and indication messages using the updated format.
2021-12-11 12:53:37 +01:00
Aleksander Morgado
83ebc2b4a8 base-sim: new 'SimType', 'Removability' and 'EsimStatus' properties
We implement the methods to load the properties during SIM object
initialization.
2021-12-11 12:53:37 +01:00
Aleksander Morgado
8cfddef2be base-sim: reorder init ready() methods
The ready() methods for each step in the initialization sequence must
be ordered from bottom to top, so that we can read the logic in that
same order.
2021-12-11 12:53:37 +01:00
Aleksander Morgado
8aef73ab53 base-sim: reorder load_preferred_networks()
Add it along with the other initialization property loaders.
2021-12-11 12:53:37 +01:00
Aleksander Morgado
f8719e6308 cli,sim: new 'SimType', 'Removability' and 'EsimStatus' properties 2021-12-11 12:53:37 +01:00