[Asterisk-Users] TDM400 FXO stops handling outgoing calls, but still accepts incoming?

William R Sowerbutts will at sowerbutts.com
Sun Nov 21 12:18:33 MST 2004


I have a bit of a weird problem that I'm having great trouble debugging.

I have a TDM400P PCI card with two FXO and two FXS modules. Both FXO modules
are connected to BT lines here in the UK. Both BT lines have V23 Caller-ID,
which works fine with Asterisk. Both asterisk and zaptel are fresh from CVS.

Both FXO modules (channels 3 and 4) are in "group 1" for outgoing calls.

My calls are placed like this: Dial(Zap/g1/${EXTEN})

My understanding is that the first free channel in the group should be used to
place calls. Much of the time, this is the case. However, after some seemingly
random time interval, channel 3 stops accepting outgoing calls, even if the
line is idle -- and all calls go out on channel 4. If channel 4 is busy,
outgoing calls are rejected (I hear a congestion tone, and my Cisco 7960 says
"Reorder") even though channel 3 is idle.

If I then call channel 3's number from another line (eg, my mobile), the
incoming call is accepted entirely as normal. When the incoming call is
completed, channel 3 will handle outgoing calls for a while. It invariably
breaks itself, though.

I've tested in two different PCs, same results.

One point, not sure if it's related: In order to make remote disconnect
supervision work with my BT line, I've had to modify the "wctdm" (previously
"wcfxs") driver slightly; I had to raise BATT_THRESH to 8.  Without this
modification, the FXO modules cannot detect the loss of battery used to
indicate that the remote party has terminated the call. Ideally I'd prefer to
not make this modification, but without it remote disconnect supervision
doesn't work.

I assume that some event is happening to tie up the channel. How can I get 
Asterisk to dump a full log of all events on the zap channels for debugging 
purposes?

Any help would be greatly appreciated.

Cheers,

Will

_________________________________________________________________________
William R Sowerbutts                                  will at sowerbutts.com
"Carpe post meridiem"                               http://sowerbutts.com
         main(){char*s=">#=0> ^#X@#@^7=",c=0,m;for(;c<15;c++)for
         (m=-1;m<7;putchar(m++/6&c%3/2?10:s[c]-31&1<<m?42:32));}  

-------------- next part --------------
;
; Zapata telephony interface
;
; Configuration file

[trunkgroups]
;
; Trunk groups are used for NFAS or GR-303 connections.
;
; Group: Defines a trunk group.  
;        group => <trunkgroup>,<dchannel>[,<backup1>...]
;
;        trunkgroup  is the numerical trunk group to create
;        dchannel    is the zap channel which will have the 
;                    d-channel for the trunk.
;        backup1     is an optional list of backup d-channels.
;
;trunkgroup => 1,24,48
;
; Spanmap: Associates a span with a trunk group
;        spanmap => <zapspan>,<trunkgroup>[,<logicalspan>]
;
;        zapspan     is the zap span number to associate
;        trunkgroup  is the trunkgroup (specified above) for the mapping
;        logicalspan is the logical span number within the trunk group to use.
;                    if unspecified, no logical span number is used.
;
;spanmap => 1,1,1
;spanmap => 2,1,2
;spanmap => 3,1,3
;spanmap => 4,1,4

