FreeBSD handboek
Terug | Hoofdstuk 27. Seriële communicatie | Volgende

# 27.4. Inbeldienst

Bijgedragen door Guy Helmer. Toevoegingen door Sean Kelly.

> WaarschuwingVanaf FreeBSD 8.0 zijn de seriële poorten hernoemd van `/dev/cuad`N`` naar `/dev/cuau`N`` en van `/dev/ttyd`N`` naar `/dev/ttyu`N``. FreeBSD 7.X gebruikers moeten de documentatie aanpassen naar deze wijzigingen.

Het instellen van het FreeBSD-systeem voor inbeldiensten is vrijwel gelijk aan het verbinden van terminals, behalve dat er met modems in plaats van terminals wordt gewerkt.

## 27.4.1. Externe en interne modems

Externe modems lijken gemakkelijker voor het inbellen, omdat externe modems vaak semi-permanent ingesteld kunnen worden via parameters die in een niet-vluchtig RAM worden opgeslagen en ze hebben gewoonlijk LED's die de toestand van belangrijke RS-232-signalen weergeven. Knipperende LED's maken indruk op bezoekers, maar LED's zijn ook zeer nuttig om te zien of een modem goed functioneert.

Interne modems hebben vaak geen niet-vluchtig RAM en het kan dus voorkomen dat de instelmogelijkheden beperkt zijn tot het instellen van DIP-schakelaars. Als een intern modem al indicatie-LED's voor signalen heeft, zijn ze moeilijk te zien in de behuizing van een systeem.

### 27.4.1.1. Modems en kabels

Bij gebruik van een extern modem is uiteraard een juiste kabel nodig. Een standaard RS-232C seriële kabel moet voldoen zolang alle normale signalen zijn aangesloten.

Tabel 27-4. Signaalnamen

