|
|
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.