Understanding Linux Network Internals
...............................................
Publisher: O'Reilly
Pub Date: December 2005
ISBN: 0-596-00255-6
Pages: 1062
Section 1.1. Basic Terminology
Section 1.2. Common Coding Patterns
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.2. procfs Versus sysctl
Section 3.5. Serializing Configuration Changes
Part II: System Initialization
Chapter 4. Notification Chains
Section 4.1. Reasons for Notification Chains
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.7. Initializing the Device Handling Layer: net_dev_init
Section 5.8. User-Space Helpers
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.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.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.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
Section 10.1. Interactions with Other Features
Section 10.2. Enabling and Disabling a Device
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.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
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
Chapter 14. Bridging: Concepts
Section 14.1. Repeaters, Bridges, and Routers
Section 14.2. Bridges Versus Switches
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.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.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.4. Packet Fragmentation/Defragmentation
Chapter 19. Internet Protocol Version 4 (IPv4): Linux Foundations and Features
Section 19.1. Main IPv4 Data Structures
Section 19.2. General Packet Handling
Chapter 20. Internet Protocol Version 4 (IPv4): Forwarding and 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.4. IP Configuration
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.4. Applications of the ICMP Protocol
Section 25.6. Protocol Initialization
Section 25.7. Data Structures Featured in This Chapter
Section 25.8. Transmitting ICMP Messages
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
Chapter 28. Neighboring Subsystem: Address Resolution Protocol (ARP)
Section 28.1. ARP Packet Format
Section 28.2. Example of an ARP Transaction
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.12. External Events
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
Section 30.1. Routers, Routes, and Routing Tables
Section 30.2. Essential Elements of Routing
Section 30.5. Packet Reception Versus Packet Transmission
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.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.7. Routing Subsystem Initialization
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
Section 35.1. High-Level View of Lookup Functions
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.9. Effects of Multipath on Next Hop Selection
Section 35.12. Policy Routing and Routing Table Based Classifier
Chapter 36. Routing: Miscellaneous Topics
Section 36.1. User-Space Configuration Tools
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