Tuesday, October 20, 2009

Section 16.3.  Initialization of Bridging Code










16.3. Initialization of Bridging Code
















The bridging code can be either built into the kernel or compiled as a module. The initialization and cleanup routines, br_init and br_uninit, respectively, are defined in /net/bridge/br.c.


Initialization consists of:


  • Initializing the forwarding database by creating a slab cache (a memory area) to use for allocating net_bridge_fdb_entry structures (br_fdb_init).

  • Initializing the function pointer br_ioctl_hook to the routine that will take care of ioctl commands. ioctl commands are described in Chapter 17.

  • Initializing the function pointer br_handle_frame_hook to the routine that will process ingress BPDUs. See the section "Handling Ingress Traffic."

  • Registering a callback with the neTDev_chain notification chain. See the section "netdevice Notification Chain."


When the kernel is compiled with support for Bridging-Firewalling
, the option is initialized here with br_netfilter_init. Later, in Figure 16-11 in the section "The Big Picture," you can see where all the Netfilter hooks are located in the core routines used by the bridging code to process ingress and egress traffic.



Figure 16-6. Relationships between the main data structure types



Bridging-Firewalling is added to the kernel with the option "Networking support Networking options Network packet filtering (replaces ipchains) Bridged IP/ARP packet filtering". The Ethernel-Bridging-Tables option (i.e., ebtables) is initialized elsewhere (see the section "Data Frames Versus BPDUs").


The cleanup routine br_deinit simply undoes what was done by br_init.












No comments: