Man page - rpc(3)

Packages contains this manual

Available languages:

en fr es ja ru

Manual

rpc

NOM
BIBLIOTHÈQUE
SYNOPSIS ET DESCRIPTION
ATTRIBUTS
VOIR AUSSI
TRADUCTION

NOM

rpc - BibliothÚque de fonctions pour les appels de procédures à distance

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

SYNOPSIS ET DESCRIPTION

Ces routines permettent Ă  des programmes C de faire des appels de procĂ©dures vers d’autres machines Ă  travers le rĂ©seau. D’abord, le client invoque une procĂ©dure pour envoyer un paquet de donnĂ©es vers le serveur. À la rĂ©ception du paquet, le serveur appelle une routine de distribution pour exĂ©cuter le service demandĂ©, et renvoyer une rĂ©ponse. Enfin, l’appel de procĂ©dure revient au client.

Pour utiliser ces routines, il faut inclure le fichier d’en-tĂȘtes <rpc/rpc.h> .

Le prototype ci-dessous utilise les types suivants :

typedef int bool_t ;

typedef bool_t (* xdrproc_t )(XDR *, void *, ...);

typedef bool_t (* resultproc_t )(caddr_t resp ,
struct sockaddr_in *
raddr );

Consultez les fichiers d’en-tĂȘte pour les dĂ©clarations des types AUTH , CLIENT , SVCXPRT et XDR .

void auth_destroy(AUTH * auth );

Cette macro dĂ©truit les informations d’authentification associĂ©e avec auth . La destruction implique gĂ©nĂ©ralement la dĂ©sallocation de donnĂ©es privĂ©es. Le comportement est indĂ©fini si on essaye d’utiliser auth aprĂšs avoir invoquĂ© auth_destroy ().

AUTH *authnone_create(void);

CrĂ©e et renvoie un descripteur d’authentification RPC transmettant avec chaque appel de procĂ©dure une information d’authentification nulle. C’est le comportement par dĂ©faut pour les RPC.

AUTH *authunix_create(char * host , uid_t uid , gid_t gid ,
int
len , gid_t aup_gids [. len ]);

CrĂ©e et renvoie un descripteur d’authentification RPC UNIX, contenant des informations d’identification. L’argument host est le nom de la machine sur laquelle l’information est créée. uid est l’identification de l’utilisateur. gid est l’identification du groupe de l’utilisateur. len et aup_gids concernent la table des groupes supplĂ©mentaires auxquels l’utilisateur appartient. On peut facilement se faire passer pour quelqu’un d’autre.

AUTH *authunix_create_default(void);

Appelle authunix_create () avec les arguments appropriés.

int callrpc(char * host , unsigned long prognum ,
unsigned long
versnum , unsigned long procnum ,
xdrproc_t
inproc , const char * in ,
xdrproc_t
outproc , char * out );

Appelle la procĂ©dure distante associĂ©e aux arguments prognum , versnum , et procnum sur la machine, host . L’argument in est l’adresse du ou des arguments d’entrĂ©e de la procĂ©dure, out celle de l’emplacement oĂč stocker le ou les rĂ©sultats, inproc sert Ă  encoder les paramĂštres d’entrĂ©e de la procĂ©dure, et outproc Ă  dĂ©coder les rĂ©sultats de la procĂ©dure. Cette routine renvoie zĂ©ro si elle rĂ©ussit, ou la valeur de enum clnt_stat transposĂ©e en un nombre entier si elle Ă©choue La routine clnt_perrno () permet de traduire les codes d’échec en messages.

Attention : l’appel d’une procĂ©dure distante avec cette routine emploie le protocole UDP/IP pour le transport, consultez clntudp_create () pour certaines restrictions. Vous n’avez aucun contrĂŽle sur le dĂ©lai maximal ou sur l’authentification avec cette routine.

enum clnt_stat clnt_broadcast(unsigned long prognum ,
unsigned long
versnum , unsigned long procnum ,
xdrproc_t
inproc , char * in ,
xdrproc_t
outproc , char * out ,
resultproc_t
eachresult );

Comme callrpc (), sauf que le message d’appel est diffusĂ© sur tous les rĂ©seaux connectĂ©s. À chaque rĂ©ception d’une rĂ©ponse, cette routine appelle la fonction eachresult (), dont la forme est :

