Re: [PATCH] SMSC AT - detecting dead SIMs

"Hillel" <[email protected]>
Newsgroups gmane.comp.mobile.kannel.devel
Message-ID <2029627626.12289.1240764468863.JavaMail.james@messaging.ecommunicate.biz>
Hi Alex,

I assume you would accept Stripe's patch if the following are done:

1. The Kannel User guide should have the reset-string in
<literal>reset-string</literal> replaced with max-error-count.
2. Since the reason the connection is dead is already stored in why_killed
(SMSCConn struct), it should be exported via a status call.

Please confirm if there is anything else?

Rgds


Date: Fri, 17 Apr 2009 14:17:58 +0200
From: Alexander Malysh <[email protected]>
Subject: Re: [PATCH] SMSC AT - detecting dead SIMs
To: Stipe Tolj <[email protected]>
Cc: kannel_dev_mailinglist <[email protected]>
Message-ID:
	<[email protected]>
Content-Type: text/plain; charset="iso-8859-1"

Hi,
patch looks OK except userguide:
--- doc/userguide/userguide.xml 15 Feb 2009 23:13:55 -0000      1.345
+++ doc/userguide/userguide.xml 8 Apr 2009 19:42:07 -0000
@@ -3708,8 +3708,13 @@
       <entry><literal>integer</literal></entry>
       <entry valign="bottom">
          Maximal error count for opening modem device or initializing of
the modem before
-          <literal>reset-string</literal> will be executed. This is useful
when modem crashed and needs
-          hard reset. Default disabled.
+          <literal>reset-string</literal> will be executed.
                       ^^^^^^^^^^^ it should be max-error-count

+          This is useful when modem crashed and needs hard reset. Default
disabled.
+          Also used as maximum value for successive generic errors from the
modem while
+          PDUs are passed. If we hit this thresshold we will assume that
the SIM card
+          in the modem is not functional anymore, and shutdown the smsc
group. The
+          HTTP admin status page will show this modem as 'dead' in the
status. So
+          corresponding system admins and/or monitoring components can take
action.
       </entry></row>

Thanks,
Alex

P.S. As for the why connection is dead we have already why_killed in
SMSCConn struct. We should just export it via
status call.

2009/4/8 Stipe Tolj <[email protected]>

> Hi list,
>
> we had a recent demand in a GSM modem pool to detect SIM cards in the GSM
> modems
> that have been "locked/blocked" by the operator, and we get successive
> generic
> errors while sending PDUs to the modem.
>
> As this can occur occasionally for working modems, i.e. when bearerbox
> injects
> the PDU "too fast" while the modem is still in operation, we needed a
> heuristic
> to detect that state. As we can't do that on the one time event error.
>
> We use the privdata->retry variable, that is NOT used by any other pat of
> the
> code (why??) to increment the value successively. If we hit the
> 'max-error-count' threshold in a row, we assume we have a dead SIM card
and
> take
> the smsc group down.
>
> Votes for CVS commit and comments please.
>
> Thanks,
> Stipe
>
> --
> -------------------------------------------------------------------
> K?lner Landstrasse 419
> 40589 D?sseldorf, NRW, Germany
>
> tolj.org system architecture      Kannel Software Foundation (KSF)
> http://www.tolj.org/              http://www.kannel.org/
>
> mailto:st_{at}_tolj.org <st_%7Bat%7D_tolj.org>           mailto:
> stolj_{at}_kannel.org <stolj_%7Bat%7D_kannel.org>
> -------------------------------------------------------------------
>
> ### Eclipse Workspace Patch 1.0
> #P gateway-cvs-head
> Index: gw/smsc/smsc_at.c
> ===================================================================
> RCS file: /home/cvs/gateway/gw/smsc/smsc_at.c,v
> retrieving revision 1.57
> diff -u -r1.57 smsc_at.c
> --- gw/smsc/smsc_at.c   15 Feb 2009 19:49:26 -0000      1.57
> +++ gw/smsc/smsc_at.c   8 Apr 2009 19:42:11 -0000
> @@ -1598,6 +1598,7 @@
>     privdata->pin = cfg_get(cfg, octstr_imm("pin"));
>     privdata->pin_ready = 0;
>     privdata->conn = conn;
> +    privdata->retry = 0;
>     privdata->phase2plus = 0;
>     privdata->validityperiod = cfg_get(cfg, octstr_imm("validityperiod"));
>     if (cfg_get_integer((long *) &privdata->max_error_count,  cfg,
> octstr_imm("max-error-count")) == -1)
> @@ -2287,7 +2288,26 @@
>             if (ret != 0) {
>                 bb_smscconn_send_failed(privdata->conn, msg,
>                         SMSCCONN_FAILED_TEMPORARILY,
> octstr_create("ERROR"));
> -            }else{
> +
> +                /*
> +                 * If a SIM card is locked by the GSM operator, we still
> can
> +                 * send PDUs to the modem, but we will constantly get
> ERROR
> +                 * as response. If we get this 'max-error-count' times,
> then
> +                 * we consider this route as NO viable route and shutdown
> the
> +                 * smsc group.
> +                 */
> +                if (ret == -1) {
> +                    privdata->retry++;
> +                    if (privdata->max_error_count > 0 &&
> +                        privdata->retry > privdata->max_error_count) {
> +                        at2_shutdown_cb(privdata->conn, 0);
> +                    }
> +                }
> +
> +            } else {
> +                /* reset error counter */
> +                privdata->retry = 0;
> +
>                 /* store DLR message if needed for SMSC generated delivery
> reports */
>                 if (DLR_IS_ENABLED_DEVICE(msg->sms.dlr_mask)) {
>                     if (msg_id == -1)
> Index: doc/userguide/userguide.xml
> ===================================================================
> RCS file: /home/cvs/gateway/doc/userguide/userguide.xml,v
> retrieving revision 1.345
> diff -u -r1.345 userguide.xml
> --- doc/userguide/userguide.xml 15 Feb 2009 23:13:55 -0000      1.345
> +++ doc/userguide/userguide.xml 8 Apr 2009 19:42:07 -0000
> @@ -3708,8 +3708,13 @@
>        <entry><literal>integer</literal></entry>
>        <entry valign="bottom">
>           Maximal error count for opening modem device or initializing of
> the modem before
> -          <literal>reset-string</literal> will be executed. This is
useful
> when modem crashed and needs
> -          hard reset. Default disabled.
> +          <literal>reset-string</literal> will be executed.
> +          This is useful when modem crashed and needs hard reset. Default
> disabled.
> +          Also used as maximum value for successive generic errors from
> the modem while
> +          PDUs are passed. If we hit this thresshold we will assume that
> the SIM card
> +          in the modem is not functional anymore, and shutdown the smsc
> group. The
> +          HTTP admin status page will show this modem as 'dead' in the
> status. So
> +          corresponding system admins and/or monitoring components can
> take action.
>        </entry></row>
>
>      <row><entry><literal>host</literal></entry>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.kannel.org/pipermail/devel/attachments/20090417/f8650e29/attachm
ent-0001.html>

------------------------------

_______________________________________________
devel mailing list
[email protected]
http://www.kannel.org/mailman/listinfo/devel


End of devel Digest, Vol 32, Issue 26
*************************************
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.