linux/net/bridge/br.c
<<
>>
Prefs
   1/*
   2 *      Generic parts
   3 *      Linux ethernet bridge
   4 *
   5 *      Authors:
   6 *      Lennert Buytenhek               <buytenh@gnu.org>
   7 *
   8 *      This program is free software; you can redistribute it and/or
   9 *      modify it under the terms of the GNU General Public License
  10 *      as published by the Free Software Foundation; either version
  11 *      2 of the License, or (at your option) any later version.
  12 */
  13
  14#include <linux/module.h>
  15#include <linux/kernel.h>
  16#include <linux/netdevice.h>
  17#include <linux/etherdevice.h>
  18#include <linux/init.h>
  19#include <linux/llc.h>
  20#include <net/llc.h>
  21#include <net/stp.h>
  22
  23#include "br_private.h"
  24
  25static const struct stp_proto br_stp_proto = {
  26        .rcv    = br_stp_rcv,
  27};
  28
  29static struct pernet_operations br_net_ops = {
  30        .exit   = br_net_exit,
  31};
  32
  33static int __init br_init(void)
  34{
  35        int err;
  36
  37        err = stp_proto_register(&br_stp_proto);
  38        if (err < 0) {
  39                pr_err("bridge: can't register sap for STP\n");
  40                return err;
  41        }
  42
  43        err = br_fdb_init();
  44        if (err)
  45                goto err_out;
  46
  47        err = register_pernet_subsys(&br_net_ops);
  48        if (err)
  49                goto err_out1;
  50
  51        err = br_netfilter_init();
  52        if (err)
  53                goto err_out2;
  54
  55        err = register_netdevice_notifier(&br_device_notifier);
  56        if (err)
  57                goto err_out3;
  58
  59        err = br_netlink_init();
  60        if (err)
  61                goto err_out4;
  62
  63        brioctl_set(br_ioctl_deviceless_stub);
  64
  65#if IS_ENABLED(CONFIG_ATM_LANE)
  66        br_fdb_test_addr_hook = br_fdb_test_addr;
  67#endif
  68
  69        return 0;
  70err_out4:
  71        unregister_netdevice_notifier(&br_device_notifier);
  72err_out3:
  73        br_netfilter_fini();
  74err_out2:
  75        unregister_pernet_subsys(&br_net_ops);
  76err_out1:
  77        br_fdb_fini();
  78err_out:
  79        stp_proto_unregister(&br_stp_proto);
  80        return err;
  81}
  82
  83static void __exit br_deinit(void)
  84{
  85        stp_proto_unregister(&br_stp_proto);
  86
  87        br_netlink_fini();
  88        unregister_netdevice_notifier(&br_device_notifier);
  89        brioctl_set(NULL);
  90
  91        unregister_pernet_subsys(&br_net_ops);
  92
  93        rcu_barrier(); /* Wait for completion of call_rcu()'s */
  94
  95        br_netfilter_fini();
  96#if IS_ENABLED(CONFIG_ATM_LANE)
  97        br_fdb_test_addr_hook = NULL;
  98#endif
  99
 100        br_fdb_fini();
 101}
 102
 103module_init(br_init)
 104module_exit(br_deinit)
 105MODULE_LICENSE("GPL");
 106MODULE_VERSION(BR_VERSION);
 107MODULE_ALIAS_RTNL_LINK("bridge");
 108
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.