Sun RPC (Remote Procedure Call) je Sun a nyní RFC 1831 middleware pro komunikaci pomocí vzdáleného volání, původně navržený pro podporu NFS. Definuje jazyk pro popis rozhraní a formát kódování dat, dohromady označovaný jako XDR (External Data Representation). XDR je založený na C syntaxi, příklady lze zpravidla najít v /usr/include/rpcsvc/*.x.
const MNTPATHLEN = 1024; /* maximum bytes in a pathname argument */ const MNTNAMLEN = 255; /* maximum bytes in a name argument */ const FHSIZE = 32; /* size in bytes of a file handle */ typedef opaque fhandle [FHSIZE]; typedef string name <MNTNAMLEN>; typedef string dirpath <MNTPATHLEN>; union fhstatus switch (unsigned fhs_status) { case 0: fhandle fhs_fhandle; default: void; }; typedef struct mountbody *mountlist; struct mountbody { name ml_hostname; dirpath ml_directory; mountlist ml_next; }; typedef struct groupnode *groups; struct groupnode { name gr_name; groups gr_next; }; typedef struct exportnode *exports; struct exportnode { dirpath ex_dir; groups ex_groups; exports ex_next; }; program MOUNTPROG { version MOUNTVERS { void MOUNTPROC_NULL (void) = 0; fhstatus MOUNTPROC_MNT (dirpath) = 1; mountlist MOUNTPROC_DUMP (void) = 2; void MOUNTPROC_UMNT (dirpath) = 3; void MOUNTPROC_UMNTALL (void) = 4; exports MOUNTPROC_EXPORT (void) = 5; exports MOUNTPROC_EXPORTALL (void) = 6; } = 1; } = 100005;
Každá RPC procedura je identifikována jednoznačným číslem služby, číslem verze a číslem procedury. Jejich právě nainstalovaný seznam lze vypsat.
> rpcinfo -p program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100011 1 udp 892 rquotad 100011 2 udp 892 rquotad 100011 1 tcp 895 rquotad 100011 2 tcp 895 rquotad 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100021 1 udp 39968 nlockmgr 100021 3 udp 39968 nlockmgr 100021 4 udp 39968 nlockmgr 100005 1 udp 39969 mountd 100005 1 tcp 45529 mountd 100005 2 udp 39969 mountd 100005 2 tcp 45529 mountd 100005 3 udp 39969 mountd 100005 3 tcp 45529 mountd 100024 1 udp 39970 status 100024 1 tcp 45530 status 391002 2 tcp 45533 sgi_fam
Z XDR popisu se vygenerují stuby a skeletony zpravidla pomocí utility nazývané rpcgen, ze souboru foo tak vznikne foo.h s definicemi typů a funkcí, foo_svc.c jako server side stub, foo_clnt.c jako client side stub, foo_xdr.c jako marshalling code, s parametrem -a také foo_server.c jako sample server code a foo_client.c jako sample client code a Makefile.foo jako sample makefile.
Co se runtime týče, klient se dotáže portmapperu, default na localhost, na port, na kterém běží požadované číslo služby a číslo verze. Servery se u portmapperu registrují při spuštění, pohoda.