Commit Graph
62 Commits
Author SHA1 Message Date
Aleksander Morgado 35e20a48c8 api,modem: deprecate the 'MaxBearers' property
This property was never initialized with a correct value, we would
always use the same value as used for MaxActiveBearers, which isn't
technically right. Just suggest to ignore this property, and flag
it as deprecated.

In addition to deprecating the API property, we will internally no
longer limit the amount of bearer objects that may be created with
different connection settings. The bearer object exposed in DBus is a
representation of the connection that may be setup, and so we can hold
as many representations as we want as long as the amount of connected
bearers doesn't exceed the maximum amount for each modem.

Leaving around the disconnected modems also serves another purpose.
Each bearer holds information about the amount of times a connection
with it has been attempted, and the amount of data transferred through
it. If we use the Simple.Connect() method to connect the modem using
different bearer settings, we won't lose the information of the past
connection attempts with different settings.
2021-03-10 10:59:22 +01:00
Aleksander Morgado a2b57474dc error-helpers: port to use object logging 2020-04-08 16:35:09 +02:00
Aleksander Morgado 91de19e3ae iface-modem-simple: port to use object logging 2020-04-08 16:35:08 +02:00
Aleksander Morgado b6add18157 iface-modem-simple: don't abort connection attempt if SIM-PUK2 locked 2020-02-12 09:41:10 +00:00
Aleksander Morgado 8744025545 iface-modem-simple: fix warnings with -Wimplicit-fallthrough
mm-iface-modem-simple.c: In function ‘connection_step’:
  mm-iface-modem-simple.c:539:18: error: this statement may fall through [-Werror=implicit-fallthrough=]
    539 |         ctx->step++;
        |         ~~~~~~~~~^~
  ...