[channels]
;
; Default language
;
;language=en
;
; Default context
;
context=default
;
; Switchtype:  Only used for PRI.
;
; national:	  National ISDN 2 (default)
; dms100:	  Nortel DMS100
; 4ess:           AT&T 4ESS
; 5ess:	          Lucent 5ESS
; euroisdn:       EuroISDN
; ni1:            Old National ISDN 1
;
switchtype=national
;
; Some switches (AT&T especially) require network specific facility IE
; supported values are currently 'none', 'sdn', 'megacom', 'accunet'
;
;nsf=none
;
; PRI Dialplan:  Only RARELY used for PRI.
;
; unknown:        Unknown
; private:        Private ISDN
; local:          Local ISDN
; national:	  National ISDN
; international:  International ISDN
;
;pridialplan=national
;
; Overlap dialing mode (sending overlap digits)
;
;overlapdial=yes
;
; Signalling method (default is fxs).  Valid values:
; em:      E & M
; em_w:    E & M Wink
; featd:   Feature Group D (The fake, Adtran style, DTMF)
; featdmf: Feature Group D (The real thing, MF (domestic, US))
; featb:   Feature Group B (MF (domestic, US))
; fxs_ls:  FXS (Loop Start)
; fxs_gs:  FXS (Ground Start)
; fxs_ks:  FXS (Kewl Start)
; fxo_ls:  FXO (Loop Start)
; fxo_gs:  FXO (Ground Start)
; fxo_ks:  FXO (Kewl Start)
; pri_cpe: PRI signalling, CPE side
; pri_net: PRI signalling, Network side
; gr303fxoks_net: GR-303 Signalling, FXO Loopstart, Network side
; gr303fxsks_cpe: GR-303 Signalling, FXS Loopstart, CPE side
; sf:	      SF (Inband Tone) Signalling
; sf_w:	      SF Wink
; sf_featd:   SF Feature Group D (The fake, Adtran style, DTMF)
; sf_featdmf: SF Feature Group D (The real thing, MF (domestic, US))
; sf_featb:   SF Feature Group B (MF (domestic, US))
; The following are used for Radio interfaces:
; fxs_rx:  Receive audio/COR on an FXS kewlstart interface (FXO at the channel bank)
; fxs_tx:  Transmit audio/PTT on an FXS loopstart interface (FXO at the channel bank)
; fxo_rx:  Receive audio/COR on an FXO loopstart interface (FXS at the channel bank)
; fxo_tx:  Transmit audio/PTT on an FXO groundstart interface (FXS at the channel bank)
; em_rx:   Receive audio/COR on an E&M interface (1-way)
; em_tx:   Transmit audio/PTT on an E&M interface (1-way)
; em_txrx: Receive audio/COR AND Transmit audio/PTT on an E&M interface (2-way)
; em_rxtx: same as em_txrx (for our dyslexic friends)
; sf_rx:   Receive audio/COR on an SF interface (1-way)
; sf_tx:   Transmit audio/PTT on an SF interface (1-way)
; sf_txrx: Receive audio/COR AND Transmit audio/PTT on an SF interface (2-way)
; sf_rxtx: same as sf_txrx (for our dyslexic friends)
;
signalling=fxo_ks
;
; A variety of timing parameters can be specified as well
; Including:
;    prewink:     Pre-wink time (default 50ms)
;    preflash:    Pre-flash time (default 50ms)
;    wink:        Wink time (default 150ms)
;    flash:       Flash time (default 750ms)
;    start:       Start time (default 1500ms)
;    rxwink:      Receiver wink time (default 300ms)
;    rxflash:     Receiver flashtime (default 1250ms)
;    debounce:    Debounce timing (default 600ms)
;
rxwink=300		; Atlas seems to use long (250ms) winks
;
; Whether or not to do distinctive ring detection on FXO lines
;
;usedistinctiveringdetection=yes

;
; Whether or not to use caller ID
;
usecallerid=yes
cidsignalling=v23
cidstart=polarity
;
; Whether or not to hide outgoing caller ID (Override with *67 or *82)
;
hidecallerid=no
;
; Whether or not to enable call waiting on FXO lines
;
callwaiting=no
;
; Whether or not restrict outgoing caller ID (will be sent as ANI only, not available for the user)
; Mostly use with FXS ports
;
;restrictcid=no
;
; Whether or not use the caller ID presentation for the outgoing call that the calling switch is sending
;
usecallingpres=yes
;
; Support Caller*ID on Call Waiting
;
callwaitingcallerid=no
;
; Support three-way calling
;
threewaycalling=no
;
; Support flash-hook call transfer (requires three way calling)
;
transfer=no
;
; Support call forward variable
;
cancallforward=yes
;
; Whether or not to support Call Return (*69)
;
callreturn=no
;
; Stutter dialtone support: If a mailbox is specified without a voicemail 
; context, then when voicemail is received in a mailbox in the default 
; voicemail context in voicemail.conf, taking the phone off hook will 
; cause a stutter dialtone instead of a normal one. 
;
; If a mailbox is specified *with* a voicemail context, the same will 
; result if voicemail recieved in mailbox in the specified voicemail 
; context
;
; for default voicemail context, the example below is fine:
;
;mailbox=1234
;
; for any other voicemail context, the following will produce the 
; stutter tone:
;
;mailbox=1234 at context 
;
; Enable echo cancellation 
; Use either "yes", "no", or a power of two from 32 to 256 if you wish
; to actually set the number of taps of cancellation.
;
; best so far: 64, 128 also seems ok?
echocancel=64
;
; Generally, it is not necessary (and in fact undesirable) to echo cancel
; when the circuit path is entirely TDM.  You may, however, reverse this
; behavior by enabling the echo cancel during pure TDM bridging below.
;
echocancelwhenbridged=yes
;
; In some cases, the echo canceller doesn't train quickly enough and there
; is echo at the beginning of the call.  Enabling echo training will cause
; asterisk to briefly mute the channel, send an impulse, and use the impulse
; response to pre-train the echo canceller so it can start out with a much
; closer idea of the actual echo.  Value may be "yes", "no", or a number of
; milliseconds to delay before training (default = 400)
;
echotraining=yes
echotraining=800
;
; If you are having trouble with DTMF detection, you can relax the
; DTMF detection parameters.  Relaxing them may make the DTMF detector
; more likely to have "talkoff" where DTMF is detected when it
; shouldn't be.
;
;relaxdtmf=yes
;
; You may also set the default receive and transmit gains (in dB)
;
rxgain=5.0
txgain=6.5
;
; Logical groups can be assigned to allow outgoing rollover.  Groups
; range from 0 to 31, and multiple groups can be specified.
;
group=1
;
; Ring groups (a.k.a. call groups) and pickup groups.  If a phone is ringing
; and it is a member of a group which is one of your pickup groups, then
; you can answer it by picking up and dialing *8#.  For simple offices, just
; make these both the same
;
callgroup=1
pickupgroup=1

