Configurazione di Asterisk con una scheda ISDN BRI (driver Zaptel) In Debian Etch (obsoleto ma contiene informazioni utili)

Il driver Zaptel consente di pilotare schede ISDN PRI, BRI e multiBRI. Questa configurazione e` fatta per una scheda ISDN BRI con chipset HFC configurata come TE P2MP. (dio, *adoro* le sigle!) Per dirla in termini umani, si tratta di una configurazione in cui Asterisk si comporta come un centralino a cui e` connessa una linea telefonica ISDN configurata come punto-multipunto (la configurazione classica della singola linea ISDN).

Vale la pena di notare che in Etch esistono due versioni di asterisk, una delle due e` "bristuffed" e l'altra no. Credo (ma non ne sono sicuro, c'e` chi sostiene il contrario) che per poter usare delle schede ISDN BRI con chipset HFC (con il driver ZAPHFC) occorra necessariamente la versione "bristuffed".

In Etch ci sono due moduli per gestire le schede con chipset HFC: zaphcf e vzaphfc. Apparentemente (da provare) il secondo e` fatto per eliminare i problemi di interrupt. In ogni caso, in etch occorre necessariamente eseguire "ztcfg" una volta dopo aver caricato il modulo, altrimenti questo non si inizializza e non va. Se si prova a vederne lo stato con "zttool" prima e dopo, si nota che prima non e` inizializzato e dopo si`. Se il modulo non si inizializza, non genera il timing, quindi non solo non va l'isdn, ma nemmeno il voip (asterisk non manda fuori pacchetti RTP, quindi niente audio).


Installazione pacchetto dei driver Zaptel

Questa installazione e` per Debian Etch, se usate altro, installateveli come meglio e` opportuno.

E` possibile installarsi il pacchetto dei drivers Zaptel sia usando il kernel stock che compilandoselo.

Se ci si compila il proprio kernel, la procedura e`:

Se si installa sul kernel stock, la procedura e`:

Configurazione del modulo zaphfc

Al momento del caricamento, il modulo zaphfc fa riferimento al file /etc/zaptel.conf per impostare alcuni suoi parametri. Queste sono le impostazioni necessarie per una singola scheda HFC BRI, usata in Italia. Se si cambia qualcosa qui, occorre ricaricare il modulo zaphfc, oppure eseguire ztcfg che passa al modulo la nuova configurazione.

# hfc-s pci a span definition
# most of the values should be bogus because we are not really zaptel
loadzone=it
defaultzone=it

span=1,1,3,ccs,ami
bchan=1-2
dchan=3

## eventuale seconda scheda HFC 
 #span=2,1,3,ccs,ami 
 #bchan=4-5
 #dchan=6

Configurazione di Asterisk

