Annotation of 43BSDTahoe/man/man4/netintro.4, revision 1.1.1.1

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

unix.superglobalmegacorp.com

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