[asterisk-dev] ISDN Protocol Conformity (libpri)

Ing. Stefano Blasco stefano.blasco at opentlc.it
Mon Jun 28 06:12:06 CDT 2010


Hi all,
we are making ISDN (PRI and BRI) Protocol compatibility test with a
Telco Provider to get ISDN compatibility approval.
We are using Debian stable with asterisk version 1.6.2.8 dahdi 2.3.0.1
and libpri 1.4.11.2. The cards that we are using are loaded with dahdi
kernel modules for PRI (wct4xxp for Openvox D410E) and for BRI (wcb4xxp
for Openvox B200E).
Now i wanted to share with you the current situation even in order to
get support and pass these tests (and to improve asterisk compatibility).

These are the problems:

HIGH priority:

1. In the ISDN SETUP message the called number must be limited to 20
digits, and when you have to send more than 20 digits they must be
overlapped using other information units (like it is done in overlap
dial). During the test, instead, we have sent 25 digit together and this
is a negative result.

2. Channel restart problem (only for PRI): the channel restart request
is right when the tester machine answer the restart for a single channel
or for the entire span, but when it asks the restart for a group of
channels we have this behaviour:
    - when the restart has one channel identifier with more channels
inside we restart only the first
    - when the restart has more channel identifier with one channel
inside we restart only the last

3. When asterisk receive a STATUS ENQUIRY with global call reference it
answers with a RELEASE COMPLETE, and this is wrong because we have to
answer with a STATUS message with invalid call reference: in this case i
wanted to show a possible solution in file q931.c at line 7169 instead of
          case Q931_STATUS_ENQUIRY:
                if (c->newcall) {
                        q931_release_complete(ctrl, c,
PRI_CAUSE_INVALID_CALL_REFERENCE);
                } else
                        q931_status(ctrl,c,
PRI_CAUSE_RESPONSE_TO_STATUS_ENQUIRY);
                break;
    we could use:
          case Q931_STATUS_ENQUIRY:
                if (c->newcall) {
                        if(c->cr == Q931_DUMMY_CALL_REFERENCE){
                              q931_status(ctrl,c,
PRI_CAUSE_INVALID_CALL_REFERENCE); 
                              }
                        else{
                              q931_release_complete(ctrl, c,
PRI_CAUSE_INVALID_CALL_REFERENCE);
                        }

                } else
                        q931_status(ctrl,c,
PRI_CAUSE_RESPONSE_TO_STATUS_ENQUIRY);
                break;
    what do you think about it?

4. The Connected Party Number is missing totally: what can we do for it?



LOW priority:

1. Asterisk doesn't send a release when we receive a DISCONNET with
Cause 17 User Busy. Maybe there is some busy detection or call waiting
or transfer on busy to deactivate?

2. When asterisk send a call and the Telco provider tries to use the
channel 16 (signalling channel) asterisk trusts the Telco and tries to
use the channel. This is not so important because it is a Telco mistake,
but it would be better to solve avoiding signalling channel usage.

3. Asterisk should reject a call SETUP when the channel identification
is to 'no channel'. maybe this is related to "imediate=yes"?


We are trying to solve these issues, and we ask you some help!

Thank you very much
Stefano Blasco




More information about the asterisk-dev mailing list