2005-04-17 02:20:36 +04:00
/*
* Generic parts
* Linux ethernet bridge
*
* Authors :
* Lennert Buytenhek < buytenh @ gnu . org >
*
* $ Id : br . c , v 1.47 2001 / 12 / 24 00 : 56 : 41 davem Exp $
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version
* 2 of the License , or ( at your option ) any later version .
*/
# include <linux/config.h>
# include <linux/module.h>
# include <linux/kernel.h>
# include <linux/netdevice.h>
# include <linux/etherdevice.h>
# include <linux/init.h>
2006-03-21 09:59:06 +03:00
# include <linux/llc.h>
# include <net/llc.h>
2005-04-17 02:20:36 +04:00
# include "br_private.h"
int ( * br_should_route_hook ) ( struct sk_buff * * pskb ) = NULL ;
2006-03-21 09:59:06 +03:00
static struct llc_sap * br_stp_sap ;
2005-04-17 02:20:36 +04:00
static int __init br_init ( void )
{
2006-03-21 09:59:06 +03:00
br_stp_sap = llc_sap_open ( LLC_SAP_BSPAN , br_stp_rcv ) ;
if ( ! br_stp_sap ) {
printk ( KERN_ERR " bridge: can't register sap for STP \n " ) ;
return - EBUSY ;
}
2005-04-17 02:20:36 +04:00
br_fdb_init ( ) ;
# ifdef CONFIG_BRIDGE_NETFILTER
if ( br_netfilter_init ( ) )
return 1 ;
# endif
brioctl_set ( br_ioctl_deviceless_stub ) ;
br_handle_frame_hook = br_handle_frame ;
br_fdb_get_hook = br_fdb_get ;
br_fdb_put_hook = br_fdb_put ;
register_netdevice_notifier ( & br_device_notifier ) ;
return 0 ;
}
static void __exit br_deinit ( void )
{
2006-05-24 02:20:25 +04:00
rcu_assign_pointer ( br_stp_sap - > rcv_func , NULL ) ;
2006-03-21 09:59:06 +03:00
2005-04-17 02:20:36 +04:00
# ifdef CONFIG_BRIDGE_NETFILTER
br_netfilter_fini ( ) ;
# endif
unregister_netdevice_notifier ( & br_device_notifier ) ;
brioctl_set ( NULL ) ;
br_cleanup_bridges ( ) ;
synchronize_net ( ) ;
2006-05-24 02:20:25 +04:00
llc_sap_put ( br_stp_sap ) ;
2005-04-17 02:20:36 +04:00
br_fdb_get_hook = NULL ;
br_fdb_put_hook = NULL ;
br_handle_frame_hook = NULL ;
br_fdb_fini ( ) ;
}
EXPORT_SYMBOL ( br_should_route_hook ) ;
module_init ( br_init )
module_exit ( br_deinit )
MODULE_LICENSE ( " GPL " ) ;
2005-12-22 06:01:30 +03:00
MODULE_VERSION ( BR_VERSION ) ;