br_device.c 13 KB

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