Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ rpcgen(1) — NEWS-os 5.0.1

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

cc(1)



rpcgen(1)                USER COMMANDS                  rpcgen(1)



NAME
     rpcgen - an RPC protocol compiler

SYNOPSIS
     rpcgen infile
     rpcgen [-Dname[=value]] [-T] [-K secs] infile
     rpcgen -c|-h|-l|-m|-t [-o outfile ] infile
     rpcgen -s nettype [-o outfile] infile
     rpcgen -n netid [-o outfile] infile

DESCRIPTION
     rpcgen is a tool that generates C code to implement  an  RPC
     protocol.   The  input  to rpcgen is a language similar to C
     known as RPC  Language  (Remote  Procedure  Call  Language).
     rpcgen  is  normally  used as in the first synopsis where it
     takes an input file and generates up to four  output  files.
     If  the infile is named proto.x, then rpcgen will generate a
     header  file  in  proto.h,  XDR  routines  in   protoxdr.c,
     server-side  stubs  in protosvc.c, and client-side stubs in
     protoclnt.c.  With the -T option, it will also generate the
     RPC  dispatch  table in prototbl.i.  The server created can
     be started both by the port monitors (for example, inetd  or
     listen) or by itself.  When it is started by a port monitor,
     it creates servers only for the transport for which the file
     descriptor  0 was passed.  The name of the transport must be
     specified  by  setting   up   the   environmental   variable
     PMTRANSPORT.   When  the server generated by rpcgen is exe-
     cuted, it creates server  handles  for  all  the  transports
     specified  in  NETPATH  environment  variable,  or  if it is
     unset, it creates server handles for all the  visible  tran-
     sports  from /etc/netconfig file.  Note:  the transports are
     chosen at run time and not at compile time.  When the server
     is  self-started,  it backgrounds itself by default.  A spe-
     cial define symbol RPCSVCFG can be used to run the  server
     process in foreground.  The second synopsis provides special
     features which allow for the creation of more  sophisticated
     RPC  servers.   These features include support for user pro-
     vided #defines and RPC dispatch tables.  The entries in  the
     RPC dispatch table contain:
          ⊕  pointers to the  service  routine  corresponding  to
             that procedure,
          ⊕  a pointer to the input and output arguments
          ⊕  the size of these routines
     A server can use the dispatch table to  check  authorization
     and  then  to  execute the service routine; a client library
     may use it to deal with the details  of  storage  management
     and  XDR  data  conversion.   The other three synopses shown
     above are used when one does not want to  generate  all  the
     output  files,  but only a particular one.  Some examples of
     their usage is described in the EXAMPLE section below.  When
     rpcgen  is  executed  with the -s option, it creates servers
     for that particular class of transports.  When executed with



                                                                1





rpcgen(1)                USER COMMANDS                  rpcgen(1)



     the  -n option, it creates a server for the transport speci-
     fied by netid.  If infile is not specified,  rpcgen  accepts
     the  standard input.  The C preprocessor, cc -E [see cc(1)],
     is run on the input file before it is  actually  interpreted
     by  rpcgen.   For each type of output file, rpcgen defines a
     special preprocessor symbol for use by the  rpcgen  program-
     mer:
     RPCHDR     defined when compiling into header files
     RPCXDR     defined when compiling into XDR routines
     RPCSVC     defined when compiling into server-side stubs
     RPCCLNT    defined when compiling into client-side stubs
     RPCTBL     defined when compiling into RPC dispatch  tables
                 Any  line  beginning with `%' is passed directly
                 into the output file, uninterpreted  by  rpcgen.
                 For  every  data  type  referred  to  in infile,
                 rpcgen assumes that there exists a routine  with
                 the  string  xdr  prepended  to the name of the
                 data type.  If this routine does  not  exist  in
                 the  RPC/XDR library, it must be provided.  Pro-
                 viding an undefined data type allows  customiza-
                 tion of XDR routines.
                 The following options are available:

     -c          Compile into XDR routines.

     -Dname[=value]
                 Define a symbol name.  Equivalent to the #define
                 directive  in the source.  If no value is given,
                 value is defined  as  1.   This  option  may  be
                 specified more than once.

     -h          Compile into C data-definitions (a header file).
                 -T  option can be used in conjunction to produce
                 a  header  file  which  supports  RPC   dispatch
                 tables.

     -K secs     By default, services created using  rpcgen  wait
                 120  seconds  after  servicing  a request before
                 exiting.  That interval can be changed using the
                 -K  flag.  To create a server that exits immedi-
                 ately upon servicing  a  request,  -K 0  can  be
                 used.   To create a server that never exits, the
                 appropriate argument is -K -1.

                 When monitoring for a server, some portmonitors,
                 like  listen(1M),  always spawn a new process in
                 response to a service request.  If it  is  known
                 that  a server will be used with such a monitor,
                 the server should exit  immediately  on  comple-
                 tion.   For  such servers, rpcgen should be used
                 with -K -1.




                                                                2





rpcgen(1)                USER COMMANDS                  rpcgen(1)



     -l          Compile into client-side stubs.

     -m          Compile into server-side stubs, but do not  gen-
                 erate a main routine.  This option is useful for
                 doing callback-routines and for users  who  need
                 to  write their own main routine to do initiali-
                 zation.

     -n netid    Compile into server-side stubs for the transport
                 specified  by  netid.   There should be an entry
                 for  netid  in  the  netconfig  database.   This
                 option may be specified more than once, so as to
                 compile a  server  that  serves  multiple  tran-
                 sports.

     -o outfile  Specify the name of the output file.  If none is
                 specified,  standard output is used (-c, -h, -l,
                 -m, -n, -s and -t modes only).

     -s nettype  Compile into server-side stubs for all the tran-
                 sports belonging to the class nettype.  The sup-
                 ported classes are netpath, visible,  circuitn,
                 circuitv,  datagramn, datagramv, tcp, and udp
                 [see rpc(3N) for the  meanings  associated  with
                 these  classes].   This  option may be specified
                 more  than  once.   Note:   the  transports  are
                 chosen at run time and not at compile time.

     -t          Compile into RPC dispatch table.

     -T          Generate  the  code  to  support  RPC   dispatch
                 tables.   The  options -c, -h, -l, -m, -s and -t
                 are used exclusively to  generate  a  particular
                 type  of  file,  while the options -D and -T are
                 global and can be used with the other options.

NOTES
     The RPC Language does not support nesting of structures.  As
     a  work-around, structures can be declared at the top-level,
     and their name used inside  other  structures  in  order  to
     achieve  the same effect.  Name clashes can occur when using
     program definitions, since the  apparent  scoping  does  not
     really apply.  Most of these can be avoided by giving unique
     names for programs, versions,  procedures  and  types.   The
     server code generated with -n option refers to the transport
     indicated by netid and hence is very site specific.

EXAMPLE
     The following example:

          $ rpcgen  -T  prot.x  generates  all  the  five  files:
          prot.h,   protclnt.c,   protsvc.c,   protxdr.c   and



                                                                3





rpcgen(1)                USER COMMANDS                  rpcgen(1)



          prottbl.i.  The following example sends  the  C  data-
          definitions (header file) to the standard output.

          $ rpcgen -h prot.x To send  the  test  version  of  the
          -DTEST, server side stubs for all the transport belong-
          ing to the class datagramn to standard output, use:

          $ rpcgen -s datagramn  -DTEST  prot.x  To  create  the
          server  side stubs for the transport indicated by netid
          tcp, use:

          $ rpcgen -n tcp -o protsvc.c prot.x

SEE ALSO
     cc(1).








































                                                                4



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