| | Copyright |
| | Preface |
|
| | The Audience for This Book |
|
| | Background Information |
|
| | Organization of the Material |
|
| | Conventions Used in This Book |
|
| | Using Code Examples |
|
| | We'd Like to Hear from You |
|
| | Safari Enabled |
|
| | Acknowledgments |
| |
Part I:
General Background |
|
| |
Chapter 1.
Introduction |
|
| |
Section 1.1.
Basic Terminology |
|
| |
Section 1.2.
Common Coding Patterns |
|
| |
Section 1.3.
User-Space Tools |
|
| |
Section 1.4.
Browsing the Source Code |
|
| |
Section 1.5.
When a Feature Is Offered as a Patch |
|
| |
Chapter 2.
Critical Data Structures |
|
| |
Section 2.1.
The Socket Buffer: sk_buff Structure |
|
| |
Section 2.2.
net_device Structure |
|
| |
Section 2.3.
Files Mentioned in This Chapter |
|
| |
Chapter 3.
User-Space-to-Kernel Interface |
|
| |
Section 3.1.
Overview |
|
| |
Section 3.2.
procfs Versus sysctl |
|
| |
Section 3.3.
ioctl |
|
| |
Section 3.4.
Netlink |
|
| |
Section 3.5.
Serializing Configuration Changes |
| |
Part II:
System Initialization |
|
| |
Chapter 4.
Notification Chains |
|
| |
Section 4.1.
Reasons for Notification Chains |
|
| |
Section 4.2.
Overview |
|
| |
Section 4.3.
Defining a Chain |
|
| |
Section 4.4.
Registering with a Chain |
|
| |
Section 4.5.
Notifying Events on a Chain |
|
| |
Section 4.6.
Notification Chains for the Networking Subsystems |
|
| |
Section 4.7.
Tuning via /proc Filesystem |
|
| |
Section 4.8.
Functions and Variables Featured in This Chapter |
|
| |
Section 4.9.
Files and Directories Featured in This Chapter |
|
| |
Chapter 5.
Network Device Initialization |
|
| |
Section 5.1.
System Initialization Overview |
|
| |
Section 5.2.
Device Registration and Initialization |
|
| |
Section 5.3.
Basic Goals of NIC Initialization |
|
| |
Section 5.4.
Interaction Between Devices and Kernel |
|
| |
Section 5.5.
Initialization Options |
|
| |
Section 5.6.
Module Options |
|
| |
Section 5.7.
Initializing the Device Handling Layer: net_dev_init |
|
| |
Section 5.8.
User-Space Helpers |
|
| |
Section 5.9.
Virtual Devices |
|
| |
Section 5.10.
Tuning via /proc Filesystem |
|
| |
Section 5.11.
Functions and Variables Featured in This Chapter |
|
| |
Section 5.12.
Files and Directories Featured in This Chapter |
|
| |
Chapter 6.
The PCI Layer and Network Interface Cards |
|
| |
Section 6.1.
Data Structures Featured in This Chapter |
|
| |
Section 6.2.
Registering a PCI NIC Device Driver |
|
| |
Section 6.3.
Power Management and Wake-on-LAN |
|
| |
Section 6.4.
Example of PCI NIC Driver Registration |
|
| |
Section 6.5.
The Big Picture |
|
| |
Section 6.6.
Tuning via /proc Filesystem |
|
| |
Section 6.7.
Functions and Variables Featured in This Chapter |
|
| |
Section 6.8.
Files and Directories Featured in This Chapter |
|
| |
Chapter 7.
Kernel Infrastructure for Component Initialization |
|
| |
Section 7.1.
Boot-Time Kernel Options |
|
| |
Section 7.2.
Module Initialization Code |
|
| |
Section 7.3.
Optimized Macro-Based Tagging |
|
| |
Section 7.4.
Boot-Time Initialization Routines |
|
| |
Section 7.5.
Memory Optimizations |
|
| |
Section 7.6.
Tuning via /proc Filesystem |
|
| |
Section 7.7.
Functions and Variables Featured in This Chapter |
|
| |
Section 7.8.
Files and Directories Featured in This Chapter |
|
| |
Chapter 8.
Device Registration and Initialization |
|
| |
Section 8.1.
When a Device Is Registered |
|
| |
Section 8.2.
When a Device Is Unregistered |
|
| |
Section 8.3.
Allocating net_device Structures |
|
| |
Section 8.4.
Skeleton of NIC Registration and Unregistration |
|
| |
Section 8.5.
Device Initialization |
|
| |
Section 8.6.
Organization of net_device Structures |
|
| |
Section 8.7.
Device State |
|
| |
Section 8.8.
Registering and Unregistering Devices |
|
| |
Section 8.9.
Device Registration |
|
| |
Section 8.10.
Device Unregistration |
|
| |
Section 8.11.
Enabling and Disabling a Network Device |
|
| |
Section 8.12.
Updating the Device Queuing Discipline State |
|
| |
Section 8.13.
Configuring Device-Related Information from User Space |
|
| |
Section 8.14.
Virtual Devices |
|
| |
Section 8.15.
Locking |
|
| |
Section 8.16.
Tuning via /proc Filesystem |
|
| |
Section 8.17.
Functions and Variables Featured in This Chapter |
|
| |
Section 8.18.
Files and Directories Featured in This Chapter |
| |
Part III:
Transmission and Reception |
|
| |
Chapter 9.
Interrupts and Network Drivers |
|
| |
Section 9.1.
Decisions and Traffic Direction |
|
| |
Section 9.2.
Notifying Drivers When Frames Are Received |
|
| |
Section 9.3.
Interrupt Handlers |
|
| |
Section 9.4.
softnet_data Structure |
|
| |
Chapter 10.
Frame Reception |
|
| |
Section 10.1.
Interactions with Other Features |
|
| |
Section 10.2.
Enabling and Disabling a Device |
|
| |
Section 10.3.
Queues |
|
| |
Section 10.4.
Notifying the Kernel of Frame Reception: NAPI and netif_rx |
|
| |
Section 10.5.
Old Interface Between Device Drivers and Kernel: First Part of netif_rx |
|
| |
Section 10.6.
Congestion Management |
|
| |
Section 10.7.
Processing the NET_RX_SOFTIRQ: net_rx_action |
|
| |
Chapter 11.
Frame Transmission |
|
| |
Section 11.1.
Enabling and Disabling Transmissions |
|
| |
Chapter 12.
General and Reference Material About Interrupts |
|
| |
Section 12.1.
Statistics |
|
| |
Section 12.2.
Tuning via /proc and sysfs Filesystems |
|
| |
Section 12.3.
Functions and Variables Featured in This Part of the Book |
|
| |
Section 12.4.
Files and Directories Featured in This Part of the Book |
|
| |
Chapter 13.
Protocol Handlers |
|
| |
Section 13.1.
Overview of Network Stack |
|
| |
Section 13.2.
Executing the Right Protocol Handler |
|
| |
Section 13.3.
Protocol Handler Organization |
|
| |
Section 13.4.
Protocol Handler Registration |
|
| |
Section 13.5.
Ethernet Versus IEEE 802.3 Frames |
|
| |
Section 13.6.
Tuning via /proc Filesystem |
|
| |
Section 13.7.
Functions and Variables Featured in This Chapter |
|
| |
Section 13.8.
Files and Directories Featured in This Chapter |
| |
Part IV:
Bridging |
|
| |
Chapter 14.
Bridging: Concepts |
|
| |
Section 14.1.
Repeaters, Bridges, and Routers |
|
| |
Section 14.2.
Bridges Versus Switches |
|
| |
Section 14.3.
Hosts |
|
| |
Section 14.4.
Merging LANs with Bridges |
|
| |
Section 14.5.
Bridging Different LAN Technologies |
|
| |
Section 14.6.
Address Learning |
|
| |
Section 14.7.
Multiple Bridges |
|
| |
Chapter 15.
Bridging: The Spanning Tree Protocol |
|
| |
Section 15.1.
Basic Terminology |
|
| |
Section 15.2.
Example of Hierarchical Switched L2 Topology |
|
| |
Section 15.3.
Basic Elements of the Spanning Tree Protocol |
|
| |
Section 15.4.
Bridge and Port IDs |
|
| |
Section 15.5.
Bridge Protocol Data Units (BPDUs) |
|
| |
Section 15.6.
Defining the Active Topology |
|
| |
Section 15.7.
Timers |
|
| |
Section 15.8.
Topology Changes |
|
| |
Section 15.9.
BPDU Encapsulation |
|
| |
Section 15.10.
Transmitting Configuration BPDUs |
|
| |
Section 15.11.
Processing Ingress Frames |
|
| |
Section 15.12.
Convergence Time |
|
| |
Section 15.13.
Overview of Newer Spanning Tree Protocols |
|
| |
Chapter 16.
Bridging: Linux Implementation |
|
| |
Section 16.1.
Bridge Device Abstraction |
|
| |
Section 16.2.
Important Data Structures |
|
| |
Section 16.3.
Initialization of Bridging Code |
|
| |
Section 16.4.
Creating Bridge Devices and Bridge Ports |
|
| |
Section 16.5.
Creating a New Bridge Device |
|
| |
Section 16.6.
Bridge Device Setup Routine |
|
| |
Section 16.7.
Deleting a Bridge |
|
| |
Section 16.8.
Adding Ports to a Bridge |
|
| |
Section 16.9.
Enabling and Disabling a Bridge Device |
|
| |
Section 16.10.
Enabling and Disabling a Bridge Port |
|
| |
Section 16.11.
Changing State on a Bridge Port |
|
| |
Section 16.12.
The Big Picture |
|
| |
Section 16.13.
Forwarding Database |
|
| |
Section 16.14.
Handling Ingress Traffic |
|
| |
Section 16.15.
Transmitting on a Bridge Device |
|
| |
Section 16.16.
Spanning Tree Protocol (STP) |
|
| |
Section 16.17.
netdevice Notification Chain |
|
| |
Chapter 17.
Bridging: Miscellaneous Topics |
|
| |
Section 17.1.
User-Space Configuration Tools |
|
| |
Section 17.2.
Tuning via /proc Filesystem |
|
| |
Section 17.3.
Tuning via /sys Filesystem |
|
| |
Section 17.4.
Statistics |
|
| |
Section 17.5.
Data Structures Featured in This Part of the Book |
|
| |
Section 17.6.
Functions and Variables Featured in This Part of the Book |
|
| |
Section 17.7.
Files and Directories Featured in This Part of the Book |
| |
Part V:
Internet Protocol Version 4 (IPv4) |
|
| |
Chapter 18.
Internet Protocol Version 4 (IPv4): Concepts |
|
| |
Section 18.1.
IP Protocol: The Big Picture |
|
| |
Section 18.2.
IP Header |
|
| |
Section 18.3.
IP Options |
|
| |
Section 18.4.
Packet Fragmentation/Defragmentation |
|
| |
Section 18.5.
Checksums |
|
| |
Chapter 19.
Internet Protocol Version 4 (IPv4): Linux Foundations and Features |
|
| |
Section 19.1.
Main IPv4 Data Structures |
|
| |
Section 19.2.
General Packet Handling |
|
| |
Section 19.3.
IP Options |
|
| |
Chapter 20.
Internet Protocol Version 4 (IPv4): Forwarding and Local Delivery |
|
| |
Section 20.1.
Forwarding |
|
| |
Section 20.2.
Local Delivery |
|
| |
Chapter 21.
Internet Protocol Version 4 (IPv4): Transmission |
|
| |
Section 21.1.
Key Functions That Perform Transmission |
|
| |
Section 21.2.
Interface to the Neighboring Subsystem |
|
| |
Chapter 22.
Internet Protocol Version 4 (IPv4): Handling Fragmentation |
|
| |
Section 22.1.
IP Fragmentation |
|
| |
Section 22.2.
IP Defragmentation |
|
| |
Chapter 23.
Internet Protocol Version 4 (IPv4): Miscellaneous Topics |
|
| |
Section 23.1.
Long-Living IP Peer Information |
|
| |
Section 23.2.
Selecting the IP Header's ID Field |
|
| |
Section 23.3.
IP Statistics |
|
| |
Section 23.4.
IP Configuration |
|
| |
Section 23.5.
IP-over-IP |
|
| |
Section 23.6.
IPv4: What's Wrong with It? |
|
| |
Section 23.7.
Tuning via /proc Filesystem |
|
| |
Section 23.8.
Data Structures Featured in This Part of the Book |
|
| |
Section 23.9.
Functions and Variables Featured in This Part of the Book |
|
| |
Section 23.10.
Files and Directories Featured in This Part of the Book |
|
| |
Chapter 24.
Layer Four Protocol and Raw IP Handling |
|
| |
Section 24.1.
Available L4 Protocols |
|
| |
Section 24.2.
L4 Protocol Registration |
|
| |
Section 24.3.
L3 to L4 Delivery: ip_local_deliver_finish |
|
| |
Section 24.4.
IPv4 Versus IPv6 |
|
| |
Section 24.5.
Tuning via /proc Filesystem |
|
| |
Section 24.6.
Functions and Variables Featured in This Chapter |
|
| |
Section 24.7.
Files and Directories Featured in This Chapter |
|
| |
Chapter 25.
Internet Control Message Protocol (ICMPv4) |
|
| |
Section 25.1.
ICMP Header |
|
| |
Section 25.2.
ICMP Payload |
|
| |
Section 25.3.
ICMP Types |
|
| |
Section 25.4.
Applications of the ICMP Protocol |
|
| |
Section 25.5.
The Big Picture |
|
| |
Section 25.6.
Protocol Initialization |
|
| |
Section 25.7.
Data Structures Featured in This Chapter |
|
| |
Section 25.8.
Transmitting ICMP Messages |
|
| |
Section 25.9.
ICMP Statistics |
|
| |
Section 25.10.
Passing Error Notifications to the Transport Layer |
|
| |
Section 25.11.
Tuning via /proc Filesystem |
|
| |
Section 25.12.
Functions and Variables Featured in This Chapter |
|
| |
Section 25.13.
Files and Directories Featured in This Chapter |
| |
Part VI:
Neighboring Subsystem |
|
| |
Chapter 26.
Neighboring Subsystem: Concepts |
|
| |
Section 26.1.
What Is a Neighbor? |
|
| |
Section 26.2.
Reasons That Neighboring Protocols Are Needed |
|
| |
Section 26.3.
Linux Implementation |
|
| |
Section 26.4.
Proxying the Neighboring Protocol |
|
| |
Section 26.5.
When Solicitation Requests Are Transmitted and Processed |
|
| |
Section 26.6.
Neighbor States and Network Unreachability Detection (NUD) |
|
| |
Chapter 27.
Neighboring Subsystem: Infrastructure |
|
| |
Section 27.1.
Main Data Structures |
|
| |
Section 27.2.
Common Interface Between L3 Protocols and Neighboring Protocols |
|
| |
Section 27.3.
General Tasks of the Neighboring Infrastructure |
|
| |
Section 27.4.
Reference Counts on neighbour Structures |
|
| |
Section 27.5.
Creating a neighbour Entry |
|
| |
Section 27.6.
Neighbor Deletion |
|
| |
Section 27.7.
Acting As a Proxy |
|
| |
Section 27.8.
L2 Header Caching |
|
| |
Section 27.9.
Protocol Initialization and Cleanup |
|
| |
Section 27.10.
Interaction with Other Subsystems |
|
| |
Section 27.11.
Interaction Between Neighboring Protocols and L3 Transmission Functions |
|
| |
Section 27.12.
Queuing |
|
| |
Chapter 28.
Neighboring Subsystem: Address Resolution Protocol (ARP) |
|
| |
Section 28.1.
ARP Packet Format |
|
| |
Section 28.2.
Example of an ARP Transaction |
|
| |
Section 28.3.
Gratuitous ARP |
|
| |
Section 28.4.
Responding from Multiple Interfaces |
|
| |
Section 28.5.
Tunable ARP Options |
|
| |
Section 28.6.
ARP Protocol Initialization |
|
| |
Section 28.7.
Initialization of a neighbour Structure |
|
| |
Section 28.8.
Transmitting and Receiving ARP Packets |
|
| |
Section 28.9.
Processing Ingress ARP Packets |
|
| |
Section 28.10.
Proxy ARP |
|
| |
Section 28.11.
Examples |
|
| |
Section 28.12.
External Events |
|
| |
Section 28.13.
ARPD |
|
| |
Section 28.14.
Reverse Address Resolution Protocol (RARP) |
|
| |
Section 28.15.
Improvements in ND (IPv6) over ARP (IPv4) |
|
| |
Chapter 29.
Neighboring Subsystem: Miscellaneous Topics |
|
| |
Section 29.1.
System Administration of Neighbors |
|
| |
Section 29.2.
Tuning via /proc Filesystem |
|
| |
Section 29.3.
Data Structures Featured in This Part of the Book |
|
| |
Section 29.4.
Files and Directories Featured in This Part of the Book |
| |
Part VII:
Routing |
|
| |
Chapter 30.
Routing: Concepts |
|
| |
Section 30.1.
Routers, Routes, and Routing Tables |
|
| |
Section 30.2.
Essential Elements of Routing |
|
| |
Section 30.3.
Routing Table |
|
| |
Section 30.4.
Lookups |
|
| |
Section 30.5.
Packet Reception Versus Packet Transmission |
|
| |
Chapter 31.
Routing: Advanced |
|
| |
Section 31.1.
Concepts Behind Policy Routing |
|
| |
Section 31.2.
Concepts Behind Multipath Routing |
|
| |
Section 31.3.
Interactions with Other Kernel Subsystems |
|
| |
Section 31.4.
Routing Protocol Daemons |
|
| |
Section 31.5.
Verbose Monitoring |
|
| |
Section 31.6.
ICMP_REDIRECT Messages |
|
| |
Section 31.7.
Reverse Path Filtering |
|
| |
Chapter 32.
Routing: Li nux Implementation |
|
| |
Section 32.1.
Kernel Options |
|
| |
Section 32.2.
Main Data Structures |
|
| |
Section 32.3.
Route and Address Scopes |
|
| |
Section 32.4.
Primary and Secondary IP Addresses |
|
| |
Section 32.5.
Generic Helper Routines and Macros |
|
| |
Section 32.6.
Global Locks |
|
| |
Section 32.7.
Routing Subsystem Initialization |
|
| |
Section 32.8.
External Events |
|
| |
Section 32.9.
Interactions with Other Subsystems |
|
| |
Chapter 33.
Routing: The Routing Cache |
|
| |
Section 33.1.
Routing Cache Initialization |
|
| |
Section 33.2.
Hash Table Organization |
|
| |
Section 33.3.
Major Cache Operations |
|
| |
Section 33.4.
Multipath Caching |
|
| |
Section 33.5.
Interface Between the DST and Calling Protocols |
|
| |
Section 33.6.
Flushing the Routing Cache |
|
| |
Section 33.7.
Garbage Collection |
|
| |
Section 33.8.
Egress ICMP REDIRECT Rate Limiting |
|
| |
Chapter 34.
Routing: Routing Tables |
|
| |
Section 34.1.
Organization of Routing Hash Tables |
|
| |
Section 34.2.
Routing Table Initialization |
|
| |
Section 34.3.
Adding and Removing Routes |
|
| |
Section 34.4.
Policy Routing and Its Effects on Routing Table Definitions |
|
| |
Chapter 35.
Routing: Lookups |
|
| |
Section 35.1.
High-Level View of Lookup Functions |
|
| |
Section 35.2.
Helper Routines |
|
| |
Section 35.3.
The Table Lookup: fn_hash_lookup |
|
| |
Section 35.4.
fib_lookup Function |
|
| |
Section 35.5.
Setting Functions for Reception and Transmission |
|
| |
Section 35.6.
General Structure of the Input and Output Routing Routines |
|
| |
Section 35.7.
Input Routing |
|
| |
Section 35.8.
Output Routing |
|
| |
Section 35.9.
Effects of Multipath on Next Hop Selection |
|
| |
Section 35.10.
Policy Routing |
|
| |
Section 35.11.
Source Routing |
|
| |
Section 35.12.
Policy Routing and Routing Table Based Classifier |
|
| |
Chapter 36.
Routing: Miscellaneous Topics |
|
| |
Section 36.1.
User-Space Configuration Tools |
|
| |
Section 36.2.
Statistics |
|
| |
Section 36.3.
Tuning via /proc Filesystem |
|
| |
Section 36.4.
Enabling and Disabling Forwarding |
|
| |
Section 36.5.
Data Structures Featured in This Part of the Book |
|
| |
Section 36.6.
Functions and Variables Featured in This Part of the Book |
|
| |
Section 36.7.
Files and Directories Featured in This Part of the Book |
| | About the Authors |
| | Colophon |
| | Index |