isdngw-palace.uvtnet.cz
Popis systemu
1U server supermicro coby prevodnik SIP na E1/ISDN a zpet. Funguje pro potreby hotelu Metropol (zakaznik UVTNETU). Server je klasicka SL6.5 instalace s asteriskem, specialni 1x pci-e kartou E1 (2x E1 port). Je tam firewall povoleny z linux site a Zdimeric.
E1 karta: 02:08.0 Communication controller: Digium, Inc. Wildcard TE220 dual-span T1/E1/J1 card 3.3V (PCI-Express) (rev 02)
Karta je pci-e 1x, full profile s daughter card, ktera dela hw echo canceller. Karta vypada zhruba takto:
Ke zprovozneni karty jsou potreba ovladace, ktere jsou dodavane vyrobcem karty, tj. firmou Digium (mmj. vyrobce asterisku). Ovladace a jejich framework se nazyvaji DAHDI a ke stazeni jsou zde: http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/
Ovladace se kompiluji pro kazdou verzi jadra zvlast, protoze nepredpokladam jakoukoliv zmenu systemu, zkompiloval sem je na stroji a nainstaloval pres make install. Aktualne system bezi na jadre: 2.6.32-431.17.1.el6.x86_64
Potrebny modul je wct4xxp (plus asi nejake dalsi pomocne moduly).
Pristupy
| 178.17.7.254 | root | 1:UEBSTDUyQGVlBg== | ssh port 10002 |
| mysql | root | 1:RmR6JFhkZ2B+JhY= | |
Zaloha na backup4.zab.cldn.eu
Provozni stavy
Zjisteni stavu E1 linky
Vypis obou spanu karty. Pokud je Alarms OK, linka je. Pokud je Alarms RED, link neni. Nas zajima span1, to je pripojeni do ustredny. Na spanu 2 je zapojen loopback, proto je tez link up
[root@isdngw-palace ~]# asterisk -r isdngw-palace*CLI> dahdi show status Description Alarms IRQ bpviol CRC Fra Codi Options LBO T2XXP (PCI) Card 0 Span 1 OK 0 0 0 CCS HDB3 CRC4 0 db (CSU)/0-133 feet (DSX-1) T2XXP (PCI) Card 0 Span 2 OK 0 0 0 CCS HDB3 CRC4 0 db (CSU)/0-133 feet (DSX-1)
zjisteni stavu ISDN signalizace
ISDN30 se nazyva tez PRI, z toho plynou nasledujici prikazy:
isdngw-palace*CLI> pri show spans PRI span 1/0: Up, Active
Span1 (port1) je UP. Detailnejsi info o isdn na tomto portu:
isdngw-palace*CLI> pri show span 1 Primary D-channel: 16 Status: Up, Active Switchtype: EuroISDN Type: Network Remote type: CPE Overlap Dial: 1 Logical Channel Mapping: 0 Timer and counter settings: N200: 3 N202: 3 K: 7 T200: 1000 T201: 1000 T202: 10000 T203: 10000 T303: 4000 T305: 30000 T308: 4000 T309: 6000 T312: 6000 T313: 4000 T316: -1 N316: 2 T-HOLD: 4000 T-RETRIEVE: 4000 T-RESPONSE: 4000 T-STATUS: 4000 T-ACTIVATE: 10000 T-DEACTIVATE: 4000 T-INTERROGATE: 4000 T-RETENTION: 30000 T-CCBS1: 4000 T-CCBS2: 2700000 T-CCBS3: 20000 T-CCBS4: 5000 T-CCBS5: 3600000 T-CCBS6: 3600000 T-CCNR2: 10800000 T-CCNR5: 11700000 T-CCNR6: 11700000 Q931 RX: 913 Q931 TX: 693 Q921 RX: 6762 Q921 TX: 7150 Q921 Outstanding: 0 (TEI=0) Total active-calls:1 global:0 CC records: Overlap Recv: Yes
Zasadni konfiguracni vec je u teto ustredny nastaveni Overlap Recv: YES. Pokud pripojena ustredna po ISDN posila vytacene cislo po jednotlivych znacich, pak bez teto volby nebude volba cisla fungovat. Pokud ustredna posila called num jako jednu Q931 zpravu, pak to potreba neni.
zapnuti/vypnuti debuggingu ISDN
isdngw-palace*CLI> pri set debug on span 1 Enabled debugging on span 1 isdngw-palace*CLI> pri set debug off span 1 Disabled debugging on span 1
Cteni ISDN debugu
Pri zapnutem debuggingu jsou videt jednotlive ISDN zpravy. Zpravy uvozene znakem ">" posilame do ISDN my, zpravy uvozene "<" dostavame. Nize je videt ze na ustrednu posilame hovor z cisla 00442030361232 a to na cislo 224093217:
PRI Span: 1 > Calling Party Number (len=18) [ Ext: 0 TON: National Number (2) NPI: ISDN/Telephony Numbering Plan (E.164/E.163) (1) PRI Span: 1 > Presentation: Presentation allowed, User-provided, not screened (0) '00442030361232' ] PRI Span: 1 > [70 0a 80 32 32 34 30 39 33 32 31 37] PRI Span: 1 > Called Party Number (len=12) [ Ext: 1 TON: Unknown Number Type (0) NPI: Unknown Number Plan (0) '224093217' ] PRI Span: 1 q931.c:6291 q931_setup: Call 32918 enters state 1 (Call Initiated). Hold state: Idle
Chyby ISDN
Nize uvedene chyby maji byt udajne chybne CRC soucty paketu, nicmene dle diskuzi, pokud jich neni mnoho, je to OK:
The HDLC Abort(6) message is actually not an error (or even a warning). It is a notice message generated by Asterisk, indicating that a frame on the span failed a consistency check and is being discarded or ignored.
[Jul 1 20:27:48] NOTICE[1179] chan_dahdi.c: PRI got event: HDLC Bad FCS (8) on D-channel of span 1 [Jul 2 07:26:17] NOTICE[1179] chan_dahdi.c: PRI got event: HDLC Bad FCS (8) on D-channel of span 1 [Jul 2 12:13:59] NOTICE[1179] chan_dahdi.c: PRI got event: HDLC Abort (6) on D-channel of span 1 [Jul 2 12:13:59] NOTICE[1179] chan_dahdi.c: PRI got event: HDLC Abort (6) on D-channel of span 1
Konfigurace
Po zkompilovani modulu a instalaci asterisku a dahdi (dahdi-tools asterisk-dahdi z epelu) se vygeneruje pomoci dahdi_tools konfigurace. Ja zde budu uvadet aktualni pouzivanou konfiguraci:
/etc/modprobe.d/dahdi.conf
options wct4xxp default_linemode=e1
/etc/dahdi/modules
Odkomentujeme wct4xxp a zakomentujeme zbytek
/etc/dahdi/system.conf
Protoze pouzivame pouze prvni port E1 (tzn. span), zajima nas pouze span 1
# Span 1: TE2/0/1 "T2XXP (PCI) Card 0 Span 1" (MASTER). span=1,2,0,ccs,hdb3,crc4 # termtype: te bchan=1-15,17-31 dchan=16 echocanceller=mg2,1-15,17-31 # Span 2: TE2/0/2 "T2XXP (PCI) Card 0 Span 2". span=2,2,0,ccs,hdb3,crc4 # termtype: te bchan=32-46,48-62 dchan=47 echocanceller=mg2,32-46,48-62 # Global data loadzone<------>= cz defaultzone<--->= cz
/etc/asterisk/dahdi-channels.conf
Uvadim pouze nastavene hodnoty bez komentaru:
[trunkgroups] [channels] pridialplan=unknown overlapdial=yes usecallerid=yes callwaiting=yes usecallingpres=yes callwaitingcallerid=yes threewaycalling=yes transfer=yes canpark=yes cancallforward=yes callreturn=yes echocancel=yes echocancelwhenbridged=yes group=1 callgroup=1 pickupgroup=1 immediate=no #include /etc/asterisk/dahdi-channels.conf
/etc/asterisk/dahdi-channels.conf
Tento soubor je includovany v souboru vyse (# znamena include, ; je komentar). Nastaven mame pouze span 1 - pouzivame pouze prvni port. Pouzivame signalizaci euroisdn - v evrope bezna, signalling pri_net (opak je pri_cpe, pokud isdn pise hlasky ze druha strana je pri_net, pak prepneme na pri_cpe). Kanaly pro hovor jsou 1-15 a 17-31. Naopak D-channel (ridici kanal) je 16. Nektere protiustredny nemusi pouzivat vsechny hlasove kanaly, pak nastaveni upravime dle druhe strany. Tato konfiguraci znamena, ze hovor vyleze v dialplanu v contextu "from-isdn"
; Span 1: TE2/0/1 "T2XXP (PCI) Card 0 Span 1" (MASTER) ;group=0,11 group=0 context=from-isdn switchtype = euroisdn signalling = pri_net channel => 1-15,17-31 context = default group = 63
/etc/asterisk/sip.conf
Nastaveni sip kanalu je vesmes obycejne:
[general] dtmfmode=rfc2833 context=from-office type=friend directmedia=no host=dynamic disallow=all allow=ilbc allow=g729 allow=gsm allow=g723 allow=ulaw disallow=all allow=ulaw [uvtnet] type=peer host=109.205.72.44 accountcode=uvtnet context=from-sip disallow=all allow=alaw canreinvite=no insecure=invite,port dtmfmode=rfc2833
/etc/asterisk/extensions.conf
V dialplanu pouze prehazujeme volani ze SIP na ISDN a zpet. Pri volani na SIP pomocnym makrem kontrolujeme CLID a pokud je 3-mistne, pridame jejich predvolbu, aby venku bylo videt jako volajici cele cislo. Naopak pri volani dovnitr na ISDN jejich ustredna ocekava 3 mistne lokalni cislo misto celeho XXXXXXXXX. To zajistime ponechanim pouze poslednich 3 cisel z volaneho, viz default-out-isdn
17.12.2014 Jindra doplnil podminku pokud vola z ISDN klapka 300-999, tak se meni CALLERID na 224093111 (puvodne to delala ustredna phillips, ale kvuli billingu to ted delame my.)
{CODE()}
general
static=yes
writeprotect=yes
globals
CHAN_ISDN => DAHDI/G0
CHAN_SIP => SIP/uvtnet
default
include => from-sip
from-sip
include => default-out-isdn
exten => h,1,Hangup()
exten => t,1,Hangup()
from-isdn
include => default-out-sip
exten => h,1,Hangup()
exten => t,1,Hangup()
; kdyz volame do hotelu, ocekavaji 3-mistne cislo,
; takze z volaneho cisla ponechame posledni 3 cisla
default-out-isdn
exten => _.XX,1,Macro(call-isdn,${EXTEN:-3})
default-out-sip
exten => _.XX,1,Macro(call-sip,${EXTEN})
macro-call-isdn
exten => s,1,Set(CDR(userfield)=ISDN)
exten => s,n,Macro(stdcall,${CHAN_ISDN}/${ARG1})
macro-call-sip
exten => s,1,Set(CDR(userfield)=SIP)
exten => s,n,Macro(palace-clid)
exten => s,n,Macro(stdcall,${CHAN_SIP}/${ARG1})
macro-stdcall
exten => s,1,Set(TIMEOUT(absolute)=3600)
exten => s,n,Dial(${ARG1},,60)
; doplnujeme prefix k CLID (Jindra editoval)
macro-palace-clid
exten => s,1,Set(NUM=${CALLERID(num)})
exten => s,n,GotoIf($${LEN(${NUM})} = 3?addpfx) ; pokud je delka CALLERID = 3 pridavame prefix
exten => s,n,MacroExit?
exten => s,n(addpfx),GotoIf($${NUM}>=300?maskpfx) ; pokud je cislo pobocky >= 300 maskujeme na 111
exten => s,n,Set(CALLERID(num)=224093${NUM})
exten => s,n,MacroExit?
exten => s,n(maskpfx),Set(CALLERID(num)=224093111)
exten => s,n,MacroExit?
{CODE}