eachresult(char * out , struct sockaddr_in * addr );

oĂč out est du mĂȘme type que le out passĂ© Ă  clnt_broadcast (), avec la diffĂ©rence que la sortie de la procĂ©dure distante est dĂ©codĂ©e ici. addr pointe vers l’adresse de la machine qui a envoyĂ© le rĂ©sultat. Si eachresult () renvoie zĂ©ro, clnt_broadcast () attend d’autres rĂ©ponses. Sinon elle revient avec le code de retour appropriĂ©.

Attention : les sockets broadcast sont limitĂ©s en ce qui concerne la taille maximale des donnĂ©es. Pour l’Ethernet, cette valeur (MTU) vaut 1500 octets.

enum clnt_stat clnt_call(CLIENT * clnt , unsigned long procnum ,
xdrproc_t
inproc , char * in ,
xdrproc_t
outproc , char * out ,
struct timeval
tout );

Une macro qui appelle la procĂ©dure distante procnum associĂ©e avec le descripteur de client clnt , qui est obtenu grĂące Ă  une routine de crĂ©ation de client RPC comme clnt_create (). L’argument in est l’adresse du ou des arguments d’entrĂ©e de la procĂ©dure, out celle de l’emplacement oĂč stocker le ou les rĂ©sultats, inproc sert Ă  encoder les paramĂštres d’entrĂ©e de la procĂ©dure, et outproc Ă  dĂ©coder les rĂ©sultats de la procĂ©dure. tout est le dĂ©lai maximal accordĂ© pour la rĂ©alisation de la procĂ©dure.

clnt_destroy(CLIENT * clnt );

Une macro qui dĂ©truit le descripteur de client RPC ce qui implique gĂ©nĂ©ralement la libĂ©ration de structures de donnĂ©es privĂ©es, y compris clnt lui-mĂȘme. Le comportement est indĂ©fini si on tente d’utiliser clnt aprĂšs avoir appelĂ© clnt_destroy (). Si la bibliothĂšque RPC avait ouvert le socket associĂ©, il sera Ă©galement fermĂ©. Sinon, le socket reste ouvert.

CLIENT *clnt_create(const char * host , unsigned long prog ,
unsigned long
vers , const char * proto );

Routine gĂ©nĂ©rique de crĂ©ation de client. host identifie le nom de l’hĂŽte distant oĂč se trouve le serveur. proto indique le type de protocole de transport Ă  employer. Les valeurs actuellement supportĂ©es pour ce champ sont « udp » et « tcp ». Des valeurs par dĂ©faut sont configurĂ©es pour les dĂ©lais, mais peuvent ĂȘtre modifiĂ©es Ă  l’aide de clnt_control ().

Attention : l’utilisation du protocole UDP a des inconvĂ©nients. Comme les messages RPC basĂ©s sur UDP ne peuvent contenir que 8 Ko de donnĂ©es encodĂ©es, ce protocole ne peut pas ĂȘtre utilisĂ© pour des procĂ©dures nĂ©cessitant de gros arguments ou renvoyant d’énormes rĂ©sultats.

bool_t clnt_control(CLIENT * cl , int req , char * info );

Une macro employĂ©e pour modifier ou rĂ©cupĂ©rer des informations diverses Ă  propos d’un objet client. req indique le type d’opĂ©ration, et info est un pointeur sur l’information. Pour UDP comme pour TCP, les valeurs autorisĂ©es pour req et le type des arguments sont :

CLSET_TIMEOUT struct timeval // définir le délai total
CLGET_TIMEOUT
struct timeval // lire le délai total

Note : Si vous définissez le délai avec clnt_control (), le dernier argument de clnt_call () sera ignoré lors des appels ultérieurs.

CLGET_SERVER_ADDR struct sockaddr_in
// lire l’adresse du serveur

Les opérations suivantes sont valides pour le protocole UDP seulement :

CLSET_RETRY_TIMEOUT struct timeval // définir le délai de répétition
CLGET_RETRY_TIMEOUT
struct timeval // lire le délai de répétition

Le dĂ©lai de rĂ©pĂ©tition est le temps pendant lequel les "RPC UDP" attendent une rĂ©ponse du serveur avant retransmettre la requĂȘte.

