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

Inleiding:

In het vorige artikel heb ik een aantal testen beschreven en hoe de status van het project op dit moment is. Ik heb nu de PPP State-loop werkende en wil hieronder beschrijven hoe het nu exact werkt. Daarna wil ik de volgende fase in het project bespreken, de Atomic Network ROM (AN-ROM) waarin de TCP/IP stack zit en een aantal commando's om TCP/IP communicatie op te zetten en te kunnen gebruiken (Sockets).

PPP State-loop:

De State-loop is nu definitief en werkt redelijk universeel. Dit betekent dat de Atom reageert op aanvragen van de PC en deze zodanig beantwoord dat de verbinding eenduidig vastgelegd wordt. Ik heb dit nog niet kunnen testen op een ander systeem, maar onder Windows werkt het goed. Om te kunnen begrijpen hoe de State-loop werkt zal ik eerst een blokschema laten zien van hoe de PPP-communicatie verloopt vanaf PPP-State=0 (geen verbinding):

internet3-5.gif

In het programma is de State-loop een routine welke aangeroepen wordt met PPP-State=0 als men opstart en zonder PPP-State als er iets ontvangen moet worden. Verder zijn de belangrijkste routines de protocol afhandelings routines voor LCP, PAP en IPCP. Wanneer ik dit vertaal naar een flow diagram, dan ziet de State-loop er als volgt uit:

internet3-1.gif

Wanneer je het verhaal verder leest zul je merken dat de IP-handle module verder niet besproken wordt. Dit komt omdat ik eerst een goede manier moet vinden om de data van de driver door te sturen, via de IP-handle module, naar de AN-ROM waarin de TCP/IP stack zit. Deze volgt nog in een later stadium.

LCP-handle module:

Om een PPP verbinding te maken wordt eerst op LCP nivo de verbinding 'besproken'. Op LCP nivo wordt bv. vastgelegd hoe groot de te versturen packet grootte moet zijn (Config Option 1 MRU), of hoe de control karakters (ASCII 0-31) verstuurd moeten worden (Config Option 2 ACCM), of dat er Password controle moet zijn (Config Option 3 PAP/CHAP).
De afhandeling van een ontvangen LCP packet verloopt als volgt:

internet3-2.gif

PAP-handle module:

De PAP module doet op zich niet veel. De PAP Request wordt door de Atom verstuurd en het enigste waarop gereageerd wordt is een Acknowledge van de PC ten teken dat de Userid en het Password geaccepteerd zijn. De afhandeling van een ontvangen PAP packet verloopt als volgt:

internet3-3.gif

IPCP-handle module:

Wanneer een PAP Acknowledge door de PC verzonden is wordt automatisch overgegaan naar de IPCP fase. Eigenlijk is dit de NCP (Netwerk Control Protocol) fase omdat in deze fase meerdere protocollen kunnen communiceren maar omdat de Atom alleen maar IPCP accepteerd, noem ik deze fase IPCP fase.
De PC stuurt een IPCP Request waarvan, in ons geval alleen de IP aanvraag van belang is. Wanneer een IPCP Request ontvangen wordt zal de Atom Config Option 3 (IP adres aanvraag) verwijderen en de rest als Reject terugsturen. De PC zal nu een nieuwe Request sturen met alleen Configure Option 3, deze zal door de Atom met Acknowledge beantwoord worden. Daarna verstuurd de Atom een Config Option 3 aanvraag voor een vast IP adres welke vervolgens door de PC beantwoord wordt met een Acknowledge.
De IPCP afhandeling ziet er daarom als volgt uit:

internet3-4.gif

AN-ROM:

De driver is nu gereed, op de IP-handle module na, en zal misschien nog wat aangepast moeten worden zodat de driver routines gemakkelijk aan te roepen zijn. Nu moet ik beginnen met het schrijven van commando's voor het definiëren van Sockets. Volgende commando's zullen worden gedefineerd in de AN-ROM:

