Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ rpc(3N) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

getnetconfig(3N)

getnetpath(3N)

rpcbind(3N)

xdr(3N)

netconfig(4)

environ(5)

rpc(3N)                                                             rpc(3N)

NAME
     rpc - Bibliotheksroutinen für RPC (Remote Procedure Calls)

BESCHREIBUNG
     RPC-Routinen erlauben C-Programmen, Prozeduraufrufe auf anderen
     Maschinen über ein Netzwerk durchzuführen. Zuerst ruft der Client eine
     Prozedur auf, um ein Datenpaket an den Server zu schicken. Bei Empfang
     des Pakets ruft der Server eine Verteilerfunktion auf, um den gefor-
     derten Dienst durchzuführen. Danach sendet er eine Antwort zurück.

     Die nun folgenden Abschnitte beschreiben Datenobjekte, die von RPC-
     Paketen verwendet werden.

NETZTYP
     Einige der auf höheren Ebenen angesiedelten RPC-Schnittstellenroutinen
     erwarten einen String nettype als Parameter [z. B. clntcreate,
     svccreate, rpcreg, rpccall]. Dieser String definiert eine Klasse
     von Transporten, die für eine bestimmte Anwendung verwendet werden
     können. Die Transporte werden in der Reihenfolge von links nach rechts
     in der Variable NETPATH, oder von oben nach unten in der Datei
     /etc/netconfig ausprobiert.

     nettype kann sein:

     netpath        Wählt aus den Transporten aus, die durch ihre Namen in
                    der Variable NETPATH angegeben sind. Falls NETPATH
                    nicht gesetzt oder NULL ist, wird zu visible übergegan-
                    gen. netpath ist der Standard für nettype.

     visible        Wählt die Transporte aus, die die visible-Option (v) in
                    der Datei /etc/netconfig gesetzt haben.

     circuitv      Entspricht visible, bis auf den Unterschied, daß nur
                    verbindungsorientierte Transporte aus den Einträgen der
                    Datei /etc/netconfig ausgewählt werden.

     datagramv     Entspricht ebenfalls visible, bis auf den Unterschied,
                    daß nur verbindungslose Datagramm-Transporte aus den
                    Einträgen in der Datei /etc/netconfig ausgewählt wer-
                    den.

     circuitn      Entspricht netpath, bis auf den Unterschied, daß nur
                    verbindungsorientierte Transporte ausgewählt werden.

     datagramn     Entspricht netpath, bis auf den Unterschied, daß nur
                    verbindungslose Datagramm-Transporte ausgewählt werden.

     udp            Wählt Internet UDP aus.

     tcp            Wählt Internet TCP aus.





Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

rpc(3N)                                                             rpc(3N)

     raw            Nur für Leistungsmeldungen über Pseudo-RPC.

     Falls nettype NULL ist, wird netpath als Standard verwendet.

DATENSTRUKTUREN
     Einige der Datenstrukturen, die von RPC-Paketen verwendet werden, wer-
     den unten beschrieben.

   Die Struktur AUTH

     union desblock {
         struct {
             uint32 high;
             uint32 low;
         } key;
         char c[8];
     };
     typedef union desblock desblock;
     extern boolt xdrdesblock();

     /*
      * Berechtigungsinformation. Opak für einen Client.
      */
     struct opaqueauth {
         enumt  oaflavor;  /* Typ von auth */
         caddrt oabase;    /* Adresse weiterer auth-Daten */
         uint   oalength;  /* nicht MAXAUTHBYTES überschreiten */
     };

     /*
      * Auth Objekt, Schnittstelle zu clientseitigen Identifikationen.
      */
     typedef struct {
         struct  opaqueauth  ahcred;
         struct  opaqueauth  ahverf;
         union   desblock    ahkey;
         struct authops {
             void   (*ahnextverf)();
          int     (*ahmarshal)();  /* nextverf & serialisieren */
          int     (*ahvalidate)(); /* Identifikation */
          int     (*ahrefresh)();  /* frische Berechtigung auf */
          void    (*ahdestroy)();  /* lösche diese Struktur */
         } *ahops;
         caddrt ahprivate;
     } AUTH;









Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

rpc(3N)                                                             rpc(3N)

   Die Struktur CLIENT

     /*
      * rpc-Objekt der Clients (Client-Handle).
      * Client ist für die Initialisierung verantwortlich,
      * siehe z. B. authnone.c.
      */
     typedef struct {
         AUTH           *clauth;             /* Identifikation */
         struct clntops {
          enum clntstat  (*clcall)();    /* rufe ferne Prozedur auf */
          void            (*clabort)();   /* breche einen Aufruf ab */
          void            (*clgeterr)();  /* hole spezifischen Fehlercode */
          boolt          (*clfreeres)(); /* gibt Ergebnisse frei */
          void            (*cldestroy)(); /* lösche diese Struktur */
          boolt          (*clcontrol)(); /* das ioctl() von rpc */
         } *clops;
         caddrt         clprivate;          /* private transportspez. Daten */
         char            *clnetid;           /* Transportname */
         char            *cltp;              /* Gerätename */
     } CLIENT;

































Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

