diff options
author | Richard Röjfors <richard@puffinpack.se> | 2019-08-20 17:56:50 +0200 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2019-08-21 13:11:11 -0500 |
commit | b50ff27d3f1469b54daddbe45606a6c7bef8ff7d (patch) | |
tree | 7ade5a1e55fc007ed0a1b001b02c4f184ec620e2 /src | |
parent | 30fd4b3e3433854188ab31dd99bc512f7ad2d229 (diff) | |
download | ofono-b50ff27d3f1469b54daddbe45606a6c7bef8ff7d.tar.gz |
gprs: Check for LTE in gprs_attached_update
Since we have a different condition for the attach state
when running on LTE, we should consider it in gprs_attached_update.
Previously it's done in some instances. But for instance if
the driver got detached from GPRS but now running on LTE with a
context up, we would be deattached.
Diffstat (limited to 'src')
-rw-r--r-- | src/gprs.c | 51 |
1 files changed, 28 insertions, 23 deletions
@@ -1571,13 +1571,34 @@ static void release_active_contexts(struct ofono_gprs *gprs) } } +static gboolean on_lte(struct ofono_gprs *gprs) +{ + if (ofono_netreg_get_technology(gprs->netreg) == + ACCESS_TECHNOLOGY_EUTRAN && have_read_settings(gprs)) + return TRUE; + + return FALSE; +} + static void gprs_attached_update(struct ofono_gprs *gprs) { ofono_bool_t attached; + int status = gprs->status; - attached = gprs->driver_attached && - (gprs->status == NETWORK_REGISTRATION_STATUS_REGISTERED || - gprs->status == NETWORK_REGISTRATION_STATUS_ROAMING); + if (on_lte(gprs)) + /* + * For LTE we attached status reflects successful context + * activation. + * Since we in gprs_netreg_update not even try to attach + * to GPRS if we are running on LTE, we can on some modems + * expect the gprs status to be unknown. That must not + * result in detaching... + */ + attached = have_active_contexts(gprs); + else + attached = gprs->driver_attached && + (status == NETWORK_REGISTRATION_STATUS_REGISTERED || + status == NETWORK_REGISTRATION_STATUS_ROAMING); if (attached == gprs->attached) return; @@ -1591,11 +1612,13 @@ static void gprs_attached_update(struct ofono_gprs *gprs) if (attached == FALSE) { release_active_contexts(gprs); gprs->bearer = -1; - } else if (have_active_contexts(gprs) == TRUE) { + } else if (have_active_contexts(gprs) == TRUE && !on_lte(gprs)) { /* * Some times the context activates after a detach event and * right before an attach. We close it to avoid unexpected open * contexts. + * Skip that for LTE since the condition to be attached on LTE + * is that a context gets activated */ release_active_contexts(gprs); gprs->flags |= GPRS_FLAG_ATTACHED_UPDATE; @@ -1660,15 +1683,6 @@ static void gprs_netreg_removed(struct ofono_gprs *gprs) gprs_attached_update(gprs); } -static gboolean on_lte(struct ofono_gprs *gprs) -{ - if (ofono_netreg_get_technology(gprs->netreg) == - ACCESS_TECHNOLOGY_EUTRAN && have_read_settings(gprs)) - return TRUE; - - return FALSE; -} - static void gprs_netreg_update(struct ofono_gprs *gprs) { ofono_bool_t attach; @@ -2573,16 +2587,7 @@ void ofono_gprs_status_notify(struct ofono_gprs *gprs, int status) if (status != NETWORK_REGISTRATION_STATUS_REGISTERED && status != NETWORK_REGISTRATION_STATUS_ROAMING) { - /* - * For LTE we attached status reflects successful context - * activation. - * Since we in gprs_netreg_update not even try to attach - * to GPRS if we are running on LTE, we can on some modems - * expect the gprs status to be unknown. That must not - * result in detaching... - */ - if (!on_lte(gprs)) - gprs_attached_update(gprs); + gprs_attached_update(gprs); return; } |