qtax.25

Einleitung

qtax.25 ist ein Protokollstack für das AX.25-Protokoll, das im Amateurfunk für die Betriebsart Packet Radio benutzt wird. Diese Implementierung des Protokollstacks basiert vollständig auf der Qt-Bibliothek.

Das Paket kann sowohl als Klassenbibliothek für eigene Projekte benutzt werden, wobei drei Klassen von Bedeutung sind:

  • CAx25L1Socket erzeugt ein Layer 1 Modul mit dem auch eine Verbindung zu einem hardware-Interface hergestellt wird.
  • CAX25Server ist ein Server für eingehende AX.15-Verbindungen
  • CAX25Socket ist ein Socket für AX.25-Verbindungen.

Die zweite Verwendungemöglichkeit besteht in einem kleinen Terminalserver, der in dem Paket enthalten ist und der mit dem qt ax.25 Protokollstack implementiert ist.

 qtax.25 als Bibliothek

Allgemeine Beschreibung

Um qtax.25 als AX.25 Protokollstack-bibliothek einzusetzen, muss zunächst ein Object der Klasse CAx25L1Socket erzeugt werden. Die Angaben, die der Konstruktor dieses Objektes benötigt hängen vom Layer 1 Typ ab. Derzeit ist nur AXUDP implementiert. Um eine AXUDP-Verbindung zu erzeugen, muss der hostname und IP-Port der Gegenstelle angegeben werden. Dazu  wird noch der IP-Port benötigt, auf dem eingehende AXUDP-Pakete empfangen werden sollen.

Im nächsten Schritt können AX.25 Server, die in der Lage sind, eingehende AX.25-Verbindungen anzunehmen und AX.25 Sockets erzeugt werden. Um einen solchen Server oder Socket zu erzeugen, benötigt man zunächst einen Zeiger auf den Paketverteiler, der mit jedem Layer 1 Socket erzeugt wird. Diesen Zeiger erhält man, wenn man auf den Layer 1 Socket die Methode  GetScheduler anwendet.

AX.25 Server

Eingehende Verbindungen nimmt ein AX.25 Server an. Dazu erzeugt man ein Objekt der Klasse CAX25Server. Nach dem Konstruktoraufruf, bei dem man bereits den Zeiger auf den Paketverteiler übergeben kann, startet man den Server mit dem Aufruf der Methode listen(const QString &SMyCall ).

Eingehende Verbindungen können zum einen mit der Methode bool hasPendingConnections(void) const gepollt werden. Zum andern wird bei einer eingehenden Verbindung das Signal void newConnection() ausgesandt.

Sobald eine neue Verbindung erkannt wurde, kann mit CAX25Socket* nextPendindingConnection() ein Zeiger auf einen AX.25-Socket erzeugt werden. Über diesen Socket kann auf die neue Verbindung zugegriffen werden.

AX.25 Verbindungen

Um auf AX.25-Verbindungen zuzugreifen, muss ein AX.25-Socket erzeugt werden. Es gibt zwei Möglichkeiten solche einen Socket zu erzeugen. Zum einen erzeugt der AX.25-Server automatisch bei eingehenden Verbindungen einen neuen AX.25-Socket, auf den man einen Zeiger durch Aufruf der Methode nextPendindingConnection() in der Serverklasse erhält. Zum anderen kann man mit derm Konstruktor der Klasse CAX25Socket ein Objekt dieser Klasse erzeugen, um selbst eine AX.25-Verbindung zu initiieren.

In diesem Fall muss zunächst ein Objekt der Klasse erzeugt und diesem Objekt ein Layer 1 Paketvermittler zugeordnet werden. Dann kann man mit der Methode bind(const QString&) ein Rufzeichen an den Socket binden, das beim Verbindungsaufbau als eigenes Rufzeichen verwendet wird. Danach kann der Verbindungsaufbau mit der Methode connectToHost( const QString&, const QStringList& ) initiiert werden. Der erste Parameter ist dabei das Rufzeichen der gewünschten Gegenstation und der zweite Parameter ist eine Liste von Rufzeichen, die als L2-Digipeater verwendet werden sollen.

Sobald die Verbindung aufgebaut wurde, sendet CAX25Socket ein connected()-Signal aus. Darüber hinaus kann mit der Methode state(void) const jederzeit der Verbindungsstatus abgefragt werden. Bei einer Unterbrechung der Verbindung wird das Signal disconnected(void) ausgesendet.