clnt_freeres(CLIENT * clnt , xdrproc_t outproc , char * out );

Une macro qui libĂšre toutes les donnĂ©es allouĂ©es par le systĂšme RPC/XDR lorsqu’il a dĂ©codĂ© les rĂ©sultats d’un appel RPC L’argument out est l’adresse des rĂ©sultats, et outproc est la routine XDR dĂ©codant les rĂ©sultats. Cette fonction renvoie 1 si les rĂ©sultats ont Ă©tĂ© correctement libĂ©rĂ©s, et zĂ©ro sinon.

void clnt_geterr(CLIENT * clnt , struct rpc_err * errp );

Une macro qui copie la structure d’erreur depuis le descripteur de client vers la structure se trouvant à l’adresse errp .

void clnt_pcreateerror(const char * s );

Affiche un message sur la sortie d’erreur standard, indiquant pourquoi un descripteur de client RPC ne peut pas ĂȘtre créé. Ce message est prĂ©fixĂ© avec la chaĂźne s et un deux-points est insĂ©rĂ©. À utiliser lorsque les appels clnt_create (), clntraw_create (), clnttcp_create () ou clntudp_create () Ă©chouent.

void clnt_perrno(enum clnt_stat stat );

Affiche un message sur la sortie d’erreur standard, correspondant Ă  la condition indiquĂ©e par stat . À utiliser aprĂšs callrpc ().

clnt_perror(CLIENT * clnt , const char * s );

Affiche un message sur la sortie d’erreur standard indiquant pourquoi un appel RPC a Ă©chouĂ©. clnt est le descripteur utilisĂ© pour l’appel. Ce message est prĂ©fixĂ© avec la chaĂźne s et un deux-points est insĂ©rĂ©. À utiliser aprĂšs clnt_call ().

char *clnt_spcreateerror(const char * s );

Comme clnt_pcreateerror (), sauf qu’il renvoie une chaĂźne au lieu d’écrire sur la sortie d’erreur standard.

Danger : renvoie un pointeur vers une zone de donnée statique, écrasée à chaque appel.

char *clnt_sperrno(enum clnt_stat stat );

Emploie les mĂȘme arguments que clnt_perrno (), mais au lieu d’envoyer un message sur la sortie d’erreur standard indiquant pourquoi un appel RPC a Ă©chouĂ©, renvoie un pointeur sur une chaĂźne contenant le message. La chaĂźne se termine par un NEWLINE.

clnt_sperrno () est utilisĂ©e Ă  la place de clnt_perrno () si le programme n’a pas de sortie d’erreur standard (un serveur par exemple n’en a gĂ©nĂ©ralement pas), ou si le programmeur ne veut pas que le message soit affichĂ© avec printf (3), ou si un format de message diffĂ©rent de celui fourni par clnt_perrno () doit ĂȘtre utilisĂ©. Note : contrairement Ă  clnt_sperror () et clnt_spcreaterror (), clnt_sperrno () renvoie un pointeur sur une zone de donnĂ©e statique, mais le rĂ©sultat ne sera pas Ă©crasĂ© Ă  chaque appel.

char *clnt_sperror(CLIENT * rpch , const char * s );

Comme clnt_perror (), sauf que (comme clnt_sperrno ()) il renvoie une chaĂźne au lieu d’écrire sur la sortie d’erreur standard.

Danger : renvoie un pointeur vers une zone de donnée statique, écrasée à chaque appel.

CLIENT *clntraw_create(unsigned long prognum , unsigned long versnum );

Cette routine crĂ©e un simili client RPC pour le programme distant prognum , de version versnum . Le mĂ©canisme de transport pour les messages est en rĂ©alitĂ© un tampon dans l’espace d’adresse du processus, ainsi le serveur RPC doit se trouver dans le mĂȘme espace d’adresse. Consultez svcraw_create (). Cela permet de simuler une RPC et de mesurer la surcharge des procĂ©dures RPC comme les temps d’aller-retour sans interfĂ©rence due au noyau. Cette routine renvoie NULL si elle Ă©choue.

CLIENT *clnttcp_create(struct sockaddr_in * addr ,
unsigned long
prognum , unsigned long versnum ,
int *
sockp , unsigned int sendsz , unsigned int recvsz );

