|
|
1.1 root 1: .\" Copyright (c) 1983, 1990 The Regents of the University of California.
2: .\" All rights reserved.
3: .\"
4: .\" Redistribution and use in source and binary forms are permitted provided
5: .\" that: (1) source distributions retain this entire copyright notice and
6: .\" comment, and (2) distributions including binaries display the following
7: .\" acknowledgement: ``This product includes software developed by the
8: .\" University of California, Berkeley and its contributors'' in the
9: .\" documentation or other materials provided with the distribution and in
10: .\" all advertising materials mentioning features or use of this software.
11: .\" Neither the name of the University nor the names of its contributors may
12: .\" be used to endorse or promote products derived from this software without
13: .\" specific prior written permission.
14: .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
15: .\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
16: .\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
17: .\"
18: .\" @(#)netintro.4 6.9 (Berkeley) 6/23/90
19: .\"
20: .TH NETINTRO 4 "June 23, 1990"
21: .UC 5
22: .SH NAME
23: networking \- introduction to networking facilities
24: .SH SYNOPSIS
25: .nf
26: .ft B
27: #include <sys/socket.h>
28: #include <net/route.h>
29: #include <net/if.h>
30: .fi R
31: .fi
32: .SH DESCRIPTION
33: .de _d
34: .if t .ta .6i 2.1i 2.6i
35: .\" 2.94 went to 2.6, 3.64 to 3.30
36: .if n .ta .84i 2.6i 3.30i
37: ..
38: .de _f
39: .if t .ta .5i 1.25i 2.5i
40: .\" 3.5i went to 3.8i
41: .if n .ta .7i 1.75i 3.8i
42: ..
43: This section is a general introduction to the networking facilities
44: available in the system.
45: Documentation in this part of section
46: 4 is broken up into three areas:
47: .I "protocol families
48: (domains),
49: .IR protocols ,
50: and
51: .IR "network interfaces" .
52: .\" Entries describing a protocol family are marked ``4F,''
53: .\" while entries describing protocol use are marked ``4P.''
54: .\" Hardware support for network interfaces are found
55: .\" among the standard ``4'' entries.
56: .PP
57: All network protocols are associated with a specific
58: .IR "protocol family" .
59: A protocol family provides basic services to the protocol
60: implementation to allow it to function within a specific
61: network environment. These services may include
62: packet fragmentation and reassembly, routing, addressing, and
63: basic transport. A protocol family may support multiple
64: methods of addressing, though the current protocol implementations
65: do not. A protocol family is normally comprised of a number
66: of protocols, one per
67: .IR socket (2)
68: type. It is not required that a protocol family support
69: all socket types. A protocol family may contain multiple
70: protocols supporting the same socket abstraction.
71: .PP
72: A protocol supports one of the socket abstractions detailed
73: in
74: .IR socket (2).
75: A specific protocol may be accessed either by creating a
76: socket of the appropriate type and protocol family, or
77: by requesting the protocol explicitly when creating a socket.
78: Protocols normally accept only one type of address format,
79: usually determined by the addressing structure inherent in
80: the design of the protocol family/network architecture.
81: Certain semantics of the basic socket abstractions are
82: protocol specific. All protocols are expected to support
83: the basic model for their particular socket type, but may,
84: in addition, provide non-standard facilities or extensions
85: to a mechanism. For example, a protocol supporting the
86: SOCK_STREAM
87: abstraction may allow more than one byte of out-of-band
88: data to be transmitted per out-of-band message.
89: .PP
90: A network interface is similar to a device interface.
91: Network interfaces comprise the lowest layer of the
92: networking subsystem, interacting with the actual transport
93: hardware. An interface may support one or more protocol
94: families and/or address formats.
95: The SYNOPSIS section of each network interface
96: entry gives a sample specification
97: of the related drivers for use in providing
98: a system description to the
99: .IR config (8)
100: program.
101: The DIAGNOSTICS section lists messages which may appear on the console
102: and/or in the system error log,
103: .I /var/log/messages
104: (see
105: .IR syslogd (8)),
106: due to errors in device operation.
107: .SH PROTOCOLS
108: The system currently supports the DARPA Internet
109: protocols, the Xerox Network Systems(tm) protocols,
110: and some of the ISO OSI protocols.
111: Raw socket interfaces are provided to the IP protocol
112: layer of the DARPA Internet, to the IMP link layer (1822), and to
113: the IDP protocol of Xerox NS.
114: Consult the appropriate manual pages in this section for more
115: information regarding the support for each protocol family.
116: .SH ADDRESSING
117: Associated with each protocol family is an address
118: format. All network address adhere to a general structure,
119: called a sockaddr, described below. However, each protocol
120: imposes finer and more specific structure, generally renaming
121: the variant, which is discussed in the protocol family manual
122: page alluded to above.
123: .nf
124: ._f
125: struct sockaddr {
126: u_char sa_len;
127: u_char sa_family;
128: char sa_data[14];
129: };
130: .sp 1
131: .fi
132: The field sa_len contains the total length of the of the structure,
133: which may exceed 16 bytes.
134: The following address values for
135: .I sa_family
136: are known to the system
137: (and additional formats are defined for possible future implementation):
138: .sp 1
139: .nf
140: ._d
141: #define AF_UNIX 1 /* local to host (pipes, portals) */
142: #define AF_INET 2 /* internetwork: UDP, TCP, etc. */
143: #define AF_IMPLINK 3 /* arpanet imp addresses */
144: #define AF_NS 6 /* Xerox NS protocols */
145: #define AF_CCITT 10 /* CCITT protocols, X.25 etc */
146: #define AF_HYLINK 15 /* NSC Hyperchannel */
147: #define AF_ISO 18 /* ISO protocols */
148: .fi
149: .SH ROUTING
150: .PP
151: .UX
152: provides some packet routing facilities.
153: The kernel maintains a routing information database, which
154: is used in selecting the appropriate network interface when
155: transmitting packets.
156: .PP
157: A user process (or possibly multiple co-operating processes)
158: maintains this database by sending messages over a special kind
159: of socket.
160: This supplants fixed size
161: .IR ioctl 's
162: used in earlier releases.
163: .PP
164: This facility is described in
165: .IR route (4).
166: .SH INTERFACES
167: Each network interface in a system corresponds to a
168: path through which messages may be sent and received. A network
169: interface usually has a hardware device associated with it, though
170: certain interfaces such as the loopback interface,
171: .IR lo (4),
172: do not.
173: .PP
174: The following
175: .I ioctl
176: calls may be used to manipulate network interfaces.
177: The
178: .I ioctl
179: is made on a socket (typically of type SOCK_DGRAM)
180: in the desired domain.
181: Most of the requests supported in earlier releases
182: take an
183: .I ifreq
184: structure as its parameter. This structure has the form
185: .PP
186: .nf
187: ._d
188: .DT
189: struct ifreq {
190: #define IFNAMSIZ 16
191: char ifr_name[IFNAMSIZE]; /* if name, e.g. "en0" */
192: union {
193: struct sockaddr ifru_addr;
194: struct sockaddr ifru_dstaddr;
195: struct sockaddr ifru_broadaddr;
196: short ifru_flags;
197: int ifru_metric;
198: caddr_t ifru_data;
199: } ifr_ifru;
200: #define ifr_addr ifr_ifru.ifru_addr /* address */
201: #define ifr_dstaddr ifr_ifru.ifru_dstaddr /* other end of p-to-p link */
202: #define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address */
203: #define ifr_flags ifr_ifru.ifru_flags /* flags */
204: #define ifr_metric ifr_ifru.ifru_metric /* metric */
205: #define ifr_data ifr_ifru.ifru_data /* for use by interface */
206: };
207: .fi
208: Calls which are now depricated are:
209: .TP
210: SIOCSIFADDR
211: Set interface address for protocol family. Following the address
212: assignment, the ``initialization'' routine for
213: the interface is called.
214: .TP
215: SIOCSIFDSTADDR
216: Set point to point address for protocol family and interface.
217: .TP
218: SIOCSIFBRDADDR
219: Set broadcast address for protocol family and interface.
220: .LP
221: .I Ioctls
222: requests to obtain addresses and requests both to set and
223: retreive other data are still fully supported
224: and use the
225: .I ifreq
226: structure:
227: .TP
228: SIOCGIFADDR
229: Get interface address for protocol family.
230: .TP
231: SIOCGIFDSTADDR
232: Get point to point address for protocol family and interface.
233: .TP
234: SIOCGIFBRDADDR
235: Get broadcast address for protocol family and interface.
236: .TP
237: SIOCSIFFLAGS
238: Set interface flags field. If the interface is marked down,
239: any processes currently routing packets through the interface
240: are notified;
241: some interfaces may be reset so that incoming packets are no longer received.
242: When marked up again, the interface is reinitialized.
243: .TP
244: SIOCGIFFLAGS
245: Get interface flags.
246: .TP
247: SIOCSIFMETRIC
248: Set interface routing metric.
249: The metric is used only by user-level routers.
250: .TP
251: SIOCGIFMETRIC
252: Get interface metric.
253: .LP
254: There are two requests that make use of a new structure:
255: .TP
256: SIOCAIFADDR
257: An interface may have more than one address associated with it
258: in some protocols. This request provides a means to
259: add additional addresses (or modify characteristics of the
260: primary address if the default address for the address family
261: is specified). Rather than making separate calls to
262: set destination or broadcast addresses, or network masks
263: (now an integral feature of multiple protocols)
264: a separate structure is used to specify all three facets simultaneously:
265: .nf
266:
267: .ta \w'struct 'u +\w'struct 'u +\w'sockaddr 'u +\w'ifra_broaddadr 'u
268: struct ifaliasreq {
269: char ifra_name[IFNAMSIZ]; /* if name, e.g. "en0" */
270: struct sockaddr ifra_addr;
271: struct sockaddr ifra_broadaddr;
272: struct sockaddr ifra_mask;
273: };
274: .fi
275: One would use a slightly tailored version of this struct specific
276: to each family (replacing each sockaddr by one
277: of the family-specific type).
278: Where the sockaddr itself is larger than the
279: default size, one needs to modify the
280: .I ioctl
281: identifier itself to include the total size, as described in
282: .IR ioctl (2).
283: .TP
284: SIOCDIFADDR
285: This requests deletes the specified address from the list
286: associated with an interface. It also uses the if_aliasreq
287: structure to allow for the possibility of protocols allowing
288: multiple masks or destination addresses, and also adopts the
289: convention that specification of the default address means
290: to delete the first address for the interface belonging to
291: the address family in which the original socket was opened.
292: .TP
293: SIOCGIFCONF
294: Get interface configuration list. This request takes an
295: .I ifconf
296: structure (see below) as a value-result parameter. The
297: .I ifc_len
298: field should be initially set to the size of the buffer
299: pointed to by
300: .IR ifc_buf .
301: On return it will contain the length, in bytes, of the
302: configuration list.
303: .PP
304: ._d
305: .nf
306: .DT
307: /*
308: * Structure used in SIOCGIFCONF request.
309: * Used to retrieve interface configuration
310: * for machine (useful for programs which
311: * must know all networks accessible).
312: */
313: struct ifconf {
314: int ifc_len; /* size of associated buffer */
315: union {
316: caddr_t ifcu_buf;
317: struct ifreq *ifcu_req;
318: } ifc_ifcu;
319: #define ifc_buf ifc_ifcu.ifcu_buf /* buffer address */
320: #define ifc_req ifc_ifcu.ifcu_req /* array of structures returned */
321: };
322: .fi
323: .SH SEE ALSO
324: socket(2), ioctl(2), intro(4), config(8), routed(8C)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.