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

  man pages->OpenBSD man pages -> networking (4)              



NAME    [Toc]    [Back]

     netintro - introduction to 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 4 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(2) 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 socket(2).
     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/network architecture.  Certain
     semantics of the basic socket abstractions are protocol specific.  All
     protocols  are expected to support the basic model for their
     socket type, but may, in addition, provide non-standard  facilities or extensions
 to a mechanism.  For example, a protocol supporting
     SOCK_STREAM abstraction may allow more than one byte of outof-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 and/or address formats.  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(8)
program.  The
     DIAGNOSTICS  section  lists messages which may appear on the
console and/or
     in the system error log, /var/log/messages (see syslogd(8)),
due to errors
 in device operation.

     Network  interfaces may be collected together into interface
groups.  An
     interface group is a container that can be used  generically
when referring
  to any interface related by some criteria.  Interfaces
may be a member
 of any number of interface groups.  All  interfaces  are
members of
     their interface family group by default.  For example, a PPP
     such as ppp0 is a member of the PPP interface family  group,
ppp.  When an
     action  is  performed  on an interface group, such as packet
filtering by
     the pf(4) subsystem, the operation will be applied  to  each
member interface
  in  the group, if supported by the subsystem.  The ifconfig(8) utility
 can be used to view and assign membership of an interface
to an interface
 group with the group modifier.

PROTOCOLS    [Toc]    [Back]

     The  system  currently supports the Internet protocols (IPv4
and IPv6), the
     Xerox Network Systems(tm) protocols, CCITT, Appletalk,  Novell's IPX protocols,
 and a few others.  Raw socket interfaces are provided to the IP
     protocol layer of the Internet, and to the IDP  protocol  of
Xerox NS.
     Consult  the  appropriate  manual  pages in this section for
more information
     regarding the support for each protocol family.

ADDRESSING    [Toc]    [Back]

     Associated with each protocol family is an  address  format.
All network
     addresses  adhere to a general structure, called a sockaddr,
described below.
  However, each protocol imposes a finer, more  specific
     generally  renaming  the  variant, which is discussed in the
