[Home]

Summary:ASTERISK-08799: NI-2 'Operator System Access' IE (0x01) not implemented?
Reporter:kb1_kanobe2 (kb1_kanobe2)Labels:
Date Opened:2007-02-13 18:45:54.000-0600Date Closed:2011-06-07 14:08:04
Priority:MinorRegression?No
Status:Closed/CompleteComponents:Core/General
Versions:Frequency of
Occurrence
Related
Issues:
Environment:Attachments:
Description:Interfacing with a Nortel CS1000, where the Nortel box is in the role of CPE and the link is configured as NI-2, callers attempting to dial '0' for operator service on the CS1000 cause an 'Operator System Access' element to be transmitted towards the Asterisk server in the setup frame instead of a simple '0' Called Number element. Asterisk displays an 'Unknown IE' error and the call attempts to proceed with a 'null' extension, resulting in a dialplan failure.

As the CS1000 is essentially fixed in this regard it seems like the fastest solution to accommodate this behavioral quirk would be to define a pair of 'translations' in zapata.conf to interpret references to the 'Operator System Access/Principal' and 'Operator System Access/Alternate' IEs back into to Extension numbers before proceeding with handling the inbound call.

I noticed there's also reference to IE 29 (Date/Time) being unknown, but I don't think that's critical to the issue at hand.

For background, I'm told that Telus (our local carrier) has to maintain a separate switch profile specifically to handle interfacing with CS1000's and their use of D-channel messages for initiating operator calls.


****** ADDITIONAL INFORMATION ******