rpc(3N)                                                             rpc(3N)

   Die Struktur SVCXPRT

     enum xprtstat {
         XPRTDIED,
         XPRTMOREREQS,
         XPRTIDLE
     };

     /*
      * Transportobjekt auf Serverseite (Server-Handle)
      */
     typedef struct {
         int              xpfd;
     #define xpsock      xpfd
     #endif
         ushort          xpport;         /* entsprechende Portnummer.
                                            * Veraltet, aber noch immer
                                            * verwendet, um anzugeben, ob
                                            * Listener oder normale Verbindung
                                            */

         struct xpops {
           boolt         (*xprecv)();     /* empfange hereinkomm. Auftrag */
           enum xprtstat (*xpstat)();     /* hole Status */
           boolt         (*xpgetargs)();  /* hole Argumente */
           boolt         (*xpreply)();    /* sende Antwort */
           boolt         (*xpfreeargs)(); /* gib Speicher frei, der für */
                                            /* Argumente angelegt wurde */
           void           (*xpdestroy)();  /* lösche diese Struktur */
         } *xpops;
         int         xpaddrlen;           /* Länge d. entf. Adr. (Veraltet) */
         char        *xptp;                /* Transportanbieter-Gerätedatei */
         char        *xpnetid;             /* Transportname */
         struct netbuf       xpltaddr;     /* lokale Transportadresse */
         struct netbuf       xprtaddr;     /* entf. Transportadresse */
         char                xpraddr[16];  /* entf. Adr. (Veraltet) */
         struct opaqueauth xpverf;        /* orig. Antwort-Verifikation */
         caddrt             xpp1;    /* privat: für Verwend. durch svc ops */
         caddrt             xpp2;    /* privat: für Verwend. durch svc ops */
         caddrt             xpp3;    /* privat: für Verwend. durch svc lib */
     } SVCXPRT;













Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