2020-01-30 11:59:14 +01:00
Aleksander Morgado a4dcf5dd68 iface-modem-simple: fix warnings with -Wswitch-default
mm-iface-modem-simple.c: In function ‘connection_step’:
  mm-iface-modem-simple.c:536:5: error: switch missing default case [-Werror=switch-default]
    536 |     switch (ctx->step) {
        |     ^~~~~~
2020-01-30 11:59:14 +01:00
Aleksander Morgado debec6f650 iface-modem-3gpp: forced registration is not state
The request for forced registration is an implementation detail of
mm_iface_modem_3gpp_register_in_network(), not part of any state to
keep in the private info.
2020-01-06 20:17:08 +00:00
Aleksander Morgado 7a398214f9 iface-modem-simple: clear ongoing connect cancellable on early errors
If the Simple.Connect() operation fails before the bearer connection
process starts (e.g. during the previous SIM-PIN checks or explicit
registration attempt), the ongoing connect cancellable is not being
properly cleared, and this would prevent additional new connection
attempts unless an explicit Simple.Disconnect() is called.

    $ sudo mmcli -m 1 --simple-connect="operator-id=21403,apn=internet"
    error: couldn't connect the modem: 'GDBus.Error:org.freedesktop.ModemManager1.Error.MobileEquipment.NetworkTimeout: Network timeout'
    $ sudo mmcli -m 1 --simple-connect="operator-id=21403,apn=internet"
    error: couldn't connect the modem: 'GDBus.Error:org.freedesktop.ModemManager1.Error.Core.InProgress: Connection request forbidden: operation already in progress'
    $ sudo mmcli -m 1 --simple-connect="operator-id=21403,apn=internet"
    error: couldn't connect the modem: 'GDBus.Error:org.freedesktop.ModemManager1.Error.Core.InProgress: Connection request forbidden: operation already in progress'

Fix this, by making sure the ongoing connect cancellable is always
cleared when completing the DBus method invocation that created it.

Fixes https://gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/169
2019-12-21 09:53:06 +01:00
Aleksander Morgado 5e8c64d092 iface-modem-simple: don't assert ongoing connect cancellable
[11642]: <debug> [1573665255.321490] Couldn't reload current power state: QMI operation failed: Transaction timed out
    [11642]: <debug> [1573665255.321697] No need to change power state: already in 'on' power state
    [11642]: <debug> [1573665255.330864] Modem (Quectel) '/sys/devices/platform/ehci-platform/usb1/1-1' completely disposed
    **
    ERROR:mm-iface-modem-simple.c:44:private_free: assertion failed: (!priv->ongoing_connect)

If the modem goes away in the middle of a connection attempt, there's
no explicit connection cancellation performed, we just cleanup the
modem object. In this case, the ongoing attempt cancellable will still
exist, so just clean it up as well.
2019-11-13 18:23:21 +01:00
Aleksander Morgado d555c4c45c iface-modem-simple: allow single ongoing Connect() attempt
We only allow one single Simple.Connect() attempt at a time. If more
than one arrives, the second and next ones will be forbidden.

The ongoing connection attempt can now always be cancelled via
Simple.Disconnect(), not only *after* the bearer object connection has
started. i.e. if Simple.Disconnect() is called e.g. while waiting to
be registered, we would also be cancelled properly.
2019-10-17 08:07:10 +00:00
Aleksander Morgado f228d0dd6f base-bearer,iface-modem-simple: log user requests to connect/disconnect 2019-10-17 08:07:10 +00:00
Aleksander Morgado 15b8156061 iface-modem-simple: fix Simple.Disconnect() when bearer path given
The Simple.Disconnect() method handler was totally broken when a
specific bearer path was given, because the user-provided bearer path
was never being stored in the DisconnectionContext struct...

This is an extremely bad error, but it also gives us an indication
that no one is really using this method to disconnect one single
bearer, mainly because we also have the Bearer.Disconnect() method,
which makes more sense. mmcli didn't even allow passing a bearer path
to --simple-disconnect.
2019-10-09 12:23:33 +02:00
Aleksander Morgado 55c3026643 api: deprecate 'number' in bearer properties
https://gitlab.freedesktop.org/mobile-broadband/ModemManager/issues/99
2019-01-03 16:42:18 +00:00
Aleksander Morgado 3570604bc4 iface-modem-simple: no need for an extra 'self' reference when using GTask 2018-07-10 19:43:44 +00:00
Ben Chan 665e227918 iface-modem-simple: port register_in_3gpp_or_cdma_network to use GTask 2017-04-06 21:27:00 +02:00
Ben Chan 9823d9d6f6 core: remove explicit GDestroyNotify cast on g_free / g_object_unref
g_free and g_object_unref are in form of  `void (*)(gpointer)`, which
matches the GDestroyNotify signature. An explicit GDestroyNotify cast on
g_free and g_object_unref is thus not needed.
2017-03-29 10:22:05 +02:00
Aleksander Morgado ea3cb005b8 bearer-list: rename bearer find method to specify properties are compared 2015-12-03 12:00:22 +01:00
Aleksander Morgado 5358d6fea0 sim: rename 'MMSim' to 'MMBaseSim'
Just so that we don't have same header names in src/ and /libmm-glib.
2014-07-06 16:55:29 +02:00
Aleksander Morgado 3ca267b01f bearer: rename 'MMBearer' to 'MMBaseBearer'
Just so that we don't have same header names in src/ and /libmm-glib.
2014-07-06 16:55:29 +02:00
Aleksander Morgado 5b08091520 api,introspection: Simple.Connect() won't change neither bands nor allowed modes
We won't allow changing modes or bands through Simple.Connect(). Applications
should instead look at the corresponding SupportedBands or SupportedModes, and
then use SetCurrentBands() or SetCurrentModes() explicitly.
2013-06-05 19:15:15 +02:00
Aleksander Morgado 1c67d050cb api,introspection: merge 'AllowedModes' and 'SupportedMode' into 'CurrentModes'
We now have a single 'CurrentModes' property which contains both values in a
tuple with signature "(uu)".

Also, rename 'SetAllowedModes()' to 'SetCurrentModes()', and update the list of
arguments expected to have a single "(uu)" tuple.
2013-06-05 19:15:14 +02:00
Aleksander Morgado 212d00c529 api,instrospection: rename 'Bands' to 'CurrentBands'
... and 'SetBands()' to 'SetCurrentBands()'.

We'll keep the 'Current' keyword in those properties which also have
'Supported' values.
2013-06-05 19:15:14 +02:00
Aleksander Morgado 804642adc2 api: let MMBearerIpFamily be flags instead of a enumeration
We want to expose in the Modem interface the list of supported IP families, and
the easiest way to do so is to have the IP family as flags, and provide in the
interface a single enum.

Also, a value of 0 for a MMBearerIpFamily specifies that no flags are set, so
just rename it to 'NONE'.

And add a new 'ANY' value which sets all flags to 1.
2013-06-05 19:15:13 +02:00
Aleksander Morgado 086557e5d5 iface-modem-simple: log about all parameters passed to Simple.Connect() 2013-04-05 10:27:43 +02:00
Aleksander Morgado 1372933345 iface-modem,sim: improve lock info update logic
The logic to handle the lock information (current lock and unlock retry count)
wasn't handling all possible cases properly, e.g.:

 * When PIN is incorrectly entered too many times, a SIM-PUK error may happen.
   In this case we need to directly assume SIM-PUK is the current lock (some
   modems, like Option HSO ones, would incorrectly reply SIM-PIN if CPIN? asked
   just after the SIM-PUK error).

 * After every operation acting in SIM locks, we need to update the current
   unlock retry count.

This change tries to cover those cases, by:

 * The logic to check current lock is extended to also load the unlock retry
   count when needed.

 * Whenever a SIM-PUK error happens in the SIM operations, we directly assume
   that SIM-PUK is required, without re-asking CPIN?.

 * The overall logic of lock checking is now handled by a state machine, which
   is much easier to understand.
2013-01-08 18:40:47 +01:00
Aleksander Morgado 1642863037 iface-modem-simple: avoid intermediate states
If the modem is currently disabling, we need to wait to get fully disabled
before starting with the new connection sequence.

If the modem is currently disconnecting, we need to wait to get fully
disconnected before starting with the new connection sequence.
2012-10-30 15:35:33 +01:00
Aleksander Morgado e499d32ef1 core: add info logs to show main state machine start/stop points 2012-10-25 16:19:24 +02:00
Dan Williams 7f105dc386 simple: don't try to enable the "unknown" band
If the band isn't actually given, don't try to enable it.
2012-10-19 19:32:28 -05:00
Aleksander Morgado a850644cd8 iface-modem-simple: plug memleaks 2012-10-11 11:47:53 +02:00
Aleksander Morgado c16bcdf68c core: make sure objects retrieved with g_object_get() are valid in the ifaces
The interfaces usually retrieve objects (e.g. skeletons) from the Modem object
using g_object_get(), but we didn't make sure that these objects were actually
valid before using them.

This should clean up errors happening when the modem gets unplugged and still
some actions are ongoing.

Should fix https://bugzilla.gnome.org/show_bug.cgi?id=685933
2012-10-11 11:41:15 +02:00
Aleksander Morgado c250fa3797 libmm-glib: remove the `libmm-common.h' header
Both the ModemManager daemon and the mmcli will now include `libmm-glib.h' only.

We also handle two new special `_LIBMM_INSIDE_MM' and `LIBMM_INSIDE_MMCLI'
symbols, which if included before the `libmm-glib.h' library allow us to:

 * Don't include the libmm-glib high level API in the ModemManager daemon, as
   the object names would clash with those in the core.

 * Define some of the methods of helper objects to be included only if compiling
   ModemManager daemon or the mmcli.
2012-10-04 10:17:12 +02:00
Aleksander Morgado bf1da3faea iface-modem-simple: never remove connected bearers
Modems have a maximum of bearers allowed to be connected at a time, number which
is given by the number of available ports that may be used for data connections.

When Simple.Connect() tries to launch a connection, it will try to find first an
existing bearer with the required parameters (e.g. APN, IP type). If such bearer
is found, it will just use it. If no such bearer is found, it will try to create
one. When trying to create one, if there is no more room for bearers in the
modem, we will remove the first disconnected bearer that we find, if any, before
trying to create the new one. This logic now makes sure that no connected bearer
gets removed in order to create a new one, and also that only one existing gets
removed if possible (not every bearer as we did previously).

Further logic to connect multiple bearers at a time cannot be done using the
Simple interface.
2012-09-04 11:34:00 +02:00
Aleksander Morgado 3132e34dc1 iface-mode-simple: when setting bands or modes, wait some time to settle down
When bands or allowed modes are changed, the modem will very likely reset its
current registration and start from scratch. We will now give it some seconds
to settle down before going on with the connection request, so that the modem
has enough time to report being unregistered. Without this sleep time, the
unsolicited message reporting being unregistered may arrive *after* having
checked registration status in the Simple connect sequence, and therefore we
end up failing the connection request.
2012-08-30 16:36:38 +02:00
Aleksander Morgado 3ff03c946f iface-modem-simple: don't launch band/mode updates unless explicitly required 2012-08-28 17:15:18 +02:00
Aleksander Morgado 3b366118b6 simple: need to wait to get fully initialized before trying to enable 2012-03-30 10:25:33 +02:00
Aleksander Morgado 6bb90d92e4 iface-modem-simple: try to skip initial steps in the Simple Connect sequence 2012-03-16 15:38:09 +01:00
Aleksander Morgado 295272196d iface-modem-simple: don't request to connect the bearer if already connected 2012-03-16 15:37:37 +01:00
Aleksander Morgado 1dbe4a12cf iface-modem-simple: don't call the enable() methods in the class directly
Use the new `mm_base_modem_enable()' instead, which will pass down the
modem-wide cancellable to the enable() implementation.
2012-03-16 15:21:56 +01:00
Aleksander Morgado 686cfbb2c0 iface-modem-simple: don't assume bearer is always set 2012-03-16 15:21:01 +01:00
Aleksander Morgado cd63df938f libmm-common: `MMSimpleStatus' won't be considered internal any more
Renamed `MMCommonSimpleProperties' to `MMSimpleStatus', and removed the
`MMSimpleStatusProperties' provided in libmm-glib. We'll just use the original
one from libmm-common always.
2012-03-16 14:53:20 +01:00
Aleksander Morgado 1385eb394f libmm-common: `MMSimpleConnectProperties' won't be considered internal any more
Renamed `MMCommonConnectProperties' to `MMSimpleConnectProperties', and removed
the `MMModemSimpleConnectProperties' provided in libmm-glib. We'll just use the
original one from libmm-common always.
2012-03-16 14:53:19 +01:00
Aleksander Morgado d306bb082f libmm-common: `MMBearerProperties' won't be considered internal any more
Renamed `MMCommonBearerProperties' to `MMBearerProperties', and removed the
`MMBearerProperties' provided in libmm-glib. We'll just use the original one
from libmm-common always.
2012-03-16 14:53:19 +01:00
Aleksander Morgado 6a655f5daf iface-modem-simple: include policy authorization checks 2012-03-16 14:53:15 +01:00
Aleksander Morgado 09d2f062c7 api,dbus: rename AllowedBands' to just Bands'
ModemManager will load:
  1) The list of supported bands. Note that this doesn't mean that any possible
     combination of bands is supported, as modems may support only specific
     combinations, but at least gives a rough idea of what the modem is capable
     of handling.

  2) The list of CURRENT bands. There is no such "Allowed" bands, as we do with
     modes, modems will have a specific set of bands being currently used, which
     will be reported in the `Bands' property.

If the modem allows modifying the list of bands to use, this can be done with
the `SetBands()' method. If the modem doesn't support using a specific
combination of bands, this method will report an error.
2012-03-16 14:28:13 +01:00
Aleksander Morgado dc1df5bf2f iface-modem-simple: SIM-PIN2 locking does not prevent from connecting 2012-03-15 14:15:06 +01:00
Aleksander Morgado 050c30db1c iface-modem-simple: don't create a bearer if we can reuse an existing one 2012-03-15 14:14:55 +01:00
Aleksander Morgado c65c5aedc3 sim: allow subclassing pin/puk sending operations 2012-03-15 14:14:55 +01:00
Aleksander Morgado 24dd208b59 iface-modem-simple: remove dual 3GPP/CDMA bearers logic
Just rely on a single Bearer object created.
2012-03-15 14:14:53 +01:00
Aleksander Morgado 7e36f04b37 core: use new enums/flags string getters/builders 2012-03-15 14:14:52 +01:00
Aleksander Morgado 3b443b6954 libmm-common: fix usage of main library header 2012-03-15 14:14:52 +01:00