[PATCH] iface-modem-3gpp: don't force auto registration if already registered

Aleksander Morgado aleksander at aleksander.es
Thu Feb 8 18:01:04 UTC 2018


On Thu, Feb 8, 2018 at 6:55 PM, Dan Williams <dcbw at redhat.com> wrote:
> In mm_iface_modem_3gpp_register_in_network() when deciding whether to
> force automatic registration or not, check whether the modem is already
> registered in a network.  Just checking whether we have a valid operator
> code is not sufficient, as some modems (ublox Toby R2xx) don't always
> return an operator name/code even when registered.
> ---

LGTM

>  src/mm-iface-modem-3gpp.c | 52 +++++++++++++++++------------------------------
>  1 file changed, 19 insertions(+), 33 deletions(-)
>
> diff --git a/src/mm-iface-modem-3gpp.c b/src/mm-iface-modem-3gpp.c
> index 89023a46..4ac32fd5 100644
> --- a/src/mm-iface-modem-3gpp.c
> +++ b/src/mm-iface-modem-3gpp.c
> @@ -119,6 +119,17 @@ get_registration_state_context (MMIfaceModem3gpp *self)
>      return ctx;
>  }
>
> +static gboolean
> +reg_state_is_registered (MMModem3gppRegistrationState state)
> +{
> +    return state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME ||
> +        state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING ||
> +        state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME_SMS_ONLY ||
> +        state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_SMS_ONLY ||
> +        state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME_CSFB_NOT_PREFERRED ||
> +        state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_CSFB_NOT_PREFERRED;
> +}
> +
>  static MMModem3gppRegistrationState
>  get_consolidated_reg_state (RegistrationStateContext *ctx)
>  {
> @@ -307,12 +318,7 @@ run_registration_checks_ready (MMIfaceModem3gpp *self,
>      }
>
>      /* If we got registered, end registration checks */
> -    if (current_registration_state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME ||
> -        current_registration_state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING ||
> -        current_registration_state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME_SMS_ONLY ||
> -        current_registration_state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_SMS_ONLY ||
> -        current_registration_state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME_CSFB_NOT_PREFERRED ||
> -        current_registration_state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_CSFB_NOT_PREFERRED) {
> +    if (reg_state_is_registered (current_registration_state)) {
>          /* Request immediate access tech and signal update: we may have changed
>           * from home to roaming or viceversa, both registered states, so there
>           * wouldn't be an explicit refresh triggered from the modem interface as
> @@ -436,9 +442,11 @@ mm_iface_modem_3gpp_register_in_network (MMIfaceModem3gpp *self,
>      }
>      /* Automatic registration requested? */
>      else {
> +        MMModem3gppRegistrationState reg_state = mm_gdbus_modem3gpp_get_registration_state (ctx->skeleton);
> +
>          /* If the modem is already registered and the last time it was asked
>           * automatic registration, we're done */
> -        if (current_operator_code &&
> +        if ((current_operator_code || reg_state_is_registered (reg_state)) &&
>              !registration_state_context->manual_registration) {
>              mm_dbg ("Already registered in network '%s',"
>                      " automatic registration not launched...",
> @@ -1195,13 +1203,7 @@ mm_iface_modem_3gpp_update_access_technologies (MMIfaceModem3gpp *self,
>
>      /* Even if registration state didn't change, report access technology,
>       * but only if something valid to report */
> -    if (state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME ||
> -        state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING ||
> -        state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME_SMS_ONLY ||
> -        state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_SMS_ONLY ||
> -        state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME_CSFB_NOT_PREFERRED ||
> -        state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_CSFB_NOT_PREFERRED ||
> -        ctx->reloading_registration_info) {
> +    if (reg_state_is_registered (state) || ctx->reloading_registration_info) {
>          if (access_tech != MM_MODEM_ACCESS_TECHNOLOGY_UNKNOWN)
>              mm_iface_modem_update_access_technologies (MM_IFACE_MODEM (self),
>                                                         access_tech,
> @@ -1234,13 +1236,7 @@ mm_iface_modem_3gpp_update_location (MMIfaceModem3gpp *self,
>       * location updates, but only if something valid to report. For the case
>       * where we're registering (loading current registration info after a state
>       * change to registered), we also allow LAC/CID updates. */
> -    if (ctx->reloading_registration_info ||
> -        state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME ||
> -        state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING ||
> -        state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME_SMS_ONLY ||
> -        state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_SMS_ONLY ||
> -        state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME_CSFB_NOT_PREFERRED ||
> -        state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_CSFB_NOT_PREFERRED) {
> +    if (reg_state_is_registered (state) || ctx->reloading_registration_info) {
>          if (location_area_code > 0 && cell_id > 0)
>              mm_iface_modem_location_3gpp_update_lac_ci (MM_IFACE_MODEM_LOCATION (self),
>                                                          location_area_code,
> @@ -1292,12 +1288,7 @@ update_non_registered_state (MMIfaceModem3gpp *self,
>       * sent by the carrier during registration or b) by looking at the
>       * registration reject error code.  If b), we want to make sure we
>       * preserve the subscription state */
> -    if (old_state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME ||
> -        old_state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING ||
> -        old_state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME_SMS_ONLY ||
> -        old_state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_SMS_ONLY ||
> -        old_state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME_CSFB_NOT_PREFERRED ||
> -        old_state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_CSFB_NOT_PREFERRED)
> +    if (reg_state_is_registered (old_state))
>          clear_subscription_state (self);
>
>      /* The property in the interface is bound to the property
> @@ -1334,12 +1325,7 @@ update_registration_state (MMIfaceModem3gpp *self,
>      if (new_state == old_state)
>          return;
>
> -    if (new_state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME ||
> -        new_state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING ||
> -        new_state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME_SMS_ONLY ||
> -        new_state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_SMS_ONLY ||
> -        new_state == MM_MODEM_3GPP_REGISTRATION_STATE_HOME_CSFB_NOT_PREFERRED ||
> -        new_state == MM_MODEM_3GPP_REGISTRATION_STATE_ROAMING_CSFB_NOT_PREFERRED) {
> +    if (reg_state_is_registered (new_state)) {
>          MMModemState modem_state;
>
>          /* If already reloading registration info, skip it */
> --
> 2.14.3
> _______________________________________________
> ModemManager-devel mailing list
> ModemManager-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/modemmanager-devel



-- 
Aleksander
https://aleksander.es


More information about the ModemManager-devel mailing list