|
|
1.1 root 1: .H A "Synopsis of RPC Routines"
2: .SH
3: auth_destroy()
4: .LP
5: .LS
6: void
7: auth_destroy(auth)
8: AUTH *auth;
9: .LE
10: A macro that destroys the authentication information associated with
11: .L auth .
12: Destruction usually involves deallocation
13: of private data structures. The use of
14: .L auth
15: is undefined after calling
16: .L auth_destroy() .
17: .SH
18: authnone_create()
19: .LP
20: .LS
21: AUTH *
22: authnone_create()
23: .LE
24: Creates and returns an RPC authentication handle that passes no
25: usable authentication information with each remote procedure call.
26: .SH
27: authunix_create()
28: .LP
29: .LS
30: AUTH *
31: authunix_create(host, uid, gid, len, aup_gids)
32: char *host;
33: int uid, gid, len, *aup_gids;
34: .LE
35: Creates and returns an RPC authentication handle that contains
36: .UX
37: authentication information.
38: The parameter
39: .L host
40: is the name of the machine on which the information was created;
41: .L uid
42: is the user's user ID;
43: .L gid
44: is the user's current group ID;
45: .L len
46: and
47: .L aup_gids
48: refer to a counted array of groups to which the user belongs.
49: It is easy to impersonate a user.
50: .SH
51: authunix_create_default()
52: .LP
53: .LS
54: AUTH *
55: authunix_create_default()
56: .LE
57: Calls
58: .L authunix_create()
59: with the appropriate parameters.
60: .SH
61: callrpc()
62: .LP
63: .LS
64: callrpc(host, prognum, versnum, procnum, inproc, in, outproc, out)
65: char *host;
66: u_long prognum, versnum, procnum;
67: char *in, *out;
68: xdrproc_t inproc, outproc;
69: .LE
70: Calls the remote procedure associated with
71: .L prognum ,
72: .L versnum ,
73: and
74: .L procnum
75: on the machine,
76: .L host .
77: The parameter
78: .L in
79: is the address of the procedure's argument(s), and
80: .L out
81: is the address of where to place the result(s);
82: .L inproc
83: is used to encode the procedure's parameters, and
84: .L outproc
85: is used to decode the procedure's results.
86: This routine returns zero if it succeeds, or the value of
87: .L "enum clnt_stat"
88: cast to an integer if it fails.
89: The routine
90: .L clnt_perrno()
91: is handy for translating failure statuses into messages.
92: Warning: calling remote procedures with this routine
93: uses UDP/IP as a transport; see
94: .L clntudp_create()
95: for restrictions.
96: .SH
97: clnt_broadcast()
98: .LP
99: .LS
100: enum clnt_stat
101: clnt_broadcast(prognum, versnum, procnum, inproc, in, outproc, out, eachresult)
102: u_long prognum, versnum, procnum;
103: char *in, *out;
104: xdrproc_t inproc, outproc;
105: resultproc_t eachresult;
106: .LE
107: Like
108: .L callrpc() ,
109: except the call message is broadcast to all locally connected broadcast nets.
110: Each time it receives a response, this routine calls
111: .L eachresult ,
112: whose form is
113: .LS
114: eachresult(out, addr)
115: char *out;
116: struct sockaddr_in *addr;
117: .LE
118: where
119: .L out
120: is the same as
121: .L out
122: passed to
123: .L clnt_broadcast() ,
124: except that the remote procedure's output is decoded there;
125: .L addr
126: points to the address of the machine that sent the results. If
127: .L eachresult()
128: returns zero,
129: .L clnt_broadcast()
130: waits for more replies;
131: otherwise it returns with appropriate status.
132: .SH
133: clnt_call()
134: .LP
135: .LS
136: enum clnt_stat
137: clnt_call(clnt, procnum, inproc, in, outproc, out, tout)
138: CLIENT *clnt; long procnum;
139: xdrproc_t inproc, outproc;
140: char *in, *out;
141: struct timeval tout;
142: .LE
143: A macro that calls the remote procedure
144: .L procnum
145: associated with the client handle,
146: .L clnt ,
147: which is obtained with an RPC client creation routine such as
148: .L clntudp_create .
149: The parameter
150: .L in
151: is the address of the procedure's argument(s), and
152: .L out
153: is the address of where to place the result(s);
154: .L inproc
155: is used to encode the procedure's parameters, and
156: .L outproc
157: is used to decode the procedure's results;
158: .L tout
159: is the time allowed for results to come back.
160: .SH
161: clnt_destroy()
162: .LP
163: .LS
164: clnt_destroy(clnt)
165: CLIENT *clnt;
166: .LE
167: A macro that destroys the client's RPC handle.
168: Destruction usually involves deallocation
169: of private data structures, including
170: .L clnt
171: itself. Use of
172: .L clnt
173: is undefined after calling
174: .L clnt_destroy() .
175: Warning: client destruction routines do not close sockets associated with
176: .L clnt ;
177: this is the responsibility of the user.
178: .SH
179: clnt_freeres()
180: .LP
181: .LS
182: clnt_freeres(clnt, outproc, out)
183: CLIENT *clnt;
184: xdrproc_t outproc;
185: char *out;
186: .LE
187: A macro that frees any data allocated by the RPC/XDR system
188: when it decoded the results of an RPC call.
189: The parameter
190: .L out
191: is the address of the results, and
192: .L outproc
193: is the XDR routine describing the results in simple primitives.
194: This routine returns one if the results were successfully freed,
195: and zero otherwise.
196: .SH
197: clnt_geterr()
198: .LP
199: .LS
200: void
201: clnt_geterr(clnt, errp)
202: CLIENT *clnt;
203: struct rpc_err *errp;
204: .LE
205: A macro that copies the error structure out of the client handle
206: to the structure at address
207: .L errp .
208: .SH
209: clnt_pcreateerror()
210: .LP
211: .LS
212: void
213: clnt_pcreateerror(s)
214: char *s;
215: .LE
216: Prints a message to standard error indicating
217: why a client RPC handle could not be created.
218: The message is prepended with string
219: .L s
220: and a colon.
221: .SH
222: clnt_perrno()
223: .LP
224: .LS
225: void
226: clnt_perrno(stat)
227: enum clnt_stat;
228: .LE
229: Prints a message to standard error corresponding
230: to the condition indicated by
231: .L stat .
232: .SH
233: clnt_perror()
234: .LP
235: .LS
236: clnt_perror(clnt, s)
237: CLIENT *clnt;
238: char *s;
239: .LE
240: Prints a message to standard error indicating why an RPC call failed;
241: .L clnt
242: is the handle used to do the call.
243: The message is prepended with string
244: .L s
245: and a colon.
246: .SH
247: clntraw_create()
248: .LP
249: .LS
250: CLIENT *
251: clntraw_create(prognum, versnum)
252: u_long prognum, versnum;
253: .LE
254: This routine creates a toy RPC client for the remote program
255: .L prognum ,
256: version
257: .L versnum .
258: The transport used to pass messages to the service
259: is actually a buffer within the process's address space,
260: so the corresponding RPC server should live in the same address space; see
261: .L svcraw_create() .
262: This allows simulation of RPC and acquisition of RPC overheads,
263: such as round trip times, without any kernel interference.
264: This routine returns NULL if it fails.
265: .SH
266: clnttcp_create()
267: .LP
268: .LS
269: CLIENT *
270: clnttcp_create(addr, prognum, versnum, sockp, sendsz, recvsz)
271: struct sockaddr_in *addr;
272: u_long prognum, versnum;
273: int *sockp;
274: u_int sendsz, recvsz;
275: .LE
276: This routine creates an RPC client for the remote program
277: .L prognum ,
278: version
279: .L versnum ;
280: the client uses TCP/IP as a transport.
281: The remote program is located at Internet address
282: .L *addr .
283: If
284: .L addr->sin_port
285: is zero, then it is set to the actual port that the remote
286: program is listening on (the remote
287: .I portmap
288: service is consulted for this information).
289: The parameter
290: .L *sockp
291: is a socket; if it is RPC_ANYSOCK, then
292: this routine opens a new one and sets
293: .L *sockp .
294: Since TCP-based RPC uses buffered I/O, the user may specify
295: the size of the send and receive buffers with the parameters
296: .L sendsz
297: and
298: .L recvsz ;
299: values of zero choose suitable defaults.
300: This routine returns NULL if it fails.
301: .SH
302: clntudp_create()
303: .LP
304: .LS
305: CLIENT *
306: clntudp_create(addr, prognum, versnum, wait, sockp)
307: struct sockaddr_in *addr;
308: u_long prognum, versnum;
309: struct timeval wait;
310: int *sockp;
311: .LE
312: This routine creates an RPC client for the remote program
313: .L prognum ,
314: version
315: .L versnum ;
316: the client uses use UDP/IP as a transport.
317: The remote program is located at Internet address
318: .L *addr .
319: If
320: .L addr->sin_port
321: is zero, then it is set to actual port that the remote
322: program is listening on (the remote
323: .I portmap
324: service is consulted for this information).
325: The parameter
326: .L *sockp
327: is a socket; if it is RPC_ANYSOCK,
328: then this routine opens a new one and sets
329: .L *sockp .
330: The UDP transport resends the call message in intervals of
331: .L wait
332: time until a response is received or until the call times out.
333: Warning: since UDP-based RPC messages can only hold up to 8 Kbytes
334: of encoded data, this transport cannot be used for procedures
335: that take large arguments or return huge results.
336: .SH
337: get_myaddress()
338: .LP
339: .LS
340: void
341: get_myaddress(addr)
342: struct sockaddr_in *addr;
343: .LE
344: Stuffs the machine's IP address into
345: .L *addr ,
346: without consulting the library routines that deal with
347: .I /etc/hosts .
348: The port number is always set to
349: .L htons(PMAPPORT) .
350: .SH
351: pmap_getmaps()
352: .LP
353: .LS
354: struct pmaplist *
355: pmap_getmaps(addr)
356: struct sockaddr_in *addr;
357: .LE
358: A user interface to the
359: .I portmap
360: service, which returns a list of the current RPC program-to-port mappings
361: on the host located at IP address
362: .L *addr .
363: This routine can return NULL. The command
364: .L "rpcinfo -p"
365: uses this routine.
366: .SH
367: pmap_getport()
368: .LP
369: .LS
370: u_short
371: pmap_getport(addr, prognum, versnum, protocol)
372: struct sockaddr_in *addr;
373: u_long prognum, versnum, protocol;
374: .LE
375: A user interface to the
376: .I portmap
377: service, which returns the port number
378: on which waits a service that supports program number
379: .L prognum ,
380: version
381: .L versnum ,
382: and speaks the transport protocol associated with protocol.
383: A return value of zero means that the mapping does not exist or that
384: the RPC system failured to contact the remote
385: .I portmap
386: service. In the latter case, the global variable
387: .L rpc_createerr
388: contains the RPC status.
389: .SH
390: pmap_rmtcall()
391: .LP
392: .LS
393: enum clnt_stat
394: pmap_rmtcall(addr, prognum, versnum, procnum,
395: inproc, in, outproc, out, tout, portp)
396: struct sockaddr_in *addr;
397: u_long prognum, versnum, procnum;
398: char *in, *out;
399: xdrproc_t inproc, outproc;
400: struct timeval tout;
401: u_long *portp;
402: .LE
403: A user interface to the
404: .I portmap
405: service, which instructs
406: .I portmap
407: on the host at IP address
408: .L *addr
409: to make an RPC call on your behalf to a procedure on that host.
410: The parameter
411: .L *portp
412: will be modified to the program's port number if the procedure succeeds.
413: The definitions of other parameters are discussed in
414: .L callrpc()
415: and
416: .L clnt_call() ;
417: see also
418: .L clnt_broadcast() .
419: .SH
420: pmap_set()
421: .LP
422: .LS
423: pmap_set(prognum, versnum, protocol, port)
424: u_long prognum, versnum, protocol;
425: u_short port;
426: .LE
427: A user interface to the
428: .I portmap
429: service, which establishes a mapping between the triple
430: .L [prognum,versnum,protocol]
431: and
432: .L port
433: on the machine's
434: .I portmap
435: service. The value of protocol is most likely IPPROTO_UDP or IPPROTO_TCP.
436: This routine returns one if it succeeds, zero otherwise.
437: .SH
438: pmap_unset()
439: .LP
440: .LS
441: pmap_unset(prognum, versnum)
442: u_long prognum, versnum;
443: .LE
444: A user interface to the
445: .I portmap
446: service, which destroys all mappings between the triple
447: .L [prognum,versnum,*]
448: and
449: .L ports
450: on the machine's
451: .I portmap
452: service.
453: This routine returns one if it succeeds, zero otherwise.
454: .SH
455: registerrpc()
456: .LP
457: .LS
458: registerrpc(prognum, versnum, procnum, procname, inproc, outproc)
459: u_long prognum, versnum, procnum;
460: char *(*procname)();
461: xdrproc_t inproc, outproc;
462: .LE
463: Registers procedure
464: .L procname
465: with the RPC service package. If a request arrives for program
466: .L prognum ,
467: version
468: .L versnum ,
469: and procedure
470: .L procnum ,
471: .L procname
472: is called with a pointer to its parameter(s);
473: .L progname
474: should return a pointer to its static result(s);
475: .L inproc
476: is used to decode the parameters while
477: .L outproc
478: is used to encode the results.
479: This routine returns zero if the registration succeeded, \-1 otherwise.
480: Warning: remote procedures registered in this form
481: are accessed using the UDP/IP transport; see
482: .L svcudp_create()
483: for restrictions.
484: .SH
485: rpc_createerr
486: .LP
487: .LS
488: struct rpc_createerr rpc_createerr;
489: .LE
490: A global variable whose value is set by any RPC client creation routine
491: that does not succeed. Use the routine
492: .L clnt_pcreateerror()
493: to print the reason why.
494: .SH
495: svc_destroy()
496: .LP
497: .LS
498: svc_destroy(xprt)
499: SVCXPRT *xprt;
500: .LE
501: A macro that destroys the RPC service transport handle,
502: .L xprt .
503: Destruction usually involves deallocation
504: of private data structures, including
505: .L xprt
506: itself. Use of
507: .L xprt
508: is undefined after calling this routine.
509: .SH
510: svc_fds
511: .LP
512: .LS
513: int svc_fds;
514: .LE
515: A global variable reflecting the RPC service side's
516: read file descriptor bit mask; it is suitable as a parameter to the
517: .L select
518: system call. This is only of interest
519: if a service implementor does not call
520: .L svc_run() ,
521: but rather does his own asynchronous event processing.
522: This variable is read-only (do not pass its address to
523: .L select !),
524: yet it may change after calls to
525: .L svc_getreq()
526: or any creation routines.
527: .SH
528: svc_freeargs()
529: .LP
530: .LS
531: svc_freeargs(xprt, inproc, in)
532: SVCXPRT *xprt;
533: xdrproc_t inproc;
534: char *in;
535: .LE
536: A macro that frees any data allocated by the RPC/XDR system
537: when it decoded the arguments to a service procedure using
538: .L svc_getargs().
539: This routine returns one if the results were successfully freed,
540: and zero otherwise.
541: .SH
542: svc_getargs()
543: .LP
544: .LS
545: svc_getargs(xprt, inproc, in)
546: SVCXPRT *xprt;
547: xdrproc_t inproc;
548: char *in;
549: .LE
550: A macro that decodes the arguments of an RPC request
551: associated with the RPC service transport handle,
552: .L xprt .
553: The parameter
554: .L in
555: is the address where the arguments will be placed;
556: .L inproc
557: is the XDR routine used to decode the arguments.
558: This routine returns one if decoding succeeds, and zero otherwise.
559: .SH
560: svc_getcaller()
561: .LP
562: .LS
563: struct sockaddr_in
564: svc_getcaller(xprt)
565: SVCXPRT *xprt;
566: .LE
567: The approved way of getting the network address of the caller
568: of a procedure associated with the RPC service transport handle,
569: .L xprt .
570: .SH
571: svc_getreq()
572: .LP
573: .LS
574: svc_getreq(rdfds)
575: int rdfds;
576: .LE
577: This routine is only of interest if a service implementor does not call
578: .L svc_run() ,
579: but instead implements custom asynchronous event processing.
580: It is called when the
581: .L select
582: system call has determined that an RPC request
583: has arrived on some RPC socket(s);
584: .L rdfds
585: is the resultant read file descriptor bit mask.
586: The routine returns when all sockets associated with the value of
587: .L rdfds
588: have been serviced.
589: .SH
590: svc_register()
591: .LP
592: .LS
593: svc_register(xprt, prognum, versnum, dispatch, protocol)
594: SVCXPRT *xprt;
595: u_long prognum, versnum;
596: void (*dispatch)();
597: u_long protocol;
598: .LE
599: Associates
600: .L prognum
601: and
602: .L versnum
603: with the service dispatch procedure,
604: .L dispatch .
605: If
606: .L protocol
607: is non-zero, then a mapping of the triple
608: .L [prognum,versnum,protocol]
609: to
610: .L xprt->xp_port
611: is also established with the local
612: .I portmap
613: service (generally
614: .L protocol
615: is zero, IPPROTO_UDP or IPPROTO_TCP).
616: The procedure
617: .L dispatch()
618: has the following form:
619: .LS
620: dispatch(request, xprt)
621: struct svc_req *request;
622: SVCXPRT *xprt;
623: .LE
624: The
625: .L svc_register
626: routine returns one if it succeeds, and zero otherwise.
627: .SH
628: svc_run()
629: .LP
630: .LS
631: svc_run()
632: .LE
633: This routine never returns. It waits for RPC requests to arrive
634: and calls the appropriate service procedure (using
635: .L svc_getreq )
636: when one arrives. This procedure is usually waiting for a
637: .L select
638: system call to return.
639: .SH
640: svc_sendreply()
641: .LP
642: .LS
643: svc_sendreply(xprt, outproc, out)
644: SVCXPRT *xprt;
645: xdrproc_t outproc;
646: char *out;
647: .LE
648: Called by an RPC service's dispatch routine
649: to send the results of a remote procedure call.
650: The parameter
651: .L xprt
652: is the caller's associated transport handle;
653: .L outproc
654: is the XDR routine which is used to encode the results; and
655: .L out
656: is the address of the results.
657: This routine returns one if it succeeds, zero otherwise.
658: .SH
659: svc_unregister()
660: .LP
661: .LS
662: void
663: svc_unregister(prognum, versnum)
664: u_long prognum, versnum;
665: .LE
666: Removes all mapping of the double
667: .L [prognum,versnum]
668: to dispatch routines, and of the triple
669: .L [prognum,versnum,*]
670: to port number.
671: .SH
672: svcerr_auth()
673: .LP
674: .LS
675: void
676: svcerr_auth(xprt, why)
677: SVCXPRT *xprt;
678: enum auth_stat why;
679: .LE
680: Called by a service dispatch routine that refuses to perform
681: a remote procedure call due to an authentication error.
682: .SH
683: svcerr_decode()
684: .LP
685: .LS
686: void
687: svcerr_decode(xprt)
688: SVCXPRT *xprt;
689: .LE
690: Called by a service dispatch routine that can't successfully
691: decode its parameters. See also
692: .L svc_getargs() .
693: .SH
694: svcerr_noproc()
695: .LP
696: .LS
697: void
698: svcerr_noproc(xprt)
699: SVCXPRT *xprt;
700: .LE
701: Called by a service dispatch routine that doesn't implement
702: the desired procedure number the caller request.
703: .SH
704: svcerr_noprog()
705: .LP
706: .LS
707: void
708: svcerr_noprog(xprt)
709: SVCXPRT *xprt;
710: .LE
711: Called when the desired program is not registered with the RPC package.
712: Service implementors usually don't need this routine.
713: .SH
714: svcerr_progvers()
715: .LP
716: .LS
717: void
718: svcerr_progvers(xprt)
719: SVCXPRT *xprt;
720: .LE
721: Called when the desired version of a program is not registered
722: with the RPC package.
723: Service implementors usually don't need this routine.
724: .SH
725: svcerr_systemerr()
726: .LP
727: .LS
728: void
729: svcerr_systemerr(xprt)
730: SVCXPRT *xprt;
731: .LE
732: Called by a service dispatch routine when it detects a system error
733: not covered by any particular protocol.
734: For example, if a service can no longer allocate storage,
735: it may call this routine.
736: .SH
737: svcerr_weakauth()
738: .LP
739: .LS
740: void
741: svcerr_weakauth(xprt)
742: SVCXPRT *xprt;
743: .LE
744: Called by a service dispatch routine that refuses to perform
745: a remote procedure call due to insufficient (but correct)
746: authentication parameters. The routine calls
747: .L svcerr_auth(xprt,AUTH_TOOWEAK) .
748: .SH
749: svcraw_create()
750: .LP
751: .LS
752: SVCXPRT *
753: svcraw_create()
754: .LE
755: This routine creates a toy RPC service transport,
756: to which it returns a pointer. The transport
757: is really a buffer within the process's address space,
758: so the corresponding RPC client should live in the same address space; see
759: .L clntraw_create() .
760: This routine allows simulation of RPC and acquisition of RPC overheads
761: (such as round trip times), without any kernel interference.
762: This routine returns NULL if it fails.
763: .SH
764: svctcp_create()
765: .LP
766: .LS
767: SVCXPRT *
768: svctcp_create(sock, send_buf_size, recv_buf_size)
769: int sock;
770: u_int send_buf_size, recv_buf_size;
771: .LE
772: This routine creates a TCP/IP-based RPC service transport,
773: to which it returns a pointer.
774: The transport is associated with the socket
775: .L sock ,
776: which may be RPC_ANYSOCK, in which case a new socket is created.
777: If the socket is not bound to a local TCP port, then this routine
778: binds it to an arbitrary port. Upon completion,
779: .L xprt->xp_sock
780: is the transport's socket number, and
781: .L xprt->xp_port
782: is the transport's port number.
783: This routine returns NULL if it fails.
784: Since TCP-based RPC uses buffered I/O, users may specify the size of the
785: .L send
786: and
787: .L receive
788: buffers; values of zero choose suitable defaults.
789: .SH
790: svcudp_create()
791: .LP
792: .LS
793: SVCXPRT *
794: svcudp_create(sock)
795: int sock;
796: .LE
797: This routine creates a UDP/IP-based RPC service transport,
798: to which it returns a pointer.
799: The transport is associated with the socket
800: .L sock ,
801: which may be RPC_ANYSOCK, in which case a new socket is created.
802: If the socket is not bound to a local UDP port, then this routine
803: binds it to an arbitrary port. Upon completion,
804: .L xprt->xp_sock
805: is the transport's socket number, and
806: .L xprt->xp_port
807: is the transport's port number.
808: This routine returns NULL if it fails.
809: Warning: since UDP-based RPC messages can only hold up to 8 Kbytes
810: of encoded data, this transport cannot be used for procedures
811: that take large arguments or return huge results.
812: .SH
813: xdr_accepted_reply()
814: .LP
815: .LS
816: xdr_accepted_reply(xdrs, ar)
817: XDR *xdrs;
818: struct accepted_reply *ar;
819: .LE
820: Used for describing RPC messages, externally.
821: This routine is useful for users who wish to generate
822: RPC-style messages without using the RPC package.
823: .SH
824: xdr_array()
825: .LP
826: .LS
827: xdr_array(xdrs, arrp, sizep, maxsize, elsize, elproc)
828: XDR *xdrs;
829: char **arrp;
830: u_int *sizep, maxsize, elsize;
831: xdrproc_t elproc;
832: .LE
833: A filter primitive that translates between arrays
834: and their corresponding external representations.
835: The parameter
836: .L arrp
837: is the address of the pointer to the array, while
838: .L sizep
839: is the address of the element count of the array;
840: this element count cannot exceed
841: .L maxsize .
842: The parameter
843: .L elsize
844: is the
845: .L sizeof()
846: each of the array's elements, and
847: .L elproc
848: is an XDR filter that translates between
849: the array elements' C form, and their external representation.
850: This routine returns one if it succeeds, zero otherwise.
851: .SH
852: xdr_authunix_parms()
853: .LP
854: .LS
855: xdr_authunix_parms(xdrs, aupp)
856: XDR *xdrs;
857: struct authunix_parms *aupp;
858: .LE
859: Used for describing UNIX credentials, externally.
860: This routine is useful for users who wish to generate
861: these credentials without using the RPC authentication package.
862: .SH
863: xdr_bool()
864: .LP
865: .LS
866: xdr_bool(xdrs, bp)
867: XDR *xdrs;
868: bool_t *bp;
869: .LE
870: A filter primitive that translates between booleans (C integers)
871: and their external representations.
872: When encoding data, this filter produces values of either one or zero.
873: This routine returns one if it succeeds, zero otherwise.
874: .SH
875: xdr_bytes()
876: .LP
877: .LS
878: xdr_bytes(xdrs, sp, sizep, maxsize)
879: XDR *xdrs;
880: char **sp;
881: u_int *sizep, maxsize;
882: .LE
883: A filter primitive that translates between counted byte strings
884: and their external representations.
885: The parameter
886: .L sp
887: is the address of the string pointer.
888: The length of the string is located at address
889: .L sizep ;
890: strings cannot be longer than
891: .L maxsize .
892: This routine returns one if it succeeds, zero otherwise.
893: .SH
894: xdr_callhdr()
895: .LP
896: .LS
897: void
898: xdr_callhdr(xdrs, chdr)
899: XDR *xdrs;
900: struct rpc_msg *chdr;
901: .LE
902: Used for describing RPC messages, externally.
903: This routine is useful for users who wish to generate
904: RPC-style messages without using the RPC package.
905: .SH
906: xdr_callmsg()
907: .LP
908: .LS
909: xdr_callmsg(xdrs, cmsg)
910: XDR *xdrs;
911: struct rpc_msg *cmsg;
912: .LE
913: Used for describing RPC messages, externally.
914: This routine is useful for users who wish to generate
915: RPC-style messages without using the RPC package.
916: .SH
917: xdr_double()
918: .LP
919: .LS
920: xdr_double(xdrs, dp)
921: XDR *xdrs;
922: double *dp;
923: .LE
924: A filter primitive that translates between C
925: .L double
926: precision numbers and their external representations.
927: This routine returns one if it succeeds, zero otherwise.
928: .SH
929: xdr_enum()
930: .LP
931: .LS
932: xdr_enum(xdrs, ep)
933: XDR *xdrs;
934: enum_t *ep;
935: .LE
936: A filter primitive that translates between C
937: .L enum s
938: (actually integers) and their external representations.
939: This routine returns one if it succeeds, zero otherwise.
940: .SH
941: xdr_float()
942: .LP
943: .LS
944: xdr_float(xdrs, fp)
945: XDR *xdrs;
946: float *fp;
947: .LE
948: A filter primitive that translates between C
949: .L float s
950: and their external representations.
951: This routine returns one if it succeeds, zero otherwise.
952: .SH
953: xdr_inline()
954: .LP
955: .LS
956: long *
957: xdr_inline(xdrs, len)
958: XDR *xdrs;
959: int len;
960: .LE
961: A macro that invokes the in-line routine associated with the XDR stream,
962: .L xdrs .
963: The routine returns a pointer
964: to a contiguous piece of the stream's buffer;
965: .L len
966: is the byte length of the desired buffer.
967: Note that pointer is cast to
968: .L "long *" .
969: Warning:
970: .L xdr_inline()
971: may return 0 (NULL) if it cannot allocate
972: a contiguous piece of a buffer.
973: Therefore the behavior may vary among stream instances;
974: it exists for the sake of efficiency.
975: .SH
976: xdr_int()
977: .LP
978: .LS
979: xdr_int(xdrs, ip)
980: XDR *xdrs;
981: int *ip;
982: .LE
983: A filter primitive that translates between C integers
984: and their external representations.
985: This routine returns one if it succeeds, zero otherwise.
986: .SH
987: xdr_long()
988: .LP
989: .LS
990: xdr_long(xdrs, lp)
991: XDR *xdrs;
992: long *lp;
993: .LE
994: A filter primitive that translates between C
995: .L long
996: integers and their external representations.
997: This routine returns one if it succeeds, zero otherwise.
998: .SH
999: xdr_opaque()
1000: .LP
1001: .LS
1002: xdr_opaque(xdrs, cp, cnt)
1003: XDR *xdrs;
1004: char *cp;
1005: u_int cnt;
1006: .LE
1007: A filter primitive that translates between fixed size opaque data
1008: and its external representation.
1009: The parameter
1010: .L cp
1011: is the address of the opaque object, and
1012: .L cnt
1013: is its size in bytes.
1014: This routine returns one if it succeeds, zero otherwise.
1015: .SH
1016: xdr_opaque_auth()
1017: .LP
1018: .LS
1019: xdr_opaque_auth(xdrs, ap)
1020: XDR *xdrs;
1021: struct opaque_auth *ap;
1022: .LE
1023: Used for describing RPC messages, externally.
1024: This routine is useful for users who wish to generate
1025: RPC-style messages without using the RPC package.
1026: .SH
1027: xdr_pmap()
1028: .LP
1029: .LS
1030: xdr_pmap(xdrs, regs)
1031: XDR *xdrs;
1032: struct pmap *regs;
1033: .LE
1034: Used for describing parameters to various
1035: .I portmap
1036: procedures, externally.
1037: This routine is useful for users who wish to generate
1038: these parameters without using the
1039: .L pmap
1040: interface.
1041: .SH
1042: xdr_pmaplist()
1043: .LP
1044: .LS
1045: xdr_pmaplist(xdrs, rp)
1046: XDR *xdrs;
1047: struct pmaplist **rp;
1048: .LE
1049: Used for describing a list of port mappings, externally.
1050: This routine is useful for users who wish to generate
1051: these parameters without using the
1052: .L pmap
1053: interface.
1054: .SH
1055: xdr_reference()
1056: .LP
1057: .LS
1058: xdr_reference(xdrs, pp, size, proc)
1059: XDR *xdrs;
1060: char **pp;
1061: u_int size;
1062: xdrproc_t proc;
1063: .LE
1064: A primitive that provides pointer chasing within structures.
1065: The parameter
1066: .L pp
1067: is the address of the pointer;
1068: .L size
1069: is the
1070: .L sizeof()
1071: the structure that
1072: .L *pp
1073: points to; and
1074: .L proc
1075: is an XDR procedure that filters the structure
1076: between its C form and its external representation.
1077: This routine returns one if it succeeds, zero otherwise.
1078: .SH
1079: xdr_rejected_reply()
1080: .LP
1081: .LS
1082: xdr_rejected_reply(xdrs, rr)
1083: XDR *xdrs;
1084: struct rejected_reply *rr;
1085: .LE
1086: Used for describing RPC messages, externally.
1087: This routine is useful for users who wish to generate
1088: RPC-style messages without using the RPC package.
1089: .SH
1090: xdr_replymsg()
1091: .LP
1092: .LS
1093: xdr_replymsg(xdrs, rmsg)
1094: XDR *xdrs;
1095: struct rpc_msg *rmsg;
1096: .LE
1097: Used for describing RPC messages, externally.
1098: This routine is useful for users who wish to generate
1099: RPC style messages without using the RPC package.
1100: .SH
1101: xdr_short()
1102: .LP
1103: .LS
1104: xdr_short(xdrs, sp)
1105: XDR *xdrs;
1106: short *sp;
1107: .LE
1108: A filter primitive that translates between C
1109: .L short
1110: integers and their external representations.
1111: This routine returns one if it succeeds, zero otherwise.
1112: .SH
1113: xdr_string()
1114: .LP
1115: .LS
1116: xdr_string(xdrs, sp, maxsize)
1117: XDR *xdrs;
1118: char **sp;
1119: u_int maxsize;
1120: .LE
1121: A filter primitive that translates between C strings and their
1122: corresponding external representations.
1123: Strings cannot cannot be longer than
1124: .L maxsize .
1125: Note that
1126: .L sp
1127: is the address of the string's pointer.
1128: This routine returns one if it succeeds, zero otherwise.
1129: .SH
1130: xdr_u_int()
1131: .LP
1132: .LS
1133: xdr_u_int(xdrs, up)
1134: XDR *xdrs;
1135: unsigned *up;
1136: .LE
1137: A filter primitive that translates between C
1138: .L unsigned
1139: integers and their external representations.
1140: This routine returns one if it succeeds, zero otherwise.
1141: .SH
1142: xdr_u_long()
1143: .LP
1144: .LS
1145: xdr_u_long(xdrs, ulp)
1146: XDR *xdrs;
1147: unsigned long *ulp;
1148: .LE
1149: A filter primitive that translates between C
1150: .L "unsigned long"
1151: integers and their external representations.
1152: This routine returns one if it succeeds, zero otherwise.
1153: .SH
1154: xdr_u_short()
1155: .LP
1156: .LS
1157: xdr_u_short(xdrs, usp)
1158: XDR *xdrs;
1159: unsigned short *usp;
1160: .LE
1161: A filter primitive that translates between C
1162: .L "unsigned short"
1163: integers and their external representations.
1164: This routine returns one if it succeeds, zero otherwise.
1165: .SH
1166: xdr_union()
1167: .LP
1168: .LS
1169: xdr_union(xdrs, dscmp, unp, choices, dfault)
1170: XDR *xdrs;
1171: int *dscmp;
1172: char *unp;
1173: struct xdr_discrim *choices;
1174: xdrproc_t dfault;
1175: .LE
1176: A filter primitive that translates between a discriminated C
1177: .L union
1178: and its corresponding external representation. The parameter
1179: .L dscmp
1180: is the address of the union's discriminant, while
1181: .L unp
1182: in the address of the union.
1183: This routine returns one if it succeeds, zero otherwise.
1184: .SH
1185: xdr_void()
1186: .LP
1187: .LS
1188: xdr_void()
1189: .LE
1190: This routine always returns one.
1191: .SH
1192: xdr_wrapstring()
1193: .LP
1194: .LS
1195: xdr_wrapstring(xdrs, sp)
1196: XDR *xdrs;
1197: char **sp;
1198: .LE
1199: A primitive that calls
1200: .L xdr_string(xdrs,sp,MAXUNSIGNED);
1201: where MAXUNSIGNED is the maximum value of an unsigned integer.
1202: This is handy because the RPC package passes
1203: only two parameters XDR routines, whereas
1204: .L xdr_string() ,
1205: one of the most frequently used primitives, requires three parameters.
1206: This routine returns one if it succeeds, zero otherwise.
1207: .SH
1208: xprt_register()
1209: .LP
1210: .LS
1211: void
1212: xprt_register(xprt)
1213: SVCXPRT *xprt;
1214: .LE
1215: After RPC service transport handles are created,
1216: they should register themselves with the RPC service package.
1217: This routine modifies the global variable
1218: .L svc_fds .
1219: Service implementors usually don't need this routine.
1220: .SH
1221: xprt_unregister()
1222: .LP
1223: .LS
1224: void
1225: xprt_unregister(xprt)
1226: SVCXPRT *xprt;
1227: .LE
1228: Before an RPC service transport handle is destroyed,
1229: it should unregister itself with the RPC service package.
1230: This routine modifies the global variable
1231: .L svc_fds .
1232: Service implementors usually don't need this routine.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.