Internet , TCP/IP met de Atom , deel 2                    door Kees van Oss.

Inleiding:

Dit artikel is het vervolg op een eerder gepubliceerd artikel over hoe de Atom aan een netwerk te knopen. Zoals de titel al zegt is dit deel 2 en wil ik graag de voortgang van het project beschrijven. In dit artikel worden een aantal testen beschreven welke ik uitgevoerd heb met de resultaten en de huidige status van het project.

ISA-bus:

Als eerste heb ik de ISA-bus voor de Atom gebouwd en aangesloten. In het begin had ik wat problemen met de resetlijn maar deze bleek geïnverteerd te moeten zijn tov de Atom reset. Toen dit aangepast was werkte de ISA bus goed.

Terminal programma:

Daarna heb ik een test gedaan met een modemkaart omdat je deze via AT commando’s aan kunt sturen en respons krijgt via de seriële poort. Om de commando’s naar de modem te kunnen sturen heb ik een simpel terminal programma geschreven. Dit programma voert een keyboard scan uit en zet alle karakters in een buffer. Wanneer er op de returntoets gedrukt wordt, worden alle karakters uit de buffer naar de seriële poort gestuurd. Terwijl de Atom het keyboard scant, wordt er ook gekeken of er karakters ontvangen zijn en indien dit zo is worden deze op het scherm geprint. Het principe is dus als volgt:

internet2-1.gif

Vervolgens heb ik de modemkaart omgewisseld met een seriële I/O kaart. Deze kaart heb ik via een nullmodem kabel verbonden met de seriële poort van mijn PC. Op de PC heb ik toen een terminal programma opgestart, bv Hyperterminal, om te testen hoe snel de data verstuurd kan worden. Na wat experimenten met de snelheid, bleek 4800 baud betrouwbaar te zijn. Waarschijnlijk zal het nog iets sneller kunnen maar dan moet ik de interruptlijn van de ISA-bus koppelen aan de interruptlijn van de Atom. Voorlopig voldoet deze snelheid en zal ik de interruptlijnen misschien later koppelen.
Het communiceren via de seriële poort heb ik daarna nog iets verbeterd door het inlezen van de karakters onder interrupt te laten verlopen zodat er zeker geen karakter gemist wordt.

PPP (Point To Point) server:

Het communiceren was nu betrouwbaar en de volgende stap was om een PPP server op de PC te installeren zodat ik via de seriële poort verbinding kan maken met het PC netwerk. Een PPP server is nodig om via een 1 op 1 verbinding te communiceren.
Het eerste probleem waar ik tegenaan liep, was dat er standaard wel een PPP server geïnstalleerd kon worden maar deze werkte alleen op de aanwezige modems. Na dagenlang surfen op het internet, vond ik een geschikte driver welke een nullmodem installeerde. Er wordt nu een modem gezien, nullmodem, welke rechtstreeks met de seriële poort communiceert. De PPP server was nu wel te gebruiken.
Ik heb toen mijn Atom via de nullmodem kabel aan de PC gekoppeld en daarna op de PC de PPP server gestart. Op de Atom draaide een aangepaste versie van mijn terminal programma welke de ontvangen karakters als hexadecimale getallen op het scherm print. In eerste instantie gebeurde er niets want zowel de PC als de Atom wachten allebei op input. Pas toen ik vanuit de Atom een return naar de PC stuurde ging het circus aan de gang. Er verscheen een heleboel data op mijn scherm, alleen kon ik er nog niets van maken. Toch maar pen en papier gepakt om de data te noteren. Al gauw bleek dat er steeds dezelfde pakketjes data verstuurd werden. Nu werd het tijd om het PPP protocol erbij te nemen om eens te kijken wat de PC eigenlijk wil.

Device Driver:

Na avonden snuffelen, analyseren, surfen en puzzelen, bleek het datapakket een LCP Request te zijn. LCP (Line Control Protocol) is een soort ‘handje klap’ tussen de computers om de soort verbinding te bepalen. Nu werd het tijd om aan het serieuzere werk te gaan beginnen, het schrijven van een device driver. De device driver (DEV) moet een aantal modules bevatten voor het afhandelen van diverse taken en is dus de tussenschakel tussen de PC en de de Atomic Network ROM. Als eerste ben ik begonnen om een module te schrijven voor de seriële communicatie, de SER module. Hierin zitten routines om bytes te zenden en te ontvangen via de seriële poort.
De volgende module welke in de DEV module moet zitten is de PPP module. Deze moet het lezen en schrijven van pakketjes, het tot stand brengen van een verbinding en het doorgeven van de pakketjes aan de juiste vervolgmodule verzorgen. De eerste 2 routines die ik geschreven heb zijn het lezen en schrijven van pakketjes. Om ervoor te zorgen dat de routines niet in een eindeloze loop blijven hangen doordat er bv geen data binnenkomt, is er een timeout timer voorzien welke de loop verlaat na een X aantal seconden. Het principe van de communicatie via de device driver is als volgt:

