Differences between revisions 6 and 7
Revision 6 as of 2005-11-07 10:02:11
Size: 9477
Editor: Kurgan
Comment:
Revision 7 as of 2005-11-07 10:05:17
Size: 9524
Editor: Kurgan
Comment:
Deletions are marked like this. Additions are marked like this.
Line 149: Line 149:
Io per patchare il driver versione Debian ho usato la versione allegata, con la seguente procedura: Io per patchare il driver versione Debian ho usato la versione allegata (attachment:zaphfc_0.2.0-RC7j_florz-4.diff.gz), con la seguente procedura:

Configurazione di Asterisk con una scheda ISDN BRI (driver Zaptel)

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

Installazione pacchetto dei driver Zaptel

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

  • Installare i seguenti pacchetti:
    • Kernel source di un 2.6 (io uso al momento il 2.6.12)
    • Dpatch
    • Zaptel
    • Zaptel-source
  • Compilare il kernel custom, avendo cura di abilitare nella sezione "Library" la voce "CRC-CCITT functions". Non e` necessario configurare nulla che riguarda l' ISDN.
  • installare il kernel cosi` compilato e ribootare
  • Eseguire il comando magico module-assistant a-i zaptel per compilare e installare i moduli Zaptel in una sola mossa

  • Eseguire depmod -a

  • Caricare il modulo zaphfc il quale dovrebbe caricare anche zaptel

  • Vedere dmesg per verificare se la scheda e` stata vista

  • Eseguire cat /proc/interrupts per vedere se la scheda condivide un interrupt (vedansi le note in fondo)

  • Prima di poter usare il driver, occorrera` modificarne le configurazioni (vedi sotto)

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

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
;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 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

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:

  • ztcfg (ricarica la configurazione da /etc/zaptel.conf nel modulo gia` in esecuzione)
  • ztmonitor (mostra i livelli audio sulle linee delle interfacce zaptel per il fine-tuning)
  • ztspeed (boh? fa un test di alcuni secondi e mostra un risultato numerico)
  • zttest (Misura l'accuracy di qualcosa?)
  • zttool (mostra lo stato delle interfacce Zaptel installate)

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

  • In Italia l' ISDN usa la codifica A-law, quindi per limitare il carico di transcodifica fra ISDN e telefoni IP, qualora la banda non sia un problema, e` conveniente configurare i telefoni IP per usare anche essi la codifica "alaw" in sip.conf.
  • Se la scheda ISDN condivide l'interrupt, Asterisk puo` dare di matto, perche` usa il timing della scheda ISDN, e in condizioni di interrupt condiviso il sistema non riesce piu` a stare dietro alla montagna di interrupt tirati dalla scheda. Occorre spostare la scheda fino a ottenere una configurazione in cui la scheda ISDN ha un interrupt da sola. In caso di problemi i sintomi sono principalmente due: una montagna di errori nel syslog da parte del driver zaphfc e tutto l'audio generato da Asterisk che si sente a scatti tipo CD che salta.
  • In Italia, in una configurazione BRI PTMP, e` normale che nel log di asterisk (con verbosita` alta) si leggano continuamente messaggi come questi:
     == Primary D-Channel on span 1 down
     == Primary D-Channel on span 1 up
    Questi sono causati dal fatto che la centrale quando la linea e` idle mette down i layer 1 e 2, e Asterisk li ritira su al volo. L'importante e` che a un messaggio di down ne segua immediatamente uno di up, se cosi` non fosse, significa che il canale D resta down e quindi non si chiama ne` riceve.

Problemi di interrupt e patches

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 (attachment:zaphfc_0.2.0-RC7j_florz-4.diff.gz), con la seguente procedura:

  • dopo aver scaricato i sorgenti Debian (vedi sopra) occorre scompattare il file /usr/src/zaptel.tar.bz2 il che crea la directory /usr/src/modules/zaptel e tutto quello che ci sta sotto.
  • prendere la patch allegata a questa pagina (o dal sito dell'autore) e scompattarla dove volete
  • entrare in /usr/src/modules/zaptel ed eseguire
    •    patch -p1 < zaphfc_0.2.0-RC7j_florz-4.diff
  • La patch dara` errori su Makefile ma patchera` correttamente zaphfc.c e zaphfc.h
  • Ora, per fare felice il sistema Debian, occorre ricreare il file zaptel.tar.bz2 con dentro i files modificati, quindi, da dentro la direcotory /usr/src, eseguire:
    •    tar cvjf zaptel.tar.bz2 modules/*
  • Se si e` gia` compilato il file deb di installazione dei moduli, cancellarlo perche` altrimenti il module-assistant non lo ricrea
  • Ora, creare il file di installazione deb con:
    •    module-assistant build zaptel
  • Per finire, installare i moduli con il comando
    •    dpkg -i zaptel-modules-<quello che e`>.deb

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