XDR External Data Representation Process A Process B
XDR External Data Representation Process A Process B XDR Encode/Decode Transport 1
XDR as a case study Sun RPC uses XDR. n A good example of a “layer”. n Interesting API. n Powerful paradigm for creation of complex data structures. n 2
XDR n XDR provides a service associated with the OSI Presentation Layer. – Common data representation – Library (not part of the O. S. ). – Easy to port to new architectures. – Independence from transport layer. 3
Data Conversion n Asymmetric Data Conversion – client always converts to the server’s data representation. n Symmetric Data Conversion – both client and server convert to some standard representation. 4
XDR Data Types boolean n char n short n int n long n float n double n enumeration n structure n string n fixed length array (1 -D) n variable length array (1 -D) n union n opaque data n 5
Implicit vs. Explicit Typing means that each piece of data includes information about the type. n Implicit typing means that the sender and receiver must agree on the order and type of all data. n XDR uses Implicit Typing n 6
XDR Programming Most XDR implementations are based on a buffer paradigm. n A buffer is allocated that is large enough to hold an entire message. n Individual data items are added to the buffer one at a time. n XDR buffers can be attached to a file, pipe, socket or memory. n 7
Conversion Terminology Converting from local representation to XDR representation is called Encoding. n Converting from XDR representation to local representation is called Decoding. n Sender ENCODE XDR DECODE Receiver 8
XDR Buffer Creation n There a number of buffer creation functions in the XDR library. – xdrmem_create » destination for encoding -or- source for decoding is a chunk of memory. – xdrstdio_create » destination for encoding -or- source for decoding is a file descriptor. 9
XDR filters The XDR library includes an extensive set of filters that perform encoding/decoding operations. n Each XDR stream includes an attribute that determines the specific operation that will be performed by a filter (encoding or decoding). n 10
XDR Filters n The filter to encode/decode an integer is called xdr_int: bool_t xdr_int( XDR *xdrs, int *ip); the return value indicates success or failure. n xdrs is a pointer to an XDR stream n ip is a pointer to an integer. n 11
xdr_int() n If the XDR stream operation is XDR_ENCODE int count; XDR *xstream; xdr_int(xstream, &count); will convert (encode) the value of count to the integer representation used by XDR (bigendian) and put the result on the XDR stream. 12
xdr_int() n If the XDR stream operation is XDR_DECODE int count; XDR *xstream; xdr_int(xstream, &count); will get an XDR integer from the stream, convert (decode) the value to local integer representation and put the result in count. 13
xdr_int() Source Encodes int count; xdr_int(xstream, &count); Destintation decodes int count; xdr_int(xstream, &count); 14
Complex Data Filters The XDR library includes a set of filters designed to translate complex C data structures to and from XDR representation. n Many of these filters make use of the simpler filters to convert individual components. n 15
xdr_array() n The xdr_array() filter provides support for encoding/decoding a variable length array. bool_t xdr_array( XDR *xdrs, char *arrp, u_int *sizep, u_int maxsize, u_int elsize, xdrproc_t elproc); � sizep is a pointer to the size of the array. elsize is the size of each element (in bytes). elproc is a pointer to a function that can encode/decode individual array elements. 16
xdr_array() Source Array -> 0 1 2 3 elproc() Destination Array -> 0 1 2 3 17
Inside xdr_array() xdr_int(xdrs, &sizep); encode/decode the number of elements in the array for (i=0; i<sizep; i++) elproc(xdrs, arrp+elsize*i); encode/decode each array element. 18
xdr_string() n the string conversion filter is a little different since XDR strings have a maximum size. bool_t xdr_string( XDR *xdrs, char *string, u_int maxsize); 19
Problem!! n We want to send an array of strings between processes. n What is the problem (using xdr_array)? n What is a possible solution? 20
Distributed Program Design l a c i p y T kets n Communication-Oriented Design Soc roach p p – Design protocol first. A – Build programs that adhere to the protocol. n Application-Oriented Design C P R – Build application(s). – Divide programs up and add communication protocols. 21
RPC Remote Procedure Call a procedure (subroutine) that is running on another machine. n Issues: n – identifying and accessing the remote procedure – parameters – return value 22
Server Client blah, blah bar = foo(a, b); blah, blah pro l o c to int foo(int x, int y ) { if (x>100) return(y-2); else if (x>10) return(y-x); else return(x+y); } 23
Sun RPC There a number of popular RPC specifications. n Sun RPC (ONC RPC) is widely used. n NFS (Network File System) is RPC based. n Rich set of support tools. n 24
Sun RPC Organization Remote Program Shared Global Data Procedure 1 Procedure 2 Procedure 3 25
Procedure Arguments To reduce the complexity of interface specification Sun RPC includes support for a single argument to a remote procedure. * n Typically the single argument is a structure that contains a number of values. n n * Newer versions can handle multiple args. 26
Procedure Identification n Each procedure is identified by: – Hostname (IP Address) – Program identifier (32 bit integer) – Procedure identifier (32 bit integer) 27
Procedure Identification n Each procedure is identified by: – Hostname (IP Address) – Program identifier (32 bit integer) – Procedure identifier (32 bit integer) – Program Version identifier » for testing and migration. 28
Program Identifiers Each remote program has a unique ID. n Sun divided up the IDs: 0 x 0000 - 0 x 1 fffffff Sun 0 x 20000000 - 0 x 3 fffffff Sys Admin 0 x 40000000 - 0 x 5 fffffff Transient 0 x 60000000 - 0 xffff Reserved n 29
Procedure Identifiers & Program Version Numbers n Procedure Identifiers usually start at 1 and are numbered sequentially n Version Numbers typically start at 1 and are numbered sequentially. 30
Iterative Server Sun RPC specifies that at most one remote procedure within a program can be invoked at any given time. n If a 2 nd procedure is called the caller blocks until the 1 st procedure has completed. n This is useful for applications that may share data among procedures. n Example: database - to avoid insert/delete/modify collisions. n 31
Communication Semantics To act like a local procedure (exactly one invocation per call) - a reliable transport (TCP) is necessary. n Sun RPC does not support reliable call semantics. n At Least Once Semantics If the procedure returns n Zero or More Semantics No reply n 32
Dynamic Port Mapping Servers typically do not use well known protocol ports. n Clients known the Program ID (and host). n A port lookup service runs on each host that contains RPC servers. n RPC servers register themselves with the port mapper n 33
The portmapper Each system which will support RPC servers runs a port mapper server that provides a central registry for RPC services. n Servers tell the port mapper what services they offer. n Clients ask a remote port mapper for the port number corresponsing to Remote Program ID. n 34
More on the portmapper The portmapper is itself an RPC server! n The portmapper is available on a wellknown port (111). n 35
Sun RPC Programming The RPC library is a collection of tools for automating the creation of RPC clients and servers. n RPC clients are processes that call remote procedures. n RPC servers are processes that include procedure(s) that can be called by clients. n 36
RPC Programming n RPC library – XDR routines – RPC run time library » call rpc service » register with portmapper » dispatch incoming request to correct procedure – Program Generator 37
RPC Run-time Library High- and Low-level functions that can be used by clients and servers. n High-level functions provide simple access to RPC services. n 38
High-level Client Library int callrpc( char *host, u_long prognum, u_long versnum, u_long procnum, xdrproc_t inproc, char *in, xdrproc_t outproc, char *out); 39
High-Level Server Library int registerrpc( u_long prognum, u_long versnum, u_long procnum, char *(*procname)() xdrproc_t inproc, xdrproc_t outproc); 40
High-Level Server Library (cont. ) void svc_run(); svc_run() is a dispatcher. n A dispatcher waits for incoming connections and invokes the appropriate function to handle each incoming request. n 41
High-Level Library Limitation The High-Level RPC library calls support UDP only (no TCP). n You must use lower-level RPC library functions to use TCP. n The High-Level library calls do not support any kind of authentication. n 42
Low-level RPC Library n Full control over all IPC options – TCP & UDP – Timeout values – Asynchronous procedure calls Multi-tasking Servers n Broadcasting n 43
RPCGEN There is a tool for automating the creation of RPC clients and servers. n The program rpcgen does most of the work for you. n The input to rpcgen is a protocol definition in the form of a list of remote procedures and parameter types. n 44
RPCGEN Input File Protocol Description rpcgen Client Stubs XDR filters header file Server skeleton C Source Code 45
rpcgen Output Files > rpcgen foo. x foo_clnt. c (client stubs) foo_svc. c (server main) foo_xdr. c (xdr filters) foo. h (shared header file) 46
Client Creation > gcc -o fooclient foomain. c foo_clnt. c foo_xdr. c foomain. c is the client main() (and possibly other function) that call rpc services via the client stub functions in foo_clnt. c n The client stubs use the xdr functions. n 47
Server Creation gcc -o fooserver fooservices. c foo_svc. c foo_xdr. c n fooservices. c contains the definitions of the actual remote procedures. 48
Example Protocol Definition struct twonums { int a; int b; }; program UIDPROG { version UIDVERS { int RGETUID(string<20>) = 1; string RGETLOGIN( int ) = 2; int RADD(twonums) = 3; �� } = 1; } = 0 x 20000001; 49
50
- Slides: 50