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

Dan Williams dcbw at redhat.com
Thu Feb 8 18:29:05 UTC 2018


On Thu, 2018-02-08 at 19:01 +0100, Aleksander Morgado wrote:
> 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

Thanks; pushed to git master and backported to mm-1-6.

Dan

> >  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_a
> > rea_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
> 
> 
> 


More information about the ModemManager-devel mailing list