br_device.c 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. * Device handling code
  4. * Linux ethernet bridge
  5. *
  6. * Authors:
  7. * Lennert Buytenhek <[email protected]>
  8. */
  9. #include <linux/kernel.h>
  10. #include <linux/netdevice.h>
  11. #include <linux/netpoll.h>
  12. #include <linux/etherdevice.h>
  13. #include <linux/ethtool.h>
  14. #include <linux/list.h>
  15. #include <linux/netfilter_bridge.h>
  16. #include <linux/uaccess.h>
  17. #include "br_private.h"
  18. #define COMMON_FEATURES (NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_HIGHDMA | \
  19. NETIF_F_GSO_MASK | NETIF_F_HW_CSUM)
  20. const struct nf_br_ops __rcu *nf_br_ops __read_mostly;
  21. EXPORT_SYMBOL_GPL(nf_br_ops);
  22. /* net device transmit always called with BH disabled */
  23. netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev)
  24. {
  25. struct net_bridge_mcast_port *pmctx_null = NULL;
  26. struct net_bridge *br = netdev_priv(dev);
  27. struct net_bridge_mcast *brmctx = &br->multicast_ctx;
  28. struct net_bridge_fdb_entry *dst;
  29. struct net_bridge_mdb_entry *mdst;
  30. const struct nf_br_ops *nf_ops;
  31. u8 state = BR_STATE_FORWARDING;
  32. struct net_bridge_vlan *vlan;
  33. const unsigned char *dest;
  34. u16 vid = 0;
  35. memset(skb->cb, 0, sizeof(struct br_input_skb_cb));
  36. rcu_read_lock();
  37. nf_ops = rcu_dereference(nf_br_ops);
  38. if (nf_ops && nf_ops->br_dev_xmit_hook(skb)) {
  39. rcu_read_unlock();
  40. return NETDEV_TX_OK;
  41. }
  42. dev_sw_netstats_tx_add(dev, 1, skb->len);
  43. br_switchdev_frame_unmark(skb);
  44. BR_INPUT_SKB_CB(skb)->brdev = dev;
  45. BR_INPUT_SKB_CB(skb)->frag_max_size = 0;
  46. skb_reset_mac_header(skb);
  47. skb_pull(skb, ETH_HLEN);
  48. if (!br_allowed_ingress(br, br_vlan_group_rcu(br), skb, &vid,
  49. &state, &vlan))
  50. goto out;
  51. if (IS_ENABLED(CONFIG_INET) &&
  52. (eth_hdr(skb)->h_proto == htons(ETH_P_ARP) ||
  53. eth_hdr(skb)->h_proto == htons(ETH_P_RARP)) &&
  54. br_opt_get(br, BROPT_NEIGH_SUPPRESS_ENABLED)) {
  55. br_do_proxy_suppress_arp(skb, br, vid, NULL);
  56. } else if (IS_ENABLED(CONFIG_IPV6) &&
  57. skb->protocol == htons(ETH_P_IPV6) &&
  58. br_opt_get(br, BROPT_NEIGH_SUPPRESS_ENABLED) &&
  59. pskb_may_pull(skb, sizeof(struct ipv6hdr) +
  60. sizeof(struct nd_msg)) &&
  61. ipv6_hdr(skb)->nexthdr == IPPROTO_ICMPV6) {
  62. struct nd_msg *msg, _msg;
  63. msg = br_is_nd_neigh_msg(skb, &_msg);
  64. if (msg)
  65. br_do_suppress_nd(skb, br, vid, NULL, msg);
  66. }
  67. dest = eth_hdr(skb)->h_dest;
  68. if (is_broadcast_ether_addr(dest)) {
  69. br_flood(br, skb, BR_PKT_BROADCAST, false, true);
  70. } else if (is_multicast_ether_addr(dest)) {
  71. if (unlikely(netpoll_tx_running(dev))) {
  72. br_flood(br, skb, BR_PKT_MULTICAST, false, true);
  73. goto out;
  74. }
  75. if (br_multicast_rcv(&brmctx, &pmctx_null, vlan, skb, vid)) {
  76. kfree_skb(skb);
  77. goto out;
  78. }
  79. mdst = br_mdb_get(brmctx, skb, vid);
  80. if ((mdst || BR_INPUT_SKB_CB_MROUTERS_ONLY(skb)) &&
  81. br_multicast_querier_exists(brmctx, eth_hdr(skb), mdst))
  82. br_multicast_flood(mdst, skb, brmctx, false, true);
  83. else
  84. br_flood(br, skb, BR_PKT_MULTICAST, false, true);
  85. } else if ((dst = br_fdb_find_rcu(br, dest, vid)) != NULL) {
  86. br_forward(dst->dst, skb, false, true);
  87. } else {
  88. br_flood(br, skb, BR_PKT_UNICAST, false, true);
  89. }
  90. out:
  91. rcu_read_unlock();
  92. return NETDEV_TX_OK;
  93. }
  94. static struct lock_class_key bridge_netdev_addr_lock_key;
  95. static void br_set_lockdep_class(struct net_device *dev)
  96. {
  97. lockdep_set_class(&dev->addr_list_lock, &bridge_netdev_addr_lock_key);
  98. }
  99. static int br_dev_init(struct net_device *dev)
  100. {
  101. struct net_bridge *br = netdev_priv(dev);
  102. int err;
  103. dev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
  104. if (!dev->tstats)
  105. return -ENOMEM;
  106. err = br_fdb_hash_init(br);
  107. if (err) {
  108. free_percpu(dev->tstats);
  109. return err;
  110. }
  111. err = br_mdb_hash_init(br);
  112. if (err) {
  113. free_percpu(dev->tstats);
  114. br_fdb_hash_fini(br);
  115. return err;
  116. }
  117. err = br_vlan_init(br);
  118. if (err) {
  119. free_percpu(dev->tstats);
  120. br_mdb_hash_fini(br);
  121. br_fdb_hash_fini(br);
  122. return err;
  123. }
  124. err = br_multicast_init_stats(br);
  125. if (err) {
  126. free_percpu(dev->tstats);
  127. br_vlan_flush(br);
  128. br_mdb_hash_fini(br);
  129. br_fdb_hash_fini(br);
  130. }
  131. br_set_lockdep_class(dev);
  132. return err;
  133. }
  134. static void br_dev_uninit(struct net_device *dev)
  135. {
  136. struct net_bridge *br = netdev_priv(dev);
  137. br_multicast_dev_del(br);
  138. br_multicast_uninit_stats(br);
  139. br_vlan_flush(br);
  140. br_mdb_hash_fini(br);
  141. br_fdb_hash_fini(br);
  142. free_percpu(dev->tstats);
  143. }
  144. static int br_dev_open(struct net_device *dev)
  145. {
  146. struct net_bridge *br = netdev_priv(dev);
  147. netdev_update_features(dev);
  148. netif_start_queue(dev);
  149. br_stp_enable_bridge(br);
  150. br_multicast_open(br);
  151. if (br_opt_get(br, BROPT_MULTICAST_ENABLED))
  152. br_multicast_join_snoopers(br);
  153. return 0;
  154. }
  155. static void br_dev_set_multicast_list(struct net_device *dev)
  156. {
  157. }
  158. static void br_dev_change_rx_flags(struct net_device *dev, int change)
  159. {
  160. if (change & IFF_PROMISC)
  161. br_manage_promisc(netdev_priv(dev));
  162. }
  163. static int br_dev_stop(struct net_device *dev)
  164. {
  165. struct net_bridge *br = netdev_priv(dev);
  166. br_stp_disable_bridge(br);
  167. br_multicast_stop(br);
  168. if (br_opt_get(br, BROPT_MULTICAST_ENABLED))
  169. br_multicast_leave_snoopers(br);
  170. netif_stop_queue(dev);
  171. return 0;
  172. }
  173. static int br_change_mtu(struct net_device *dev, int new_mtu)
  174. {
  175. struct net_bridge *br = netdev_priv(dev);
  176. dev->mtu = new_mtu;
  177. /* this flag will be cleared if the MTU was automatically adjusted */
  178. br_opt_toggle(br, BROPT_MTU_SET_BY_USER, true);
  179. #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
  180. /* remember the MTU in the rtable for PMTU */
  181. dst_metric_set(&br->fake_rtable.dst, RTAX_MTU, new_mtu);
  182. #endif
  183. return 0;
  184. }
  185. /* Allow setting mac address to any valid ethernet address. */
  186. static int br_set_mac_address(struct net_device *dev, void *p)
  187. {
  188. struct net_bridge *br = netdev_priv(dev);
  189. struct sockaddr *addr = p;
  190. if (!is_valid_ether_addr(addr->sa_data))
  191. return -EADDRNOTAVAIL;
  192. /* dev_set_mac_addr() can be called by a master device on bridge's
  193. * NETDEV_UNREGISTER, but since it's being destroyed do nothing
  194. */
  195. if (dev->reg_state != NETREG_REGISTERED)
  196. return -EBUSY;
  197. spin_lock_bh(&br->lock);
  198. if (!ether_addr_equal(dev->dev_addr, addr->sa_data)) {
  199. /* Mac address will be changed in br_stp_change_bridge_id(). */
  200. br_stp_change_bridge_id(br, addr->sa_data);
  201. }
  202. spin_unlock_bh(&br->lock);
  203. return 0;
  204. }
  205. static void br_getinfo(struct net_device *dev, struct ethtool_drvinfo *info)
  206. {
  207. strscpy(info->driver, "bridge", sizeof(info->driver));
  208. strscpy(info->version, BR_VERSION, sizeof(info->version));
  209. strscpy(info->fw_version, "N/A", sizeof(info->fw_version));
  210. strscpy(info->bus_info, "N/A", sizeof(info->bus_info));
  211. }
  212. static int br_get_link_ksettings(struct net_device *dev,
  213. struct ethtool_link_ksettings *cmd)
  214. {
  215. struct net_bridge *br = netdev_priv(dev);
  216. struct net_bridge_port *p;
  217. cmd->base.duplex = DUPLEX_UNKNOWN;
  218. cmd->base.port = PORT_OTHER;
  219. cmd->base.speed = SPEED_UNKNOWN;
  220. list_for_each_entry(p, &br->port_list, list) {
  221. struct ethtool_link_ksettings ecmd;
  222. struct net_device *pdev = p->dev;
  223. if (!netif_running(pdev) || !netif_oper_up(pdev))
  224. continue;
  225. if (__ethtool_get_link_ksettings(pdev, &ecmd))
  226. continue;
  227. if (ecmd.base.speed == (__u32)SPEED_UNKNOWN)
  228. continue;
  229. if (cmd->base.speed == (__u32)SPEED_UNKNOWN ||
  230. cmd->base.speed < ecmd.base.speed)
  231. cmd->base.speed = ecmd.base.speed;
  232. }
  233. return 0;
  234. }
  235. static netdev_features_t br_fix_features(struct net_device *dev,
  236. netdev_features_t features)
  237. {
  238. struct net_bridge *br = netdev_priv(dev);
  239. return br_features_recompute(br, features);
  240. }
  241. #ifdef CONFIG_NET_POLL_CONTROLLER
  242. static void br_poll_controller(struct net_device *br_dev)
  243. {
  244. }
  245. static void br_netpoll_cleanup(struct net_device *dev)
  246. {
  247. struct net_bridge *br = netdev_priv(dev);
  248. struct net_bridge_port *p;
  249. list_for_each_entry(p, &br->port_list, list)
  250. br_netpoll_disable(p);
  251. }
  252. static int __br_netpoll_enable(struct net_bridge_port *p)
  253. {
  254. struct netpoll *np;
  255. int err;
  256. np = kzalloc(sizeof(*p->np), GFP_KERNEL);
  257. if (!np)
  258. return -ENOMEM;
  259. err = __netpoll_setup(np, p->dev);
  260. if (err) {
  261. kfree(np);
  262. return err;
  263. }
  264. p->np = np;
  265. return err;
  266. }
  267. int br_netpoll_enable(struct net_bridge_port *p)
  268. {
  269. if (!p->br->dev->npinfo)
  270. return 0;
  271. return __br_netpoll_enable(p);
  272. }
  273. static int br_netpoll_setup(struct net_device *dev, struct netpoll_info *ni)
  274. {
  275. struct net_bridge *br = netdev_priv(dev);
  276. struct net_bridge_port *p;
  277. int err = 0;
  278. list_for_each_entry(p, &br->port_list, list) {
  279. if (!p->dev)
  280. continue;
  281. err = __br_netpoll_enable(p);
  282. if (err)
  283. goto fail;
  284. }
  285. out:
  286. return err;
  287. fail:
  288. br_netpoll_cleanup(dev);
  289. goto out;
  290. }
  291. void br_netpoll_disable(struct net_bridge_port *p)
  292. {
  293. struct netpoll *np = p->np;
  294. if (!np)
  295. return;
  296. p->np = NULL;
  297. __netpoll_free(np);
  298. }
  299. #endif
  300. static int br_add_slave(struct net_device *dev, struct net_device *slave_dev,
  301. struct netlink_ext_ack *extack)
  302. {
  303. struct net_bridge *br = netdev_priv(dev);
  304. return br_add_if(br, slave_dev, extack);
  305. }
  306. static int br_del_slave(struct net_device *dev, struct net_device *slave_dev)
  307. {
  308. struct net_bridge *br = netdev_priv(dev);
  309. return br_del_if(br, slave_dev);
  310. }
  311. static int br_fill_forward_path(struct net_device_path_ctx *ctx,
  312. struct net_device_path *path)
  313. {
  314. struct net_bridge_fdb_entry *f;
  315. struct net_bridge_port *dst;
  316. struct net_bridge *br;
  317. if (netif_is_bridge_port(ctx->dev))
  318. return -1;
  319. br = netdev_priv(ctx->dev);
  320. br_vlan_fill_forward_path_pvid(br, ctx, path);
  321. f = br_fdb_find_rcu(br, ctx->daddr, path->bridge.vlan_id);
  322. if (!f || !f->dst)
  323. return -1;
  324. dst = READ_ONCE(f->dst);
  325. if (!dst)
  326. return -1;
  327. if (br_vlan_fill_forward_path_mode(br, dst, path))
  328. return -1;
  329. path->type = DEV_PATH_BRIDGE;
  330. path->dev = dst->br->dev;
  331. ctx->dev = dst->dev;
  332. switch (path->bridge.vlan_mode) {
  333. case DEV_PATH_BR_VLAN_TAG:
  334. if (ctx->num_vlans >= ARRAY_SIZE(ctx->vlan))
  335. return -ENOSPC;
  336. ctx->vlan[ctx->num_vlans].id = path->bridge.vlan_id;
  337. ctx->vlan[ctx->num_vlans].proto = path->bridge.vlan_proto;
  338. ctx->num_vlans++;
  339. break;
  340. case DEV_PATH_BR_VLAN_UNTAG_HW:
  341. case DEV_PATH_BR_VLAN_UNTAG:
  342. ctx->num_vlans--;
  343. break;
  344. case DEV_PATH_BR_VLAN_KEEP:
  345. break;
  346. }
  347. return 0;
  348. }
  349. static const struct ethtool_ops br_ethtool_ops = {
  350. .get_drvinfo = br_getinfo,
  351. .get_link = ethtool_op_get_link,
  352. .get_link_ksettings = br_get_link_ksettings,
  353. };
  354. static const struct net_device_ops br_netdev_ops = {
  355. .ndo_open = br_dev_open,
  356. .ndo_stop = br_dev_stop,
  357. .ndo_init = br_dev_init,
  358. .ndo_uninit = br_dev_uninit,
  359. .ndo_start_xmit = br_dev_xmit,
  360. .ndo_get_stats64 = dev_get_tstats64,
  361. .ndo_set_mac_address = br_set_mac_address,
  362. .ndo_set_rx_mode = br_dev_set_multicast_list,
  363. .ndo_change_rx_flags = br_dev_change_rx_flags,
  364. .ndo_change_mtu = br_change_mtu,
  365. .ndo_siocdevprivate = br_dev_siocdevprivate,
  366. #ifdef CONFIG_NET_POLL_CONTROLLER
  367. .ndo_netpoll_setup = br_netpoll_setup,
  368. .ndo_netpoll_cleanup = br_netpoll_cleanup,
  369. .ndo_poll_controller = br_poll_controller,
  370. #endif
  371. .ndo_add_slave = br_add_slave,
  372. .ndo_del_slave = br_del_slave,
  373. .ndo_fix_features = br_fix_features,
  374. .ndo_fdb_add = br_fdb_add,
  375. .ndo_fdb_del = br_fdb_delete,
  376. .ndo_fdb_del_bulk = br_fdb_delete_bulk,
  377. .ndo_fdb_dump = br_fdb_dump,
  378. .ndo_fdb_get = br_fdb_get,
  379. .ndo_bridge_getlink = br_getlink,
  380. .ndo_bridge_setlink = br_setlink,
  381. .ndo_bridge_dellink = br_dellink,
  382. .ndo_features_check = passthru_features_check,
  383. .ndo_fill_forward_path = br_fill_forward_path,
  384. };
  385. static struct device_type br_type = {
  386. .name = "bridge",
  387. };
  388. void br_dev_setup(struct net_device *dev)
  389. {
  390. struct net_bridge *br = netdev_priv(dev);
  391. eth_hw_addr_random(dev);
  392. ether_setup(dev);
  393. dev->netdev_ops = &br_netdev_ops;
  394. dev->needs_free_netdev = true;
  395. dev->ethtool_ops = &br_ethtool_ops;
  396. SET_NETDEV_DEVTYPE(dev, &br_type);
  397. dev->priv_flags = IFF_EBRIDGE | IFF_NO_QUEUE;
  398. dev->features = COMMON_FEATURES | NETIF_F_LLTX | NETIF_F_NETNS_LOCAL |
  399. NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_STAG_TX;
  400. dev->hw_features = COMMON_FEATURES | NETIF_F_HW_VLAN_CTAG_TX |
  401. NETIF_F_HW_VLAN_STAG_TX;
  402. dev->vlan_features = COMMON_FEATURES;
  403. br->dev = dev;
  404. spin_lock_init(&br->lock);
  405. INIT_LIST_HEAD(&br->port_list);
  406. INIT_HLIST_HEAD(&br->fdb_list);
  407. INIT_HLIST_HEAD(&br->frame_type_list);
  408. #if IS_ENABLED(CONFIG_BRIDGE_MRP)
  409. INIT_HLIST_HEAD(&br->mrp_list);
  410. #endif
  411. #if IS_ENABLED(CONFIG_BRIDGE_CFM)
  412. INIT_HLIST_HEAD(&br->mep_list);
  413. #endif
  414. spin_lock_init(&br->hash_lock);
  415. br->bridge_id.prio[0] = 0x80;
  416. br->bridge_id.prio[1] = 0x00;
  417. ether_addr_copy(br->group_addr, eth_stp_addr);
  418. br->stp_enabled = BR_NO_STP;
  419. br->group_fwd_mask = BR_GROUPFWD_DEFAULT;
  420. br->group_fwd_mask_required = BR_GROUPFWD_DEFAULT;
  421. br->designated_root = br->bridge_id;
  422. br->bridge_max_age = br->max_age = 20 * HZ;
  423. br->bridge_hello_time = br->hello_time = 2 * HZ;
  424. br->bridge_forward_delay = br->forward_delay = 15 * HZ;
  425. br->bridge_ageing_time = br->ageing_time = BR_DEFAULT_AGEING_TIME;
  426. dev->max_mtu = ETH_MAX_MTU;
  427. br_netfilter_rtable_init(br);
  428. br_stp_timer_init(br);
  429. br_multicast_init(br);
  430. INIT_DELAYED_WORK(&br->gc_work, br_fdb_cleanup);
  431. }