www.it-ebooks.info www.it-ebooks.info Understanding LINUX NETWORK INTERNALS www.it-ebooks.info Other Linux resources from O’Reilly Related titles Linux in a Nutshell LPI Linux Certification in a Linux Network Nutshell Administrator’s Guide Learning Red Hat Linux Running Linux Linux Server HacksTM Linux Device Drivers Linux Security Cookbook Understanding the Linux Managing RAID on Linux Kernel Linux Web Server CD Building Secure Servers with Bookshelf Linux Building Embedded Linux Systems Linux Books linux.oreilly.com is a complete catalog of O’Reilly’s books on Resource Center Linux and Unix and related technologies, including sample chapters and code examples. ONLamp.com isthe premiersiteforthe opensource web plat- form: Linux, Apache, MySQL, and either Perl, Python, or PHP. Conferences O’Reillybringsdiverseinnovatorstogethertonurturetheideas thatsparkrevolutionaryindustries.Wespecializeindocument- ing the latest tools and systems, translating the innovator’s knowledge into useful skills for those in the trenches. Visit conferences.oreilly.com for our upcoming events. Safari Bookshelf (safari.oreilly.com) is the premier online refer- ence library for programmers and IT professionals. Conduct searchesacrossmorethan1,000books.Subscriberscanzeroin on answers to time-critical questions in a matter of seconds. Read the books on your Bookshelf from cover to cover or sim- ply flip to the page you need. Try it today with a free trial. www.it-ebooks.info Understanding LINUX NETWORK INTERNALS Christian Benvenuti Beijing • Cambridge • Farnham • Köln • Paris • Sebastopol • Taipei • Tokyo www.it-ebooks.info Understanding Linux Network Internals by Christian Benvenuti Copyright © 2006 O’Reilly Media, Inc. All rights reserved. Printed in the United States of America. Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472. O’Reilly books may be purchased for educational, business, or sales promotional use. Online editions arealsoavailableformosttitles(safari.oreilly.com).Formoreinformation,contactourcorporate/insti- tutional sales department: (800) 998-9938 [email protected]. Editor: Andy Oram Production Editor: Philip Dangler Cover Designer: Karen Montgomery Interior Designer: David Futato Printing History: December 2005: First Edition. Nutshell Handbook, the Nutshell Handbook logo, and the O’Reilly logo are registered trademarks of O’ReillyMedia,Inc.TheLinuxseriesdesignations,UnderstandingLinuxNetworkInternals,imagesof the American West, and related trade dress are trademarks of O’Reilly Media, Inc. Manyofthedesignationsusedbymanufacturersandsellerstodistinguishtheirproductsareclaimedas trademarks. Where those designations appear in this book, and O’Reilly Media, Inc. was aware of a trademark claim, the designations have been printed in caps or initial caps. Whileeveryprecautionhasbeentakeninthepreparationofthisbook,thepublisherandauthorassume no responsibility for errors or omissions, or for damages resulting from the use of the information contained herein. [M] ISBN:978-0-596-00255-8 [5/08] www.it-ebooks.info Table of Contents Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv Part I. General Background 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Basic Terminology 3 Common Coding Patterns 4 User-Space Tools 18 Browsing the Source Code 19 When a Feature Is Offered as a Patch 20 2. Critical Data Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 The Socket Buffer: sk_buff Structure 22 net_device Structure 43 Files Mentioned in This Chapter 57 3. User-Space-to-Kernel Interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Overview 58 procfs Versus sysctl 60 ioctl 67 Netlink 70 Serializing Configuration Changes 71 v www.it-ebooks.info Part II. System Initialization 4. Notification Chains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Reasons for Notification Chains 75 Overview 77 Defining a Chain 78 Registering with a Chain 78 Notifying Events on a Chain 79 Notification Chains for the Networking Subsystems 81 Tuning via /proc Filesystem 82 Functions and Variables Featured in This Chapter 83 Files and Directories Featured in This Chapter 83 5. Network Device Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 System Initialization Overview 84 Device Registration and Initialization 86 Basic Goals of NIC Initialization 86 Interaction Between Devices and Kernel 87 Initialization Options 93 Module Options 93 Initializing the Device Handling Layer: net_dev_init 94 User-Space Helpers 96 Virtual Devices 100 Tuning via /proc Filesystem 103 Functions and Variables Featured in This Chapter 104 Files and Directories Featured in This Chapter 105 6. The PCI Layer and Network Interface Cards. . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Data Structures Featured in This Chapter 106 Registering a PCI NIC Device Driver 108 Power Management and Wake-on-LAN 109 Example of PCI NIC Driver Registration 110 The Big Picture 112 Tuning via /proc Filesystem 114 Functions and Variables Featured in This Chapter 114 Files and Directories Featured in This Chapter 115 vi | Table of Contents www.it-ebooks.info 7. Kernel Infrastructure for Component Initialization . . . . . . . . . . . . . . . . . . . . 116 Boot-Time Kernel Options 116 Module Initialization Code 122 Optimized Macro-Based Tagging 125 Boot-Time Initialization Routines 128 Memory Optimizations 130 Tuning via /proc Filesystem 134 Functions and Variables Featured in This Chapter 134 Files and Directories Featured in This Chapter 135 8. Device Registration and Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 When a Device Is Registered 137 When a Device Is Unregistered 138 Allocating net_device Structures 138 Skeleton of NIC Registration and Unregistration 140 Device Initialization 141 Organization of net_device Structures 145 Device State 147 Registering and Unregistering Devices 149 Device Registration 154 Device Unregistration 156 Enabling and Disabling a Network Device 159 Updating the Device Queuing Discipline State 161 Configuring Device-Related Information fromUserSpace 166 Virtual Devices 169 Locking 171 Tuning via /proc Filesystem 171 Functions and Variables Featured in This Chapter 172 Files and Directories Featured in This Chapter 173 Part III. Transmission and Reception 9. Interrupts and Network Drivers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Decisions and Traffic Direction 178 Notifying Drivers When Frames Are Received 178 Interrupt Handlers 183 softnet_data Structure 206 Table of Contents | vii www.it-ebooks.info 10. Frame Reception . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 Interactions with Other Features 211 Enabling and Disabling a Device 211 Queues 212 Notifying the Kernel of Frame Reception: NAPI and netif_rx 212 Old Interface Between Device Drivers and Kernel: First Part of netif_rx 219 Congestion Management 225 Processing the NET_RX_SOFTIRQ: net_rx_action 228 11. Frame Transmission. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 Enabling and Disabling Transmissions 241 12. General and Reference Material About Interrupts. . . . . . . . . . . . . . . . . . . . . 261 Statistics 261 Tuning via /proc and sysfs Filesystems 262 Functions and Variables Featured in This Part of the Book 263 Files and Directories Featured in This Part of the Book 265 13. Protocol Handlers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 Overview of Network Stack 266 Executing the Right Protocol Handler 274 Protocol Handler Organization 278 Protocol Handler Registration 279 Ethernet Versus IEEE 802.3 Frames 281 Tuning via /proc Filesystem 293 Functions and Variables Featured in This Chapter 293 Files and Directories Featured in This Chapter 294 Part IV. Bridging 14. Bridging: Concepts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 Repeaters, Bridges, and Routers 297 Bridges Versus Switches 299 Hosts 300 Merging LANs with Bridges 300 Bridging Different LAN Technologies 302 Address Learning 302 Multiple Bridges 305 viii | Table of Contents www.it-ebooks.info