*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->Tru64 Unix man pages -> networking (7)              
Title
Content
Arch
Section
 

netintro(7)

Contents


NAME    [Toc]    [Back]

       netintro,  networking  - Introduction to socket networking
       facilities

SYNOPSIS    [Toc]    [Back]

       #include <sys/socket.h>  #include  <net/route.h>  #include
       <net/if.h>

DESCRIPTION    [Toc]    [Back]

       This  section  is a general introduction to the networking
       facilities available in the system. Documentation in  this
       part  of Section 7 is broken up into three areas: protocol
       families (domains), protocols, and network interfaces.

       All network protocols are associated with a specific  protocol
 family. A protocol family provides basic services to
       the protocol implementation to allow it to function within
       a   specific  network  environment.   These  services  may
       include  packet  fragmentation  and  reassembly,  routing,
       addressing,  and  basic  transport.  A protocol family may
       support multiple methods of addressing, though the current
       protocol  implementations  do  not.   A protocol family is
       normally comprised of  a  number  of  protocols,  one  per
       socket  type.   It  is not required that a protocol family
       support all socket types.  A protocol family  may  contain
       multiple protocols supporting the same socket abstraction.

       A  protocol  supports  one  of  the  socket   abstractions
       detailed  in the reference page for the socket() function.
       A specific protocol may be accessed either by  creating  a
       socket  of the appropriate type and protocol family, or by
       requesting the protocol explicitly when creating a socket.
       Protocols normally accept only one type of address format,
       usually determined by the addressing structure inherent in
       the  design  of  the protocol family and network architecture.
 Certain semantics of the basic  socket  abstractions
       are protocol specific.  All protocols are expected to support
 the basic model for their particular socket type, but
       may, in addition, provide nonstandard facilities or extensions
 to a mechanism.  For example, a protocol  supporting
       the  SOCK_STREAM  abstraction may allow more than one byte
       of out-of-band data to be transmitted per out-of-band message.


       A network interface is similar to a device interface. Network
 interfaces comprise the lowest layer of the  networking
 subsystem, interacting with the actual transport hardware.
  An interface may support one or more protocol families,
  address  formats,  or both. The SYNOPSIS section of
       each network interface entry gives a sample  specification
       of  the  related  drivers  for  use  in providing a system
       description to the  config  program.  The  ERRORS  section
       lists  messages  which may appear on the console and/or in
       the system error log, /var/log/messages (see  the  syslogd
       function), due to errors in device operation.

       The  system  currently  supports the DARPA Internet protocols.
 Raw socket interfaces are provided to the  IP  layer
       of  the  DARPA  Internet.  Consult  the appropriate manual
       pages in this section for more information regarding  this
       support.

   Addressing    [Toc]    [Back]
       Associated with each protocol family is an address format.
       All network address adhere to a general structure,  called
       a sockaddr.  However, each protocol imposes finer and more
       specific structure, generally renaming the variant.

       Both the 4.3BSD and 4.4BSD sockaddr  structures  are  supported
  by  Tru64  UNIX. The default sockaddr structure is
       the 4.3BSD structure, which is as  follows:  struct  sockaddr(

               u_short sa_family,
               char sa_data[14] );

       If the compile-time option _SOCKADDR_LEN is defined before
       the sys/socket.h header file  is  included,  however,  the
       4.4BSD sockaddr structure is defined, which is as follows:
       struct sockaddr(
               u_char sa_len,
               u_char sa_family,
               char   sa_data[14] );

       The 4.4BSD sockaddr structure provides for a sa_len field,
       which  contains the total length of the structure.  Unlike
       the 4.3BSD sockaddr structure, this length may  exceed  16
       bytes.

       The  following  address  values for sa_family are known to
       the system (and additional formats are defined for  possible
 future implementation):

       #define AF_UNIX     1 /* local to host (pipes, portals) */
       #define   AF_INET   2  /*  internetwork:  UDP,  TCP  (IPv4
       address  format)  */  #define AF_INET6 26 /* internetwork:
       UDP, TCP (IPv6 address format) */

       Internet domain addresses vary with the underlying  protocol.
   The  following  table lists the underlying protocol
       and their associated addresses:

       ------------------------
       Protocol   Address
       ------------------------
       IPv4       sockaddr_in
       IPv6       sockaddr_in6
       ------------------------


   IPv4 Addressing    [Toc]    [Back]
       The sockaddr_in structure, defined in  <netinet/in.h>,  is
       the IPv4 sockaddr variant, and is as follows: struct sockaddr_in(

               u_short sin_family,
               u_short sin_port,
               struct in_addr sin_addr,
               char sin_zero[8] );

       If the compile-time option _SOCKADDR_LEN is defined before
       the  sys/socket.h  header  file  is included, however, the
       4.4BSD sockaddr_in structure is defined, which is as  follows:
 struct sockaddr_in(
               u_char sin_len,
               sa_family_t sin_family,
               in_port_t sin_port,
               struct in_addr sin_addr,
               char sin_zero[8] );

   IPv6 Addressing    [Toc]    [Back]
       The sockaddr_in6 structure, defined in <netinet/in6.h>, is
       the IPv6 sockaddr variant, and is as follows: struct sockaddr_in6(

               unsigned short sin6_family,
               in_port_t sin_port,
               uint32_t sin6_flowinfo,
               struct in6_addr sin6_addr,
               uint32_t sin6_scope_id );

       If the compile-time option _SOCKADDR_LEN is defined before
       the sys/socket.h header file  is  included,  however,  the
       4.4BSD sockaddr_in6 structure is defined, which is as follows:
 struct sockaddr_in6(
               uint8_t sin6_len,
               sa_family_t sin6_family,
               in_port_t sin_port,
               uint32_t sin6_flowinfo,
               struct in6_addr sin6_addr,
               uint32_t sin6_scope_id );

       The in6_addr structure is defined in <netinet/in6.h>.

   Routing    [Toc]    [Back]
       The UNIX operating system provides packet routing  facilities.
 The kernel maintains a routing information database,
       which is used in selecting the appropriate network  interface
 when transmitting packets.

       A  user  process  (or  possibly  multiple cooperating processes)
 maintains this database by sending messages over a
       special  kind of socket. This supplants fixed size ioctl's
       used in earlier releases.

       This facility is described in the files reference page for
       the route() function.

   Interfaces    [Toc]    [Back]
       Each  network  interface in a system corresponds to a path
       through which messages may be sent and received.   A  network
  interface  usually  has a hardware device associated
       with it, though certain interfaces such  as  the  loopback
       interface, lo, do not.

       The  following  ioctl calls may be used to manipulate network
 interfaces. The ioctl is made on a socket  (typically
       of  type  SOCK_DGRAM)  in  the desired domain. Most of the
       requests supported  in  earlier  releases  take  an  ifreq
       structure  as  its parameter.  This structure has the following
 form:

       struct ifreq { #define IFNAMSIZ 16
         char ifr_name[IFNAMSIZE]; /*interface name */
         union {
            struct sockaddr ifru_addr;
            struct sockaddr ifru_dstaddr;
            struct sockaddr ifru_broadaddr;
            short           ifru_flags;
            int             ifru_metric;
            caddr_t         ifru_data;
            }      ifr_ifru;      #define                ifr_addr
       ifr_ifru.ifru_addr
                       /* address */ #define          ifr_dstaddr
       ifr_ifru.ifru_dstaddr
                               /* end of p-to-p link  */  #define
       ifr_broadaddr ifr_ifru.ifru_broadaddr
                               /*  broadcast  address  */ #define
       ifr_flags     ifr_ifru.ifru_flags
                               /*      flags      */      #define
       ifr_metric ifr_ifru.ifru_metric                         /*
       metric        */         #define                  ifr_data
       ifr_ifru.ifru_data
                               /* for use by interface */ };

       Calls which are now deprecated are: Sets interface address
       for protocol family.  Following  the  address  assignment,
       the   ``initialization''  routine  for  the  interface  is
       called.  Sets point to point address for  protocol  family
       and interface.  Sets broadcast address for protocol family
       and interface. All ioctl requests to obtain addresses  and
       requests  both  to  set  and retrieve other data are still
       fully supported and use the ifreq structure:  Gets  interface
  address  for  protocol  family.  Gets point-to-point
       address for protocol family and interface.  Gets broadcast
       address  for protocol family and interface.  Gets the network
 mask for protocol family and interface.  Sets  interface
  flags  field.   If the interface is marked down, any
       processes currently routing packets through the  interface
       are  notified; some interfaces may be reset so that incoming
 packets are no longer received. When marked up  again,
       the  interface  is  reinitialized.   Gets interface flags.
       Sets interface routing metric.  The metric is used only by
       user-level routers.  Gets interface metric.

       There are three requests that make use of a new structure:
       An interface may have more  than  one  address  associated
       with  it in some protocols.  This request provides a means
       to add additional addresses (or modify characteristics  of
       the primary address if the default address for the address
       family is specified).  Rather than making  separate  calls
       to set destination addresses, broadcast addresses, or network
 masks (now an integral feature of multiple protocols)
       a  separate  structure is used to specify all three facets
       simultaneously: struct ifaliasreq(
               char ifra_name[IFNAMSIZ],
               struct sockaddr ifra_addr,
               struct sockaddr ifra_broadaddr,
               struct sockaddr ifra_mask );

              You would use a slightly tailored version  of  this
              structure  for each family (replacing each sockaddr
              by one of the family-specific type). When the sockaddr
  itself  is  larger than the default size, you
              must modify the ioctl identifier itself to  include
              the total size.  This request deletes the specified
              address from the list associated with an interface.
              It  uses the if_aliasreq structure to permit protocols
  to  allow  multiple  masks   or   destination
              addresses, and it adopts the convention that specification
 of the default address means to delete the
              first  address  for  the interface belonging to the
              address family in which  the  original  socket  was
              opened.   Get  interface  configuration list.  This
              request takes an ifconf structure (see below) as  a
              value-result  parameter.   The ifc_len field should
              be initially set to the size of the buffer  pointed
              to by ifc_buf. On return it contains the length, in
              bytes, of the configuration list.

              /*
               * Structure used in SIOCGIFCONF request.
               * Used to retrieve interface configuration
               * for machine (useful for programs which
               * must know all networks accessible).
               */ struct  ifconf {
                 int ifc_len; /* size of associated buffer */
                 union {
                    caddr_t ifcu_buf;
                    struct ifreq *ifcu_req;
                 }     ifc_ifcu;     #define              ifc_buf
              ifc_ifcu.ifcu_buf
                         /*    buffer    address    */    #define
              ifc_req    ifc_ifcu.ifcu_req
                         /*  array  of  structures  returned   */
              #define          ifc_req    ifc_ifcu.ifcu_req
                         /* array of structures returned */ };

SEE ALSO    [Toc]    [Back]

      
      
       Functions: socket(2), ioctl(2)

       Files: config(8), routed(8)

       Network Programmer's Guide



                                                      netintro(7)
[ Back ]
 Similar pages
Name OS Title
netintro FreeBSD introduction to networking facilities
netintro IRIX introduction to networking facilities
netintro OpenBSD introduction to networking facilities
networking OpenBSD introduction to networking facilities
networking FreeBSD introduction to networking facilities
net FreeBSD introduction to networking facilities
audio IRIX Introduction to audio facilities
realtime IRIX introduction to realtime and scheduler facilities
intro IRIX introduction to SVR4 networking functions and libraries
mac_get FreeBSD get the label of a file, socket, socket peer or process
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service