Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

t_optmgmt() - Transportendpunkt-Optionen verwalten

&pagelevel(4)&pagelevel

#include <xti.h>

int t_optmgmt(int fd, struct t_optmgmt *req, struct t_optmgmt *ret);

Beschreibung

Mit der Funktion t_optmgmt() kann ein Transportdienstbenutzer Protokoll-Optionen abfragen, verifizieren oder mit dem Transportanbieter aushandeln.

Der Parameter fd spezifiziert einen Transportendpunkt. Die Parameter req und ret zeigen

jeweils auf ein Objekt vom Typ struct t_optmgmt.

Die Struktur t_optmgmt ist in <xti.h> wie folgt deklariert:

struct t_optmgmt {
   struct netbuf opt;
   long flags;
};

Die Komponente opt spezifiziert die Protokoll-Optionen. Die Komponente flags spezifiziert die Aktion, die mit diesen Optionen durchgeführt werden soll. Die Optionen werden durch eine netbuf-Struktur dargestellt, ähnlich wie die Adressen bei t_bind().

Der Transportbenutzer verwendet den Parameter req, um mit t_optmgmt() eine bestimmte Aktion des Transportanbieters anzufordern und um Optionen an den Transportanbieter zu senden. In req->opt.len spezifiziert der Benutzer die Länge (in Bytes) des Puffers, in dem die Optionen an den Transportanbieter übergeben werden. req->opt.buf zeigt auf diesen Puffer. req->opt.maxlen ist ohne Bedeutung.

Jede Option ist im Option-Puffer req->opt.buf als t_opthdr-Struktur abgelegt und muss innerhalb des Puffers auf Wortgrenze ausgerichtet sein. Wenn der Benutzer mehrere Optionen angibt, müssen alle Optionen der gleichen Protokollebene angehören.

Die Struktur t_opthdr ist in <xti.h> wie folgt deklariert:

struct t_opthdr {
   unsigned long len;    /* gibt die gesamte Länge der Option an     */
                         /* und errechnet sich als Summe der Länge   */
                         /* der Struktur t_opthdr und der Länge      */
                         /* eines evtl. nachfolgenden Option-Werts   */
   unsigned long level;  /* spezifiziert die Protokollebene          */
   unsigned long name;   /* spezifiziert die Option                  */
   unsigned long status; /* liefert Informationen, ob Setzen/Rück-   */
                         /* setzen dieser Option durchgeführt werden */
                         /* konnte                                   */
};

Mit dem in <xti.h> definierten Makro OPT_NEXTHDR (pbuf, buflen, poption) kann der Benutzer aus dem Option-Puffer lesen und in den Option-Puffer schreiben. Der Parameter pbuf ist ein Zeiger auf den Anfang des Option-Puffers, buflen gibt die Länge des Option-Puffers an und poption ist ein Zeiger auf die aktuelle Option innerhalb des Puffers. Als Rückgabewert liefert der Makro OPT_NEXTHDR einen Zeiger auf die nächste Option. Falls das Ende des Option-Puffers erreicht ist, liefert der Makro den Null-Zeiger zurück.

Vor Aufruf von t_optmgmt() muss der Benutzer in ret->opt.maxlen die maximale Länge (in Bytes) des Ergebnispuffers spezifizieren, in dem t_optmgmt() diese Informationen zurückliefert. req->opt.buf zeigt auf diesen Puffer. Nach Ausführung von t_optmgmt() enthält ret->opt.len die tatsächliche Länge der zurückgelieferten Optionen und Flag-Werte.

In req->flags muss der Benutzer eine der folgenden Aktionen spezifizieren:

T_NEGOTIATE

Mit dieser Aktion handelt der Benutzer mit dem Transportanbieter die Werte der Optionen aus, die er in req->opt.buf spezifiziert hat. Der Transportanbieter liefert die ausgehandelten Werte im Ergebnispuffer ret->opt.buf zurück.