rpc(3N)                                                             rpc(3N)

   Die Struktur XDR

     /*
      * Xdr-Operationen. XDRENCODE bewirkt, daß die Daten kodiert werden.
      * XDRDECODE bewirkt, daß die Daten dekodiert werden.
      * XDRFREE kann verwendet werden, den Speicher, der durch ein
      * XDRDECODE angelegt wurde, freizugeben.
     */
     enum xdrop {
         XDRENCODE=0,
         XDRDECODE=1,
         XDRFREE=2
     };

     /*
      * Dies ist die Anzahl der Bytes pro XDR-Basiseinheit
     */
     #define BYTESPERXDRUNIT    (4)
     #define RNDUP(x)  ((((x) + BYTESPERXDRUNIT - 1) / BYTESPERXDRUNIT) \
                 * BYTESPERXDRUNIT)

     /*
      * Es existiert ein xdrproct für jeden Datentyp, der dekodiert oder
      * kodiert werden muß. Das zweite Argument für xdrproct ist ein Zeiger auf
      * einen opaque-Zeiger. Der opaque-Zeiger zeigt im allgemeinen auf eine
      * Struktur des Datentyps, der dekodiert werden soll.
      * Falls dieser Zeiger 0 ist, sollten die Routinen dynamisch
      * Speicherplatz der entsprechenden Größe anlegen und zurückliefern.
      * boolt       (*xdrproct)(XDR *, caddrt *);
     */
     typedef   boolt (*xdrproct)();

     /*
      * Das XDR-Handle enthält die aktuelle Operation aus xdrop,
      * einen Operationsvektor für die darunterliegende
      * Implementierung (siehe z. B. xdrmem.c) und zwei private Felder
      * zur Verwendung für diese Implementierung.
     */
     typedef struct {
         enum xdrop xop;            /* Operation; zusätzlicher Param */
         struct xdrops {
          boolt  (*xgetlong)();  /* hole long-Zahl von darunterl. Stream */
             boolt  (*xputlong)();  /* lege eine long-Zahl ab in " */
             boolt  (*xgetbytes)(); /* hole einige Bytes von " */
             boolt  (*xputbytes)(); /* lege einige Bytes ab in " */
             uint   (*xgetpostn)(); /* liefert Bytes vom Anfang zurück */
          boolt  (*xsetpostn)(); /* läßt den Stream neu positionieren */
             long *  (*xinline)();   /* Zeiger auf gepufferte Daten */
          void    (*xdestroy)();  /* gibt Privates dieses xdrstream frei */
         } *xops;




Seite 5                      Reliant UNIX 5.44               Gedruckt 11/98

rpc(3N)                                                             rpc(3N)

         caddrt     xpublic;        /* Daten des Benutzers */
         caddrt     xprivate;       /* Zeiger auf Private Daten */
         caddrt     xbase;          /* privat verw. f. Info-positionierung */
         int         xhandy;         /* zusätzliches privates Wort */
     } XDR;

   Index auf Routinen

     Die folgende Tabelle listet die RPC-Routinen auf sowie die Handbuch-
     seiten, auf denen sie beschrieben werden:

     _____________________________________________

     RPC-Routine              Handbuchseite
     _____________________________________________

     authdestroy             rpc_clnt_auth(3N)
     authnonecreate          rpc_clnt_auth(3N)
     authsyscreate           rpc_clnt_auth(3N)
     authsyscreatedefault   rpc_clnt_auth(3N)
     clntcall                rpc_clnt_calls(3N)
     clntcontrol             rpc_clnt_create(3N)
     clntcreate              rpc_clnt_create(3N)
     clntdestroy             rpc_clnt_create(3N)
     clntdgcreate           rpc_clnt_create(3N)
     clntfreeres             rpc_clnt_calls(3N)
     clntgeterr              rpc_clnt_calls(3N)
     clntpcreateerror        rpc_clnt_create(3N)
     clntperrno              rpc_clnt_calls(3N)
     clntperror              rpc_clnt_calls(3N)
     clntrawcreate          rpc_clnt_create(3N)
     clntspcreateerror       rpc_clnt_create(3N)
     clntsperrno             rpc_clnt_calls(3N)
     clntsperror             rpc_clnt_calls(3N)
     clnttlicreate          rpc_clnt_create(3N)
     clnttpcreate           rpc_clnt_create(3N)
     clntvccreate           rpc_clnt_create(3N)
     rpcbroadcast            rpc_clnt_calls(3N)
     rpccall                 rpc_clnt_calls(3N)
     rpcreg                  rpc_svc_calls(3N)
     svccreate               rpc_svc_create(3N)
     svcdestroy              rpc_svc_create(3N)
     svcdgcreate            rpc_svc_create(3N)
     svcfdcreate            rpc_svc_create(3N)
     svcfreeargs             rpc_svc_reg(3N)
     svcgetargs              rpc_svc_reg(3N)
     svcgetreqset            rpc_svc_reg(3N)
     svcgetrpccaller         rpc_svc_reg(3N)
     svcrawcreate           rpc_svc_create(3N)
     svcreg                  rpc_svc_calls(3N)




Seite 6                      Reliant UNIX 5.44               Gedruckt 11/98

rpc(3N)                                                             rpc(3N)

     svcrun                  rpc_svc_reg(3N)
     svcsendreply            rpc_svc_reg(3N)
     svctlicreate           rpc_svc_create(3N)
     svctpcreate            rpc_svc_create(3N)
     svcunreg                rpc_svc_calls(3N)
     svcvccreate            rpc_svc_create(3N)
     svcerrauth              rpc_svc_err(3N)
     svcerrdecode            rpc_svc_err(3N)
     svcerrnoproc            rpc_svc_err(3N)
     svcerrnoprog            rpc_svc_err(3N)
     svcerrprogvers          rpc_svc_err(3N)
     svcerrsystemerr         rpc_svc_err(3N)
     svcerrweakauth          rpc_svc_err(3N)
     xdracceptedreply       rpc_xdr(3N)
     xdrauthsysparms        rpc_xdr(3N)
     xdrcallhdr              rpc_xdr(3N)
     xdrcallmsg              rpc_xdr(3N)
     xdropaqueauth          rpc_xdr(3N)
     xdrrejectedreply       rpc_xdr(3N)
     xdrreplymsg             rpc_xdr(3N)
     xprtregister            rpc_svc_calls(3N)
     xprtunregister          rpc_svc_calls(3N)

HINWEISE
     Wenn Sie eine der RPC-Funktionen verwenden, müssen Sie bei der Über-
     setzung die Bibliothek libnsl dazubinden (cc -lnsl).

DATEIEN
     /etc/netconfig

SIEHE AUCH
     getnetconfig(3N), getnetpath(3N), rpcclntauth(3N),
     rpcclntcalls(3N), rpcclntcreate(3N), rpcsvccalls(3N),
     rpcsvccreate(3N), rpcsvcerr(3N), rpcsvcreg(3N), rpcxdr(3N),
     rpcbind(3N), xdr(3N), netconfig(4), environ(5).



















Seite 7                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026