Annotation of cci/usr/src/man/man4/intro.4n, revision 1.1.1.1

1.1       root        1: .TH INTRO 4N "7 July 1983"
                      2: .UC 4
                      3: .SH NAME
                      4: networking \- introduction to networking facilities
                      5: .SH SYNOPSIS
                      6: .nf
                      7: .ft B
                      8: #include <sys/socket.h>
                      9: #include <net/route.h>
                     10: #include <net/if.h>
                     11: .fi R
                     12: .fi
                     13: .SH DESCRIPTION
                     14: .de _d
                     15: .if t .ta .6i 2.1i 2.6i
                     16: .\" 2.94 went to 2.6, 3.64 to 3.30
                     17: .if n .ta .84i 2.6i 3.30i
                     18: ..
                     19: .de _f
                     20: .if t .ta .5i 1.25i 2.5i
                     21: .\" 3.5i went to 3.8i
                     22: .if n .ta .7i 1.75i 3.8i
                     23: ..
                     24: This section briefly describes the networking facilities
                     25: available in the system.
                     26: Documentation in this part of section
                     27: 4 is broken up into three areas:
                     28: .IR protocol-families ,
                     29: .IR protocols ,
                     30: and
                     31: .IR "network interfaces" .
                     32: Entries describing a protocol-family are marked ``4F'',
                     33: while entries describing protocol use are marked ``4P''.
                     34: Hardware support for network interfaces are found
                     35: among the standard ``4'' entries.
                     36: .PP
                     37: All network protocols are associated with a specific
                     38: .IR protocol-family .
                     39: A protocol-family provides basic services to the protocol
                     40: implementation to allow it to function within a specific
                     41: network environment.  These services may include 
                     42: packet fragmentation and reassembly, routing, addressing, and 
                     43: basic transport.  A protocol-family may support multiple
                     44: methods of addressing, though the current protocol implementations
                     45: do not.  A protocol-family is normally comprised of a number
                     46: of protocols, one per
                     47: .IR socket (2)
                     48: type.  It is not required that a protocol-family support
                     49: all socket types.  A protocol-family may contain multiple
                     50: protocols supporting the same socket abstraction. 
                     51: .PP
                     52: A protocol supports one of the socket abstractions detailed
                     53: in
                     54: .IR socket (2).
                     55: A specific protocol may be accessed either by creating a
                     56: socket of the appropriate type and protocol-family, or
                     57: by requesting the protocol explicitly when creating a socket.
                     58: Protocols normally accept only one type of address format,
                     59: usually determined by the addressing structure inherent in
                     60: the design of the protocol-family/network architecture.
                     61: Certain semantics of the basic socket abstractions are
                     62: protocol specific.  All protocols are expected to support
                     63: the basic model for their particular socket type, but may,
                     64: in addition, provide non-standard facilities or extensions
                     65: to a mechanism.  For example, a protocol supporting the
                     66: SOCK_STREAM
                     67: abstraction may allow more than one byte of out-of-band
                     68: data to be transmitted per out-of-band message.
                     69: .PP
                     70: A network interface is similar to a device interface.
                     71: Network interfaces comprise the lowest layer of the
                     72: networking subsystem, interacting with the actual transport
                     73: hardware.  An interface may support one or more protocol
                     74: families, and/or address formats.
                     75: The SYNOPSIS section of each network interface
                     76: entry gives a sample specification
                     77: of the related drivers for use in providing
                     78: a system description to the
                     79: .IR config (8)
                     80: program.
                     81: The DIAGNOSTICS section lists messages which may appear on the console
                     82: and in the system error log
                     83: .I /usr/adm/messages
                     84: due to errors in device operation.
                     85: .SH PROTOCOLS
                     86: The system currently supports only the DARPA Internet
                     87: protocols fully.  Raw socket interfaces are provided to IP protocol
                     88: layer of the DARPA Internet, to the IMP link layer (1822), and to
                     89: Xerox PUP-1 layer operating on top of 3Mb/s Ethernet interfaces.
                     90: Consult the appropriate manual pages in this section for more
                     91: information regarding the support for each protocol family.
                     92: .SH ADDRESSING
                     93: Associated with each protocol family is an address
                     94: format.  The following address formats are used by the system:
                     95: .sp 1
                     96: .nf
                     97: ._d
                     98: #define        AF_UNIX 1       /* local to host (pipes, portals) */
                     99: #define        AF_INET 2       /* internetwork: UDP, TCP, etc. */
                    100: #define        AF_IMPLINK      3       /* arpanet imp addresses */
                    101: #define        AF_PUP  4       /* pup protocols: e.g. BSP */
                    102: .fi
                    103: .SH ROUTING
                    104: The network facilities provided limited packet routing.
                    105: A simple set of data structures comprise a ``routing table''
                    106: used in selecting the appropriate network interface when
                    107: transmitting packets.  This table contains a single entry for
                    108: each route to a specific network or host.  A user process,
                    109: the routing daemon, maintains this data base with the aid
                    110: of two socket specific 
                    111: .IR ioctl (2)
                    112: commands, SIOCADDRT and SIOCDELRT.  The commands allow
                    113: the addition and deletion of a single routing
                    114: table entry, respectively.  Routing table manipulations may
                    115: only be carried out by super-user.
                    116: .PP
                    117: A routing table entry has the following form, as defined
                    118: in
                    119: .RI < net/route.h >;
                    120: .sp 1
                    121: ._f
                    122: .nf
                    123: struct rtentry {
                    124:        u_long  rt_hash;
                    125:        struct  sockaddr rt_dst;
                    126:        struct  sockaddr rt_gateway;
                    127:        short   rt_flags;
                    128:        short   rt_refcnt;
                    129:        u_long  rt_use;
                    130:        struct  ifnet *rt_ifp;
                    131: };
                    132: .sp 1
                    133: .fi
                    134: with
                    135: .I rt_flags
                    136: defined from,
                    137: .sp 1
                    138: .nf
                    139: ._d
                    140: #define        RTF_UP  0x1             /* route usable */
                    141: #define        RTF_GATEWAY     0x2             /* destination is a gateway */
                    142: #define        RTF_HOST        0x4             /* host entry (net otherwise) */
                    143: .fi
                    144: .PP
                    145: Routing table entries come in three flavors: for a specific
                    146: host, for all hosts on a specific network, for any destination
                    147: not matched by entries of the first two types (a wildcard route). 
                    148: When the system
                    149: is booted, each network interface autoconfigured 
                    150: installs a routing table entry when it wishes to have packets
                    151: sent through it.  Normally the interface specifies the route
                    152: through it is a ``direct'' connection to the destination host
                    153: or network.  If the route is direct, the transport layer of
                    154: a protocol family usually requests the packet be sent to the
                    155: same host specified in the packet.  Otherwise, the interface
                    156: may be requested to address the packet to an entity different
                    157: from the eventual recipient (i.e. the packet is forwarded).
                    158: .PP
                    159: Routing table entries installed by a user process may not specify
                    160: the hash, reference count, use, or interface fields; these are filled
                    161: in by the routing routines.  If
                    162: a route is in use when it is deleted
                    163: .RI ( rt_refcnt
                    164: is non-zero),
                    165: the resources associated with it will not
                    166: be reclaimed until further references to it are released. 
                    167: .PP
                    168: The routing code returns EEXIST if
                    169: requested to duplicate an existing entry, ESRCH if
                    170: requested to delete a non-existant entry,
                    171: or ENOBUFS if insufficient resources were available
                    172: to install a new route.
                    173: .PP
                    174: User processes read the routing tables through the
                    175: .I /dev/kmem 
                    176: device.
                    177: .PP
                    178: The
                    179: .I rt_use
                    180: field contains the number of packets sent along the route.
                    181: This value is used to select among multiple
                    182: routes to the same destination.  When multiple routes to
                    183: the same destination exist, the least used route is selected.
                    184: .PP
                    185: A wildcard routing entry is specified with a zero
                    186: destination address value.  Wildcard routes are used
                    187: only when the system fails to find a route to the
                    188: destination host and network.  The combination of wildcard
                    189: routes and routing redirects can provide an economical
                    190: mechanism for routing traffic.
                    191: .SH INTERFACES
                    192: Each network interface in a system corresponds to a
                    193: path through which messages may be sent and received.  A network
                    194: interface usually has a hardware device associated with it, though
                    195: certain interfaces such as the loopback interface,
                    196: .IR lo (4),
                    197: do not.
                    198: .PP
                    199: At boot time each interface which has underlying hardware support
                    200: makes itself known to the system during the autoconfiguration
                    201: process.  Once the interface has acquired its address it is
                    202: expected to install a routing table entry so that messages may
                    203: be routed through it.  Most interfaces require some part of
                    204: their address specified with an SIOCSIFADDR ioctl before they
                    205: will allow traffic to flow through them.  On interfaces where
                    206: the network-link layer address mapping is static, only the
                    207: network number is taken from the ioctl; the remainder is found
                    208: in a hardware specific manner.  On interfaces which provide
                    209: dynamic network-link layer address mapping facilities (e.g.
                    210: 10Mb/s Ethernets), the entire address specified in the ioctl
                    211: is used.
                    212: .PP
                    213: The following 
                    214: .I ioctl
                    215: calls may be used to manipulate network interfaces.  Unless
                    216: specified otherwise, the request takes an
                    217: .I ifrequest
                    218: structure as its parameter.  This structure has the form
                    219: .PP
                    220: .nf
                    221: .DT
                    222: struct ifreq {
                    223:        char    ifr_name[16];           /* name of interface (e.g. "ec0") */
                    224:        union {
                    225:                struct  sockaddr ifru_addr;
                    226:                struct  sockaddr ifru_dstaddr;
                    227:                short   ifru_flags;
                    228:        } ifr_ifru;
                    229: #define        ifr_addr        ifr_ifru.ifru_addr      /* address */
                    230: #define        ifr_dstaddr     ifr_ifru.ifru_dstaddr   /* other end of p-to-p link */
                    231: #define        ifr_flags       ifr_ifru.ifru_flags     /* flags */
                    232: };
                    233: .fi
                    234: .TP
                    235: SIOCSIFADDR
                    236: Set interface address.  Following the address
                    237: assignment, the ``initialization'' routine for
                    238: the interface is called.
                    239: .TP
                    240: SIOCGIFADDR
                    241: Get interface address.
                    242: .TP
                    243: SIOCSIFDSTADDR
                    244: Set point to point address for interface.
                    245: .TP
                    246: SIOCGIFDSTADDR
                    247: Get point to point address for interface.
                    248: .TP
                    249: SIOCSIFFLAGS
                    250: Set interface flags field.  If the interface is marked down,
                    251: any processes currently routing packets through the interface
                    252: are notified.
                    253: .TP
                    254: SIOCGIFFLAGS
                    255: Get interface flags.
                    256: .TP
                    257: SIOCGIFCONF
                    258: Get interface configuration list.  This request takes an
                    259: .I ifconf
                    260: structure (see below) as a value-result parameter.  The 
                    261: .I ifc_len
                    262: field should be initially set to the size of the buffer
                    263: pointed to by 
                    264: .IR ifc_buf .
                    265: On return it will contain the length, in bytes, of the
                    266: configuration list.
                    267: .PP
                    268: .nf
                    269: .DT
                    270: /*
                    271:  * Structure used in SIOCGIFCONF request.
                    272:  * Used to retrieve interface configuration
                    273:  * for machine (useful for programs which
                    274:  * must know all networks accessible).
                    275:  */
                    276: struct ifconf {
                    277:        int     ifc_len;                /* size of associated buffer */
                    278:        union {
                    279:                caddr_t ifcu_buf;
                    280:                struct  ifreq *ifcu_req;
                    281:        } ifc_ifcu;
                    282: #define        ifc_buf ifc_ifcu.ifcu_buf       /* buffer address */
                    283: #define        ifc_req ifc_ifcu.ifcu_req       /* array of structures returned */
                    284: };
                    285: .fi
                    286: .SH SEE ALSO
                    287: socket(2),
                    288: ioctl(2),
                    289: intro(4),
                    290: config(8),
                    291: routed(8C)

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.