Understanding Linux Network Internals By Christian Benvenuti Publisher: O'Reilly Pub Date: December 2005 ISBN: 0-596-00255-6 Pages: 1062 Table of Contents | Index If you've ever wondered how Linux carries out the complicated tasks assigned to it by the IP protocols or if you just want to learn about modern networking through real-life examples Understanding Linux Network Internals is for you. Like the popular O'Reilly book, Understanding the Linux Kernel, this book clearly explains the underlying concepts and teaches you how to follow the actual C code that implements it. Although some background in the TCP/IP protocols is helpful, you can learn a great deal from this text about the protocols themselves and their uses. And if you already have a base knowledge of C, you can use the book's code walkthroughs to figure out exactly what this sophisticated part of the Linux kernel is doing. Part of the difficulty in understanding networks and implementing them is that the tasks are broken up and performed at many different times by different pieces of code. One of the strengths of this book is to integrate the pieces and reveal the relationships between far-flung functions and data structures. Understanding Linux Network Internals is both a big-picture discussion and a no-nonsense guide to the details of Linux networking. Topics include: Key problems with networking Network interface card (NIC) device drivers System initialization Layer 2 (link-layer) tasks and implementation Layer 3 (IPv4) tasks and implementation Neighbor infrastructure and protocols (ARP) Bridging Routing ICMP Author Christian Benvenuti, an operating system designer specializing in networking, explains much more than how Linux code works. He shows the purposes of major networking features and the trade-offs involved in choosing one solution over another. A large number of flowcharts and other diagrams enhance the book's understandability. This document was created by an unregistered ChmMagic, please go to http://www.bisenter.com to register it. Thanks. Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Understanding Linux Network Internals By Christian Benvenuti Publisher: O'Reilly Pub Date: December 2005 ISBN: 0-596-00255-6 Pages: 1062 Table of Contents | Index 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 This document was created by an unregistered ChmMagic, please go to http://www.bisenter.com to register it. Thanks. Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com 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 This document was created by an unregistered ChmMagic, please go to http://www.bisenter.com to register it. Thanks. Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com 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 This document was created by an unregistered ChmMagic, please go to http://www.bisenter.com to register it. Thanks. Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com 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 This document was created by an unregistered ChmMagic, please go to http://www.bisenter.com to register it. Thanks. Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com 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 This document was created by an unregistered ChmMagic, please go to http://www.bisenter.com to register it. Thanks. Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com 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 This document was created by an unregistered ChmMagic, please go to http://www.bisenter.com to register it. Thanks. Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com 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 This document was created by an unregistered ChmMagic, please go to http://www.bisenter.com to register it. Thanks. Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com 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 are also available for most titles (safari.oreilly.com). For more information, contact our corporate/institutional sales department: (800) 998-9938 or corporate@oreilly.com. 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'Reilly Media, Inc. The Linux series designations, Understanding Linux Network Internals, images of the American West, and related trade dress are trademarks of O'Reilly Media, Inc. Many of the designations used by manufacturers and sellers to distinguish their products are claimed as 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. While every precaution has been taken in the preparation of this book, the publisher and author assume no responsibility for errors or omissions, or for damages resulting from the use of the information contained herein. [M] ISBN: 0-596-00255-6 This document was created by an unregistered ChmMagic, please go to http://www.bisenter.com to register it. Thanks. Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com Preface Today more than ever before, networking is a hot topic. Any electronic gadget in its latest generation embeds some kind of networking capability. The Internet continues to broaden in its population and opportunities. It should not come as a surprise that a robust, freely available, and feature-rich operating system like Linux is well accepted by many producers of embedded devices. Its networking capabilities make it an optimal operating system for networking devices of any kind. The features it already has are well implemented, and new ones can be added easily. If you are a developer for embedded devices or a student who would like to experiment with Linux, this book will provide you with good fodder. The performance of a pure software-based product that uses Linux cannot compete with commercial products that can count on the help of specialized hardware. This of course is not a criticism of software; it is a simple recognition of the consequence of the speed difference between dedicated hardware and general-purpose CPUs. However, Linux can definitely compete with low-end commercial products that are entirely software-based. Of course, simple extensions to the Linux kernel allow vendors to use Linux on hybrid systems as well (software and hardware); it is only a matter of writing the necessary device drivers. Linux is also often used as the operating system of choice for the implementation of university projects and theses. Not all of them make it to the official kernel (not right away, at least). A few do, and others are simply made available online as patches to the official kernel. Isn't it a great satisfaction and reward to see your contribution to the Linux kernel being used by potentially millions of users? There is only one drawback: if your contribution is really appreciated, you may not be able to cope with the numerous emails of thanks or requests for help. The momentum for Linux has been growing continually over the past years, and apparently it can only keep growing. I first encountered Linux at the University of Bologna, where I was a grad student in computer science around 10 years ago. What a wonderful piece of software! I could work on my image processing projects at home on an i286/486 computer without having to compete with other students for access to the few Sun stations available at the university labs. Since then, my marriage to Linux has never seen a gray day. It has even started to displace my fond memories of the glorious C64 generation, when I was first introduced to programming with Assembly language and the various dialects of BASIC. Yes, I belong to the C64 generation, and to some extent I can compare the joy of my first programming experiences with the C64 to my first journeys into the Linux kernel. When I was first introduced to the beautiful world of networking, I started playing with the tools available on Linux. I also had the fortune to work for a UNESCO center in Italy where I helped develop their networking courses, based entirely on Linux boxes. That gave me access to a good lab equipped with all sorts of network devices and documentation, plus plenty of Linux enthusiasts to learn from and to collaborate with. Unfortunately for my own peace of mind (but fortunately, I hope, for the reader of this book who benefits from the results), I am the kind of person that likes to understand everything and takes very little for granted. So at UNESCO, I started looking into the kernel code. This not only proved to be a good way to burn in my knowledge, but it also gave me more confidence in making use of user-space configuration tools: whenever a configuration tool did not provide a specific option, I usually knew whether it would be possible to add it or whether it would have required significant changes to the kernel. This kind of study turns into a path without an end: you always want more. After developing a few tools as extensions to the Linux kernel (some revision of versions 2.0 and 2.2), my love for operating systems and networking led me to the Silicon Valley (Cisco Systems). When you learn a language, be it a human language or a computer programming language, a rule emerges: the more languages you know, the easier it becomes to learn new ones. You can identify each one's strengths and weaknesses, see the reasons behind design compromises, etc. The same applies to operating systems. When I noticed the lack of good documentation about the networking code of the Linux kernel and the availability of good books for other parts of the kernel, I decided to try filling in the gapor at least part of it. I hope this book will give you the starting documentation that I would have loved to have had years ago. I believe that this book, together with O'Reilly's other two kernel books (Understanding the Linux Kernel and Linux Device Drivers), This document was created by an unregistered ChmMagic, please go to http://www.bisenter.com to register it. Thanks. Simpo PDF Merge and Split Unregistered Version - http://www.simpopdf.com [...]... conversion of two-byte and four-byte fields Table 1- 2 Byte-ordering conversion routines Macro Meaning (short is 2 bytes, long is 4 bytes) htons Host-to -network byte order (short) htonl Host-to -network byte order (long) ntohs Network- to-host byte order (short) ntohl Network- to-host byte order (long) The macros are defined in the generic header file include /linux/ byteorder/generic.h This is how each architecture... Andrew You can read a detailed description of the Virtual File System layer in Understanding the Linux Kernel, and then delve into the source code to see how those network filesystems interface with it Virtual devices The use of a dedicated virtual device underlies the implementation of networking features Examples include 802.1Q, bonding, and the various tunneling protocols, such as IP-over-IP (IPIP)... frame, packet, segment, and message, depending on the layer where it is used (seeChapter 13 for more details) Table 1- 1 summarizes the major abbreviations you'll see in the book Table 1- 1 Abbreviations used frequently in this book Abbreviation Meaning L2 Link layer (e.g., Ethernet) L3 Network layer (e.g., IP) L4 Transport layer (e.g., UDP/TCP/ICMP) BH Bottom half IRQ Interrupt RX Reception TX Transmission... summarizes the locking mechanisms seen in networking code; I refer you to the high-quality, detailed discussions available in O'Reilly's Understanding the Linux Kernel and Linux Device Driver Each mutual exclusion mechanism is the best choice for particular circumstances Here is a brief summary of the alternative mutual exclusion approaches you will see often in the networking code: Spin locks This is a... article published by its author, Paul McKenney, in the Linux Journal moc.fdpopmis.www//:ptth - noisreV deretsigernU tilpS dna egreM FDP opmiS This document was created by an unregistered ChmMagic, please go to http://www.bisenter.com to register it Thanks (http://linuxjournal.com/article/6993) [*] You can also refer to Understanding the Linux Kernel and Linux Device Drivers [*] For more documentation, you... will see in action in Chapter 8 1. 2 .11 Conversions Between Host and Network Order Data structures spanning more than one byte can be stored in memory with two different formats: Little Endian and Big Endian The first format stores the least significant byte at the lowest memory address, and the second does the opposite The format used by an operating system such as Linux depends on the processor in... lack of space, I had to select a subset of the Linux networking features to cover No selection would make everyone happy, but I think I covered the core of the networking code, and with the knowledge you can gain with this book, you will find it easier to study on your own any other networking feature of the kernel In this book, I decided to focus on the networking code, from the interface between device... parts of the kernel, not just those involved in networking 1. 2 .1 Memory Caches The kernel uses the kmalloc and kfree functions to allocate and free a memory block, respectively The syntax of those two functions is similar to that of the two sister calls, malloc and free, from the libc user-space library For more details onkmalloc and kfree, please refer to Linux Device Drivers (O'Reilly) It is common... parameter in /proc For more details on how memory caches are implemented and how they interface to the slab allocator, please refer to Understanding the Linux Kernel (O'Reilly) 1. 2.2 Caching and Hash Tables It is pretty common to use a cache to increase performance In the networking code, there are caches for L3-to-L2 mappings (such as the ARP cache used by IPv4), for the routing table cache, etc Cache... http://www.bisenter.com to register it Thanks 1. 2 .10 Mutual Exclusion Locking is used extensively in the networking code, and you are likely to see it come up as an issue under every topic in this book Mutual exclusion, locking mechanisms, and synchronization are a general topicand a highly interesting and complex onefor many types of programming, especially kernel programming Linux has seen the introduction and . 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. 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 structures. Understanding Linux Network Internals is both a big-picture discussion and a no-nonsense guide to the details of Linux networking. Topics include: Key problems with networking Network