Tutte le configurazioni del driver Zaptel in Asterisk sono in /etc/zapata.conf. Il modulo che asterisk deve caricare (vedi /etc/asterisk/modules.conf e` /usr/lib/asterisk/modules/chan_zap.so.

Questa e` una configurazione che sto testando, quindi prendetela con le pinze. Quelle lunghe.

; file /etc/asterisk/zapata.conf
; Zapata telephony interface Configuration file
; Per le schede ISDN con zapata e zaphfc

[channels]

; Default language
language=it

; Tipo di centrale (per l'italia e` euroisdn)
switchtype = euroisdn

; p2mp TE mode
signalling = bri_cpe_ptmp

; p2p TE mode (da usare se abbiamo linee PTP ovvero punto-punto)
;signalling = bri_cpe
; p2mp NT mode
;signalling = bri_net_ptmp
; p2p NT mode
;signalling = bri_net

; Queste dicono che per la Telecom vanno messe cosi`. Io non lo so.
pridialplan = unknown
prilocaldialplan = unknown
nationalprefix = 0
internationalprefix = 00

; Cancellazione dell'eco. Secondo me non serve su ISDN, dovro` provare a disattivarla.
echocancel=yes
echotraining = 100
echocancelwhenbridged=yes

; se ci sono problemi di eco vale la pena di provare a giocare con i gain in tx e rx...
; rxgain=-6.0
; txgain=4.0

; Per leggere i valori audio sulla linea, usare
; ztmonitor 1 -vv (1 e` il canale), usando un terminale piu` grande di 80x25 per vedere 
; correttamente i livelli. Vedi http://www.voip-info.org/wiki/view/Asterisk+zapata+gain+adjustment



; Se voglio poter discernere gli MSN (se ne ho) sulle chiamate entranti, allora
; immeditate deve essere "no", e nel file estensions.conf dovro` discernere cosa fare per ogni MSN chiamato.
; Altrimenti lo metto a "yes" e nel file extensions.conf ricevero` sempre chiamate alla extension "s" di start.
immediate=no

; Gruppo 1 (al gruppo 1 faro` apparetenere tutti e due i canali B, in modo da usarli in maniera indifferenziata)
group = 1

; Context a cui arriveranno le chiamate in extensions.conf
context=isdn

; Per finire, tutto quello che e` stato detto sopra lo applico ai canali 1 e 2 (i due canali B della mia BRI)
channel => 1-2

; se ho due schede, la riga sopra deve contenere anche gli altri canali B, e diventa:
;  channel => 1,2,4,5

Riporto qui un esempio di configurazione di extensions.conf per usare le linee ISDN per chiamare e ricevere, con e senza la distinzione degli MSN chiamati (cioe` dei numeri aggiuntivi, se ne ho, a cui vengo chiamato).

; context "isdn", cosi` come definito in zapata.conf, per le chiamate entranti.
[isdn]

; se ho impostato "immediate=yes" in zapata.conf, tutte le chiamate arrivano
; all'extension "s" di start, quindi per esempio per far suonare
; un telefono SIP quando mi chiamano sulla ISDN usero`:
exten => s,1,Dial(SIP/Int101)

; se ho impostato "immediate=no" in zapata.conf, le chiamate entrano su
; extensions che hanno il numero corrispondente all' MSN chiamato.
; supponendo che io abbia i numeri "051555555" e "051666666", posso discernere
; le chiamate in ingresso ed assegnarne una ad un telefono SIP e una all'altro.
exten => 051555555,1,Dial(SIP/Int101)
exten => 051666666,1,Dial(SIP/Int102)

Per verificare con che numero di estension entrano le chiamate dalla linea ISDN, e` sufficiente abilitare abbastanza debug su Asterisk (con il comando "asterisk -rvvv") e provare a chiamarsi sulla ISDN.

Comandi in userspace

Il sistema "zaptel" dispone di alcuni comandi in userspace, essi sono:

Di questi, ztcfg sicuramente funziona con le schede HFC, secondo me gli altri malfunzionano o riportano valori errati in quanto il driver ZapHFC non e` veramente un driver completo come quelli delle schede Digium originali.

Note varie

Problemi di interrupt e patches relative - DOVREBBERO ESSERE OBSOLETI IN ETCH!!!

In tutte e due le mie installazioni di prova si verificano, apparentemente a caso (una race condition?) errori di interrupt persi, sincronizzazione, persa, eccetera. Per esempio:

zaphfc: sync lost, pci performance too low. you might have some cpu throtteling enabled.
zaphfc: bchan rx fifo not enough bytes to receive! (z1=3631, z2=3624, wanted 8 got 7), probably a buffer overrun.

Oltre ad avere milioni di righe di log come queste, succede che la voce si sente a tratti, distorta e con delle micro-interruzioni in mezzo.

Il problema e` che il driver zaphfc e` sensibilissimo al timing, e se si perde un solo interrupt e` la fine del mondo, da li` in poi va tutto da schifo ed occorre scaricare e ricaricare il modulo, il che e` ovviamente un problema enorme.

La soluzione consigliata e` quella di installare la scheda ISDN in modo che non condivida l'interrupt con nessun'altra scheda, ma la cosa non e` affatto banale, e inoltre in condizioni di carico la macchina puo` perdere comunque interrupts.

In seconda istanza, esiste una patch qui: http://zaphfc.florz.dyndns.org/ per il driver zaphfc che ha lo scopo di renderlo meno sensibile ai problemi di interrupt persi.

Io per patchare il driver versione Debian ho usato la versione allegata (zaphfc_0.2.0-RC7j_florz-4.diff.gz), con la seguente procedura:

Asterisk/Zaptel (last edited 2011-02-20 14:36:43 by Kurgan)