Cette routine crĂ©e un client RPC pour le programme distant prognum , de version versnum ; Le client utilise TCP/IP pour le transport. Le programme distant se trouve Ă  l’adresse Internet *addr . Si addr->sin_port vaut zĂ©ro, alors il est rempli avec le numĂ©ro de port sur lequel le programme distant est en Ă©coute (on consulte le service portmap distant pour obtenir cette information). L’argument sockp est un socket ; si c’est RPC_ANYSOCK , alors la routine ouvre un nouveau socket et remplit sockp . Comme les RPC basĂ©es sur TCP utilisent des entrĂ©es-sorties avec tampons, l’utilisateur peut spĂ©cifier la taille des tampons d’entrĂ©e et de sortie avec les paramĂštres sendsz et recvsz . Des valeurs nulles rĂ©clament l’utilisation de tampons de tailles optimales. Cette routine renvoie NULL si elle Ă©choue.

CLIENT *clntudp_create(struct sockaddr_in * addr ,
unsigned long
prognum , unsigned long versnum ,
struct timeval
wait , int * sockp );

Cette routine crĂ©e un client RPC pour le programme distant prognum , de version versnum ; Le client utilise UDP/IP pour le transport. Le programme distant se trouve Ă  l’adresse Internet addr . Si addr->sin_port vaut zĂ©ro, alors il est rempli avec le numĂ©ro de port sur lequel le programme distant est en Ă©coute (on consulte le service portmap distant pour obtenir cette information). L’argument sockp est un socket ; si c’est RPC_ANYSOCK , alors la routine ouvre un nouveau socket et remplit sockp . Le protocole de transport UDP renvoie le message d’appel avec un intervalle de temps indiquĂ© par wait () jusqu’à la rĂ©ception d’une rĂ©ponse ou jusqu’au dĂ©passement du temps maximal. Ce dĂ©lai total pour l’appel est spĂ©cifiĂ© par la fonction clnt_call ().

Attention : comme les messages des RPC basĂ©es sur UDP ne peuvent contenir que 8 Ko de donnĂ©es encodĂ©es, ce protocole ne peut pas ĂȘtre utilisĂ© pour des procĂ©dures nĂ©cessitant de gros arguments, ou renvoyant d’énormes rĂ©sultats.

CLIENT *clntudp_bufcreate(struct sockaddr_in * addr ,
unsigned long
prognum , unsigned long versnum ,
struct timeval
wait , int * sockp ,
unsigned int
sendsize , unsigned int recosize );

Cette routine crĂ©e un client RPC pour le programme distant prognum , de version versnum ; Le client utilise UDP/IP pour le transport. Le programme distant se trouve Ă  l’adresse Internet addr . Si addr->sin_port vaut zĂ©ro, alors il est rempli avec le numĂ©ro de port sur lequel le programme distant est en Ă©coute (on consulte le service portmap distant pour obtenir cette information). L’argument sockp est un socket ; si c’est RPC_ANYSOCK , alors la routine ouvre une nouveau socket et remplit sockp . Le protocole de transport UDP renvoie le message d’appel avec un intervalle de temps indiquĂ© par wait () jusqu’à la rĂ©ception d’une rĂ©ponse ou jusqu’au dĂ©passement du temps maximal. Ce dĂ©lai total pour l’appel est spĂ©cifiĂ© par la fonction clnt_call ().

Cette routine permet au programmeur de préciser la taille maximale des tampons en émission et réception pour les messages RPC basés sur UDP.

void get_myaddress(struct sockaddr_in * addr );

Fournit l’adresse IP de la machine dans la structure *addr , sans consulter les routines de bibliothĂšques qui manipulent /etc/hosts . Le numĂ©ro de port est toujours rempli avec htons(PMAPPORT) .

struct pmaplist *pmap_getmaps(struct sockaddr_in * addr );

Une interface utilisateur pour le service portmap renvoyant une liste des associations en cours entre programmes RPC et ports sur l’hĂŽte situĂ© Ă  l’adresse IP indiquĂ©e dans *addr . Cette routine peut renvoyer NULL. La commande « rpcinfo -p » utilise cette fonction

unsigned short pmap_getport(struct sockaddr_in * addr ,
unsigned long
prognum , unsigned long versnum ,
unsigned int
protocol );