Acroniemen | Namen |  |  |
RD | Received Data (ontvangen gegevens) |  |  |
TD | Transmitted Data (verzonden gegevens) |  |  |
DTR | Data Terminal Ready (gegevensterminal gereed) |  |  |
DSR | Data Set Ready (gegevensverzameling gereed) |  |  |
DCD | Data Carrier Detect (RS-232's detector voor signaal lijn-ontvangen) |  |  |
SG | Signal Ground (signaalaarde) |  |  |
RTS | Request to Send (verzoek om te zenden) |  |  |
CTS | Clear to Send (gereed om te zenden) |  |  |

FreeBSD heeft de signalen RTS en CTS nodig voor doorstroombeheer bij snelheden van meer dan 2400 bps, het signaal CD om te bepalen wanneer een oproep beantwoord of geannuleerd is, en het signaal DTR om een modem opnieuw in te stellen nadat een sessie voltooid is. Op sommige kabels ontbreken sommige benodigde signalen. Dus als zich problemen voordoen, zoals een aanmeldsessie die niet weggaat nadat de verbinding verbroken is, kan dit aan de kabel liggen.

Net als andere UNIX®-achtige besturingssystemen gebruikt FreeBSD hardwaresignalen om te bepalen of een oproep beantwoord of weggedrukt is en om met het modem op te hangen en dit opnieuw in te stellen na een oproep. FreeBSD vermijdt het versturen van commando's naar een modem en het bekijken van de toestand van een modem. Dit kan vreemd lijken als bekend is hoe modems met PC-gebaseerde prikbordsystemen (BBS) verbinden.

## 27.4.2. Overwegingen voor de seriële interface

FreeBSD ondersteunt EIA RS-232C (CCITT V.24) communicatie-interfaces gebaseerd op NS8250, NS1645, NS16550 en NS16550A. De 8250- en 16450-apparaten hebben buffers van een enkel karakter. Het 16550-apparaat biedt een buffer van 16 karakters, wat betere systeemprestaties toestaat. Door fouten in platte 16550's is het niet mogelijk de buffer van 16 karakters te gebruiken, dus gebruik indien mogelijk 16550A's. Omdat apparaten met een buffer van een enkel karakter meer werk door het besturingssysteem vereisen dan apparaten met een buffer van 16 karakters, ligt de voorkeur bij seriële interfacekaarten gebaseerd op de 16550A. Indien een systeem veel actieve seriële poorten heeft of zwaar belast wordt, zijn kaarten gebaseerd op de 16550A beter voor communicatie met een lage foutenratio.

## 27.4.3. Snel overzicht

Net als met terminals zet `init` een `getty`-proces op voor elke seriële poort die voor inbelverbindingen is ingesteld. Indien bijvoorbeeld een modem aan `/dev/ttyu0` is gekoppeld, kan het commando `ps ax` het volgende weergeven:

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

Wanneer een gebruiker naar de modemlijn belt en de modems verbinding maken, wordt de CD-lijn (Carrier Detect) door het modem gerapporteerd. De kernel merkt op dat een draaggolf is gesignaleerd en laat `getty` het openen van de poort voltooien. `getty` stuurt een prompt `login:` met de initieel gespecificeerde lijnsnelheid. `getty` bekijkt of er geldige karakters zijn ontvangen en probeert, in een typische opstelling, indien het rommel aantreft (waarschijnlijk omdat de snelheid waarmee het modem verbindt afwijkt van de snelheid van `getty`) de lijnsnelheden aan te passen totdat het redelijke karakters ontvangt.

Nadat een gebruikersnaam is opgegeven voert `getty` `/usr/bin/login` uit, die het aanmelden voltooit door te vragen naar het wachtwoord van een gebruiker en daarna de shell van een gebruiker op te starten.

## 27.4.4. Instellingenbestanden

Er zijn drie systeeminstellingenbestanden in de map `/etc` die waarschijnlijk gewijzigd moeten worden om inbellen op een FreeBSD-systeem toe te staan. Het eerste bestand, `/etc/gettytab`, bevat informatie om de daemon `/usr/libexec/getty` in te stellen. Het tweede bestand, `/etc/ttys` bevat informatie voor `/sbin/init` dat vertelt op welke `tty` apparaten een proces `getty` moet draaien. Als laatste kunnen in het script `/etc/rc.d/serial` commando's geplaatst worden om poorten te initialiseren.

Er bestaan twee stromingen met betrekking tot inbelmodems op UNIX. De ene houdt ervan om modems en systemen in te stellen zodat de lokale computer-naar-modem RS-232-interface met een vaste snelheid werkt, ongeacht de snelheid waarmee een gebruiker-op-afstand inbelt. Het voordeel van deze instelling is dat een gebruiker-op-afstand altijd meteen een aanmeldprompt van een systeem ziet. Het nadeel is dat een systeem niet weet wat de werkelijke gegevenssnelheid van een gebruiker is en dus passen programma's die met een volledig scherm werken, zoals Emacs, hun methode om het scherm te tekenen niet aan om hun reactie beter te maken voor langzame verbindingen.

De andere stroming stelt de RS-232-interface van een modem zo in dat de snelheid ervan varieert met de verbindingssnelheid van een gebruiker-op-afstand. Zo zorgen V.32bis-verbindingen (14,4 kbps) met een modem ervoor dat een modem de RS-232-interface op 19,2 kbps laat draaien, terwijl verbindingen op 2400 bps ervoor zorgen dat de RS-232-interface van een modem op 2400 bps draait. Omdat `getty` meldingen over de verbindingssnelheid van een gegeven modem niet begrijpt, geeft `getty` een bericht `login:` op een initiële snelheid en kijkt het naar de karakters die als antwoord terugkomen. Als een gebruiker rommel ziet, wordt ervan uitgegaan dat deze weet dat de Enter toets ingedrukt moet worden totdat een herkenbaar prompt zichtbaar is. Indien de gegevenssnelheden niet overeenkomen, ziet `getty` alles wat een gebruiker intypt als rommel, probeert het op de volgende snelheid over te gaan en het geeft opnieuw het prompt `login:`. Deze procedure kan ad nauseam doorgaan, maar normaal gesproken zijn er slechts een stuk of twee toetsaanslagen nodig voordat een gebruiker een juist prompt ziet. Het is duidelijk dat deze aanmeldprocedure er niet zo mooi uitziet als de methode vaste-snelheid, maar een gebruiker met een langzame verbinding zou betere interactiviteit moeten beleven met programma's die met een volledig scherm werken.

Deze sectie poogt om neutrale informatie over instellingen te geven, maar is geneigd om de gegevenssnelheid van het modem af te laten hangen van de verbindingssnelheid.

### 27.4.4.1. `/etc/gettytab`

`/etc/gettytab` is een bestand met informatie over instellingen voor getty(8) in de stijl van termcap(5). In de hulppagina van gettytab(5) staat de volledige informatie over het formaat van het bestand en de lijst met mogelijkheden.

#### 27.4.4.1.1. Vaste snelheid instellen

Indien de snelheid van een modem om gegevens te communiceren op een bepaalde waarde wordt vastgezet, is het waarschijnlijk niet nodig om wijzigingen aan te brengen in `/etc/gettytab`.

#### 27.4.4.1.2. Overeenkomstige snelheid instellen

In `/etc/gettytab` dient een regel ingesteld te worden om `getty` informatie te geven over de snelheden die voor het modem gewenst zijn. Indien een 2400 bps modem aanwezig is, kan waarschijnlijk de bestaande regel `D2400` gebruikt worden.

    #
    # Voor snelle inbelterminals, 2400/1200/300 roterend (er kan met beide kanten begonnen worden)
    #
    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:

Indien er een modem voor hogere snelheden aanwezig is, dient er waarschijnlijk een regel aan `/etc/gettytab` toegevoegd te worden. Hieronder staat een regel die gebruikt kan worden voor een 14,4 kbps modem met een maximale interface-snelheid van 19,2 kbps:

    #
    # Toevoegingen voor een V.32bis modem
    #
    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:

Dit resulteert in 8-bits verbindingen zonder pariteit.

Het bovenstaande voorbeeld begint met een communicatiesnelheid van 19,2 kbps (voor een V.32bis-verbinding), daarna doorloopt het 9600 bps (voor V.32), 2400 bps, 1200 bps, 300 bps en daarna weer 19,2 kbps. Het doorlopen van de communicatiesnelheid is met de mogelijkheid `nx=` (volgende tabel) geïmplementeerd. Elk van deze regels gebruikt een regel `tc=` (tabel continuëren) om de rest van de standaard-instellingen voor een bepaalde gegevenssnelheid op te pikken.

Indien er een 28,8 kbps modem aanwezig is en/of het gewenst is om voordeel uit de compressie met een 14,4 kbps te halen, is het nodig om hogere communicatiesnelheden dan 19,2 kbps te gebruiken. Hieronder staat een voorbeeld van een regel voor `gettytab` die begint met 57,6 kbps.

    #
    # Toevoegingen voor een V.32bis of V.34 modem
    # beginnend bij 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:

Indien een CPU langzaam of een systeem zwaar belast is en er geen seriële poorten gebaseerd op 16550A aanwezig zijn, kunnen er `sio` silo-fouten optreden bij 57,6 kbps.

### 27.4.4.2. `/etc/ttys`

Het instellen van het bestand `/etc/ttys` staat beschreven in Voorbeeld 27-1. Het instellen van modems is vergelijkbaar maar er moet een ander argument aan `getty` doorgegeven worden en er moet een ander type terminal doorgegeven te worden. Het algemene formaat voor zowel vaste snelheid als overeenkomstige snelheid is:

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

Het eerste item op bovenstaande regel is het speciale apparaatbestand. `ttyu0` betekent dat `/dev/ttyu0` het bestand is dat door `getty` in de gaten wordt gehouden. Het tweede item, `"/usr/libexec/getty`xxx`"` (`xxx` wordt vervangen door de initiële mogelijkheden van `gettytab`) is het proces dat door `init` op het apparaat gedraaid wordt. Het derde item, `dialup`, is het standaard terminaltype. De vierde parameter, `on`, geeft aan `init` aan dat de lijn operationeel is. Er kan een vijfde parameter zijn, `secure`, maar gebruik deze alleen voor terminals die fysiek veilig zijn (zoals de systeemconsole).

Het standaard terminaltype (`dialup` in bovenstaand voorbeeld) mag afhangen van lokale voorkeuren. Het traditionele standaard terminaltype voor inbellijnen is `dialup`, zodat gebruikers hun aanmeldscripts kunnen aanpassen om op te merken wanneer het terminal `dialup` is en automatisch hun terminaltype kunnen aanpassen. Wellicht is het makkelijker om `vt102` als het standaard terminaltype te specificeren, aangezien gebruikers gewoon VT102-emulatie op hun systemen-op-afstand gebruiken.

Nadat `/etc/ttys` gewijzigd is, kan aan het proces `init` een signaal HUP gestuurd worden om het bestand opnieuw te laten lezen. Gebruik volgende opdracht om het signaal te versturen:

    # kill -HUP 1

Indien een systeem voor de eerste keer wordt geïnstalleerd, is het verstandig te wachten totdat een modem juist ingesteld en verbonden is voordat het signaal aan `init` verstuurd wordt.

#### 27.4.4.2.1. Vaste snelheid instellen

Voor het instellen van een vaste snelheid dient de regel in `ttys` een vaste snelheid door te geven aan `getty`. Voor een modem met een vaste poortsnelheid van 19,2 kbps kan de regel in `ttys` er als volgt uitzien:

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

Indien een modem op een andere gegevenssnelheid is ingesteld, dient de juiste waarde voor `std.`snelheid`` in plaats van `std.19200` ingesteld te worden. Gebruik een geldig type dat in `/etc/gettytab` vermeld staat.

#### 27.4.4.2.2. Overeenkomstige snelheid instellen

Voor het instellen van een overeenkomstige snelheid dient de regel in `ttys` te verwijzen naar regel met de juiste begin-auto-baud (sic). Indien bijvoorbeeld de boven voorgestelde regel voor een modem met een overeenkomstige snelheid die begint met 19,2 kbps wordt toegevoegd (de regel in `gettytab` die het beginpunt `V19200`), kan de regel in `ttys` er als volgt uitzien:

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

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

Hogesnelheidsmodems, zoals V.32, V.32bis, en V.34 modems, moeten gebruik maken van hardwarematig (`RTS/CTS`) gegevensstroombeheer. Er kunnen `stty`-opdrachten aan `/etc/rc.d/serial` toegevoegd worden om de vlag voor hardwarematig gegevensstroombeheer in de kernel van FreeBSD voor modempoorten in te stellen.

Om bijvoorbeeld de `termios`-vlag `crtscts` op de apparaten die de in- en uitbelapparaten initialiseren op de eerste seriële poort (`COM2`) in te stellen, kunnen de volgende regels aan `/etc/rc.d/serial` worden toegevoegd:

    # Seriële poort initieel instellen
    stty -f /dev/ttyu1.init crtscts
    stty -f /dev/cuau1.init crtscts

## 27.4.5. Modeminstellingen

Bij gebruik van een modem waarvan de parameters permanent in niet-vluchtig RAM ingesteld kunnen worden, is er een terminalprogramma (zoals Telix onder MS-DOS® of `tip` onder FreeBSD) nodig om parameters in te stellen. Maak een verbinding met een modem met dezelfde communicatiesnelheid als de initiële snelheid die door `getty` gebruikt wordt en stel het niet-vluchtige RAM van een modem in zodat aan deze voorwaarden voldaan wordt:

- CD geldt tijdens verbindingen;

- DTR geldt tijdens gebruik; het loslaten van DTR hangt de verbinding op en stelt het modem opnieuw in;

- gegevensstroombeheer door CTS verzonden;

- gegevensstroombeheer met XON/XOFF uitgezet;

- gegevensstroombeheer door RTS ontvangen;

- Stille modus (geen resultaatcodes);

- Geen opdrachtecho.

Kijk in de documentatie van een modem voor de benodigde opdrachten en/of instellingen van DIP-schakelaars.

Om de bovenstaande parameters bijvoorbeeld op een U.S. Robotics® Sportster® 14.400 extern modem in te stellen, kunnen de volgende opdrachten aan het modem gegeven worden:

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

In deze fase kunnen ook andere modeminstellingen aangepast worden, zoals of het V.42bis en/of MNP5 compressie wordt gebruiken.

Een U.S. Robotics Sportster 14.400 externe modem heeft ook enkele DIP-schakelaars die ingesteld moeten worden. Voor andere modems kunnen deze instellingen wellicht als voorbeeld dienen:

- Schakelaar 1: UP: DTR Normal

- Schakelaar 2: N/A (Verbal Result Codes/Numeric Result Codes)

- Schakelaar 3: UP: Suppress Result Codes

- Schakelaar 4: DOWN: Geen echo, offline opdrachten

- Schakelaar 5: UP: Auto Answer

- Schakelaar 6: UP: Carrier Detect Normal

- Schakelaar 7: UP: Load NVRAM Defaults

- Schakelaar 8: N/A (Smart Mode/Dumb Mode)

Schakel resultaatcodes voor alle inbelmodems uit of onderdruk ze om problemen te voorkomen die kunnen optreden als `getty` abusievelijk een prompt `login:` geeft aan een modem dat in opdrachtmodus staat en het modem de opdracht echoot of een resultaatcode teruggeeft. Deze sequentie kan tot een uitgebreide, onnozele discussie tussen `getty` en het modem leiden.

### 27.4.5.1. Vaste snelheid instellen

Stel voor een vaste snelheid een modem zodanig in dat die een constante gegevenssnelheid naar de computer, onafhankelijk van de communicatiesnelheid, behoudt. Op een U.S. Robotics Sportster 14.400 extern modem zetten de volgende opdrachten de gegevenssnelheid naar de computer vast op de snelheid die gebruikt werd om de opdrachten te geven:

    ATZ
    AT&B1&W

### 27.4.5.2. Overeenkomstige snelheid instellen

Stel voor een variabele snelheid een modem zodanig in dat het de gegevenssnelheid van zijn seriële poort aanpast aan de snelheid van een binnenkomende oproep. Op een U.S. Robotics Sportster 14.400 extern modem zetten de volgende opdrachten de gegevenssnelheid van het modem, die op fouten gecorrigeerd wordt, vast op de snelheid die gebruikt werd om de opdrachten te geven, maar staan ze toe dat de snelheid van de seriële poort varieert voor verbindingen die niet op fouten gecorrigeerd worden:

    ATZ
    AT&B2&W

### 27.4.5.3. De modeminstellingen controleren

De meeste modems die op hoge snelheid werken, bieden opdrachten om de huidige werkparameters van een modem in een min of meer voor mensen leesbare vorm te bekijken. Op het U.S. Robotics Sportster 14.400 extern modem beeldt de opdracht `ATI5` de instellingen af die in het niet-vluchtige RAM zijn opgeslagen. Gebruik om de werkelijke werkparameters van een modem te zien (zoals beïnvloed door de stand van de DIP-schakelaars van een modem) de opdrachten `ATZ` gevolgd door `ATI4`.

Kijk in de handleiding van een modem als er met een ander merk modem gewerkt wordt voor het controleren van de parameters voor het instellen van dat modem.

## 27.4.6. Problemen oplossen

Hier volgen wat stappen die gevolgd kunnen worden om een inbelmodem op een systeem te controleren.

### 27.4.6.1. Een FreeBSD-systeem controleren

Verbind een modem met een FreeBSD-systeem, start het systeem op en kijk, indien het modem lampjes bevat die de toestand aangeven, of de DTR-indicator oplicht als het prompt `login:` op de systeemconsole verschijnt. Als het oplicht zou dit betekenen dat FreeBSD een `getty`-proces heeft gestart op de juiste communicatiepoort en wacht op het modem om een gesprek aan te nemen.

Geef als de DTR-indicator niet oplicht, na aanmelden op de console, de opdracht `ps ax` om te zien of FreeBSD probeert een `getty`-proces op de juiste poort te draaien. Er dienen tussen de weergegeven processen regels zoals de onderstaande te verschijnen:

      114 ??  I      0:00.10 /usr/libexec/getty V19200 ttyu0
      115 ??  I      0:00.10 /usr/libexec/getty V19200 ttyu1

Er kan ook iets als het volgende verschijnen:

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

Als het modem nog geen gesprek heeft aangenomen, betekent dit dat `getty` het openen van de communicatiepoort voltooid heeft. Dit kan duiden op een probleem met de bekabeling of op een verkeerd ingesteld modem omdat `getty` niet in staat zou moeten zijn om de communicatiepoort te openen totdat CD (kiestoon) door het modem is bevestigd.

Indien er geen enkel `getty`-proces verschijnt dat wacht op het openen van de gewenste poort `ttyu`N``, controleer dan de regels in `/etc/ttys` op vergissingen. Controleer ook het logboekbestand `/var/log/messages` om te zien of er logboekberichten van `init` of `getty` met betrekking tot problemen zijn. Indien er problemen zijn, controleer dan nogmaals de instellingenbestanden `/etc/ttys` en `/etc/gettytab`, alsook de betreffende speciale apparaatbestanden `/dev/ttyuN`, op vergissingen, ontbrekende regels of ontbrekende speciale apparaatbestanden.

### 27.4.6.2. Proberen om in te bellen

Probeer in te bellen op een systeem. Controleer of op het systeem-op-afstand 8 bits, geen pariteit en 1 stopbit gebruikt wordt. Probeer, indien er niet meteen een prompt verschijnt of als er rommel verschijnt, ongeveer eens per seconde op Enter te drukken. Probeer, indien er na een tijd nog geen prompt `login:` verschijnt, een `BREAK` te versturen. Probeer, indien er een modem wordt gebruikt dat op hoge snelheid werkt om te bellen, opnieuw in te bellen nadat de interfacesnelheid van het bellende modem is vastgezet (bijvoorbeeld via `AT&B1` op een U.S. Robotics Sportster modem).

Controleer, indien er nog steeds geen prompt `login:` verschijnt, nogmaals `/etc/gettytab` en controleer of:

- De initiële specificatie die in `/etc/ttys` voor de lijn staat overeenkomt met een naam van een specificatie in `/etc/gettytab`;

- Elke regel `nx=` overeenkomt met een naam van een andere specificatie in `gettytab`;

- Elke regel `tc=` overeenkomt met een naam van een andere specificatie in `gettytab`.

Controleer, indien er gebeld wordt maar het modem op het FreeBSD-systeem niet reageert, of het modem ingesteld is om de telefoon te beantwoorden als DTR bevestigd is. Controleer, indien het modem juist ingesteld lijkt te zijn, of de DTR-lijn bevestigd is door de indicatielampjes van het modem te controleren (indien die aanwezig zijn).

Neem een pauze en probeer het later nog eens indien alles meerdere malen is geprobeerd en het nog steeds niet werkt. Indien het nog steeds niet werkt, stuur dan een e-mail naar de FreeBSD algemene vragen mailinglijst met een beschrijving van het modem en het probleem en de mensen op de lijst zullen proberen te helpen.

Terug | Begin | Volgende
Terminals | Omhoog | Uitbeldienst