;
; Specify whether the channel should be answered immediately or
; if the simple switch should provide dialtone, read digits, etc.
;
immediate=no
;
; CallerID can be set to "asreceived" or a specific number
; if you want to override it.  Note that "asreceived" only
; applies to trunk interfaces.
;
;callerid=2564286000
;
; AMA flags affects the recording of Call Detail Records.  If specified
; it may be 'default', 'omit', 'billing', or 'documentation'.
;
;amaflags=default
;
; Channels may be associated with an account code to ease
; billing
;
;accountcode=lss0101
;
; ADSI (Analog Display Services Interface) can be enabled on a per-channel
; basis if you have (or may have) ADSI compatible CPE equipment
;
;adsi=yes
;
; On trunk interfaces (FXS) and E&M interfaces (E&M, Wink, Feature Group D
; etc, it can be useful to perform busy detection either in an effort to 
; detect hangup or for detecting busies
;
busydetect=no
;
; If busydetect is enabled, is also possible to specify how many
; busy tones to wait before hanging up. The default is 4, but
; better results can be achieved if set to 6 or even 8. Mind that
; higher the number, more time is needed to hangup a channel, but
; lower is probability to get random hangups
;
busycount=6
;
; On trunk interfaces (FXS) it can be useful to attempt to follow the progress
; of a call through RINGING, BUSY, and ANSWERING.   If turned on, call
; progress attempts to determine answer, busy, and ringing on phone lines.
; This feature is HIGHLY EXPERIMENTAL and can easily detect false answers,
; so don't count on it being very accurate.  
;
; Few zones are supported at the time of this writing, but may
; be selected with "progzone"
;
; This feature can also easily detect false hangups. The symptoms of this 
; is being disconnected in the middle of a call for no reason.
;
callprogress=no
progzone=uk
;
; For fax detection, uncomment one of the following lines.  The default is *OFF*
;
;faxdetect=both
;faxdetect=incoming
;faxdetect=outgoing
;faxdetect=no
;
; Select which class of music to use for music on hold.  If not specified
; then the default will be used.
;
;musiconhold=default
;
; PRI channels can have an idle extension and a minunused number.  So long
; as at least "minunused" channels are idle, chan_zap will try to call
; "idledial" on them, and then dump them into the PBX in the "idleext"
; extension (which is of the form exten at context).  When channels are needed
; the "idle" calls are disconnected (so long as there are at least "minidle"
; calls still running, of course) to make more channels available.  The
; primary use of this is to create a dynamic service, where idle channels
; are bundled through multilink PPP, thus more efficiently utilizing
; combined voice/data services than conventional fixed mappings/muxings.
;
;idledial=6999
;idleext=6999 at dialout
;minunused=2
;minidle=1
;
; Configure jitter buffers in zapata (each one is 20ms, default is 4)
;
;jitterbuffers=4
;
; You can define your own custom ring cadences here.  You can define up to
; 8 pairs.  If the silence is negative, it indicates where the callerid
; spill is to be placed.  Also, if you define any custom cadences, the
; default cadences will be turned off.
;
; Syntax is:  cadence=ring,silence[,ring,silence[...]]
;
; These are the default cadences:
;
;cadence=125,125,2000,-4000
;cadence=250,250,500,1000,250,250,500,-4000
;cadence=125,125,125,125,125,-4000
;cadence=1000,500,2500,-5000
;
; Each channel consists of the channel number or range.  It
; inherits the parameters that were specified above its declaration
;
; For GR-303, CRV's are created like channels except they must start
; with the trunk group followed by a colon, e.g.: 
;
; crv => 1:1
; crv => 2:1-2,5-8
;
;
;callerid="Green Phone"<(256) 428-6121>
;channel => 1
;callerid="Black Phone"<(256) 428-6122>
;channel => 2
;callerid="CallerID Phone" <(256) 428-6123>
;callerid="CallerID Phone" <(630) 372-1564>
;callerid="CallerID Phone" <(256) 704-4666>
;channel => 3
;callerid="Pac Tel Phone" <(256) 428-6124>
;channel => 4
;callerid="Uniden Dead" <(256) 428-6125>
;channel => 5
;callerid="Cortelco 2500" <(256) 428-6126>
;channel => 6
;callerid="Main TA 750" <(256) 428-6127>
;channel => 44
;
; For example, maybe we have some other channels
; which start out in a different context and use
; E & M signalling instead.
;
;context=remote
;sigalling=em
;channel => 15
;channel => 16

;signalling=em_w
;
; All those in group 0 I'll use for outgoing calls
;
; Strip most significant digit (9) before sending
;
;stripmsd=1
;callerid=asreceived
;group=0
;signalling=fxs_ls
;channel => 45

;signalling=fxo_ls
;group=1
;callerid="Joe Schmoe" <(256) 428-6131>
;channel => 25
;callerid="Megan May" <(256) 428-6132>
;channel => 26
;callerid="Suzy Queue" <(256) 428-6233>
;channel => 27
;callerid="Larry Moe" <(256) 428-6234>
;channel => 28
;
; Sample PRI (CPE) config:  Specify the switchtype, the signalling as
; either pri_cpe or pri_net for CPE or Network termination, and generally
; you will want to create a single "group" for all channels of the PRI.
;
; switchtype = national
; signalling = pri_cpe
; group = 2
; channel => 1-23

;
;  Used for distintive ring support for x100p.
;  You can see the dringX patterns is to set any one of the dringXcontext fields
;  and they will be printed on the console when an inbound call comes in.
;
;dring1=95,0,0 
;dring1context=internal1 
;dring2=325,95,0 
;dring2context=internal2 
; If no pattern is matched here is where we go.
;context=default
;channel => 1 

; PSTN line for Will
group=1
callgroup=1
pickupgroup=1
signalling=fxs_ks
context=incoming-from-pstn-will
callerid=Unknown call for Will's PSTN line <UNKNOWN>
channel => 4

; PSTN line for Celia
group=1
callgroup=1
pickupgroup=1
callerid=Unknown call for Celia's PSTN line <UNKNOWN>
context=incoming-from-pstn-celia
channel => 3

; Internal DECT phones
rxgain=-2.0
txgain=-2.5
signalling=fxo_ks
context=internal
group=2
callgroup=1
pickupgroup=1
callerid=DECT Cordless Phone 1 <913>
channel => 1

rxgain=-2.0
txgain=-2.5
signalling=fxo_ks
context=internal
group=2
callgroup=1
pickupgroup=1
callerid=DECT Cordless Phone 2 <914>
channel => 2
-------------- next part --------------
#
# Zaptel Configuration File
#
# This file is parsed by the Zaptel Configurator, ztcfg
#
#
# First come the span definitions, in the format
# span=<span num>,<timing>,<line build out (LBO)>,<framing>,<coding>[,yellow]
# 
# The timing parameter determines the selection of primary, secondary, and
# so on sync sources.  If this span should be considered a primary sync
# source, then give it a value of "1".  For a secondary, use "2", and so on.
# To not use this as a sync source, just use "0"
#
# The line build-out (or LBO) is an integer, from the following table:
# 0: 0 db (CSU) / 0-133 feet (DSX-1)
# 1: 133-266 feet (DSX-1)
# 2: 266-399 feet (DSX-1)
# 3: 399-533 feet (DSX-1)
# 4: 533-655 feet (DSX-1)
# 5: -7.5db (CSU)
# 6: -15db (CSU)
# 7: -22.5db (CSU)
#
# The framing is one of "d4" or "esf" for T1 or "cas" or "ccs" for E1
#
# Note: "d4" could be referred to as "sf" or "superframe" 
#
# The coding is one of "ami" or "b8zs" for T1 or "ami" or "hdb3" for E1
#
# E1's may have the additional keyword "crc4" to enable CRC4 checking
#
# If the keyword "yellow" follows, yellow alarm is transmitted when no
# channels are open.
#
#span=1,0,0,esf,b8zs
#span=2,1,0,esf,b8zs
#span=3,0,0,ccs,hdb3,crc4
#
# Next come the dynamic span definitions, in the form:
# dynamic=<driver>,<address>,<numchans>,<timing>
#
# Where <driver> is the name of the driver (e.g. eth), <address> is the
# driver specific address (like a MAC for eth), <numchans> is the number
# of channels, and <timing> is a timing priority, like for a normal span.
# use "0" to not use this as a timing source, or prioritize them as
# primary, secondard, etc.  Note that you MUST have a REAL zaptel device
# if you are not using external timing.
#
# dynamic=eth,eth0/00:02:b3:35:43:9c,24,0
#
# Next come the definitions for using the channels.  The format is:
# <device>=<channel list>
#
# Valid devices are:
#
# "e&m"     : Channel(s) are signalled using E&M signalling (specific
#             implementation, such as Immediate, Wink, or Feature Group D
#             are handled by the userspace library).
# "fxsls"   : Channel(s) are signalled using FXS Loopstart protocol.
# "fxsgs"   : Channel(s) are signalled using FXS Groundstart protocol.
# "fxsks"   : Channel(s) are signalled using FXS Koolstart protocol.
# "fxols"   : Channel(s) are signalled using FXO Loopstart protocol.
# "fxogs"   : Channel(s) are signalled using FXO Groundstart protocol.
# "fxoks"   : Channel(s) are signalled using FXO Koolstart protocol.
# "sf"	    : Channel(s) are signalled using in-band single freq tone.
#		Syntax as follows: 
#		 channel# => sf:<rxfreq>,<rxbw>,<rxflag>,<txfreq>,<txlevel>,<txflag>
#		rxfreq is rx tone freq in hz, rxbw is rx notch (and decode)
#		bandwith in hz (typically 10.0), rxflag is either 'normal' or
#		'inverted', txfreq is tx tone freq in hz, txlevel is tx tone 
#		level in dbm, txflag is either 'normal' or 'inverted'. Set 
#		rxfreq or txfreq to 0.0 if that tone is not desired.
# "unused"  : No signalling is performed, each channel in the list remains idle
# "clear"   : Channel(s) are bundled into a single span.  No conversion or
#             signalling is performed, and raw data is available on the master.
# "indclear": Like "clear" except all channels are treated individually and
#             are not bundled.  "bchan" is an alias for this.
# "rawhdlc" : The zaptel driver performs HDLC encoding and decoding on the 
#             bundle, and the resulting data is communicated via the master
#             device.
# "fcshdlc" : The zapdel driver performs HDLC encoding and decoding on the
#             bundle and also performs incoming and outgoing FCS insertion
#             and verification.  "dchan" is an alias for this.
# "nethdlc" : The zaptel driver bundles the channels together into an
#             hdlc network device, which in turn can be configured with
#             sethdlc (available separately).
# "dacs"    : The zaptel driver cross connects the channels starting at
#             the channel number listed at the end, after a colon
#
# The channel list is a comma-separated list of channels or ranges, for
# example:
#
#   1,3,5 (channels one, three, and five)
#   16-23, 29 (channels 16 through 23, as well as channel 29
#
# So, some complete examples are:
#   e&m=1-12
#   nethdlc=13-24
#   fxsls=25,26,27,28
#   fxols=29-32
#
#fxoks=1-24
#bchan=25-47
#dchan=48
#fxols=1-12
#fxols=13-24
#e&m=25-29
#nethdlc=30-33
#clear=44
#clear=45
#clear=46
#clear=47
#fcshdlc=48
#dacs=1-24:48
#
# Finally, you can preload some tone zones, to prevent them from getting
# overwritten by other users (if you allow non-root users to open /dev/tor*
# interfaces anyway.  Also this means they won't have to be loaded at runtime.
# The format is "loadzone=<zone>" where the zone is a two letter country code.
# 
# You may also specify a default zone with "defaultzone=<zone>" where zone
# is a two letter country code.
#
#loadzone = us
#loadzone=it
#loadzone=fr
#loadzone=de
#loadzone=uk
#loadzone=fi
#loadzone=jp
#loadzone=sp
#loadzone=no

# Will's config:

# channel 1 (was) my X100P:
#fxsks=1
#loadzone=uk
#defaultzone=uk

loadzone=uk
defaultzone=uk
fxsks=3,4
fxoks=1,2



More information about the asterisk-users mailing list