From: Denis Kenzior <denkenz@gmail.com>
To: ofono@ofono.org
Subject: Re: [PATCH] gprs: Attach status confusion
Date: Wed, 09 Apr 2014 10:51:49 -0500 [thread overview]
Message-ID: <53456C95.7000800@gmail.com> (raw)
In-Reply-To: <1397051854-30060-1-git-send-email-bruptash@gmail.com>
[-- Attachment #1: Type: text/plain, Size: 6275 bytes --]
Hi Brian,
On 04/09/2014 08:57 AM, Brian Ruptash wrote:
> I'm using a Cinterion PH8-P and an ofono driver I wrote for it, and
> having a problem with how src/gprs.c manages the GPRS attach status.
> You'll observe in the below trace that the modem deregisters/registers
> and GPRS detaches/attaches several times in a short span, however I'm
> intentionally inducing this in order to reproduce a problem that happens
> in the field; my use case is a handheld terminal where the user is
> constantly on the move, usually in an urban environment, so frequent
> signal/connection loss is observed as expected.
>
> Following is a trace of ofono events. Prior to this point the modem was
> happily network registered and attached, and now the modem loses both:
>
> 18:39:27.023 ph8.c:122 ph8_debug App: < \r\n+CGREG: 2\r\n\r\n+CREG: 2\r\n
> 18:39:27.030 gprs.c:2174 ofono_gprs_status_notify /ph8_1 status 2 powered
> 18:39:27.030 gprs.c:1503 gprs_attached_update /ph8_1 status 2 attached driver_attached changed active
> 18:39:27.030 gprs.c:1471 release_active_contexts /ph8_1 active
> 18:39:27.030 gprs-context.c:447 at_gprs_detach_shutdown cid 1
> 18:39:28.344 network.c:1349 ofono_netreg_status_notify /ph8_1 status 2 tech -1
> 18:39:28.358 gprs.c:1629 netreg_status_changed 2
> 18:39:28.358 gprs.c:1600 gprs_netreg_update /ph8_1 2 powered driver_attached
> 18:39:28.361 ph8.c:122 ph8_debug App: > AT+CGATT=0\r
> 18:39:28.412 ph8.c:122 ph8_debug App: < \r\nOK\r\n
> 18:39:28.413 gprs.c:1558 gprs_attach_callback /ph8_1 error = 0
> 18:39:28.431 ph8.c:122 ph8_debug App: > AT+CGREG?\r
> 18:39:28.442 ph8.c:122 ph8_debug App: < \r\n+CGREG: 1,2\r\n\r\nOK\r\n
So CGATT=0 succeeded, but the modem tells us it is 'searching'. It may
be a good idea to reset driver_attached to TRUE in this case.
> 18:39:28.443 gprs.c:1539 registration_status_cb /ph8_1 error 0 status 2 attaching
> 18:39:28.443 gprs.c:2174 ofono_gprs_status_notify /ph8_1 status 2 powered
> 18:39:28.443 gprs.c:1503 gprs_attached_update /ph8_1 status 2 active
>
> So now the modem is neither registered nor attached, and
> driver_attached=0.
>
> Now the modem network registers and attaches. Yes, it's odd that the
> modem attaches even though the prior +CGATT=0 completed; according to
> the modem vendor the reason for this is that +CGATT=0 doesn't take
> effect until the device has registered:
So this is really the issue, that the modem returns OK to a +CGATT=0,
even though it really should be returning an error. Does your vendor
provide a way to control the auto-attach logic?
>
> 18:39:29.972 ph8.c:122 ph8_debug App: < \r\n+CGREG: 1\r\n\r\n+CREG: 1,"0B2D","5F82F11"\r\n
> 18:39:29.972 gprs.c:2174 ofono_gprs_status_notify /ph8_1 status 1 powered
> 18:39:29.972 gprs.c:1503 gprs_attached_update /ph8_1 status 1 driver_attached changed active
> 18:39:29.983 network.c:1349 ofono_netreg_status_notify /ph8_1 status 1 tech 2
> 18:39:30.001 gprs.c:1629 netreg_status_changed 1
> 18:39:30.001 gprs.c:1600 gprs_netreg_update /ph8_1 1 powered driver_attached
>
> And now that the modem is both registered and attached,
> driver_attached=1.
>
> However the modem is now registered, so it obeys the +CGATT=0 and
> detaches. Note it returns +CGREG: 0 indicating it is detached and will
> not attach until instructed to do so:
That is bizarre. Would a quirk in the modem driver solve this? So for
Cinterion devices, if we try to detach while the device is searching,
return an error.
>
> 18:39:33.422 ph8.c:122 ph8_debug App: < \r\n+CGREG: 0\r\n
> 18:39:33.422 gprs.c:2174 ofono_gprs_status_notify /ph8_1 status 0 powered
> 18:39:33.422 gprs.c:1503 gprs_attached_update /ph8_1 status 0 driver_attached active
> 18:39:34.452 gprs-context.c:104 ppp_debug HDLC: < 0d 0a 4e 4f 20 43 41 52 52 49 45 52 0d 0a ..NO CARRIER..
> 18:39:37.809 gprs-context.c:183 ppp_disconnect state active, reason 6
> 18:39:37.809 gprs.c:2311 ofono_gprs_context_deactivated /ph8_1 update
> 18:39:37.813 gprs.c:1503 gprs_attached_update /ph8_1 status 0 driver_attached
>
> So I'm now in a state where the modem is registered and detached, but
> gprs->driver_attached=1. And since +CGATT=0 it will never attach.
driver_attached should not be 1. Perhaps the modem driver should be
quirked to call ofono_gprs_detached_notify in this case.
>
> The underlying reason for this seems to be that gprs->driver_attached
> follows the +CGATT state, but there's no logic to "synchronize" attach
> status changes against the network registration status. One could
> better argue the underlying reason is the modem's misbehaviour in
> attaching even though +CGATT=0, but it's simpler for me to address this
> in ofono than to (1) convince the modem vendor that it's their problem,
> (2) get them to release a firmware update, and (3) download the update
> in 20,000 devices :)
>
> Following is a proposed patch that seems to address this issue.
>
> -- Brian
>
> ---
> src/gprs.c | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
>
> diff --git a/src/gprs.c b/src/gprs.c
> index e379f7b..73edfb4 100644
> --- a/src/gprs.c
> +++ b/src/gprs.c
> @@ -2149,6 +2149,21 @@ void ofono_gprs_status_notify(struct ofono_gprs *gprs, int status)
>
> gprs->status = status;
>
> + if (status == NETWORK_REGISTRATION_STATUS_NOT_REGISTERED) {
> + if (gprs->flags & GPRS_FLAG_ATTACHING)
> + return;
> +
> + gprs->driver_attached = FALSE;
> +
> + if (gprs->powered == FALSE) {
> + gprs_attached_update(gprs);
> + return;
> + }
> +
> + gprs_netreg_update(gprs);
> + return;
> + }
> +
> if (status != NETWORK_REGISTRATION_STATUS_REGISTERED &&
> status != NETWORK_REGISTRATION_STATUS_ROAMING) {
> gprs_attached_update(gprs);
>
I'm wondering whether this should be solved in the driver. Some devices
signal CGREG:0 immediately followed by CGREG:2 when losing signal, so
this might result in some weird interactions on other devices.
Regards,
-Denis
prev parent reply other threads:[~2014-04-09 15:51 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-09 13:57 [PATCH] gprs: Attach status confusion Brian Ruptash
2014-04-09 15:51 ` Denis Kenzior [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53456C95.7000800@gmail.com \
--to=denkenz@gmail.com \
--cc=ofono@ofono.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox