Manuale di FreeBSD
Indietro | Capitolo 24 Comunicazioni Seriali | Avanti

# 24.4 Servizio di Ricezione Chiamate

Contributo di Guy Helmer. Aggiunte di Sean Kelly.

La configurazione del sistema FreeBSD per il servizio di ricezione chiamate è molto simile alla connessione di terminali tranne per il fatto che si ha a che fare con dei modem invece che con dei terminali.

## 24.4.1 Modem Esterni contro Modem Interni

I modem esterni sembrerebbero migliori per chiamare, poiché i modem esterni spesso possono essere configurati in maniera semipermanente tramite dei parametri immagazzinati in RAM non volatile e generalmente forniscono degli indicatori luminosi che mostrano lo stato degli importanti segnali RS-232. Le lucine lampeggianti impressionano gli ospiti, ma sono anche molto utili per vedere se un modem sta funzionando in maniera appropriata.

I modem interni in genere mancano della RAM non-volatile, quindi la loro configurazione può essere limitata solo impostando i DIP switch. Se il tuo modem interno ha delle luci indicatrici di segnale, probabilmente è difficile vederle quando il case del sistema è al suo posto.

### 24.4.1.1 Modem e Cavi

Se stai usando un modem esterno, allora avrai bisogno del cavo appropriato. Un cavo seriale standard RS-232C dovrebbe essere sufficiente, posto che tutti i normali segnali siano connessi:

Tabella 24-4. Nomi dei Segnali

Acronimi | Nomi |  |  |
RD | Ricezione Dati |  |  |
TD | Trasmissione Dati |  |  |
DTR | Terminale di Dati Disponibile |  |  |
DSR | Pronto alla Trasmissione |  |  |
DCD | Data Carrier Detect (scopre il Segnale di Linea di Ricezione di RS-232) |  |  |
SG | Segnale di Massa |  |  |
RTS | Richiesta alla Trasmissione |  |  |
CTS | Disponibile all'Invio |  |  |

FreeBSD necessita dei segnali RTS e CTS per il controllo di flusso a velocità superiori a 2400 bps, del segnale CD per identificare quando c'è stata una risposta alla chiamata o quando una linea è stata scollegata, e del segnale DTR per dare il reset al modem dopo che una sessione è terminata. Alcuni cavi sono connessi senza alcuni dei segnali necessari, dunque se hai dei problemi, come una sessione di login che non scompare quando la linea è sconnessa, potresti avere un problema col cavo.

Come altri sistemi operativi UNIX®, FreeBSD usa i segnali hardware per scoprire quando una chiamata è stata accettata o quando una linea è stata scollegata e per scollegare e resettare il modem dopo una chiamata. FreeBSD evita di mandare comandi al modem o di leggere i valori riportati dal modem. Se hai familiarità con la connessione dei modem a BBS di PC, questo potrebbe sembrarti scomodo.

## 24.4.2 Considerazioni sull'Interfaccia Seriale

