ISDN4BSD - Dropped Calls

Hans Petter mc467741 at c2i.net
Sat Jan 6 13:56:56 PST 2007


   Hi Oliver,
   On Sat, 06 Jan 2007 22:20:51 +0100
   Oliver von Bueren wrote:
   > Hello Hans Petter
   >
   > Thanks for pointing me to the reason for the
   >STATUS_ENQUIRY messages with an invalid call reference.
   >I've checked the behaviour after changing the code in
   > dss1_l2_get_mbuf to not append any data but send the
   >packet on without the STATUS_ENQUIRY attached. This did
   >not change the overall result, except of course that the
   >releasing of the "fake" call does not happen any more.
   >Kind of a prove that this method used here does not
   >confuse the PBX.
   >
   > As you wrote, a STATUS_ENQUIRY (I'm now talking about
   >the one for the real call) needs to be answered by the
   >PBX, which according to the trace, it does not. No idea
   >why this is, I'll try to get a trace form the PBX.< br>>
   > The strange thing is, that a lot of other applications
   >connected to that PBX/port run without problem, even a
   >FreeBSD 4.3 with the then-current i4b and some voice
   >response system. Amongst the other working things are
   >hardware phones/modems and even an active Card (Eicon
   >Diva Pro 2.0) running under windows with the sort-of
   >cygwin-port of Asterisk (from
   >http://www.asteriskwin32.com/) runs without any problems.
   >But as you can guess, I'd like to get away from that
   >stone-age Asterisk version and change to my FreeBSD
   >server.
   Most ISDN equipment I have seen never queries for STATUS, whatsoever.
   So maybe your provider did not see a reason to support that.
   >
   > If I find anything, I'll keep you posted.
   > If you've any ideas on how to fix my problem, drop me a
   >note.
   I could implement an option that allows you to disable checking of
   status, but I really don't like to do that.
   In "cd_set_state()" you have the following code:
           cd->state = newstate;
           /* re-start timeout;
            * the timeout is increased when L1 is not activated
            * the timeout is always running while the CD is allocated
            */
           __callout_reset(&cd->set_state_callout,
                           (L3_STATES_TIMEOUT_DELAY[newstate]*hz) +
                           (sc->L1_activity ? 0 : L1_ACTIVATION_TIME),
      & nbsp;                    (void *)(void *)&cd_set_state_timeout,
   cd);
           if(send_status_enquiry)
           {
               /* need to check status regularly */
               dss1_l3_tx_status_enquiry(cd);
           }
   You can try putting:
   if (send_status_enquiry) {
       newstate--;
   }
   Before:
   cd->state = newstate;
   That will prevent the status expiry timer from elapsing.
   Yours
   --HPS


More information about the freebsd-isdn mailing list