|
|
1.1 root 1: .\" Copyright (c) 1986 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: .\" @(#)net.t 1.6 (Berkeley) 4/11/86
6: .\"
7: .NH
8: Network
9: .PP
10: There have been many changes in the kernel network support.
11: A major change is the addition of the Xerox NS protocols.
12: During the course of the integration of a second major protocol family
13: to the kernel, a number of Internet dependencies were removed from
14: common network code, and structural changes were made to accommodate
15: multiple protocol and address families simultaneously.
16: In addition, there were a large number of bug fixes and other cleanups
17: in the general networking code and in the Internet protocols.
18: The skeletal support for PUP that was in 4.2BSD has been removed.
19: .PP
20: The link layer drivers were changed to save an indication
21: of the incoming interface with each packet received, and this
22: information was made available to the protocol layer.
23: There were several problems that could be corrected
24: by taking advantage of this change.
25: The IMP code needed
26: to save error packets for software interrupt-level processing
27: in order to fix a race condition, but it needed to know which
28: interface had received the packet when decoding the addresses.
29: ICMP needed this information to support information requests
30: and (newly added) network mask requests properly, as these
31: request information about a specific network.
32: IP was able to take advantage of this change to implement redirect
33: generation when the incoming and outgoing interfaces are
34: the same.
35: .NH 2
36: Network common code
37: .PP
38: The changes in the common support routines for networking,
39: located in \fB/sys/net\fP, are described here.
40: .XP if_arp.h
41: This new file contains the definitions for the Address Resolution
42: Protocol (ARP) that are independent of the protocols using ARP.
43: .XP if.c
44: Most of the \fIif_ifwith*\fP functions that returned pointers
45: to \fIifnet\fP structures were converted to \fIifa_with*\fP equivalents
46: that return pointers to \fIifaddr\fP structures.
47: The old \fIif_ifonnetof\fP function is no longer provided,
48: as there is no concept of network number that is independent of address family.
49: A new routine, \fIifa_ifwithdstaddr\fP, is provided
50: for use with point-to-point interfaces.
51: Interface \fIioctl\fPs that set interface addresses
52: are now passed to the appropriate protocol
53: using the PRU_CONTROL request of the \fIpr_usrreq\fP entry.
54: Additional \fIioctl\fP operations were added to get and set interface metrics
55: and to manipulate the ARP table (see \fInetinet/if_ether.c\fP).
56: .XP if.h
57: In 4.2BSD, the per-interface structure \fIifnet\fP held the address
58: of the interface, as well as the host and network numbers.
59: These have all been moved into a new structure, \fIifaddr\fP,
60: that is managed by the address family.
61: The \fIifnet\fP structure for an interface includes a pointer
62: to a linked list of addresses for the interface.
63: The IFF_ROUTE flag was also removed.
64: The software loopback interface is distinguished with a new flag.
65: Each interface now has a routing metric that is stored by the kernel
66: but only interpreted by user-level routing processes.
67: Additional interface \fIioctl\fP operations allow the metric
68: or the broadcast address to be read or set.
69: When received packets are passed to the receiving protocol,
70: they include a reference to the incoming interface;
71: a variant of the IF_DEQUEUE macro, IF_DEQUEUEIFP,
72: dequeues a packet and extracts the information about the receiving interface.
73: .XP if_loop.c
74: The software loopback driver now supports Xerox NS and Internet protocols.
75: It was modified to provide information on the incoming interface to the
76: receiving protocol.
77: The loopback driver's address(es) must now be set with \fIifconfig\fP.
78: .XP if_sl.c
79: This file was added to support a customized line discipline for
80: the use of an asynchronous serial line as a network interface.
81: Until the encapsulation is changed the interface supports only IP traffic.
82: .XP raw_cb.c
83: Raw sockets record the socket's protocol number and address family
84: in a \fIsockproto\fP structure in the raw connection block.
85: This allows a wildcard raw protocol entry to support
86: raw sockets using any single protocol.
87: .XP raw_cb.h
88: A \fIsockproto\fP description and a hook for protocol-specific options
89: were added to the raw protocol control block.
90: .XP raw_usrreq.c
91: A bug was fixed that caused received packet return addresses
92: to be corrupted periodically;
93: an mbuf was being used after it was freed.
94: Routing is no longer done here, although the raw socket protocol control block
95: includes a routing entry for use by the transport protocol.
96: The SO_DONTROUTE flag now works correctly with raw sockets.
97: .XP route.c
98: The routing algorithm was changed to use the first route found
99: in the table instead of the one with the lowest use count.
100: This reduces routing overhead and makes response more predictable.
101: The load-sharing effect of the old algorithm was minimal under
102: most circumstances.
103: Several races were fixed.
104: The hash indexes have been declared as unsigned; negative indices
105: worked for the network route hash table but not for the host hash table.
106: (This fix was included on most 4.2BSD tapes.)
107: New routes are placed at the front of the hash chains
108: instead of at the end.
109: The redirect handling is more robust;
110: redirects are only accepted from the current router,
111: and are not used if the new gateway is the local host.
112: The route allocated while checking a redirect is freed
113: even if the redirect is disbelieved.
114: Host redirects cause a new route to be created if the previous route
115: was to the network.
116: Routes created dynamically by redirects are marked as such.
117: When adding new routes, the gateway address is checked against
118: the addresses of point-to-point links for exact matches before using
119: another interface on the appropriate network.
120: \fIRtinit\fP takes arguments for flags and operation separately,
121: allowing point-to-point interfaces to delete old routes.
122: .XP route.h
123: The size of the routing hash table has been changed to a power of two,
124: allowing unsigned modulus operations to be performed with a mask.
125: The size of the table is expanded if the GATEWAY option is configured.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.