Für jede Option zeigt das Status-Feld der zugehörigen t_opthdr-Struktur das Ergebnis der Operation an.
Das Statusfeld kann folgende Werte annehmen:

  • T_SUCCESS, wenn die Option erfolgreich verändert werden konnte.

  • T_PARTSUCCESS, wenn ein kleinerer Option-Wert als der angegebene gesetzt werden konnte.

  • T_FAILURE, wenn die Änderung nicht durchgeführt werden konnte.

  • T_READONLY, wenn die Option nur gelesen, aber nicht geändert werden darf.

  • T_NOTSUPPORT, wenn der Transportanbieter die Option nicht unterstützt.

In ret->flags liefert t_optmgmt() das kleinste gemeinsame Ergebnis aller option-spezifischen Ergebnisse. Dabei hat T_NOTSUPPORT die höchste Wertigkeit; die Wertigkeit der Ergebnisse nimmt ab in der Reihenfolge T_NOTSUPPORT, T_READONLY, T_FAILURE, T_PARTSUCCESS, T_SUCCESS.

Auf jeder Protokollebene kann der Benutzer mit der Option T_ALLOPT alle in der betreffenden Protokollebene unterstützten Optionen auf ihren ursprünglichen Wert zurücksetzen. Im Ergebnispuffer ret->opt.buf liefert t_optmgmt() dann alle Optionen mit den zugehörigen Werten zurück.

T_CHECK

Mit dieser Aktion kann der Benutzer prüfen, ob der Transportanbieter die in req->opt.buf spezifizierten Optionen unterstützt.

Wenn eine Option ohne Option-Wert spezifiziert ist, setzt t_optmgmt() für die betreffende Option im Ergebnispuffer ret->opt.buf nur das Status-Feld.

Das Statusfeld enthält einen der folgenden Werte:

  • T_SUCCESS, falls der Transportanbieter die Option unterstützt.

  • T_NOTSUPPORT, falls der Transportanbieter die Option nicht unterstützt.

  • T_READONLY, falls die Option nur gelesen werden darf.

Wenn eine Option mit Option-Wert spezifiziert ist, liefert t_optmgmt() das Ergebnis in der oben unter „T_NEGOTIATE“ beschriebenen Weise. In ret->flags liefert t_optmgmt() dann das kleinste gemeinsame Ergebnis aller option-spezifischen Ergebnisse.

T_CURRENT

Mit dieser Aktion kann der Benutzer die Werte der in req->opt.buf spezifizierten Optionen ermitteln. Nach Ausführung von t_optmgmt() enthält ret->opt.buf die Optionen und ihre aktuellen Werte.

Nach Ausführung von t_optmgmt() zeigt ret->opt.flags das Ergebnis an:

  • T_SUCCESS, falls der Transportanbieter die Option unterstützt.

  • T_NOTSUPPORT, falls der Transportanbieter die Option nicht unterstützt.

  • T_READONLY, falls die Option nur gelesen werden darf.

Auf jeder Protokollebene kann der Benutzer mit der Option T_ALLOPT veranlassen, dass t_optmgmt() alle unterstützten Optionen mit den zugehörigen Werten zurückliefert.

T_DEFAULT

Mit dieser Aktion kann der Benutzer sich die Standardwerte der in *req spezifizierten Optionen in *ret zurückliefern lassen.

Das Statusfeld einer Option in ret->opt.buf hat dann folgenden Wert:

  • T_SUCCESS, falls der Transportanbieter die Option unterstützt.

  • T_NOTSUPPORT, falls der Transportanbieter die Option nicht unterstützt.

  • T_READONLY, falls die Option nur gelesen werden darf.

In ret->flags liefert t_optmgmt() dann das kleinste gemeinsame Ergebnis aller optionspezifischen Ergebnisse.

Auf jeder Protokollebene kann sich der Benutzer mit der Option T_ALLOPT alle in der betreffenden Protokollebene unterstützten Optionen mit ihren ursprünglichen Werten zurückliefern lassen.

Protokollebenen und Optionen

Die Optionen verteilen sich auf verschiedene Protokollebenen.

Übersicht über Protokollebenen und Optionen:

Protokollebene

Name der Option

Typ des Option-Werts

Option-Werte

XTI_GENERIC

XTI_DEBUG

unsigned long

0 oder XTI_GENERIC

INET_TCP

TCP_KEEPALIVE

struct t_kpalive

(siehe Text)

TCP_NODELAY

unsigned long

T_YES oder T_NO

INET_IP

IP_BROADCAST

unsigned int

T_YES oder T_NO

Optionen der Protokollebene XTI_GENERIC

XTI_DEBUG

Mit dieser Option legt der Benutzer fest, ob Diagnose-Informationen erstellt werden:

  • XTI_GENERIC als Option-Wert angegeben: Diagnose-Informationen werden erstellt.

  • kein Option-Wert angegeben: Diagnose-Informationen werden nicht erstellt.

Zu Diagnose-Informationen siehe auch Abschnitt "XTI-Trace".

Optionen der Protokollebene INET_TCP

TCP_KEEPALIVE

Das Setzen dieser Option aktiviert einen Mechanismus, der eine Verbindung periodisch daraufhin abprüft, ob sie noch besteht. Der Option-Wert ist gespeichert in einem Objekt vom Typ struct t_kpalive.

Die Struktur t_kpalive ist in <xti.h> wie folgt deklariert:

struct t_kpalive {
   long kp_onoff;     /* Option ein-/ausschalten */
   long kp_timeout;   /* keep-alive-Timeout in Minuten */
};

Mit dem Parameter kp_onoff kann die „Lebendüberwachung“ von Verbindungen ein- oder ausgeschaltet werden. kp_onoff kann den Wert T_YES oder T_NO annehmen.

Der Parameter kp_timeout ist ohne Bedeutung, da das Transportsystem selbst die Zeitabstände für die Überwachung der Verbindung festlegt.

TCP_NODELAY

Mit dieser Option kann der Benutzer das Zeitverhalten beim Senden von Daten beeinflussen.

Im Standardfall werden Daten sofort gesendet. Treten jedoch Verzögerungen beim Senden einzelner Daten auf, dann sammelt das Transportsystem kleinere Datenmengen und sendet diese Daten gemeinsam zu einem späteren Zeitpunkt. Dadurch wird die Netzlast verringert. Wenn die Option TCP_NODELAY gesetzt ist (Option-Wert T_YES) ist der geschilderte Mechanismus nicht wirksam, d.h. die Daten werden sofort gesendet.

Option der Protokollebene INET_IP

IP_BROADCAST

Mit dieser Option steuert der Benutzer das Senden von Broadcast-Nachrichten.

Da Broadcast-Nachrichten im BS2000 immer gesendet werden dürfen, hat die Option IP_BROADCAST keine funktionelle Bedeutung. Zu beachten ist jedoch, dass der Empfang von Broadcast-Nachrichten nicht zugelassen sein kann.

Returnwert

0:

Bei Erfolg.

-1:

Bei Fehler. t_ errno wird gesetzt, um den Fehler anzuzeigen.

Fehler

TACCES

Der Benutzer hat nicht die Berechtigung, die angegebenen Optionen auszuhandeln.

TBADF

Der angegebene Dateideskriptor verweist nicht auf einen Transportendpunkt.

TBADFLAG

Es wurde ein ungültiges Flag angegeben.

TBADOPT

Die angegebenen Protokoll-Optionen hatten ein falsches Format oder enthielten ungültige Informationen.

TBUFOVFLW

Die Anzahl der (mit maxlen) für einen Ergebnisparameter reservierten Bytes reicht nicht aus, um den Wert des Parameters abzuspeichern. Die in *ret zurückzuliefernde Information wird gelöscht.

TOUTSTATE

Innerhalb einer Sequenz von XTI-Funktionsaufrufen für den Transportendpunkt fd wurde die Funktion an der falschen Stelle aufgerufen.

TSYSERR

Während der Ausführung dieser Funktion ist ein Systemfehler aufgetreten.

Siehe auch

t_getinfo(), t_open()