===== Configurazione di una scheda Digium B410P con mISDN =====
La configurazione di una scheda Digium B410P con Asterisk 1.4 (su Debian Lenny) mi ha fatto impazzire parecchio.
Riporto qui la configurazione, sperando di ricordare tutti i passi. La B410P e` una scheda quad-BRI basata sul chipset HFC. Nonostante abbia un chipset HFC che dovrebbe essere supportato anche da zaptel (zaphfc), essendo una scheda con 4 porte, non e` supportata da detto driver, ma dal nuovo framework mISDN (www.misdn.org). La documentazione indicata sul sito Digium per installare la B410P e` probabilmente obsoleta, il driver fornito da Digium non compila sui kernel moderni (2.6.2x).
==== Installazione di mISDN ====
* Scaricare il driver mISDN (misdn.tar.gz) e i tool in userspace (misdnuser.tar.gz) da www.misdn.org (ho usato la versione 1.x e non la 2.x)
* Installare i kernel-headers per il kernel Debian Lenny
* Installare i pacchetti necessari a compilare: flex libncurses libncurses5-dev
* Compilare e installare il driver mISDN e i tool userspace, seguendo le procedure indicate sul sito di mISDN. (fondamentalmente eseguire make e make install)
* La prima volta che si installa il modulo relativo alla scheda (hfcmulti) il driver si autoconfigura e scrive il file /etc/misdn-init.conf, il quale puo` essere modificato se serve. Io ho modificato detto file per aggiungere in fondo la voce "timer=1" che dovrebbe servire a generare un timing per ztdummy, che vedremo dopo.
* Se il driver si e` installato correttamente, il comando "misdnportinfo" riporta le 4 porte della scheda con la loro configurazione.
==== Ricompilazione di Asterisk ====
Purtroppo Asterisk fornito con Lenny non supporta chan_misdn. Altrettanto purtroppo, non e` possibile aggiungere il modulo chan_misdn senza ricompilare Asterisk, o almeno io non saprei come fare. Quindi mi devo ricompilare Asterisk.
* Portarsi in /usr/src
* Scaricare il sorgente di Asterisk di Debian con il comando ''apt-get source asterisk''
* Eseguire ''./configure'' dentro la directory di Asterisk
* Eseguire ''make menuselect'' e verificare che chan_misdn sia selezionato
* Eseguire ''dpkg-buildpackage -b'' per compilare i pacchetti binari. Se mancano dipendenze, verranno elencate.
* Io ho dovuto installare i seguenti pacchetti per le dipendenze: ''quilt zlib1g-dev libreadline5-dev libgsm1-dev libssl-dev libtonezone-dev libasound2-dev libpq-dev unixodbc-dev libpri-dev libvpb-dev zaptel-source autotools-dev libnewt-dev libsqlite-dev libspeex-dev libspeexdsp-dev graphviz libcurl4-openssl-dev doxygen gsfonts libpopt-dev libopenh323-dev libiksemel-dev libradiusclient-ng-dev freetds-dev libvorbis-dev libsnmp-dev libc-client2007b-dev libcap2-dev''
* Eseguire ''dpkg-buildpackage -b'' per compilare i pacchetti binari. Questa volta dovrebbe funzionare.
* Installare i pacchetti di Asterisk appena compilati, da /usr/src, con "dpkg -i"
* Mettere i pacchetti di Asterisk in stato hold, altrimenti non so perche` aptitude insiste ad "aggiornarli" installando la versione binaria originale di Debian al posto della mia ricompilata.
==== Installazione dei driver Zaptel ====
I drivers Zaptel, specificamente ztdummy, mi servono per generare il timing per fare funzionare Asterisk. Apparentemente il driver mISDN non genera il timing. L'installazione del driver e` molto semplice, grazie a Debian. Tutto si riduce a:
* ''m-a a-i zaptel''
* ''modprobe ztdummy''
==== Configurazione di Asterisk ====
A parte tutte le configurazioni specifiche di Asterisk, elenco qui come configurare le parti che riguardano mISDN.
Prima di tutto, la configurazione di ''/etc/asterisk/misdn.conf''. Questi sono tutti i settaggi, sia quelli che erano a default, sia quelli che non lo erano.
[general]
misdn_init=/etc/misdn-init.conf
debug=0
ntdebugflags=0
ntdebugfile=/var/log/misdn-nt.log
ntkeepcalls=no
bridging=no
stop_tone_after_first_digit=yes
append_digits2exten=yes
dynamic_crypt=no
crypt_prefix=**
crypt_keys=test,muh
[default]
context=misdn
language=it
musicclass=default
senddtmf=yes
far_alerting=no
allowed_bearers=all
nationalprefix=0
internationalprefix=00
rxgain=0
txgain=0
te_choose_channel=no
pmp_l1_check=yes
reject_cause=16
need_more_infos=no
nttimeout=no
method=standard
overlapdial=no
dialplan=0
localdialplan=0
cpndialplan=0
early_bconnect=yes
incoming_early_audio=no
nodialtone=no
presentation=-1
screen=-1
echocancel=yes
jitterbuffer=4000
jitterbuffer_upper_threshold=0
hdlc=no
max_incoming=-1
max_outgoing=-1
[misdn_outgoing]
msns=*
ports=1,2,3,4
Qui di fatto definisco un context di default nel quale le chiamate dalle linee isdn entrano, con il nome di "misdn". Configuro le 4 linee come TE_PTMP, e imposto il driver per verificare se il layer 1 e` giu` e non usarle nel caso in cui lo sia. Questa impostazione, che richiede una configurazione speciale anche in extensions.conf, e` utile per saltare automaticamente le linee che per qualche motivo sono rotte o scollegate. Imposto anche le 4 linee in un gruppo, di nome "misdn_outgoing", che usero` per chiamare.
Poi, in extensions.conf, definisco il comando di dial per fare un check del layer 1 prima di chiamare, e per usare tutti i canali disponibili nel gruppo che ho creato prima. Il problema e` che Telecom tiene il layer 1 in stato DOWN quando la linea non e` in uso, per questo devo fare un check provando a metterlo UP prima di chiamare.
[chiamate_uscenti]
exten => _0.,1,misdn_check_l2l1(g:misdn_outgoing|2)
exten => _0.,2,Dial(mISDN/g:misdn_outgoing/${EXTEN:1})
exten => _0.,3,HangUp(16)
exten => _0.,103,HangUp(16)
Poi, mi resta da risolvere un altro problema: non ho capito come mai, chiamando dai telefoni interni (SIP) verso la ISDN, i toni che si sentono per libero, occupato, eccetera, sono americani e non italiani, nonostante io abbia impostato ovunque in fatto che dovrebbero essere generati toni italiani.
Per risolvere questo problema, che non e` fondamentale ma fastidioso, ho modificato ''/etc/asterisk/sip.conf'' in modo da ottenere la generazione dei toni giusti. Veramente non mi e` chiaro se adesso sto sentendo i toni di segnalazione in-band che arrivano dalla Telecom oppure se chan_sip sta rigenerando i toni in standard italiano per i telefoni interni. Comunque, ho dovuto impostare ''progressinband=no'' (funziona anche "yes", ma non funziona "never" che e` il default).