Une interface utilisateur pour le service portmap qui renvoie le numĂ©ro de port sur lequel est en Ă©coute le service associĂ© au programme numĂ©ro prognum , de version versnum , en utilisant le protocole de transport associĂ© avec protocol . La valeur de l’argument protocol est normalement IPPROTO_UDP ou IPPROTO_TCP . Une valeur de retour nulle signifie qu’aucune association n’existe ou qu’une erreur du systĂšme RPC s’est produite en tentant de contacter le service portmap distant. Dans ce cas, la variable globale rpc_createerr contient le code RPC de l’erreur.

enum clnt_stat pmap_rmtcall(struct sockaddr_in * addr ,
unsigned long
prognum , unsigned long versnum ,
unsigned long
procnum ,
xdrproc_t
inproc , char * in ,
xdrproc_t
outproc , char * out ,
struct timeval
tout , unsigned long * portp );

Une interface utilisateur pour le service portmap qui demande au programme portmap sur l’hĂŽte se trouvant Ă  l’adresse IP indiquĂ©e dans *addr de faire en notre nom un appel RPC pour une procĂ©dure se trouvant sur cet hĂŽte. Le paramĂštre *portp sera modifiĂ© pour contenir le numĂ©ro de port du programme si la procĂ©dure rĂ©ussit. Les dĂ©finitions des autres arguments sont prĂ©sentĂ©es Ă  propos de callrpc () et de clnt_call (). Cette procĂ©dure devrait ĂȘtre utilisĂ©e pour faire un « ping » et rien d’autre. Consultez aussi clnt_broadcast ().

bool_t pmap_set(unsigned long prognum , unsigned long versnum ,
int
protocol , unsigned short port );

Une interface utilisateur pour le service portmap qui établit une association entre le triplet [ prognum , versnum , protocol ] et le port sur la machine du service portmap La valeur du protocol est normalement IPPROTO_UDP ou IPPROTO_TCP . Cette routine renvoie 1 si elle réussit, et zéro sinon. Elle est automatiquement invoquée par svc_register ().

bool_t pmap_unset(unsigned long prognum , unsigned long versnum );

Une interface utilisateur vers le service portmap qui dĂ©truit toute association entre le triplet [ prognum , versnum , * ] et les ports de la machine oĂč se trouve le service portmap . Cette routine renvoie 1 si elle rĂ©ussit, et zĂ©ro sinon.

int registerrpc(unsigned long prognum , unsigned long versnum ,
unsigned long
procnum , char *(* procname )(char *),
xdrproc_t
inproc , xdrproc_t outproc );

Enregistre la procĂ©dure procname avec le service RPC. Si une requĂȘte arrive pour le programme prognum , de version versnum , et pour la procĂ©dure procnum , procname sera appelĂ©e avec un pointeur vers ses paramĂštres d’entrĂ©e. progname doit renvoyer un pointeur vers ses rĂ©sultats statiques. inproc est utilisĂ©e pour dĂ©coder les paramĂštres d’entrĂ©e alors que outproc sert Ă  encode les rĂ©sultats. Cette routine renvoie zĂ©ro si l’enregistrement Ă  rĂ©ussi, et -1 sinon.

Attention : les procédures enregistrées de cette maniÚre sont accessibles avec le protocole de transport UDP/IP. Consultez svcudp_create () pour ses restrictions.

struct rpc_createerr rpc_createerr ;

Une variable globale dont la valeur est dĂ©finie par toute routine SM RPC de crĂ©ation de client qui Ă©choue. Utilisez la routine clnt_pcreateerror () pour afficher la raison de l’échec.

void svc_destroy(SVCXPRT * xprt );

Une macro qui dĂ©truit le descripteur de transport RPC xprt . La destruction implique normalement la libĂ©ration de structures de donnĂ©es privĂ©es, y compris xprt lui-mĂȘme. Le comportement est indĂ©fini si on essaye d’utiliser xprt aprĂšs avoir appelĂ© cette routine.

fd_set svc_fdset ;

Une variable globale reprĂ©sentant le masque de bits des descripteurs de fichier en lecture du cĂŽtĂ© serveur RPC. Elle est utilisable avec l’appel systĂšme select (2). Ce n’est intĂ©ressant que si l’implĂ©mentation d’un service assure son propre traitement d’évĂ©nements asynchrones, au lieu d’appeler svc_run (). Cette variable est en lecture seule (ne passez pas son adresse Ă  select (2) !), et elle peut changer aprĂšs un appel svc_getreqset () ou une routine de crĂ©ation.