internet2-2.gif

PPP protocol:

Het versturen en ontvangen van PPP-pakketjes ging goed dus de volgende stap was een verbinding tot stand brengen tussen Atom en PC volgens het PPP protocol. Dit gebeurt in 3 stappen.

  1. Als eerste wordt via het Line Control Protocol (LCP) de aard van de verbinding vastgelegd,
  2. Daarna wordt via het Password Authentication Protocol (PAP) om de Userid en het Password gevraagd,
  3. Als laatste wordt via het Internet Protocol Control Protocol (IPCP) om het IP adres gevraagd of toegekent.

In de PPP module zitten dus nog 3 andere modules voor het afhandelen van het LCP, PAP en het IPCP Protocol. De routine om het tot stand brengen van de verbinding te verzorgen wordt State Machine Loop genoemd. Hiervoor wordt een variabele gereserveerd (PPP_STATE) waaraan men kan zien in welke stap en in welke fase van verbinding men is. PPP_STATE kan de volgende waardes aannemen:

    LCP FASE:

  1. Geen verbinding, opstart situatie. De Atom stuurt een Return naar de PC om zich te melden.

  2. De PC heeft gezien dat de Atom zich aan wil melden en stuurt een LCP Request met een aantal Configure Options. Uit deze Request wordt Configure Option 3 (aanvraag voor Authetication) verwijderd en de rest als LCP Reject terug gestuurd.
  3. De PC heeft gezien dat Option 3 verwijdert is en stuurt nu een nieuwe LCP Request maar nu alleen met Configure Option 3.
    Er zijn 2 protocollen voor Authetication, nl. CHAP en PAP.
    Indien dit CHAP is verander dit dan in PAP en Reject de Request. De PC stuurt nu een nieuwe Request met een PAP option.
    Indien het PAP is, stuur de Request dan terug als Acknowledge.

  4. De Atom stuurt nu een nieuwe LCP Request met een Configure Option 1 (aanvraag maximale packet grootte).

  5. De PC heeft voor deze Configure Option 1 een Acknowledge gestuurd en hiermee is de LCP fase nu afgerond. We gaan nu over naar de Authetication fase.

    PAP FASE:

    De Atom stuurt nu een PAP Request naar de PC waarin de Userid en het Password meegestuurd worden.

  6. Indien Userid en Password ok, dan stuurt de PC een PAP Acknowledge terug en hebben we toegang tot het netwerk,

  7. IPCP FASE:

  8. De Authetication fase is nu afgerond en nu gaan we over naar de IPCP fase. De PC stuurt een IPCP Request met een aantal Configure Options. Hieruit wordt alleen Configure Option 3 (Aanvraag IP adres) verwijderd en de rest als IPCP Reject terug gestuurd.

  9. De PC stuurt nu een nieuwe IPCP Request met alleen Configure Option 3. Deze stuurt de Atom terug als Acknowledge

  10. Indien de Atom een vast IP adres krijgt, verstuurd de Atom een IPCP Request met het bekende IP adres. Indien op de PC een DHCP (Dynamic Host Control Protocol) server geïnstalleerd is, kan de Atom een IP adres aanvragen door in de IPCP Request met als IP adres 0.0.0.0 mee te sturen.
    De PC zal dan antwoorden met een IPCP Not Acknowledge (NAK) met daarin het juiste IP adres. De Atom moet dan weer een IPCP Request sturen met het zojuist verkregen IP adres.

  11. De PC heeft een IPCP Acknowledge gestuurd ten teken dat de PPP verbinding tot stand is gebracht.

  12. Verbonden!!!! Hiep, hiep hoera!!!

Status:

Ik ben nu zover gevorderd met mijn Device Driver, dat de PPP verbinding goed gaat. Ik had wat problemen met de PAP controle en dan met name met de Userid en Password, maar deze blijken gewoon de Windows gebruikersnamen met Wachtwoord te zijn. Wanneer de verbinding tot stand is gebracht, kan ik op de PC een Ping sturen naar de Atom en zie dan op het Atom scherm dat er een IP packet binnenkomt. Tot zo ver werkt het dus, nu moet ik een goede manier zien te vinden om de IP packetten door te geven aan de Atomic Netwerk ROM want hierin zit de IP module.
Als eerste wil ik wat simpele IP aanvragen afhandelen zoals de Ping reply en het opvragen van de PC tijd en datum. Het project vordert dus wel maar er is nog steeds veel te doen.

Tot zo ver weer het Atomic Netwerk verhaal.

Groeten
Kees van Oss