CommandoParametersOpmerking
SOCKCREATEx, ProtocolInitialiseer data in Socket definitie x voor Protocol
SOCKBINDx, Local PortnrVul Local Portnr in voor Socket x
SOCKCONNECTx, Remote IP-adres, Remote portnrVul Remote IP-adres en Remote Portnr in voor Socket x en maak verbinding indien TCP socket
SOCKLISTENxWacht tot zich een client aanmeld voor Socket x
SOCKACCEPTyCreëer nieuwe Socket y voor verbinding
SOCKCLOSExVerbreek verbinding van Socket x en markeer als niet actief
SOCKINFO Geef Statusoverzicht van Sockets
ANINFO Geef overzicht van AN-ROM nummer, geïnstalleede devicedriver, jumpadressen IP/TCP/UDP en geïnstalleerde applicaties

Er zijn in principe 2 manieren op de TCP/IP stack te gebruiken, als server of als client. Wanneer er een server geïnstalleerd is, zal deze wachten tot zich een client aanmeld en zal daarna een nieuwe verbinding tot stand brengen (bij TCP) en dan data uitwisselen. Een client zal een server aanroepen en hiermee verbinding maken om data uit te wisselen. Hieronder staan een aantal typische voorbeelden voor het gebruik van de TCP/IP stack als server en als client.

TCP Server:

  • SOCKCREATE 0,TCP
  • SOCKBIND 0,80
  • SOCKLISTEN 0
  • SOCKACCEPT 1
  • SOCKWRITE 0,#3F00,#FF
  • SOCKREAD 0
  • SOCKCLOSE 0
  • SOCKCLOSE 1
, Creëer nieuwe TCP Socket nr 0
, Koppel Socket nr 0 aan poort 80
, Wacht op client welke zich aanmeld op poort 80
, Client heeft zich aangemeld, creëer nieuwe Socket nr 1 voor communicatie
, Schrijf datablok van #3F00 t/m #3FFF weg
, Lees datablok binnen van Socket nr 0
, Verbreek verbinding van Socket nr 0
, Verbreek verbinding van Socket nr 1

TCP Client:

  • SOCKCREATE 0,TCP
  • SOCKCONNECT 0,192.168.0.10,80
  • SOCKWRITE 0,#3F00,#FF
  • SOCKREAD 0
  • SOCKCLOSE 0
, Creëer nieuwe TCP socket nr 0
, Maak verbinding met IP adres 192.168.0.10 op poort 80
, Schrijf datablok van #3F00 t/m #3FFF naar IP adres 192.168.0.10
, Lees datablok binnen van IP adres 192.168.0.10
, Verbreek verbinding

UDP Server/Client:

  • SOCKCREATE 0,UDP
  • SOCKBIND 0,80
  • SOCKWRITE 0,#3F00,#FF
  • SOCKREAD 0
  • SOCKCLOSE 0
, Creëer nieuwe UDP Socket nr 0
, Koppel Socket nr 0 aan poort 80
, Schrijf datablok van #3F00 t/m #3FFF naar IP adres 192.168.0.10
, Lees datablok binnen van IP adres 192.168.0.10
, Verbreek verbinding

Status:

Het verbinden via een PPP verbinding gaat nu goed en ik ga als volgende fase de commando's voor de ANROM programmeren. Het TCP/IP stuk in de ANROM met de Sockets is nog een gedachte die uitontwikkeld moet worden en kan dus nog veranderen tijdens uitvoer. Al met al moet het nog blijken of de juiste commando's zijn gekozen.
Ook ga ik wat testen met een ethernet kaart om te kijken of ook die verbinding wil lukken waardoor de Atom rechtstreeks in een netwerk aangesloten kan worden en niet meer via een PC.

Tot zo ver weer het Atomic Netwerk verhaal.

Groeten
Kees van Oss