int svc_fds ;

Similaire à svc_fdset , mais limitée à 32 descripteurs de fichier. Cette interface est rendue obsolÚte par svc_fdset .

svc_freeargs(SVCXPRT * xprt , xdrproc_t inproc , char * in );

Une macro qui libĂšre toutes les donnĂ©es allouĂ©es par le systĂšme RPC/XDR lorsqu’il dĂ©code les arguments d’une procĂ©dure de service avec svc_getargs (). Cette routine renvoie 1 si les arguments ont Ă©tĂ© correctement libĂ©rĂ©s, et zĂ©ro sinon.

svc_getargs(SVCXPRT * xprt , xdrproc_t inproc , char * in );

Une macro qui dĂ©code les arguments d’une requĂȘte RPC associĂ©e avec le descripteur de transport RPC xprt . L’argument in est l’adresse oĂč les arguments seront stockĂ©s, inproc est la routine XDR pour dĂ©coder les arguments. Cette routine renvoie 1 si le dĂ©codage rĂ©ussit, et zĂ©ro sinon.

struct sockaddr_in *svc_getcaller(SVCXPRT * xprt );

La maniĂšre correcte d’obtenir l’adresse rĂ©seau de l’appelant d’une procĂ©dure associĂ©e avec le descripteur de transport RPC xprt .

void svc_getreqset(fd_set * rdfds );

Cette routine n’est intĂ©ressante que si l’implĂ©mentation d’un service n’appelle pas svc_run (), mais emploie Ă  la place un traitement personnalisĂ© des Ă©vĂ©nements asynchrones. On l’invoque lorsque l’appel systĂšme select (2) a dĂ©terminĂ© qu’une requĂȘte RPC est arrivĂ©e sur l’une des sockets RPC. rdfds est le masque de bits des descripteurs de fichier en rĂ©sultant. La routine revient lorsque tous les sockets associĂ©s avec les valeurs de rdfds ont Ă©tĂ© servis.

void svc_getreq(int rdfds );

Similaire à svc_getreqset (), mais limitée à 32 descripteurs de fichier. Cette interface est rendue obsolÚte par svc_getreqset ().

bool_t svc_register(SVCXPRT * xprt , unsigned long prognum ,
unsigned long
versnum ,
void (*
dispatch )(struct svc_req *, SVCXPRT *),
unsigned long
protocol );

Associer prognum et versnum avec la procĂ©dure de distribution dispatch . Si protocol vaut zĂ©ro, le service n’est pas enregistrĂ© avec le service portmap . Si protocol est non-nul, alors l’association entre le triplet [ prognum , versnum , protocol ] et xprt->xp_port est Ă©tablie par l’intermĂ©diaire du service portmap local (en gĂ©nĂ©ral protocol vaut zĂ©ro, IPPROTO_UDP ou IPPROTO_TCP ). La procĂ©dure dispatch a la forme suivante

dispatch(struct svc_req *request, SVCXPRT *xprt);

La routine svc_register () renvoie 1 si elle réussit et 0 sinon.

void svc_run(void);

Cette routine ne revient jamais. Elle attend l’arrivĂ©e de requĂȘtes RPC et appelle les procĂ©dures de service appropriĂ©es en utilisant svc_getreq (). Cette procĂ©dure est la plupart du temps en attente autour d’un appel systĂšme select (2).

bool_t svc_sendreply(SVCXPRT * xprt , xdrproc_t outproc , char * out );

AppelĂ©e par une routine de distribution de services RPC pour envoyer le rĂ©sultat d’un appel de procĂ©dure distante. L’argument xprt est le descripteur de transport associĂ© Ă  la requĂȘte, outproc est la routine XDR utilisĂ©e pour encoder les rĂ©sultats, et out est l’adresse des rĂ©sultats. Cette routine renvoie 1 si elle rĂ©ussit, et 0 sinon.

void svc_unregister(unsigned long prognum , unsigned long versnum );

