1. Introduction
Introduction
Source Code Presentation
History
Application Programming Interfaces
Example Program
System Calls and Library Functions
Network Implementation Overview
Descriptors
Mbufs (Memory Buffers) and Output Processing
Input Processing
Network Implementation Overview Revisited
Interrupt Levels and Concurrency
Source Code Organization
Test Network
Summary
2. Mbufs: Memory Buffers
Introduction
Code Introduction
Mbuf Definitions
mbuf Structure
Simple Mbuf Macros and Functions
m_devget and m_pullup Functions
Summary of Mbuf Macros and Functions
Summary of Net/3 Networking Data Structures
m_copy and Cluster Reference Counts
Alternatives
Summary
3. Interface Layer
Introduction
Code Introduction
ifnet Structure
ifaddr Structure
sockaddr Structure
ifnet and ifaddr Specialization
Network Initialization Overview
Ethernet Initialization
SLIP Initialization
Loopback Initialization
if_attach Function
ifinit Function
Summary
4. Interfaces: Ethernet
Introduction
Code Introduction
Ethernet Interface
ioctl System Call
Summary
5. Interfaces: SLIP and Loopback
Introduction
Code Introduction
SLIP Interface
Loopback Interface
Summary
6. IP Addressing
Introduction
Code Introduction
Interface and Address Summary
sockaddr_in Structure
in_ifaddr Structure
Address Assignment
Interface ioctl Processing
Internet Utility Functions
ifnet Utility Functions
Summary
7. Domains and Protocols
Introduction
Code Introduction
domain Structure
protosw Structure
IP domain and protosw Structures
pffindproto and pffindtype Functions
pfctlinput Function
IP Initialization
sysctl System Call
Summary
8. IP: Internet Protocol
Introduction
Code Introduction
IP Packets
Input Processing: ipintr Function
Forwarding: ip_forward Function
Output Processing: ip_output Function
Internet Checksum: in_cksum Function
setsockopt and getsockopt System Calls
ip_sysctl Function
Summary
9. IP Option Processing
Introduction
Code Introduction
Option Format
ip_dooptions Function
Record Route Option
Source and Record Route Options
Timestamp Option
ip_insertoptions Function
ip_pcbopts Function
Limitations
Summary
10. IP Fragmentation and Reassembly
Introduction
Code Introduction
Fragmentation
ip_optcopy Function
Reassembly
ip_reass Function
ip_slowtimo Function
Summary
11. ICMP: Internet Control Message Protocol
Introduction
Code Introduction
icmp Structure
ICMP protosw Structure
Input Processing: icmp_input Function
Error Processing
Request Processing
Redirect Processing
Reply Processing
Output Processing
icmp_error Function
icmp_reflect Function
icmp_send Function
icmp_sysctl Function
Summary
12. IP Multicasting
Introduction
Code Introduction
Ethernet Multicast Addresses
ether_multi Structure
Ethernet Multicast Reception
in_multi Structure
ip_moptions Structure
Multicast Socket Options
Multicast TTL Values
ip_setmoptions Function
Joining an IP Multicast Group
Leaving an IP Multicast Group
ip_getmoptions Function
Multicast Input Processing: ipintr Function
Multicast Output Processing: ip_output Function
Performance Considerations
Summary
13. IGMP: Internet Group Management Protocol
Introduction
Code Introduction
igmp Structure
IGMP protosw Structure
Joining a Group: igmp_joingroup Function
igmp_fasttimo Function
Input Processing: igmp_input Function
Leaving a Group: igmp_leavegroup Function
Summary
14. IP Multicast Routing
Introduction
Code Introduction
Multicast Output Processing Revisited
mrouted Daemon
Virtual Interfaces
IGMP Revisited
Multicast Routing
Multicast Forwarding: ip_mforward Function
Cleanup: ip_mrouter_done Function
Summary
15. Socket Layer
Introduction
Code Introduction
socket Structure
System Calls
Processes, Descriptors, and Sockets
socket System Call
getsock and sockargs Functions
bind System Call
listen System Call
tsleep and wakeup Functions
accept System Call
sonewconn and soisconnected Functions
connect System call
shutdown System Call
close System Call
Summary
16. Socket I/O
Introduction
Code Introduction
Socket Buffers
write, writev, sendto, and sendmsg System Calls
sendmsg System Call
sendit Function
sosend Function
read, readv, recvfrom, and recvmsg System Calls
recvmsg System Call
recvit Function
soreceive Function
soreceive Code
select System Call
Summary
17. Socket Options
Introduction
Code Introduction
setsockopt System Call
getsockopt System Call
fcntl and ioctl System Calls
getsockname System Call
getpeername System Call
Summary
18. Radix Tree Routing Tables
Introduction
Routing Table Structure
Routing Sockets
Code Introduction
Radix Node Data Structures
Routing Structures
Initialization: route_init and rtable_init Functions
Initialization: rn_init and rn_inithead Functions
Duplicate Keys and Mask Lists
rn_match Function
rn_search Function
Summary
19. Routing Requests and Routing Messages
Introduction
rtalloc and rtalloc1 Functions
RTFREE Macro and rtfree Function
rtrequest Function
rt_setgate Function
rtinit Function
rtredirect Function
Routing Message Structures
rt_missmsg Function
rt_ifmsg Function
rt_newaddrmsg Function
rt_msg1 Function
rt_msg2 Function
sysctl_rtable Function
sysctl_dumpentry Function
sysctl_iflist Function
Summary
20. Routing Sockets
Introduction
routedomain and protosw Structures
Routing Control Blocks
raw_init Function
route_output Function
rt_xaddrs Function
rt_setmetrics Function.
raw_input Function
route_usrreq Function
raw_usrreq Function
raw_attach, raw_detach, and raw_disconnect Functions
Summary
21. ARP: Address Resolution Protocol
Introduction
ARP and the Routing Table
Code Introduction
ARP Structures
arpwhohas Function
arprequest Function
arpintr Function
in_arpinput Function
ARP Timer Functions
arpresolve Function
arplookup Function
Proxy ARP
arp_rtrequest Function
ARP and Multicasting
Summary
22. Protocol Control Blocks
Introduction
Code Introduction
inpcb Structure
in_pcballoc and in_pcbdetach Functions
Binding, Connecting, and Demultiplexing
in_pcblookup Function
in_pcbbind Function
in_pcbconnect Function
in_pcbdisconnect Function
in_setsockaddr and in_setpeeraddr Functions
in_pcbnotify, in_rtchange, and in_losing Functions
Implementation Refinements
Summary
23. UDP: User Datagram Protocol
Introduction
Code Introduction
UDP protosw Structure
UDP Header
udp_init Function
udp_output Function
udp_input Function
udp_saveopt Function
udp_ctlinput Function
udp_usrreq Function
udp_sysctl Function
Implementation Refinements
Summary
24. TCP: Transmission Control Protocol
Introduction
Code Introduction
TCP protosw Structure
TCP Header
TCP Control Block
TCP State Transition Diagram
TCP Sequence Numbers
tcp_init Function
Summary
25. TCP Timers
Introduction
Code Introduction
tcp_canceltimers Function
tcp_fasttimo Function
tcp_slowtimo Function
tcp_timers Function
Retransmission Timer Calculations
tcp_newtcpcb Function
tcp_setpersist Function
tcp_xmit_timer Function
Retransmission Timeout: tcp_timers Function
An RTT Example
Summary
26. TCP Output
Introduction
tcp_output Overview
Determine if a Segment Should be Sent
TCP Options
Window Scale Option
Timestamp Option
Send a Segment
tcp_template Function
tcp_respond Function
Summary
27. TCP Functions
Introduction
tcp_drain Function
tcp_drop Function
tcp_close Function
tcp_mss Function
tcp_ctlinput Function
tcp_notify Function
tcp_quench Function
TCP_REASS Macro and tcp_reass Function
tcp_trace Function
Summary
28. TCP Input
Introduction
Preliminary Processing
tcp_dooptions Function
Header Prediction
TCP Input: Slow Path Processing
Initation of Passive Open or Active Open
PAWS: Protection Against Wrapped Sequence Numbers
Trim Segment so Data is Within Window
Self-Connects and Simultaneous Opens
Record Timestamp
RST Processing
Summary
29. TCP Input (Continued)
Introduction
ACK Processing Overview
Completion of Passive Opens and Simultaneous Opens
Fast Retransmit and Fast Recovery Algorithms
ACK Processing
Update Window Information
Urgent Mode Processing
tcp_pulloutofband Function
Processing of Received Data
FIN Processing
Final Processing
Implementation Refinements
Header Compression
Summary
30. TCP User Requests
Introduction
tcp_usrreq Function
tcp_attach Function
tcp_disconnect Function
tcp_usrclosed Function
tcp_ctloutput Function
Summary
31. BPF: BSD Packet Filter
Introduction
Code Introduction
bpf_if Structure
bpf_d Structure
BPF Input
BPF Output
Summary
32. Raw IP
Introduction
Code Introduction
Raw IP protosw Structure
rip_init Function
rip_input Function
rip_output Function
rip_usrreq Function
rip_ctloutput Function
Summary
Epilogue
Appendix A. Solutions to Selected Exercises
Appendix B. Source Code Availability
Appendix C. RFC 1122 Compliance
Link-Layer Requirements
IP Requirements
IP Options Requirements
IP Fragmentation and Reassembly Requirements
ICMP Requirements
Multicasting Requirements
IGMP Requirements
Routing Requirements
ARP Requirements
UDP Requirements
TCP Requirements
Bibliography
Index