Preface Part I. General Background 1. Introduction Basic Terminology Common Coding Patterns User-Space Tools Browsing the Source Code When a Feature Is Offered as a Patch 2. Critical Data Structures The Socket Buffer: sk_buff Structure net_device Structure Files Mentioned in This Chapter 3. User-Space-to-Kernel Interface Overview procfs Versus sysctl ioctl Netlink Serializing Configuration Changes Part II. System Initialization 4. Notification Chains Reasons for Notification Chains Overview Defining a Chain Registering with a Chain Notifying Events on a Chain Notification Chains for the Networking Subsystems Tuning via/proc Filesystem Functions and Variables Featured in This Chapter Files and Directories Featured in This Chapter 5. Network Device Initialization System Initialization Overview Device Registration and Initialization Basic Goals of NIC Initialization Interaction Between Devices and Kernel Initialization Options Module Options Initializing the Device Handling Layer: net_dev_init User-Space Helpers Virtual Devices Tuning via/proc Filesystem Functions and Variables Featured in This Chapter Files and Directories Featured in This Chapter 6. The PCI Layer and Network Interface Cards Data Structures Featured in This Chapter Registering a PCI NIC Device Driver Power Management and Wake-on-LAN Example of PCI NIC Driver Registration The Big Picture Tuning via/proc Filesystem Functions and Variables Featured in This Chapter Files and Directories Featured in This Chapter Part III Transmission and reception Part IV Bridging Part V Internet Protocol Version 4 (IPv4) Part VI Neighboring Subsystem Part VII Routing