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
*************************************


Reply via email to