Supprimer toute association du doublet [ prognum , versnum ] vers les routines de distribution, et du triplet [ prognum , versnum , * ] vers le numéro de port.

void svcerr_auth(SVCXPRT * xprt , enum auth_stat why );

AppelĂ©e par une routine de distribution de service qui refuse d’exĂ©cuter un appel de procĂ©dure distante Ă  cause d’une erreur d’authentification.

void svcerr_decode(SVCXPRT * xprt );

AppelĂ©e par une routine de distribution de service qui n’arrive pas Ă  dĂ©coder ses arguments. Consultez aussi svc_getargs ().

void svcerr_noproc(SVCXPRT * xprt );

AppelĂ©e par une routine de distribution de service qui n’implĂ©mente pas le numĂ©ro de procĂ©dure que l’appelant rĂ©clame.

void svcerr_noprog(SVCXPRT * xprt );

AppelĂ©e quand le programme dĂ©sirĂ© n’est pas enregistrĂ© dans le service RPC. L’implĂ©mentation d’un service n’a normalement pas besoin de cette routine.

void svcerr_progvers(SVCXPRT * xprt , unsigned long low_vers ,
unsigned long
high_vers );

AppelĂ©e quand le numĂ©ro de version du programme dĂ©sirĂ© n’est pas enregistrĂ© dans le service RPC. L’implĂ©mentation d’un service n’a normalement pas besoin de cette routine.

void svcerr_systemerr(SVCXPRT * xprt );

AppelĂ©e par une routine de distribution de service lorsqu’elle dĂ©tecte une erreur systĂšme non couverte par un protocole. Par exemple, si un service ne peut plus allouer de place, il peut appeler cette routine.

void svcerr_weakauth(SVCXPRT * xprt );

AppelĂ©e par une routine de distribution de service qui refuse d’exĂ©cuter un appel de procĂ©dure distante Ă  cause d’un manque de paramĂštres d’authentification. La routine appelle svcerr_auth(xprt, AUTH_TOOWEAK) .

SVCXPRT *svcfd_create(int fd , unsigned int sendsize ,
unsigned int
recvsize );

CrĂ©er un service au-dessus de n’importe quel descripteur ouvert. Typiquement ce descripteur de fichier est un socket connectĂ© pour un protocole de flux comme TCP. sendsize et recvsize indiquent les tailles pour les tampons d’émission et de rĂ©ception. Si ces tailles valent zĂ©ro, une valeur optimale est choisie.

SVCXPRT *svcraw_create(void);

Cette routine crĂ©e un simili transport de service RPC vers lequel il renvoie un pointeur. Le transport est en fait un tampon au sein de l’espace d’adressage du processus. Le client RPC correspondant doit donc rĂ©sider dans le mĂȘme espace d’adresse. Consultez clntraw_create (). Cela permet de simuler une RPC et de mesurer la surcharge des procĂ©dures RPC comme les temps d’aller-retour sans interfĂ©rence due au noyau. Cette routine renvoie NULL si elle Ă©choue.

SVCXPRT *svctcp_create(int sock , unsigned int send_buf_size ,
unsigned int
recv_buf_size );

Cette routine crĂ©e un transport de service RPC basĂ© sur TCP/IP sur lequel elle renvoie un pointeur. Il est associĂ© avec le socket sock , qui peut ĂȘtre RPC_ANYSOCK , auquel cas un nouveau socket est créé. Si le socket n’est pas associĂ© Ă  un port TCP local, cette routine l’associe Ă  un port quelconque. AprĂšs rĂ©ussite, xprt->xp_sock est le descripteur du socket de transport, et xprt->xp_port est le numĂ©ro de port. Cette routine renvoie NULL si elle Ă©choue. Comme les RPC basĂ©e sur TCP utilisent des entrĂ©es-sorties avec tampon, les utilisateurs peuvent dĂ©finir la taille des tampons. Une taille nulle implique l’allocation automatique de tampons de tailles optimales.

SVCXPRT *svcudp_bufcreate(int sock , unsigned int sendsize ,
unsigned int
recosize );

