Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ netdir(3N) — Dell System V Release 4 Issue 2.2

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

getnetpath(3N)



netdir(3N)                       UNIX System V                       netdir(3N)


NAME
      netdirgetbyname, netdirgetbyaddr, netdirfree, netdirmergeaddr,
      taddr2uaddr, uaddr2taddr, netdirperror, netdirsperror - generic
      transport name-to-address translation

SYNOPSIS
      #include <netdir.h>
      int netdirgetbyname(struct netconfig *config, struct ndhostserv
          *service, struct ndaddrlist *addrs);
      int netdirgetbyaddr(struct netconfig *config, struct
          ndhostservlist **service, struct netbuf *netaddr);
      void netdirfree(void *ptr, int ident);
      int netdirmergeaddr(struct netconfig *config, char *mrguaddr,
          char *suaddr, char *cuaddr);
      char *taddr2uaddr(struct netconfig *config, struct netbuf *addr);
      struct netbuf *uaddr2taddr(struct netconfig *config, char *uaddr);
      int netdiroptions(struct netconfig *netconfig, int option, int fd,
          char *pointertoargs);
      void netdirperror(char *s);
      char *netdirsperror(void);

DESCRIPTION
      These routines provide a generic interface for name-to-address mapping
      that will work with a all transport protocols.  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 netconfig structure is described on the
      netconfig(4) manual page.  The ndhostserv and ndaddrlist structures
      have the following elements.
            ndaddrlist structure:
                  int            ncnt;       /* number of netbufs */
                  struct netbuf  *naddrs;    /* the netbufs */
            ndhostserv structure:
                  char *hhost;   /* the host name */
                  char *hserv;   /* the service name */

      netdirgetbyname accepts some special-case host names.  These host names
      are hints to the underlying mapping routines that define the intent of
      the request.  This information is required for some transport provider
      developers to provide the correct information back to the caller.  The
      host names are defined in 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(), which represents the address to
                  which remote programs will bind their endpoints.


10/89                                                                    Page 1







netdir(3N)                       UNIX System V                       netdir(3N)


      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 netconfig structure returned by the getnetpath 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.  The
      ndhostservlist structure contains the following members:
            int    hcnt;         /* the number of ndhostservs */
            struct hostserv  *hhostservs;  /* the entries */

      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 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 service.  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 translation between
      universal addresses and TLI type netbufs.  They 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
      support 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.




Page 2                                                                    10/89







netdir(3N)                       UNIX System V                       netdir(3N)


      The specific actions of each option follow.

      NDSETBROADCAST    Sets the transport provider up to allow broadcast, if
                          the transport supports broadcast.  fd is a file
                          descriptor into the transport (that is, 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 the application 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 pointer to a netbuf structure,
                          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 provider.  fd is not used.  pointer_to_args
                          is a pointer to a netbuf structure that contains an
                          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 following members:
                            char *suaddr; /* server's universal address */
                            char *cuaddr; /* client's universal address */
                            char *muaddr; /* merged universal address */
                          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 transports,
                          muaddr is exactly what suaddr is.

      The netdirperror() routine prints an error message on the standard
      output stating why one of the name-to-address mapping routines failed.
      The error message is preceded by the string given as an argument.

      The netdirsperror routine returns a string containing an error message
      stating why one of the name-to-address mapping routines failed.

SEE ALSO
      getnetpath(3N)






10/89                                                                    Page 3





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