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).