Cette routine crĂ©e un transport de service RPC basĂ© sur UDP/IP et renvoie un pointeur dessus. Le transport est associĂ© avec le socket sock , qui peut ĂȘtre RPC_ANYSOCK , auquel cas un nouveau socket est créé. Si le socket n’est pas associĂ© Ă  un port UDP local, cette routine l’associe Ă  un port quelconque. AprĂšs rĂ©ussite, xprt->xp_sock est le descripteur de transport, et xprt->xp_port est le numĂ©ro de port. Cette routine renvoie NULL si elle Ă©choue.

Cette routine permet au programmeur de préciser la taille maximale des tampons en émission et réception pour les messages RPC basés sur UDP.

SVCXPRT *svcudp_create(int sock );

Cet appel est équivalent à svcudp_bufcreate(sock,SZ,SZ) avec une taille SZ par défaut.

bool_t xdr_accepted_reply(XDR * xdrs , struct accepted_reply * ar );

Utilisée pour encoder les messages de réponse RPC. Cette routine est utile pour les programmeurs qui désirent engendrer des messages de style RPC sans employer le service RPC complet.

bool_t xdr_authunix_parms(XDR * xdrs , struct authunix_parms * aupp );

UtilisĂ©e pour dĂ©crire les identitĂ©s UNIX. Cette routine est utile pour les programmeurs qui veulent engendrer ces identitĂ©s sans utiliser le systĂšme RPC d’authentification.

void xdr_callhdr(XDR * xdrs , struct rpc_msg * chdr );

UtilisĂ©e pour crĂ©er les en-tĂȘtes de message RPC. Cette routine est utile pour les programmeurs qui dĂ©sirent engendrer des messages de style RPC sans employer le service RPC complet.

bool_t xdr_callmsg(XDR * xdrs , struct rpc_msg * cmsg );

UtilisĂ©e pour crĂ©er les messages d’appel RPC. Cette routine est utile pour les programmeurs qui dĂ©sirent engendrer des messages de style RPC sans employer le service RPC complet.

bool_t xdr_opaque_auth(XDR * xdrs , struct opaque_auth * ap );

UtilisĂ©e pour crĂ©er les informations d’authentification RPC. Cette routine est utile pour les programmeurs qui dĂ©sirent engendrer des messages de style RPC sans employer le service RPC complet.

bool_t xdr_pmap(XDR * xdrs , struct pmap * regs );

UtilisĂ©e pour crĂ©er les paramĂštres des divers procĂ©dures portmap . Cette routine est utile pour les programmeurs qui dĂ©sirent crĂ©er ces paramĂštres sans utiliser l’interface pmap .

bool_t xdr_pmaplist(XDR * xdrs , struct pmaplist ** rp );

UtilisĂ©e pour crĂ©er la liste des associations des ports. Cette routine est utile pour les programmeurs qui dĂ©sirent crĂ©er ces paramĂštres sans utiliser l’interface pmap .

bool_t xdr_rejected_reply(XDR * xdrs , struct rejected_reply * rr );

Utilisée pour créer les messages de rejet RPC. Cette routine est utile pour les programmeurs qui désirent engendrer des messages de style RPC sans employer le service RPC complet.

bool_t xdr_replymsg(XDR * xdrs , struct rpc_msg * rmsg );

Utilisée pour créer les messages de réponse RPC. Cette routine est utile pour les programmeurs qui désirent engendrer des messages de style RPC sans employer le service RPC complet.

void xprt_register(SVCXPRT * xprt );

AprĂšs la crĂ©ation d’un descripteur RPC de transport, il doit ĂȘtre enregistrĂ© dans le service RPC. Cette routine modifie la variable globale svc_fds . L’implĂ©mentation d’un service ne nĂ©cessite pas cette routine habituellement.

void xprt_unregister(SVCXPRT * xprt );

Avant qu’un descripteur RPC de transport soit dĂ©truit, il doit se dĂ©sinscrire du service RPC. Cette routine modifie la variable globale svc_fds . L’implĂ©mentation d’un service ne nĂ©cessite pas cette routine habituellement.

ATTRIBUTS

Pour une explication des termes utilisés dans cette section, consulter attributes (7).

Image grohtml-3893855-1.png

VOIR AUSSI

xdr (3)

Les manuels suivants :

Remote Procedure Calls: Protocol Specification
Remote Procedure Call Programming Guide
rpcgen Programming Guide

RPC: Remote Procedure Call Protocol Specification , RFC 1050, Sun Microsystems, Inc., USC-ISI.

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .