br.c 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  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. #include <linux/module.h>
  14. #include <linux/kernel.h>
  15. #include <linux/netdevice.h>
  16. #include <linux/etherdevice.h>
  17. #include <linux/init.h>
  18. #include <linux/llc.h>
  19. #include <net/llc.h>
  20. #include <net/stp.h>
  21. #include <net/switchdev.h>
  22. #include "br_private.h"
  23. /*
  24. * Handle changes in state of network devices enslaved to a bridge.
  25. *
  26. * Note: don't care about up/down if bridge itself is down, because
  27. * port state is checked when bridge is brought up.
  28. */
  29. static int br_device_event(struct notifier_block *unused, unsigned long event, void *ptr)
  30. {
  31. struct net_device *dev = netdev_notifier_info_to_dev(ptr);
  32. struct net_bridge_port *p;
  33. struct net_bridge *br;
  34. bool changed_addr;
  35. int err;
  36. /* register of bridge completed, add sysfs entries */
  37. if ((dev->priv_flags & IFF_EBRIDGE) && event == NETDEV_REGISTER) {
  38. br_sysfs_addbr(dev);
  39. return NOTIFY_DONE;
  40. }
  41. /* not a port of a bridge */
  42. p = br_port_get_rtnl(dev);
  43. if (!p)
  44. return NOTIFY_DONE;
  45. br = p->br;
  46. switch (event) {
  47. case NETDEV_CHANGEMTU:
  48. dev_set_mtu(br->dev, br_min_mtu(br));
  49. break;
  50. case NETDEV_CHANGEADDR:
  51. spin_lock_bh(&br->lock);
  52. br_fdb_changeaddr(p, dev->dev_addr);
  53. changed_addr = br_stp_recalculate_bridge_id(br);
  54. spin_unlock_bh(&br->lock);
  55. if (changed_addr)
  56. call_netdevice_notifiers(NETDEV_CHANGEADDR, br->dev);
  57. break;
  58. case NETDEV_CHANGE:
  59. br_port_carrier_check(p);
  60. break;
  61. case NETDEV_FEAT_CHANGE:
  62. netdev_update_features(br->dev);
  63. break;
  64. case NETDEV_DOWN:
  65. spin_lock_bh(&br->lock);
  66. if (br->dev->flags & IFF_UP)
  67. br_stp_disable_port(p);
  68. spin_unlock_bh(&br->lock);
  69. break;
  70. case NETDEV_UP:
  71. if (netif_running(br->dev) && netif_oper_up(dev)) {
  72. spin_lock_bh(&br->lock);
  73. br_stp_enable_port(p);
  74. spin_unlock_bh(&br->lock);
  75. }
  76. break;
  77. case NETDEV_UNREGISTER:
  78. br_del_if(br, dev);
  79. break;
  80. case NETDEV_CHANGENAME:
  81. err = br_sysfs_renameif(p);
  82. if (err)
  83. return notifier_from_errno(err);
  84. break;
  85. case NETDEV_PRE_TYPE_CHANGE:
  86. /* Forbid underlaying device to change its type. */
  87. return NOTIFY_BAD;
  88. case NETDEV_RESEND_IGMP:
  89. /* Propagate to master device */
  90. call_netdevice_notifiers(event, br->dev);
  91. break;
  92. }
  93. /* Events that may cause spanning tree to refresh */
  94. if (event == NETDEV_CHANGEADDR || event == NETDEV_UP ||
  95. event == NETDEV_CHANGE || event == NETDEV_DOWN)
  96. br_ifinfo_notify(RTM_NEWLINK, p);
  97. return NOTIFY_DONE;
  98. }
  99. static struct notifier_block br_device_notifier = {
  100. .notifier_call = br_device_event
  101. };
  102. /* called with RTNL or RCU */
  103. static int br_switchdev_event(struct notifier_block *unused,
  104. unsigned long event, void *ptr)
  105. {
  106. struct net_device *dev = switchdev_notifier_info_to_dev(ptr);
  107. struct net_bridge_port *p;
  108. struct net_bridge *br;
  109. struct switchdev_notifier_fdb_info *fdb_info;
  110. int err = NOTIFY_DONE;
  111. p = br_port_get_rtnl_rcu(dev);
  112. if (!p)
  113. goto out;
  114. br = p->br;
  115. switch (event) {
  116. case SWITCHDEV_FDB_ADD_TO_BRIDGE:
  117. fdb_info = ptr;
  118. err = br_fdb_external_learn_add(br, p, fdb_info->addr,
  119. fdb_info->vid);
  120. if (err) {
  121. err = notifier_from_errno(err);
  122. break;
  123. }
  124. br_fdb_offloaded_set(br, p, fdb_info->addr,
  125. fdb_info->vid);
  126. break;
  127. case SWITCHDEV_FDB_DEL_TO_BRIDGE:
  128. fdb_info = ptr;
  129. err = br_fdb_external_learn_del(br, p, fdb_info->addr,
  130. fdb_info->vid);
  131. if (err)
  132. err = notifier_from_errno(err);
  133. break;
  134. case SWITCHDEV_FDB_OFFLOADED:
  135. fdb_info = ptr;
  136. br_fdb_offloaded_set(br, p, fdb_info->addr,
  137. fdb_info->vid);
  138. break;
  139. }
  140. out:
  141. return err;
  142. }
  143. static struct notifier_block br_switchdev_notifier = {
  144. .notifier_call = br_switchdev_event,
  145. };
  146. static void __net_exit br_net_exit(struct net *net)
  147. {
  148. struct net_device *dev;
  149. LIST_HEAD(list);
  150. rtnl_lock();
  151. for_each_netdev(net, dev)
  152. if (dev->priv_flags & IFF_EBRIDGE)
  153. br_dev_delete(dev, &list);
  154. unregister_netdevice_many(&list);
  155. rtnl_unlock();
  156. }
  157. static struct pernet_operations br_net_ops = {
  158. .exit = br_net_exit,
  159. };
  160. static const struct stp_proto br_stp_proto = {
  161. .rcv = br_stp_rcv,
  162. };
  163. static int __init br_init(void)
  164. {
  165. int err;
  166. BUILD_BUG_ON(sizeof(struct br_input_skb_cb) > FIELD_SIZEOF(struct sk_buff, cb));
  167. err = stp_proto_register(&br_stp_proto);
  168. if (err < 0) {
  169. pr_err("bridge: can't register sap for STP\n");
  170. return err;
  171. }
  172. err = br_fdb_init();
  173. if (err)
  174. goto err_out;
  175. err = register_pernet_subsys(&br_net_ops);
  176. if (err)
  177. goto err_out1;
  178. err = br_nf_core_init();
  179. if (err)
  180. goto err_out2;
  181. err = register_netdevice_notifier(&br_device_notifier);
  182. if (err)
  183. goto err_out3;
  184. err = register_switchdev_notifier(&br_switchdev_notifier);
  185. if (err)
  186. goto err_out4;
  187. err = br_netlink_init();
  188. if (err)
  189. goto err_out5;
  190. brioctl_set(br_ioctl_deviceless_stub);
  191. #if IS_ENABLED(CONFIG_ATM_LANE)
  192. br_fdb_test_addr_hook = br_fdb_test_addr;
  193. #endif
  194. #if IS_MODULE(CONFIG_BRIDGE_NETFILTER)
  195. pr_info("bridge: filtering via arp/ip/ip6tables is no longer available "
  196. "by default. Update your scripts to load br_netfilter if you "
  197. "need this.\n");
  198. #endif
  199. return 0;
  200. err_out5:
  201. unregister_switchdev_notifier(&br_switchdev_notifier);
  202. err_out4:
  203. unregister_netdevice_notifier(&br_device_notifier);
  204. err_out3:
  205. br_nf_core_fini();
  206. err_out2:
  207. unregister_pernet_subsys(&br_net_ops);
  208. err_out1:
  209. br_fdb_fini();
  210. err_out:
  211. stp_proto_unregister(&br_stp_proto);
  212. return err;
  213. }
  214. static void __exit br_deinit(void)
  215. {
  216. stp_proto_unregister(&br_stp_proto);
  217. br_netlink_fini();
  218. unregister_switchdev_notifier(&br_switchdev_notifier);
  219. unregister_netdevice_notifier(&br_device_notifier);
  220. brioctl_set(NULL);
  221. unregister_pernet_subsys(&br_net_ops);
  222. rcu_barrier(); /* Wait for completion of call_rcu()'s */
  223. br_nf_core_fini();
  224. #if IS_ENABLED(CONFIG_ATM_LANE)
  225. br_fdb_test_addr_hook = NULL;
  226. #endif
  227. br_fdb_fini();
  228. }
  229. module_init(br_init)
  230. module_exit(br_deinit)
  231. MODULE_LICENSE("GPL");
  232. MODULE_VERSION(BR_VERSION);
  233. MODULE_ALIAS_RTNL_LINK("bridge");