User Tools

Site Tools


doc:appunti:hardware:sangoma_a200

This is an old revision of the document!


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 directory dahdi 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!

  • FIXME Come fa Setup in questo caso a trovare i sorgenti dahdi, ché durante il ./Setup dahdi non li trovava?
  • FIXME È 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

FIXME 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
doc/appunti/hardware/sangoma_a200.1347923502.txt.gz · Last modified: by niccolo