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