Table of Contents
Scheda VoIP Sangoma A200
ATTENZIONE! Non comprate le schede Sangoma! Il software necessario a farle funzionare semplicemente fa schifo e per giunta non è libero!
La mia esperienza con questa scheda è pessima e non la consiglierei a nessuno, neanche se fosse gratis.
Caratteristiche
From www.freepbx.org: Sangoma's A200 cards can support up to four FXO or FXS Ports (minimum 2, maximum 4) as sold. They are sold in a variety of different configurations, ranging from bare boards (with no ports) which can have daughter boards installed on them later, to boards that have 4 FXOs or boards that have 4 FXS ports pre-installed.
You can add up to five REMORA cards to an A200 card. Each Remora card takes up an additional PCI Slot inside your computer case, but connects only to the main A200 Card. Each Remora card will give you an additional 4 ports.
Caso d'uso
Si vuole utilizzare Asterisk per connettere alcuni telefoni IP con una linea telefonica analogica. La scheda Sangoma è equipaggiata con un modulo FXO che fornisce due porte analogiche da collegarsi ad altrettante linee telefoniche
Pacchetti Debian Wheezy installati:
- dahdi-source Sorgenti per modulo kernel dahdi, consente di dialogare con hardware telefonico.
- module-assistant Semplifica la compilazione di moduli kernel aggiuntivi, come
dahdi-source
. - linux-headers-3.2.0-3-amd64
I pacchetti module-assistant e linux-headers servono per la compilazione dei moduli kernel dahdi.
Usare module-assistant per creare il pacchetto Debian dahdi-modules (moduli kernel)
Verificare di aver installato il pacchetto linux-headers
relativo alla versione del kernel in uso.
È possibile eseguire la compilazione come utente non privilegiato, ridirigendo tutto nella directory corrente:
cd /usr/local/src mkdir dahdi-2.6.1+dfsg2-1 cd dahdi-2.6.1+dfsg2-1 module-assistant --userdir . --text-mode build dahdi
Quindi, da root, si installa il pacchetto .deb risultante:
dpkg -i dahdi-modules-3.2.0-4-amd64_2.6.1+dfsg2-1+3.2.51-1_amd64.deb
La procedura module-assistant effettua un clean nella directory di compilazione, sfortunatamente questo impedisce la compilazione dei driver Wanpipe di Sangoma (vedi avanti). Per questo dopo aver eseguito module-assistant conviene eseguire nuovamente il make
, per evitare problemi riportati più avanti:
cd /usr/local/src/dahdi-2.6.1+dfsg2-1/usr_src/modules/dahdi/ make
Installare i programmi DAHDI user-space
Adesso si possono installare i pacchetti:
- dahdi-linux Script user-space per i moduli kernel dahdi.
- dahdi Programmi user-space per le configurazione dei moduli kernel dahdi.
Perché il modulo kernel dahdi
venga caricato bisogna creare un file di configurazione /etc/dahdi/system.conf
con almeno queste direttive:
loadzone = it defaultzone = it
All'esecuzione di /etc/init.d/dahdi start
viene caricato il modulo kernel dahdi
, il kernel logga:
[22710.527986] dahdi: Telephony Interface Registered on major 196 [22710.527991] dahdi: Version: 2.6.1 [22710.639833] dahdi_ioctl_chanconfig: No channel for number 1
Dopo aver caricato il modulo compaiono dei nuovi device:
# ls -l /dev/dahdi/ crw-rw---T 1 root dialout 196, 254 Sep 15 21:52 channel crw-rw---T 1 root dialout 196, 0 Sep 15 21:52 ctl crw-rw---T 1 root dialout 196, 255 Sep 15 21:52 pseudo crw-rw---T 1 root dialout 196, 253 Sep 15 21:52 timer
Il comando dahdi_hardware
conferma che l'hardware è stato riconosciuto:
# dahdi_hardware pci:0000:03:04.0 wanpipe- 1923:0040 Sangoma Technologies Corp. A200/Remora FXO/FXS Analog AFT card
Compilazione di Wanpipe
Wanpipe è la suite software necessaria ad usare la scheda Sangoma A200. Wanpipe ingloba in un unico code base il supporto per quasi tutto l'hardware Sangoma, includendo programmi di configurazione, supporto e debug, moduli kernel per Linux e driver per Windows. Insomma un blob mostruoso e per giunta non libero, che fa a pugni con qualunque principio di efficienza e qualità del software. Per questo motivo sconsiglio vivamente l'acquisto di schede Sangoma!
L'installazione avviene dai sorgenti: wanpipe-3.5.28.tgz. Qui sono indicati i requisiti per l'installazione e qui la procedura General Installation. Anche questo riferimento potrebbe essere utile: Automate installation of dahdi, libpri, sangoma, and all deps on debian.
Per compilare Wanpipe servono alcuni pacchetti di sviluppo:
apt-get install gcc g++ automake autoconf libtool make libncurses5-dev flex bison \ patch linux-headers-$(uname -r) sqlite3 libsqlite3-dev
Inoltre bisogna installare la libreria Primary Rate ISDN, anche se non useremo mai una linea ISDN:
- libpri1.4
- libpri-dev
La compilazione non va a buon fine su Debian Wheezy, d'altra parte non c'era da aspettarsi altro, vista l'architettura del software! Wanpipe non gradisce che DAHDI sia stato compilato e installato alla Debian way (con module-assistant, ecc.).
Preparare la directory con i sorgenti:
cd /usr/local/src/ tar zxvf wanpipe-3.5.28.tgz
Gli impazienti possono andare direttamente al paragrafo Soluzione con pacchetto Debian.
Chi volesse ripetere il percorso pieno di ostacoli esegua invece:
cd /usr/local/src/wanpipe-3.5.28 ./Setup dahdi
Problema #1: privilegi di root e inquinamento del filesystem
Il comando Setup
accetta anche un'opzione del tipo --builddir=/tmp/wanpipe_build
, ma comunque ha bisogno dei privilegi di root perché installa file in diverse directory di sistema. Tentando l'esecuzione come utente non privilegiato si finisce con un bel Segmentation fault!
Un software con queste caratteristiche non soddisfa i criteri minimi neanche della decenza: il classico make
e make install
è il minimo che si dovrebbe pretendere al giorno d'oggi!
Queste le directory infestate dal Setup:
/etc/wanpipe/
(viene creata, contiene di tutto: file di configurazione, script, firmware,…)/etc/asterisk/
(se esiste)/usr/include/{libsangoma|libhpsangoma|wanec_api|libstelephony}.h
/usr/include/wanpipe/
/usr/lib/libstelephony.*
/usr/lib/libsangoma.*
/usr/share/doc/wanpipe/
/usr/local/sbin/setup-sangoma
/usr/sbin/wan_aftup
/usr/sbin/wancfg*
/usr/sbin/wanconfig
/usr/sbin/wan_ec_client
/usr/sbin/wanpipe_lxdialog
/usr/sbin/wanpipemon
/usr/sbin/wanpipemon_legacy
/usr/sbin/wan_plxup
/usr/sbin/wanrouter
/usr/sbin/wpbwm
/usr/sbin/wp_pppconfig
/lib/modules/$(uname -r)/build/wanpipe
/lib/modules/$(uname -r)/kernel/net/wanrouter/{wan_aften|af_wanpipe|wanec}.ko
/lib/modules/$(uname -r)/kernel/drivers/net/wan/{wanpipe|sdladrv}.ko
Per rimuovere tutta questa babele, almeno in teoria, dovrebbe bastare ./Setup remove
.
Problema #2: percorso dei sorgenti DAHDI
Durante il setup non vengono trovati i sorgenti di zaptel
, in realtà noi abbiamo il più moderno dahdi
che lo sostituisce, ma Wanpipe continua ad utilizzare l'obsoleto nome zaptel
. Scegliendo l'opzione m è possibile indicarne il percorso:
Please enter zaptel dir: [Default: /usr/src/zaptel] #> /usr/local/src/dahdi-2.6.1+dfsg-1/usr_src/modules/dahdi
Problema #3: versione DAHDI e versione kernel
Anche con i privilegi di root la compilazione fallisce:
make[4]: *** [/usr/local/src/wanpipe-3.5.28/kdrvtmp/sdla_tdmv.o] Error 1 make[3]: *** [_module_/usr/local/src/wanpipe-3.5.28/kdrvtmp] Error 2 make[2]: *** [sub-make] Error 2 make[1]: *** [all] Error 2
Wanpipe dovrebbe supportare DAHDI 2.6 e il kernel 3.2.6 a partire dalla versione 3.5.25 (vedere il changelog), ma nel nostro caso non riesce l'autodetect della versione di DAHDI né quella del kernel (si conferma un software scritto con i piedi!).
Per far riconoscere la versione kernel la strada più rapida è modificare lo script Setup
, circa alla riga 935, dentro la funzione get_kernel_ver()
, prima della definizione di KERNEL_VERSION
. Poiché nel nostro caso uname -r
restituisce 3.2.0-3-amd64
, mettiamo:
KVER=3 KPATCH=2 KLVL=0 KEVER="-3-amd64" KERNEL_VERSION=$KVER"."$KPATCH"."$KLVL$KEVER
L'autodetect della versione DAHDI si basa sulla presenza di un file usr_src/modules/dahdi/include/dahdi/version.h
autogenerato durante la compilazione, ma che la procedura guidata da module-assistant ha rimosso. Come contenuto basterebbe questo:
#define DAHDI_VERSION "2.6.1"
ma non basta, mancano altri file che portano al problema seguente.
Problema #4: no symbol version
Il modulo kernel wanpipe
compila con errori e quando si tenta di caricarlo con modprobe
fallisce:
[ 551.916941] wanpipe: no symbol version for dahdi_hdlc_putbuf [ 551.916947] wanpipe: Unknown symbol dahdi_hdlc_putbuf (err -22) [ 551.916968] wanpipe: no symbol version for _dahdi_ec_span [ 551.916972] wanpipe: Unknown symbol _dahdi_ec_span (err -22) [ 551.916998] wanpipe: no symbol version for dahdi_alarm_notify [ 551.917001] wanpipe: Unknown symbol dahdi_alarm_notify (err -22) [ 551.917015] wanpipe: no symbol version for dahdi_hdlc_getbuf [ 551.917019] wanpipe: Unknown symbol dahdi_hdlc_getbuf (err -22) ...
Gli errori di compilazione sono loggati in /usr/local/src/wanpipe-3.5.28/setup_drv_compile.log
:
WARNING: "dahdi_hdlc_putbuf" [/usr/local/src/wanpipe-3.5.28/kdrvtmp/wanpipe.ko] undefined! ...
Anche in questo caso è la procedura guidata di module-assistant che ha rimosso il file Module.symvers
generato durante la compilazione. Vedere la soluzione al paragrafo seguente.
Soluzione non Debian
La soluzione rapida ai problemi #3 e #4 è eseguire:
cd /usr/local/src/dahdi-2.6.1+dfsg-1/usr_src/modules/dahdi/ make
va bene l'utente non privilegiato, come quando si è eseguita la procedura di compilazione con module-assistant. Al termine non rimuovere i file autogenerati: include/dahdi/version.h
e drivers/dahdi/Module.symvers
.
Modificare lo script Setup come indicato al problema #3.
Fatto questo il ./Setup dahdi
funziona e il modulo kernel wanpipe risultante si carica con successo:
[ 8383.502960] WANPIPE(tm) Multi-Protocol WAN Driver Module 3.5.28.0 (c) 1994-2010 Sangoma Technologies Inc [ 8383.502966] wanpipe: Probing for WANPIPE hardware. [ 8383.503015] pci 0000:03:04.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16 [ 8383.515036] wanpipe: AFT-A200-SH PCIe FXO/FXS card found (HDLC rev.13), cpu(s) 1, bus #3, slot #4, irq #15 [ 8383.515053] wanpipe: Allocating maximum 1 devices: wanpipe1 - wanpipe1. [ 8383.515644] WANPIPE: TDM Codecs Initialized
Soluzione con pacchetto Debian
Il comando Setup
di Wanpipe supporta lo switch builddeb
che, senza usare i privilegi di root, compila tutti i moduli kernel e gli eseguibili, installandoli in una directory chroot e infine compilando un pacchetto .deb.
Ma non vi eccitate: la soluzione fa comunque schifo! La compilazione funziona da utente non privilegiato, ma i file risultanti messi nel pacchetto deb appartengono a tale utente (non viene usato fakeroot
), quindi bisogna compilare come root. Sangoma: dilettanti allo sbaraglio!
- Compilare i dahdi-modules con
module-assistant
(vedi paragrafo sopra). In breve si deve creare e installare il pacchetto Debian ed eseguire subito dopo ilmake
nella directorydahdi
. - Scompattare wanpipe-3.5.28.tgz.
- Modificare
Setup
in modo da includere la versione del kernel (vedi problema #3). - Prima di installare il pacchetto fare una copia dell'eventuale configurazione funzionante!!! (Tutta la
/etc/wanpipe/
, in particolare/etc/wanpipe/wanrouter.rc
).
cd /usr/local/src/ tar zcvf wanpipe_etc.tgz /etc/wanpipe/ tar zxvf wanpipe-3.5.28.tgz cd wanpipe-3.5.28 vi Setup ./Setup builddeb --with-zaptel=/usr/local/src/dahdi-2.6.1+dfsg2-1/usr_src/modules/dahdi --protocol=TDM dpkg --force-overwrite -i wanpipe_3528-k320-4-amd64_x86_64.deb
- Il protocollo TDM è sufficiente per la scheda A200 con modulo FXO.
- Il
--force-overwrite
è necessario per sovrascrivere il filewanrouter.ko
fornito anche dal pacchettolinux-image-3.2.0-3-amd64
: una porcheria dopo l'altra! Forse con il kernel 3.2.0-4-amd64 non esiste più il problema. - Il file
/etc/init.d/wanrouter
installato dal pacchetto genera dei warning perché non contiene le necessarie voci LSB: di bene in meglio! - Il postinst potrebbe fallire perché non riesce a caricare e scaricare il modulo wanrouter, in tal caso editare
/var/lib/dpkg/info/wanpipe.postinst
, cercare le righe conmodprobe
e mettereeval "modprobe wanrouter" || true
; eseguire nuovamente ildpkg --configure wanpipe
: la galleria degli orrori!
Aggiornamento del kernel
Nel caso in cui venga aggiornato il kernel è necessario ripetere i seguenti passaggi:
- Compilazione dei
dahdi-modules
conmodule-assistant
e installazione del risultante pacchetto .deb. - Esecuzione di
make
nella directory/usr/local/src/dahdi-<ver>/usr_src/modules/dahdi/
. - Compilazione di wanpipe con l'opzione
builddeb
e installazione del pacchetto .deb risultante. - Ripristino della configurazione
/etc/wanpipe/wanrouter.rc
e/etc/init.d/wanrouter
(in realtà un link a/usr/sbin/wanrouter
).
Configurazione e caricamento stack software
Questo è l'ordine con cui deve essere caricato il software:
/etc/init.d/dahdi start
Carica il modulo kernel dahdi./etc/init.d/wanrouter start
In realtà è una copia del comando/usr/sbin/wanrouter
. Carica il modulo kernel wanpipe./usr/sbin/dahdi_cfg
Viene eseguito all'avvio didahdi
, ma deve essere eseguito nuovamente dopo che è stato avviatowanrouter
altrimenti Asterisk non trova i canali DAHDI./etc/init.d/asterisk start
Avvia il centralino VoIP Asterisk.
La configurazione può essere fatta in modo guidato con il tool setup-sangoma
che fa l'autodetect dell'hardware ed esegue i sottoprogrammi necessari. Nel nostro caso è equivalente ad eseguire wancfg_dahdi
. Fare attenzione che questa procedura (è software Sangoma: siete avvertiti!) vuole riscrivere tutti i file di configurazione Dahdi, Wanpipe e Asterisk, quindi ogni personalizzazione viene persa.
Esiste anche il tool dahdi_cfg
(software Debian) che genera la configurazione per dahdi e quindi si sovrappone parzialmente per funzionalità ai tool setup-sangoma
e wancfg_dahdi
.
Dopo aver configurato e caricato dahdi e wanpipe si può vedere se i canali vengono riconosciuti e se è presente la linea telefonica sul primo canale:
wanpipemon -i w1g1 -c astats -m 1 ------- Voltage Status (FXO,port 0) ------- VOLTAGE : 49 Volts ------- Line Status (FXO,port 0) ------- Line : connected
Configurazione di DAHDI
NOTA 1 Debian include il modulo kernel per la cancellazione echo OSLEC, oltre al predefinito MG2. Di conseguenza i vari tool sono stati patchati per utilizzarlo.
NOTA 2 La documentazione spesso fa riferimento al modulo ztdummy
o al più moderno dahdi_dummy
. Debian ha applicato una patch accettata upstream per cui il modulo non è più necessario e viene usato il timing interno.
NOTA 3 Una porta FXO viene collegata alla linea telefonica, su di essa la scheda telefonica deve attivare la segnalazione FXS.
/etc/dahdi/system.conf
File di configurazione letto dal tool dahdi_cfg
per configurare a run-time il modulo kernel dahdi
.
Il file può essere scritto a mano oppure generato (sovrascritto) dall'esecuzione di setup-sangoma
oppure dall'esecuzione di wancfg_dahdi
(entrambi installati con il software Wanpipe di Sangoma) oppure dall'esecuzione di dahdi_genconf
(installato con il pacchetto Debian dahdi).
Il tool setup-sangoma
fa l'autodetect dell'hardware installato e fa alcune domande per determinare la configurazione finale.
Il tool dahdi_genconf
fa l'autodetect dell'hardware (solo se il modulo kernel wanpipe
è caricato correttamente) e legge alcune impostazioni da /etc/dahdi/genconf_parameters
. Ad esempio con questo genconf_parameters
:
# Set tone zone values. This is used for playing tones (busy, dial-tone and such). # The default is us. This sets the value for both loadzone and defaultzone in system.conf. lc_country it # For FXO (analog lines) - use KS or LS? KS is the default and is normally the # better choice as it allows detecting hang-ups on many lines. fxo_default_start ks # The dialplan context into which to send trunks in chan_dahdi.conf or users.conf. context_lines from-pstn # The echo canceler to use. If you have a hardware echo canceler, just leave it be, # as this one won’t be used anyway. Debian dahdi-linux provides the OSLEC kernel module. echo_can oslec
produce il seguente /etc/dahdi/system.conf
:
# Span 1: WRTDM/0 "wrtdm Board 1" (MASTER) fxsks=1 echocanceller=oslec,1 fxsks=2 echocanceller=oslec,2 # Global data loadzone = it defaultzone = it
La zona indica quali convensioni nazionali usare per le segnalazione sulla linea (segnale di libero, occupato, squillo, ecc.), se un canale non indica una zona particolare verrà usata quella di default.
La parola chiave fxsks
indica che sul quel canale viene attivata la segnalazione FXS (quindi è una porta FXO da collegare a una linea telefonica) e che si userà il meccanismo Kewlstart per richiedere il segnale di libero. La nostra scheda Sangoma ha due porte FXO, ma useremo solo la prima.
Con un file di configurazione corretto e dopo aver caricato correttamente anche Wanpipe (vedi paragrafo successivo) è possibile eseguire dahdi_cfg
e verificare con dmesg
che i canali DAHDI siano stati configurati:
[160213.897210] wanpipe1: Open (usecount=1, channo=1, chanpos=1)... [160213.897226] wanpipe1: Open (usecount=1, channo=2, chanpos=2)...
Se non si esegue dahdi_cfg
i canali DAHDI non sono disponibili, Asterisk ad esempio non carica neanche il modulo chan_dahdi
:
ERROR[4384] chan_dahdi.c: Unable to open channel 1: No such device or address here = 0, tmp->channel = 1, channel = 1 ERROR[4384] chan_dahdi.c: Unable to register channel '1'
/etc/dahdi/modules
Elnco dei moduli kernel da caricare al boot. Non serve nel nostro caso.
/etc/dahdi/init.conf
Modifica il comportamento di default di /etc/init.d/dahdi
. Non serve nel nostro caso.
Configurazione di Wanpipe
Se tutto è stato configurato correttamente, eseguendo /etc/init.d/wanrouter start
il kernel logga:
WANPIPE(tm) Interface Support Module 3.5.28.0 (c) 1994-2010 Sangoma Technologies Inc WANPIPE(tm) Multi-Protocol WAN Driver Module 3.5.28.0 (c) 1994-2010 Sangoma Technologies Inc wanpipe: Probing for WANPIPE hardware. wanpipe: AFT-A200-SH PCIe FXO/FXS card found (HDLC rev.13), cpu(s) 1, bus #3, slot #4, irq #16 ... wanpipe1: Starting WAN Setup Processing WAN device wanpipe1... wanpipe1: Locating: A200/A400/B600/B700/B800/B610 card, CPU A, PciBus=3, PciSlot=4 wanpipe1: Found: A200/A400/B600/B700/B800/B610 card, CPU A, PciBus=3, PciSlot=4, Port=0 wanpipe1: AFT PCI memory at 0xDF9F0000 ... wanpipe1: Configuring FXS/FXO Front End ... wanpipe1: Module 1: Installed -- Auto FXO (FCC mode)! wanpipe1: Module 2: Installed -- Auto FXO (FCC mode)! ... wanpipe1: Configuring Device :wanpipe1 FrmVr=13 wanpipe1: Global MTU = 1500 wanpipe1: Global MRU = 1500 ... wanpipe1: Configuring Interface: w1g1 wanpipe1:w1g1: Running in TDM Voice Zaptel Mode. wanpipe1: Registering TDMV FXO iface to module 1! ... wanpipe1: Configuring Interface: w1g1 (log supress) wanpipe1: Configuring TDMV Master dev w1g1 wanpipe1: Registering TDMV FXO iface to module 2! ... wanpipe1: ALAW override parameter detected. Device will be operating in ALAW wanpipe1: Wanpipe device is registered to Zaptel span # 1! wanpipe1: AFT communications enabled! wanpipe1: AFT Per Port TDM Intr (swring) wanpipe1: Module 1: FXO Line is connected!
/etc/wanpipe/wanpipe1.conf
Definisce i device e le interfacce disponibili con il software Wanpipe. Nel nostro caso il device è la scheda A200 e le interfacce sono le due porte FXO installate.
Può essere scritto a mano oppure generato automaticamente dallo script setup-sangoma
o dallo script wancfg_dahdi
. Nel nostro caso abbiamo accettato tutte le impostazioni predefinite scegliendo il codec ALAW (Europe). Questo il risultato:
[devices] wanpipe1 = WAN_AFT_ANALOG, Comment [interfaces] w1g1 = wanpipe1, , TDM_VOICE, Comment [wanpipe1] CARD_TYPE = AFT S514CPU = A CommPort = PRI AUTO_PCISLOT = NO PCISLOT = 4 PCIBUS = 3 FE_MEDIA = FXO/FXS TDMV_LAW = ALAW TDMV_OPERMODE = FCC RM_BATTTHRESH = 3 RM_BATTDEBOUNCE = 16 FE_NETWORK_SYNC = NO MTU = 1500 UDPPORT = 9000 TTL = 255 IGNORE_FRONT_END = NO TDMV_SPAN = 1 TE_AIS_MAINTENANCE = NO TDMV_HW_DTMF = NO TDMV_HW_FAX_DETECT = NO HWEC_OPERATION_MODE = OCT_NORMAL HWEC_DTMF_REMOVAL = NO HWEC_NOISE_REDUCTION = NO HWEC_ACUSTIC_ECHO = NO HWEC_NLP_DISABLE = NO HWEC_TX_AUTO_GAIN = 0 HWEC_RX_AUTO_GAIN = 0 HWEC_TX_GAIN = 0 HWEC_RX_GAIN = 0 [w1g1] ACTIVE_CH = ALL MTU = 8 TDMV_HWEC = NO
/etc/wanpipe/wanrouter.rc
File di configurazione utilizzato dagli script Wanpipe che indica le directory da utilizzare, alcuni parametri di funzionamento, ecc.
Viene generato (sovrascritto) all'esecuzione di wancfg_dahdi
.
/etc/init.d/wanrouter
Script che esegue lo start/stop del tool wanrouter
, scopo principale dello script è caricare il modulo kernel wanpipe
e le sue dipendenze.
Lo script viene abilitato ai vari runlevel quando si esegue la procedura di setup setup-sangoma
o wancfg_dahdi
.
Anche questo script di Sangoma fa schifo: non contiene i tag LSB (Linux Standard Base) per organizzare la sequenza di bootstrap e insserv
giustamente si lamenta:
insserv: warning: script 'K01wanrouter' missing LSB tags and overrides insserv: warning: script 'wanrouter' missing LSB tags and overrides
Questi i tag LSB che abbiamo aggiunto dentro allo script:
### BEGIN INIT INFO # Provides: wanrouter # Required-Start: dahdi # Required-Stop: dahdi # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: WANPIPE WAN Router Initialization Script # Description: This file should be used to construct scripts to be # placed in /etc/init.d. ### END INIT INFO
/etc/wanpipe/scripts/start
Come spiegato nella FAQ Auto-start Zaptel after Wanpipe, è indispensabile eseguire dhadi_cfg
dopo aver avviato wanrouter
. Lo script /etc/wanpipe/scripts/start
qui è stato adattato a DAHDI e ad una shell diversa da Bash:
#!/bin/sh # Make sure that udev/devfs DAHDI device has come up. cnt=1 max_delay=10 while [ "$cnt" -le "$max_delay" ]; do if [ -e /dev/dahdi/ctl ]; then break; fi echo "Waiting for DAHDI device /dev/dahdi/ctl ($cnt/$max_delay)..." sleep 1 cnt=$(($cnt + 1)) done if [ ! -e /dev/dahdi/ctl ]; then echo echo "Error: DAHDI device failed to come up"; echo "Possible Cause: UDEV not installed!"; echo exit 1 fi sleep 1 dahdi_cfg -vvvv exit 0
Configurazione di Asterisk
Installare i pacchetti Debian:
- asterisk
- asterisk-dahdi
- asterisk-prompt-it-menardi-gsm
asterisk-dahdi serve ad interfacciare Asterisk con i canali DAHDI, asterisk-prompt-it-menardi-gsm contiene i messaggi del centralino in italiano. Quando tutto è configurato correttamente ed Asterisk si è avviato, è possibile connettersi alla console e verificare i canali DAHDI:
asterisk -vr Asterisk 1.8.13.1~dfsg-1, Copyright (C) 1999 - 2012 Digium, Inc. and others. ... ========================================================================= Connected to Asterisk 1.8.13.1~dfsg-1 currently running on naxos (pid = 11482) *CLI> dahdi show channels Chan Extension Context Language MOH Interpret Blocked State pseudo default default In Service 1 from-pstn default In Service 2 from-pstn default In Service *CLI>
Invece eventuali messaggi di errore vengono loggati in /var/log/asterisk/messages
.
Terminologia
Canale | Percorso attraverso il quale instradare delle chiamate, può essere ad esempio FXO (linea telefonica), FXS (apparecchio telefonico), SIP (voce su IP, standard usato da molti device), IAX (voce su IP, standard proposto da Asterisk). |
---|---|
Estensione | |
Contesto |
Principali file di configurazione
/etc/asterisk/chan_dahdi.conf
Il file può essere scritto a mano oppure generato (sovrascritto) dall'esecuzione di setup-sangoma
oppure dall'esecuzione di wancfg_dahdi
(entrambi installati con il software Wanpipe di Sangoma). Contiene la configurazione globale DAHDI e dei canali.
Questa è la parte relativa ai due canali FXO della scheda A200:
;Sangoma AFT-A200 [slot:4 bus:3 span:1] <wanpipe1> ; Span 1: WRTDM/0 "wrtdm Board 1" (MASTER) ;;; line="1 WRTDM/0/0" context=from-pstn group=0 echocancel=yes signalling=fxs_ks callerid=asreceived channel => 1 ;;; line="2 WRTDM/0/1" context=from-pstn group=0 echocancel=yes signalling=fxs_ks callerid=asreceived channel => 2
/etc/asterisk/dahdi-channels.conf
Il file può essere scritto a mano oppure generato (sovrascritto) dall'esecuzione di setup-sangoma
oppure dall'esecuzione di wancfg_dahdi
(entrambi installati con il software Wanpipe di Sangoma) oppure dall'esecuzione di dahdi_genconf chandahdi
(installato con il pacchetto Debian dahdi). Questo file dovrebbe contenere solo la configurazione dei canali DAHDI e dovrebbe essere incluso (con una direttiva #include
) dal file di configurazione vero e proprio chan_dahdi.conf
.
/etc/asterisk/modules.conf
In questo file si può disabilitare il caricamento di moduli Asterisk che non servono. Abbiamo disabilitato il modulo LDAP Realtime Driver e altri:
; No LDAP database for RealTime Configuration. noload => res_config_ldap.so ; No DAHDI transcoding cards installed. noload => codec_dahdi.so ; No Voicetronix cards installed. noload => chan_vpb.so ; No FreeTDS library to log to Microsoft SQL Server. noload => cel_tds.so ; No AIS (Application Interface Specification) for clustering. noload => res_ais.so ; We don't want Asterisk Extension Language and dialplan in extensions.ael noload => pbx_ael.so ; We don't want dialplan written in Lua (extensions.lua). noload => pbx_lua.so ; We don't store Call Detail Records into PostgreSQL. noload => cdr_pgsql.so
Iil caricamento di moduli non necessari causava messaggi di errore o di warning e un asterisk general protection che impediva ad Asterisk di partire (anche Asterisk lascia a desiderare: una configurazione sbagliata che genera un general protection è sintomo di software scritto male!):
ERROR[22971] res_config_ldap.c: No directory URL or host found. ERROR[22971] res_config_ldap.c: Cannot load LDAP RealTime driver. NOTICE[11891] cel_tds.c: cel_tds has no global category, nothing to configure. WARNING[11891] cel_tds.c: cel_tds module had config problems; declining load ERROR[11891] codec_dahdi.c: Failed to open /dev/dahdi/transcode: No such file or directory ERROR[11891] chan_vpb.cc: No Voicetronix cards detected ERROR[11891] ais/clm.c: Could not initialize cluster membership service: Try Again
asterisk[11418] general protection ip:7f637a77fee2 sp:7fffc2e658d0 error:0 in libc-2.13.so[7f637a748000+17d000]
/etc/asterisk/asterisk.conf
Per avere le voci del centralino in italiano:
defaultlanguage = it
/etc/asterisk/extensions.conf
Contiene il dialplan del centralino Asterisk.
Client SIP
Per consentire la registrazione a un client SIP (softphone tipo CSipSimple per Android oppure un telefono IP) si aggiunge al file di configurazione /etc/asterisk/sip.conf
una sezione del tipo:
;--------------------------------------------------------------- ; SIP channel: mobile softphone ; It receives and places calls: it is a friend. ;--------------------------------------------------------------- [niccolo] callerid=Niccolo <100> type=friend context=sip-phones host=dynamic secret=MySipSecret
Il client SIP va inserito come estensione in un opportuno contesto, ad esempio in /etc/asterisk/extensions.conf
si definisce il contesto sip-phones con l'estensione (interno) 100:
[sip-phones] exten => 100,1,Verbose(1,Dialling extension 100: Niccolo SIP phone) exten => 100,n,Dial(SIP/niccolo,45) exten => 100,n,Hangup()
Wind: operatore bastardo che filtra le porte
Asterisk sta in ascolto sulla porta 5060 UDP e TCP, eventualmente anche sulla porta 5061 per il TLS. Acluni operatori di connettività (3G oppure ADSL) potrebbero filtrare tale traffico, in uscita o in ingresso. Ad esempio con una connessione 3G Wind verso una ADSL Wind Infostrada, la porta 5060 risulta totalmente filtrata!
Ovviamente è possibile mettere Asterisk in ascolto su altra porta (riconfigurando Asterisk oppure con regole iptables è possibile ridirigere una o più porte alternative sulla 5060), ma ancora non ho potuto verificare che la soluzione sia affidabile. Oltre al traffico SIP infatti c'è da verificare che anche il traffico voce (RTP) passi correttamente, con tutti i problemi connessi al NAT, ecc.
Problemi NAT e firewall
Debug
Con una configurazione di DAHDI sbagliata Asterisk può non partire proprio. Ecco cosa succede lanciando il programma in modo interattivo:
# asterisk -cvvvvv ... == Registered application 'DAHDIBarge' app_dahdibarge.so => (Barge in on DAHDI channel application) Segmentation fault
Se invece il programma si avvia, è possibile uscire dalla linea di comando con:
*CLI> core stop now
TODO
Verificare se c'è da aggiornare il firmware.