Da CAX25Socket alle Eigenschaften der Klasse QIODevice geerbt hat, kann in gleicher Weise, wie bei allen anderen Qt Datei- und Socket-Klassen auf die Daten der Verbindung zugegriffen werden.

qtax.25 Klassenbeschreibungen

Für die Klassen CAx25L1Socket, CAX25Server und CAX25Socket sind deteilierte Klassenbeschreibungen (in englicher Sprache) verfügbar:

AX.25 Terminalserver

Der AX.25-Terminalserver, der als Beispielapplikation in dem qtax.25-Paket enthalten ist, öffnet einen Telnetport, über den AX25-Verbindungen gestartet oder entgegen genommen werden können.

Start des AX.25 Terminalservers

Der Terminalserver wird mit ax25 [options] gestartet.

Kommandozeilenoptionen

–axudp

Startet als Layer 1 eine AX.25 over UDP tunneling Verbindung

–kiss

Startet ein KISS-Interface, mit dem die Verbindung zu einem TNC hergestellt werden kann. (Bislang nicht implementiert.)

–6pack

Startet ein 6pack Interface, mit dem eine Verbindung zu einem TNC oder einem PR430-Transceiver hergestellt werden kann. (Bislang nicht implementiert)

–telnetport -p

Nach dieser Option muss eine Integerzahl folgen. Damit wird der IP-port angegeben, auf dem der Terminalserver angesprochen werden kann.

–udpport -u

Nach dieser Option folgt der IP-port, auf dem UDP-Frames empfangen werden, die AX.25 over UDP tunneling daten enthalten.

–peer -h

Mit diesem Parameter wird bei AX.25 over UDP-tunneling der Hostname der Gegenstation angegeben.

–peerport -i

Nach diesem Parameter folgt die IP-Portnummer der AX.25 over UDP gegenstation.

–maxtry -n

Hiermit wird die maximale Anzahl von Versuchen, ein AX.25-Paket auszusenden, angegeben, bevor die Verbindung als Unterbrochen betrachtet wird.

–monitor -m

Mit dieser Option wird der Monitor-Modus eingeschaltet. Alle ein- und ausgehenden AX.25-Pakete werden auf der Standardausgabe angezeigt.

Nutzen des Terminalservers

Nachdem man sich mit einem Telnet-Client mit dem Terminlserver verbunden hat, besteht die Möglichkeit den Terminalserver mit einer Reihe von Kommandos zu steuern:

Terminalserver-Kommandos

LIST <callsign>

Der Terminalserver wartet nun auf eingehende Verbindungen zum Rufzeichen <callsign>.

BIND <callsign>

Damit wird das eigene Rufzeichen bei ausgehenden Verbindungen gesetzt.

CONN <callsign> [ VIA { <callsign> }]

Mit CONN wird eine ausgehende Verbindung initiiert. Dabei wird das Rufzeichen der Gegenstation und ggf. die Rufzeichen von L2-Digipeatern angegeben. Vor dem Befehl CONN ist der Befehl BIND zwingend.

BIN

Mit BIN wird der Terminalserver während der AX.25-Verbindung in einen Transparentmodus geschaltet, in dem auch Binärübertragungen möglich sind.

TEXT

TEXT schaltet den Terminalserver in den Textmodus.

L2D <callsign>

L2D lässt den Terminalserver als L2-Digipeater mit dem Rufzeichen <callsign> arbeiten.

MXT1 <int>

Damit wird das maximum des T1 Timers gesetzt. Die Angabe erfolgt in 10-ms-Schritten.

MXT2 <int>

Damit wird das maximum des T2 Timers gesetzt. Die Angabe erfolgt in 10-ms-Schritten.

MXT3 <int>

Damit wird das maximum des T3 Timers gesetzt. Die Angabe erfolgt in 10-ms-Schritten.

MN2 <int>

MN2 setzt das Maximum des N2 Zählers.

Verbindungsablauf

Nach dem Verbindungsaufbau mit dem Terminalserver besteht die Möglichkeit Terminalserverkommandos einzugeben. Jedes Kommando wird mit einer Meldung quitiert. Die Meldung besteht aus einem Kode und einem kurzen Text. Kodes zwischen 200 und 299 signalisieren Erfolg und Kodes zwischen 400 und 499 Misserfolg.

Sobald eine AX.25-Verbindung aufgebaut wurde, was mit dem Text „200 Connected to <callsign>“ signalisiert wird, Wird jede Eingabe an den Terminalserver an die AX.25-Verbindung weiter geleitet.

 

Schreibe einen Kommentar