Steven J. Garcia
2005-Mar-18 18:35 UTC
[Asterisk-Users] T100P: Can't Make/Receive Zap Calls (Long Newbie Blah)
All, Alright, I've looked around the internet, the voip-info.org wiki, and browsed the contents of this mailing list. While I've found a couple of scenarios that are close to this one, I haven't found one that uses my particular card (T100P). Without further delay -- I have successfully configured internal SIP services between a Snom 200 and a Windows X-Lite client and have even connected to the Digium PBX demo box through SIP (not that it makes much of a difference in this case). So, what I'm trying to do is allow any internal SIP extension to dial the outside world. I'd like to have eight dedicated Zap channels for making outside calls, but I need to make Asterisk see them first! For some reason, Asterisk refuses to see the PRI, but the T100P sees the T1/PRI (I think). We have the phone numbers we're to use assigned and I verified all the signalling, framing, etcetera, with the provider. I know lots of the stuff in extensions.conf is probably not needed, but I wanted to include everything that I'm having the PBX box use. While I've managed to get SOME of it working, I don't understand everything about Asterisk. Once again, thanks for help and sorry for the huge post. If I'm on crack, please feel free to let me know. Steven J. Garcia IT Support SLM Industries, L.L.C. ======================================================================Scenario/Problem Data ====================================================================== Scenario: I'm responsible for configuring our office PBX which will consist of the following: four individual voice lines, a conference line, and a fax line. We currently have a T1 PRI through our service provider (E8ZS/ESF; National/PRI_CPE). Our interfaces configuration is set up as below T100P -> Cisco IAD-2400 (PBX Port) -> Provider's Network -> Provider's Softswitch // ++ I have compiled all of the required files for the following linux // ++ distribution, kernel, gcc version (reported using cat // ++ /proc/version). Linux version 2.6.8-1-386 (joshk@trollwife) (gcc version 3.3.5 (Debian 1:3.3.5-2)) #1 Thu Nov 25 04:24:08 UTC 2004 I have compiled and installed the required sources (libpri, zaptel, asterisk) in the listed order. I installed all other required libraries as best as I could (and before the previously mentioned three). (Since I'm not using RH, some of these packages had to be nabbed as best as possible.) I have, to my knowledge, followed all the directions required to make these functions work. ===================================================================== Here is the error message that Asterisk throws when I try to connect to an outside line. pbx:/etc/asterisk# asterisk -vvvvvvvvvvvvvgr == Parsing '/etc/asterisk/asterisk.conf': Found == Parsing '/etc/asterisk/extconfig.conf': Found Asterisk 1.0.2, Copyright (C) 1999-2004 Digium. Written by Mark Spencer <markster@digium.com> ========================================================================Connected to Asterisk 1.0.2 currently running on pbx (pid = 14307) Verbosity was 5 and is now 13 -- Executing Dial("SIP/10.10.5.2-0811b1c0", "Zap/g1/<Real 7-digit TN here>") in new stack Mar 18 20:20:15 NOTICE[1148631984]: app_dial.c:743 dial_exec: Unable to create channel of type 'Zap' == Everyone is busy/congested at this time -- Executing Congestion("SIP/10.10.5.2-0811b1c0", "") in new stack == Spawn extension (default, 9<Real 7-digit TN Here>, 2) exited non-zero on 'SIP/10.10.5.2-0811b1c0' pbx*CLI> ===================================================================== // ++ ztcfg -vvvv returns the following output: Zaptel Configuration ===================== SPAN 1: ESF/B8ZS Build-out: 0 db (CSU)/0-133 feet (DSX-1) Channel map: Channel 01: Individual Clear channel (Default) (Slaves: 01) Channel 02: Individual Clear channel (Default) (Slaves: 02) Channel 03: Individual Clear channel (Default) (Slaves: 03) Channel 04: Individual Clear channel (Default) (Slaves: 04) Channel 05: Individual Clear channel (Default) (Slaves: 05) Channel 06: Individual Clear channel (Default) (Slaves: 06) Channel 07: Individual Clear channel (Default) (Slaves: 07) Channel 08: Individual Clear channel (Default) (Slaves: 08) Channel 09: Individual Clear channel (Default) (Slaves: 09) Channel 10: Individual Clear channel (Default) (Slaves: 10) Channel 11: Individual Clear channel (Default) (Slaves: 11) Channel 12: Individual Clear channel (Default) (Slaves: 12) Channel 13: Individual Clear channel (Default) (Slaves: 13) Channel 14: Individual Clear channel (Default) (Slaves: 14) Channel 15: Individual Clear channel (Default) (Slaves: 15) Channel 16: Individual Clear channel (Default) (Slaves: 16) Channel 17: Individual Clear channel (Default) (Slaves: 17) Channel 18: Individual Clear channel (Default) (Slaves: 18) Channel 19: Individual Clear channel (Default) (Slaves: 19) Channel 20: Individual Clear channel (Default) (Slaves: 20) Channel 21: Individual Clear channel (Default) (Slaves: 21) Channel 22: Individual Clear channel (Default) (Slaves: 22) Channel 23: Individual Clear channel (Default) (Slaves: 23) Channel 24: D-channel (Default) (Slaves: 24) 24 channels configured. // ++ And the light on the T100P is solid green. ============================================================ // ++ zttest returns the following output pbx:/usr/src# /sbin/zttest -vvvv Opened pseudo zap interface, measuring accuracy... 99.987793% 99.987793% 99.987793% 99.987793% --- Results after 4 passes --- Best: 99.987793 -- Worst: 99.987793 ============================================================= // ++ cat /proc/zaptel/1 returns the following output pbx:/usr/src# cat /proc/zaptel/1 Span 1: WCT1/0 "Digium Wildcard T100P T1/PRI Card 0" B8ZS/ESF IRQ misses: 761 1 WCT1/0/1 Clear 2 WCT1/0/2 Clear 3 WCT1/0/3 Clear 4 WCT1/0/4 Clear 5 WCT1/0/5 Clear 6 WCT1/0/6 Clear 7 WCT1/0/7 Clear 8 WCT1/0/8 Clear 9 WCT1/0/9 Clear 10 WCT1/0/10 Clear 11 WCT1/0/11 Clear 12 WCT1/0/12 Clear 13 WCT1/0/13 Clear 14 WCT1/0/14 Clear 15 WCT1/0/15 Clear 16 WCT1/0/16 Clear 17 WCT1/0/17 Clear 18 WCT1/0/18 Clear 19 WCT1/0/19 Clear 20 WCT1/0/20 Clear 21 WCT1/0/21 Clear 22 WCT1/0/22 Clear 23 WCT1/0/23 Clear 24 WCT1/0/24 HDLCFCS ====================================================================== // ++ strace -xx cat /dev/zap/1 returns this and then lots of um-laued // ++ (sp?) y-characters. pbx:/usr/src# strace -xx cat /dev/zap/1 execve("/bin/cat", ["cat", "/dev/zap/1"], [/* 17 vars */]) = 0 uname({sys="Linux", node="pbx", ...}) = 0 brk(0) = 0x804d000 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40017000 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=14363, ...}) = 0 old_mmap(NULL, 14363, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40018000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/tls/libc.so.6", O_RDONLY) = 3 read(3, "\x7f\x45\x4c\x46\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00"..., 512) = 512 fstat64(3, {st_mode=S_IFREG|0644, st_size=1253924, ...}) = 0 old_mmap(NULL, 1260140, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0x4001c000 old_mmap(0x40145000, 32768, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x129000) = 0x40145000 old_mmap(0x4014d000, 10860, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x4014d000 close(3) = 0 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40150000 set_thread_area({entry_number:-1 -> 6, base_addr:0x401502a0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0 munmap(0x40018000, 14363) = 0 open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=290576, ...}) = 0 mmap2(NULL, 290576, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40151000 close(3) = 0 brk(0) = 0x804d000 brk(0x806e000) = 0x806e000 brk(0) = 0x806e000 fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0 open("/dev/zap/1", O_RDONLY|O_LARGEFILE) = 3 fstat64(3, {st_mode=S_IFCHR|0644, st_rdev=makedev(196, 1), ...}) = 0 read(3, "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"..., 4096) = 1024 write(1, "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf ================================================================== // ++ cat /proc/interrupts returns the following output pbx:/usr/src# cat /proc/interrupts CPU0 0: 628474284 XT-PIC timer 1: 203 XT-PIC i8042 2: 0 XT-PIC cascade 7: 11236543 XT-PIC parport0 8: 4 XT-PIC rtc 9: 0 XT-PIC acpi 10: 0 XT-PIC via82cxxx, uhci_hcd 11: 628967004 XT-PIC uhci_hcd, uhci_hcd, t1xxp, eth0 12: 479 XT-PIC i8042 14: 2086045 XT-PIC ide0 15: 12 XT-PIC ide1 NMI: 0 LOC: 628510985 ERR: 169 MIS: 0 pbx:/usr/src# ============================================================== // ++ lsmod returns the following output pbx:/usr/src# lsmod Module Size Used by ipv6 229764 10 snd_via82xx 26660 0 snd_ac97_codec 59268 1 snd_via82xx snd_pcm 85384 1 snd_via82xx snd_timer 23172 1 snd_pcm snd_page_alloc 11144 2 snd_via82xx,snd_pcm gameport 4736 1 snd_via82xx snd_mpu401_uart 7296 1 snd_via82xx snd_rawmidi 23204 1 snd_mpu401_uart snd_seq_device 7944 1 snd_rawmidi snd 50660 7 snd_via82xx,snd_ac97_codec,snd_pcm,snd_timer,snd_mpu401_uart,snd_rawmidi,snd_seq_device wct1xxp 14752 0 zaptel 218500 3 wct1xxp pci_hotplug 30640 0 via_agp 8832 1 agpgart 31784 1 via_agp parport_pc 33348 0 parport 37320 1 parport_pc mousedev 9996 0 floppy 54992 0 tsdev 7168 0 psmouse 17800 0 pcspkr 3816 0 evdev 9088 0 hisax 483280 0 isdn 128204 1 hisax slhc 7040 1 isdn uhci_hcd 29328 0 usbcore 104164 3 uhci_hcd via82cxxx_audio 26248 0 uart401 11460 1 via82cxxx_audio sound 75308 2 via82cxxx_audio,uart401 soundcore 9824 3 snd,via82cxxx_audio,sound ac97_codec 16908 1 via82cxxx_audio via_rhine 19720 0 mii 4864 1 via_rhine crc32 4608 1 via_rhine via_ircc 20368 0 irda 167360 1 via_ircc crc_ccitt 2432 3 zaptel,hisax,irda capability 4872 0 commoncap 7168 1 capability ide_cd 38176 0 cdrom 35740 1 ide_cd rtc 12088 0 ext3 109672 5 jbd 54552 1 ext3 ide_generic 1664 0 ide_disk 16768 7 via82cxxx 12956 1 ide_core 125028 4 ide_cd,ide_generic,ide_disk,via82cxxx unix 25908 18 font 8576 0 vesafb 6688 0 cfbcopyarea 3840 1 vesafb cfbimgblt 3200 1 vesafb cfbfillrect 3712 1 vesafb pbx:/usr/src# ================================================================== // ++ Output of zap show channels from Asterisk Console pbx*CLI> zap show channels Chan Extension Context Language MusicOnHold pseudo default pbx*CLI> ================================================================== // ++ Output of pri show span 1 from Asterisk Console pbx*CLI> pri show span 1 No PRI running on span 1 pbx*CLI> ================================================================== // ++ Here is my hand-crafted zapata.conf, located in /etc/asterisk pbx:/etc/asterisk# more zapata.conf [Signalling Type] #signalling=fxsks signalling=pri_cpe [ISDN PRI Switch Configuration] switchtype=national overlapdial=no pridialpan=unknown [Some Other Settings] language=en context=default [Multilink PPP Options] ;minunused=2 ;minidle=1 ;idledial=6999 ;idleext=6999@idle [Analog Trunk Features] usedistinctiveringdetection=no ;dring1=96,0,0 ;dring2=325,95,0 ;dring=367,0,0 ; ;dring1context;dring2context;dring3context; busydetect=yes busycount=8 callprogress=no pulse=no [Analog Handset Features] asdi=no immediate=no callwaiting=yes callwaitingcallerid=yes threewaycalling=yes transfer=yes cancallforward=yes callreturn=yes ; ;group=1 ;callgroup; ;group=1 ;pickupgroup; useincomingcalleridonzaptransfer=yes [Caller ID Options] callerid="SLM Industries <317 333 7900>" calleridcallerid=asrecieved usecallerid=yes hidecallerid=no restrictcid=no usecallingpres=no [Audio Quality Options] relaxdtmf=no echocancel=yes echocancelwhenbridged=yes echotraining=yes rxgain=0.0 txgain=0.0 [Call Logging Options] accountcode=slmindustries amaflags=documentation [Timing Parameters] ;prewink;preflash;wink;rxwink;rxflash;flash;start;debounce [Other Features] mailbox=4000 ; channel => 1-23 group = 1 [mrottler] context=mrottler [Call Logging Options] accountcode=mrottler amaflags=documentation [Caller ID Options] callerid="SLMI - M. Rottler <317 123-4567>" calleridcallerid=asrecieved usecallerid=yes hidecallerid=no restrictcid=no usecallingpres=no [Other Features] mailbox=4001 ; ;group [Analog Handset Features] ; ;group=1 ;callgroup; ;group=1 ;pickupgroupchannel => 2 [arottler] context=arottler [Call Logging Options] accountcode=arottler amaflags=documentation [Caller ID Options] callerid="SLMI - A. Rottler <317 123-4567>" calleridcallerid=asrecieved usecallerid=yes hidecallerid=no restrictcid=no usecallingpres=no [Other Features] mailbox=4002 ; ;group [Analog Handset Features] ; ;group=1 ;callgroup; ;group=1 ;pickupgroupchannel => 3 [rparker] context=rparker [Call Logging Options] accountcode=rparker amaflags=documentation [Caller ID Options] callerid="SLMI - R. Parker <317 123-4567>" calleridcallerid=asrecieved usecallerid=yes hidecallerid=no restrictcid=no usecallingpres=no [Other Features] mailbox=4003 ; ;group [Analog Handset Features] ; ;group=1 ;callgroup; ;group=1 ;pickupgroupchannel => 4 [sgarcia] context=sgarcia [Call Logging Options] accountcode=sgarcia amaflags=documentation [Caller ID Options] callerid="SLMI - S. Garcia <317 123-4567>" calleridcallerid=asrecieved usecallerid=yes hidecallerid=no restrictcid=no usecallingpres=no [Other Features] mailbox=4004 ; ;group [Analog Handset Features] ; ;group=1 ;callgroup; ;group=1 ;pickupgroupchannel => 5 ===================================================================== // ++ Here is my zaptel.conf, located in /etc #[Wildcard T100P Configuration] #[PRI Version] # # See the gathered documentation for more details on how to configure # /etc/asterisk/zapata.conf with this configuration - Sar # span=1,1,0,esf,b8zs bchan=1-23 dchan=24 loadzone=us defaultzone=us # # ====================================================================== // ++ Here is my obviously not handcrafted extensions.conf, located in // ++ /etc/asterisk [general] static=yes writeprotect=no ; The "Globals" category contains global variables that can be referenced ; in the dialplan with ${VARIABLE} or ${ENV(VARIABLE)} for Environmental variabl e ; ${${VARIABLE}} or ${text${VARIABLE}} or any hybrid ; [globals] ;CONSOLE=Console/dsp ; Console interface for demo CONSOLE=Zap/1 ;CONSOLE=Phone/phone0 TRUNK=Zap/g1 ; Trunk interface ; ; please note that I have NO clue how to use the previous statement or ; how to organize groups, although it's probably insanely simple. ; TRUNKMSD=1 ; MSD digits to strip (usually 1 or 0) [trunkint] ; ; International long distance through trunk ; exten => _9011.,1,Dial(${TRUNK}/${EXTEN:${TRUNKMSD}}) exten => _9011.,2,Congestion [trunkld] ; ; Long distance context accessed through trunk ; exten => _91NXXNXXXXXX,1,Dial(${TRUNK}/${EXTEN:${TRUNKMSD}}) exten => _91NXXNXXXXXX,2,Congestion [trunklocal] ; ; Local seven-digit dialing accessed through trunk interface ; exten => _9NXXXXXX,1,Dial(${TRUNK}/${EXTEN:${TRUNKMSD}}) exten => _9NXXXXXX,2,Congestion [trunktollfree] ; ; Long distance context accessed through trunk interface ; exten => _91800NXXXXXX,1,Dial(${TRUNK}/${EXTEN:${TRUNKMSD}}) exten => _91800NXXXXXX,2,Congestion exten => _91888NXXXXXX,1,Dial(${TRUNK}/${EXTEN:${TRUNKMSD}}) exten => _91888NXXXXXX,2,Congestion exten => _91877NXXXXXX,1,Dial(${TRUNK}/${EXTEN:${TRUNKMSD}}) exten => _91877NXXXXXX,2,Congestion exten => _91866NXXXXXX,1,Dial(${TRUNK}/${EXTEN:${TRUNKMSD}}) exten => _91866NXXXXXX,2,Congestion [international] ; ; Master context for international long distance ; ignorepat => 9 include => longdistance include => trunkint [longdistance] ; ; Master context for long distance ; ignorepat => 9 include => local include => trunkld [local] ; ; Master context for local, toll-free, and iaxtel calls only ; ignorepat => 9 include => default include => parkedcalls include => trunklocal include => trunktollfree [macro-stdexten]; ; ; Standard extension macro: ; ${ARG1} - Extension (we could have used ${MACRO_EXTEN} here as well ; ${ARG2} - Device(s) to ring ; exten => s,1,Dial(${ARG2},20) ; Ring the interface, 20 seconds maximum exten => s,2,Goto(s-${DIALSTATUS},1) ; Jump based on status (NOANSWER,BUSY,CH ANUNAVAIL,CONGESTION,ANSWER) exten => s-NOANSWER,1,Voicemail(u${ARG1}) ; If unavailable, send t o voicemail w/ unavail announce exten => s-NOANSWER,2,Goto(default,s,1) ; If they press #, retur n to start exten => s-BUSY,1,Voicemail(b${ARG1}) ; If busy, send to voice mail w/ busy announce exten => s-BUSY,2,Goto(default,s,1) ; If they press #, retur n to start exten => _s-.,1,Goto(s-NOANSWER,1) ; Treat anything else as no answer exten => a,1,VoicemailMain(${ARG1}) ; If they press *, send the user into VoicemailMain ; ; My attempt to configure a sample extension for the Snom phone ; Hopefully this will work if I understand that instructions here well enough. ; [sgarcia_snomsip] exten => 4004,1,Dial(SIP/sgarcia_snomsip,4004,20) exten => 4004,2,Goto(4004-$(DIALSTATUS},1) exten => 4004-NOANSWER,1,Voicemail(u4004) ; If unavailable, send t o voicemail w/ unavail announce exten => 4004-NOANSWER,2,Goto(default,4004,1) ; If they press #, return to start exten => 4004-BUSY,1,Voicemail(b4004) ; If busy, send to voice mail w/ busy announce exten => 4004-BUSY,2,Goto(default,4004,1) ; If they press #, return to start exten => _4004-.,1,Goto(4004-NOANSWER,1) ; Treat anything e lse as no answer exten => a,1,VoicemailMain(4004) ; If they press *, send the user into VoicemailMain include => local include => longdistance [sgarcia_vphone] ; ; Software Phone client configuration. ; exten => 4404,1,Dial(SIP/sgarcia_vphone,4404,20) exten => 4404,2,Goto(4404-$(DIALSTATUS},1) exten => 4404-NOANSWER,1,Dial(SIP/sgarcia_snomsip,4004,20) ; If unavailable, dial my snom phone exten => 4404-NOANSWER,2,Voicemail(b4004) exten => 4404-NOANSWER,3,Goto(default,4404,1) ; If they press #, return to start exten => 4404-BUSY,1,Voicemail(b4404) ; If busy, send to voice mail w/ busy announce ;exten => 4404-BUSY,2,Goto(default,4104,1) ; If they press # , return to start exten => _4404-.,1,Goto(4404-NOANSWER,1) ; Treat anything e lse as no answer exten => a,1,VoicemailMain(4004) ; If they press *, send the user into VoicemailMain [demo] ; ; We start with what to do when a call first comes in. ; exten => s,1,Wait,1 ; Wait a second, just for fun exten => s,2,Answer ; Answer the line exten => s,3,DigitTimeout,5 ; Set Digit Timeout to 5 seconds exten => s,4,ResponseTimeout,10 ; Set Response Timeout to 10 seconds exten => s,5,BackGround(demo-congrats) ; Play a congratulatory message exten => s,6,BackGround(demo-instruct) ; Play some instructions exten => 2,1,BackGround(demo-moreinfo) ; Give some more information. exten => 2,2,Goto(s,6) exten => 3,1,SetLanguage(fr) ; Set language to french exten => 3,2,Goto(s,5) ; Start with the congratulations exten => 1000,1,Goto(default,s,1) ; ; We also create an example user, 1234, who is on the console and has ; voicemail, etc. ; exten => 1234,1,Playback(transfer,skip) ; "Please hold while..." ; (but skip if channel is not up) exten => 1234,2,Macro(stdexten,1234,${CONSOLE}) exten => 1235,1,Voicemail(u1234) ; Right to voicemail exten => 1236,1,Dial(Console/dsp) ; Ring forever exten => 1236,2,Voicemail(u1234) ; Unless busy ; ; # for when they're done with the demo ; exten => #,1,Playback(demo-thanks) ; "Thanks for trying the demo" exten => #,2,Hangup ; Hang them up. ; ; A timeout and "invalid extension rule" ; exten => t,1,Goto(#,1) ; If they take too long, give up exten => i,1,Playback(invalid) ; "That's not valid, try again" ; ; Create an extension, 500, for dialing the ; Asterisk demo. ; exten => 500,1,Playback(demo-abouttotry); Let them know what's going on exten => 500,2,Dial(IAX2/guest@misery.digium.com/s@default) ; Call the Aster isk demo exten => 500,3,Playback(demo-nogo) ; Couldn't connect to the demo site exten => 500,4,Goto(s,6) ; Return to the start over message. ; ; Create an extension, 600, for evaulating echo latency. ; exten => 600,1,Playback(demo-echotest) ; Let them know what's going on exten => 600,2,Echo ; Do the echo test exten => 600,3,Playback(demo-echodone) ; Let them know it's over exten => 600,4,Goto(s,6) ; Start over ; ; Give voicemail at extension 8500 ; exten => 8500,1,VoicemailMain exten => 8500,2,Goto(s,6) [default] ; ; By default we include the demo. In a production system, you ; probably don't want to have the demo there. ; include => demo include => sgarcia_snomsip include => sgarcia_vphone ======================================================================== // ++ Please note that I am the Asterisk Ubernoob and am quite surprised // ++ that I managed to get SIP working. Any recommendations/help on // ++ this matter would be most appreciated.