This is an old revision of the document!
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)
È possibile eseguire la compilazione come utente non privilegiato, ridirigendo tutto nella directory corrente:
cd /usr/local/src mkdir dahdi-2.6.1+dfsg-1 cd dahdi-2.6.1+dfsg-1 module-assistant --userdir . --text-mode build dahdi
Quindi, da root, si installa il pacchetto .deb risultante:
dpkg -i dahdi-modules-3.2.0-3-amd64_2.6.1+dfsg-1+3.2.23-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+dfsg-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/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!).
L'autodetect della versione dahdi si basa sulla presenza di un file version.h
autogenerato durante la compilazione, ma che la procedura guidata da module-assistant ha rimosso. Possiamo crearlo manualmente con:
echo '#define DAHDI_VERSION "2.6.1"' > /usr/local/src/dahdi/usr_src/modules/dahdi/include/dahdi/version.h
Per far funzionare il detect della versione kernel è più veloce 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
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
.
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!
- Scompattare wanpipe-3.5.28.tgz.
- Accertarsi di aver eseguito il
make
nella directorydahdi
dopo averlo compilato con module-assistant (vedi soluzione precedente). - Modificare
Setup
in modo da includere la versione del kernel (vedi problema #3).
cd /usr/local/src/wanpipe-3.5.28 ./Setup builddeb dpkg --force-overwrite -i wanpipe_3528-k320-3-amd64_x86_64.deb
Il --force-overwrite
è necessario per sovrascrivere il file wanrouter.ko
fornito anche dal pacchetto linux-image-3.2.0-3-amd64
: una porcheria dopo l'altra!
Il file /etc/init.d/wanrouter
installato dal pacchetto genera dei warning perché non contiene le necessarie voci LSB: di bene in meglio!
Come fa
Setup
in questo caso a trovare i sorgenti dahdi, ché durante il./Setup dahdi
non li trovava?È possibile ridurre le dimensioni dei moduli kernel non compilando quello che non serve? Es. supporto ISDN, ecc.
Configurazione di Wanpipe
Per creare i vari file di configurazione si esegue wancfg_dahdi
, viene riconosciuta automaticamente la scheda A200. Si accettano le impostazioni predefinite, ad eccezione di:
Which codec will be used? 2. ALAW - Europe Would you like wanrouter to start on system boot? 2. NO
I file di configurazione generati sono:
/etc/wanpipe/wanpipe1.conf
/etc/wanpipe/debug-*.tgz
/etc/dahdi/system.conf
/etc/asterisk/chan_dahdi.conf
TODO
Verificare se c'è da aggiornare il firmware.
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). |
---|
Configurazione
NOTA1: Debian include il modulo kernel per la cancellazione echo OSLEC, oltre al predefinito MG2. Di conseguenza i vari tool sono stati patchati per utilizzarlo.
NOTA2: 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.
File di configurazione, da editare manualmente o creare con gli appositi tool.
/etc/dahdi/modules | Elnco dei moduli kernel da caricare al boot. |
---|---|
/etc/dahdi/system.conf | File per la configurazione dell'hardware, letto da dahdi_cfg . |
/etc/dahdi/init.conf | Modifica il comportamento di default di /etc/init.d/dahdi . |
Editare il file /etc/dahdi/genconf_parameters
in modo che il tool dahdi_genconf
sappia cosa fare. Ecco un esempio:
# 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
dahdi_genconf system
produce il file /etc/dahdi/system.conf
dahdi_genconf chandahdi
produce il file /etc/asterisk/dahdi-channels.conf
Per configurare una porta FXO (da connettere alla linea telefonica) bisogna attivare su di essa la segnalazione (signaling) FXS.
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