protocol family
     manual page alluded to above.

           struct sockaddr {
                   u_int8_t          sa_len;           /*   total
length */
                   sa_family_t       sa_family;       /*  address
family */
                   char             sa_data[14];     /*  actually
longer */

     The field sa_len contains the total length of the structure,
which 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_LOCAL        1       /*  local  to  host  (pipes,
portals) */
     #define  AF_INET          2       /* internetwork: UDP, TCP,
etc. */
     #define AF_NS           6       /* Xerox NS protocols */
     #define AF_CCITT        10      /* CCITT protocols, X.25 etc
     #define AF_HYLINK       15      /* NSC Hyperchannel */
     #define AF_APPLETALK    16      /* AppleTalk */
     #define  AF_IPX          23      /* Novell Internet Protocol
     #define AF_INET6        24      /* IPv6 */
     #define AF_NATM         27      /* native ATM access */

     The sa_data field contains the actual address  value.   Note
that it may be
     longer than 14 bytes.

ROUTING    [Toc]    [Back]

     OpenBSD provides some packet routing facilities.  The kernel
maintains a
     routing information database, which is used in selecting the
     network interface when transmitting packets.

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

     This facility is described in route(4).

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(4), do not.

     The following ioctl(2) calls may be used to manipulate  network interfaces.
   The ioctl(2) is made on a socket (typically of type
     in the desired domain.  Most of the requests take  an  ifreq
     pointer as their parameter.  This structure is as follows:

     struct  ifreq {
     #define IFNAMSIZ 16
             char     ifr_name[IFNAMSIZ];      /*  if  name, e.g.
"en0" */
             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    /* p-to-p
peer */
     #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_mtu          ifr_ifru.ifru_metric      /*   mtu
(overload) */
     #define ifr_media       ifr_ifru.ifru_metric    /* media options */
     #define ifr_data        ifr_ifru.ifru_data      /*  used  by
interface */

     The supported ioctl(2) requests are:

     SIOCSIFADDR struct ifreq *
             Set  the  interface  address  for a protocol family.
Following the
             address assignment, the  ``initialization''  routine
for the interface
 is called.

             This  call has been deprecated and superceded by the
             call, described below.

     SIOCSIFDSTADDR struct ifreq *
             Set the point-to-point address for a protocol family
and interface.

             This  call has been deprecated and superceded by the
             call, described below.

     SIOCSIFBRDADDR struct ifreq *
             Set the broadcast address for a protocol family  and

             This  call has been deprecated and superceded by the
             call, described below.

     SIOCGIFADDR struct ifreq *
             Get the interface address for a protocol family.

     SIOCGIFDSTADDR struct ifreq *
             Get the point-to-point address for a protocol family
and interface.

     SIOCGIFBRDADDR struct ifreq *
             Get  the broadcast address for a protocol family and

     SIOCGIFDESCR struct ifreq *
             Get  the  interface  description,  returned  in  the
ifru_data field.

     SIOCSIFDESCR struct ifreq *
             Set  the  interface  description to the value of the
             field, limited to the size of IFDESCRSIZE.

     SIOCSIFFLAGS struct ifreq *
             Set the interface flags.  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

     SIOCGIFFLAGS struct ifreq *
             Get the interface flags.

     SIOCSIFMEDIA struct ifreq *
             Set the interface media  settings.   See  ifmedia(4)
for possible

     SIOCGIFMEDIA struct ifmediareq *
             Get  the  interface  media settings.  The ifmediareq
structure is as

             struct ifmediareq {
                     char     ifm_name[IFNAMSIZ];    /* if  name,
e.g. "en0" */
                     int      ifm_current;   /* current media options */
                     int      ifm_mask;      /* don't  care  mask
                     int      ifm_status;    /* media status */
                     int      ifm_active;    /* active options */
                     int       ifm_count;      /*   #entries   in
ifm_ulist array */
                     int     *ifm_ulist;     /* media words */

             See ifmedia(4) for interpreting this value.

     SIOCSIFMETRIC struct ifreq *
             Set  the  interface  routing  metric.  The metric is
used only by user-level

     SIOCGIFMETRIC struct ifreq *
             Get the interface metric.

     SIOCAIFADDR struct ifaliasreq *
             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
or broadcast
             addresses, or network masks (now an integral feature
of multiple
             protocols), a  separate  structure,  ifaliasreq,  is
used to specify
             all  three  facets  simultaneously (see below).  One
would use a
             slightly tailored version of this structure specific
to each family
  (replacing  each sockaddr by one of the familyspecific type).
             One should always set the length of a  sockaddr,  as
described in

             The ifaliasreq structure is as follows:

             struct ifaliasreq {
                     char     ifra_name[IFNAMSIZ];    /* if name,
e.g. "en0" */
                     struct  sockaddr ifra_addr;
                     struct  sockaddr ifra_dstaddr;
             #define ifra_broadaddr ifra_dstaddr
                     struct  sockaddr ifra_mask;

     SIOCDIFADDR struct ifreq *
             This request deletes the specified address from  the
list associated
 with an interface.  It also uses the ifaliasreq
structure to
             allow for the possibility of protocols allowing multiple masks or
             destination  addresses,  and also 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.

     SIOCGIFCONF struct ifconf *
             Get the 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 will contain
the length, in
             bytes, of the configuration list.

             Alternately, if the ifc_len passed in is set  to  0,
             will  set  ifc_len to the size that ifc_buf needs to
be to fit the
             entire configuration list and will not fill  in  the
other parameters.
  This is useful for determining the exact size
that ifc_buf
             needs to be in advance.  Note, however, that this is
an extension
             that not all operating systems support.

             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 ret'd */

     SIOCIFCREATE struct ifreq *
             Attempt to create the specified interface.

     SIOCIFDESTROY struct ifreq *
             Attempt to destroy the specified interface.

     SIOCIFGCLONERS struct if_clonereq *
             Get the list of clonable interfaces.   This  request
takes an
             if_clonereq  structure pointer (see below) as a value-result parameter.
  The ifcr_count field should be set to  the
number of
             IFNAMSIZ-sized  strings  that  can fit in the buffer
pointed to by
             ifcr_buffer.  On return, ifcr_total will be  set  to
the number of
             clonable  interfaces,  and  the buffer pointed to by
             will be filled with the names of clonable interfaces
aligned on
             IFNAMSIZ boundaries.

             The if_clonereq structure is as follows:

             struct if_clonereq {
                     int   ifcr_total;  /* total cloners (out) */
                     int   ifcr_count;  /* room for this many  in
user buf */
                     char  *ifcr_buffer;  /*  buffer  for  cloner
names */

     SIOCAIFGROUP struct ifgroupreq *
             Associate the interface named by ifgr_name with  the
             group named by ifgr_group.  The ifgroupreq structure
is as follows:

             struct ifgroupreq {
                     char    ifgr_name[IFNAMSIZ];
                     u_int   ifgr_len;
                     union {
                             char    ifgru_group[IFNAMSIZ];
                             struct  ifgroup *ifgru_groups;
                     } ifgr_ifgru;
             #define ifgr_group      ifgr_ifgru.ifgru_group
             #define ifgr_groups     ifgr_ifgru.ifgru_groups

     SIOCGIFGROUP struct ifgroupreq *
             Retrieve the list of groups for which  an  interface
is a member.
             The  interface is named by ifgr_name.  On enter, the
amount of
             memory in which the group names will be  written  is
stored in
             ifgr_len,  and  the  group  names themselves will be
written to the
             memory pointed to by ifgr_groups.   On  return,  the
amount of memory
 actually written is returned in ifgr_len.

             Alternately,  if the ifgr_len passed in is set to 0,
             will set ifgr_len to the size that ifgr_groups needs
to be to fit
             the entire group list and will not fill in the other
             This is useful for determining the exact  size  that
             needs to be in advance.

     SIOCDIFGROUP struct ifgroupreq *
             Remove  the  membership  of  the  interface named by
ifgr_name from
             the group ifgr_group.

SEE ALSO    [Toc]    [Back]

     netstat(1), ioctl(2), socket(2),  inet(3),  ipx(3),  arp(4),
     ifmedia(4),  inet(4), intro(4), ip(4), ip6(4), lo(4), pf(4),
     udp(4), hosts(5), networks(5), config(8), ifconfig(8),  netstart(8),
     route(8), routed(8)

HISTORY    [Toc]    [Back]

     The netintro manual appeared in 4.3BSD-Tahoe.

OpenBSD      3.6                        September     3,     1994
[ Back ]
 Similar pages
Name OS Title
networking Tru64 Introduction to socket networking facilities
netintro Tru64 Introduction to socket 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
DtMrm HP-UX initializing widgets for URM facilities
sigvec OpenBSD software signal facilities
sigvector HP-UX software signal facilities
sigvec FreeBSD software signal facilities
sigvec NetBSD software signal facilities
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service