public class TlsNetworkLayer extends java.lang.Object implements NetworkLayer, NetworkLayerSender
Implementierung der TLS-OSI-3 Netzwerkebene.
Modifier and Type | Field and Description |
---|---|
int |
_localDeviceAddress |
PRIORITY_CLASS_1, PRIORITY_CLASS_2
Constructor and Description |
---|
TlsNetworkLayer() |
Modifier and Type | Method and Description |
---|---|
void |
addEventListener(NetworkLayerListener networkLayerListener)
Meldet einen Empfänger für Ereignis der Netzebene an.
|
void |
completeInitialization()
Suchalgorithmus zur Ermittlung aller möglichen Routen zu anderen Geräten.
|
DataLinkLayerListener |
getDataLinkLayerListener() |
int[] |
getRoutedRemoteDevices(int device)
Bestimmt die Geräte, die über das angegebene Gerät erreichbar sind.
|
void |
handleDataLinkLayerEvent(DataLinkLayerEvent event)
Wird aufgerufen, wenn ein Daten-Telegramm von der Osi2 Schnittstelle empfangen wird.
|
boolean |
isReducingToControlByte(DataLinkLayer.Link link)
Es wird geprüft ob die Option auf ReduzierungAufSteuerbyte aktiviert ist, d.h. der Osi3-Header wird auf das Steuerbyte reduziert (Osi3-Routinginformationen entfernt) Falls keine Einstellung dafür vorhanden ist, wird das Telegram normal (mit Osi3-Routinginformationen) weitergeleitet.
|
void |
removeEventListener(NetworkLayerListener networkLayerListener)
Meldet einen angemeldeten Empfänger für Ereignisse der Netzebene wieder ab.
|
void |
sendData(int destination,
byte[] data,
boolean longTelegram)
Sendet ein Telegramm mit hoher Priorität an ein vorgegebenes Zielgerät.
|
void |
sendData(int destination,
int priority,
byte[] data,
boolean longTelegram)
Methode zum Versenden von Telegrammen mit vorgegebener Priorität
|
void |
sendWithoutRedirection(int destination,
int priority,
byte[] data,
boolean longTelegram) |
void |
setTelegramProcessor(TelegramProcessor telegramProcessor) |
void |
start()
Startet die Verarbeitung von Telegrammen
|
public void addEventListener(NetworkLayerListener networkLayerListener)
NetworkLayer
Meldet einen Empfänger für Ereignis der Netzebene an. Dies ist im allgemeinen eine Protokollschicht oberhalb der Netzebene (wie z.B. TLS-OSI-7 Schicht). Nach der Anmeldung werden allen angemeldeten Empfängern empfangene Telegramme und Statusänderung von Verbindungen mitgeteilt.
addEventListener
in interface NetworkLayer
networkLayerListener
- Anzumeldender Empfänger, der die Verarbeitung von empfangenen Telegrammen und Statusänderungen von Verbindungen übernimmt.public void removeEventListener(NetworkLayerListener networkLayerListener)
NetworkLayer
Meldet einen angemeldeten Empfänger für Ereignisse der Netzebene wieder ab.
removeEventListener
in interface NetworkLayer
networkLayerListener
- Abzumeldender Empfängerpublic int[] getRoutedRemoteDevices(int device)
NetworkLayer
Bestimmt die Geräte, die über das angegebene Gerät erreichbar sind. Alle Geräte, die bezüglich des OSI-3 Routings direkt oder indirekt hinter dem angegebenen Gerät liegen, werden ermittelt.
getRoutedRemoteDevices
in interface NetworkLayer
device
- Gerät zu dem die darüber erreichbaren Geräte ermittelt werden sollen.public void sendData(int destination, byte[] data, boolean longTelegram) throws DestinationUnreachableException
NetworkLayer
Sendet ein Telegramm mit hoher Priorität an ein vorgegebenes Zielgerät.
sendData
in interface NetworkLayer
destination
- Knotennummer des Geräts an das das Telegramm gesendet werden soll.data
- Nutzdaten aus Sicht des NetworkLayers (i.a. ein OSI-7 Telegrammblock).longTelegram
- true = Langtelegramm, das nicht der TLS Definition entspricht; false = Telegramm, das der TLS Definition entsprichtDestinationUnreachableException
- Wenn das angegebene Ziel nicht erreichbar ist.public void sendData(int destination, int priority, byte[] data, boolean longTelegram) throws DestinationUnreachableException
Methode zum Versenden von Telegrammen mit vorgegebener Priorität
sendData
in interface NetworkLayer
destination
- Knotennummer, an die gesendet werden sollpriority
- Priorität, unter der das Telegramm versendet werden solldata
- Bytearray Telegrammdaten OSI7longTelegram
- true = Es soll ein Langtelegramm verschickt werden, das nicht der TLS-Norm entsprichtDestinationUnreachableException
public void sendWithoutRedirection(int destination, int priority, byte[] data, boolean longTelegram) throws DestinationUnreachableException
sendWithoutRedirection
in interface NetworkLayerSender
DestinationUnreachableException
public void start()
NetworkLayer
Startet die Verarbeitung von Telegrammen
start
in interface NetworkLayer
public DataLinkLayerListener getDataLinkLayerListener()
public boolean isReducingToControlByte(DataLinkLayer.Link link)
Es wird geprüft ob die Option auf ReduzierungAufSteuerbyte aktiviert ist, d.h. der Osi3-Header wird auf das Steuerbyte reduziert (Osi3-Routinginformationen entfernt) Falls keine Einstellung dafür vorhanden ist, wird das Telegram normal (mit Osi3-Routinginformationen) weitergeleitet.
link
- Verbindung, von der die Einstellungen bezogen werdenfalse
: Osi3-Adressen werden nicht ignoriert true
: Osi3-Adressen werden ignoriert und werden bis auf das Steuerbyte entfernt.public void handleDataLinkLayerEvent(DataLinkLayerEvent event)
Wird aufgerufen, wenn ein Daten-Telegramm von der Osi2 Schnittstelle empfangen wird.
Wenn das Telegramm keine Informationen über den Verbindungdstatus beinhaltet, wird das Telegram anhand des Osi3-Header-Information (Steuerbyte und Routinginformationen) ausgewertet und weitergeleitet.
event
- Beinhaltet das Telegram und die verwendeten Schnittstellen-Informationen.public void completeInitialization()
Suchalgorithmus zur Ermittlung aller möglichen Routen zu anderen Geräten. Der Algorithmus arbeitet nicht rekursiv nach unten, sondern etagenweise (breadth-first-search) um bei einem Netz mit Maschen die jeweils kürzeste Route zu jedem erreichbaren anderen Knoten zu ermitteln. Ausgehend von einer Liste, die nur den lokalen Knoten enthält werden alle Knoten in spiralförmiger Weise iteriert und jeweils das Routing initialisiert und alle noch nicht bearbeiteten Geräte, die ausgehend vom jeweils bearbeiteten Gerät eine direkte Verbindung haben werden hinten an die Liste angehangen. Als erstes wird ein spezielles Routing für das lokale Gerät selbst eintragen, damit man auch Telegramme an sich selbst senden kann.
public void setTelegramProcessor(TelegramProcessor telegramProcessor)