Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ netdir(3n) — NEWS-os 5.0.1

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

getnetpath(3N)



netdir(3N)              LIBRARY FUNCTIONS              netdir(3N)



NAME
     netdir_getbyname,       netdir_getbyaddr,       netdir_free,
     netdir_mergeaddr,
     taddr2uaddr, uaddr2taddr - generic transport name-to-address
     translation

SYNOPSIS
     #include <netdir.h>
     int
     netdir_getbyname(config, service, addrs)
          struct netconfig  *config;
          struct nd_hostserv  *service;
          struct nd_addrlist  **addrs;
     int
     netdir_getbyaddr(config, service, netaddr)
          struct netconfig  *config;
          struct nd_hostservlist  **service;
          struct netbuf  *netaddr;
     void
     netdir_free(ptr, ident)
          void *ptr;
          int ident;
     int
     netdir_mergeaddr(config, mrg_uaddr, s_uaddr, c_uaddr)
          struct netconfig  *config;
          char  **mrg_uaddr, *s_uaddr, *c_uaddr;
     char *
     taddr2uaddr(config, addr)
          struct netconfig  *config;
          struct netbuf  *addr;
     struct netbuf *
     uaddr2taddr(config, uaddr)
          struct netconfig  *config;
          char  *uaddr;
     netdir_options(struct netconfig *netconfigp, int option,
          int fd, char *pointer_to_args);

DESCRIPTION
     These routines provide  a  generic  interface  for  name-to-
     address  mapping  that will work with a all transport proto-
     cols. This interface provides a generic way for programs  to
     convert  transport specific addresses into common structures
     and back again.

     The netdirgetbyname() routine maps  the  machine  name  and
     service name in the ndhostserv structure to a collection of
     addresses of the type understood by the transport identified
     in  the  netconfig  structure.   This  routine  returns  all
     addresses  that  are  valid  for  that  transport   in   the
     ndaddrlist  structure.   The  ndhostserv  and  ndaddrlist
     structures  have  the  following  elements.   The  netconfig
     structure is described on the netconfig(4) manual page.



                                                                1





netdir(3N)              LIBRARY FUNCTIONS              netdir(3N)



          struct nd_addrlist
               int n_cnt
               struct netbuf  *n_addrs;
          struct nd_hostserv
               char  *h_host;
               char  *h_serv;

     netdirgetbyname() accepts  some  special-case  host  names.
     These  host  names  are hints to the underlying mapping rou-
     tines that define the intent of the request.  This  informa-
     tion  is  required for some transport provider developers to
     provide the correct information back  to  the  caller.   The
     host   names  are  defined  in  /usr/include/netdir.h.   The
     currently defined host names are:

     HOSTSELF   Represents the address to which  local  programs
                 will  bind  their  endpoints.  HOSTSELF differs
                 from the host name provided  by  gethostname(3),
                 which  represents  the  address  to which remote
                 programs will bind their endpoints.

     HOSTANY    Represents any host accessible by this transport
                 provider.   HOSTANY   allows   applications  to
                 specify a required service without specifying  a
                 particular host name.

     HOSTBROADCAST
                 Represents the address for all hosts  accessible
                 by this transport provider.  Network requests to
                 this address will be received by all machines.

     All fields of the ndhostserv structure must be initialized.

     To    find    all    available    transports,    call    the
     netdirgetbyname() routine with each struct netconfig struc-
     ture returned by the getnetpath(3N) call.

     The netdirgetbyaddr() routine  maps  addresses  to  service
     names.   This  routine  returns  a  list of host and service
     pairs that would yield this address.  If more than one tuple
     of  host  and  service name is returned then the first tuple
     contains the preferred host and service names.
          struct nd_hostservlist
               int  *h_cnt;
               struct hostserv  *h_hostservs;

     The netdirfree() structure is used to free  the  structures
     allocated by the name to address translation routines.

     The netdirmergeaddr() routine is used by a network  service
     to  return an optimized network addresses to a client.  This
     routine takes the universal address of the endpoint that the



                                                                2





netdir(3N)              LIBRARY FUNCTIONS              netdir(3N)



     service  has  bound  to,  which is pointed to by the s_uaddr
     parameter, and the address of the endpoint  that  a  request
     came  in on, which is pointed to by the c_uaddr paramter, to
     create an optimized address for communication with the  ser-
     vice.   The service address should be an address returned by
     the netdirgetbyname() call, specified with the special host
     name HOSTSELF.

     The taddr2uaddr() and uaddr2taddr() routines support  trans-
     lation  between  universal  addresses  and TLI type netbufs.
     The  take  and  return  character  string   pointers.    The
     taddr2uaddr()  routine  returns  a  pointer to a string that
     contains the universal  address  and  returns  NULL  if  the
     conversion  is  not possible.  This is not a fatal condition
     as some transports may not suppose a universal address form.
     option,   fd,   and   pointer_to_args   are  passed  to  the
     netdiroptions  routine  for  the  transport  specified   in
     netconfigp.  There are four values for option:
          NDSETBROADCAST
          NDSETRESERVEDPORT
          NDCHECKRESERVEDPORT
          NDMERGEADDR
     If  a  transport  provider  does  not  support  an   option,
     netdiroptions  returns  -1  and sets nderror to NDNOCTRL.
     The specific actions of each option follow.

     NDSETBROADCAST    Sets up the transport provider to  allow
                         broadcast,  if  the  transport  supports
                         broadcast.  fd is a file descriptor into
                         the  transport  (i.e.,  the  result of a
                         topen of /dev/udp).  pointer_to_args is
                         not  used.  If this completes, broadcast
                         operations  may  be  performed  on  file
                         descriptor fd.

     NDSETRESERVEDPORT Allows you to bind to a  reserved  port,
                         if that concept exists for the transport
                         provider.  fd is a file descriptor  into
                         the  transport  (it must not be bound to
                         an  address).   If  pointer_to_args   is
                         NULL,  fd  will  be  bound to a reserved
                         port.  If pointer_to_args  is  a  struct
                         netbuf  *,  an  attempt  will be made to
                         bind to a reserved port on the specified
                         address.

     NDCHECKRESERVEDPORT
                         Used   to   verify   that   an   address
                         corresponds  to a reserved port, if that
                         concept exists for  the  transport  pro-
                         vider.  fd is not used.  pointer_to_args
                         is a struct netbuf *  that  contains  an



                                                                3





netdir(3N)              LIBRARY FUNCTIONS              netdir(3N)



                         address.   This option returns 0 only if
                         the address specified in pointer_to_args
                         is reserved.

     NDMERGEADDR        Used to take a ``local  address''  (like
                         the  0.0.0.0  address that TCP uses) and
                         return a ``real  address''  that  client
                         machines  can  connect  to.   fd  is not
                         used.  pointer_to_args is a pointer to a
                         struct  ndmergearg,  which has the fol-
                         lowing form:
                         struct ndmergearg {
                              char *suaddr;  /* server's universal address */
                              char *cuaddr;  /* client's universal address */
                              char *muaddr;  /* the result */
                         }
                         suaddr is something like  0.0.0.0.1.12,
                         and,  if the call is successful, muaddr
                         will   be   set   to   something    like
                         192.11.109.89.1.12.    For   most  tran-
                         sports, muaddr is exactly what  suaddr
                         is.

SEE ALSO
     getnetpath(3N)






























                                                                4



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