br_private.h 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224
  1. /*
  2. * Linux ethernet bridge
  3. *
  4. * Authors:
  5. * Lennert Buytenhek <buytenh@gnu.org>
  6. *
  7. * This program is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU General Public License
  9. * as published by the Free Software Foundation; either version
  10. * 2 of the License, or (at your option) any later version.
  11. */
  12. #ifndef _BR_PRIVATE_H
  13. #define _BR_PRIVATE_H
  14. #include <linux/netdevice.h>
  15. #include <linux/if_bridge.h>
  16. #include <linux/netpoll.h>
  17. #include <linux/u64_stats_sync.h>
  18. #include <net/route.h>
  19. #include <net/ip6_fib.h>
  20. #include <linux/if_vlan.h>
  21. #include <linux/rhashtable.h>
  22. #include <linux/refcount.h>
  23. #define BR_HASH_BITS 8
  24. #define BR_HASH_SIZE (1 << BR_HASH_BITS)
  25. #define BR_HOLD_TIME (1*HZ)
  26. #define BR_PORT_BITS 10
  27. #define BR_MAX_PORTS (1<<BR_PORT_BITS)
  28. #define BR_VERSION "2.3"
  29. /* Control of forwarding link local multicast */
  30. #define BR_GROUPFWD_DEFAULT 0
  31. /* Don't allow forwarding of control protocols like STP, MAC PAUSE and LACP */
  32. enum {
  33. BR_GROUPFWD_STP = BIT(0),
  34. BR_GROUPFWD_MACPAUSE = BIT(1),
  35. BR_GROUPFWD_LACP = BIT(2),
  36. };
  37. #define BR_GROUPFWD_RESTRICTED (BR_GROUPFWD_STP | BR_GROUPFWD_MACPAUSE | \
  38. BR_GROUPFWD_LACP)
  39. /* The Nearest Customer Bridge Group Address, 01-80-C2-00-00-[00,0B,0C,0D,0F] */
  40. #define BR_GROUPFWD_8021AD 0xB801u
  41. /* Path to usermode spanning tree program */
  42. #define BR_STP_PROG "/sbin/bridge-stp"
  43. typedef struct bridge_id bridge_id;
  44. typedef struct mac_addr mac_addr;
  45. typedef __u16 port_id;
  46. struct bridge_id {
  47. unsigned char prio[2];
  48. unsigned char addr[ETH_ALEN];
  49. };
  50. struct mac_addr {
  51. unsigned char addr[ETH_ALEN];
  52. };
  53. #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
  54. /* our own querier */
  55. struct bridge_mcast_own_query {
  56. struct timer_list timer;
  57. u32 startup_sent;
  58. };
  59. /* other querier */
  60. struct bridge_mcast_other_query {
  61. struct timer_list timer;
  62. unsigned long delay_time;
  63. };
  64. /* selected querier */
  65. struct bridge_mcast_querier {
  66. struct br_ip addr;
  67. struct net_bridge_port __rcu *port;
  68. };
  69. /* IGMP/MLD statistics */
  70. struct bridge_mcast_stats {
  71. struct br_mcast_stats mstats;
  72. struct u64_stats_sync syncp;
  73. };
  74. #endif
  75. struct br_vlan_stats {
  76. u64 rx_bytes;
  77. u64 rx_packets;
  78. u64 tx_bytes;
  79. u64 tx_packets;
  80. struct u64_stats_sync syncp;
  81. };
  82. struct br_tunnel_info {
  83. __be64 tunnel_id;
  84. struct metadata_dst *tunnel_dst;
  85. };
  86. /* private vlan flags */
  87. enum {
  88. BR_VLFLAG_PER_PORT_STATS = BIT(0),
  89. };
  90. /**
  91. * struct net_bridge_vlan - per-vlan entry
  92. *
  93. * @vnode: rhashtable member
  94. * @vid: VLAN id
  95. * @flags: bridge vlan flags
  96. * @priv_flags: private (in-kernel) bridge vlan flags
  97. * @stats: per-cpu VLAN statistics
  98. * @br: if MASTER flag set, this points to a bridge struct
  99. * @port: if MASTER flag unset, this points to a port struct
  100. * @refcnt: if MASTER flag set, this is bumped for each port referencing it
  101. * @brvlan: if MASTER flag unset, this points to the global per-VLAN context
  102. * for this VLAN entry
  103. * @vlist: sorted list of VLAN entries
  104. * @rcu: used for entry destruction
  105. *
  106. * This structure is shared between the global per-VLAN entries contained in
  107. * the bridge rhashtable and the local per-port per-VLAN entries contained in
  108. * the port's rhashtable. The union entries should be interpreted depending on
  109. * the entry flags that are set.
  110. */
  111. struct net_bridge_vlan {
  112. struct rhash_head vnode;
  113. struct rhash_head tnode;
  114. u16 vid;
  115. u16 flags;
  116. u16 priv_flags;
  117. struct br_vlan_stats __percpu *stats;
  118. union {
  119. struct net_bridge *br;
  120. struct net_bridge_port *port;
  121. };
  122. union {
  123. refcount_t refcnt;
  124. struct net_bridge_vlan *brvlan;
  125. };
  126. struct br_tunnel_info tinfo;
  127. struct list_head vlist;
  128. struct rcu_head rcu;
  129. };
  130. /**
  131. * struct net_bridge_vlan_group
  132. *
  133. * @vlan_hash: VLAN entry rhashtable
  134. * @vlan_list: sorted VLAN entry list
  135. * @num_vlans: number of total VLAN entries
  136. * @pvid: PVID VLAN id
  137. *
  138. * IMPORTANT: Be careful when checking if there're VLAN entries using list
  139. * primitives because the bridge can have entries in its list which
  140. * are just for global context but not for filtering, i.e. they have
  141. * the master flag set but not the brentry flag. If you have to check
  142. * if there're "real" entries in the bridge please test @num_vlans
  143. */
  144. struct net_bridge_vlan_group {
  145. struct rhashtable vlan_hash;
  146. struct rhashtable tunnel_hash;
  147. struct list_head vlan_list;
  148. u16 num_vlans;
  149. u16 pvid;
  150. };
  151. struct net_bridge_fdb_key {
  152. mac_addr addr;
  153. u16 vlan_id;
  154. };
  155. struct net_bridge_fdb_entry {
  156. struct rhash_head rhnode;
  157. struct net_bridge_port *dst;
  158. struct net_bridge_fdb_key key;
  159. struct hlist_node fdb_node;
  160. unsigned char is_local:1,
  161. is_static:1,
  162. is_sticky:1,
  163. added_by_user:1,
  164. added_by_external_learn:1,
  165. offloaded:1;
  166. /* write-heavy members should not affect lookups */
  167. unsigned long updated ____cacheline_aligned_in_smp;
  168. unsigned long used;
  169. struct rcu_head rcu;
  170. };
  171. #define MDB_PG_FLAGS_PERMANENT BIT(0)
  172. #define MDB_PG_FLAGS_OFFLOAD BIT(1)
  173. struct net_bridge_port_group {
  174. struct net_bridge_port *port;
  175. struct net_bridge_port_group __rcu *next;
  176. struct hlist_node mglist;
  177. struct rcu_head rcu;
  178. struct timer_list timer;
  179. struct br_ip addr;
  180. unsigned char flags;
  181. unsigned char eth_addr[ETH_ALEN];
  182. };
  183. struct net_bridge_mdb_entry {
  184. struct hlist_node hlist[2];
  185. struct net_bridge *br;
  186. struct net_bridge_port_group __rcu *ports;
  187. struct rcu_head rcu;
  188. struct timer_list timer;
  189. struct br_ip addr;
  190. bool host_joined;
  191. };
  192. struct net_bridge_mdb_htable {
  193. struct hlist_head *mhash;
  194. struct rcu_head rcu;
  195. struct net_bridge_mdb_htable *old;
  196. u32 size;
  197. u32 max;
  198. u32 secret;
  199. u32 ver;
  200. };
  201. struct net_bridge_port {
  202. struct net_bridge *br;
  203. struct net_device *dev;
  204. struct list_head list;
  205. unsigned long flags;
  206. #ifdef CONFIG_BRIDGE_VLAN_FILTERING
  207. struct net_bridge_vlan_group __rcu *vlgrp;
  208. #endif
  209. struct net_bridge_port __rcu *backup_port;
  210. /* STP */
  211. u8 priority;
  212. u8 state;
  213. u16 port_no;
  214. unsigned char topology_change_ack;
  215. unsigned char config_pending;
  216. port_id port_id;
  217. port_id designated_port;
  218. bridge_id designated_root;
  219. bridge_id designated_bridge;
  220. u32 path_cost;
  221. u32 designated_cost;
  222. unsigned long designated_age;
  223. struct timer_list forward_delay_timer;
  224. struct timer_list hold_timer;
  225. struct timer_list message_age_timer;
  226. struct kobject kobj;
  227. struct rcu_head rcu;
  228. #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
  229. struct bridge_mcast_own_query ip4_own_query;
  230. #if IS_ENABLED(CONFIG_IPV6)
  231. struct bridge_mcast_own_query ip6_own_query;
  232. #endif /* IS_ENABLED(CONFIG_IPV6) */
  233. unsigned char multicast_router;
  234. struct bridge_mcast_stats __percpu *mcast_stats;
  235. struct timer_list multicast_router_timer;
  236. struct hlist_head mglist;
  237. struct hlist_node rlist;
  238. #endif
  239. #ifdef CONFIG_SYSFS
  240. char sysfs_name[IFNAMSIZ];
  241. #endif
  242. #ifdef CONFIG_NET_POLL_CONTROLLER
  243. struct netpoll *np;
  244. #endif
  245. #ifdef CONFIG_NET_SWITCHDEV
  246. int offload_fwd_mark;
  247. #endif
  248. u16 group_fwd_mask;
  249. u16 backup_redirected_cnt;
  250. };
  251. #define kobj_to_brport(obj) container_of(obj, struct net_bridge_port, kobj)
  252. #define br_auto_port(p) ((p)->flags & BR_AUTO_MASK)
  253. #define br_promisc_port(p) ((p)->flags & BR_PROMISC)
  254. #define br_port_exists(dev) (dev->priv_flags & IFF_BRIDGE_PORT)
  255. static inline struct net_bridge_port *br_port_get_rcu(const struct net_device *dev)
  256. {
  257. return rcu_dereference(dev->rx_handler_data);
  258. }
  259. static inline struct net_bridge_port *br_port_get_rtnl(const struct net_device *dev)
  260. {
  261. return br_port_exists(dev) ?
  262. rtnl_dereference(dev->rx_handler_data) : NULL;
  263. }
  264. static inline struct net_bridge_port *br_port_get_rtnl_rcu(const struct net_device *dev)
  265. {
  266. return br_port_exists(dev) ?
  267. rcu_dereference_rtnl(dev->rx_handler_data) : NULL;
  268. }
  269. enum net_bridge_opts {
  270. BROPT_VLAN_ENABLED,
  271. BROPT_VLAN_STATS_ENABLED,
  272. BROPT_NF_CALL_IPTABLES,
  273. BROPT_NF_CALL_IP6TABLES,
  274. BROPT_NF_CALL_ARPTABLES,
  275. BROPT_GROUP_ADDR_SET,
  276. BROPT_MULTICAST_ENABLED,
  277. BROPT_MULTICAST_QUERIER,
  278. BROPT_MULTICAST_QUERY_USE_IFADDR,
  279. BROPT_MULTICAST_STATS_ENABLED,
  280. BROPT_HAS_IPV6_ADDR,
  281. BROPT_NEIGH_SUPPRESS_ENABLED,
  282. BROPT_MTU_SET_BY_USER,
  283. BROPT_VLAN_STATS_PER_PORT,
  284. };
  285. struct net_bridge {
  286. spinlock_t lock;
  287. spinlock_t hash_lock;
  288. struct list_head port_list;
  289. struct net_device *dev;
  290. struct pcpu_sw_netstats __percpu *stats;
  291. unsigned long options;
  292. /* These fields are accessed on each packet */
  293. #ifdef CONFIG_BRIDGE_VLAN_FILTERING
  294. __be16 vlan_proto;
  295. u16 default_pvid;
  296. struct net_bridge_vlan_group __rcu *vlgrp;
  297. #endif
  298. struct rhashtable fdb_hash_tbl;
  299. #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
  300. union {
  301. struct rtable fake_rtable;
  302. struct rt6_info fake_rt6_info;
  303. };
  304. #endif
  305. u16 group_fwd_mask;
  306. u16 group_fwd_mask_required;
  307. /* STP */
  308. bridge_id designated_root;
  309. bridge_id bridge_id;
  310. unsigned char topology_change;
  311. unsigned char topology_change_detected;
  312. u16 root_port;
  313. unsigned long max_age;
  314. unsigned long hello_time;
  315. unsigned long forward_delay;
  316. unsigned long ageing_time;
  317. unsigned long bridge_max_age;
  318. unsigned long bridge_hello_time;
  319. unsigned long bridge_forward_delay;
  320. unsigned long bridge_ageing_time;
  321. u32 root_path_cost;
  322. u8 group_addr[ETH_ALEN];
  323. enum {
  324. BR_NO_STP, /* no spanning tree */
  325. BR_KERNEL_STP, /* old STP in kernel */
  326. BR_USER_STP, /* new RSTP in userspace */
  327. } stp_enabled;
  328. #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
  329. u32 hash_elasticity;
  330. u32 hash_max;
  331. u32 multicast_last_member_count;
  332. u32 multicast_startup_query_count;
  333. u8 multicast_igmp_version;
  334. u8 multicast_router;
  335. #if IS_ENABLED(CONFIG_IPV6)
  336. u8 multicast_mld_version;
  337. #endif
  338. spinlock_t multicast_lock;
  339. unsigned long multicast_last_member_interval;
  340. unsigned long multicast_membership_interval;
  341. unsigned long multicast_querier_interval;
  342. unsigned long multicast_query_interval;
  343. unsigned long multicast_query_response_interval;
  344. unsigned long multicast_startup_query_interval;
  345. struct net_bridge_mdb_htable __rcu *mdb;
  346. struct hlist_head router_list;
  347. struct timer_list multicast_router_timer;
  348. struct bridge_mcast_other_query ip4_other_query;
  349. struct bridge_mcast_own_query ip4_own_query;
  350. struct bridge_mcast_querier ip4_querier;
  351. struct bridge_mcast_stats __percpu *mcast_stats;
  352. #if IS_ENABLED(CONFIG_IPV6)
  353. struct bridge_mcast_other_query ip6_other_query;
  354. struct bridge_mcast_own_query ip6_own_query;
  355. struct bridge_mcast_querier ip6_querier;
  356. #endif /* IS_ENABLED(CONFIG_IPV6) */
  357. #endif
  358. struct timer_list hello_timer;
  359. struct timer_list tcn_timer;
  360. struct timer_list topology_change_timer;
  361. struct delayed_work gc_work;
  362. struct kobject *ifobj;
  363. u32 auto_cnt;
  364. #ifdef CONFIG_NET_SWITCHDEV
  365. int offload_fwd_mark;
  366. #endif
  367. struct hlist_head fdb_list;
  368. };
  369. struct br_input_skb_cb {
  370. struct net_device *brdev;
  371. #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
  372. int igmp;
  373. int mrouters_only;
  374. #endif
  375. bool proxyarp_replied;
  376. bool src_port_isolated;
  377. #ifdef CONFIG_BRIDGE_VLAN_FILTERING
  378. bool vlan_filtered;
  379. #endif
  380. #ifdef CONFIG_NET_SWITCHDEV
  381. int offload_fwd_mark;
  382. #endif
  383. };
  384. #define BR_INPUT_SKB_CB(__skb) ((struct br_input_skb_cb *)(__skb)->cb)
  385. #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
  386. # define BR_INPUT_SKB_CB_MROUTERS_ONLY(__skb) (BR_INPUT_SKB_CB(__skb)->mrouters_only)
  387. #else
  388. # define BR_INPUT_SKB_CB_MROUTERS_ONLY(__skb) (0)
  389. #endif
  390. #define br_printk(level, br, format, args...) \
  391. printk(level "%s: " format, (br)->dev->name, ##args)
  392. #define br_err(__br, format, args...) \
  393. br_printk(KERN_ERR, __br, format, ##args)
  394. #define br_warn(__br, format, args...) \
  395. br_printk(KERN_WARNING, __br, format, ##args)
  396. #define br_notice(__br, format, args...) \
  397. br_printk(KERN_NOTICE, __br, format, ##args)
  398. #define br_info(__br, format, args...) \
  399. br_printk(KERN_INFO, __br, format, ##args)
  400. #define br_debug(br, format, args...) \
  401. pr_debug("%s: " format, (br)->dev->name, ##args)
  402. /* called under bridge lock */
  403. static inline int br_is_root_bridge(const struct net_bridge *br)
  404. {
  405. return !memcmp(&br->bridge_id, &br->designated_root, 8);
  406. }
  407. /* check if a VLAN entry is global */
  408. static inline bool br_vlan_is_master(const struct net_bridge_vlan *v)
  409. {
  410. return v->flags & BRIDGE_VLAN_INFO_MASTER;
  411. }
  412. /* check if a VLAN entry is used by the bridge */
  413. static inline bool br_vlan_is_brentry(const struct net_bridge_vlan *v)
  414. {
  415. return v->flags & BRIDGE_VLAN_INFO_BRENTRY;
  416. }
  417. /* check if we should use the vlan entry, returns false if it's only context */
  418. static inline bool br_vlan_should_use(const struct net_bridge_vlan *v)
  419. {
  420. if (br_vlan_is_master(v)) {
  421. if (br_vlan_is_brentry(v))
  422. return true;
  423. else
  424. return false;
  425. }
  426. return true;
  427. }
  428. static inline int br_opt_get(const struct net_bridge *br,
  429. enum net_bridge_opts opt)
  430. {
  431. return test_bit(opt, &br->options);
  432. }
  433. void br_opt_toggle(struct net_bridge *br, enum net_bridge_opts opt, bool on);
  434. /* br_device.c */
  435. void br_dev_setup(struct net_device *dev);
  436. void br_dev_delete(struct net_device *dev, struct list_head *list);
  437. netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev);
  438. #ifdef CONFIG_NET_POLL_CONTROLLER
  439. static inline void br_netpoll_send_skb(const struct net_bridge_port *p,
  440. struct sk_buff *skb)
  441. {
  442. struct netpoll *np = p->np;
  443. if (np)
  444. netpoll_send_skb(np, skb);
  445. }
  446. int br_netpoll_enable(struct net_bridge_port *p);
  447. void br_netpoll_disable(struct net_bridge_port *p);
  448. #else
  449. static inline void br_netpoll_send_skb(const struct net_bridge_port *p,
  450. struct sk_buff *skb)
  451. {
  452. }
  453. static inline int br_netpoll_enable(struct net_bridge_port *p)
  454. {
  455. return 0;
  456. }
  457. static inline void br_netpoll_disable(struct net_bridge_port *p)
  458. {
  459. }
  460. #endif
  461. /* br_fdb.c */
  462. int br_fdb_init(void);
  463. void br_fdb_fini(void);
  464. int br_fdb_hash_init(struct net_bridge *br);
  465. void br_fdb_hash_fini(struct net_bridge *br);
  466. void br_fdb_flush(struct net_bridge *br);
  467. void br_fdb_find_delete_local(struct net_bridge *br,
  468. const struct net_bridge_port *p,
  469. const unsigned char *addr, u16 vid);
  470. void br_fdb_changeaddr(struct net_bridge_port *p, const unsigned char *newaddr);
  471. void br_fdb_change_mac_address(struct net_bridge *br, const u8 *newaddr);
  472. void br_fdb_cleanup(struct work_struct *work);
  473. void br_fdb_delete_by_port(struct net_bridge *br,
  474. const struct net_bridge_port *p, u16 vid, int do_all);
  475. struct net_bridge_fdb_entry *br_fdb_find_rcu(struct net_bridge *br,
  476. const unsigned char *addr,
  477. __u16 vid);
  478. int br_fdb_test_addr(struct net_device *dev, unsigned char *addr);
  479. int br_fdb_fillbuf(struct net_bridge *br, void *buf, unsigned long count,
  480. unsigned long off);
  481. int br_fdb_insert(struct net_bridge *br, struct net_bridge_port *source,
  482. const unsigned char *addr, u16 vid);
  483. void br_fdb_update(struct net_bridge *br, struct net_bridge_port *source,
  484. const unsigned char *addr, u16 vid, bool added_by_user);
  485. int br_fdb_delete(struct ndmsg *ndm, struct nlattr *tb[],
  486. struct net_device *dev, const unsigned char *addr, u16 vid);
  487. int br_fdb_add(struct ndmsg *nlh, struct nlattr *tb[], struct net_device *dev,
  488. const unsigned char *addr, u16 vid, u16 nlh_flags);
  489. int br_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb,
  490. struct net_device *dev, struct net_device *fdev, int *idx);
  491. int br_fdb_sync_static(struct net_bridge *br, struct net_bridge_port *p);
  492. void br_fdb_unsync_static(struct net_bridge *br, struct net_bridge_port *p);
  493. int br_fdb_external_learn_add(struct net_bridge *br, struct net_bridge_port *p,
  494. const unsigned char *addr, u16 vid,
  495. bool swdev_notify);
  496. int br_fdb_external_learn_del(struct net_bridge *br, struct net_bridge_port *p,
  497. const unsigned char *addr, u16 vid,
  498. bool swdev_notify);
  499. void br_fdb_offloaded_set(struct net_bridge *br, struct net_bridge_port *p,
  500. const unsigned char *addr, u16 vid, bool offloaded);
  501. /* br_forward.c */
  502. enum br_pkt_type {
  503. BR_PKT_UNICAST,
  504. BR_PKT_MULTICAST,
  505. BR_PKT_BROADCAST
  506. };
  507. int br_dev_queue_push_xmit(struct net *net, struct sock *sk, struct sk_buff *skb);
  508. void br_forward(const struct net_bridge_port *to, struct sk_buff *skb,
  509. bool local_rcv, bool local_orig);
  510. int br_forward_finish(struct net *net, struct sock *sk, struct sk_buff *skb);
  511. void br_flood(struct net_bridge *br, struct sk_buff *skb,
  512. enum br_pkt_type pkt_type, bool local_rcv, bool local_orig);
  513. /* return true if both source port and dest port are isolated */
  514. static inline bool br_skb_isolated(const struct net_bridge_port *to,
  515. const struct sk_buff *skb)
  516. {
  517. return BR_INPUT_SKB_CB(skb)->src_port_isolated &&
  518. (to->flags & BR_ISOLATED);
  519. }
  520. /* br_if.c */
  521. void br_port_carrier_check(struct net_bridge_port *p, bool *notified);
  522. int br_add_bridge(struct net *net, const char *name);
  523. int br_del_bridge(struct net *net, const char *name);
  524. int br_add_if(struct net_bridge *br, struct net_device *dev,
  525. struct netlink_ext_ack *extack);
  526. int br_del_if(struct net_bridge *br, struct net_device *dev);
  527. void br_mtu_auto_adjust(struct net_bridge *br);
  528. netdev_features_t br_features_recompute(struct net_bridge *br,
  529. netdev_features_t features);
  530. void br_port_flags_change(struct net_bridge_port *port, unsigned long mask);
  531. void br_manage_promisc(struct net_bridge *br);
  532. int nbp_backup_change(struct net_bridge_port *p, struct net_device *backup_dev);
  533. /* br_input.c */
  534. int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb);
  535. rx_handler_result_t br_handle_frame(struct sk_buff **pskb);
  536. static inline bool br_rx_handler_check_rcu(const struct net_device *dev)
  537. {
  538. return rcu_dereference(dev->rx_handler) == br_handle_frame;
  539. }
  540. static inline bool br_rx_handler_check_rtnl(const struct net_device *dev)
  541. {
  542. return rcu_dereference_rtnl(dev->rx_handler) == br_handle_frame;
  543. }
  544. static inline struct net_bridge_port *br_port_get_check_rcu(const struct net_device *dev)
  545. {
  546. return br_rx_handler_check_rcu(dev) ? br_port_get_rcu(dev) : NULL;
  547. }
  548. static inline struct net_bridge_port *
  549. br_port_get_check_rtnl(const struct net_device *dev)
  550. {
  551. return br_rx_handler_check_rtnl(dev) ? br_port_get_rtnl_rcu(dev) : NULL;
  552. }
  553. /* br_ioctl.c */
  554. int br_dev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
  555. int br_ioctl_deviceless_stub(struct net *net, unsigned int cmd,
  556. void __user *arg);
  557. /* br_multicast.c */
  558. #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
  559. extern unsigned int br_mdb_rehash_seq;
  560. int br_multicast_rcv(struct net_bridge *br, struct net_bridge_port *port,
  561. struct sk_buff *skb, u16 vid);
  562. struct net_bridge_mdb_entry *br_mdb_get(struct net_bridge *br,
  563. struct sk_buff *skb, u16 vid);
  564. int br_multicast_add_port(struct net_bridge_port *port);
  565. void br_multicast_del_port(struct net_bridge_port *port);
  566. void br_multicast_enable_port(struct net_bridge_port *port);
  567. void br_multicast_disable_port(struct net_bridge_port *port);
  568. void br_multicast_init(struct net_bridge *br);
  569. void br_multicast_open(struct net_bridge *br);
  570. void br_multicast_stop(struct net_bridge *br);
  571. void br_multicast_dev_del(struct net_bridge *br);
  572. void br_multicast_flood(struct net_bridge_mdb_entry *mdst,
  573. struct sk_buff *skb, bool local_rcv, bool local_orig);
  574. int br_multicast_set_router(struct net_bridge *br, unsigned long val);
  575. int br_multicast_set_port_router(struct net_bridge_port *p, unsigned long val);
  576. int br_multicast_toggle(struct net_bridge *br, unsigned long val);
  577. int br_multicast_set_querier(struct net_bridge *br, unsigned long val);
  578. int br_multicast_set_hash_max(struct net_bridge *br, unsigned long val);
  579. int br_multicast_set_igmp_version(struct net_bridge *br, unsigned long val);
  580. #if IS_ENABLED(CONFIG_IPV6)
  581. int br_multicast_set_mld_version(struct net_bridge *br, unsigned long val);
  582. #endif
  583. struct net_bridge_mdb_entry *
  584. br_mdb_ip_get(struct net_bridge_mdb_htable *mdb, struct br_ip *dst);
  585. struct net_bridge_mdb_entry *
  586. br_multicast_new_group(struct net_bridge *br, struct net_bridge_port *port,
  587. struct br_ip *group);
  588. void br_multicast_free_pg(struct rcu_head *head);
  589. struct net_bridge_port_group *
  590. br_multicast_new_port_group(struct net_bridge_port *port, struct br_ip *group,
  591. struct net_bridge_port_group __rcu *next,
  592. unsigned char flags, const unsigned char *src);
  593. void br_mdb_init(void);
  594. void br_mdb_uninit(void);
  595. void br_mdb_notify(struct net_device *dev, struct net_bridge_port *port,
  596. struct br_ip *group, int type, u8 flags);
  597. void br_rtr_notify(struct net_device *dev, struct net_bridge_port *port,
  598. int type);
  599. void br_multicast_count(struct net_bridge *br, const struct net_bridge_port *p,
  600. const struct sk_buff *skb, u8 type, u8 dir);
  601. int br_multicast_init_stats(struct net_bridge *br);
  602. void br_multicast_uninit_stats(struct net_bridge *br);
  603. void br_multicast_get_stats(const struct net_bridge *br,
  604. const struct net_bridge_port *p,
  605. struct br_mcast_stats *dest);
  606. #define mlock_dereference(X, br) \
  607. rcu_dereference_protected(X, lockdep_is_held(&br->multicast_lock))
  608. static inline bool br_multicast_is_router(struct net_bridge *br)
  609. {
  610. return br->multicast_router == 2 ||
  611. (br->multicast_router == 1 &&
  612. timer_pending(&br->multicast_router_timer));
  613. }
  614. static inline bool
  615. __br_multicast_querier_exists(struct net_bridge *br,
  616. struct bridge_mcast_other_query *querier,
  617. const bool is_ipv6)
  618. {
  619. bool own_querier_enabled;
  620. if (br_opt_get(br, BROPT_MULTICAST_QUERIER)) {
  621. if (is_ipv6 && !br_opt_get(br, BROPT_HAS_IPV6_ADDR))
  622. own_querier_enabled = false;
  623. else
  624. own_querier_enabled = true;
  625. } else {
  626. own_querier_enabled = false;
  627. }
  628. return time_is_before_jiffies(querier->delay_time) &&
  629. (own_querier_enabled || timer_pending(&querier->timer));
  630. }
  631. static inline bool br_multicast_querier_exists(struct net_bridge *br,
  632. struct ethhdr *eth)
  633. {
  634. switch (eth->h_proto) {
  635. case (htons(ETH_P_IP)):
  636. return __br_multicast_querier_exists(br,
  637. &br->ip4_other_query, false);
  638. #if IS_ENABLED(CONFIG_IPV6)
  639. case (htons(ETH_P_IPV6)):
  640. return __br_multicast_querier_exists(br,
  641. &br->ip6_other_query, true);
  642. #endif
  643. default:
  644. return false;
  645. }
  646. }
  647. static inline int br_multicast_igmp_type(const struct sk_buff *skb)
  648. {
  649. return BR_INPUT_SKB_CB(skb)->igmp;
  650. }
  651. #else
  652. static inline int br_multicast_rcv(struct net_bridge *br,
  653. struct net_bridge_port *port,
  654. struct sk_buff *skb,
  655. u16 vid)
  656. {
  657. return 0;
  658. }
  659. static inline struct net_bridge_mdb_entry *br_mdb_get(struct net_bridge *br,
  660. struct sk_buff *skb, u16 vid)
  661. {
  662. return NULL;
  663. }
  664. static inline int br_multicast_add_port(struct net_bridge_port *port)
  665. {
  666. return 0;
  667. }
  668. static inline void br_multicast_del_port(struct net_bridge_port *port)
  669. {
  670. }
  671. static inline void br_multicast_enable_port(struct net_bridge_port *port)
  672. {
  673. }
  674. static inline void br_multicast_disable_port(struct net_bridge_port *port)
  675. {
  676. }
  677. static inline void br_multicast_init(struct net_bridge *br)
  678. {
  679. }
  680. static inline void br_multicast_open(struct net_bridge *br)
  681. {
  682. }
  683. static inline void br_multicast_stop(struct net_bridge *br)
  684. {
  685. }
  686. static inline void br_multicast_dev_del(struct net_bridge *br)
  687. {
  688. }
  689. static inline void br_multicast_flood(struct net_bridge_mdb_entry *mdst,
  690. struct sk_buff *skb,
  691. bool local_rcv, bool local_orig)
  692. {
  693. }
  694. static inline bool br_multicast_is_router(struct net_bridge *br)
  695. {
  696. return false;
  697. }
  698. static inline bool br_multicast_querier_exists(struct net_bridge *br,
  699. struct ethhdr *eth)
  700. {
  701. return false;
  702. }
  703. static inline void br_mdb_init(void)
  704. {
  705. }
  706. static inline void br_mdb_uninit(void)
  707. {
  708. }
  709. static inline void br_multicast_count(struct net_bridge *br,
  710. const struct net_bridge_port *p,
  711. const struct sk_buff *skb,
  712. u8 type, u8 dir)
  713. {
  714. }
  715. static inline int br_multicast_init_stats(struct net_bridge *br)
  716. {
  717. return 0;
  718. }
  719. static inline void br_multicast_uninit_stats(struct net_bridge *br)
  720. {
  721. }
  722. static inline int br_multicast_igmp_type(const struct sk_buff *skb)
  723. {
  724. return 0;
  725. }
  726. #endif
  727. /* br_vlan.c */
  728. #ifdef CONFIG_BRIDGE_VLAN_FILTERING
  729. bool br_allowed_ingress(const struct net_bridge *br,
  730. struct net_bridge_vlan_group *vg, struct sk_buff *skb,
  731. u16 *vid);
  732. bool br_allowed_egress(struct net_bridge_vlan_group *vg,
  733. const struct sk_buff *skb);
  734. bool br_should_learn(struct net_bridge_port *p, struct sk_buff *skb, u16 *vid);
  735. struct sk_buff *br_handle_vlan(struct net_bridge *br,
  736. const struct net_bridge_port *port,
  737. struct net_bridge_vlan_group *vg,
  738. struct sk_buff *skb);
  739. int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags,
  740. bool *changed);
  741. int br_vlan_delete(struct net_bridge *br, u16 vid);
  742. void br_vlan_flush(struct net_bridge *br);
  743. struct net_bridge_vlan *br_vlan_find(struct net_bridge_vlan_group *vg, u16 vid);
  744. void br_recalculate_fwd_mask(struct net_bridge *br);
  745. int __br_vlan_filter_toggle(struct net_bridge *br, unsigned long val);
  746. int br_vlan_filter_toggle(struct net_bridge *br, unsigned long val);
  747. int __br_vlan_set_proto(struct net_bridge *br, __be16 proto);
  748. int br_vlan_set_proto(struct net_bridge *br, unsigned long val);
  749. int br_vlan_set_stats(struct net_bridge *br, unsigned long val);
  750. int br_vlan_set_stats_per_port(struct net_bridge *br, unsigned long val);
  751. int br_vlan_init(struct net_bridge *br);
  752. int br_vlan_set_default_pvid(struct net_bridge *br, unsigned long val);
  753. int __br_vlan_set_default_pvid(struct net_bridge *br, u16 pvid);
  754. int nbp_vlan_add(struct net_bridge_port *port, u16 vid, u16 flags,
  755. bool *changed);
  756. int nbp_vlan_delete(struct net_bridge_port *port, u16 vid);
  757. void nbp_vlan_flush(struct net_bridge_port *port);
  758. int nbp_vlan_init(struct net_bridge_port *port);
  759. int nbp_get_num_vlan_infos(struct net_bridge_port *p, u32 filter_mask);
  760. void br_vlan_get_stats(const struct net_bridge_vlan *v,
  761. struct br_vlan_stats *stats);
  762. static inline struct net_bridge_vlan_group *br_vlan_group(
  763. const struct net_bridge *br)
  764. {
  765. return rtnl_dereference(br->vlgrp);
  766. }
  767. static inline struct net_bridge_vlan_group *nbp_vlan_group(
  768. const struct net_bridge_port *p)
  769. {
  770. return rtnl_dereference(p->vlgrp);
  771. }
  772. static inline struct net_bridge_vlan_group *br_vlan_group_rcu(
  773. const struct net_bridge *br)
  774. {
  775. return rcu_dereference(br->vlgrp);
  776. }
  777. static inline struct net_bridge_vlan_group *nbp_vlan_group_rcu(
  778. const struct net_bridge_port *p)
  779. {
  780. return rcu_dereference(p->vlgrp);
  781. }
  782. /* Since bridge now depends on 8021Q module, but the time bridge sees the
  783. * skb, the vlan tag will always be present if the frame was tagged.
  784. */
  785. static inline int br_vlan_get_tag(const struct sk_buff *skb, u16 *vid)
  786. {
  787. int err = 0;
  788. if (skb_vlan_tag_present(skb)) {
  789. *vid = skb_vlan_tag_get(skb) & VLAN_VID_MASK;
  790. } else {
  791. *vid = 0;
  792. err = -EINVAL;
  793. }
  794. return err;
  795. }
  796. static inline u16 br_get_pvid(const struct net_bridge_vlan_group *vg)
  797. {
  798. if (!vg)
  799. return 0;
  800. smp_rmb();
  801. return vg->pvid;
  802. }
  803. #else
  804. static inline bool br_allowed_ingress(const struct net_bridge *br,
  805. struct net_bridge_vlan_group *vg,
  806. struct sk_buff *skb,
  807. u16 *vid)
  808. {
  809. return true;
  810. }
  811. static inline bool br_allowed_egress(struct net_bridge_vlan_group *vg,
  812. const struct sk_buff *skb)
  813. {
  814. return true;
  815. }
  816. static inline bool br_should_learn(struct net_bridge_port *p,
  817. struct sk_buff *skb, u16 *vid)
  818. {
  819. return true;
  820. }
  821. static inline struct sk_buff *br_handle_vlan(struct net_bridge *br,
  822. const struct net_bridge_port *port,
  823. struct net_bridge_vlan_group *vg,
  824. struct sk_buff *skb)
  825. {
  826. return skb;
  827. }
  828. static inline int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags,
  829. bool *changed)
  830. {
  831. *changed = false;
  832. return -EOPNOTSUPP;
  833. }
  834. static inline int br_vlan_delete(struct net_bridge *br, u16 vid)
  835. {
  836. return -EOPNOTSUPP;
  837. }
  838. static inline void br_vlan_flush(struct net_bridge *br)
  839. {
  840. }
  841. static inline void br_recalculate_fwd_mask(struct net_bridge *br)
  842. {
  843. }
  844. static inline int br_vlan_init(struct net_bridge *br)
  845. {
  846. return 0;
  847. }
  848. static inline int nbp_vlan_add(struct net_bridge_port *port, u16 vid, u16 flags,
  849. bool *changed)
  850. {
  851. *changed = false;
  852. return -EOPNOTSUPP;
  853. }
  854. static inline int nbp_vlan_delete(struct net_bridge_port *port, u16 vid)
  855. {
  856. return -EOPNOTSUPP;
  857. }
  858. static inline void nbp_vlan_flush(struct net_bridge_port *port)
  859. {
  860. }
  861. static inline struct net_bridge_vlan *br_vlan_find(struct net_bridge_vlan_group *vg,
  862. u16 vid)
  863. {
  864. return NULL;
  865. }
  866. static inline int nbp_vlan_init(struct net_bridge_port *port)
  867. {
  868. return 0;
  869. }
  870. static inline u16 br_vlan_get_tag(const struct sk_buff *skb, u16 *tag)
  871. {
  872. return 0;
  873. }
  874. static inline u16 br_get_pvid(const struct net_bridge_vlan_group *vg)
  875. {
  876. return 0;
  877. }
  878. static inline int __br_vlan_filter_toggle(struct net_bridge *br,
  879. unsigned long val)
  880. {
  881. return -EOPNOTSUPP;
  882. }
  883. static inline int nbp_get_num_vlan_infos(struct net_bridge_port *p,
  884. u32 filter_mask)
  885. {
  886. return 0;
  887. }
  888. static inline struct net_bridge_vlan_group *br_vlan_group(
  889. const struct net_bridge *br)
  890. {
  891. return NULL;
  892. }
  893. static inline struct net_bridge_vlan_group *nbp_vlan_group(
  894. const struct net_bridge_port *p)
  895. {
  896. return NULL;
  897. }
  898. static inline struct net_bridge_vlan_group *br_vlan_group_rcu(
  899. const struct net_bridge *br)
  900. {
  901. return NULL;
  902. }
  903. static inline struct net_bridge_vlan_group *nbp_vlan_group_rcu(
  904. const struct net_bridge_port *p)
  905. {
  906. return NULL;
  907. }
  908. static inline void br_vlan_get_stats(const struct net_bridge_vlan *v,
  909. struct br_vlan_stats *stats)
  910. {
  911. }
  912. #endif
  913. struct nf_br_ops {
  914. int (*br_dev_xmit_hook)(struct sk_buff *skb);
  915. };
  916. extern const struct nf_br_ops __rcu *nf_br_ops;
  917. /* br_netfilter.c */
  918. #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
  919. int br_nf_core_init(void);
  920. void br_nf_core_fini(void);
  921. void br_netfilter_rtable_init(struct net_bridge *);
  922. #else
  923. static inline int br_nf_core_init(void) { return 0; }
  924. static inline void br_nf_core_fini(void) {}
  925. #define br_netfilter_rtable_init(x)
  926. #endif
  927. /* br_stp.c */
  928. void br_set_state(struct net_bridge_port *p, unsigned int state);
  929. struct net_bridge_port *br_get_port(struct net_bridge *br, u16 port_no);
  930. void br_init_port(struct net_bridge_port *p);
  931. void br_become_designated_port(struct net_bridge_port *p);
  932. void __br_set_forward_delay(struct net_bridge *br, unsigned long t);
  933. int br_set_forward_delay(struct net_bridge *br, unsigned long x);
  934. int br_set_hello_time(struct net_bridge *br, unsigned long x);
  935. int br_set_max_age(struct net_bridge *br, unsigned long x);
  936. int __set_ageing_time(struct net_device *dev, unsigned long t);
  937. int br_set_ageing_time(struct net_bridge *br, clock_t ageing_time);
  938. /* br_stp_if.c */
  939. void br_stp_enable_bridge(struct net_bridge *br);
  940. void br_stp_disable_bridge(struct net_bridge *br);
  941. void br_stp_set_enabled(struct net_bridge *br, unsigned long val);
  942. void br_stp_enable_port(struct net_bridge_port *p);
  943. void br_stp_disable_port(struct net_bridge_port *p);
  944. bool br_stp_recalculate_bridge_id(struct net_bridge *br);
  945. void br_stp_change_bridge_id(struct net_bridge *br, const unsigned char *a);
  946. void br_stp_set_bridge_priority(struct net_bridge *br, u16 newprio);
  947. int br_stp_set_port_priority(struct net_bridge_port *p, unsigned long newprio);
  948. int br_stp_set_path_cost(struct net_bridge_port *p, unsigned long path_cost);
  949. ssize_t br_show_bridge_id(char *buf, const struct bridge_id *id);
  950. /* br_stp_bpdu.c */
  951. struct stp_proto;
  952. void br_stp_rcv(const struct stp_proto *proto, struct sk_buff *skb,
  953. struct net_device *dev);
  954. /* br_stp_timer.c */
  955. void br_stp_timer_init(struct net_bridge *br);
  956. void br_stp_port_timer_init(struct net_bridge_port *p);
  957. unsigned long br_timer_value(const struct timer_list *timer);
  958. /* br.c */
  959. #if IS_ENABLED(CONFIG_ATM_LANE)
  960. extern int (*br_fdb_test_addr_hook)(struct net_device *dev, unsigned char *addr);
  961. #endif
  962. /* br_netlink.c */
  963. extern struct rtnl_link_ops br_link_ops;
  964. int br_netlink_init(void);
  965. void br_netlink_fini(void);
  966. void br_ifinfo_notify(int event, const struct net_bridge *br,
  967. const struct net_bridge_port *port);
  968. int br_setlink(struct net_device *dev, struct nlmsghdr *nlmsg, u16 flags);
  969. int br_dellink(struct net_device *dev, struct nlmsghdr *nlmsg, u16 flags);
  970. int br_getlink(struct sk_buff *skb, u32 pid, u32 seq, struct net_device *dev,
  971. u32 filter_mask, int nlflags);
  972. #ifdef CONFIG_SYSFS
  973. /* br_sysfs_if.c */
  974. extern const struct sysfs_ops brport_sysfs_ops;
  975. int br_sysfs_addif(struct net_bridge_port *p);
  976. int br_sysfs_renameif(struct net_bridge_port *p);
  977. /* br_sysfs_br.c */
  978. int br_sysfs_addbr(struct net_device *dev);
  979. void br_sysfs_delbr(struct net_device *dev);
  980. #else
  981. static inline int br_sysfs_addif(struct net_bridge_port *p) { return 0; }
  982. static inline int br_sysfs_renameif(struct net_bridge_port *p) { return 0; }
  983. static inline int br_sysfs_addbr(struct net_device *dev) { return 0; }
  984. static inline void br_sysfs_delbr(struct net_device *dev) { return; }
  985. #endif /* CONFIG_SYSFS */
  986. /* br_switchdev.c */
  987. #ifdef CONFIG_NET_SWITCHDEV
  988. int nbp_switchdev_mark_set(struct net_bridge_port *p);
  989. void nbp_switchdev_frame_mark(const struct net_bridge_port *p,
  990. struct sk_buff *skb);
  991. bool nbp_switchdev_allowed_egress(const struct net_bridge_port *p,
  992. const struct sk_buff *skb);
  993. int br_switchdev_set_port_flag(struct net_bridge_port *p,
  994. unsigned long flags,
  995. unsigned long mask);
  996. void br_switchdev_fdb_notify(const struct net_bridge_fdb_entry *fdb,
  997. int type);
  998. int br_switchdev_port_vlan_add(struct net_device *dev, u16 vid, u16 flags);
  999. int br_switchdev_port_vlan_del(struct net_device *dev, u16 vid);
  1000. static inline void br_switchdev_frame_unmark(struct sk_buff *skb)
  1001. {
  1002. skb->offload_fwd_mark = 0;
  1003. }
  1004. #else
  1005. static inline int nbp_switchdev_mark_set(struct net_bridge_port *p)
  1006. {
  1007. return 0;
  1008. }
  1009. static inline void nbp_switchdev_frame_mark(const struct net_bridge_port *p,
  1010. struct sk_buff *skb)
  1011. {
  1012. }
  1013. static inline bool nbp_switchdev_allowed_egress(const struct net_bridge_port *p,
  1014. const struct sk_buff *skb)
  1015. {
  1016. return true;
  1017. }
  1018. static inline int br_switchdev_set_port_flag(struct net_bridge_port *p,
  1019. unsigned long flags,
  1020. unsigned long mask)
  1021. {
  1022. return 0;
  1023. }
  1024. static inline int br_switchdev_port_vlan_add(struct net_device *dev,
  1025. u16 vid, u16 flags)
  1026. {
  1027. return -EOPNOTSUPP;
  1028. }
  1029. static inline int br_switchdev_port_vlan_del(struct net_device *dev, u16 vid)
  1030. {
  1031. return -EOPNOTSUPP;
  1032. }
  1033. static inline void
  1034. br_switchdev_fdb_notify(const struct net_bridge_fdb_entry *fdb, int type)
  1035. {
  1036. }
  1037. static inline void br_switchdev_frame_unmark(struct sk_buff *skb)
  1038. {
  1039. }
  1040. #endif /* CONFIG_NET_SWITCHDEV */
  1041. /* br_arp_nd_proxy.c */
  1042. void br_recalculate_neigh_suppress_enabled(struct net_bridge *br);
  1043. void br_do_proxy_suppress_arp(struct sk_buff *skb, struct net_bridge *br,
  1044. u16 vid, struct net_bridge_port *p);
  1045. void br_do_suppress_nd(struct sk_buff *skb, struct net_bridge *br,
  1046. u16 vid, struct net_bridge_port *p, struct nd_msg *msg);
  1047. struct nd_msg *br_is_nd_neigh_msg(struct sk_buff *skb, struct nd_msg *m);
  1048. #endif