____________________________________________________________________________ #on("b")##on ("u")# #center#Betriebssystem E U M E L #off ("u")# #center#Netzsoftware #off("b")# #center#Lizenzfreie Software der #on ("b")# #center#Gesellschaft für Mathematik und Datenverarbeitung mbH, #center#5205 Sankt Augustin #off("b")# #center#Die Nutzung der Software ist nur im Schul- und Hochschulbereich für #center#nichtkommerzielle Zwecke gestattet. #center#Gewährleistung und Haftung werden ausgeschlossen ____________________________________________________________________________ #page# #pagenr ("%",1)##setcount(1)##block##pageblock##count per page# #headeven# #center#EUMEL Netzbeschreibung #center#____________________________________________________________ #end# #headodd# #center#Inhalt #center#____________________________________________________________ #end# #bottomeven# #center#____________________________________________________________ Netz - % #right# GMD #end# #bottomodd# #center#____________________________________________________________ GMD #right#Netz - % #end# #center#Inhalt #clear pos##lpos(1.0)##rpos(9.5)# #table# 1. Einleitung #topage("0")# Teil 1: Netz einrichten und benutzen #topage("1")# 1.1. Hardwarevoraussetzungen #topage("1.1")# 1.2. Einrichten des Netzes #topage("1.2")# 1.3. Benutzung des Netzes #topage("1.3")# 1.4. Informationsmöglichkeiten #topage("1.4")# 1.5. Eingriffsmöglichkeiten #topage("1.5")# 1.6. Fehlerbehebung im Netz #topage("1.6")# 1.7. Sicherheit im Netz #topage("1.7")# Teil 2: Arbeitsweise der Netzsoftware #topage("2")# 2.1. Die Netztask #topage("2.1")# 2.2. Protokollebenen #topage("2.2")# 2.3. Stand der Netzsoftware #topage("2.3")# Teil 3: Netz-Hardware-Interface #topage("3")# 3.1. Einführung #topage("3.1")# 3.2. Arbeitsweise des Netz-Hardware-Interfaces #topage("3.2")# 3.3. Netztreiber #topage("3.3")# 3.4. Prozedurschnittstelle des EUMEL-Netzes #topage("3.4")# Anhang #topage("A")# 1. Fehlermeldungen #topage("A.1")# 2. Literaturhinweise #topage("A.2")# 3. Index #topage("A.3")# #table end# #clear pos# #page# #pagenr ("%", 2)##setcount (1)##block##pageblock##count per page# #headeven# #center#EUMEL Netzbeschreibung #center#____________________________________________________________ #end# #headodd# #center#Einleitung #center#____________________________________________________________ #end# #bottomeven# #center#____________________________________________________________ Netz - % #right#GMD #end# #bottomodd# #center#____________________________________________________________ GMD #right#Netz - % #end# 1. Einleitung #goalpage("0")# Das EUMEL-Netz dient dazu, mehrere EUMEL-Rechner (sog. #ib#Station#ie#en) miteinan­ der zu koppeln. Diese Kopplung wird vom Betriebssystem dazu benutzt, das Sen­ dungskonzept [1] so auszudehnen, daß Tasks verschiedener Stationen einander Datenräume zusenden können. Auf dem #ib#Sendungskonzept#ie# aufbauende Konzepte nutzen daher automatisch das Netz aus: So ist es z.B. möglich - von einer Station aus auf einer anderen zu drucken, - in die Task PUBLIC einer anderen Station #ib#Datei#ie#en zu sichern (save), vorausge­ setzt, daß PUBLIC dort ein #on("b")#free global manager#off("b")# ist, - auf einer anderen Station zu archivieren (z.B. wenn das eigene Archivlaufwerk defekt ist oder ein anderes Format hat). Diese #ib#Netzversion#ie# kann ab EUMEL-Version 1.8.1 eingesetzt werden. Diese Netzbeschreibung besteht aus drei Teilen. In Teil 1 wird beschrieben, wie das EUMEL-Netz benutzt und eingerichtet wird. Als Benutzer eines EUMEL- Rechners, der vernetzt ist, ist nur dieser Teil der Netzbeschreibung für Sie wichtig. Teil 2 erklärt die Funktionsweise der #ib#Netzsoftware#ie#, im dritten Teil wird die Schnitt­ stelle für die Anpassung anderer #ib#Netzhardware#ie# definiert. Hinweis: Zur erstmaligen #ib#Installation#ie# des EUMEL-Netzes ist außer dieser Beschreibung noch die Netzsoftware (auf Floppy) und die EUMEL-Netz-#ib#Installationsanleitung#ie#, die mit der Software geliefert wird, notwendig. In der vorliegenden Netzbeschreibung wird das EUMEL-Netz möglichst "hardware unabhängig" beschrieben. Wenn hardwareabhängige Beispiele gegeben werden, so ist die dort beschriebene Hardware stets die #ib#Datenbox#ie#. #pagenr ("%", 3)##setcount (1)##block##pageblock##count per page# #headeven# #center#EUMEL Netzbeschreibung #cneter#____________________________________________________________ #end# #headodd# #center#Teil 1 : Netz einrichten und benutzen #center#____________________________________________________________ #end# #bottomeven# #center#____________________________________________________________ Netz - % #right#GMD #end# #bottomodd# #center#____________________________________________________________ GMD #right#Netz - % #end# #page# Teil 1: Netz einrichten und benutzen #goalpage("1")# 1.1. Hardwarevoraussetzungen #goalpage("1.1")# Zwei Stationen Sie können zwei #ib#Station#ie# miteinander vernetzen, wenn Sie dafür an jeder Station eine #ib#V.24#ie#-#ib#Schnittstelle#ie# zur Verfügung stellen. Diese beiden Schnittstellen verbinden Sie mit einem Kabel zur #ib#Rechnerkopplung#ie# [2]. Mehrere Stationen Wenn Sie mehr als zwei Stationen vernetzen wollen, stehen Ihnen zwei Konzepte zur Verfügung: das Anlegen von #ib#Netzknoten#ie# bzw. das Verwenden eines #ib#Strang#ie#es. Die Konzepte können gemischt eingesetzt werden. Ein Strang besteht aus einer Anzahl von #ib#Netzbox#ie#en (z.B. KHW-Box oder Ethernet­ anschluß). Jede Box besitzt eine #ib#Schnittstelle#ie# (z.B. #ib#V.24#ie#) zum Anschluß an einen der Kanäle 1...15 der zugeordneten #ib#Station#ie# und eine weitere Schnittstelle zur #ib#Verbindung#ie# der Boxen untereinander. Ein #ib#Knoten#ie# ist eine Station, bei der der Netzbetrieb über mehrere Kanäle läuft. Da die #ib#Netzsoftware#ie# pro #ib#Kanal#ie# eines Knotens eine Task generiert, ist das Knoten­ konzept dem Strangkonzept hinsichtlich des #ib#Durchsatz#ie#es unterlegen. Preisgünstiger ist jedoch das #ib#Knotenkonzept#ie#, weil dabei #ib#Netzbox#ie#en überflüssig werden. Beim Knotenkonzept wird eine #ib#Vermaschung#ie# nicht zur Optimierung benutzt (Ver­ maschung heißt, daß eine #ib#Zielstation#ie# über verschiedene Knoten erreichbar ist). Daher sollte man keine Vermaschung vorsehen. #ib#Nachbarn#ie# sind Stationen, die an denselben #ib#Netzstrang#ie# angeschlossen oder direkt über ein #ib#V.24#ie#-Kabel verbunden sind. Bei der Entscheidung, welche Stationen man zu #ib#Knoten#ie# macht, sollte beachtet wer­ den, daß (a) Stationen, zwischen denen hoher Verkehr besteht, Nachbarn werden und daß (b) besonders leistungsfähige Rechner #ib#Knoten#ie#stationen sein sollten. #page# 1.2. Einrichten des Netzes #goalpage("1.2")# Hinweis: Dieses Kapitel ist nur für Systembetreuer wichtig. a) Legen Sie für die am Netz beteiligten Rechner #ib#Stationsnummer#ie#n fest (von 1 an aufsteigend). Die Boxen haben ebenfalls Stationsnummern. Die Stationsnummern der Box und des zugeordneten Rechners müssen übereinstimmen. b) Holen Sie an jeder #ib#Station#ie# die Task #on("bold")#configurator#off("bold")# an ein Terminal und geben Sie das Kommando #on("bold")##ib#define station#ie# (x)#off("bold")#, wobei #on("bold")#x#off("bold")# die gewählte Stationsnummer ist. Hinweis: Taskkommunikationen, die zu diesem Zeitpunkt laufen, führen zu feh­ lerhaftem Verhalten. Dies liegt daran, daß durch #on("bold")#define station#off("bold")# alle #ib#Task-Id#ie#'s geändert werden müssen, weil eine #ib#Task-Id#ie# u.a. die Stationsnummer der eigenen Station enthält (siehe 1.3). TASK- Variablen, die noch Task-Id's mit keiner oder falscher Stationsnum­ mer enthalten, können nicht mehr zum Ansprechen einer Task ver­ wendet werden. Beispiel: Der #ib#Spoolmanager#ie# [3] richtet beim Kommando #on("bold")#start#off("bold")# einen #ib#Worker#ie# ein und merkt sich dessen #ib#Task-Id#ie# in einer TASK-Variablen, um sicher­ zustellen, daß nur der Worker #ib#Datei#ie#en zum Drucken abholt. Wird jetzt das Kommando #on("bold")# define station#off("bold")# gegeben, kann der Spoolmanager seinen Worker nicht mehr identifizieren, weil der Worker eine neue Task-Id erhalten hat. Man muß daher vor #on("b")#define station#off("b")# den Worker löschen und ihn danach mit dem Kommando #on("bold")##ib#start#ie##off("bold")# im Spoolmanager wieder neu einrichten. Sinnvollerweise gibt man #on("bold")#define station#off("bold")# sofort nachdem man ein frisches System vom Archiv geladen hat. Zum Anschluß einer #ib#Datenbox#ie# #ib#konfigurieren#ie# Sie mit dem Kommando #on("bold")##ib#configurate#ie##off("bold")# den für das Netz vorgesehenen #ib#Kanal#ie# auf - transparent - 9600 #ib#Baud#ie# (Standardeinstellung der Boxen) - #ib#RTS/CTS#ie#-#ib#Protokoll#ie# - großen Puffer - 8 bit - even parity - 1 stopbit. Falls diese Einstellungen nicht alle angeboten werden, klären Sie mit Ihrem Rechnerlieferanten, ob und wie diese Einstellungen erreicht werden können. Hinweis: Notfalls kann auf das #ib#RTS/CTS#ie#-Protokoll verzichtet werden, wenn der Eingabepuffer der #ib#Station#ie# groß genug ist. Die Anzahl simultan laufen­ der Netzkommunikationen ist dann auf puffergröße DIV 150 begrenzt (bei Z80, 8086: 3; bei M20: 10). Hinweis: Es können auch andere #ib#Baud#ie#raten (2400, 4800, 19200) an der Box eingestellt werden. c) Achten Sie bei der #ib#Verbindung#ie# von der Station zur #ib#Netzbox#ie# (bzw. zur Gegen­ station bei einem Zweistationennetz ohne Boxen) darauf, daß neben den Emp­ fangs- und Sendeleitungen auch die Leitungen RTS und CTS verdrahtet wer­ den, also ein 5-poliges Kabel verwendet wird [2]. Die #ib#Pin-Belegung#ie# der Boxen entspricht der eines Kabels zur Rechner-Rechner-Kopplung. Beispiel: Verbindung eines BICOS-Systems mit der Box: Stecker Stecker Pin Pin 2 <---------> 3 3 <---------> 2 4 <---------> 5 5 <---------> 4 7 <---------> 7 d) Richten Sie eine Task #on("bold")##ib#net#ie##off("bold")# unter #on("bold")#SYSUR#off("bold")# ein und legen Sie eine #ib#Datei#ie# #on("b")##ib#netz#ie##off("b")# an, die Ihre #ib#Netzkonfiguration#ie# enthält, oder ändern Sie die mitgelieferte Datei ent­ sprechend ab (siehe auch 1.5.).#goalpage("sperre")# Dem bisherigen Netz entspricht eine Datei #on("b")#netz#off("b")# mit folgendem Inhalt: definiere netz; routen (1,127,k); starte kanal (k,1,x); aktiviere netz. k: ihr netzkanal. x: IF yes ("#ib#Flußkontrolle#ie#") THEN 10 ELSE 3 FI. Laden Sie die Datei #on("b")##ib#net install#ie##off("b")# vom Archiv #on("b")#net#off("b")# und übersetzen Sie diese. Je nach­ dem, welche EUMEL-Version auf der Maschine installiert ist, werden die notwen­ digen Programmdateien insertiert. Es sind dies net report net hardware interface basic net net manager Das Netz wird dabei gestartet. Hinweis: Obwohl die Task #on("b")#net#off("b")# sich noch mit #on("bold")##ib#continue#ie##off ("bold")# an ein Terminal holen läßt, sollte man dies nur kurzzeitig tun, da der Netzverkehr solange blockiert ist. In der #ib#Datei#ie# #on("b")#netz#off("b")# sollte der #ib#Kanal#ie#, über den der meiste Verkehr erwar­ tet wird, zuerst gestartet werden. Für ihn wird die Task #on("b")##ib#net port#ie##off("b")# gene­ riert, für jeden weiteren Kanal wird eine Task #on("b")##ib#net port#ie# k#off("b")# (k=Kanal­ nummer) generiert. #page# 1.3. Benutzung des Netzes #goalpage("1.3")# Zur Benutzung des Netzes stehen folgende Operatoren und Prozeduren zur Verfü­ gung: TASK OP #ib#/#ie# (INT CONST station, TEXT CONST taskname) liefert die Task #on("bold")#taskname#off("bold")# von der #ib#Station#ie# #on("bold")#station#off("bold")#. #ib#Fehlerfälle#ie#: - #ib(4)#Task "...." gibt es nicht#ie(4)# Die angeforderte Task gibt es auf der #ib#Zielstation#ie# nicht. - #ib(4)##ib#Collectortask#ie# fehlt#ie(4)# die Task #on("b")##ib#net port#ie##off("b")# existiert nicht (siehe 6). Hinweis: #on("b")#net port#off("b")# wird bei jedem Start des Netzes neu generiert und beim Auftreten eines nicht vorhergesehenen #ib#Fehler#ie#s beendet. Die Feh­ lermeldung steht im #on("b")##ib#report#ie##off("b")# (siehe 4). - #ib(4)#Station x antwortet nicht#ie(4)# Eine nicht vorhandene oder abgeschaltete Station wurde angesprochen. Hinweis: Dieser #ib#Fehler#ie# wird angenommen, wenn eine Überwachungszeit von ca. 30 Sekunden verstrichen ist, ohne daß Station x die Taskidenti­ fikation angeliefert hat. - #ib(4)#Station x gibt es nicht#ie(4)# #ib#Station#ie# x steht nicht in den #ib#Routentabelle#ie#n. Diese Meldung kann auch erscheinen, wenn Station x erst kürzlich an das Netz angeschlossen wurde. Sie steht dann noch nicht in den Routentabellen (siehe auch 5.3.). Beispiel: list (5/"PUBLIC") Die Dateiliste von PUBLIC der Station 5 wird angefordert. TASK OP #ib#/#ie# (INT CONST station, TASK CONST task) liefert station / name (task) Beispiel: list (4/public) Fehlerfall: "......" #ib(4)#gibt es nicht#ie(4)# Auf der eigenen Station gibt es die Task #on("b")#task#off("b")# nicht. Der Taskname wird auf der eigenen Station bestimmt, wenn es dort die Task nicht gibt, führt dies zur obigen Fehlermeldung. Abhilfe: Statt list(4/public) das Kommando list (4/"PUBLIC") verwenden. INT PROC #ib#station#ie# (TASK CONST task) liefert die #ib#Stationsnummer#ie# der Task #on("bold")#task#off("bold")#. Beispiel: put (station (myself)) gibt die eigene Stationsnummer aus. PROC #ib#reserve#ie# (TEXT CONST archivename, TASK CONST archivetask) dient dazu, das Archiv auf der #ib#Station#ie# #on("bold")#station#off("bold")# anzumelden. Beispiel: reserve ("std", 4/"ARCHIVE"); #ib#list#ie# (4/"ARCHIVE") gibt das Inhaltsverzeichnis der Archivfloppy im Laufwerk der Station 4 aus. Hinweis: Vergessen Sie bei solchen #ib#Querarchivierungen#ie# nicht die Stationsangabe bei jedem einzelnen Archivkommando (z.B fetch ("xxx", #on("bold")#4/#off("bold")# "ARCHIVE")). Hinweis: Querarchivieren ist langsam. Verwenden Sie es nur, wenn Sie Floppy­ formate umsetzen wollen. PROC #ib#free global manager#ie# dient dazu, die eigene Task über das Netz ansprechbar zu machen. Jede andere Task im Netz kann dann die üblichen #ib#Manager#ie#aufrufe (#on("bold")##ib#save#ie##off ("bold")#, #on("bold")##ib#fetch#ie##off ("bold")#, usw.) an die eigene Task machen, sofern diese nicht an ein Terminal gekoppelt ist. Die Task wird (wie bei #on("bold")#break#off ("bold")#) abgekoppelt und meldet sich in Zukunft mit #on("bold")#mainte­ nance#off ("bold")# statt mit #on("bold")#gib kommando#off ("bold")#. Beispiel: An Station 4 ruft man in der Task "hugo" das Kommando #on("bold")#free global manager#off("bold")# auf. Anschließend kann man von jeder Station aus z.B. #on("bold")#list (4/"hugo")#off ("bold")# usw. auf­ rufen. TEXT PROC #ib#name#ie# (TASK CONST t) Diese (schon immer vorhandene) Prozedur wurde dahingehend erweitert, daß der Name einer auf einer anderen Station existierenden Task über Netz angefordert wird. Existiert die Task nicht, so wird #on("bold")##ib#niltext#ie##off ("bold")# geliefert. Hinweis: Die Prozedur #on("bold")##ib#exists#ie##off ("bold")# wurde nicht auf das Netz ausgedehnt, da sie in Situa­ tionen eingesetzt wird, wo es auf eine sehr schnelle Antwort ankommt. Daher liefert #on("bold")#exists#off ("bold")# für eine stationsfremde Task immer FALSE. Will man wissen, ob eine solche Task existiert, verwende man die Abfrage #on("bold")#IF name (task) <> "" THEN ... #off ("bold")#. #ib#Fehlerfall#ie#: - #ib(4)#Station x antwortet nicht#ie(4)# - #ib(4)##ib#Station#ie# x gibt es nicht#ie(4)# #page# 1.4. Informationsmöglichkeiten #goalpage("1.4")# In der Task #on("bold")#net#off("bold")# wird eine #ib#Datei#ie# #on("bold")##ib#report#ie##off("bold")# geführt, in der #ib#Fehlersituationen#ie# des Netzes verzeichnet werden. Diese Datei kann in jeder anderen Task auf derselben Station mit #on("bold")##ib#list#ie# (/"#ib#net#ie#")#off("bold")# angesehen werden. Eine Erklärung der wichtigsten Meldungen finden Sie im Anhang. In jeder Task kann durch das Kommando #on("bold")##ib#list#ie# (/"#ib#net port#ie#")#off("bold")# eine Übersicht über die momentan laufenden #ib#Netzübertragungen#ie# der eigenen #ib#Station#ie# erhalten werden (nur für den #ib#Kanal#ie#, an dem #on("b")##ib#net port#ie##off("b")# hängt). Entsprechendes gilt für die weiteren Netports der eigenen Station. Mit #on("bold")##ib#list#ie# (/"#ib#net list")#ie##off("bold")# erhält man die Informationen, die man mit #on("b")#list (/"net")#off("b")# und #on("b")##ib#list#ie##off("b")# auf alle Netports bekommt, sofern #on("b")##ib#listoption#ie##off("b")# (siehe S. #topage("listop")#) beim Generieren des Netzes aufgerufen wurde. Dieser Aufruf funktioniert auch bei fremden Stationen (z.B. #on("b")#list (5/"net list")#off("b")#). #page# 1.5. Eingriffsmöglichkeiten #goalpage("1.5")# - Jede Task kann #ib#Sende#ie(1,"ströme")#- und #ib#Empfangsströme#ie#, die bei #on("bold")#list (/"net port")#off("bold")# gemel­ det worden sind und die eigene Task betreffen, abbrechen. Hierzu ist das Kom­ mando #on("bold")##ib#erase#ie# ("x", /"#ib#net port#ie#")#off ("bold")# zu geben, wobei x die #ib#Stromnummer#ie# (aus dem #on("bold")#list#off ("bold")#) ist. Unberechtigte #ib#Löschversuche#ie# werden abgewiesen. Von privilegierten Tasks aus können jedoch mit #on("b")##ib#erase#ie##off("b")# beliebige Ströme abge­ brochen werden. - Durch das Kommando #on("bold")##ib#start#ie##off("bold")# kann von der Task #on("b")##ib#net#ie##off("b")# aus das Netz neu gestartet werden. Dies setzt eine gültige #ib#Datei#ie# #on("bold")#netz#off("bold")# voraus. Es wird ein #on("bold")##ib#run#ie##off("bold")# auf diese Datei gegeben. Das Kommando #on("b")##ib#start#ie##off("b")# ist nur noch aus Kompatibilitätsgründen zum alten Netz vorhanden. - Durch das Kommando #on("bold")##ib#routen aufbauen#ie##off("bold")# in der Task #on("b")##ib#net#ie##off("b")# werden die #ib#Routentabelle#ie#n neu aufgebaut. Dies kann notwendig werden, wenn eine neue #ib#Station#ie# ans Netz angeschlossen wurde (#ib#Fehlermeldung#ie# '#ib(4)#Station x gibt es nicht#ie(4)#'). #on("bold")#routen aufbauen#off ("bold")# muß zuvor auch an allen dazwischenliegenden #ib#Knotenstation#ie#en gegeben werden. #on("bold")#routen aufbauen#off ("bold")# erzeugt eine Task #on("b")##ib#router#ie##off("b")#, die sich an das Terminal koppelt (die Task #on("b")#net#off("b")# koppelt sich ab) und ein #ib#Protokoll#ie# ausgibt. Sind die #ib#Route#ie#n aufgebaut, beendet sich die Task #on("b")#router#off("b")# mit der Meldung #on("b")#fertig#off("b")#. Es werden nur Stationen bearbeitet, die nicht #ib#gesperrt#ie# (siehe S. #topage("sperre")#), und für die keine festen Routen vereinbart sind. Der Vorgang dauert ca. 5 Sek. pro nicht gesperrter Station und #ib#Netzkanal#ie#. Die #ib#Route#ie#n werden in einem #ib#Datenraum#ie# #on("b")##ib#port intern#ie##off("b")# hinterlegt. - Der Aufruf #on("bold")##ib#definiere netz#ie##off("bold")# leitet eine #ib#Netzdefinition#ie# in der #ib#Datei#ie# #on("bold")##ib#netz#ie##off("bold")# ein. Dabei werden alle augenblicklichen Netzkommunikationen gelöscht. Die Tasks #on("b")##ib#net port#ie# (k)#off("b")#, wobei #on("b")#k#off("b")# die #ib#Kanalnummer#ie# ist, und #on("b")##ib#net timer#ie##off("b")# werden gelöscht. Dieser Aufruf muß vor den Aufrufen von #on("bold")##ib#starte kanal#ie#, #ib#erlaube#ie#, #ib#sperre#ie#, #ib#routen#ie#, #ib#aktiviere netz#ie# und #ib#list option#ie##off("bold")# erfolgen. - PROC #ib#sperre#ie# (INT CONST a,z) bewirkt, daß die Stationen #on("bold")#a#off("bold")# bis #on("bold")#z#off("bold")# keine Manageraufrufe an Tasks dieser Station geben dürfen (Genauer gesagt werden sendecodes > 6 nicht weitergeleitet, son­ dern ein errornak mit dem Text "#ib(4)#kein Zugriff auf Station#ie(4)#" zurückgeschickt). Dieser Aufruf muß vor dem ersten #on("bold")##ib#starte kanal#ie##off("bold")# erfolgen. - PROC #ib#erlaube#ie# (INT CONST a,z) bewirkt, daß die Stationen #on("bold")#a#off("bold")# bis #on("bold")#z#off("bold")# Manageraufrufe an Tasks dieser Station geben dürfen. Dieser Aufruf muß vor dem ersten #on("bold")##ib#starte kanal#ie##off("bold")# erfolgen. Beispiel: Alle Stationen außer 8 und 10 sollen #ib#gesperrt#ie# sein: #ib#sperre#ie# (1,127); erlaube (8,8); erlaube (10,10) Hinweis: 127 ist z.Zt. die maximale #ib#Stationsnummer#ie(1," maximale")#. - PROC #ib#routen#ie# (INT CONST a,z,k) legt fest, daß die Stationen #on("bold")#a#off("bold")# bis #on("bold")#z#off("bold")# an #ib#Kanal#ie# #on("bold")#k#off("bold")# direkt angeschlossen sind. Sen­ dungen dieser Stationen werden nur bearbeitet, wenn sie über diesen Kanal her­ einkommen (siehe 1.7.). Fehlt für eine Station ein entsprechender Routenaufruf, so darf sie über einen beliebigen #ib#Netzkanal#ie# angeschlossen sein. Dies wird dann von #on("bold")##ib#routen aufbauen#ie##off("bold")# ermittelt. PROC routen (INT CONST a,z,k,zw) legt fest, daß die Stationen #on("bold")#a#off("bold")# bis #on("bold")#z#off("bold")# indirekt über die #ib#Knotenstation#ie# #on("bold")#zw#off("bold")# angeschlos­ sen sind, und #on("b")#zw#off("b")# am Kanal #on("bold")#k#off("bold")# hängt. - PROC #ib#starte kanal#ie# (INT CONST k,m,q) startet eine #ib#Netztask#ie# am #ib#Kanal#ie# #on("bold")#k#off("bold")# im Modus #on("bold")#m#off("bold")# [4]. Dabei wird mit #on("bold")#q#off("bold")# die Anzahl paralleler #ib#Empfangsströme#ie# festgelegt. Dadurch kann erreicht werden, daß der #ib#Empfangspuffer#ie# nicht überläuft, indem nicht mehr als #on("b")#q#off("b")# Ströme quittiert werden. Bei #ib#V.24#ie#-#ib#Schnittstelle#ie#n gebe man 3 (ohne #ib#Flußkontrolle#ie#) bzw. 10 (mit Flußkon­ trolle) an. - PROC #ib#aktiviere netz#ie# muß als Abschluß in der Datei #on("bold")##ib#netz#ie##off("bold")# aufgerufen werden. Dabei wird die Task vom Terminal abgekoppelt. Falls es bei #on("bold")##ib#definere netz#ie##off("bold")# den #ib#Datenraum#ie# #on("b")##ib#port intern#ie##off("b")#, der die #ib#Route#ie#n enthält, nicht gab, wird #on("bold")##ib#routen aufbauen#ie##off("bold")# aufgerufen. - PROC #ib#listoption#ie##goalpage("listop")# erzeugt eine Task #on("b")##ib#net list#ie##off("b")#, die bei #on("bold")#list#off("bold")# den #ib#Fehlermeldung#ie#sreport und den Zustand aller Netports liefert. Diese Task ist auch über Netz ansprechbar. In der Regel sollte man #on("b")#listoption#off("b")# in der Datei #on("b")#netz#off("b")# aufrufen, es sei denn, das System ist sehr klein. #page# 1.6. #ib#Fehlersuche#ie# im Netz #goalpage("1.6")# #ib#Fehler#ie# im Netz können sich verschiedenartig auswirken. Im folgenden wird auf einige Beispiele eingegangen: Beispiel: Auf #on("bold")#list (4/public)#off("bold")# erfolgt die Meldung '#ib(4)#Station#ie(4, " x antwortet nicht")# 4 antwortet nicht'. #ib#Fehler#ie#möglichkeiten: - #ib#Station#ie# 4 ist nicht eingeschaltet. Abhilfe: Station 4 einschalten. Kommando erneut geben. - #ib#Netztask#ie# an Station 4 ist nicht arbeitsfähig. Abhilfe: Kommando #on("bold")##ib#start#ie##off ("bold")# in der Task "net" auf Station 4. - Stationsnummern und Boxnummern stimmen nicht überein. Abhilfe: Mit #on("bold")#define station#off ("bold")# #ib#Stationsnummer#ie#n korrigieren (siehe 3.2). - #ib#Verbindung#ie# Rechner/Box am eigenen Rechner oder an Station 4 fehlt. Abhilfe: Verbindungen überprüfen. Durch Ansprechen einer dritten Station kann oft schnell geklärt werden, welche Rechner/Box-Verbindung defekt sein muß. - Verbindung der Boxen untereinander defekt. Abhilfe: Fehlende Verbindung, #ib#Masseschluß#ie# und #ib#Dreher#ie# (keine 1:1 Verbin­ dung) überprüfen und beheben. Hinweis: Liegt z.B. ein Masseschluß vor, so kann es durchaus sein, daß Boxen, die nicht in der Nähe des Masseschlusses stehen, noch miteinander arbeiten können. Man kann aus der Tatsache, daß zwei Boxen miteinander arbeiten können, also nicht schließen, daß man nicht nach diesem Fehler suchen muß. Beispiel: Auf #on("bold")#list (4/public)#off("bold")# erfolgt keine Reaktion. - Station 4 ist während dieser Sendung zusammengebrochen. Abhilfe: Station 4 wieder starten. Die Bearbeitung des #on("bold")##ib#list#ie##off ("bold")#-Kommandos wird automatisch wieder aufgenommen. - PUBLIC auf Station 4 ist nicht im Managerzustand. Abhilfe: PUBLIC in den Managerzustand versetzen. - #ib#Fehler#ie# in der #ib#Netzhardware#ie#. Überprüfen Sie, ob - die Boxen eingeschaltet sind, - die Bereitlampe blinkt (wenn nicht: #ib#RESET#ie# an der Box), - die #ib#V.24#ie#-Kabel richtig stecken, - die Boxen untereinander verbunden sind (1 zu 1 Verbindungen der 5 poli­ gen Diodenbuchsen). - Fehler bei der #ib#Netzinstallation#ie#. Überprüfen Sie, ob - alle Stationen an einem #ib#Strang#ie# gleiche oder kompatible Netzmodi einge­ stellt haben [4], - alle Stationen an einem #ib#Netzstrang#ie# auf die gleiche #ib#Nutzdatenlänge#ie# einge­ stellt sind, - bei der #ib#Kommunikation#ie# über #ib#Knoten#ie# alle Stationen die gleiche Nutzdaten­ länge bei indirekten Sendungen eingestellt haben, - die #ib#Route#ie#n auf allen beteiligten Stationen korrekt eingestellt sind. Beispiel: Auf #on("bold")#list (4/public)#off("bold")# erfolgt die Meldung '#ib(4)##ib#Collectortask#ie# fehlt#ie(4)#'. - Das Kommando #on("b")##ib#start#ie##off("b")# (bzw #on("b")##ib#aktiviere netz#ie##off("b")# in der #ib#Datei#ie# #on("b")#netz#off("b")#) wurde nicht gege­ ben. Somit existiert #on("b")##ib#net port#ie##off("b")# nicht. Abhilfe: Kommando #on("bold")#start#off ("bold")# in der Task #on("b")#net#off("b")# geben. - Die #ib#Netzsoftware#ie# ist auf einen nicht vorhergesehenen #ib#Fehler#ie# gelaufen. Dieser wird im #ib#Report#ie# vermerkt. #on("b")##ib#net port#ie##off("b")# wird dabei gelöscht. Abhilfe: Geben Sie in der Task #on("bold")#net#off("bold")# das Kommando #on("bold")#start#off("bold")#. Dadurch wird die Netzsoftware neu gestartet. Alle Netzkommunikationen dieser Station gehen verloren. Beispiel: Nach #on("bold")##ib#fetch#ie# ("hugo",4/public)#off("bold")# sind Teile der Datei "hugo" verfälscht. - Die #ib#V.24#ie#-#ib#Verbindung#ie# zur Box ist nicht in Ordnung. Abhilfe: Abstand zwischen Rechner und Box verkürzen; #ib#Baud#ie#rate ernie­ drigen; durch Wechseln der #ib#V.24#ie#-#ib#Schnittstelle#ie# feststellen, ob diese defekt ist. Hinweis: Die Verbindung zwischen den Boxen ist durch #ib#Prüfsummen#ie# abge­ sichert (Hardware). #page# 1.7. Sicherheit im Netz #goalpage("1.7")# Bei Benutzung eines Rechnernetzes tauchen neue #ib#Sicherheitsprobleme#ie# auf. Um sie verstehen und eingrenzen zu können, muß man sich mit dem #ib#Sicherheitskonzept#ie# des Betriebssystems EUMEL vertraut machen: Eine Task im EUMEL kann nur manipuliert werden, wenn man sie entweder an ein Terminal koppelt oder ihr Sendungen zustellt. Das Ankoppeln kann über #ib#Paßwort#ie# abgesichert werden. Nach dem Ankoppeln kann die Task außerdem selbst bestimmen, wie sie die dann möglichen Eingaben behan­ delt. So kann z.B. noch ein komplizierter Paßalgorithmus zu durchlaufen sein, bis man auf einer offenen Programmierumgebung landet. Sendungen können eine Task auch nur mit ihrem Einverständnis beeinflussen, da eine Sendung nur zugestellt wird, wenn die Task in der Prozedur #on("b")##ib#wait#ie##off("b")# steht. Insbe­ sondere kann die Task den Absender einer Sendung überprüfen und gewisse Opera­ tionen nur bei gewissen Absendern zulassen. So lehnt ein #on("b")##ib#global manager#ie##off("b")# z.B. alle Dateimanagerkommandos ab, die nicht von Nachkommen (z.B. Söhnen) der Task kommt. #on("b")##ib#free global manager#ie##off("b")# hingegen läßt Operationen wie #on("b")##ib#save#ie##off("b")# oder #on("b")##ib#erase#ie##off("b")# von beliebigen Tasks, auch von fremden #ib#Station#ie#en, zu. Will man nur bestimmte Fremd­ stationen zulassen, kann man z.B. folgendes Schema verwenden: PROC my #ib#manager#ie# (DATASPACE VAR ds, INT CONST code, phase, TASK CONST source): IF station (source) = station (myself) OR station (source) = 10 THEN free manager (ds, code, phase, source) ELSE errorstop ("kein Zugriff") FI END PROC my manager; global manager (PROC my manager) #page# Hier werden nur #on("b")#save#off("b")# usw. von Tasks der eigenen Station und der Station 10 zuge­ lassen. Der Rest erhält die #ib#Fehlermeldung#ie# "kein Zugriff". Dieses Verfahren gewährt nur dann Sicherheit, wenn es nicht möglich ist, daß eine beliebige Station sich als Station 10 ausgibt. Damit das Netz diese Sicherheit garantieren kann, müssen natürlich gewisse phy­ sische Voraussetzungen erfüllt sein. Wenn z.B. die Station 10 über eine #ib#V.24#ie# ange­ schlossen ist, aber jeder die Möglichkeit hat, an diese #ib#Schnittstelle#ie# seinen eigenen Rechner anzuschliessen, dann kann das Netz natürlich nicht erkennen, ob es mit der echten Station 10 verkehrt. Es muß also sichergestellt sein, daß an Kanälen für das Netz nicht manipuliert werden kann. Bei einem #ib#Strang#ie# (Anschluß über #ib#Netzbox#ie#en) heißt das für die Boxen, daß sie nur #ib#Telegramm#ie#e weitervermitteln, die die eingestellte #ib#Quellstationsnummer#ie# enthalten. Sonst könnte jemand, der an denselben Strang wie #ib#Station#ie# 10 angeschlossen ist, #ib#Telegramm#ie#e erzeugen, die so aussehen, als kämen sie von 10. Die #ib#Netzsoftware#ie# ihrerseits darf nur Telegramme auswerten, die über die richtige #ib#Route#ie# (#ib#Kanal#ie# und #ib#Knotenstation#ie#) einlaufen. Leider hat dies die unangenehme Konsequenz, daß man automatisches Aufbauen und Ändern von Routen verbieten muß, wodurch die Wartung der #ib#Netzkonfiguration#ie# erschwert wird. Diese Version der #ib#Netzsoftware#ie# bietet den folgenden Kompromiß an: Nur für sicher­ heitsrelevante #ib#Stationen#ie(1,", sicherheitsrelevante")# (im Beispiel Station 10) muß in der #ib#Datei#ie# #on("b")##ib#netz#ie##off("b")# die Route angegeben werden. Dies muß in allen Stationen geschehen, für die die Station sicherheitsrelevant ist, und in allen #ib#Knoten#ie# dazwischen. Für nicht sicherheitsrelevante Stationen werden #ib#Routeninformationen#ie# automatisch aufgebaut und geändert. Hinweis: Man wird oft ohne sicherheitsrelevante Stationen auskommen, indem man auf Ebenen oberhalb der Netzebene Paßwortkontrollen einführt. So ist es z.B. ja möglich, Dateien durch Paßworte zu schützen. Ein weiteres Beispiel ist ein #ib#Printerserver#ie#, der nur ausdruckt, wenn eine mitgegebene Abrechnungskennung stimmt. Dabei ist es sogar wünschenswert, daß die #ib#Station#ie# irrelevant ist, die den Druckauftrag gibt. #pagenr ("%",21)##setcount (1)##block##pageblock##count per page# #headeven# #center#EUMEL Netzbeschreibung #center#____________________________________________________________ #end# #headodd# #center#Teil 2 : Arbeitsweise der Netzsoftware #center#____________________________________________________________ #end# #bottomeven# #center#____________________________________________________________ Netz - % #right#GMD #end# #bottomodd# #center#____________________________________________________________ GMD #right#Netz - % #end# #page# Teil 2: Arbeitsweise der Netzsoftware #goalpage("2")# 2.1. Die Netztask #goalpage("2.1")# In diesem Kapitel wird beschrieben, wie eine #ib#Netztask#ie# in das System eingebettet ist und welche Aufgaben sie hat. Unter Einhaltung dieser Konzepte kann die ausgeliefer­ te Netzsoftware so geändert werden, daß sie beliebige andere #ib#Netzhardware#ie# unter­ stützt. Die Netzsoftware ist so gegliedert, daß i.allg. nur eine hardwareabhängige Komponente ausgetauscht werden muß (siehe Teil 3). Die Kommunikation zwischen Tasks im EUMEL-Betriebssystem basiert auf einem #ib#Rendezvouskonzept#ie#: Die #ib#Zieltask#ie# einer Sendung muß empfangsbereit sein, wenn die #ib#Quelltask#ie# sendet. Die Kommunikationsprozeduren auf der niedrigsten Ebene sind #on("bold")##ib#send#ie##off ("bold")# (Senden) und #on("bold")##ib#wait#ie##off ("bold")# (Warten auf Empfang). Bei der Kommunikation werden ein Integer #on("bold")#code#off ("bold")# und ein #ib#Datenraum#ie# #on("bold")#dr#off ("bold")# übergeben. #on("bold")#code#off ("bold")# muß >= 0 sein, da negative Codes systemintern ver­ wandt werden. Ist die empfangende Task an einen #ib#Kanal#ie# gekoppelt (#on("bold")##ib#continue#ie##off ("bold")#), so führt eine Zeicheneingabe auf diesem Kanal dazu, daß eine Sendung mit dem Code -4 ankommt. Die Eingabedaten müssen mit den üblichen #ib#Eingabeprozeduren#ie# (#on("bold")##ib#inchar#ie##off ("bold")# usw.) abgeholt werden. Der übermittelte #ib#Datenraum#ie# und die Absendertask sind dabei ohne Bedeutung und dürfen nicht interpretiert werden. Die Prozedur #on("bold")#send#off ("bold")# hat einen #ib#Rückmeldeparameter#ie#, der besagt, ob die Sendung übermittelt wurde. Gibt es die Zieltask nicht oder steht sie nicht im #on("bold")#wait#off ("bold")#, so kann die Sendung nicht übermittelt werden. Ein Entwicklungskriterium für das EUMEL-Netz war es, möglichst wenig Unterstüt­ zung von der virtuellen EUMEL-Maschine (#ib#EUMEL0#ie#) zu fordern, damit weitgehend in ELAN programmiert werden kann. Dadurch ist es möglich, eine (privilegierte) Task mit der Netzabwicklung zu betrauen. #page# Zunächst wird auf die #ib#EUMEL0#ie#-Unterstützung eingegangen: a) Es gibt die Prozedur #on("bold")##ib#define collector#ie##off ("bold")#, mit der die für das Netz verantwortliche Task der EUMEL0-Maschine bekannt gemacht wird. Diese Task wird im fol­ genden #ib#Collector#ie# genannt. b) Es gibt die Prozedur #on("bold")##ib#define station#ie##off ("bold")#, die für den Rechner eine #ib#Stationsnummer#ie# einstellt. Anhand dieser Nummer werden die Rechner eines Netzes unterschie­ den. Das Einstellen bewirkt, daß für alle Tasks die Stationsnummer in ihre #ib#Task-Id#ie# eingetragen wird (Task-Id's sind die Werte, die der Typ TASK anneh­ men kann). c) Der Befehl #on("bold")##ib#station#ie# (task)#off ("bold")# liefert die Stationsnummer der #on("bold")#task#off ("bold")#. So liefert z.B. #on("bold")##ib#station#ie# (myself)#off ("bold")# die #ib#Stationsnummer#ie# des eigenen Rechners. d) Eine Sendung, deren #ib#Zieltask#ie# auf einem anderen Rechner liegt (also station (ziel) <> station (myself)), wird auf die #ib#Collectortask#ie# geleitet. e) Es gibt eine Prozedur #on("bold")##ib#collected destination#ie##off ("bold")#, die es dem Collector erlaubt, die eigentliche Zieltask einer auf ihn geleiteten Sendung zu erfahren. f) Es gibt eine Variante der Prozedur #on("bold")##ib#send#ie##off ("bold")#, die es dem Collector gestattet, der #ib#Zieltask#ie# eine andere Task als Absender vorzutäuschen. g) Es gibt eine spezielle #ib#Task-Id#ie# #on("bold")##ib#collector#ie##off ("bold")#, durch die der augenblicklich eingestell­ te #ib#Collector#ie# erreicht wird. Diese wird als Zieltask beim Aufruf der Vermittlungs­ dienste angegeben (siehe S. #topage("collector")#). Eine Sendung an #on("bold")#collector#off ("bold")# wird von EUMEL0 an den derzeitig eingestellten Collector geschickt. Ein Collector kann also auf drei Wegen von den übrigen Tasks desselben Rechners Sendungen erhalten: 1. Über ein normales #on("b")#send#off("b")# (z.B. bei #on("bold")#list (/"net port")#off ("bold")#, wenn #on("b")#net port#off("b")# der derzeitige #ib#Collector#ie# ist), 2. über ein #on("b")#send#off("b")# an die Task #on("bold")#collector#off ("bold")# (s.u.) und 3. als umgeleitete Sendung (z.B. bei #on("bold")#list#off ("bold")# an eine Task auf einem anderen Rechner). Der Collector kann diese Fälle anhand von #on("bold")#collected destination#off ("bold")# unterscheiden. Die Punkte d) bis f) dienen dazu, den Collector für über Netz kommunizierende Tasks unsichtbar zu machen: Der Collector taucht nicht als Ziel oder #ib#Quelle#ie# von Sendungen auf. Das ist notwendig, damit normale Tasks sich nicht darum kümmern müssen, ob eine Sendung übers Netz geht oder im eigenen Rechner bleibt. Wenn ein #ib#Datenraum#ie# an einen anderen Rechner geschickt wird, muß der gesamte Inhalt (z. Zt. max. 1 MB) übertragen werden. Dies macht bei der üblichen Netzhard­ ware eine Zerlegung in #ib#Paket#ie#e nötig [5]. Bei der Zerlegung eines Datenraumes in Pakete (#ib#Telegramm#ie#e) gelten folgende Einschränkungen: - Ein Paket kann maximal eine #ib#Datenraumseite#ie# als #ib#Nutzdaten#ie# enthalten. - Die #ib#Nutzdatenlänge#ie# ist für einen #ib#Übertragungsweg#ie# konstant. - Alle Stationen eines #ib#Netzstrang#ie#s senden mit gleicher Nutzdatenlänge (#on("b")##ib#data length#ie##off("b")#). - Bei indirekter #ib#Kommunikation#ie(1,"indirekte")# (über #ib#Knoten#ie#) muß die Nutzdatenlänge für in­ direkte Verbindungen (#on("b")##ib#data length via node#ie##off("b")#) auf allen beteiligten Stationen gleich eingestellt sein. Für Netze stehen spezielle Blockbefehle zur Verfügung: g) #ib#blockin#ie# / #ib#blockout#ie# (dr,seite,512+abstand,anzahl,rest) Es werden maximal #on("bold")#anzahl#off ("bold")# Bytes transferiert. In #on("bold")#rest#off ("bold")# wird zurückgemeldet, wie viele Bytes nicht bearbeitet wurden (z.B. weil der #ib#Kanal#ie# nichts anliefert). Bear­ beitet werden die Bytes #on("bold")#seite#off ("bold")# * 512 + #on("bold")#abstand#off ("bold")# bis maximal #on("bold")#seite#off ("bold")# * 512 + #on("bold")#abstand#off ("bold")# + #on("bold")#anzahl#off ("bold")# - 1 Der Kanal, an den die Task gekoppelt ist, wird dabei über #ib#Stream-IO#ie# (d.h. #on("bold")##ib#incharety#ie##off ("bold")#, bei #on("bold")#blockin#off ("bold")# bzw. #on("bold")#out#off ("bold")# bei #on("bold")#blockout#off ("bold")#) angesprochen. Hinweis: Die Anforderung darf nicht über #ib#Seitengrenze#ie# gehen, d.h. #on("bold")#abstand#off ("bold")# + #on("bold")#anzahl#off ("bold")# <= 512 muß erfüllt sein. Eine Netzsendung läuft wie folgt ab: Die Task q auf Rechner rq mache ein #on("bold")##ib#send#ie##off ("bold")# an die Task z auf Rechner rz. 1. Die Prozedur #on("bold")#send#off ("bold")# ist ein #ib#EUMEL0#ie#-Befehl. Die EUMEL0-Ebene erkennt, daß die Sendung an die #ib#Station#ie# rz geht, da die #ib#Stationsnummer#ie# in der #ib#Task-Id#ie# enthalten ist. Daher wird die Sendung zum #ib#Collector#ie# umgeleitet, den EUMEL0 wegen der Einstellung durch #on("bold")##ib#define collector#ie##off ("bold")# kennt, umgeleitet. 2. Die Task Collector empfängt über #on("bold")##ib#wait#ie##off ("bold")# den #ib#Datenraum#ie#, den #ib#Sendecode#ie# und die Absendertask q. Die #ib#Zieltask#ie# z erfährt sie durch #on("bold")##ib#collected destination#ie##off ("bold")#. 3. Der Collector nimmt Kontakt mit dem Collector des Rechners #on("b")#rz#off("b")# auf, dessen Sta­ tionsnummer ja #on("bold")##ib#station#ie#(z)#off ("bold")# ist, und übermittelt diesem Sendecode, #ib#Quelltask#ie# (q), eigentliche Zieltask (z) und den #ib#Datenraum#ie#. Da die Collectoren in ELAN geschrie­ ben sind, können sie an beliebige #ib#Netzhardware#ie# und #ib#Protokoll#ie#e angepaßt werden. 4. Der #ib#Collector#ie# auf Rechner #on("b")#rz#off("b")# verwendet das spezielle #on("bold")#send#off ("bold")#, um der Zieltask die Sendung zuzustellen. Dadurch erscheint nicht der Collector, sondern die Task #on("b")#q#off("b")# als Absender der Sendung. Zur Abwicklung der #ib#Vermittlungsebene#ie# (siehe S. #topage("vermittlung")#) muß der Collector noch spe­ zielle Funktionen beherrschen. Diese sind der #on("b")##ib#/#ie#-Operator#off("b")# (Taskname in #ib#Task-Id#ie# wandeln) und die #on("b")##ib#name#ie##off("b")#-Prozedur (Task-Id in Namen wandeln). Der #on("b")#/#off("b")#-Operator macht eine Sendung an den #on("bold")##ib#collector#ie##off ("bold")#, wobei im #ib#Datenraum#ie# der Name der Task steht und der #ib#Sendecode#ie# gleich der Stationsnummer ist (siehe [6] ). Der #ib#Collector#ie# setzt sich mit dem Collector dieser Station in Verbindung, damit dieser die Task-Id ermittelt und zurückschickt. Der eigene Collector schickt dann dem #on("b")#/#off("b")#-Oper­ ator als Antwort einen Datenraum, der die #ib#Task-Id#ie# enthält. Umgekehrt läuft #on("bold")##ib#name#ie##off ("bold")# ab: Wenn die Task-Id von einer fremden Station ist, schickt #on("bold")#name#off ("bold")# eine Sendung an den #on("bold")##ib#collector#ie##off ("bold")#, wobei im Datenraum die Task-Id steht und Sendecode = 256 ist. Der Collector entnimmt die #ib#Stationsnummer#ie# der Task aus der Task-Id und läßt sich vom entsprechenden Collector den Tasknamen geben. Dieser wird der #on("bold")#name#off ("bold")#-Prozedur im Antwortdatenraum übergeben. Netztasks bauen sich #ib#Routentabellen#ie# auf (#ib#Datei#ie#name #on("b")##ib#port intern#ie##off("b")#). Aufgrund dieser Tabellen weiß jede #ib#Netztask#ie#, über welchen #ib#Kanal#ie# und welche #ib#Nachbarstation#ie# eine #ib#Zielstation#ie# erreichbar ist. Wenn der #ib#Collector#ie# einen Sendeauftrag erhält, prüft er, ob die Zielstation über seinen Kanal erreichbar ist. Wenn nicht, leitet er Parameter und #ib#Datenraum#ie# der Sendung an die geeignete Netztask weiter. #page# 2.2. Ebenen #goalpage("2.2")# In diesem Kapitel werden die #ib#Protokollebenen#ie# für das Netz beschrieben, wie sie die ausgelieferte Netzsoftware benutzt und erwartet. Bei anderer Netzhardware als Daten­ boxen müssen die Ebenen a) bis c) ausgetauscht werden [4]. Unter Einhaltung der im vorigen Kapitel beschriebenen Randbedingungen können auch die höheren Ebenen geändert werden. a) Physikalische Ebene - #ib#Station#ie# <--> Box #ib#V.24#ie#-#ib#Schnittstelle#ie# mit #ib#RTS/CTS#ie#-Handshake. Vollduplex. - Box <--> Box #ib#RS422#ie# über 2 verdrillte Leitungspaare (Takt und Daten). b) Verbindungsebene - Station <--> Box Asynchron 8 Bit Even Parity 2400/4800/9600/19200 #ib#Baud#ie# einstellbar über Lötbrücken) - Box <--> Box #ib#SDLC#ie# 400 KBaud #page# c) #ib#Netzebene#ie# #goalpage("quelle")# - Station <--> Box #ib#Telegrammformat#ie#: #ib#STX#ie#, , , <#ib#quelle#ie#>, <(n-4) byte> ist #ib#Längenangabe#ie# ( 8 <= n <= 160) , sind #ib#Stationsnummer#ie#n. Diese müssen an den jeweiligen Boxen eingestellt sein. Box --> Station: Ein #ib#Telegramm#ie# kommt nur bei der #ib#Station#ie# an, bei deren Box die Nummer eingestellt ist. Dadurch ist ein Mithören fremder #ib#Übertragung#ie# nicht möglich (Datenschutz). Zwischen Telegrammen können #ib#Fehlermeldung#ie#en der Box (Klartext) übermittelt werden (z.B. 'skipped x', wenn ein #ib#STX#ie# von der Box erwartet wurde, aber 'x' von der Station ankommt). Station --> Box: Ein Telegramm wird nur abgeschickt, wenn <#ib#quelle#ie#> mit der eingestellten Nummer übereinstimmt (Datenschutz: Man kann nicht vorschwindeln, eine beliebige Station zu sein, es sei denn, man hat physischen Zugriff zur Box und stellt dort die Stationsnummer um). - Box <--> Box #ib#Telegrammformat#ie#: FRAME, , <#ib#quelle#ie#>, , Eine #ib#Längenangabe#ie# ist nicht nötig, da #ib#SDLC#ie# eine Rekonstruktion der Länge erlaubt. Telegramme mit falschen #ib#CRC-Code#ie# werden vernichtet. Auf höheren Ebenen muß dies durch #ib#Zeitüberwachung#ie# erkannt und behandelt werden. #page# d) Transportebene Diese Ebene wickelt das Rendezvous zwischen einer Task, die #on("bold")##ib#send#ie##off ("bold")# macht, und einer Task, die im #on("bold")##ib#wait#ie##off ("bold")# steht, ab [1]. Der im #on("bold")#send#off ("bold")# angegebene #ib#Datenraum#ie# wird als Folge von #ib#Seiten#ie# (im EUMEL- Sinne: Pagingeinheit und Allokiereinheit) übermittelt, wobei jede Seite ggf. noch in n Byte große Stücke zerlegt wird. Es werden nur echt allokierte Seiten übermit­ telt. Um nicht jedes #ib#Telegramm#ie# voll qualifizieren zu müssen, wird zunächst eine Art virtuelle #ib#Verbindung#ie# durch ein #ib#OPEN#ie#-Telegramm eröffnet. Danach folgen variabel viele #ib#DATA#ie#-Telegramme. Beide Sorten werden durch #ib#QUIT#ie#-Tele­ gramme quittiert, um folgende Funktionen zu ermöglichen: #ib#Flußkontrolle#ie# (z.B. Zielrechner langsam), Wiederaufsetzen (verlorene Telegramme), Abbruch (z.B. weil Zieltask inzwischen beendet). Ein #ib#CLOSE#ie#-Telegramm ist nicht nötig, da das letzte DATA-Telegramm als solches erkannt werden kann (siehe unten). #page# - #ib#OPEN#ie#-Telegramm #clear pos# 0 1 2 3 4 5 6 7 8 9. Byte +------+------+------+------+-------------+-------------+-------------------+ I STX I 24 I Ziel IQuelleI Endziel I Endquelle I Strom I +------+------+------+------+-------------+-------------+-------------------+ 10 11 12 13 14 15 16 17 +-------------+-------------+---------------------------+ I Sequenz I Seite I Quelltask I +-------------+-------------+---------------------------+ 18 19 20 21 22 23 +---------------------------+-------------+ I Zieltask I Code I +---------------------------+-------------+ <#ib#ziel#ie#>, <#ib#quelle#ie#> siehe S. #topage("quelle")# <#ib#endziel#ie#> Eigentliche #ib#Zielstation#ie#. Ist = , so ist das #ib#Telegramm#ie# angekommen. Andernfalls muß die Station den #ib#Nachbarn#ie# zum Erreichen des als neues einsetzen und das Telegramm an diesen Nachbarn weiterleiten. <#ib#endquelle#ie#> Eigentliche #ib#Absenderstation#ie#. ist dagegen immer die Nummer der sendenden #ib#Nachbarstation#ie#. <#ib#strom#ie#> Die #ib#Stromnummer#ie# identifiziert die virtuelle #ib#Verbindung#ie#. Sie muß in den #ib#QUIT#ie#-Telegrammen angegeben werden. <#ib#sequenz#ie#> -1 (Kennzeichen für OPEN) <#ib#seite#ie#> Nummer der ersten echt allokierten #ib#Seite#ie# des #ib#Datenraum#ie#s (=-1, falls Nilspace) <#ib#quelltask#ie#> #ib#Task-Id#ie# der sendenden Task <#ib#zieltask#ie#> Task-Id der empfangenden Task Wert des im #on("bold")##ib#send#ie##off ("bold")# angegebenen Codes #page# - #ib#DATA#ie#-Telegramm 0 1 2 3 4 5 6 7 8 9. Byte +------+------+------+------+-------------+-------------+-------------------+ I STX I LängeI Ziel IQuelleI Endziel I Endquelle I Strom I +------+------+------+------+-------------+-------------+-------------------+ 10 11 12 13 14 +-------------+-------------+-----------------------------------------------+ I Sequenz I Seite I n Byte Daten (Länge = 14 + n) I +-------------+-------------+-----------------------------------------------+ <#ib#laenge#ie#> Gesamtlänge des Telegramms. #on("b")#laenge#off("b")# = #on("b")##ib#nutzlaenge#ie##off("b")# + 14. Für #on("b")#nutzlaenge#off("b")# sind nur die Werte 64,128,256 und 512 zugelassen (siehe 1). #on("b")#laenge#off("b")# wird codiert dargestellt (siehe Teil 3). <#ib#sequenz#ie#> wird von Telegramm zu Telegramm hochgezählt. Sie dient der Überwachung bzgl. verlorengegangener Telegramme bzw. durch #ib#Zeitüberwachung#ie# verdoppelter Telegramme. <#ib#seite#ie#> Nummer der x-ten echt allokierten Seite des #ib#Datenraum#ie#s (x = (( DIV anzahl pakete pro seite) + 2) #ib#Nutzinformation#ie#. Diese gehört zur #ib#Adresse#ie# a des Daten­ raums. a = N ( DIV anzahl pakete pro seite + 1) * 512 + ( MOD anzahl pakete pro seite) * n wobei N (x) die Nummer der x-ten Seite und n die #ib#Nutzdatenlänge#ie# ist. Aus den Formeln ergibt sich, daß diese Nummer schon in einem vorhergehenden DATA/OPEN-Telegramm über­ mittelt wurde (im Feld ). - #ib#QUIT#ie#-Telegramm 0 1 2 3 4 5 6 7 8 9. Byte +------+------+------+------+-------------+-------------+-------------------+ I STX I 12 I Ziel IQuelleI Endziel I Endquelle I Strom I +------+------+------+------+-------------+-------------+-------------------+ 10 11 +-------------+ I Quit I +-------------+ <#ib#strom#ie#> muß die #ib#Stromnummer#ie# sein, die in dem #ib#OPEN#ie#/#ib#DATA#ie#­ Telegramm stand, das quittiert wird. 0 : ok. Nächstes Telegramm schicken. -1: #ib#Übertragung#ie# neu starten (mit #ib#OPEN#ie#), weil die Emp­ fangsstation das OPEN nicht erhalten hat. -2: Übertragung ca. 20 Telegramme zurücksetzen. -3: Übertragung abbrechen. -4: #ib#Quittung#ie# für letztes Telegramm einer Sendung. e) #ib#Vermittlungsebene#ie##goalpage("vermittlung")# #goalpage("collector")# Diese Ebene ist dafür zuständig, Namen von Tasks auf anderen Stationen in #ib#Task-Id#ie#'s (Werte des Typs TASK) zu wandeln und umgekehrt. Hierzu wird im entsprechenden #ib#OPEN#ie#-Telegramm der Code -6 (bzw. -7) als ein­ getragen. Die #ib#Netzempfangstask#ie# erkennt diese #ib#Codes#ie# und wickelt die Aufgaben selbst ab, so daß es dabei nicht nötig ist, irgendeine Task-Id der #ib#Zielstation#ie# zu kennen. Dieses Verfahren ist möglich, weil im #on("bold")##ib#send#ie##off ("bold")# nur positive Codes erlaubt sind. #page# f) #ib#Höhere Ebenen#ie# Höhere Ebenen sind nicht mehr netzspezifisch. Sie basieren alle auf dem Send/ Wait-Konzept des EUMEL. So gibt es z.B. den #on("bold")##ib#global manager#ie##off ("bold")#, der Aufbewah­ rung und Zugriff von #ib#Datei#ie#en in einer Task regelt. Dabei darf diese Task (bei der Variante #on("bold")##ib#free global manager#ie##off ("bold")#) auf einer beliebigen #ib#Station#ie# im Netz liegen. Wegen des #ib#Rendezvous-Konzept#ie#s können beliebige Sicherheitsstrategien benutzt werden (z.B.: keine Dateien an Station 11 ausliefern). Von großem Wert ist z.B., daß man ohne weiteres das Archiv (Floppylaufwerk) einer anderen Station anmelden und benutzen kann, wodurch eine einfache Konvertierung von Floppyformaten möglich ist. Dies ist möglich, weil auch die Archiv-Task der Stationen sich an das Globalmanagerprotokoll halten. Bemerkungen #ib#Fehlerbehandlung#ie# besteht bis Ebene c) darin, fehlerhafte #ib#Telegramm#ie#e einfach zu entfernen. Die Ebene d) überwacht den Netzverkehr sowieso über #ib#Timeout#ie#s, die eine Wiederholung eines Telegrammes bewirken, wenn die #ib#Quittung#ie# ausbleibt. Da bei der sendenden #ib#Station#ie# der ganze #ib#Datenraum#ie# zur Verfügung steht, ist eine #ib#Fenstertechnik#ie# (wie bei #ib#HDLC#ie#) nicht nötig. Es kann zu jedem Zeitpunkt um beliebig viele Telegramme zurückgesetzt werden. Da im EUMEL eine #ib#Textdatei#ie# ein #ib#Datenraum#ie# mit sehr komplexer Struktur ist (wegen der Insert/Delete-Möglichkeiten, ohne den Rest der #ib#Datei#ie# zu verschieben), ist es ein hoher Aufwand, von einem fremden Betriebssytem aus eine Textdatei in das EUMEL-Netz zu senden. Für solche Zwecke muß noch eine einfachere Dateistruktur definiert und entsprechende Dateikonverter erstellt werden. #page# 2.3. Stand der Netzsoftware #goalpage("2.3")# Das EUMEL-System wickelt die Prozedur #on("bold")##ib#send#ie##off("bold")# über das Netz ab, wenn die Sta­ tionsnummer der #ib#Zieltask#ie# ungleich der eigenen #ib#Stationsnummer#ie# ist. Umgekehrt kann man der von der Prozedur #on("bold")##ib#wait#ie##off("bold")# gelieferten Absendertask die #ib#Absenderstation#ie# entneh­ men (siehe Prozedur #on("bold")##ib#station#ie##off("bold")# in Teil 1). Anders als bei einem #on("bold")##ib#send#ie##off("bold")# innerhalb einer Station meldet ein #on("bold")#send#off("bold")# an eine Task einer fremden Station immer 0 zurück (Task gibt es und Task war im wait), obwohl dies nicht der Fall sein muß. Ist die Sendung vollständig zur Zielstation übertragen, so versucht der dortige #ib#Collector#ie# diese hundertmal im Sekundenabstand zuzustellen. Bleibt das erfolglos, wird die Sendung vernichtet. #pagenr ("%", 33)##setcount (1)##block##pageblock##count per page# #headeven# #center#EUMEL Netzbeschreibung #center#____________________________________________________________ #end# #headodd# #center#Teil 3 : Netz Hardware Interface #center#____________________________________________________________ #end# #bottomeven# #center#____________________________________________________________ Netz - % #right#GMD #end# #bottomodd# #center#____________________________________________________________ GMD #right#Netz - % #end# #page# Teil 3: Netz-Hardware-Interface #goalpage("3")# 3.1. Einführung #goalpage("3.1")# In diesem Teil der Netzbeschreibung wird die #ib#Schnittstelle#ie# beschrieben, über die #ib#Netzhardware#ie# (also #ib#Datenbox#ie#en, #ib#Netzbox#ie#en oder Netzkarten) an die EUMEL-Netz­ Software angepaßt werden kann. Dieser Teil der Beschreibung ist also nur für Netz­ implementatoren wichtig. Das EUMEL-Netz wurde dazu konzipiert, zwei oder mehr EUMEL-Rechner über #ib#V.24#ie#-Leitungen oder Datenboxen miteinander zu vernetzen. Dem heutigen Stand der Technik entsprechend, werden auf dem Markt eine Reihe von Möglichkeiten ange­ boten, um PC's zu vernetzen. Diese Netze unterscheiden sich auch dadurch, daß unterschiedliche Medien zur Datenübertragung benutzt werden. Das #ib#EUMEL- Datenboxen-Netz#ie# benutzt Telefonkabel, #ib#Ethernet#ie# beispielsweise Koax-Kabel. Auch Lichtleiter werden zur Datenübertragung benutzt. Entsprechend gibt es eine ganze Menge Hardware (#ib#Treiber#ie#, Netzzugangsgeräte, Datenboxen, Anschlußkarten), die die Kopplung zwischen einem #ib#I/O-Kanal#ie# eines Rechners und dem Übertragungsmedium (Kabel) übernimmt. Das Netz-Hardware-Interface soll als #ib#Schnittstelle#ie# zwischen der Netz­Software und dem Treiber dienen. Damit wird es möglich, mehrere EUMEL- Rechner über verschiedene (Teil-) Netze (in dieser Beschreibung Stränge genannt) und unterschiedliche #ib#Netzhardware#ie# (Treiber) miteinander zu verbinden. Für den EUMEL-Benutzer soll dabei kein Unterschied in der Benutzung des EUMEL-Netzes feststellbar sein. #page# Neben unterschliedlichen Übertragungsmedien und Treibern gibt es weitere Unter­ schiede zwischen Netzen: - in der Netztopologie (Bus-, Ring- oder Sternnetze), - in den Netzzugangsverfahren (Token passing, time slice token, slotting oder CSMA/CD), - in der #ib#Übertragungsgeschwindigkeit#ie#, - im Aufbau der einzelnen #ib#Pakete#ie(1,", Aufbau der")# (#ib#Netztelegramm#ie#e). Alles, was mit den ersten drei Punkten zusammenhängt, wird von den Netzzugangs­ geräten behandelt. Der Paketaufbau aber muß zumeist im Rechner geschehen und kann in den seltens­ ten Fällen ganz vom Treiber übernommen werden. Ebenso kann der Treiber aus den empfangenen Paketen nicht immer die Teile herausfiltern, die von der EUMEL- #ib#Netzsoftware#ie# gebraucht werden. Diese Aufgaben übernimmt das #ib#Netz-Hardware- Interface#ie#. Das Netz-Hardware-Interface stellt die #ib#Verbindung#ie# zwischen EUMEL- #ib#Netzsoftware#ie# und den verschiedenen Netzhardwarearten dar. Ähnlich wie bei den Drucker- und Terminal-Anpassungen wurde ein hardwareabhängiger Teil aus der Netzsoftware abgetrennt und in einem eigenen #ib#Paket#ie# zusammengefaßt. Beim Start des Netzes wird durch Angabe des entsprechenden #ib#Netzmodus#ie# für den jeweiligen #ib#Kanal#ie# die entsprechende Anpassung für den benutzten Treiber ausgewählt. Wenn andere, neue Treiber angepaßt werden sollen, so müssen lediglich in dem Paket #on("b")##ib#net hardware interface#ie##off("b")# die entsprechenden Prozeduren hinzugefügt und die #ib#Sprungleisten#ie# (#ib#SELECT#ie#-Statements) erweitert werden. Durch das #ib#Knotenkonzept#ie# in der #ib#Netzsoftware#ie# ist es möglich, über einen #ib#Knoten­ rechner#ie# Teilnetze (Stränge), die mit unterschiedlicher #ib#Netzhardware#ie# arbeiten, mitein­ ander zu verbinden. Es sind dann beispielsweise Verbindungen zwischen Rechnern, die über #ib#Ethernet#ie# vernetzt sind, und Rechnern auf dem EUMEL-Datenboxen-Netz möglich. Es ist auch möglich, mit einem Rechner Zugang zu einem Netz zu erhalten, für das spezielle #ib#Netzhardware#ie# erforderlich ist (Datenboxen, Ethernet-Anschluß). Man kann den Rechner über eine Rechner-Rechner-Kopplung (#ib#V.24#ie#) mit einem Rechner verbinden, der bereits ans Netz angeschlossen ist, und so (allerdings auf Kosten der Leistung des #ib#Knotenrechner#ie#s) Netzhardware einsparen. #page# 3.2. Arbeitsweise des Netz-Hardware-Interfaces #goalpage("3.2")# Grob vereinfacht kann man sich die Arbeitsweise der #ib#EUMEL-Netz-Software#ie# so vor­ stellen: reset box; REP IF zeichen da THEN lies telegramm ein ELIF telegramm auszugeben THEN gib telegramm aus FI PER . (Es ist nur der Teil der Software beschrieben, der die Kanalbehandlung betrifft). Das Zusammenspiel zwischen EUMEL-Netz und Netz-Hardware-Interface ge­ schieht auf folgende Weise: #on("b")#reset box;#off("b")# REP IF zeichen da THEN #on("b")#next packet start#off("b")#; lies telegramm ein ELIF telegramm auszugeben THEN gib telegramm aus FI PER. gib telegramm aus: #on("b")#transmit header#off("b")#; gib eumelnetztelegramm aus; #on("b")#transmit trailer #off("b")#. Die fett gedruckten Programmteile werden im Netz-Hardware-Interface realisiert, die anderen Teile stecken in den darüberliegenden Teilen der EUMEL-Netz-Software. #page# Beim Senden eines #ib#Telegramm#ie#s wird von der #ib#Netzsoftware#ie# zuerst der #ib#Vorspann#ie# in einem #ib#Datenraum#ie# an das Hardware-Interface übergeben (#on("b")##ib#transmit header#ie##off("b")#). Im Hard­ ware-Interface können aus dem Vorspann die entsprechenden Informationen (Tele­ grammlänge, #ib#Zielstation#ie# usw.) entnommen werden. Dann wird von der Netzsoftware das Telegramm (inklusive Vorspann) per #on("b")##ib#blockout#ie##off("b")# übergeben. Danach wird #on("b")##ib#transmit trailer#ie##off("b")# aufgerufen, um dem Hardware-Interface das Ende des Telegramms zu mel­ den. Beim Empfang ruft die Netzsoftware zuerst die #ib#I/O Control#ie# #ib#Telegrammfreigabe#ie# auf [7]. Danach wird das erste #ib#Zeichen#ie# des Telegramms angefordert (#on("b")##ib#next packet start#ie##off("b")#). Falls ein #ib#STX#ie# geliefert wurde, wird das Telegramm per #on("b")##ib#blockin#ie##off("b")# eingelesen. Falls #ib#Niltext#ie# zurückgeliefert wird, wird von der Netzsoftware #ib#Timeout#ie# angenommen. Alle anderen Zeichen werden so interpretiert, als ob Störungen aufgetreten wären. Die Netzsoftware übernimmt die #ib#Fehlerbehandlung#ie#. Dazu wird u. U. ein Leerlesen des Puffers vom Hardware-Interface verlangt (#on("b")##ib#flush buffers#ie##off("b")#). Bei der Einstellung der #ib#Nutzdatenlänge#ie# (#on("b")##ib#data length#ie##off("b")#) ist zu beachten, daß a) alle #ib#Station#ie#en, die an einem #ib#Strang#ie# hängen, auf die gleiche Nutzdatenlänge eingestellt sein müssen. b) Wenn mehrere Stränge über #ib#Knoten#ie# miteinander verbunden sind, muß die Nutz­ länge für Sendungen über Knoten (#on("b")##ib#data length via node#ie##off("b")#) auf allen Stationen des gesamten Netzes gleich eingestellt sein. Die Zusammenfassung oder Aufteilung von #ib#Telegramm#ie#en in Knoten ist nicht möglich. c) Als mögliche Nutzdatenlänge sind folgende Werte erlaubt: 64, 128, 256 und 512 Byte. Größere Nutzdatenlängen sind zur Zeit nicht möglich. d) Je größer die #ib#Nutzdatenlänge#ie# ist, desto geringer ist der Overhead an #ib#Zeichen#ie#, die auf den Rechnern verarbeitet werden müssen. Allerdings muß der Rechner leistungsfähig genug sein, die ankommenden Blöcke schnell genung zu verarbei­ ten, und die Netztreiber müssen entsprechend große Puffer haben. Alle implementierten Netzanpassungen sollen in einem Netz-Hardware-Interface zusammengefaßt werden. Dies ist notwendig, um über #ib#Knotenrechner#ie# Netzstränge verbinden zu können, die mit unterschiedlicher #ib#Netzhardware#ie# arbeiten. So können zum Beispiel ein #ib#Strang#ie#, der mit Datenboxen aufgebaut ist, und ein #ib#Ethernet#ie#-#ib#Strang#ie# über einen Knotenrechner miteinander verkoppelt werden. #page# Aus diesem Grund wurden #on("b")#Netzmodi#off("b")# eingeführt. Man kann dadurch, daß die Netz­ modi, genau wie die #ib#Kanal#ie#angaben, in der #ib#Datei#ie# #on("b")##ib#netz#ie##off("b")# niedergelegt sind, ohne Aus­ tausch einer Softwarekomponente die Netzhardware wechseln. Es gibt auch die Möglichkeit, durch verschiedene Netzmodi unterschiedliche Treiber an ein und das­ selbe Netz anzuschließen. Beispielsweise gibt es für einige Rechnertypen Steckkarten, mit denen der Rechner an das Ethernet angeschlossen werden kann. Man kann, wenn diese Karten angepaßt sind, den #ib#Ethernet#ie#-Zugang über verschiedene Netz­ anschlußkarten realisieren. Das Netz-Hardware-Interface muß folgende Aufgaben übernehmen: Bei der Ausgabe an den Treiber: - Generieren und Ausgeben des #ib#Paket#ie#headers, - Umsetzen von logischen Stationsadressen (#ib#Stationsnummer#ie#n) in phy­ sische #ib#Adresse#ie#n, - Ausgeben der Daten (EUMEL-Netz-#ib#Telegramm#ie#e), - Generieren und Ausgeben des Trailers und evtl. Auffüllen des Pakets mit #ib#Füllzeichen#ie#, falls auf dem Netz eine Mindestlänge für Pakete gefordert wird. Bei der Eingabe vom Treiber: - Weglesen von #ib#Füllzeichen#ie#, - Prüfen der #ib#Adresse#ie#n, - Weglesen von #ib#Paket#ie#teilen, die in der EUMEL-Netz-Software nicht gebraucht werden. Weiterhin können Funktionen wie - Reset des Treibers, - Prüfung, ob Stationsadresse und #ib#Adresse#ie# im Treiber übereinstimmen, - Statistik und Service durch das Netz-Hardware-Interface übernommen werden. Dazu wird ein Satz von Prozeduren über die #ib#DEFINES#ie#-#ib#Schnittstelle#ie# des Netz- Hardware-Interfaces zur Verfügung gestellt. Wenn neue Treiber oder Netzarten implementiert werden sollen, so muß an diesem Interface nichts geändert werden. Die herausgereichten Prozeduren realisieren #ib#Sprungleisten#ie# (#ib#SELECT#ie#-Statements), über die durch Erweiterung (#ib#CASE#ie#) die Prozeduren erreicht werden können, die den ent­ sprechenden #ib#Netzmodus#ie# realisieren. Außerdem werden Informationsprozeduren für die darüberliegenden Programmteile zur Verfügung gestellt. #page# 3.3. Netztreiber #goalpage("3.3")# Unter #ib#Netztreiber#ie#n versteht man die Einheiten, die den Anschluß des Rechners an ein Netz realisieren. Das können #ib#Netzbox#ie#en sein, die mit dem Rechner über eine #ib#V.24#ie#- Leitung verbunden sind, aber auch Anschlußkarten, die direkt auf den Datenbus des Rechners gehen. Falls die #ib#Schnittstelle#ie# der Treiber-Hardware eine andere als die serielle #ib#V.24#ie# ist, muß in der Regel eine Anpassung für die Hardware im #ib#SHard#ie# vorge­ nommen werden. Falls der Treiber über eine serielle #ib#V.24#ie#-#ib#Schnittstelle#ie# mit dem Rechner verbunden ist, wie das auch bei der direkten Kopplung oder dem Datenboxennetz der Fall ist, wird die hohe #ib#Übertragungsgeschwindigkeit#ie# auf dem eigentlichen Netz durch die relativ geringe Übertragungsgeschwindigkeit auf der #ib#V.24#ie#-#ib#Schnittstelle#ie# zwischen Rechner und Treiber (Box) gebremst. Über andere Schnittstellen im Rechner, wenn sie mit #ib#Stream I/O#ie# [7] betrieben werden, kann man dies vermeiden. Diese Schnitt­ stellen müssen vom SHard bedient werden. Wenn in den Rechner integrierte Netztreiber (Netzanschlußkarten) benutzt werden sollen, so muß in der Regel die Behandlung dieser Netzanschlußkarte im SHard durchgeführt werden. Um effizient implementieren zu können, sollte darauf geachtet werden, daß möglichst wenig zusätzliche #ib#Zeichen#ie# von der #ib#Netzsoftware#ie# bzw. dem Netz-Hardware-Inter­ face bearbeitet werden müssen. Das Auffüllen von Paketen auf eine Mindestlänge sollte möglichst vom Treiber gemacht werden, ebenso wie das Weglesen dieser Zeichen. Um einen sicheren und effektiven Netzbetrieb zu garantieren, sollten die Treiber folgende Eigenschaften haben: - Die #ib#Stationsadresse#ie# ist im Treiber festgelegt, sie soll nicht ohne weiteres verändert werden können (Datenschutz). - Der Treiber reicht nur #ib#Paket#ie#e mit richtiger #ib#Zieladresse#ie#, keine #ib#Broad- oder Multicasts#ie# an die Netzsoftware weiter. - Der Treiber sendet nur #ib#Paket#ie#e mit richtiger #ib#Absenderadresse#ie# bzw. setzt die Absenderadresse selbst ein. - Die am Treiber eingestellte #ib#Adresse#ie# kann abgefragt werden, oder es wird, wenn ein Paket mit falscher #ib#Absenderadresse#ie# vom Rechner kommt, eine #ib#Fehlermeldung#ie# an den Rechner gegeben. Die Fehlermeldung muß durch das Netz-Hardware-Interface in den #on("b")##ib#report#ie##off("b")# eingetragen werden. - Falls Pakete mit #ib#Füllzeichen#ie# aufgefüllt werden müssen, sollten die Füll­ zeichen durch den Treiber generiert und beim Empfang wieder entfernt werden. - Falls mehrere Betriebsmodi möglich sind, so sollten sie softwaremäßig einstellbar sein. - Falls die Treiber über eine serielle #ib#Schnittstelle#ie# an den Rechner angeschlos­ sen werden, so sollte der Treiber konfigurierbar sein. In jedem Fall sollte die serielle Schnittstelle mit #ib#Flußkontrolle#ie# (#ib#RTS/CTS#ie#) implementiert werden. Zusätzlich ist ein Transparent-Modus als #ib#Netzmodus#ie# von Vorteil: - Der Modus (transparent) kann zu Testzwecken benutzt werden. Beispiels­ weise um auch mit Rechnern kommunizieren zu können, die über Netz erreichbar sind, aber kein EUMEL-Netz-#ib#Protokoll#ie# benutzen. Modus n: transparent. Ausgabeseitig: Das #ib#Paket#ie# wird unverändert ausgegeben. #ib#Adresse#ie#n usw. müssen schon im Paket vor­ handen sein. Es wird nicht mit #ib#Füllzeichen#ie# aufgefüllt. Eingabeseitig: Das Paket wird unverändert an die Netzsoft­ ware weitergegeben. #page# 3.4. Prozedurschnittstelle des EUMEL-Netzes #goalpage("3.4")# Im PACKET #on("b")##ib#net hardware interface#ie##off("b")# sind folgende Prozeduren untergebracht: BOOL PROC #ib#blockin#ie# (DATASPACE VAR ds, INT CONST seite, abstand, länge): Versucht, #on("b")#länge#off("b")# Zeichen vom #ib#Kanal#ie# einzulesen. Liefert TRUE, wenn alle Zeichen eingelesen wurden, FALSE, wenn innerhalb einer bestimmten Zeit nicht alle #on("b")#länge#off("b")# Zeichen eingelesen werden konnten (z.B. weil der Kanal nicht mehr Zeichen anliefert). Die eingelesenen Zeichen werden im #ib#Datenraum#ie# #on("b")#ds#off("b")# in #ib#Seite#ie# #on("b")#seite#off("b")# ab #on("b")#abstand#off("b")# bis #on("b")#abstand#off("b")# + #on("b")#länge#off("b")# - 1 abge­ legt. #ib#Fehlerfall#ie#: #on("b")#blockin Abbruch#off("b")# Es werden weniger #ib#Zeichen#ie# innerhalb einer festgelegten Zeitspanne über den Kanal angeliefert, als mit #on("b")#länge#off("b")# gefordert. Passiert z.B., wenn die Kabel während einer Netzübertragung unter­ brochen werden, oder wenn die Gegenstelle abgeschaltet wird. Das #ib#Telegramm#ie# wird vernichtet, die Prozedur liefert FALSE, es wird eine entsprechende Meldung im #on("b")##ib#report#ie##off("b")# erzeugt. PROC #ib#blockout#ie# (DATASPACE CONST ds, INT CONST seite, abstand, länge): Der Inhalt von Seite #on("b")#seite#off("b")# des #ib#Datenraum#ie#s #on("b")#ds#off("b")# wird von #on("b")#abstand#off("b")# bis #on("b")#abstand#off("b")# + #on("b")#länge#off("b")# - 1 ausgegeben. #page# PROC #ib#set net mode#ie# (INT CONST mode): Es wird der #ib#Netzmodus#ie# #on("b")#mode#off("b")# eingestellt. Im Netz-Hardware-Interface müssen alle Initialisierungen und Einstellungen vorgenommen werden, damit die mit #on("b")#mode#off("b")# geforderte #ib#Netzhardware#ie# unterstützt wird. Diese Prozedur wird bei jedem #on("b")##ib#start#ie##off("b")#-Kommando in der Netztask aufgerufen. Kann als Initialisierungsprozedur für dieses PACKET verwendet werden. Übergibt den in der #ib#Datei#ie# #on("b")##ib#netz#ie##off("b")# für diesen #ib#Kanal#ie# verlangten Netzmodus an das Netz-Hardware-Interface. Nach Aufruf dieser Prozedur müssen die wertliefernden Prozeduren #on("b")##ib#net mode#ie#, #ib#mode text#ie#, #ib#data length#ie##off("b")# und #on("b")##ib#data length via node#ie##off("b")# korrekt initialisiert sein. Der Aufruf von #on("b")##ib#net addess#ie##off("b")# muß die korrekten (physikalischen) #ib#Adresse#ie# der #ib#Station#ie#en liefern. TEXT PROC net address (INT CONST stationsnummer): Liefert die (Hardware-) Netz-#ib#Adresse#ie#, über die der EUMEL-Rechner mit der Stationsnummer #on("b")##ib#stationsnummer#ie##off("b")# beim aktuell für diesen Kanal eingestellten #ib#Netzmodus#ie# erreichbar ist. Auf diese #ib#Adresse#ie# muß der Treiber des entsprechenden Rechners eingestellt sein. Auch die eigene Netz- Adresse muß mit der im Treiber eingestellten #ib#Adresse#ie# übereinstimmen. Insbesondere müssen alle Stationen, die auf dem Netz arbeiten, dieselbe Netz-Adresse für eine #ib#Stationsnummer#ie# errechnen. TEXT PROC #ib#mode text#ie#: Liefert den Text (Namen) des eingestellten #ib#Netzmodus#ie#. Wird in #on("b")##ib#net manager#ie##off("b")# benutzt, um den Netzmodus im #on("b")##ib#report#ie##off("b")# anzugeben. TEXT PROC mode text (INT CONST mode): Liefert den Text (Namen) zu dem #ib#Netzmodus#ie# #on("b")#mode#off("b")#. INT PROC #ib#data length#ie# (INT CONST mode): Liefert die #ib#Nutzdatenlänge#ie# (#ib#Länge#ie# der Nettodaten des Eumel- Telegramms) im Netz. Wird von #on("b")##ib#basic net#ie##off("b")# beim Neustart aufgerufen. Muß in einem Netz auf allen Stationen eines #ib#Strang#ie#s denselben Wert liefern. Erlaubte Werte: 64, 128, 256 und 512. #page# INT CONST #ib#data length via node#ie#: Liefert die #ib#Nutzdatenlänge#ie# für Sendungen, die über #ib#Knoten#ie# gehen. Muß auf allen Stationen des Netzes gleich sein. Erlaubte Werte: 64, 128, 256 und 512. PROC #ib#decode packet length#ie# (INT VAR value): Die #ib#Länge#ie# eines Netztelegramms ist im #ib#Telegramm#ie# codiert enthalten. Mit dieser Prozedur wird aus dem Telegrammkopf die Telegrammlänge ermit­ telt: Falls beim Aufruf dieser Prozedur in #on("b")#value#off("b")# der Wert des Feldes #on("b")#head#off("b")# aus der Struktur #on("b")#vorspann#off("b")#, die in #on("b")#ds#off("b")# per #on("b")##ib#transmit header#ie##off("b")# übergeben wurde, enthalten ist, so wird in #on("b")#value#off("b")# die Länge des EUMEL-Netztelegramms zurückgeliefert. PROC #ib#flush buffers#ie#: Liest den Eingabepuffer des #ib#Netzkanal#ie#s leer. Die eingelesenen Zeichen werden vernichtet. Wird nach Erkennen von #ib#Übertragungsfehler#ie#n aufge­ rufen. TEXT PROC #ib#next packet start#ie#: Liefert genau ein #ib#Zeichen#ie# (in der Regel das erste Zeichen des EUMEL- Netztelegramms). Wird von der Netzsoftware immer dann aufgerufen, wenn ein neues #ib#Paket#ie# erwartet wird. Bedeutung des gelieferten Zeichens für die #ib#Netzsoftware#ie#: #ib#STX#ie#: korrekter #ib#Telegrammanfang#ie# (ist das erste Zeichen des EUMEL-Netztelegramms). Der Rest des EUMEL-Netztele­ gramms steht im Eingabepuffer, ist also über #ib#blockin#ie# lesbar. Vorher wurden nur Zeichen eingelesen, die zum verwendeten #ib#Netzprotokoll#ie# gehören (z.B. #ib#Ethernet#ie#-#ib#Adresse#ie#n, #ib#Füllzeichen#ie# usw.). niltext: kein neues Telegramm da jedes andere Zeichen: Fehler. Entweder wurden Störzeichen eingelesen oder es gingen Zeichen verloren. #ib#Fehlerbehandlung#ie# erfolgt durch die Netzsoftware. #page# PROC #ib#transmit header#ie# (DATASPACE CONST ds): Wird vor Ausgabe eines jeden #ib#Telegramm#ie#s aufgerufen. In dem #ib#Datenraum#ie# #on("b")#ds#off("b")# wird von der EUMEL-Netz-Software der #on("b")##ib#Vorspann#ie##off("b")# übergeben. Über den jeweiligs eingestellten #ib#Netzmodus#ie# kann für jede implementierte Netz­ art über eine #ib#Sprungleiste#ie# (#ib#SELECT#ie#) die Prozedur angesprungen werden, die den #ib#Header#ie# für den eingestellten Netzmodus erstellt und ausgibt. Struktur des von der EUMEL-Netz-Software benutzten Headers: BOUND STRUCT (INT head, zwischenziel, zielrechner, quellrechner, strom, sequenz, seitennummer ) VAR vorspann. Aus dem Inhalt des Feldes #on("b")#head#off("b")# kann mittels #on("b")##ib#decode packet length#ie##off("b")# die Gesamtlänge des EUMEL-Netztelegramms errechnet werden. PROC #ib#transmit trailer#ie#: Wird nach Ausgabe eines jeden Telegramms aufgerufen. Evtl. notwendige Nachspänne können ausgegeben werden. Die notwenigen Informationen wurden in #on("b")##ib#transmit header#ie##off("b")# übergeben und müssen aufbewahrt werden, falls sie im Trailer mitgeliefert werden müssen. Kann auch dazu benutzt werden, den unter diesem Packet liegenden Schichten (#ib#SHard#ie# oder Hard­ ware) das Ende des Telegramms mitzuteilen. Notwendige #ib#Füllzeichen#ie# können in dieser Prozedur in das #ib#Paket#ie# eingebaut werden. PROC #ib#reset box#ie# (INT CONST net mode): Kann zur Initialisierung der #ib#Netzhardware#ie# benutzt werden. Wird von #on("b")##ib#basic net#ie##off("b")# beim jedem Neustart aufgerufen. INT PROC #ib#max mode#ie#: Liefert den Wert des größten erlaubten (implementierten) #ib#Netzmodus#ie#. INT PROC #ib#net mode#ie#: Liefert den eingestellten Netzmodus. #page# #pagenr ("%", 45)##setcount (1)##block##pageblock##count per page# #headeven# #center#EUMEL Netzbeschreibung #center#____________________________________________________________ #end# #headodd# #center#Anhang #center#____________________________________________________________ #end# #bottomeven# #center#____________________________________________________________ Netz - % #right#GMD #end# #bottomodd# #center#____________________________________________________________ GMD #right#Netz - % #end# #clear pos##lpos(1.0)##rpos(9.5)##goalpage("A")# Anhang: Netz-Meldungen#goalpage("A.1")# Mit dem Kommando #on("b")##ib#list#ie# (/"net list")#off("b")# (siehe Teil 1) erhalten Sie eine temporäre #ib#Datei#ie# auf den Bildschirm. Diese Datei könnte ungefähr so aussehen: ____________________________________________________________________________ N e u e r S t a r t 12:44 Stationsnummer : 38 01.06.87 12:55 net port 8:20:Nicht zustellbar. . Empfänger: "net dok". Quelle 34 Taskindex: 255 02.06.87 06:30 net port 8:1:wdh data. sqnr 7. Absender: "net dok". Ziel 34 Taskindex: 255 02.06.87 07:03 net port:20:Sequenzfehler: soll 13 ist 14. Empfänger: "POST". Quelle 33 Taskindex: 02.06.87 07:03 net port:blockin abbruch 02.06.87 07:03 net port:20:Sequenzreset von 13 auf 10. Empfänger: "POST". Quelle 33 Taskindex: 29 02.06.87 07:36 net port:Call gelöscht."net dok". Strom 1 02.06.87 07:43 net port 8:verbotene Route: 34 02.06.87 07:50 net port:Header inkorret eingelesen: %0 %2 02.06.87 07:50 net port:buffers flushed 02.06.87 07:52 net port:Weiterleitung nicht möglich für 34 02.06.87 07:53 net port 8:skipped0 6 G O 1 0 . 0 %13 %10 2 8 0 6 0 6 G O 1 0 . 0 %13 %10 2 8 0 02.06.87 08:14 net port 8:skipped%13 %10 S p e c . R e c e i v e E r r o r C 2 02.06.87 08:21 net port:20:Reopen. Empfänger: "WÜFE". Quelle 40 Taskindex: 22 02.06.87 09:25 net port:1:etwas rueckgespult. Absender: "-". Ziel 33 Taskindex: 51 02.06.87 09:25 net port:1:wdh data. sqnr 20. Absender: "-". Ziel 33 Taskindex: 51 02.06.87 09:54 net port:20:Blocknummer falsch, neu: 192, alt : -1. Empfänger: "WÜFE". Quelle 44 02.06.87 10:12 net port:Daten ohne Eroeffnung von 40 Sequenznr 7 02.06.87 10:23 net port:Header inkorret eingelesen: O X 0 3 8 B O X 0 4 4 E U %2 02.06.87 10:23 net port:buffers flushed 02.06.87 10:49 net port:1:wdh open. Absender: "-". Ziel 33 Taskindex: 255 02.06.87 10:49 net port:2:wdh open. Absender: "net dok". Ziel 33 Taskindex: 255 02.06.87 10:53 net port:1:Sequenzfehler: soll 2 ist 3. Empfänger: "net dok". Quelle 33 Taskindex: 02.06.87 10:54 net port:1:Sequenzreset von 8 auf 5. Empfänger: "net dok". Quelle 33 Taskindex: 11 02.06.87 10:56 net port:2:etwas rueckgespult. Absender: "-". Ziel 33 Taskindex: 51 bekannte Stationen: 1(8,1) 2(8,2) 3(8,3) 4(8,4) 5(8,5) 6(8,6) 7(8,7) 8(8,8) 9(8,9) 10(8,10) 11(8,11) 12(8,12) 13(8,13) 14(8,14) 15(8,15) 16(8,16) 17(8,17) 18(8,18) 19(8,19) 20(8,20) 21(8,21) 22(8,22) 23(8,23) 24(8,24) 25(8,25) 26(8,26) 27(8,27) 28(8,28) 29(8,29) 30(8,30) 31(8,31) 32(8,32) 33(9,33) 34(8,34) 35(9,35) 36(9,36) 37(9,37) 39(9,39) 40(9,40) 41(9,41) 42(9,42) 43(9,43) 44(9,44) 45(9,45) 46(9,46) 47(9,47) 48(9,48) -------- Eingestellte Netzmodi: net port 8 haengt an Kanal 8, Modus: (1) EUMEL-Netz 64 Byte net port haengt an Kanal 9, MODUS: (11) ETHERNET via V.24 512 Byte Nutzdatenlänge 512 Byte Nutzdatenlänge bei indirekter Verbindung: 64 Byte ******** Netz-Software vom 23.05.87 Rechner 38 um 11:11 net port 8 Strom 1 (sqnr7/8) sendet an 34 . Absender ist "net dok". net port Strom 1 (sqnr45/45) empfaengt von 40 . Empfaenger ist "PUBLIC". ____________________________________________________________________________ #page# Die Datei enthält den aktuellen #on("b")##ib#report#ie##off("b")#, in dem #ib#Fehlermeldung#ie#en der einzelnen Tasks gesammelt werden. Außerdem wird der Zustand aller Verbindungen (Ströme) von allen #on("b")##ib#net port#ie##off("b")#'s angezeigt. Im #on("b")#report#off("b")#-Teil kann man drei Informationsblöcke unterscheiden: a) den Block mit den Fehlermeldungen. Es werden jeweils Datum, Uhrzeit, der Name des betroffenen #on("b")#net port#off("b")# und, wenn notwendig, die #ib#Stromnummer#ie# angegeben. Darauf folgt der Meldungstext, der auch Informationen über Absender und Emp­ fänger enthalten kann. : [<#ib#Stromnummer#ie#> : ] b) den Block mit der Liste der bekannten #ib#Station#ie#en. Ein Eintrag in dieser Liste ent­ hält jeweils die Stationsnummer der bekannten Station und in Klammern dahin­ ter die Nummer des Kanals auf diesem Rechner, über den die Station erreichbar ist und die Nummer der nächsten #ib#Zwischenstation#ie#. (,) Bei direkt erreichbaren Stationen ist Zwischenstation gleich #ib#Zielstation#ie#. Hinweis: Auch #ib#gesperrt#ie#e Stationen erscheinen in dieser Liste. c) den Block, der Auskunft über die Netzinstallation gibt. Es werden für jeden Netz­ kanal die eingestellten Netzmodi angegeben. Des weiteren werden die beiden Größen #on("b")##ib#data length#ie##off("b")# (#ib#Nutzdatenlänge#ie#) und #on("b")##ib#data length via node#ie##off("b")# (Nutzdatenlänge bei indirekter Verbindung) angegeben. Zusätzlich erscheinen noch die #ib#Netzversion#ie# und die genaue Uhrzeit, zu der dieser #on("b")#report#off("b")# erstellt wurde. #page# Für jeden #on("b")##ib#net port#ie##off("b")# wird pro aktivem #ib#Strom#ie# folgende Meldung generiert: Strom (sqnr/) #ib#Stromnummer#ie# #ib#Sequenznummer#ie# des gerade bearbeiteten #ib#Telegramm#ie#s Bei #ib#Sendeströme#ie#n die Nummer der letzten zu übertragenden #ib#Sequenz#ie#, bei Empfangsströmen in der Regel die Nummer der letzten Sequenz der gerade übertragenen #ib#Datenraumseite#ie#. <#ib#Zustand#ie#> Hier wird die Aktion (senden, empfangen usw.) und die Partner­ station angegeben. <#ib#Partner#ie#> Der Name der Task mit der kommuniziert wird. Die Meldungen, die in der #ib#Datei#ie# #on("b")##ib#report#ie##off("b")# protokolliert werden, kann man in verschiedene Gruppen einordnen. Die eine Gruppe beschreibt Störungen durch #ib#Zeichenverluste#ie# oder ­verfälschungen, eine andere Gruppe protokolliert besondere Situationen, bei­ spielsweise den Abbruch von #ib#Übertragung#ie#en, und die letzte Gruppe befasst sich mit #ib#Fehlermeldung#ie#en, die ein Eingreifen von aussen notwendig machen. Je nachdem, ob die Station, auf der die Meldung protokolliert wird, Empfänger oder Absender ist, wird bei den Meldungen #ib#Stationsnummer#ie# und Taskname des Kommunikationspartners mit angegeben. Zur ersten Gruppe gehören: #ib(4)##ib#skipped#ie##ie(4)# 'skipped' oder skipped mit einem Zusatztext erscheint, wenn Zei­ chen eingelesen wurden, die zu keinem gültigen #ib#Telegramm#ie# ge­ hören. Dies kann passieren, wenn auf der Leitung zwischen Rechner und Box #ib#Zeichen#ie# verlorengegangen sind. Auch nach dem Einschalten oder nach einem Reset auf Box oder Rechner kann diese Meldung kommen. Mindestens ein Teil der eingelesenen Daten wird mit ausgegeben, wobei Steuerzeichen durch % und den Code des Steuerzeichens dargestellt werden. Die einzelnen Zeichen werden durch ein Blank voneinander getrennt. #page# #ib(4)##ib#Sequenzfehler#ie##ie(4)# Die #ib#Sequenznummer#ie# ist zu groß, es fehlen also Telegramme. Die Gegenstation wird aufgefordert, ab einem früheren Telegramm zu wiederholen. #ib(4)#wdh data#ie(4)# Das letzte Telegramm wird erneut geschickt. Passiert, wenn die #ib#Quittung#ie# für dieses Telegramm nach einer bestimmten Zeit nicht angekommen ist. #ib(4)##ib#Sequenzreset#ie##ie(4)# Die #ib#Sequenznummer#ie# des empfangenen Telegramms ist kleiner als die Sequenznummer des vorher empfangenen Telegramms. Die Verbindung wird bei der zuletzt empfangenen Sequenznummer fortgesetzt. #ib(4)#Blocknummer falsch#ie(4)# Die #ib#Seitennummer#ie# in dem #ib#Telegramm#ie# ist falsch. #ib(4)#etwas rueckgespult#ie(4)# Auf Anforderung der Gegenseite werden die letzten drei #ib#Datenraum­ seite#ie#n erneut übertragen. #ib(4)#Daten ohne Eroeffnung#ie(4)# Es werden Telegramme mit einer #ib#Stromnummer#ie# empfangen, zu der vorher kein OPEN-Telegramm empfangen wurde. In diesem Fall wird die Gegenstation aufgefordert, die #ib#Übertragung#ie# von vorn zu beginnen. Diese Meldung kann auch kommen, wenn das Netz neu gestartet wurde. #ib(4)#wdh open#ie(4)# Die Übertragung wird mit dem #ib#OPEN#ie#-Telegramm von vorn begon­ nen. Passiert auf Aufforderung durch die Gegenstation oder wenn das erste OPEN-Telegramm nicht quittiert wurde. #ib(4)##ib#buffers flushed#ie##ie(4)# Alle bereits eingelesenen, aber noch nicht bearbeiteten Zeichen wurden gelöscht (der #ib#Eingabepuffer#ie# wurde komplett gelöscht). Verur­ sacht durch schwere Störungen (#ib#Zeichenverluste#ie# oder -verfäl­ schungen). #page# #ib(4)#blockin abbruch#ie(4)# Es wurden nicht alle Zeichen eines Telegramms innerhalb eines bestimmten Zeitraums angeliefert. #ib(4)#Header inkorrekt eingelesen#ie(4)# Es wurde ein Fehler in dem Teil des Netztelegramms gefunden, der nicht zum EUMEL-Netz gehört. #ib(4)#Strom falsch in Quittung#ie(4)#: In der #ib#Quittung#ie# wurde eine nicht zulässige #ib#Stromnummer#ie# festge­ stellt. Zulässig sind Stromnummern zwischen 1 und 20. #ib(4)#Neustart#ie(4)# Die Gegenstation hat die #ib#Verbindung#ie# von vorne begonnen. #ib(4)#Falsche Seitennummer#ie(4)# Die #ib#Seitennummer#ie# in dem empfangenen Telegramm ist falsch. Einige Telegramme werden wiederholt. #ib(4)#Absteigende Seitennummern#ie(4)# Die Seitennummer in dem empfangenen Telegramm ist kleiner als die Seitennummer im vorigen #ib#Telegramm#ie#. Es müssen einige Tele­ gramme wiederholt werden. Die folgenden Meldungen beschreiben Situationen, die nicht durch #ib#Zeichenverluste#ie# entstehen, mit denen die #ib#Netzsoftware#ie# selbst fertig wird: #ib(4)#Sendung von Gegenstelle gelöscht#ie(4)# Die Verbindung wurde von der Gegenstelle abgebrochen. #ib(4)#Empfangseintrag freigegeben#ie(4)# Die Verbindung wurde von der empfangenden #ib#Station#ie# gelöscht, weil seit dem Eintreffen des letzten Telegramms zuviel Zeit vergangen ist (#ib#Timeout#ie#). #ib(4)#Irrläufer#ie(4)# Eine #ib#Intertaskkommunikation#ie# innerhalb der eigenen Station wurde fälschlicherweise über den #on("b")##ib#Collector#ie##off("b")# abgewickelt. Dieser Vorgang wird abgebrochen. #page# #ib(4)#Call-Löschung vorgemerkt#ie(4)# Sobald der Call abgewickelt ist, wird diese Verbindung gelöscht. Beispielsweise führt ein vom Benutzer abgebrochenes #on("b")##ib#name#ie##off("b")# zu dieser Meldung. #ib(4)#Call gelöscht#ie(4)# Die #ib#Verbindung#ie# wurde auf Anforderung durch den Auftraggeber gelöscht. #ib(4)#Quellrechner#ie(4)# Als #ib#Quellrechnernummer#ie# wurde ein unzulässiger Wert festgestellt. Zulässig sind Zahlen zwischen 1 und 127. #ib(4)#Nicht zustellbar#ie(4)# Innerhalb eines bestimmten Zeitraums war die #ib#Zieltask#ie# nicht emp­ fangsbereit. Die Verbindung wird abgebrochen. Bei diesen Meldungen sollten die #ib#Routenanweisungen#ie# überprüft werden: #ib(4)#Verbotene Route bei Quittung#ie(4)# Die #ib#Quittung#ie# kommt auf einer nicht erlaubten #ib#Route#ie# an. Dies kann bei #ib#Vermaschung#ie# passieren, oder aber, wenn eine Station versucht, sich für eine andere Station auszugeben. #ib(4)#Verbotene Route#ie(4)# Die danach bezeichnete Station versucht, auf einer anderen Route mit diesem Rechner zu kommunizieren, als auf der Route, die für diesen Rechner in der Datei #on("b")##ib#netz#ie##off("b")# festgelegt wurde. Abhilfe: #ib#Routentabellen#ie# der beiden (oder, falls die Meldung auf einer #ib#Knotenstation#ie# erscheint, auf allen beteiligten) Stationen abgleichen. #ib(4)#Weiterleitung nicht möglich#ie(4)# Die #ib#Routeninformationen#ie# auf dem #ib#Knotenrechner#ie#, wo diese Meldung erscheint, und der sendenden #ib#Station#ie# stimmen nicht überein. Die angegebene Station ist von dieser Station aus nicht erreichbar. Abhilfe: #ib#Routentabellen#ie# der Stationen überprüfen. #ib(4)#Fremdzugriff#ie(4)# Eine #ib#gesperrt#ie#e Station hat versucht, auf diesen Rechner mit #ib#Sende­ codes#ie# > 6 zuzugreifen. Folgende Meldungen betreffen '#ib#harte Fehler#ie#'. Diese Fehler werden von der Netzsoft­ ware nicht abgefangen. In jedem Fall muß das Netz nach einer solchen #ib#Fehler­ meldung#ie# neu gestartet werden. #ib(4)#++++++#ie(4)# Meldungen dieser Form sind 'harte' Fehler. Der aufgetretene Fehler wird mit angegeben. Das Netz muß neu gestartet werden, da die Task, in welcher der Fehler aufgetreten ist, gelöscht wird. #ib(4)#Verbindungsengpaß#ie(4)# Es sind mehr Verbindungen festgestellt worden, als zulässig sind. Nach dieser Meldung wurde der entsprechende Netport gelöscht. Literaturverzeichnis #goalpage("A.2")# #clear pos# #lpos(1.0)##lpos(2.5)# #table# [1] EUMEL-Systemhandbuch, Teil 5, Intertaskkommunikation GMD St. Augustin, 1986 [2] EUMEL-Systemhandbuch, Teil 2, Hardware und ihre Steuerung [3] EUMEL-Systemhandbuch, Teil 8, Spooler [4] EUMEL-Netz Installationsanweisung GMD St. Augustin, 1987 [5] EUMEL-Systemhandbuch, Teil 4, Blockorientierte Ein/Ausgabe [6] EUMEL-Quellcode, Packet #on("b")#tasks#off("b")# GMD St. Augustin, 1986 [7] EUMEL-Portierungshandbuch 8086, Version 8 GMD St. Augustin, 1987 #table end#