Console trace of ISDN messages from offending call
--------------------------------------------------
astpbx-cs1000*CLI>
< Protocol Discriminator: Q.931 (8)  len=34
< Call Ref: len= 2 (reference 4096/0x1000) (Originator)
< Message type: SETUP (5)
< [04 03 80 90 a2]
< Bearer Capability (len= 5) [ Ext: 1  Q.931 Std: 0  Info transfer capability: Speech (0)
<                              Ext: 1  Trans mode/rate: 64kbps, circuit-mode (16)
<                              Ext: 1  User information layer 1: u-Law (34)
< [18 03 a9 83 88]
< Channel ID (len= 5) [ Ext: 1  IntID: Implicit, PRI Spare: 0, Exclusive Dchan: 0
<                        ChanSel: Reserved
<                       Ext: 1  Coding: 0   Number Specified   Channel Type: 3
<                       Ext: 1  Channel: 8 ]
< [1e 02 81 83]
< Progress Indicator (len= 4) [ Ext: 1  Coding: CCITT (ITU) standard (0) 0: 0   Location: Private network serving the local user (1)
<                               Ext: 1  Progress Description: Calling equipment is non-ISDN. (3) ]
< [6c 09 41 80 38 38 35 36 38 30 30]
< Calling Number (len=11) [ Ext: 0  TON: Subscriber Number (4)  NPI: ISDN/Telephony Numbering Plan (E.164/E.163) (1)
<                           Presentation: Presentation permitted, user number not screened (0) '8856800' ]
< [95]
< Locking Shift (len=01): Requested codeset 5
< [1d 01 80]
!! < Unknown IE 1309 (len = 3)
-- Making new call for cr 4096
-- Processing Q.931 Call Setup
-- Processing IE 4 (cs0, Bearer Capability)
-- Processing IE 24 (cs0, Channel Identification)
-- Processing IE 30 (cs0, Progress Indicator)
-- Processing IE 108 (cs0, Calling Party Number)
-- Processing IE 29 (cs5, Unknown Information Element)
!! Unknown IE 29 (cs5, Unknown Information Element)

   -- Extension '' in context 'in-cs1000' from '8856800' does not exist.  Rejecting call on channel 0/8, span 1

NEW_HANGUP DEBUG: Calling q931_hangup, ourstate Call Present, peerstate Call Initiated
> Protocol Discriminator: Q.931 (8)  len=9
> Call Ref: len= 2 (reference 4096/0x1000) (Terminator)
> Message type: RELEASE COMPLETE (90)
> [08 02 81 81]
> Cause (len= 4) [ Ext: 1  Coding: CCITT (ITU) standard (0) 0: 0   Location: Private network serving the local user (1)
>                  Ext: 1  Cause: Unallocated (unassigned) number (1), class = Normal Event (0) ]
NEW_HANGUP DEBUG: Calling q931_hangup, ourstate Null, peerstate Null
NEW_HANGUP DEBUG: Destroying the call, ourstate Null, peerstate Null


Relevant portion of zapata.conf
-------------------------------
; CS1000 (Field Road)
context=in-cs1000
group=1
callerid=asreceived
usecallerid=yes
hidecallerid=no
usecallingpres=yes
switchtype=national
pridialplan=unknown
signalling=pri_net
channel => 1-23


Relevant portion of Q.931
-------------------------

Codeset 5 (National-specific) Bellcore National ISDN

Q931: IE Operator System Access (OSA 5/1D)
- Octet 1: IE type
bits 8-1 1D H
- Octet 3: mandatory
bits 7-3 0 0 0 0 0: Unspecified
bits 2-1 Type of access
IE Field: Type of access (OSA)
bits 2 1 Notification description
0 0 Public/principal: default operator system.
0 1 Public/ alternate: operator system determined by user subscription.
Comments:By: kb1_kanobe2 (kb1_kanobe2) 2007-02-19 01:40:40.000-0600

For further reference, apparently the CS1000 (running release 4.5) supports two modes of Operator System Access requests over NI-2, 'Standard' and 'AT&T'. Traces of calls coming into the Asterisk server acting in the pri_net role, from a calling party dialing '0' on their phone in each mode are as follows:

OSA 'Standard'
--------------

< Protocol Discriminator: Q.931 (8) len=70
< Call Ref: len= 2 (reference 7937/0x1F01) (Originator)
< Message type: SETUP (5)
< [04 03 80 90 a2]
< Bearer Capability (len= 5) [ Ext: 1 Q.931 Std: 0 Info transfer capability: Speech (0)
< Ext: 1 Trans mode/rate: 64kbps, circuit-mode (16)
< Ext: 1 User information layer 1: u-Law (34)
< [18 03 a9 83 83]
< Channel ID (len= 5) [ Ext: 1 IntID: Implicit, PRI Spare: 0, Exclusive Dchan: 0
< ChanSel: Reserved
< Ext: 1 Coding: 0 Number Specified Channel Type: 3
< Ext: 1 Channel: 3 ]
< [1c 22 9f 8b 01 00 a1 1c 02 02 01 00 02 01 00 80 13 53 43 52 44 20 54 65 6c 65 70 68 6f 6e 65 20 52 6f 6f 6d]
< Facility (len=36, codeset=0) [ 0x9f, 0x8b, 0x01, 0x00, 0xa1, 0x1c, 0x02, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x80, 0x13, 'SCRD', 0x20, 'Telephone', 0x20, 'Room' ]
< [1e 02 81 83]LI>
< Progress Indicator (len= 4) [ Ext: 1 Coding: CCITT (ITU) standard (0) 0: 0 Location: Private network serving the local user (1)
< Ext: 1 Progress Description: Calling equipment is non-ISDN. (3) ]
< [6c 09 41 80 38 38 35 36 38 30 30]
< Calling Number (len=11) [ Ext: 0 TON: Subscriber Number (4) NPI: ISDN/Telephony Numbering Plan (E.164/E.163) (1)
< Presentation: Presentation permitted, user number not screened (0) '8856800' ]
< [95]-cs1000*CLI>
< Locking Shift (len=01): Requested codeset 5
< [1d 01 80]0*CLI>
!! < Unknown IE 1309 (len = 3)
-- Making new call for cr 7937
-- Processing Q.931 Call Setup
-- Processing IE 4 (cs0, Bearer Capability)
-- Processing IE 24 (cs0, Channel Identification)
-- Processing IE 28 (cs0, Facility)
Handle Q.932 ROSE Invoke component
-- Processing IE 30 (cs0, Progress Indicator)
-- Processing IE 108 (cs0, Calling Party Number)
-- Processing IE 29 (cs5, Unknown Information Element)
!! Unknown IE 29 (cs5, Unknown Information Element)
   -- Extension '' in context 'in-cs1000' from '8856800' does not exist. Rejecting call on channel 0/3, span 1
NEW_HANGUP DEBUG: Calling q931_hangup, ourstate Call Present, peerstate Call Initiated
> Protocol Discriminator: Q.931 (8) len=9
> Call Ref: len= 2 (reference 7937/0x1F01) (Terminator)
> Message type: RELEASE COMPLETE (90)
> [08 02 81 81]LI>
> Cause (len= 4) [ Ext: 1 Coding: CCITT (ITU) standard (0) 0: 0 Location: Private network serving the local user (1)
> Ext: 1 Cause: Unallocated (unassigned) number (1), class = Normal Event (0) ]
NEW_HANGUP DEBUG: Calling q931_hangup, ourstate Null, peerstate Null
NEW_HANGUP DEBUG: Destroying the call, ourstate Null, peerstate Null




'OSA' AT&T
----------

< Protocol Discriminator: Q.931 (8) len=73
< Call Ref: len= 2 (reference 8193/0x2001) (Originator)
< Message type: SETUP (5)
< [04 03 80 90 a2]
< Bearer Capability (len= 5) [ Ext: 1 Q.931 Std: 0 Info transfer capability: Speech (0)
< Ext: 1 Trans mode/rate: 64kbps, circuit-mode (16)
< Ext: 1 User information layer 1: u-Law (34)
< [18 03 a9 83 82]
< Channel ID (len= 5) [ Ext: 1 IntID: Implicit, PRI Spare: 0, Exclusive Dchan: 0
< ChanSel: Reserved
< Ext: 1 Coding: 0 Number Specified Channel Type: 3
< Ext: 1 Channel: 2 ]
< [1c 22 9f 8b 01 00 a1 1c 02 02 01 00 02 01 00 80 13 53 43 52 44 20 54 65 6c 65 70 68 6f 6e 65 20 52 6f 6f 6d]
< Facility (len=36, codeset=0) [ 0x9f, 0x8b, 0x01, 0x00, 0xa1, 0x1c, 0x02, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x80, 0x13, 'SCRD', 0x20, 'Telephone', 0x20, 'Room' ]
< [1e 02 81 83]
< Progress Indicator (len= 4) [ Ext: 1 Coding: CCITT (ITU) standard (0) 0: 0 Location: Private network serving the local user (1)
< Ext: 1 Progress Description: Calling equipment is non-ISDN. (3) ]
< [20 02 00 c5]
< Network-Specific Facilities (len= 2) [ Unknown ]
< [6c 09 41 80 38 38 35 36 38 30 30]
< Calling Number (len=11) [ Ext: 0 TON: Subscriber Number (4) NPI: ISDN/Telephony Numbering Plan (E.164/E.163) (1)
< Presentation: Presentation permitted, user number not screened (0) '8856800' ]
< [70 01 a1]
< Called Number (len= 3) [ Ext: 1 TON: National Number (2) NPI: ISDN/Telephony Numbering Plan (E.164/E.163) (1) '' ]
-- Making new call for cr 8193
-- Processing Q.931 Call Setup
-- Processing IE 4 (cs0, Bearer Capability)
-- Processing IE 24 (cs0, Channel Identification)
-- Processing IE 28 (cs0, Facility)
Handle Q.932 ROSE Invoke component
-- Processing IE 30 (cs0, Progress Indicator)
-- Processing IE 32 (cs0, Network-Specific Facilities)
-- Processing IE 108 (cs0, Calling Party Number)
-- Processing IE 112 (cs0, Called Party Number)
   -- Extension '' in context 'in-cs1000' from '8856800' does not exist. Rejecting call on channel 0/2, span 1
NEW_HANGUP DEBUG: Calling q931_hangup, ourstate Call Present, peerstate Call Initiated
> Protocol Discriminator: Q.931 (8) len=9
> Call Ref: len= 2 (reference 8193/0x2001) (Terminator)
> Message type: RELEASE COMPLETE (90)
> [08 02 81 81]
> Cause (len= 4) [ Ext: 1 Coding: CCITT (ITU) standard (0) 0: 0 Location: Private network serving the local user (1)
> Ext: 1 Cause: Unallocated (unassigned) number (1), class = Normal Event (0) ]
NEW_HANGUP DEBUG: Calling q931_hangup, ourstate Null, peerstate Null
NEW_HANGUP DEBUG: Destroying the call, ourstate Null, peerstate Null


Notice 'AT&T' mode uses a FACILITY message instead of the OSA IE element.

By: kb1_kanobe2 (kb1_kanobe2) 2007-02-19 01:45:46.000-0600

I have found a workaround for the zero-length called number situation, however it has raised an issue of its own. The workaround and related issue are logged in Bug  ASTERISK-9039099 [Calls arriving into the dialplan from chan_zap with a zero length Called Number IE fail to goto 's' priority of assigned context].

In general terms, so long as the Calling Party simply wishes to dial the operator it's possible to match the null extension and translate it to a '0'. If however the Calling Party dials a multidigit operator assisted call (ie. 01115551212) then the 0 is still stripped, converted to an OSA IE and the remainder transmitted as the Called Number. In turn this will be matched as a simple Called Number when the incoming context is entered and the 'operator-ness' lost.

In my original bug report I suggested 'translations' may be the quickest way to implement the missing OSA IE. The observed behaviour suggests defining the two OSA IE's as configurable 'preappenditions' that are inserted back on to the front of the Called Number before going onwards into the dialplan may be a more complete solution.

By: Tilghman Lesher (tilghman) 2007-02-19 10:00:03.000-0600

You may not have realized this, but it is fully possible to create a NULL extension in the dialplan, i.e.

exten => ,1,Goto(operatorcontext,s,1)

By: Matthew Fredrickson (mattf) 2007-05-25 10:12:51

Does anybody want to add support for this IE in libpri?

By: Matthew Fredrickson (mattf) 2007-06-06 17:21:57

Suspended until someone has a patch.