FreeBSD supporta interfacce di comunicazione EIA RS-232C (CCITT V.24) basate su NS8250, NS16450, NS16550, e NS16550A. I dispositivi 8250 e 16450 hanno buffer di un singolo carattere. Il dispositivo 16550 fornisce un buffer di 16 caratteri, che permette prestazioni del sistema migliori. (Dei bug nel normale 16550 impediscono l'uso del buffer di 16 caratteri, quindi usate 16550A se possibile). A causa del buffer a singolo carattere questi dispositivi richiedono un lavoro maggiore da parte del sistema operativo rispetto ai dispositivi a 16 caratteri di buffer, le schede d'interfaccia seriale basate su 16550A sono preferibili. Se il sistema ha molte porte seriali attive o dovrà sopportare un grosso carico, le schede basate su 16550A sono migliori per comunicazioni a basso tasso d'errore.

## 24.4.3 Breve Panoramica

Come con i terminali, `init` lancia un processo `getty` per ogni porta seriale configurata per connessioni in ingresso. Ad esempio, se un modem è connesso a `/dev/ttyd0`, il comando `ps ax` mostrerà questo:

     4850 ??  I      0:00.09 /usr/libexec/getty V19200 ttyd0

Quando un utente chiama la linea del modem e questo si collega, il modem riporterà la linea CD (Carrier Detect). Il kernel nota che la portante è stata rilevata e completa l'apertura della porta con `getty`. `getty` invia un prompt `login:` alla velocità iniziale di linea specificata. `getty` aspetta per verificare che vengano ricevuti caratteri legittimi, e, in una tipica configurazione, se trova dei caratteri strani (probabilmente perché la velocità del modem è differente da quella di `getty`), `getty` cerca di calibrare la velocità di linea fino a ricevere dei caratteri ragionevoli.

Dopo che l'utente ha inserito il suo nome di login, `getty` esegue `/usr/bin/login`, che completa il login richiedendo la password per l'utente ed avviandone la shell.

## 24.4.4 File di Configurazione

Ci sono tre file di configurazione di sistema nella directory `/etc` che avrai probabilmente bisogno di modificare per permettere chiamate in ingresso sul tuo sistema FreeBSD. Il primo, `/etc/gettytab`, contiene le informazioni di configurazione per il demone `/usr/libexec/getty`. Il secondo, `/etc/ttys` contiene le informazioni che dicono a `/sbin/init` quali dispositivi `tty` devono avere processi `getty` in esecuzione. Infine, si possono mettere comandi di inizializzazione nello script `/etc/rc.d/serial`.

Ci sono due scuole di pensiero riguardo i modem su UNIX. Un gruppo preferisce configurare i propri modem in maniera che qualunque sia la velocità con la quale un utente remoto si collega, l'interfaccia locale RS-232 computer-modem funzioni ad una velocità fissa. Il beneficio di questa configurazione è che l'utente remoto vede sempre un prompt di login immediato. Il lato negativo è che il sistema non sa quale sia la vera velocità di trasmissione dati di un utente, quindi programmi a tutto schermo come Emacs non modificheranno i loro metodi di rappresentazione dello schermo per ottimizzare la risposta su connessioni lente.

L'altra scuola di pensiero configura le proprie interfacce RS-232 verso il modem per variare la propria velocità rispetto a quella di connessione dell'utente remoto. Ad esempio, le connessioni V.32bis (14.4 Kbps) faranno sì che il modem faccia funzionare la propria interfaccia RS-232 a 19.2 Kbps, mentre le connessioni a 2400 bps faranno sì che funzioni a 2400 bps. Poiché `getty` non comprende nessun valore restituito dal modem riguardo la velocità di connessione, `getty` darà un messaggio `login:` ad una velocità iniziale fissata e aspetterà i caratteri in risposta. Se l'utente vede caratteri strani, si assume che sappia che dovrà premere Invio finché non vedrà un prompt riconoscibile. Se le frequenze di trasmissione non concordano, `getty` vedrà tutto ciò che l'utente preme come “spazzatura”, cercherà di passare alla velocità seguente e invierà il prompt `login:` di nuovo. Questa procedura potrebbe continuare ad nauseam, ma normalmente ci vogliono solo una o due pressioni sui tasti prima che l'utente veda un buon prompt. Ovviamente, questa sequenza di login non è pulita come la precedente a “velocità fissata”, ma un utente su una connessione a bassa velocità dovrebbe ricevere una risposta interattiva migliore da programmi a tutto schermo.

Questa sezione cercherà di fornire informazioni di configurazione bilanciate, ma è indirizzata verso l'approccio di avere la frequenza di trasmissione del modem che segue la velocità della connessione.

### 24.4.4.1 `/etc/gettytab`

`/etc/gettytab` è un file di configurazione sul modello di termcap(5) per getty(8). Si prega di vedere la pagina man di gettytab(5) per le informazioni complete sul formato del file e la lista delle sue possibilità.

#### 24.4.4.1.1 Configurazione a Velocità Fissa

Se stai fissando la frequenza di comunicazione del modem ad una velocità particolare, probabilmente non avrai bisogno di effettuare nessun cambiamento a `/etc/gettytab`.

#### 24.4.4.1.2 Configurazione a Velocità Concordata

C'è bisogno di impostare una voce in `/etc/gettytab` per dare a `getty` le informazioni sulla velocità che si vuole usare per il modem. Se si possiede un modem a 2400 bps, probabilmente è possibile usare la voce `D2400` già esistente.

    #
    # Terminali chiamanti veloci, a rotazione 2400/1200/300
    # (può impostarsi in tutti i modi)
    #
    D2400|d2400|Fast-Dial-2400:\
            :nx=D1200:tc=2400-baud:
    3|D1200|Fast-Dial-1200:\
            :nx=D300:tc=1200-baud:
    5|D300|Fast-Dial-300:\
            :nx=D2400:tc=300-baud:

Se si possiede un modem con velocità maggiore, probabilmente sarà necessario aggiungere una voce in `/etc/gettytab`; qui c'è un esempio per modem a 14.4 Kbps modem con una velocità massima d'interfaccia di 19.2 Kbps:

    #
    # Aggiunte per un modem V.32bis
    #
    um|V300|High Speed Modem at 300,8-bit:\
            :nx=V19200:tc=std.300:
    un|V1200|High Speed Modem at 1200,8-bit:\
            :nx=V300:tc=std.1200:
    uo|V2400|High Speed Modem at 2400,8-bit:\
            :nx=V1200:tc=std.2400:
    up|V9600|High Speed Modem at 9600,8-bit:\
            :nx=V2400:tc=std.9600:
    uq|V19200|High Speed Modem at 19200,8-bit:\
            :nx=V9600:tc=std.19200:

Questo risulterà in una connessione a 8-bit, senza parità.

L'esempio precedente avvia la comunicazione a 19.2 Kbps (per una connessione V.32bis), poi cicla tra 9600 bps (per V.32), 2400 bps, 1200 bps, 300 bps, e poi ancora a 19.2 Kbps. Il ciclo sulle frequenze di comunicazione è implementato con `nx=` (“next table”). Ogni linea usa una voce `tc=` (“table continuation”) per continuare a leggere le impostazioni “standard” per una frequenza particolare.

Se hai un modem a 28.8 Kbps e/o vuoi avvantaggiarti della compressione su un modem a 14.4 Kbps, hai bisogno di usare una frequenza di comunicazione più alta di 19.2 Kbps. Qui c'è un esempio di voce per `gettytab` che imposta la velocità a 57.6 Kbps:

    #
    # Aggiunte per modem  V.32bis o V.34 Modem
    # Impostazione a 57.6 Kbps
    #
    vm|VH300|Very High Speed Modem at 300,8-bit:\
            :nx=VH57600:tc=std.300:
    vn|VH1200|Very High Speed Modem at 1200,8-bit:\
            :nx=VH300:tc=std.1200:
    vo|VH2400|Very High Speed Modem at 2400,8-bit:\
            :nx=VH1200:tc=std.2400:
    vp|VH9600|Very High Speed Modem at 9600,8-bit:\
            :nx=VH2400:tc=std.9600:
    vq|VH57600|Very High Speed Modem at 57600,8-bit:\
            :nx=VH9600:tc=std.57600:

Se hai una CPU lenta o un carico di sistema pesante e non hai porte seriale 16550A, potresti ricevere errori “`sio`” “silo” a 57.6 Kbps.

### 24.4.4.2 `/etc/ttys`

La configurazione del file `/etc/ttys` è stata affrontata nella Esempio 24-1. La configurazione dei modem è simile ma dobbiamo passare un argomento differente a `getty` e specificare un tipo di terminale differente. Il formato generale per la configurazione sia a velocità fissata che per quella concordata è:

    ttyd0   "/usr/libexec/getty xxx"   dialup on

Il primo elemento nella linea precedente è il file di dispositivo per questa voce -- `ttyd0` significa che `/dev/ttyd0` è il file che verrà tenuto d'occhio da `getty`. Il secondo elemento, `"/usr/libexec/getty `xxx`"` (`xxx` verrà rimpiazzato dalla capacità iniziale di `gettytab`) è il processo che `init` eseguirà sul dispositivo. Il terzo elemento, `dialup`, è il tipo predefinito di terminale. Il quarto parametro, `on`, indica a `init` che quella linea è operativa. Potrebbe esserci un quinto parametro, `secure`, ma dovrebbe essere usato solo per i terminali che siano fisicamente sicuri (come la console di sistema).

Il tipo di terminale predefinito (`dialup` nell'esempio precedente) potrebbe dipendere dalle preferenze locali. `dialup` è il terminale tradizionale predefinito sulle linee di ingresso in maniera che gli utenti possano personalizzare i loro script di login per notare quando il terminale è `dialup` e modificare automaticamente il loro tipo di terminale. Ad ogni modo, l'autore ritiene più semplice specificare `vt102` come tipo di terminale predefinito, poiché l'utente può usare semplicemente un'emulazione VT102 sul suo sistema remoto.

Dopo aver effettuato i cambiamenti a `/etc/ttys`, puoi inviare un segnale HUP a `init` per fargli rileggere il file. Puoi usare il comando

    # kill -HUP 1

per inviare il segnale. Se questa è la prima volta che cambi le impostazioni del sistema, puoi aspettare finché il modem non sia configurato in maniera appropriata e connesso, prima di inviare il segnale a `init`.

#### 24.4.4.2.1 Configurazione a Velocità Fissa

Per una configurazione a velocità fissa, la voce in `ttys` ha bisogno di una voce che gestisca la velocità fissa anche per `getty`. Per un modem la cui velocità sulla porta sia bloccata a 19.2 Kbps, la voce in `ttys` potrebbe essere così:

    ttyd0   "/usr/libexec/getty std.19200"   dialup on

Se il tuo modem è bloccato su una frequenza di trasmissione differente, sostituisci il valore appropriato per `std.`velocità`` al posto di `std.19200`. Assicurati di usare un tipo valido elencato in `/etc/gettytab`.

#### 24.4.4.2.2 Configurazione a Velocità Concordata

In una configurazione a velocità concordata, la voce in `ttys` deve fare riferimento alla voce iniziale “auto-baud” (sic) in `/etc/gettytab`. Ad esempio, se hai aggiunto la riga suggerita precedentemente per un modem con velocità variabile che inizi a 19.2 Kbps (la riga in `gettytab` contenente il punto d'avvio `V19200`), la riga in `ttys` potrebbe essere questa:

    ttyd0   "/usr/libexec/getty V19200"   dialup on

### 24.4.4.3 `/etc/rc.d/serial`

I modem ad alta velocità, come i V.32, i V.32bis, e i V.34, necessitano di un controllo di flusso hardware (`RTS/CTS`). Puoi aggiungere dei comandi `stty` al file `/etc/rc.d/serial` per impostare i flag di controllo di flusso nel kernel FreeBSD per le porte del modem.

Ad esempio per impostare il flag `termios` `crtscts` sui dispositivi di inizializzazione di ingresso e uscita della porta seriale numero 1 (`COM2`), si possono aggiungere le seguenti linee a `/etc/rc.d/serial`:

    # Configurazione iniziale della porta seriale
    stty -f /dev/ttyd1.init crtscts
    stty -f /dev/cuad1.init crtscts

## 24.4.5 Impostazioni del Modem

Se hai uno di quei modem i cui parametri possono essere impostati in maniera permanente in RAM non volatile, avrai bisogno di usare un programma terminale (come Telix su MS-DOS® o `tip` sotto FreeBSD) per impostare i parametri. Collegati al modem usando le stesse velocità iniziali e di comunicazione che userebbe `getty` e configura la RAM non volatile secondo queste necessità:

- CD attivo per la connessione

- DTR attivo per l'operazione; l'assenza del DTR porta allo scollegamento della linea e al reset del modem

- CTS controllo di flusso dei dati trasmessi

- Disabilita il controllo di flusso XON/XOFF

- RTS controllo di flusso dei dati ricevuti

- Modalità silenziosa (nessun codice di risposta)

- Nessun echo dei comandi

Leggi la documentazione del tuo modem per capire quali comandi e/o impostazioni per i DIP switch sia necessario fornirgli.

Ad esempio, per impostare i parametri precedenti su un U.S. Robotics® Sportster® 14.400 esterno, si potrebbero dare questi comandi al modem:

    ATZ
    AT&C1&D2&H1&I0&R2&W

Potresti anche sfruttare questa opportunità per raffinare le impostazioni del modem, ad esempio per decidere se dovrà usare V.42bis e/o la compressione MNP5.

Il modem esterno U.S. Robotics Sportster 14.400 ha anche dei DIP switch che devono essere impostati; per altri modem, forse potrai usare queste impostazioni come esempio:

- Switch 1: SU -- DTR Normale

- Switch 2: N/D (Codici di Risposta Verbali/Codici di Risposta Numerici

- Switch 3: SU -- Sopprime i Codici di Risposta

- Switch 4: GIÙ -- Nessun echo, comandi offline

- Switch 5: SU -- Auto risposta

- Switch 6: SU -- Carrier Detect Normale

- Switch 7: SU -- Carica i valori predefiniti dall'NVRAM

- Switch 8: N/D (Modalità intelligente/modalità stupida)

I codici di risposta dovrebbero essere disabilitati/soppressi per i modem chiamanti per evitare i problemi che possono capitare se `getty` dà incidentalmente un prompt `login:` ad un modem che si trova in modalità di comando ed il modem restituisce l'eco del comando o un codice di risposta. Questa sequenza può portare ad una lunga, stupida conversazione tra `getty` ed il modem.

### 24.4.5.1 Configurazione a Velocità Fissa

Per una configurazione a velocità fissa, avrai bisogno di configurare il modem affinché mantenga una frequenza dati da modem a computer indipendente dalla frequenza di comunicazione. Su un modem esterno U.S. Robotics Sportster 14.400 questi comandi bloccheranno la velocità dati tra modem e computer alla velocità con la quale i comandi sono stati inviati:

    ATZ
    AT&B1&W

### 24.4.5.2 Configurazione a Velocità Concordata

Per una configurazione a velocità concordata, sarà necessario configurare il modem affinché modifichi la frequenza dei dati della porta seriale relativamente alla velocità di arrivo. Su un modem esterno U.S. Robotics Sportster 14.400, questi comandi causeranno il blocco della frequenza di trasmissione dati con correzione d'errore del modem sulla velocità con il quale è stato inviato il comando, ma permetteranno variazioni della velocità della porta seriale per le connessioni senza correzione d'errore:

    ATZ
    AT&B2&W

### 24.4.5.3 Verifica della Configurazione del Modem

La maggior parte dei modem ad alta velocità fornisce comandi per verificare i parametri funzionali usati dal modem in maniera più o meno comprensibile. Sui modem esterni U.S. Robotics Sportster 14.400, il comando `ATI5` mostra le impostazioni che sono immagazzinate nella RAM non volatile. Per vedere i veri parametri operativi del modem (così come vengono influenzati dai DIP switch del modem), usa i comandi `ATZ` e `ATI4`.

Se hai modem di marche differenti, verifica il manuale del tuo modem per vedere come sia possibile un ulteriore controllo sui parametri di configurazione del modem.

## 24.4.6 Risoluzione dei Problemi

Questi sono un po' di passi che è possibile seguire per verificare il funzionamento del modem sul tuo sistema.

### 24.4.6.1 Verifica del Sistema FreeBSD

Collega il modem al sistema FreeBSD, avvia il sistema, e, se il tuo modem ha luci di indicazione dello stato, guarda se la luce DTR del modem si accende quando appare il prompt `login:` sulla console del sistema -- se si accende, dovrebbe significare che FreeBSD ha avviato un processo `getty` sulla porta di comunicazione appropriata e sta aspettando una chiamata dal modem.

Se l'indicatore DTR non lampeggia, effettua il login sul sistema FreeBSD dalla console e dai il comando `ps ax` per verificare se FreeBSD sta cercando di eseguire un processo `getty` sulla porta corretta. Dovresti vedere linee come queste tra i processi mostrati:

      114 ??  I      0:00.10 /usr/libexec/getty V19200 ttyd0
      115 ??  I      0:00.10 /usr/libexec/getty V19200 ttyd1

Se vedi qualcosa di diverso, come questo:

      114 d0  I      0:00.10 /usr/libexec/getty V19200 ttyd0

ed il modem non ha ancora accettato chiamate, ciò significa che `getty` ha completato l'apertura della porta di comunicazione. Questo potrebbe indicare un problema nei cavi o un modem mal configurato, poiché `getty` non dovrebbe completare l'apertura della porta fino al rilevamento del segnale CD (carrier detect).

Se non vedi nessun processo `getty` in attesa sulla porta `ttyd`N`` scelta, ricontrolla le voci in `/etc/ttys` per vedere se ci sono errori lì. Inoltre, controlla il file di log `/var/log/messages` per vedere se ci sono messaggi di `init` o `getty` riguardo i loro problemi. Se ci sono messaggi, ri-ricontrolla i file di configurazione `/etc/ttys` e `/etc/gettytab`, ed anche i file speciali di dispositivo `/dev/ttydN`, cercando ogni errore, voce mancante, o file di dispositivo mancante.

### 24.4.6.2 Tentativo di Connessione in Ingresso

Cerca di collegarti dall'esterno al sistema; assicurati di usare 8 bit, nessuna parità, e 1 bit di stop sul sistema remoto. Se non ottieni un prompt, o vengono visualizzati caratteri strani, prova a premere Invio circa una volta per secondo. Se dopo un po' ancora non vedi un prompt `login:`, prova inviare un'`INTERRUZIONE`. Se stai usando un modem ad alta velocità per effettuare la chiamata, prova a richiamare dopo aver bloccato la velocità dell'interfaccia del modem (tramite `AT&B1` su un U.S. Robotics Sportster, ad esempio).

Se ancora non ottieni alcun prompt `login:`, verifica `/etc/gettytab` ancora e ricontrolla che:

- La capacità iniziale specificata in `/etc/ttys` per quella linea corrisponda a quella in `/etc/gettytab`

- Ogni campo `nx=` corrisponda ad un valore in `gettytab`

- Ogni campo `tc=` corrisponda a un altro nome di capacità in `gettytab`

Se chiami ma il modem su FreeBSD non risponde, assicurati che il modem sia configurato per rispondere alla chiamata quando viene fornito un segnale DTR. Se il modem sembra essere configurato correttamente, verifica che la linea DTR sia attiva controllando gli indicatori luminosi del modem (se ne ha).

Se hai già controllato tutto quanto più volte ed ancora non funziona, fai una pausa e riprova in seguito. Se ancora non funziona puoi provare a inviare un messaggio di posta elettronica alla mailing list per le domande generiche su FreeBSD descrivendo il tuo modem ed il tuo problema, e i bravi ragazzi della lista cercheranno di darti una mano.

Indietro | Partenza | Avanti
Terminali | Risali | Servizio di Effettuazione Chiamate

Questo, ed altri documenti, possono essere scaricati da ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Per domande su FreeBSD, leggi la documentazione prima di contattare <questions@FreeBSD.org>.
Per domande su questa documentazione, invia una e-mail a <doc@FreeBSD.org>.