netdir(3N) netdir(3N)
NAME
netdir: netdirgetbyname, netdirgetbyaddr, netdirfree, taddr2uaddr,
uaddr2taddr, netdirperror, netdiroptions, netdirsperror - Namen auf
Adressen des Transportsystems generisch abbilden
SYNTAX
#include <netdir.h>
int netdirgetbyname(struct netconfig *config,
struct ndhostserv *service,
struct ndaddrlist **addrs);
int netdirgetbyaddr(struct netconfig *config,
struct ndhostservlist **service,
struct netbuf *netaddr);
void netdirfree(void ptr, int ident);
char *taddr2uaddr(struct netconfig *config, struct netbuf *addr);
struct netbuf *uaddr2taddr(struct netconfig *config, char *uaddr);
int netdiroptions(struct netconfig *netconfig, int option, int fd,
char *pointtoargs);
void netdirperror(char *s);
char *netdirsperror(void)
BESCHREIBUNG
Diese Routinen bieten eine generische Schnittstelle für die Abbildung
von Namen auf Adressen an und arbeiten mit allen Transportprotokollen.
Diese Schnittstelle ermöglicht Programmen in einer generischen Art und
Weise, transportspezifische Adressen in allgemeine Strukturen umzuset-
zen. Die Umsetzung in umgekehrter Richtung ist ebenso möglich.
Die Routine netdirgetbyname() bildet einen Rechnernamen und einen
Dienstnamen in der Struktur ndhostserv auf eine Reihe von Adressen
ab. Die Adressen sind von einem Typ, der dem Transportsystem, das in
der Struktur netconfig festgelegt ist, bekannt ist. Die Routine lie-
fert alle Adressen, die für den Transport gültig sind in der Struktur
ndaddrlist. Die Strukturen ndhostserv und ndaddrlist haben die
unten beschriebenen Elemente. Die Struktur netconfig wird in
netconfig(4) beschrieben.
struct ndaddrlist {
int ncnt
struct netbuf *naddrs;
};
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
netdir(3N) netdir(3N)
struct ndhostserv {
char *hhost;
char *hserv;
};
netdirgetbyname() akzeptiert einige spezielle Rechnernamen. Diese
Rechnernamen sind Hinweise für die darunterliegenden Abbildungsrouti-
nen und werden von einigen Entwicklern von Transportdiensten benötigt,
um die korrekte Information zum Aufrufer zurückzugeben. Die Rechnerna-
men sind in /usr/include/netdir.h definiert. Die aktuell definierten
Rechnernamen sind:
HOSTSELF stellt die Adresse dar, an die lokale Programme ihre End-
punkte binden. HOSTSELF ist verschieden von dem Rechner-
namen, der durch gethostname(3N) geliefert wird. Letzterer
ist die Adresse, an die ferne Programme ihre Endpunkte
binden.
HOSTANY repräsentiert jeden Host, auf den durch diesen Transport-
anbieter zugegriffen werden kann. HOSTANY erlaubt Anwen-
dungen, erforderliche Dienste zu spezifizieren, ohne einen
bestimmten Rechnernamen anzugeben.
HOSTBROADCAST
repräsentiert die Adresse für alle Hosts, auf die durch
diesen Transportanbieter zugegriffen werden kann. Netz-
werknachrichten auf dieser Adresse werden von allen
Maschinen empfangen.
Alle Felder der Struktur ndhostserv müssen initialisiert werden.
Um alle verfügbaren Transporte aufzufinden, müssen Sie die Routine
netdirgetbyname() mit jeder Struktur netconfig aufrufen, die von dem
getnetpath(3N)-Aufruf zurückgeliefert wurde.
Die Routine netdirgetbyaddr() bildet Adressen auf Dienstnamen ab. Sie
liefert eine Liste von Host- und Dienstnamen zurück, die sich mit die-
ser Adresse ergeben würden. Wenn mehr als ein Paar von Host- und
Dienstnamen zurückgegeben wird, enthält das erste Paar den bevorzugten
Host- und Dienstnamen.
struct ndhostservlist {
int *hcnt;
struct hostserv *hhostservs;
};
Die Routine netdirfree() wird für die Freigabe von Strukturen verwen-
det, die durch die Routinen für die Abbildung von Namen auf Adressen
angelegt wurden.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
netdir(3N) netdir(3N)
Die Routinen taddr2uaddr() und uaddr2taddr() bieten eine Umsetzung von
universellen Adressen auf netbuf-Strukturen vom Typ TLI (Transport
Level Interface). Die Routinen erwarten Zeiger auf Zeichenketten, und
liefern ebenfalls Zeiger auf Zeichenketten zurück. Die Routine
taddr2uaddr() liefert einen Zeiger auf eine Zeichenkette zurück, die
die universelle Adresse enthält. Wenn die Umsetzung nicht möglich ist,
wird NULL zurückgegeben. Dies muß keinen Fehler zur Folge haben, da
einige Transporte kein universelles Adreßformat vorsehen.
option, fd und pointertoargs werden der Routine netdiroptions für
den in netconfig spezifizierten Transport übergeben. Es gibt vier
Werte für option:
NDSETBROADCAST
NDSETRESERVEDPORT
NDCHECKRESERVEDPORT
NDMERGEADDR
Falls ein Transportanbieter keine Option unterstützt, liefert
netdiroptions -1 zurück und setzt nderror auf NDNOCTRL.
Die jeweils spezifischen Aktionen sind:
NDSETBROADCAST
Setzt die Erlaubnis für Broadcast, falls der Transport Broadcast
anbietet. fd ist ein Transport-Dateideskriptor, der als Ergebnis
eines topen auf /dev/udp zurückgegeben wird. pointertoargs
wird nicht verwendet. Danach können Broadcasts auf dem Dateide-
skriptor fd durchgeführt werden.
NDSETRESERVEDPORT
Erlaubt Anwendungen, sich an einen reservierten Port zu binden,
falls der Transportanbieter das erlaubt. fd ist ein Dateideskrip-
tor auf den Transport (er darf nicht zu einer Adresse gebunden
werden). Falls pointertoargs NULL ist, wird fd an einen reser-
vierten Port gebunden. Falls pointertoargs ein Zeiger auf eine
netbuf-Struktur ist, wird versucht, die darin angegebene Adresse
an einen reservierten Port zu binden.
NDCHECKRESERVEDPORT
Wird dazu verwendet, zu verifizieren, ob eine Adresse zu einem
reservierten Port gehört, falls der Transportanbieter das
erlaubt. fd wird nicht verwendet. pointertoargs ist ein Zeiger
auf eine netbuf-Struktur, die eine Adresse enthält. Diese Option
liefert 0, falls die in pointertoargs angegebene Adresse reser-
viert ist.
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
netdir(3N) netdir(3N)
NDMERGEADDR
Wird dazu verwendet, für eine "lokale Adresse" (wie die Adresse
0.0.0.0) eine "reale Adresse" zurückzuliefern, mit der sich
Client-Maschinen verbinden können. fd wird nicht verwendet und
pointertoargs ist ein Zeiger auf eine Struktur ndmergearg, die
folgendes Format hat:
struct ndmergearg {
char *suaddr; /* universelle Adresse des Servers */
char *cuaddr; /* universelle Adresse des Client */
char *muaddr; /* das Ergebnis */
}
suaddr hat ein Format der Art 0.0.0.0.1.12. Falls der Aufruf erfol-
greich war, wird muaddr auf ein Format der Art 192.11.109.89.1.12
gesetzt. Bei den meisten Transporten entspricht muaddr exakt suaddr.
Die Routine netdirperror() gibt eine Fehlermeldung auf der Standard-
ausgabe aus und zeigt an, warum eine der Abbildungsroutinen (von Namen
auf Adressen) fehlgeschlagen ist. Die Fehlermeldung wird nach der Zei-
chenkette ausgegeben, die als Argument übergeben wird.
Die Routine netdirsperror() liefert eine Zeichenkette zurück, die
eine Fehlermeldung enthält und anzeigt, warum eine der Routinen für
die Abbildung von Namen auf Adressen fehlgeschlagen ist.
SIEHE AUCH
gethostname(3N), getnetpath(3N), netconfig(4).
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98