                                 UIDIGI

                  Versione 1.8 (20020608) TNC2

                 Copyright 2000~2002 Marco Savegnago IW3FQG

        Versione Italiana the English Version is in UIDIGIE.TXT


Cos'e' UIDIGI?
--------------
UIDIGI e' un firmware da utilizzare con un normale TNC2 per realizzare
un digipeater packet radio con funzioni avanzate adatto all'uso come
digipeater APRS (APRS is a register trademark of Bob Bruninga WB4APR).


Perche' UIDIGI?
---------------
Perche' anche se e' possibile usare un normale TNC per realizzare un
digipeater, UIDIGI realizza un digipeater con una serie di funzionalita'
che lo rendono adatto a venir impiegato in una rete APRS complessa.

Novita'di questa versione
-------------------------

Fate riferimento al files changes.txt per conoscere le novita' rispetto alle 
versioni precedenti


Le caratteristiche di UIDIGI
----------------------------
Il firmware puo' essere montato su un TNC2 o Clone compatibile al 100% con clock
della CPU a 2.4576Mhz, 4.9152Mhz 9,8304Mhz e 32K di RAM.
               
-  Supporta AX.25 versione 1 e 2.

-  Configurazione dei parametri AX.25 di comunicazione Timers, SlotTime
   Persistence etc direttamente nella EPROM o da remoto tramite interfaccia
   sysop protetta da password

-  Ripetizione dei soli frame AX.25 UI con PID definibile (default 240)

-  Ripetizione del frame AX.25 UI indirizzati al nominativo o alias del
   digipeater (nominativo e alias sono modificabili da remoto)

-  Ripetizione del frame AX.25 UI indirizzati fino a 8 indirizzi generici
   (es RELAY WIDE, CALL) modificabili anche da remoto.

-  Ripetizione del frame AX.25 UI indirizzati a un call generico a cui viene
   applicato l'algoritmo di flooding dell'ssid (per default WIDEN-N)
   modificabile anche da remoto.

-  Ripetizione del frame AX.25 UI indirizzati a un call generico a cui viene
   applicato l'algoritmo di trace + flooding dell'ssid (per default TRACEN-N)
   modificabile anche da remoto.

-  Ripetizione del frame AX.25 UI gestiti in base all'SSID con possibilita'
   di definire il PATH direzionale (Nord Sud Est e Ovest con SSID >= 8)

-  Limitazione temporale del rate di ripetizione di frame

-  Funzione per limitare i loop di duplicazione dei frame se questi sono
   generati dallo stesso digipeater, se il nominativo del digipeater compare
   nella lista dei digipeater che hanno gia' ripetuto quel frame e anche se
   il frame contiene indirizzi generici.

-  Gestione del preempted digipeating.

-  Gestione remota protetta da password con possibilita' di conoscere alcuni
   parametri statistici relativi al funzionamento del digipeater.

-  Lista delle stazioni ascoltate.

-  Trasmissione periodica di 3 beacon con intervallo di ripetizione,
   path destinazione e testo distinti (ridefinibili anche da remoto).

-  Risposta ai frame di query APRS provenienti da altre stazioni.


La versione di UIDIGI
---------------------
Se nell'intestazione del programma a fianco al numero di versione compare la
dicitura ALFA, BETA o GAMMA significa che il firmware potrebbe (e sicuramente
potra'!) non essere ancora completamente a posto per cio' che riguarda il
funzionamento.
Cosa c'e' di piu' brutto di quando un programma ha dei buchi e si pianta???
Per questo tendo a rilasciare le versioni dei miei programmi solo quando sono
certo del loro funzionamento (o gran parte).


Perche' ancora il TNC2?
-----------------------

- Perche' sicuramente chiunque ha un vecchio TNC2 a 1200bd da riciclare!
- Perche' un TNC2 e' economico, semplice da far funzionare consuma poco!
- Perche' in cima a una montagna un TNC2 e' molto meglio di un computer!


A cosa serve UIDIGI ??
----------------------
Chiunque opera in una rete packet radio APRS sa' che il sistema funziona se
ci sono dei digipeater che indipendentemente dal loro nominativo siano in grado
di ripetere frame indirizzati a path generici tipo RELAY o WIDE.
Per far questo e' possibile usare un normale firmware, comprarne uno della
Paccom oppure comprare un KPC Kantronics...
Altrimenti si puo' usare UIDIGI che fa' le stesse cose di un normale
digipeater con in piu' le caratteristiche sopra elencate.

Come usare UIDIGI
-----------------
UIDIGI funziona come qualunque altro firmware per TNC2.
Modificate il file sorgente di configurazione, compilatelo e generate il
file binario che andra' scritto su una EPROM da 32K.


Gestione di ripetizione dei frame
---------------------------------
Il digipeater e' abilitato a ripetere solo i frame AX.25 di tipo UI (proprio
per evitare che il digipeater possa venir utilizzato per fare del normale
traffico AX.25) indirizzati al proprio nominativo, il proprio alias o
agli indirizzi specificati con i parametri UIDIGI, UIFLOOD e UITRACE:

