Descrizione del progamma SuperVozelj (versione V83 del 20/10/1998) ================================================================== Matjaz Vidmar, S53MV ( traduzione Andrej Santin, IV3KCB del 20/11/1998 IV3KCB@IV3CJT, IV3KCB@S50BOX, iv3kcb@ljutcp.hamradio.si schemi, c.s. ed altro trovate su http://www.hamradio.si www.geocities.com/SiliconValley/Network/7865, surf.to/iv3kcb ) 1. Descrizione -------------- Il progetto del SuperVozelj (super nodo, si legge SUPERVOZEL n.tr.) include la progettazione e la costruzione di rtx, computer per nodi (volgarmente TNC n.tr.) ed il relativo software per costruire una rete radioamatoriale per il packet-radio la piu' veloce possibile. I nodi SV usano i microprocessori della famiglia Motorola MC680xx e percio' il software e' scritto in assembler 68k. Questa configurazione permette velocita' di alcuni 100kbps usando gli interrupt e fino ad alcuni Mbps usando circuiti DMA MC68450 o processori MC68302, MC68360 e suoi successori. Il software deve essere scritto in modo tale che sia il piu' indipendente possibile dalla configurazione hardware. In questo modo si facilita' lo sviluppo senza grosse modifiche. La versione attuale funziona come nodo packet radio a 8 canali con l'aggiunta di SW per la scheda A/D (slikolov) alla quale si puo' collegare una telecamera CCD. Puo' usare una CPU MC68010 o MC68020, puo' usare un DMA MC68450 e tre o quattro SCC Z8530 (uno su DMA e tre su interrupt oppure solo tre su interrupt). In questa configurazione si raggiungono 4Mbps con il DMA (somma dei due canali) e 200kbps con gli interrupt (somma delle velocita' dei 6 canali con il clock della CPU a 12 MHz). La versione attuale del SV si adatta automaticamente alla CPU montata (MC68010 o MC68020) e alla presenza o meno della scheda DMA. Nella modifica del software per la CPU MC68020 bisogna tenere in conto i diversi tempi di esecuzione visto l'uso della memoria cache. Il sorgente di SVV83 in assembler 68k (con i commenti) e' lungo 204880 ($3212A) bytes, compilato 20822 ($5156) bytes. La versione V83 richiede il seguente hardware: (1) piastra CPU del computer DSP (versione per DMA) con 32k EPROM 27C256 (2) una piastra da 1Mbyte (o solo 4 chip per 512kbyte) sull'indirizzo $200000 (3) piastra DMA-SCC con MC68450 e un Z8530 (4) piastra SCC con tre Z8530 (5) piastra bus (5 slot) e alimentatore del computer DSP (6) due sincronizzatori di bit/scrambler per 1.2Mbps (7) fino a 6 diversi modem con relativo circuito DCD (8) rtx adeguati (banda passante, txdelay, ecc... n.tr.) (9) piastra per il reset hardware remoto (10) telecamera CCD con relativa interfaccia (slikolov) (11) convertitore A/D lento ADC0804 Clock tipici sono: 10-14MHz per MC68010 o MC68020, 8-12MHz per MC68450, 8-12MHz per il PCLK Z8530, 4.9152MHz per i clock dei canali su interrupt e 9.8304MHz per la sincronizzazione di bit dei canali DMA a 1.2288Mbps. Alcune versioni CMOS dei Z85C30 danno problemi sulla scheda DMA quando sono attivi tutti e due i canali. La scheda DMA deve essere modificata (resistenze di smorzamento sul bus e diodo/resistenza sulla linea DTACK) per usarla con la CPU MC68020 e per clock maggiori. 2. Uso del SuperVozelj ---------------------- Il SuperVozelj puo' funzionare sia come packet-radio digipeater, nodo packet-radio e come router (instradatore) di datagram. In tutti i modi di funzionamento e' molto importante l'uso corretto dei nominativi e dei relativi SSID. 2.1. SuperVozelj usato come digipeater -------------------------------------- Il SuperVozelj DIGIPEATER si puo' usare solo con il suo nominativo e non con il suo IDENT. Uso dello SSID: (1) se lo SSID del nominativo del SuperVozelj e' 0, allora il frame viene interpretato come un datagram e viene immesso in rete in base ai dati delle tabelle di instradamento o ritrasmesso come frame digi sul canale relativo. (2) se lo SSID del nominativo del SuperVozelj e' uguale al numero di un canale esistente allora il frame viene ritrasmesso sul canale relativo. In questo caso lo SSID del SuperVozelj viene scambiato con il relativo numero del canale per consentire la risposta. (3) se lo SSID e' maggiore dei canali disponibili il frame viene rifiutato. Il SuperVozelj nel modo digipeater modifica solamente lo SSID e il digi bit del proprio nominativo e lascia inalterato il contenuto del frame ritrasmesso. 2.2. SuperVozelj usato come nodo -------------------------------- Il NODO SuperVozelj pone in collegamento stazioni che usano il protocollo AX.25 standard. In questo modo e' compatibile con tutti i sistemi esistenti. Per la comunicazione tra nodi SuperVozelj si possono pero' usare anche altri protocolli e altri formati dei frame. La versione attuale usa solo il frame SABM (connect request) modificato (e percio' non standard) per comunicare con altri SuperVozelj. A sua volta pero' usa una versione dell'AX.25 migliorata con questi vantaggi: (1) usa esclusivamente la versione 2 del protocollo AX.25, perche' la versione 1 non viene piu' usata. La trasmissione dei e relative conferme e' mantenuta al minimo come specificato per l'AX.25V2. Con il comando X l'utente puo' cambiare il protocollo d'ingresso/uscita con uno piu' efficiente che non manda . (2) La trasmissione e' controllata con la logica slottime/p-persistence. La lunghezza del slottime e' uguale al txdelay (flag iniziali), p-persistence e' la probabilita' di andare in trasmissione quando il DCD non e' attivo. (3) il tempo di attesa alla conferma (FRACK) e' proporzionale al numero delle ripetizioni (RETRY). In questo modo con l'aumento del traffico tutti i collegamenti rallentano per evitare eventuali sconessioni. (4) il tempo di attesa (FRACK) e' proporzionale anche ad un numero casuale: cosi' si abbassa la probabilita' di collisione fra pacchetti di due stazioni che non si sentono (problema dei terminali nascosti n.tr.). (5) dopo la ricezione di una conferma del pacchetto il SuperVozelj aspetta per il tempo di FRACK prima della trasmissione del prossimo pacchetto: in questo modo si diminuisce la velocita', pero' si da piu' possibilita' alle stazioni piu' deboli di accedere al canale ! (6) il numero dei frame in un pacchetto (MAXFRAME) dipende dalla qualita' del collegamento e si aggiorna automaticamente. Ogni frame REJ (perdita di frame nella sequenza) e ogni mancata conferma decrementano di 1 MAXFRAME. Ogni RNR (richiesta di fermare la trasmissione) mettono MAXFRAME a 1. Ogni conferma valida invece incrementa di 1 fino ad un massimo di MAXFRAME a 7. (7) il frame RNR aumenta il tempo di attesa alla ripetizione del SuperVozelj rapportato al FRACK del canale specificato. (8) il SuperVozelj da la conferma solo se l'altra stazione lo richiede con o se non c'e' traffico di frame Info. Cosi' diminuisce la probabilita' che alcuni programmi per PR (WA8DED, TheFirmware...) "impazziscono" se ricevono troppi pacchetti. (9) nel caso di un cattivo funzionamento del circuito DCD (problemi con il modem, disturbi intenzionali ecc.) il SuperVozelj va in trasmissione dopo un certo tempo (minimo FRACK) anche se il canale pare occupato (male minore). Il SuperVozelj distingue fra collegamenti d'entrata e d'uscita. Il collegamento in entrata e' caratterizzato dal nominativo dell'utilizzatore e dal nominativo o ident del SuperVozelj con uno SSID qualsiasi. Il collegamento in uscita ha il nominativo dell'utilizzatore con lo SSID incrementato (ciclicamente) di 1 (se non specificato in altro modo nel comando), e il nominativo della stazione da chiamare. Naturalmente i collegamenti sia d'entrata che d'uscita possono avere i nominativi di eventuali digipeater. Il SuperVozelj sa distinguere anche collegamenti che si distinguono soltanto nei digipeater diversi. Per effettuare un collegamento packet-radio tramite SuperVozelj bisogna prima di tutto chiamare il SuperVozelj usando o il nominativo o l'ident. In questo modo si entra nel modo comando dove e' possibile usare alcuni comandi: conettere un'altra stazione, ricevere alcune informazioni sul funzionamento del sistema e di chi lo sta usando e la possibilita' ai sysop di cambiare certi parametri. Nel modo comando e anche disponibile un semplice modo conferenza. Il nodo SuperVozelj interpreta un frame AX.25 come un comando senza tener conto di eventuali CR, LF o altri caratteri dello stesso frame. Percio' e' meglio settare il TNC e il programma terminale in modo che venga trasmesso il pacchetto quando si preme il CR (normalmente sono settati in questo modo, invece non e' sempre cosi' con alcuni programmi terminale per Internet!). Il SuperVozelj puo' essere chiamato con uno SSID qualunque. Percio' c'e' la possibilita' di 32 collegamenti contemporanei (16 diversi nominativi e 16 diversi ident). Non e' possibile collegare il SuperVozelj con lo stesso call e SSID, ma con diverso SSID da parte dell'utilizzatore. In questo modo si evitano problemi di looping o di errori nelle chiamate. Il SuperVozelj risponde sempre ad ogni comando valido o errato, sempre che ci sia ancora spazio in memoria (20 frame AX.25 per ogni utilizzatore). Se il collegamento d'uscita s'interrompe viene subito segnalato al chiamante e si distruggono i dati della memoria buffer. Se l'utilizzatore aveva chiamato il SuperVozelj con lo SSID 0-11 il SuperVozelj viene posto di nuovo nel modo comando (funzione RECONNECT). Se invece lo SSID del chiamante era 12-15, il SuperVozelj segnala l'errore e interrompe il collegamento. Se invece s'interrompe la conessione d'entrata il SuperVozelj lo segnala al chiamato e disconette. Comunque il SuperVozelj segnala sempre perche' ha interrotto la conessione: troppe ripetizioni, stazione occupata (busy), sconessione dell'altra stazione, chiamata con nominativi non permessi o conferma la richiesta di sconessione. Il SuperVozelj ha la possibilita' di effettuare chiamate da tabelle che vengono aggiornate o dal sysop (tabella A), oppure dai SuperVozelj tra loro (tabella V). In questo caso cerca il nominativo nella tabella (non tiene conto dello SSID) e trova la strada (path n.tr.) per arrivarci e chiama avanti. In questo modo e' assicurata la compatibilita' con tutti i nodi conosciuti: TheNet, Flexnet, SuperVozelj ecc... Nella tabella possono essere immessi anche i nominativi dei BBS, DX-Cluster ecc... Se il nominativo della stazione che si chiama compare nelle liste degli utilizzatori correnti (comando U) oppure precedenti (comando G) il programma si comporta in questo modo: da solo fa la chiamata su un specifico canale con lo SSID relativo. Se la stazione ha chiamato tramite digipeater, il SuperVozelj chiama tramite gli stessi digi. Se invece la stazione e' entrata tramite un'altro SuperVozelj, allora il programma prima chiama il SuperVozelj interessato al quale passa la richiesta di conessione. Esiste una priorita' nelle chiamate automatiche: prima viene controllata la lista caricata dal sysop (comando A), poi la lista dei nodi che si comunicano tra loro i SV (comando V), poi la lista corrente (qso vivi) (comando U) e per ultima la lista dei precedenti collegamenti (qso morti) (comando G). Ovviamente da ogni lista si prende il primo nominativo che si sta cercando. ATTENZIONE ! Questo automatismo puo' essere sempre disabilitato con la chiamata su uno specifico canale oppure tramite digipeater. 2.3. Il SuperVozelj come datagram router ---------------------------------------- Il sistema di collegamento appena descritto e' molto efficiente, perche' i frame contengono nel campo indirizzi solo due nominativi e le conferme o eventuali ripetizioni avvengono su ogni tratto indipendentemente. Per gli utilizzatori "umani" questo sistema rappresenta sicuramente il miglior modo d'uso, ma non per le stazioni automatiche (BBS, sistemi vocali DVMS, TCP/IP ecc.) che con difficolta' capiscono le informazioni provenienti dai nodi. Purtroppo e' quasi impossibile programmarle in maniera tale che decodifichino eventi anomali e che reagiscano di conseguenza. Di tutti gli utilizzatori i maggiori problemi hanno quelli che utilizzano il protocollo TCP/IP. I protocolli che usano datagram non prevedono collegamenti a conessione ma i datagram girano in rete piu' o meno come i frame tramite semplici digi. Un collegamento packet-radio tramite semplici digi (quello con chiamata "via" parecchi nominativi) e' normalmente parecchio inefficiente. La probabilita' di perdere il frame aumenta velocemente con il numero dei digi che bisogna passare. Non solo, ma anche la conferma deve rifare la stessa strada inaffidabile inversa, perche' le conferme avvengono su tutto il collegamento e non per singola tratta. Per compatibilita' con tutti i programmi (scritti male!) per BBS, DVMS, TCP/IP ecc. il SuperVozelj ha la possibilita' di collegamenti "digi" virtuali. I frame "digi" viaggiano su collegamenti di servizio tra SV con tutti i vantaggi di conferme/ripetizioni sulle singole tratte. In questo modo la probabilita' di perdita di un frame si riduce solo sulle due tratte entrata/uscita dalla rete dei SuperVozelj. Il protocollo del "digi" virtuale viene attivato con un frame con il nominativo "via" e SSID 0 del SuperVozelj d'entrata. A questo punto il SV cerca il nominativo del destinatario nelle tabelle (per il momento solo nella tabella G). Se il destinatario e' raggiungibile direttamente il SV si comporta come un digi normale. Se no in base alle indicazioni delle tabelle il SV genera una conessione di servizio con il SV vicino, gli manda il frame e aspetta la conferma. Lo stesso fara' il SV vicino, cerchera' nelle sue tabelle e agira' di conseguenza. Questo si ripetera' tra i vari SV che sono frapposti tra chiamante e destinatario. L'ultimo SV della catena mandera' il frame al destinatario con il proprio nominativo come "digi". In questo modo e' assicurata anche la risposta (direzione inversa per il destinatario). Il protocollo appena descritto mantiene integri i nominativi del chiamante e del destinatario, i bit Command/Response, i bytes CONTROL e PID e ovviamente il contenuto de