Metodo 1 (Percorso specifico):

    Un frame del tipo:
    IW3FQG>APRS v UIDIGI

    viene ripetuto da UIDIGI:
    IW3FQG>APRS v UIDIGI*


Metodo 2 (Percorso generico):

    Un frame del tipo:
    IW3FQG>APRS v RELAY, WIDE

    viene ripetuto dal primo UIDIGI con la sostituzione del call:
    IW3FQG>APRS v UIDIGI*, WIDE

Metodo 3 (UIFLOOD):
    Un frame del tipo:
    IW3FQG>APRS v RELAY,WIDE1-1

    viene ripetuto dal primo UIDIGI:
    IW3FQG>APRS v UIDIGI*, WIDE1-1

    e dal secondo UIDIGI (viene decrementato l'ssid e NON viene settato il bit H):
    IW3FQG>APRS v RELAY*, WIDE1-0

    e dal terzo UIDIGI (non viene decrementato l'ssid perche' e' gia' zero e viene
    settato il bit H):
    IW3FQG>APRS v RELAY, WIDE1-0*

Metodo 4 (UITRACE):
    Un frame del tipo:
    IW3FQG>APRS v RELAY,TRACE1-1

    viene ripetuto dal primo UIDIGI:
    IW3FQG>APRS v UIDIGI*, TRACE1-1

    e quindi dal secondo digipeater:
    e dal secondo UIDIGI (viene decrementato l'ssid e viene inserito il call del
    digipeater con il bit H settato):
    IW3FQG>APRS v RELAY, DIGI1*, TRACE1-0

    e dal terzo UIDIGI (l'ssid e' a zero viene fatta la sostituzione del
    nominativo con quello del digipeater e su questo viene settato il bit H):
    IW3FQG>APRS v RELAY, DIGI1, DIGI2*

Metodo 5 (SSID Path sperimentale):

    Questo metodo l'ho implementato in base alle mie osservazioni sul
    funzionamento del firmware presente nel ricetrasmettitore Kenwood TM-D700E.

    Per SSID > 0 e SSID < 8 su qualunque AX.25 UI frame con qualunque callsign
    di destinazione l'SSID viene decrementato di uno e il call del digipeater
    viene inserito nel path della lista di digipeater.

     Un frame

     IW3FQG>APRS-7:

     viene ripetuto:

     IW3FQG>APRS-6, UIDIGI*:

     Con SSID maggiore di 8 i frame viene trattato in maniera diversa perche'
     ci sono le regole di direzione:

     Se SSID e' uguale a 8 (Nord) su qualunque AX.25 UI frame con qualunque
     callsign di destinazione l'SSID viene posto a zero il call del digipeater
     viene inserito nel path della lista di digipeater seguito dal path per
     il nord inserito nella lista dei digipeater.

     Esempio un frame come:

     IW3FQG>APRS-8:

     viene ripetuto da un UIDIGI con NPATH = NORTH in:

     IW3FQG>APRS,UIDIGI*,NORTH:

     Se SSID e' uguale a 12 (Nord) su qualunque AX.25 UI frame con qualunque
     callsign di destinazione l'SSID viene posto allo stesso di quello che e'
     stato ricevuto (es 12) il call del digipeater viene inserito nel path della
     lista di digipeater seguito dal path per il nord inserito nella lista dei
     digipeater.


     IW3FQG>APRS-12:

     viene ripetuto da un UIDIGI con NPATH = NORTH in:

     IW3FQG>APRS-12,UIDIGI*,NORTH:

     La stessa regola vale per:
     Sud        SSID  9, 13
     Est        SSID 10, 14
     Ovest      SSID 11, 15

     In tutti i casi se il frame e' inviato al digipeater con anche un solo
     indirizzo nella lista di digipeater il frame non viene ripetuto:

     Es il frame:

     IW3FQG>APRS-8,UIDIGI:

     Non viene ripetuto.


Metodo 6 (Preempt digipeating): (sperimentale)

Il processo di prelazione e` una sorta di preprocessing dei frame ricevuti dal 
digipeater che rimuove i nominativi dei digipeater inutilizzati dal frame.

Quando un digipeater ascolta un frame come questo:

STATION1>APRS, PATH1, PATH2, PATH3

e ha PREEMPT 1, PREEMPTCALLS PATH3, PREEPTADD (none)

prima di gestire il frame con le regole standard di ripetizione di un frame APRS cambia il
frame in:

STATION1>APRS, PATH3

quindi processa il frame con le regole standard di ripetizione per i frame APRS.

Con il parametro PREEPTADD NEW1

il frame sara` STATION1>APRS, PATH3, NEW1

Ricordate che il processo di prelazione e` un preprocessing del frame quindi se dopo
essere stato preprocessato il frame non e` considerato da ripetere UIDIGI non trasmettera`
niente!

Consideriamo il seguente esempio:

Una stazione (IW3FQG) invia un frame:

IW3FQG>APRS,IR3VIF*, IR3VIG, IR3FAL

IR3FAL e' un digipeater che ascolta questo frame. Senza prelazione non ripeterebbe 
niente perche' questo frame dovrebbe essere prima ripetuto da IR3VIG.

Con preempt ON, e IR3FAL in PREEMPTCALLS, IR3FAL digipeater pre processa 
questo frame in questo modo:

IW3FQG>APRS,IR3VIF*,IR3FAL

e quindi ripete il frame:

IW3FQG>APRS,IR3VIF,IR3FAL*

In via opzionale con PREEMPTADD il digipeater puo` aggiungere ulteriori nominativi al path
quindi con il frame di prima e PREEMPTADD PATH1, PATH2 il frame risultante sara':

IW3FQG>APRS,IR3VIF,IR3FAL*,PATH1,PATH2

Metodo 7 (Local Preempt digipeating): (sperimentale)

Di seguito e' riportata la proposta fatta da IK2YDM e IW2FUS a TRACE2001:

La richiesta di una particolare funzione da implementare in UI-DIGI nasce 
dalla necessit di dare copertura APRS ad aree ristrette, ad esempio vallate, 
(o citt) senza che il necessario digi entri nella "catena" di ripetizioni 
tra digi di alta gerarchia andando cosi ad appesantire inutilmente , in ambito 
locale, la rete e rischiando di "bloccare" la propagazione dei beacon. 

Questi digi dovranno ovviamente oltre che "portare fuori" i beacon delle stazioni 
locali e mobili presenti nella valle anche "portare dentro" i beacon della rete 
che giungono attraverso i digi di alta gerarchia gia' presenti. 

Cosa succederebbe se per questo scopo usassimo dei normali digi di alta gerarchia ?? 

Poniamo un esempio limite riferito alla Lombardia ma valido ovunque e immaginiamo 
di voler dare copertura ad alcune delle valli che da nord su di essa si affacciano: 
Val Brembana , Val Seriana, Val Camonia , Val Trompia ,Val Sabbia. 

Se ponessimo per ciascuna di queste valli un digi normale , un beacon inviato da 
una stazione lombarda a TRACE7-7 vedrebbe "bruciate" ben cinque ripetizioni in 
ambito locale riducendo cosi notevolmente l'area da esso raggiunta e si avrebbe 
per di pi la saturazione locale del canale. 

Ecco quindi che abbiamo bisogno di un tipo di digi "furbo"  che pur eseguendo le 
ripetizioni non le "scali" dalla rete e che vada ad incidere il meno possibile in 
termini di traffico sul canale. 

Questo digi si dovr comportare in modo tradizionale per quanto riguarda i beacon 
da lui ascoltati in modo diretto ripetendo le classiche modalit relay,wide,widen-n 
e tracen-n per garantire la propagazione dei beacon provenienti dalla valle verso la 
rete ma dovr essere in grado di modificare l'unproto address dei beacon che riceve 
attraverso altri digi di gerarchia alta eliminando quanto in essi contenuto in modo 
che nessun altro digi ripeta la SUA ripetizione che sar per ricevuta nella valle 
raggiungendo lo scopo prefisso. 

Nello specifico, supponendo che il call del digi "furbo" sia IW2FUS-11 e che egli 
riceva direttamente da una stazione il seguente beacon: 

IK2YDM>APRS,TRACE7-7 

oppure 

IK2YDM>APRS,RELAY,TRACE7-7 

Esso dovr eseguire la ripetizione nel modo consueto e cio: 

IK2YDM>APRS,IW2FUS-11,TRACE7-6 

oppure 

IK2YDM>APRS, IW2FUS-11,TRACE7-7 

cosi da inviare il beacon verso il resto della rete. 

Invece se il beacon che esso riceve e' gi stato ripetuto da altri digi ad esempio: 

IK2YDM>APRS,IW2FPO-11,TRACE7-6 

oppure 

IK2YDM>APRS,IW2FPO-11,TRACE7-7 

dovr SEMPRE ripetere il beacon sostituendo i comandi di ripetizione (unproto address) 
in esso contenuti cosi: 

IK2YDM>APRS,IW2FUS-11 

In questo modo il beacon di IK2YDM continuer ad essere propagato attraverso la rete 
dagli altri digi di gerarchia alta ma senza aver perso delle ripetizioni locali ed 
inoltre se consideriamo che stringhe del tipo: 

IK2YDM>APRS,RELAY,DIGI1,DIGI2,DIGI3,DIGI4,DIGI5,DIGI6,TRACE7-1 

verrebbero ripetute solo come 

IK2YDM>APRS,IW2FUS-11 

e' evidente che anche con cinque digi si appesantirebbe il canale solo del minimo 
necessario allo scopo. 


L'interfaccia Sysop di UIDIGI
-----------------------------
Il sysop del digipeater puo' collegarsi direttamente al digipeater con un
programma di terminale oppure attraverso la seriale del TNC2.
Nel primo caso come prima cosa e' necessario richiedere la procedura di
identificazione come sysop (con il comando SYSOP), con qualunque altro comando
il digipeater scolleghera' l'utente.

I comando a disposizione del SYSOP sono i seguenti:

AUXDEST [address]
- Imposta l'indirizzo di destinazione dei beacon con i dati provenienti dal dispositivo 
  collegato alla porta seriale del TNC

AUXPATH [path]
- Imposta il path di destinazione dei beacon con i dati provenienti dal dispositivo 
  collegato alla porta seriale del TNC

AUXRATE [n]
- Imposta l'intervallo di emissione dei beacon con i dati provenienti dal dispositivo 
  collegato alla porta seriale del TNC

BEACON [bnum] [n]
- Imposta l'intervallo di emissione dei beacon (bnum = 1 ~ 3, n = 0 ~ 180 sec)

BEACONOFFSET [bnum] [n]
- Imposta l'offset di emissione dei beacon (bnum = 1 ~ 3, n = 0 ~ 180 sec)

BDL [bnum] [path]
- Imposta il path di destinazione per i beacon (bnum = 1~3, path = AX.25 path)

BTEXT [bnum] [text]
- Imposta il testo dei beacon (bnum = 1~3, text = beacon text)

BUDLIST [nominativi]
- Imposta la lista dei nominativi i cui frame non vengono ripetuti

CHECK [n]
- Imposta il parametro LinkCheck (0~65535)

CLOCK [hh] [mm] [ss]
- Imposta il clock interno del digipeater

CONNECT [nominativo]
- Permette di collegare un altro digipeater o utente

DIGIALIAS
- Imposta l'alias del digipeater

DIGICALL
- Imposta il nominativo del digipeater

DIGIPEAT [0|1]
- Flag globale di abilitazione/disabilitazione ripetizione frame.

DUPLIST
- Mostra il contenuto della lista anti ripetizioni
- Con DUPLIST _ il sysop puo` cancellare la lista

EPATH [path]
- Imposta path per destinazione Est (SSID 10|14)

FRACK [n]
- Imposta parametro FRACK

HIGH [0|1]
- Accende il LED (CON 0 o STA 1) del TNC2

INFO
- Mostra le informazioni sul funzionamento del digipeater

LED
- Mostra lo stato dei led del digipeater

LOW  [0|1]
- Spegne il LED (CON 0 o STA 1) del TNC2

MAXFRAME [n]
- Imposta il parametro MAXFRAME

MHEARD
- Mostra le stazioni ascoltate dal digipeater
- Con MHEARD _ il sysop puo` cancellare la lista

NPATH
- Imposta path per destinazione Nord (SSID 8|12)

PERSISTANCE
- Imposta il parametro PPersistance del digipeater

PREEMPT
- Attiva la gestione di preepted digipeating
  bit 0 abilita(1)/disabilita(0) la funzione di preempted digipeating
  bit 1 abilita(1)/disabilita(0) la funzione di preempted digipeating

PREEMPTCALL
- Imposta i callsign sui quali effettuare il preempted digipeating

PREEMPTADD
- Imposta la path da aggiungere tutte le volte che a un frame viene applicata la regola di 
  preemption

QUIT
- Disconnette dal digipeater

RESET
- Provoca un reset a caldo del digipeater

RESPTIME
- Imposta parametro resptime

RESTART
- Provoca un riavvio del digipeater

RETRY
- Imposta parametro RETRY

SLOTTIME
- Imposta parametro SLOTTIME

SPATH [path]
- Imposta path per destinazione Ovest (SSID 9|13)

SYSOP [?]
- Avvia da parte del digipeater la procedura per identificare l'utente come
  SYSOP. Con ? il digipeater ritorna l'esito della risposta

TEST
- Avvia la procedura per il test del trasmettitore

TXDELAY
- Imposta il valore di TxDelay

UICHECK [n]
- Imposta la verifica di frame UI duplicati per un tempo pari a n secondi

UIDIGI [calls]
- Imposta i call generici che il digipeater ripete con sostituzione del call (max 8)

UIDCSB 0|1
- Abilita/disabilita la sostituzione del nominativo nei frame indirizzati a call
  generici specificati con il parametro UIDIGI

UIFLDFL [n]
- bit 0 esegue il call substitution dopo l'ultimo WIDEn-n ripetuto
- bit 1 inserisce il nominativo del digipeater prima di WIDEn-n

UIFLOOD [call]
- Imposta il call generico da usare con l'algoritmo di flooding

UILOOP [n]
- Imposta il bitmask da usare per la limitazione dei loop 
    0x01 = Non ripete frame con l'indirizzo di origine uguale a quello del digipeater o il suo alias
    0x02 = Non ripete frame con l'indirizzo del digipeater nella lista dei digipeater che hanno gia' ritrasmesso il frame

UIMSG [n] (n=0-1) (default 1)
- Abilita la ripetisioni dei messaggi tra stazioni in formato UI-VIEW senza applicare le regole di 
  decremento dell'SSID

UIONLY [n] (n=0-1) (default 1)
- Abilita la ripetizione dei soli frame UI

UIQUERY [0|1]
- Imposta il flag di abilitazione alla risposta alle query APRS
  (Il beacon usato come risposta e' il numero 1).

UISSID [0|1]
- Imposta il flag di abilitazione a trattare i SSID degli indirizzi di
  destinazione dei frame UI

UITRACE [call]
- Imposta il callsign generico da usare con l'algoritmo trace

UITRFL [n]
- bit 0 esegue il call substitution dopo l'ultimo TRACEn-n ripetuto

UNPROTO [call]
- Imposta il call di destinazione dei beacon

WPATH [path]
- Imposta path per destinazione Ovest (SSID 11|15)

Nota: in totti i comandi che impostano path or nominativi (BDL, BTEXT, BUDLIST, DIGIALIAS,  
DIGICALL, EPATH, NPATH, SPATH, UIDIGI, UIFLOOD, UITRACE, UNPROTO, WPATH) per cancellare 
l'intero contenuto usare il carattere '_' 
Es: NPATH _ <enter> cancella l'intero contenuto di NPATH.


La configurazione di UIDIGI
---------------------------
Il programma UIDGCFG serve a modificare i valori di default dei parametri
memorizzati nella EPROM.
Per modificare i parametri per prima occorre editare il file UIDIGI.TXT
il cui nome puo' essere modificato) e modificare i parametri secondo le
esigenze.
Alla fine e' necessario usare il programma UIDGCFG.EXE per modificare il
file binario di destinazione che verra' usato per programmare la EPROM.

Come procedere:

nell'archivio di distribuzione sono presenti i file:
UIDIGI.BIN
UIDIGI.TXT
UIDGCFG.EXE

Copiate questi 3 file da qualche parte nel vostro computer.
Rinominate i file UIDIGI.BIN e UIDIGI.TXT con il nome del digipeater che
andate a realizzare es: IR3VIG.

Ora i file hanno nome:

IR3VIG.BIN
IR3VIG.TXT
UIDGCFG.EXE

Con un text editor qualunque modificate le impostazioni del file UIDIGI.TXT
seguendo le indicazioni presenti nel file stesso per quanto riguarda i
parametri.

Normalmente modificate solo quello che vi sembra di dover cambiare quello
che non capite lasciatelo com'e'!

Compilate la versione con il comando:

UIDGCFG IR3VIG.BIN IR3VIG.TXT

Se non ci sono problemi il programma non da' nessun avvertimento, se ci sono
problemi ve li segnala.

Programmate una eprom che possa contenere l'immagine del file IR3VIG.BIN
montatela nel TNC2 e date fuoco (accendete).

Se tutto e' andato bene qualche istante dopo l'accensione il TNC2 emettera' il
beacon.


L'autore UIDIGI
---------------
Questo testo non e' stato scritto con l'intento di fornire un manuale
dettagliato per i meno esperti.
Il firmware viene fornito senza nessun supporto da parte dell'autore che si
riserva la possibilita' di modificarlo o di sospenderne la libera diffusione
futura in ogni momento.
Se qualcuno trova qualche errore o ha qualche buona idea o suggerimento
(non adattamenti personali!) me lo puo' far sapere a mezzo lettera o messaggio
SCRITTO, NON a parole (radio, telefono, citofono o aspettarmi sotto casa...).

Il mio indirizzo e':

        Marco Savegnago
        Stradella Ospedale 87
        36100 Vicenza

In Packet-Radio:

        IW3FQG@I3KUH.IVEN.ITA.EU

In Internet:

        iw3fqg@amsat.org

Coordinate:
Latitude:  45 33' 24" N
Longitude: 11 32' 34" E


Putroppo per voi sono un asincrono!


Dove trovare gli archivi con le versioni aggiornate?
----------------------------------------------------
http://space.tin.it/computer/msavegna/uidigi.htm

http://www.ir3ip.net/~iw3fqg/uidigi.htm

nella sezione files di UIDIGI mailing list


UIDIGI mailing list
-------------------

Per iscriversi alla mailing list dedicata a UIDIGI (in inglese) seguire la procedura di 
iscrizione disponibile alla pagina:

http://www.yahoogroups.com/group/uidigi


Legal trademark
---------------
APRS is a register trademark of Bob Bruninga WB4APR


Copyright di UIDIGI
-------------------
Il firmware UIDIGI e le sue componenti sono liberamente copiabili e
distribuibili in qualsiasi forma e mezzo per scopi AMATORIALI e da cui comunque
non si possa trarre profitto.
E'anche proibito l'uso di questo programma per dimostrazioni in attivita' commericali
private e pubbliche, istitiuzionali, comunali, regionali, statali, organi di polizia e
prevenzione della salute pubblica e protezione civile senza l'autorizzazione scritta
dell'autore che si riserva di poter sospendere in ogni momento la libera circolazione
del software in ogni momento.
Qualunque tipo di sfruttamento commerciale non espressamente autorizzato dall'autore e' 
da considerarsi proibito! 
L'autore non e' responsabile in caso che eventuali blocchi di funzionamento del software
procurino perdite di dati o altro tipo di malfunzionamento.


Libere contribuzioni all'autore
-------------------------------
Per utilizzare questo programma non e' necessario versare nessun compenso all'autore.
Comunque se lo ritenete utile e volete incoraggiare eventuali sviluppi future libere
controbuzioni saranno sempre bene accette!!


Fonti e riferimenti bibliografici
---------------------------------
-   Implementazione dell'AX25 del programma NOS di KA9Q

-   Implementazione dell'AX25 del programma TheFirmware del gruppo tedesco
    NORD><LINK

-   Tanenbaum, Andrew S., "Computer  Networks"    1st ed
    Prentice-Hall  1981.

-   Tanenbaum, Andrew S., "Computer  Networks"    3st ed
    Prentice-Hall  1996.

-   X.25 MADE EASY Nicolas M.Thrope, Derek Ross
    Prentice-Hall  1992.

