br_private.h 67 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /*
  3. * Linux ethernet bridge
  4. *
  5. * Authors:
  6. * Lennert Buytenhek <buytenh@gnu.org>
  7. */
  8. #ifndef _BR_PRIVATE_H
  9. #define _BR_PRIVATE_H
  10. #include <linux/netdevice.h>
  11. #include <linux/if_bridge.h>
  12. #include <linux/netpoll.h>
  13. #include <linux/u64_stats_sync.h>
  14. #include <net/route.h>
  15. #include <net/ip6_fib.h>
  16. #include <net/pkt_cls.h>
  17. #include <linux/if_vlan.h>
  18. #include <linux/rhashtable.h>
  19. #include <linux/refcount.h>
  20. #define BR_HASH_BITS 8
  21. #define BR_HASH_SIZE (1 << BR_HASH_BITS)
  22. #define BR_HOLD_TIME (1*HZ)
  23. #define BR_PORT_BITS 10
  24. #define BR_MAX_PORTS (1<<BR_PORT_BITS)
  25. #define BR_MULTICAST_DEFAULT_HASH_MAX 4096
  26. #define BR_MULTICAST_QUERY_INTVL_MIN msecs_to_jiffies(1000)
  27. #define BR_MULTICAST_STARTUP_QUERY_INTVL_MIN BR_MULTICAST_QUERY_INTVL_MIN
  28. #define BR_MULTICAST_QUERY_INTVL_MAX msecs_to_jiffies(86400000) /* 24 hours */
  29. #define BR_MULTICAST_STARTUP_QUERY_INTVL_MAX BR_MULTICAST_QUERY_INTVL_MAX
  30. #define BR_HWDOM_MAX BITS_PER_LONG
  31. #define BR_VERSION "2.3"
  32. /* Control of forwarding link local multicast */
  33. #define BR_GROUPFWD_DEFAULT 0
  34. /* Don't allow forwarding of control protocols like STP, MAC PAUSE and LACP */
  35. enum {
  36. BR_GROUPFWD_STP = BIT(0),
  37. BR_GROUPFWD_MACPAUSE = BIT(1),
  38. BR_GROUPFWD_LACP = BIT(2),
  39. };
  40. #define BR_GROUPFWD_RESTRICTED (BR_GROUPFWD_STP | BR_GROUPFWD_MACPAUSE | \
  41. BR_GROUPFWD_LACP)
  42. /* The Nearest Customer Bridge Group Address, 01-80-C2-00-00-[00,0B,0C,0D,0F] */
  43. #define BR_GROUPFWD_8021AD 0xB801u
  44. /* Path to usermode spanning tree program */
  45. #define BR_STP_PROG "/sbin/bridge-stp"
  46. #define BR_FDB_NOTIFY_SETTABLE_BITS (FDB_NOTIFY_BIT | FDB_NOTIFY_INACTIVE_BIT)
  47. typedef struct bridge_id bridge_id;
  48. typedef struct mac_addr mac_addr;
  49. typedef __u16 port_id;
  50. struct bridge_id {
  51. unsigned char prio[2];
  52. unsigned char addr[ETH_ALEN];
  53. };
  54. struct mac_addr {
  55. unsigned char addr[ETH_ALEN];
  56. };
  57. #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
  58. /* our own querier */
  59. struct bridge_mcast_own_query {
  60. struct timer_list timer;
  61. u32 startup_sent;
  62. };
  63. /* other querier */
  64. struct bridge_mcast_other_query {
  65. struct timer_list timer;
  66. struct timer_list delay_timer;
  67. };
  68. /* selected querier */
  69. struct bridge_mcast_querier {
  70. struct br_ip addr;
  71. int port_ifidx;
  72. seqcount_spinlock_t seq;
  73. };
  74. /* IGMP/MLD statistics */
  75. struct bridge_mcast_stats {
  76. struct br_mcast_stats mstats;
  77. struct u64_stats_sync syncp;
  78. };
  79. struct br_mdb_src_entry {
  80. struct br_ip addr;
  81. };
  82. struct br_mdb_config {
  83. struct net_bridge *br;
  84. struct net_bridge_port *p;
  85. struct br_mdb_entry *entry;
  86. struct br_ip group;
  87. bool src_entry;
  88. u8 filter_mode;
  89. u16 nlflags;
  90. struct br_mdb_src_entry *src_entries;
  91. int num_src_entries;
  92. u8 rt_protocol;
  93. };
  94. #endif
  95. /* net_bridge_mcast_port must be always defined due to forwarding stubs */
  96. struct net_bridge_mcast_port {
  97. #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
  98. struct net_bridge_port *port;
  99. struct net_bridge_vlan *vlan;
  100. struct bridge_mcast_own_query ip4_own_query;
  101. struct timer_list ip4_mc_router_timer;
  102. struct hlist_node ip4_rlist;
  103. #if IS_ENABLED(CONFIG_IPV6)
  104. struct bridge_mcast_own_query ip6_own_query;
  105. struct timer_list ip6_mc_router_timer;
  106. struct hlist_node ip6_rlist;
  107. #endif /* IS_ENABLED(CONFIG_IPV6) */
  108. unsigned char multicast_router;
  109. u32 mdb_n_entries;
  110. u32 mdb_max_entries;
  111. #endif /* CONFIG_BRIDGE_IGMP_SNOOPING */
  112. };
  113. /* net_bridge_mcast must be always defined due to forwarding stubs */
  114. struct net_bridge_mcast {
  115. #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
  116. struct net_bridge *br;
  117. struct net_bridge_vlan *vlan;
  118. u32 multicast_last_member_count;
  119. u32 multicast_startup_query_count;
  120. u8 multicast_querier;
  121. u8 multicast_igmp_version;
  122. u8 multicast_router;
  123. #if IS_ENABLED(CONFIG_IPV6)
  124. u8 multicast_mld_version;
  125. #endif
  126. unsigned long multicast_last_member_interval;
  127. unsigned long multicast_membership_interval;
  128. unsigned long multicast_querier_interval;
  129. unsigned long multicast_query_interval;
  130. unsigned long multicast_query_response_interval;
  131. unsigned long multicast_startup_query_interval;
  132. struct hlist_head ip4_mc_router_list;
  133. struct timer_list ip4_mc_router_timer;
  134. struct bridge_mcast_other_query ip4_other_query;
  135. struct bridge_mcast_own_query ip4_own_query;
  136. struct bridge_mcast_querier ip4_querier;
  137. #if IS_ENABLED(CONFIG_IPV6)
  138. struct hlist_head ip6_mc_router_list;
  139. struct timer_list ip6_mc_router_timer;
  140. struct bridge_mcast_other_query ip6_other_query;
  141. struct bridge_mcast_own_query ip6_own_query;
  142. struct bridge_mcast_querier ip6_querier;
  143. #endif /* IS_ENABLED(CONFIG_IPV6) */
  144. #endif /* CONFIG_BRIDGE_IGMP_SNOOPING */
  145. };
  146. struct br_tunnel_info {
  147. __be64 tunnel_id;
  148. struct metadata_dst __rcu *tunnel_dst;
  149. };
  150. /* private vlan flags */
  151. enum {
  152. BR_VLFLAG_PER_PORT_STATS = BIT(0),
  153. BR_VLFLAG_ADDED_BY_SWITCHDEV = BIT(1),
  154. BR_VLFLAG_MCAST_ENABLED = BIT(2),
  155. BR_VLFLAG_GLOBAL_MCAST_ENABLED = BIT(3),
  156. BR_VLFLAG_NEIGH_SUPPRESS_ENABLED = BIT(4),
  157. };
  158. /**
  159. * struct net_bridge_vlan - per-vlan entry
  160. *
  161. * @vnode: rhashtable member
  162. * @tnode: rhashtable member
  163. * @vid: VLAN id
  164. * @flags: bridge vlan flags
  165. * @priv_flags: private (in-kernel) bridge vlan flags
  166. * @state: STP state (e.g. blocking, learning, forwarding)
  167. * @stats: per-cpu VLAN statistics
  168. * @br: if MASTER flag set, this points to a bridge struct
  169. * @port: if MASTER flag unset, this points to a port struct
  170. * @refcnt: if MASTER flag set, this is bumped for each port referencing it
  171. * @brvlan: if MASTER flag unset, this points to the global per-VLAN context
  172. * for this VLAN entry
  173. * @tinfo: bridge tunnel info
  174. * @br_mcast_ctx: if MASTER flag set, this is the global vlan multicast context
  175. * @port_mcast_ctx: if MASTER flag unset, this is the per-port/vlan multicast
  176. * context
  177. * @msti: if MASTER flag set, this holds the VLANs MST instance
  178. * @vlist: sorted list of VLAN entries
  179. * @rcu: used for entry destruction
  180. *
  181. * This structure is shared between the global per-VLAN entries contained in
  182. * the bridge rhashtable and the local per-port per-VLAN entries contained in
  183. * the port's rhashtable. The union entries should be interpreted depending on
  184. * the entry flags that are set.
  185. */
  186. struct net_bridge_vlan {
  187. struct rhash_head vnode;
  188. struct rhash_head tnode;
  189. u16 vid;
  190. u16 flags;
  191. u16 priv_flags;
  192. u8 state;
  193. struct pcpu_sw_netstats __percpu *stats;
  194. union {
  195. struct net_bridge *br;
  196. struct net_bridge_port *port;
  197. };
  198. union {
  199. refcount_t refcnt;
  200. struct net_bridge_vlan *brvlan;
  201. };
  202. struct br_tunnel_info tinfo;
  203. union {
  204. struct net_bridge_mcast br_mcast_ctx;
  205. struct net_bridge_mcast_port port_mcast_ctx;
  206. };
  207. u16 msti;
  208. struct list_head vlist;
  209. struct rcu_head rcu;
  210. };
  211. /**
  212. * struct net_bridge_vlan_group
  213. *
  214. * @vlan_hash: VLAN entry rhashtable
  215. * @tunnel_hash: Hash table to map from tunnel key ID (e.g. VXLAN VNI) to VLAN
  216. * @vlan_list: sorted VLAN entry list
  217. * @num_vlans: number of total VLAN entries
  218. * @pvid: PVID VLAN id
  219. * @pvid_state: PVID's STP state (e.g. forwarding, learning, blocking)
  220. *
  221. * IMPORTANT: Be careful when checking if there're VLAN entries using list
  222. * primitives because the bridge can have entries in its list which
  223. * are just for global context but not for filtering, i.e. they have
  224. * the master flag set but not the brentry flag. If you have to check
  225. * if there're "real" entries in the bridge please test @num_vlans
  226. */
  227. struct net_bridge_vlan_group {
  228. struct rhashtable vlan_hash;
  229. struct rhashtable tunnel_hash;
  230. struct list_head vlan_list;
  231. u16 num_vlans;
  232. u16 pvid;
  233. u8 pvid_state;
  234. };
  235. /* bridge fdb flags */
  236. enum {
  237. BR_FDB_LOCAL,
  238. BR_FDB_STATIC,
  239. BR_FDB_STICKY,
  240. BR_FDB_ADDED_BY_USER,
  241. BR_FDB_ADDED_BY_EXT_LEARN,
  242. BR_FDB_OFFLOADED,
  243. BR_FDB_NOTIFY,
  244. BR_FDB_NOTIFY_INACTIVE,
  245. BR_FDB_LOCKED,
  246. BR_FDB_DYNAMIC_LEARNED,
  247. };
  248. struct net_bridge_fdb_key {
  249. mac_addr addr;
  250. u16 vlan_id;
  251. };
  252. struct net_bridge_fdb_entry {
  253. struct rhash_head rhnode;
  254. struct net_bridge_port *dst;
  255. struct net_bridge_fdb_key key;
  256. struct hlist_node fdb_node;
  257. unsigned long flags;
  258. /* write-heavy members should not affect lookups */
  259. unsigned long updated ____cacheline_aligned_in_smp;
  260. unsigned long used;
  261. struct rcu_head rcu;
  262. };
  263. struct net_bridge_fdb_flush_desc {
  264. unsigned long flags;
  265. unsigned long flags_mask;
  266. int port_ifindex;
  267. u16 vlan_id;
  268. };
  269. #define MDB_PG_FLAGS_PERMANENT BIT(0)
  270. #define MDB_PG_FLAGS_OFFLOAD BIT(1)
  271. #define MDB_PG_FLAGS_FAST_LEAVE BIT(2)
  272. #define MDB_PG_FLAGS_STAR_EXCL BIT(3)
  273. #define MDB_PG_FLAGS_BLOCKED BIT(4)
  274. #define MDB_PG_FLAGS_OFFLOAD_FAILED BIT(5)
  275. #define PG_SRC_ENT_LIMIT 32
  276. #define BR_SGRP_F_DELETE BIT(0)
  277. #define BR_SGRP_F_SEND BIT(1)
  278. #define BR_SGRP_F_INSTALLED BIT(2)
  279. #define BR_SGRP_F_USER_ADDED BIT(3)
  280. struct net_bridge_mcast_gc {
  281. struct hlist_node gc_node;
  282. void (*destroy)(struct net_bridge_mcast_gc *gc);
  283. };
  284. struct net_bridge_group_src {
  285. struct hlist_node node;
  286. struct br_ip addr;
  287. struct net_bridge_port_group *pg;
  288. u8 flags;
  289. u8 src_query_rexmit_cnt;
  290. struct timer_list timer;
  291. struct net_bridge *br;
  292. struct net_bridge_mcast_gc mcast_gc;
  293. struct rcu_head rcu;
  294. };
  295. struct net_bridge_port_group_sg_key {
  296. struct net_bridge_port *port;
  297. struct br_ip addr;
  298. };
  299. struct net_bridge_port_group {
  300. struct net_bridge_port_group __rcu *next;
  301. struct net_bridge_port_group_sg_key key;
  302. unsigned char eth_addr[ETH_ALEN] __aligned(2);
  303. unsigned char flags;
  304. unsigned char filter_mode;
  305. unsigned char grp_query_rexmit_cnt;
  306. unsigned char rt_protocol;
  307. struct hlist_head src_list;
  308. unsigned int src_ents;
  309. struct timer_list timer;
  310. struct timer_list rexmit_timer;
  311. struct hlist_node mglist;
  312. struct rb_root eht_set_tree;
  313. struct rb_root eht_host_tree;
  314. struct rhash_head rhnode;
  315. struct net_bridge_mcast_gc mcast_gc;
  316. struct rcu_head rcu;
  317. };
  318. struct net_bridge_mdb_entry {
  319. struct rhash_head rhnode;
  320. struct net_bridge *br;
  321. struct net_bridge_port_group __rcu *ports;
  322. struct br_ip addr;
  323. bool host_joined;
  324. struct timer_list timer;
  325. struct hlist_node mdb_node;
  326. struct net_bridge_mcast_gc mcast_gc;
  327. struct rcu_head rcu;
  328. };
  329. struct net_bridge_port {
  330. struct net_bridge *br;
  331. struct net_device *dev;
  332. netdevice_tracker dev_tracker;
  333. struct list_head list;
  334. unsigned long flags;
  335. #ifdef CONFIG_BRIDGE_VLAN_FILTERING
  336. struct net_bridge_vlan_group __rcu *vlgrp;
  337. #endif
  338. struct net_bridge_port __rcu *backup_port;
  339. u32 backup_nhid;
  340. /* STP */
  341. u8 priority;
  342. u8 state;
  343. u16 port_no;
  344. unsigned char topology_change_ack;
  345. unsigned char config_pending;
  346. port_id port_id;
  347. port_id designated_port;
  348. bridge_id designated_root;
  349. bridge_id designated_bridge;
  350. u32 path_cost;
  351. u32 designated_cost;
  352. unsigned long designated_age;
  353. struct timer_list forward_delay_timer;
  354. struct timer_list hold_timer;
  355. struct timer_list message_age_timer;
  356. struct kobject kobj;
  357. struct rcu_head rcu;
  358. struct net_bridge_mcast_port multicast_ctx;
  359. #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
  360. struct bridge_mcast_stats __percpu *mcast_stats;
  361. u32 multicast_eht_hosts_limit;
  362. u32 multicast_eht_hosts_cnt;
  363. struct hlist_head mglist;
  364. #endif
  365. #ifdef CONFIG_SYSFS
  366. char sysfs_name[IFNAMSIZ];
  367. #endif
  368. #ifdef CONFIG_NET_POLL_CONTROLLER
  369. struct netpoll *np;
  370. #endif
  371. #ifdef CONFIG_NET_SWITCHDEV
  372. /* Identifier used to group ports that share the same switchdev
  373. * hardware domain.
  374. */
  375. int hwdom;
  376. int offload_count;
  377. struct netdev_phys_item_id ppid;
  378. #endif
  379. u16 group_fwd_mask;
  380. u16 backup_redirected_cnt;
  381. struct bridge_stp_xstats stp_xstats;
  382. };
  383. #define kobj_to_brport(obj) container_of(obj, struct net_bridge_port, kobj)
  384. #define br_auto_port(p) ((p)->flags & BR_AUTO_MASK)
  385. #define br_promisc_port(p) ((p)->flags & BR_PROMISC)
  386. static inline struct net_bridge_port *br_port_get_rcu(const struct net_device *dev)
  387. {
  388. return rcu_dereference(dev->rx_handler_data);
  389. }
  390. static inline struct net_bridge_port *br_port_get_rtnl(const struct net_device *dev)
  391. {
  392. return netif_is_bridge_port(dev) ?
  393. rtnl_dereference(dev->rx_handler_data) : NULL;
  394. }
  395. static inline struct net_bridge_port *br_port_get_rtnl_rcu(const struct net_device *dev)
  396. {
  397. return netif_is_bridge_port(dev) ?
  398. rcu_dereference_rtnl(dev->rx_handler_data) : NULL;
  399. }
  400. enum net_bridge_opts {
  401. BROPT_VLAN_ENABLED,
  402. BROPT_VLAN_STATS_ENABLED,
  403. BROPT_NF_CALL_IPTABLES,
  404. BROPT_NF_CALL_IP6TABLES,
  405. BROPT_NF_CALL_ARPTABLES,
  406. BROPT_GROUP_ADDR_SET,
  407. BROPT_MULTICAST_ENABLED,
  408. BROPT_MULTICAST_QUERY_USE_IFADDR,
  409. BROPT_MULTICAST_STATS_ENABLED,
  410. BROPT_HAS_IPV6_ADDR,
  411. BROPT_NEIGH_SUPPRESS_ENABLED,
  412. BROPT_MTU_SET_BY_USER,
  413. BROPT_VLAN_STATS_PER_PORT,
  414. BROPT_NO_LL_LEARN,
  415. BROPT_VLAN_BRIDGE_BINDING,
  416. BROPT_MCAST_VLAN_SNOOPING_ENABLED,
  417. BROPT_MST_ENABLED,
  418. BROPT_MDB_OFFLOAD_FAIL_NOTIFICATION,
  419. BROPT_FDB_LOCAL_VLAN_0,
  420. };
  421. struct net_bridge {
  422. spinlock_t lock;
  423. spinlock_t hash_lock;
  424. struct hlist_head frame_type_list;
  425. struct net_device *dev;
  426. unsigned long options;
  427. /* These fields are accessed on each packet */
  428. #ifdef CONFIG_BRIDGE_VLAN_FILTERING
  429. __be16 vlan_proto;
  430. u16 default_pvid;
  431. struct net_bridge_vlan_group __rcu *vlgrp;
  432. #endif
  433. struct rhashtable fdb_hash_tbl;
  434. struct list_head port_list;
  435. #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
  436. union {
  437. struct rtable fake_rtable;
  438. struct rt6_info fake_rt6_info;
  439. };
  440. u32 metrics[RTAX_MAX];
  441. #endif
  442. u16 group_fwd_mask;
  443. u16 group_fwd_mask_required;
  444. /* STP */
  445. bridge_id designated_root;
  446. bridge_id bridge_id;
  447. unsigned char topology_change;
  448. unsigned char topology_change_detected;
  449. u16 root_port;
  450. unsigned long max_age;
  451. unsigned long hello_time;
  452. unsigned long forward_delay;
  453. unsigned long ageing_time;
  454. unsigned long bridge_max_age;
  455. unsigned long bridge_hello_time;
  456. unsigned long bridge_forward_delay;
  457. unsigned long bridge_ageing_time;
  458. u32 root_path_cost;
  459. u8 group_addr[ETH_ALEN];
  460. enum {
  461. BR_NO_STP, /* no spanning tree */
  462. BR_KERNEL_STP, /* old STP in kernel */
  463. BR_USER_STP, /* new RSTP in userspace */
  464. } stp_enabled;
  465. struct net_bridge_mcast multicast_ctx;
  466. #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
  467. struct bridge_mcast_stats __percpu *mcast_stats;
  468. u32 hash_max;
  469. spinlock_t multicast_lock;
  470. struct rhashtable mdb_hash_tbl;
  471. struct rhashtable sg_port_tbl;
  472. struct hlist_head mcast_gc_list;
  473. struct hlist_head mdb_list;
  474. struct work_struct mcast_gc_work;
  475. #endif
  476. struct timer_list hello_timer;
  477. struct timer_list tcn_timer;
  478. struct timer_list topology_change_timer;
  479. struct delayed_work gc_work;
  480. struct kobject *ifobj;
  481. u32 auto_cnt;
  482. atomic_t fdb_n_learned;
  483. u32 fdb_max_learned;
  484. #ifdef CONFIG_NET_SWITCHDEV
  485. /* Counter used to make sure that hardware domains get unique
  486. * identifiers in case a bridge spans multiple switchdev instances.
  487. */
  488. int last_hwdom;
  489. /* Bit mask of hardware domain numbers in use */
  490. unsigned long busy_hwdoms;
  491. #endif
  492. struct hlist_head fdb_list;
  493. #if IS_ENABLED(CONFIG_BRIDGE_MRP)
  494. struct hlist_head mrp_list;
  495. #endif
  496. #if IS_ENABLED(CONFIG_BRIDGE_CFM)
  497. struct hlist_head mep_list;
  498. #endif
  499. };
  500. struct br_input_skb_cb {
  501. struct net_device *brdev;
  502. u16 frag_max_size;
  503. #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
  504. u8 igmp;
  505. u8 mrouters_only:1;
  506. #endif
  507. u8 proxyarp_replied:1;
  508. u8 src_port_isolated:1;
  509. u8 promisc:1;
  510. #ifdef CONFIG_BRIDGE_VLAN_FILTERING
  511. u8 vlan_filtered:1;
  512. #endif
  513. #ifdef CONFIG_NETFILTER_FAMILY_BRIDGE
  514. u8 br_netfilter_broute:1;
  515. #endif
  516. #ifdef CONFIG_NET_SWITCHDEV
  517. /* Set if TX data plane offloading is used towards at least one
  518. * hardware domain.
  519. */
  520. u8 tx_fwd_offload:1;
  521. /* The switchdev hardware domain from which this packet was received.
  522. * If skb->offload_fwd_mark was set, then this packet was already
  523. * forwarded by hardware to the other ports in the source hardware
  524. * domain, otherwise it wasn't.
  525. */
  526. int src_hwdom;
  527. /* Bit mask of hardware domains towards this packet has already been
  528. * transmitted using the TX data plane offload.
  529. */
  530. unsigned long fwd_hwdoms;
  531. #endif
  532. u32 backup_nhid;
  533. };
  534. #define BR_INPUT_SKB_CB(__skb) ((struct br_input_skb_cb *)(__skb)->cb)
  535. #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
  536. # define BR_INPUT_SKB_CB_MROUTERS_ONLY(__skb) (BR_INPUT_SKB_CB(__skb)->mrouters_only)
  537. #else
  538. # define BR_INPUT_SKB_CB_MROUTERS_ONLY(__skb) (0)
  539. #endif
  540. #define br_printk(level, br, format, args...) \
  541. printk(level "%s: " format, (br)->dev->name, ##args)
  542. #define br_err(__br, format, args...) \
  543. br_printk(KERN_ERR, __br, format, ##args)
  544. #define br_warn(__br, format, args...) \
  545. br_printk(KERN_WARNING, __br, format, ##args)
  546. #define br_notice(__br, format, args...) \
  547. br_printk(KERN_NOTICE, __br, format, ##args)
  548. #define br_info(__br, format, args...) \
  549. br_printk(KERN_INFO, __br, format, ##args)
  550. #define br_debug(br, format, args...) \
  551. pr_debug("%s: " format, (br)->dev->name, ##args)
  552. /* called under bridge lock */
  553. static inline int br_is_root_bridge(const struct net_bridge *br)
  554. {
  555. return !memcmp(&br->bridge_id, &br->designated_root, 8);
  556. }
  557. /* check if a VLAN entry is global */
  558. static inline bool br_vlan_is_master(const struct net_bridge_vlan *v)
  559. {
  560. return v->flags & BRIDGE_VLAN_INFO_MASTER;
  561. }
  562. /* check if a VLAN entry is used by the bridge */
  563. static inline bool br_vlan_is_brentry(const struct net_bridge_vlan *v)
  564. {
  565. return v->flags & BRIDGE_VLAN_INFO_BRENTRY;
  566. }
  567. /* check if we should use the vlan entry, returns false if it's only context */
  568. static inline bool br_vlan_should_use(const struct net_bridge_vlan *v)
  569. {
  570. if (br_vlan_is_master(v)) {
  571. if (br_vlan_is_brentry(v))
  572. return true;
  573. else
  574. return false;
  575. }
  576. return true;
  577. }
  578. static inline bool nbp_state_should_learn(const struct net_bridge_port *p)
  579. {
  580. return p->state == BR_STATE_LEARNING || p->state == BR_STATE_FORWARDING;
  581. }
  582. static inline bool br_vlan_valid_id(u16 vid, struct netlink_ext_ack *extack)
  583. {
  584. bool ret = vid > 0 && vid < VLAN_VID_MASK;
  585. if (!ret)
  586. NL_SET_ERR_MSG_MOD(extack, "Vlan id is invalid");
  587. return ret;
  588. }
  589. static inline bool br_vlan_valid_range(const struct bridge_vlan_info *cur,
  590. const struct bridge_vlan_info *last,
  591. struct netlink_ext_ack *extack)
  592. {
  593. /* pvid flag is not allowed in ranges */
  594. if (cur->flags & BRIDGE_VLAN_INFO_PVID) {
  595. NL_SET_ERR_MSG_MOD(extack, "Pvid isn't allowed in a range");
  596. return false;
  597. }
  598. /* when cur is the range end, check if:
  599. * - it has range start flag
  600. * - range ids are invalid (end is equal to or before start)
  601. */
  602. if (last) {
  603. if (cur->flags & BRIDGE_VLAN_INFO_RANGE_BEGIN) {
  604. NL_SET_ERR_MSG_MOD(extack, "Found a new vlan range start while processing one");
  605. return false;
  606. } else if (!(cur->flags & BRIDGE_VLAN_INFO_RANGE_END)) {
  607. NL_SET_ERR_MSG_MOD(extack, "Vlan range end flag is missing");
  608. return false;
  609. } else if (cur->vid <= last->vid) {
  610. NL_SET_ERR_MSG_MOD(extack, "End vlan id is less than or equal to start vlan id");
  611. return false;
  612. }
  613. }
  614. /* check for required range flags */
  615. if (!(cur->flags & (BRIDGE_VLAN_INFO_RANGE_BEGIN |
  616. BRIDGE_VLAN_INFO_RANGE_END))) {
  617. NL_SET_ERR_MSG_MOD(extack, "Both vlan range flags are missing");
  618. return false;
  619. }
  620. return true;
  621. }
  622. static inline u8 br_vlan_multicast_router(const struct net_bridge_vlan *v)
  623. {
  624. u8 mcast_router = MDB_RTR_TYPE_DISABLED;
  625. #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
  626. if (!br_vlan_is_master(v))
  627. mcast_router = v->port_mcast_ctx.multicast_router;
  628. else
  629. mcast_router = v->br_mcast_ctx.multicast_router;
  630. #endif
  631. return mcast_router;
  632. }
  633. static inline int br_afspec_cmd_to_rtm(int cmd)
  634. {
  635. switch (cmd) {
  636. case RTM_SETLINK:
  637. return RTM_NEWVLAN;
  638. case RTM_DELLINK:
  639. return RTM_DELVLAN;
  640. }
  641. return 0;
  642. }
  643. static inline int br_opt_get(const struct net_bridge *br,
  644. enum net_bridge_opts opt)
  645. {
  646. return test_bit(opt, &br->options);
  647. }
  648. int br_boolopt_toggle(struct net_bridge *br, enum br_boolopt_id opt, bool on,
  649. struct netlink_ext_ack *extack);
  650. int br_boolopt_get(const struct net_bridge *br, enum br_boolopt_id opt);
  651. int br_boolopt_multi_toggle(struct net_bridge *br,
  652. struct br_boolopt_multi *bm,
  653. struct netlink_ext_ack *extack);
  654. void br_boolopt_multi_get(const struct net_bridge *br,
  655. struct br_boolopt_multi *bm);
  656. void br_opt_toggle(struct net_bridge *br, enum net_bridge_opts opt, bool on);
  657. #if IS_ENABLED(CONFIG_NET_TC_SKB_EXT)
  658. static inline void br_tc_skb_miss_set(struct sk_buff *skb, bool miss)
  659. {
  660. struct tc_skb_ext *ext;
  661. if (!tc_skb_ext_tc_enabled())
  662. return;
  663. ext = skb_ext_find(skb, TC_SKB_EXT);
  664. if (ext) {
  665. ext->l2_miss = miss;
  666. return;
  667. }
  668. if (!miss)
  669. return;
  670. ext = tc_skb_ext_alloc(skb);
  671. if (!ext)
  672. return;
  673. ext->l2_miss = true;
  674. }
  675. #else
  676. static inline void br_tc_skb_miss_set(struct sk_buff *skb, bool miss)
  677. {
  678. }
  679. #endif
  680. /* br_device.c */
  681. void br_dev_setup(struct net_device *dev);
  682. void br_dev_delete(struct net_device *dev, struct list_head *list);
  683. netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev);
  684. #ifdef CONFIG_NET_POLL_CONTROLLER
  685. static inline void br_netpoll_send_skb(const struct net_bridge_port *p,
  686. struct sk_buff *skb)
  687. {
  688. netpoll_send_skb(p->np, skb);
  689. }
  690. int br_netpoll_enable(struct net_bridge_port *p);
  691. void br_netpoll_disable(struct net_bridge_port *p);
  692. #else
  693. static inline void br_netpoll_send_skb(const struct net_bridge_port *p,
  694. struct sk_buff *skb)
  695. {
  696. }
  697. static inline int br_netpoll_enable(struct net_bridge_port *p)
  698. {
  699. return 0;
  700. }
  701. static inline void br_netpoll_disable(struct net_bridge_port *p)
  702. {
  703. }
  704. #endif
  705. /* br_fdb.c */
  706. #define FDB_FLUSH_IGNORED_NDM_FLAGS (NTF_MASTER | NTF_SELF)
  707. #define FDB_FLUSH_ALLOWED_NDM_STATES (NUD_PERMANENT | NUD_NOARP)
  708. #define FDB_FLUSH_ALLOWED_NDM_FLAGS (NTF_USE | NTF_EXT_LEARNED | \
  709. NTF_STICKY | NTF_OFFLOADED)
  710. int br_fdb_init(void);
  711. void br_fdb_fini(void);
  712. int br_fdb_hash_init(struct net_bridge *br);
  713. void br_fdb_hash_fini(struct net_bridge *br);
  714. void br_fdb_flush(struct net_bridge *br,
  715. const struct net_bridge_fdb_flush_desc *desc);
  716. void br_fdb_find_delete_local(struct net_bridge *br,
  717. const struct net_bridge_port *p,
  718. const unsigned char *addr, u16 vid);
  719. void br_fdb_changeaddr(struct net_bridge_port *p, const unsigned char *newaddr);
  720. void br_fdb_change_mac_address(struct net_bridge *br, const u8 *newaddr);
  721. void br_fdb_cleanup(struct work_struct *work);
  722. int br_fdb_toggle_local_vlan_0(struct net_bridge *br, bool on,
  723. struct netlink_ext_ack *extack);
  724. void br_fdb_delete_by_port(struct net_bridge *br,
  725. const struct net_bridge_port *p, u16 vid, int do_all);
  726. struct net_bridge_fdb_entry *br_fdb_find_rcu(struct net_bridge *br,
  727. const unsigned char *addr,
  728. __u16 vid);
  729. int br_fdb_test_addr(struct net_device *dev, unsigned char *addr);
  730. int br_fdb_fillbuf(struct net_bridge *br, void *buf, unsigned long count,
  731. unsigned long off);
  732. int br_fdb_add_local(struct net_bridge *br, struct net_bridge_port *source,
  733. const unsigned char *addr, u16 vid);
  734. void br_fdb_update(struct net_bridge *br, struct net_bridge_port *source,
  735. const unsigned char *addr, u16 vid, unsigned long flags);
  736. int br_fdb_delete(struct ndmsg *ndm, struct nlattr *tb[],
  737. struct net_device *dev, const unsigned char *addr, u16 vid,
  738. bool *notified, struct netlink_ext_ack *extack);
  739. int br_fdb_delete_bulk(struct nlmsghdr *nlh, struct net_device *dev,
  740. struct netlink_ext_ack *extack);
  741. int br_fdb_add(struct ndmsg *nlh, struct nlattr *tb[], struct net_device *dev,
  742. const unsigned char *addr, u16 vid, u16 nlh_flags,
  743. bool *notified, struct netlink_ext_ack *extack);
  744. int br_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb,
  745. struct net_device *dev, struct net_device *fdev, int *idx);
  746. int br_fdb_get(struct sk_buff *skb, struct nlattr *tb[], struct net_device *dev,
  747. const unsigned char *addr, u16 vid, u32 portid, u32 seq,
  748. struct netlink_ext_ack *extack);
  749. int br_fdb_sync_static(struct net_bridge *br, struct net_bridge_port *p);
  750. void br_fdb_unsync_static(struct net_bridge *br, struct net_bridge_port *p);
  751. int br_fdb_external_learn_add(struct net_bridge *br, struct net_bridge_port *p,
  752. const unsigned char *addr, u16 vid,
  753. bool locked, bool swdev_notify);
  754. int br_fdb_external_learn_del(struct net_bridge *br, struct net_bridge_port *p,
  755. const unsigned char *addr, u16 vid,
  756. bool swdev_notify);
  757. void br_fdb_offloaded_set(struct net_bridge *br, struct net_bridge_port *p,
  758. const unsigned char *addr, u16 vid, bool offloaded);
  759. /* br_forward.c */
  760. enum br_pkt_type {
  761. BR_PKT_UNICAST,
  762. BR_PKT_MULTICAST,
  763. BR_PKT_BROADCAST
  764. };
  765. int br_dev_queue_push_xmit(struct net *net, struct sock *sk, struct sk_buff *skb);
  766. void br_forward(const struct net_bridge_port *to, struct sk_buff *skb,
  767. bool local_rcv, bool local_orig);
  768. int br_forward_finish(struct net *net, struct sock *sk, struct sk_buff *skb);
  769. void br_flood(struct net_bridge *br, struct sk_buff *skb,
  770. enum br_pkt_type pkt_type, bool local_rcv, bool local_orig,
  771. u16 vid);
  772. /* return true if both source port and dest port are isolated */
  773. static inline bool br_skb_isolated(const struct net_bridge_port *to,
  774. const struct sk_buff *skb)
  775. {
  776. return BR_INPUT_SKB_CB(skb)->src_port_isolated &&
  777. (to->flags & BR_ISOLATED);
  778. }
  779. /* br_if.c */
  780. void br_port_carrier_check(struct net_bridge_port *p, bool *notified);
  781. int br_add_bridge(struct net *net, const char *name);
  782. int br_del_bridge(struct net *net, const char *name);
  783. int br_add_if(struct net_bridge *br, struct net_device *dev,
  784. struct netlink_ext_ack *extack);
  785. int br_del_if(struct net_bridge *br, struct net_device *dev);
  786. void br_mtu_auto_adjust(struct net_bridge *br);
  787. netdev_features_t br_features_recompute(struct net_bridge *br,
  788. netdev_features_t features);
  789. void br_port_flags_change(struct net_bridge_port *port, unsigned long mask);
  790. void br_manage_promisc(struct net_bridge *br);
  791. int nbp_backup_change(struct net_bridge_port *p, struct net_device *backup_dev);
  792. /* br_input.c */
  793. int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb);
  794. rx_handler_func_t *br_get_rx_handler(const struct net_device *dev);
  795. struct br_frame_type {
  796. __be16 type;
  797. int (*frame_handler)(struct net_bridge_port *port,
  798. struct sk_buff *skb);
  799. struct hlist_node list;
  800. };
  801. void br_add_frame(struct net_bridge *br, struct br_frame_type *ft);
  802. void br_del_frame(struct net_bridge *br, struct br_frame_type *ft);
  803. static inline bool br_rx_handler_check_rcu(const struct net_device *dev)
  804. {
  805. return rcu_dereference(dev->rx_handler) == br_get_rx_handler(dev);
  806. }
  807. static inline bool br_rx_handler_check_rtnl(const struct net_device *dev)
  808. {
  809. return rcu_dereference_rtnl(dev->rx_handler) == br_get_rx_handler(dev);
  810. }
  811. static inline struct net_bridge_port *br_port_get_check_rcu(const struct net_device *dev)
  812. {
  813. return br_rx_handler_check_rcu(dev) ? br_port_get_rcu(dev) : NULL;
  814. }
  815. static inline struct net_bridge_port *
  816. br_port_get_check_rtnl(const struct net_device *dev)
  817. {
  818. return br_rx_handler_check_rtnl(dev) ? br_port_get_rtnl_rcu(dev) : NULL;
  819. }
  820. /* br_ioctl.c */
  821. int br_dev_siocdevprivate(struct net_device *dev, struct ifreq *rq,
  822. void __user *data, int cmd);
  823. int br_ioctl_stub(struct net *net, unsigned int cmd, void __user *uarg);
  824. /* br_multicast.c */
  825. #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
  826. int br_multicast_rcv(struct net_bridge_mcast **brmctx,
  827. struct net_bridge_mcast_port **pmctx,
  828. struct net_bridge_vlan *vlan,
  829. struct sk_buff *skb, u16 vid);
  830. struct net_bridge_mdb_entry *
  831. br_mdb_entry_skb_get(struct net_bridge_mcast *brmctx, struct sk_buff *skb,
  832. u16 vid);
  833. int br_multicast_add_port(struct net_bridge_port *port);
  834. void br_multicast_del_port(struct net_bridge_port *port);
  835. void br_multicast_enable_port(struct net_bridge_port *port);
  836. void br_multicast_disable_port(struct net_bridge_port *port);
  837. void br_multicast_init(struct net_bridge *br);
  838. void br_multicast_join_snoopers(struct net_bridge *br);
  839. void br_multicast_leave_snoopers(struct net_bridge *br);
  840. void br_multicast_open(struct net_bridge *br);
  841. void br_multicast_stop(struct net_bridge *br);
  842. void br_multicast_dev_del(struct net_bridge *br);
  843. void br_multicast_flood(struct net_bridge_mdb_entry *mdst, struct sk_buff *skb,
  844. struct net_bridge_mcast *brmctx,
  845. bool local_rcv, bool local_orig);
  846. int br_multicast_set_router(struct net_bridge_mcast *brmctx, unsigned long val);
  847. int br_multicast_set_port_router(struct net_bridge_mcast_port *pmctx,
  848. unsigned long val);
  849. int br_multicast_set_vlan_router(struct net_bridge_vlan *v, u8 mcast_router);
  850. int br_multicast_toggle(struct net_bridge *br, unsigned long val,
  851. struct netlink_ext_ack *extack);
  852. int br_multicast_set_querier(struct net_bridge_mcast *brmctx, unsigned long val);
  853. int br_multicast_set_igmp_version(struct net_bridge_mcast *brmctx,
  854. unsigned long val);
  855. #if IS_ENABLED(CONFIG_IPV6)
  856. int br_multicast_set_mld_version(struct net_bridge_mcast *brmctx,
  857. unsigned long val);
  858. #endif
  859. struct net_bridge_mdb_entry *
  860. br_mdb_ip_get(struct net_bridge *br, struct br_ip *dst);
  861. struct net_bridge_mdb_entry *
  862. br_multicast_new_group(struct net_bridge *br, struct br_ip *group);
  863. struct net_bridge_port_group *
  864. br_multicast_new_port_group(struct net_bridge_port *port,
  865. const struct br_ip *group,
  866. struct net_bridge_port_group __rcu *next,
  867. unsigned char flags, const unsigned char *src,
  868. u8 filter_mode, u8 rt_protocol,
  869. struct netlink_ext_ack *extack);
  870. void br_multicast_del_port_group(struct net_bridge_port_group *p);
  871. int br_mdb_hash_init(struct net_bridge *br);
  872. void br_mdb_hash_fini(struct net_bridge *br);
  873. void br_mdb_notify(struct net_device *dev, struct net_bridge_mdb_entry *mp,
  874. struct net_bridge_port_group *pg, int type);
  875. void br_mdb_flag_change_notify(struct net_device *dev, struct net_bridge_mdb_entry *mp,
  876. struct net_bridge_port_group *pg);
  877. void br_rtr_notify(struct net_device *dev, struct net_bridge_mcast_port *pmctx,
  878. int type);
  879. void br_multicast_del_pg(struct net_bridge_mdb_entry *mp,
  880. struct net_bridge_port_group *pg,
  881. struct net_bridge_port_group __rcu **pp);
  882. void br_multicast_count(struct net_bridge *br,
  883. const struct net_bridge_port *p,
  884. const struct sk_buff *skb, u8 type, u8 dir);
  885. int br_multicast_init_stats(struct net_bridge *br);
  886. void br_multicast_uninit_stats(struct net_bridge *br);
  887. void br_multicast_get_stats(const struct net_bridge *br,
  888. const struct net_bridge_port *p,
  889. struct br_mcast_stats *dest);
  890. u32 br_multicast_ngroups_get(const struct net_bridge_mcast_port *pmctx);
  891. void br_multicast_ngroups_set_max(struct net_bridge_mcast_port *pmctx, u32 max);
  892. u32 br_multicast_ngroups_get_max(const struct net_bridge_mcast_port *pmctx);
  893. int br_mdb_add(struct net_device *dev, struct nlattr *tb[], u16 nlmsg_flags,
  894. struct netlink_ext_ack *extack);
  895. int br_mdb_del(struct net_device *dev, struct nlattr *tb[],
  896. struct netlink_ext_ack *extack);
  897. int br_mdb_del_bulk(struct net_device *dev, struct nlattr *tb[],
  898. struct netlink_ext_ack *extack);
  899. int br_mdb_dump(struct net_device *dev, struct sk_buff *skb,
  900. struct netlink_callback *cb);
  901. int br_mdb_get(struct net_device *dev, struct nlattr *tb[], u32 portid, u32 seq,
  902. struct netlink_ext_ack *extack);
  903. void br_multicast_host_join(const struct net_bridge_mcast *brmctx,
  904. struct net_bridge_mdb_entry *mp, bool notify);
  905. void br_multicast_host_leave(struct net_bridge_mdb_entry *mp, bool notify);
  906. void br_multicast_star_g_handle_mode(struct net_bridge_port_group *pg,
  907. u8 filter_mode);
  908. void br_multicast_sg_add_exclude_ports(struct net_bridge_mdb_entry *star_mp,
  909. struct net_bridge_port_group *sg);
  910. struct net_bridge_group_src *
  911. br_multicast_find_group_src(struct net_bridge_port_group *pg, struct br_ip *ip);
  912. struct net_bridge_group_src *
  913. br_multicast_new_group_src(struct net_bridge_port_group *pg,
  914. struct br_ip *src_ip);
  915. void __br_multicast_del_group_src(struct net_bridge_group_src *src);
  916. void br_multicast_del_group_src(struct net_bridge_group_src *src,
  917. bool fastleave);
  918. void br_multicast_ctx_init(struct net_bridge *br,
  919. struct net_bridge_vlan *vlan,
  920. struct net_bridge_mcast *brmctx);
  921. void br_multicast_ctx_deinit(struct net_bridge_mcast *brmctx);
  922. void br_multicast_port_ctx_init(struct net_bridge_port *port,
  923. struct net_bridge_vlan *vlan,
  924. struct net_bridge_mcast_port *pmctx);
  925. void br_multicast_port_ctx_deinit(struct net_bridge_mcast_port *pmctx);
  926. void br_multicast_update_vlan_mcast_ctx(struct net_bridge_vlan *v, u8 state);
  927. void br_multicast_toggle_one_vlan(struct net_bridge_vlan *vlan, bool on);
  928. int br_multicast_toggle_vlan_snooping(struct net_bridge *br, bool on,
  929. struct netlink_ext_ack *extack);
  930. bool br_multicast_toggle_global_vlan(struct net_bridge_vlan *vlan, bool on);
  931. int br_rports_fill_info(struct sk_buff *skb,
  932. const struct net_bridge_mcast *brmctx);
  933. int br_multicast_dump_querier_state(struct sk_buff *skb,
  934. const struct net_bridge_mcast *brmctx,
  935. int nest_attr);
  936. size_t br_multicast_querier_state_size(void);
  937. size_t br_rports_size(const struct net_bridge_mcast *brmctx);
  938. void br_multicast_set_query_intvl(struct net_bridge_mcast *brmctx,
  939. unsigned long val);
  940. void br_multicast_set_startup_query_intvl(struct net_bridge_mcast *brmctx,
  941. unsigned long val);
  942. static inline bool br_group_is_l2(const struct br_ip *group)
  943. {
  944. return group->proto == 0;
  945. }
  946. #define mlock_dereference(X, br) \
  947. rcu_dereference_protected(X, lockdep_is_held(&br->multicast_lock))
  948. static inline struct hlist_node *
  949. br_multicast_get_first_rport_node(struct net_bridge_mcast *brmctx,
  950. struct sk_buff *skb)
  951. {
  952. #if IS_ENABLED(CONFIG_IPV6)
  953. if (skb->protocol == htons(ETH_P_IPV6))
  954. return rcu_dereference(hlist_first_rcu(&brmctx->ip6_mc_router_list));
  955. #endif
  956. return rcu_dereference(hlist_first_rcu(&brmctx->ip4_mc_router_list));
  957. }
  958. static inline struct net_bridge_port *
  959. br_multicast_rport_from_node_skb(struct hlist_node *rp, struct sk_buff *skb)
  960. {
  961. struct net_bridge_mcast_port *mctx;
  962. #if IS_ENABLED(CONFIG_IPV6)
  963. if (skb->protocol == htons(ETH_P_IPV6))
  964. mctx = hlist_entry_safe(rp, struct net_bridge_mcast_port,
  965. ip6_rlist);
  966. else
  967. #endif
  968. mctx = hlist_entry_safe(rp, struct net_bridge_mcast_port,
  969. ip4_rlist);
  970. if (mctx)
  971. return mctx->port;
  972. else
  973. return NULL;
  974. }
  975. static inline bool br_ip4_multicast_is_router(struct net_bridge_mcast *brmctx)
  976. {
  977. return timer_pending(&brmctx->ip4_mc_router_timer);
  978. }
  979. static inline bool br_ip6_multicast_is_router(struct net_bridge_mcast *brmctx)
  980. {
  981. #if IS_ENABLED(CONFIG_IPV6)
  982. return timer_pending(&brmctx->ip6_mc_router_timer);
  983. #else
  984. return false;
  985. #endif
  986. }
  987. static inline bool
  988. br_multicast_is_router(struct net_bridge_mcast *brmctx, struct sk_buff *skb)
  989. {
  990. switch (brmctx->multicast_router) {
  991. case MDB_RTR_TYPE_PERM:
  992. return true;
  993. case MDB_RTR_TYPE_TEMP_QUERY:
  994. if (skb) {
  995. if (skb->protocol == htons(ETH_P_IP))
  996. return br_ip4_multicast_is_router(brmctx);
  997. else if (skb->protocol == htons(ETH_P_IPV6))
  998. return br_ip6_multicast_is_router(brmctx);
  999. } else {
  1000. return br_ip4_multicast_is_router(brmctx) ||
  1001. br_ip6_multicast_is_router(brmctx);
  1002. }
  1003. fallthrough;
  1004. default:
  1005. return false;
  1006. }
  1007. }
  1008. static inline bool
  1009. __br_multicast_querier_exists(struct net_bridge_mcast *brmctx,
  1010. struct bridge_mcast_other_query *querier,
  1011. const bool is_ipv6)
  1012. {
  1013. bool own_querier_enabled;
  1014. if (brmctx->multicast_querier) {
  1015. if (is_ipv6 && !br_opt_get(brmctx->br, BROPT_HAS_IPV6_ADDR))
  1016. own_querier_enabled = false;
  1017. else
  1018. own_querier_enabled = true;
  1019. } else {
  1020. own_querier_enabled = false;
  1021. }
  1022. return !timer_pending(&querier->delay_timer) &&
  1023. (own_querier_enabled || timer_pending(&querier->timer));
  1024. }
  1025. static inline bool br_multicast_querier_exists(struct net_bridge_mcast *brmctx,
  1026. struct ethhdr *eth,
  1027. const struct net_bridge_mdb_entry *mdb)
  1028. {
  1029. switch (eth->h_proto) {
  1030. case (htons(ETH_P_IP)):
  1031. return __br_multicast_querier_exists(brmctx,
  1032. &brmctx->ip4_other_query, false);
  1033. #if IS_ENABLED(CONFIG_IPV6)
  1034. case (htons(ETH_P_IPV6)):
  1035. return __br_multicast_querier_exists(brmctx,
  1036. &brmctx->ip6_other_query, true);
  1037. #endif
  1038. default:
  1039. return !!mdb && br_group_is_l2(&mdb->addr);
  1040. }
  1041. }
  1042. static inline bool br_multicast_is_star_g(const struct br_ip *ip)
  1043. {
  1044. switch (ip->proto) {
  1045. case htons(ETH_P_IP):
  1046. return ipv4_is_zeronet(ip->src.ip4);
  1047. #if IS_ENABLED(CONFIG_IPV6)
  1048. case htons(ETH_P_IPV6):
  1049. return ipv6_addr_any(&ip->src.ip6);
  1050. #endif
  1051. default:
  1052. return false;
  1053. }
  1054. }
  1055. static inline bool
  1056. br_multicast_should_handle_mode(const struct net_bridge_mcast *brmctx,
  1057. __be16 proto)
  1058. {
  1059. switch (proto) {
  1060. case htons(ETH_P_IP):
  1061. return !!(brmctx->multicast_igmp_version == 3);
  1062. #if IS_ENABLED(CONFIG_IPV6)
  1063. case htons(ETH_P_IPV6):
  1064. return !!(brmctx->multicast_mld_version == 2);
  1065. #endif
  1066. default:
  1067. return false;
  1068. }
  1069. }
  1070. static inline int br_multicast_igmp_type(const struct sk_buff *skb)
  1071. {
  1072. return BR_INPUT_SKB_CB(skb)->igmp;
  1073. }
  1074. static inline unsigned long br_multicast_lmqt(const struct net_bridge_mcast *brmctx)
  1075. {
  1076. return brmctx->multicast_last_member_interval *
  1077. brmctx->multicast_last_member_count;
  1078. }
  1079. static inline unsigned long br_multicast_gmi(const struct net_bridge_mcast *brmctx)
  1080. {
  1081. return brmctx->multicast_membership_interval;
  1082. }
  1083. static inline bool
  1084. br_multicast_ctx_is_vlan(const struct net_bridge_mcast *brmctx)
  1085. {
  1086. return !!brmctx->vlan;
  1087. }
  1088. static inline bool
  1089. br_multicast_port_ctx_is_vlan(const struct net_bridge_mcast_port *pmctx)
  1090. {
  1091. return !!pmctx->vlan;
  1092. }
  1093. static inline struct net_bridge_mcast *
  1094. br_multicast_port_ctx_get_global(const struct net_bridge_mcast_port *pmctx)
  1095. {
  1096. if (!br_multicast_port_ctx_is_vlan(pmctx))
  1097. return &pmctx->port->br->multicast_ctx;
  1098. else
  1099. return &pmctx->vlan->brvlan->br_mcast_ctx;
  1100. }
  1101. static inline bool
  1102. br_multicast_ctx_vlan_global_disabled(const struct net_bridge_mcast *brmctx)
  1103. {
  1104. return br_multicast_ctx_is_vlan(brmctx) &&
  1105. (!br_opt_get(brmctx->br, BROPT_MCAST_VLAN_SNOOPING_ENABLED) ||
  1106. !(brmctx->vlan->priv_flags & BR_VLFLAG_GLOBAL_MCAST_ENABLED));
  1107. }
  1108. static inline bool
  1109. br_multicast_ctx_vlan_disabled(const struct net_bridge_mcast *brmctx)
  1110. {
  1111. return br_multicast_ctx_is_vlan(brmctx) &&
  1112. !(brmctx->vlan->priv_flags & BR_VLFLAG_MCAST_ENABLED);
  1113. }
  1114. static inline bool
  1115. br_multicast_port_ctx_vlan_disabled(const struct net_bridge_mcast_port *pmctx)
  1116. {
  1117. return br_multicast_port_ctx_is_vlan(pmctx) &&
  1118. !(pmctx->vlan->priv_flags & BR_VLFLAG_MCAST_ENABLED);
  1119. }
  1120. static inline bool
  1121. br_multicast_port_ctx_state_disabled(const struct net_bridge_mcast_port *pmctx)
  1122. {
  1123. return pmctx->port->state == BR_STATE_DISABLED ||
  1124. (br_multicast_port_ctx_is_vlan(pmctx) &&
  1125. (br_multicast_port_ctx_vlan_disabled(pmctx) ||
  1126. pmctx->vlan->state == BR_STATE_DISABLED));
  1127. }
  1128. static inline bool
  1129. br_multicast_port_ctx_state_stopped(const struct net_bridge_mcast_port *pmctx)
  1130. {
  1131. return br_multicast_port_ctx_state_disabled(pmctx) ||
  1132. pmctx->port->state == BR_STATE_BLOCKING ||
  1133. (br_multicast_port_ctx_is_vlan(pmctx) &&
  1134. pmctx->vlan->state == BR_STATE_BLOCKING);
  1135. }
  1136. static inline bool
  1137. br_rports_have_mc_router(const struct net_bridge_mcast *brmctx)
  1138. {
  1139. #if IS_ENABLED(CONFIG_IPV6)
  1140. return !hlist_empty(&brmctx->ip4_mc_router_list) ||
  1141. !hlist_empty(&brmctx->ip6_mc_router_list);
  1142. #else
  1143. return !hlist_empty(&brmctx->ip4_mc_router_list);
  1144. #endif
  1145. }
  1146. static inline bool
  1147. br_multicast_ctx_options_equal(const struct net_bridge_mcast *brmctx1,
  1148. const struct net_bridge_mcast *brmctx2)
  1149. {
  1150. return brmctx1->multicast_igmp_version ==
  1151. brmctx2->multicast_igmp_version &&
  1152. brmctx1->multicast_last_member_count ==
  1153. brmctx2->multicast_last_member_count &&
  1154. brmctx1->multicast_startup_query_count ==
  1155. brmctx2->multicast_startup_query_count &&
  1156. brmctx1->multicast_last_member_interval ==
  1157. brmctx2->multicast_last_member_interval &&
  1158. brmctx1->multicast_membership_interval ==
  1159. brmctx2->multicast_membership_interval &&
  1160. brmctx1->multicast_querier_interval ==
  1161. brmctx2->multicast_querier_interval &&
  1162. brmctx1->multicast_query_interval ==
  1163. brmctx2->multicast_query_interval &&
  1164. brmctx1->multicast_query_response_interval ==
  1165. brmctx2->multicast_query_response_interval &&
  1166. brmctx1->multicast_startup_query_interval ==
  1167. brmctx2->multicast_startup_query_interval &&
  1168. brmctx1->multicast_querier == brmctx2->multicast_querier &&
  1169. brmctx1->multicast_router == brmctx2->multicast_router &&
  1170. !br_rports_have_mc_router(brmctx1) &&
  1171. !br_rports_have_mc_router(brmctx2) &&
  1172. #if IS_ENABLED(CONFIG_IPV6)
  1173. brmctx1->multicast_mld_version ==
  1174. brmctx2->multicast_mld_version &&
  1175. #endif
  1176. true;
  1177. }
  1178. static inline bool
  1179. br_multicast_port_ctx_options_equal(const struct net_bridge_mcast_port *pmctx1,
  1180. const struct net_bridge_mcast_port *pmctx2)
  1181. {
  1182. return br_multicast_ngroups_get(pmctx1) ==
  1183. br_multicast_ngroups_get(pmctx2) &&
  1184. br_multicast_ngroups_get_max(pmctx1) ==
  1185. br_multicast_ngroups_get_max(pmctx2);
  1186. }
  1187. static inline bool
  1188. br_multicast_ctx_matches_vlan_snooping(const struct net_bridge_mcast *brmctx)
  1189. {
  1190. bool vlan_snooping_enabled;
  1191. vlan_snooping_enabled = !!br_opt_get(brmctx->br,
  1192. BROPT_MCAST_VLAN_SNOOPING_ENABLED);
  1193. return !!(vlan_snooping_enabled == br_multicast_ctx_is_vlan(brmctx));
  1194. }
  1195. static inline void
  1196. br_multicast_set_pg_offload_flags(struct net_bridge_port_group *p,
  1197. bool offloaded)
  1198. {
  1199. p->flags &= ~(MDB_PG_FLAGS_OFFLOAD | MDB_PG_FLAGS_OFFLOAD_FAILED);
  1200. p->flags |= (offloaded ? MDB_PG_FLAGS_OFFLOAD :
  1201. MDB_PG_FLAGS_OFFLOAD_FAILED);
  1202. }
  1203. static inline bool
  1204. br_mdb_should_notify(const struct net_bridge *br, u8 changed_flags)
  1205. {
  1206. return br_opt_get(br, BROPT_MDB_OFFLOAD_FAIL_NOTIFICATION) &&
  1207. (changed_flags & MDB_PG_FLAGS_OFFLOAD_FAILED);
  1208. }
  1209. #else
  1210. static inline int br_multicast_rcv(struct net_bridge_mcast **brmctx,
  1211. struct net_bridge_mcast_port **pmctx,
  1212. struct net_bridge_vlan *vlan,
  1213. struct sk_buff *skb,
  1214. u16 vid)
  1215. {
  1216. return 0;
  1217. }
  1218. static inline struct net_bridge_mdb_entry *
  1219. br_mdb_entry_skb_get(struct net_bridge_mcast *brmctx, struct sk_buff *skb,
  1220. u16 vid)
  1221. {
  1222. return NULL;
  1223. }
  1224. static inline int br_multicast_add_port(struct net_bridge_port *port)
  1225. {
  1226. return 0;
  1227. }
  1228. static inline void br_multicast_del_port(struct net_bridge_port *port)
  1229. {
  1230. }
  1231. static inline void br_multicast_enable_port(struct net_bridge_port *port)
  1232. {
  1233. }
  1234. static inline void br_multicast_disable_port(struct net_bridge_port *port)
  1235. {
  1236. }
  1237. static inline void br_multicast_init(struct net_bridge *br)
  1238. {
  1239. }
  1240. static inline void br_multicast_join_snoopers(struct net_bridge *br)
  1241. {
  1242. }
  1243. static inline void br_multicast_leave_snoopers(struct net_bridge *br)
  1244. {
  1245. }
  1246. static inline void br_multicast_open(struct net_bridge *br)
  1247. {
  1248. }
  1249. static inline void br_multicast_stop(struct net_bridge *br)
  1250. {
  1251. }
  1252. static inline void br_multicast_dev_del(struct net_bridge *br)
  1253. {
  1254. }
  1255. static inline void br_multicast_flood(struct net_bridge_mdb_entry *mdst,
  1256. struct sk_buff *skb,
  1257. struct net_bridge_mcast *brmctx,
  1258. bool local_rcv, bool local_orig)
  1259. {
  1260. }
  1261. static inline bool br_multicast_is_router(struct net_bridge_mcast *brmctx,
  1262. struct sk_buff *skb)
  1263. {
  1264. return false;
  1265. }
  1266. static inline bool br_multicast_querier_exists(struct net_bridge_mcast *brmctx,
  1267. struct ethhdr *eth,
  1268. const struct net_bridge_mdb_entry *mdb)
  1269. {
  1270. return false;
  1271. }
  1272. static inline int br_mdb_add(struct net_device *dev, struct nlattr *tb[],
  1273. u16 nlmsg_flags, struct netlink_ext_ack *extack)
  1274. {
  1275. return -EOPNOTSUPP;
  1276. }
  1277. static inline int br_mdb_del(struct net_device *dev, struct nlattr *tb[],
  1278. struct netlink_ext_ack *extack)
  1279. {
  1280. return -EOPNOTSUPP;
  1281. }
  1282. static inline int br_mdb_del_bulk(struct net_device *dev, struct nlattr *tb[],
  1283. struct netlink_ext_ack *extack)
  1284. {
  1285. return -EOPNOTSUPP;
  1286. }
  1287. static inline int br_mdb_dump(struct net_device *dev, struct sk_buff *skb,
  1288. struct netlink_callback *cb)
  1289. {
  1290. return 0;
  1291. }
  1292. static inline int br_mdb_get(struct net_device *dev, struct nlattr *tb[],
  1293. u32 portid, u32 seq,
  1294. struct netlink_ext_ack *extack)
  1295. {
  1296. return -EOPNOTSUPP;
  1297. }
  1298. static inline int br_mdb_hash_init(struct net_bridge *br)
  1299. {
  1300. return 0;
  1301. }
  1302. static inline void br_mdb_hash_fini(struct net_bridge *br)
  1303. {
  1304. }
  1305. static inline void br_multicast_count(struct net_bridge *br,
  1306. const struct net_bridge_port *p,
  1307. const struct sk_buff *skb,
  1308. u8 type, u8 dir)
  1309. {
  1310. }
  1311. static inline int br_multicast_init_stats(struct net_bridge *br)
  1312. {
  1313. return 0;
  1314. }
  1315. static inline void br_multicast_uninit_stats(struct net_bridge *br)
  1316. {
  1317. }
  1318. static inline int br_multicast_igmp_type(const struct sk_buff *skb)
  1319. {
  1320. return 0;
  1321. }
  1322. static inline void br_multicast_ctx_init(struct net_bridge *br,
  1323. struct net_bridge_vlan *vlan,
  1324. struct net_bridge_mcast *brmctx)
  1325. {
  1326. }
  1327. static inline void br_multicast_ctx_deinit(struct net_bridge_mcast *brmctx)
  1328. {
  1329. }
  1330. static inline void br_multicast_port_ctx_init(struct net_bridge_port *port,
  1331. struct net_bridge_vlan *vlan,
  1332. struct net_bridge_mcast_port *pmctx)
  1333. {
  1334. }
  1335. static inline void br_multicast_port_ctx_deinit(struct net_bridge_mcast_port *pmctx)
  1336. {
  1337. }
  1338. static inline void br_multicast_update_vlan_mcast_ctx(struct net_bridge_vlan *v,
  1339. u8 state)
  1340. {
  1341. }
  1342. static inline void br_multicast_toggle_one_vlan(struct net_bridge_vlan *vlan,
  1343. bool on)
  1344. {
  1345. }
  1346. static inline int br_multicast_toggle_vlan_snooping(struct net_bridge *br,
  1347. bool on,
  1348. struct netlink_ext_ack *extack)
  1349. {
  1350. return -EOPNOTSUPP;
  1351. }
  1352. static inline bool br_multicast_toggle_global_vlan(struct net_bridge_vlan *vlan,
  1353. bool on)
  1354. {
  1355. return false;
  1356. }
  1357. static inline bool
  1358. br_multicast_ctx_options_equal(const struct net_bridge_mcast *brmctx1,
  1359. const struct net_bridge_mcast *brmctx2)
  1360. {
  1361. return true;
  1362. }
  1363. #endif
  1364. /* br_vlan.c */
  1365. #ifdef CONFIG_BRIDGE_VLAN_FILTERING
  1366. bool br_allowed_ingress(const struct net_bridge *br,
  1367. struct net_bridge_vlan_group *vg, struct sk_buff *skb,
  1368. u16 *vid, u8 *state,
  1369. struct net_bridge_vlan **vlan);
  1370. bool br_allowed_egress(struct net_bridge_vlan_group *vg,
  1371. const struct sk_buff *skb);
  1372. bool br_should_learn(struct net_bridge_port *p, struct sk_buff *skb, u16 *vid);
  1373. struct sk_buff *br_handle_vlan(struct net_bridge *br,
  1374. const struct net_bridge_port *port,
  1375. struct net_bridge_vlan_group *vg,
  1376. struct sk_buff *skb);
  1377. int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags,
  1378. bool *changed, struct netlink_ext_ack *extack);
  1379. int br_vlan_delete(struct net_bridge *br, u16 vid);
  1380. void br_vlan_flush(struct net_bridge *br);
  1381. struct net_bridge_vlan *br_vlan_find(struct net_bridge_vlan_group *vg, u16 vid);
  1382. void br_recalculate_fwd_mask(struct net_bridge *br);
  1383. int br_vlan_filter_toggle(struct net_bridge *br, unsigned long val,
  1384. struct netlink_ext_ack *extack);
  1385. int __br_vlan_set_proto(struct net_bridge *br, __be16 proto,
  1386. struct netlink_ext_ack *extack);
  1387. int br_vlan_set_proto(struct net_bridge *br, unsigned long val,
  1388. struct netlink_ext_ack *extack);
  1389. int br_vlan_set_stats(struct net_bridge *br, unsigned long val);
  1390. int br_vlan_set_stats_per_port(struct net_bridge *br, unsigned long val);
  1391. int br_vlan_init(struct net_bridge *br);
  1392. int br_vlan_set_default_pvid(struct net_bridge *br, unsigned long val,
  1393. struct netlink_ext_ack *extack);
  1394. int __br_vlan_set_default_pvid(struct net_bridge *br, u16 pvid,
  1395. struct netlink_ext_ack *extack);
  1396. int nbp_vlan_add(struct net_bridge_port *port, u16 vid, u16 flags,
  1397. bool *changed, struct netlink_ext_ack *extack);
  1398. int nbp_vlan_delete(struct net_bridge_port *port, u16 vid);
  1399. void nbp_vlan_flush(struct net_bridge_port *port);
  1400. int nbp_vlan_init(struct net_bridge_port *port, struct netlink_ext_ack *extack);
  1401. int nbp_get_num_vlan_infos(struct net_bridge_port *p, u32 filter_mask);
  1402. void br_vlan_get_stats(const struct net_bridge_vlan *v,
  1403. struct pcpu_sw_netstats *stats);
  1404. void br_vlan_port_event(struct net_bridge_port *p, unsigned long event);
  1405. int br_vlan_bridge_event(struct net_device *dev, unsigned long event,
  1406. void *ptr);
  1407. void br_vlan_vlan_upper_event(struct net_device *br_dev,
  1408. struct net_device *vlan_dev,
  1409. unsigned long event);
  1410. int br_vlan_rtnl_init(void);
  1411. void br_vlan_rtnl_uninit(void);
  1412. void br_vlan_notify(const struct net_bridge *br,
  1413. const struct net_bridge_port *p,
  1414. u16 vid, u16 vid_range,
  1415. int cmd);
  1416. bool br_vlan_can_enter_range(const struct net_bridge_vlan *v_curr,
  1417. const struct net_bridge_vlan *range_end);
  1418. void br_vlan_fill_forward_path_pvid(struct net_bridge *br,
  1419. struct net_device_path_ctx *ctx,
  1420. struct net_device_path *path);
  1421. int br_vlan_fill_forward_path_mode(struct net_bridge *br,
  1422. struct net_bridge_port *dst,
  1423. struct net_device_path *path);
  1424. static inline struct net_bridge_vlan_group *br_vlan_group(
  1425. const struct net_bridge *br)
  1426. {
  1427. return rtnl_dereference(br->vlgrp);
  1428. }
  1429. static inline struct net_bridge_vlan_group *nbp_vlan_group(
  1430. const struct net_bridge_port *p)
  1431. {
  1432. return rtnl_dereference(p->vlgrp);
  1433. }
  1434. static inline struct net_bridge_vlan_group *br_vlan_group_rcu(
  1435. const struct net_bridge *br)
  1436. {
  1437. return rcu_dereference(br->vlgrp);
  1438. }
  1439. static inline struct net_bridge_vlan_group *nbp_vlan_group_rcu(
  1440. const struct net_bridge_port *p)
  1441. {
  1442. return rcu_dereference(p->vlgrp);
  1443. }
  1444. /* Since bridge now depends on 8021Q module, but the time bridge sees the
  1445. * skb, the vlan tag will always be present if the frame was tagged.
  1446. */
  1447. static inline int br_vlan_get_tag(const struct sk_buff *skb, u16 *vid)
  1448. {
  1449. int err = 0;
  1450. if (skb_vlan_tag_present(skb)) {
  1451. *vid = skb_vlan_tag_get_id(skb);
  1452. } else {
  1453. *vid = 0;
  1454. err = -EINVAL;
  1455. }
  1456. return err;
  1457. }
  1458. static inline u16 br_get_pvid(const struct net_bridge_vlan_group *vg)
  1459. {
  1460. if (!vg)
  1461. return 0;
  1462. smp_rmb();
  1463. return vg->pvid;
  1464. }
  1465. static inline u16 br_vlan_flags(const struct net_bridge_vlan *v, u16 pvid)
  1466. {
  1467. return v->vid == pvid ? v->flags | BRIDGE_VLAN_INFO_PVID : v->flags;
  1468. }
  1469. #else
  1470. static inline bool br_allowed_ingress(const struct net_bridge *br,
  1471. struct net_bridge_vlan_group *vg,
  1472. struct sk_buff *skb,
  1473. u16 *vid, u8 *state,
  1474. struct net_bridge_vlan **vlan)
  1475. {
  1476. *vlan = NULL;
  1477. return true;
  1478. }
  1479. static inline bool br_allowed_egress(struct net_bridge_vlan_group *vg,
  1480. const struct sk_buff *skb)
  1481. {
  1482. return true;
  1483. }
  1484. static inline bool br_should_learn(struct net_bridge_port *p,
  1485. struct sk_buff *skb, u16 *vid)
  1486. {
  1487. return true;
  1488. }
  1489. static inline struct sk_buff *br_handle_vlan(struct net_bridge *br,
  1490. const struct net_bridge_port *port,
  1491. struct net_bridge_vlan_group *vg,
  1492. struct sk_buff *skb)
  1493. {
  1494. return skb;
  1495. }
  1496. static inline int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags,
  1497. bool *changed, struct netlink_ext_ack *extack)
  1498. {
  1499. *changed = false;
  1500. return -EOPNOTSUPP;
  1501. }
  1502. static inline int br_vlan_delete(struct net_bridge *br, u16 vid)
  1503. {
  1504. return -EOPNOTSUPP;
  1505. }
  1506. static inline void br_vlan_flush(struct net_bridge *br)
  1507. {
  1508. }
  1509. static inline void br_recalculate_fwd_mask(struct net_bridge *br)
  1510. {
  1511. }
  1512. static inline int br_vlan_init(struct net_bridge *br)
  1513. {
  1514. return 0;
  1515. }
  1516. static inline int nbp_vlan_add(struct net_bridge_port *port, u16 vid, u16 flags,
  1517. bool *changed, struct netlink_ext_ack *extack)
  1518. {
  1519. *changed = false;
  1520. return -EOPNOTSUPP;
  1521. }
  1522. static inline int nbp_vlan_delete(struct net_bridge_port *port, u16 vid)
  1523. {
  1524. return -EOPNOTSUPP;
  1525. }
  1526. static inline void nbp_vlan_flush(struct net_bridge_port *port)
  1527. {
  1528. }
  1529. static inline struct net_bridge_vlan *br_vlan_find(struct net_bridge_vlan_group *vg,
  1530. u16 vid)
  1531. {
  1532. return NULL;
  1533. }
  1534. static inline int nbp_vlan_init(struct net_bridge_port *port,
  1535. struct netlink_ext_ack *extack)
  1536. {
  1537. return 0;
  1538. }
  1539. static inline u16 br_vlan_get_tag(const struct sk_buff *skb, u16 *tag)
  1540. {
  1541. return 0;
  1542. }
  1543. static inline u16 br_get_pvid(const struct net_bridge_vlan_group *vg)
  1544. {
  1545. return 0;
  1546. }
  1547. static inline int br_vlan_filter_toggle(struct net_bridge *br,
  1548. unsigned long val,
  1549. struct netlink_ext_ack *extack)
  1550. {
  1551. return -EOPNOTSUPP;
  1552. }
  1553. static inline int nbp_get_num_vlan_infos(struct net_bridge_port *p,
  1554. u32 filter_mask)
  1555. {
  1556. return 0;
  1557. }
  1558. static inline void br_vlan_fill_forward_path_pvid(struct net_bridge *br,
  1559. struct net_device_path_ctx *ctx,
  1560. struct net_device_path *path)
  1561. {
  1562. }
  1563. static inline int br_vlan_fill_forward_path_mode(struct net_bridge *br,
  1564. struct net_bridge_port *dst,
  1565. struct net_device_path *path)
  1566. {
  1567. return 0;
  1568. }
  1569. static inline struct net_bridge_vlan_group *br_vlan_group(
  1570. const struct net_bridge *br)
  1571. {
  1572. return NULL;
  1573. }
  1574. static inline struct net_bridge_vlan_group *nbp_vlan_group(
  1575. const struct net_bridge_port *p)
  1576. {
  1577. return NULL;
  1578. }
  1579. static inline struct net_bridge_vlan_group *br_vlan_group_rcu(
  1580. const struct net_bridge *br)
  1581. {
  1582. return NULL;
  1583. }
  1584. static inline struct net_bridge_vlan_group *nbp_vlan_group_rcu(
  1585. const struct net_bridge_port *p)
  1586. {
  1587. return NULL;
  1588. }
  1589. static inline void br_vlan_get_stats(const struct net_bridge_vlan *v,
  1590. struct pcpu_sw_netstats *stats)
  1591. {
  1592. }
  1593. static inline void br_vlan_port_event(struct net_bridge_port *p,
  1594. unsigned long event)
  1595. {
  1596. }
  1597. static inline int br_vlan_bridge_event(struct net_device *dev,
  1598. unsigned long event, void *ptr)
  1599. {
  1600. return 0;
  1601. }
  1602. static inline void br_vlan_vlan_upper_event(struct net_device *br_dev,
  1603. struct net_device *vlan_dev,
  1604. unsigned long event)
  1605. {
  1606. }
  1607. static inline int br_vlan_rtnl_init(void)
  1608. {
  1609. return 0;
  1610. }
  1611. static inline void br_vlan_rtnl_uninit(void)
  1612. {
  1613. }
  1614. static inline void br_vlan_notify(const struct net_bridge *br,
  1615. const struct net_bridge_port *p,
  1616. u16 vid, u16 vid_range,
  1617. int cmd)
  1618. {
  1619. }
  1620. static inline bool br_vlan_can_enter_range(const struct net_bridge_vlan *v_curr,
  1621. const struct net_bridge_vlan *range_end)
  1622. {
  1623. return true;
  1624. }
  1625. static inline u16 br_vlan_flags(const struct net_bridge_vlan *v, u16 pvid)
  1626. {
  1627. return 0;
  1628. }
  1629. #endif
  1630. /* br_vlan_options.c */
  1631. #ifdef CONFIG_BRIDGE_VLAN_FILTERING
  1632. bool br_vlan_opts_eq_range(const struct net_bridge_vlan *v_curr,
  1633. const struct net_bridge_vlan *range_end);
  1634. bool br_vlan_opts_fill(struct sk_buff *skb, const struct net_bridge_vlan *v,
  1635. const struct net_bridge_port *p);
  1636. size_t br_vlan_opts_nl_size(void);
  1637. int br_vlan_process_options(const struct net_bridge *br,
  1638. const struct net_bridge_port *p,
  1639. struct net_bridge_vlan *range_start,
  1640. struct net_bridge_vlan *range_end,
  1641. struct nlattr **tb,
  1642. struct netlink_ext_ack *extack);
  1643. int br_vlan_rtm_process_global_options(struct net_device *dev,
  1644. const struct nlattr *attr,
  1645. int cmd,
  1646. struct netlink_ext_ack *extack);
  1647. bool br_vlan_global_opts_can_enter_range(const struct net_bridge_vlan *v_curr,
  1648. const struct net_bridge_vlan *r_end);
  1649. bool br_vlan_global_opts_fill(struct sk_buff *skb, u16 vid, u16 vid_range,
  1650. const struct net_bridge_vlan *v_opts);
  1651. /* vlan state manipulation helpers using *_ONCE to annotate lock-free access,
  1652. * while br_vlan_set_state() may access data protected by multicast_lock.
  1653. */
  1654. static inline u8 br_vlan_get_state(const struct net_bridge_vlan *v)
  1655. {
  1656. return READ_ONCE(v->state);
  1657. }
  1658. static inline void br_vlan_set_state(struct net_bridge_vlan *v, u8 state)
  1659. {
  1660. WRITE_ONCE(v->state, state);
  1661. br_multicast_update_vlan_mcast_ctx(v, state);
  1662. }
  1663. static inline u8 br_vlan_get_pvid_state(const struct net_bridge_vlan_group *vg)
  1664. {
  1665. return READ_ONCE(vg->pvid_state);
  1666. }
  1667. static inline void br_vlan_set_pvid_state(struct net_bridge_vlan_group *vg,
  1668. u8 state)
  1669. {
  1670. WRITE_ONCE(vg->pvid_state, state);
  1671. }
  1672. /* learn_allow is true at ingress and false at egress */
  1673. static inline bool br_vlan_state_allowed(u8 state, bool learn_allow)
  1674. {
  1675. switch (state) {
  1676. case BR_STATE_LEARNING:
  1677. return learn_allow;
  1678. case BR_STATE_FORWARDING:
  1679. return true;
  1680. default:
  1681. return false;
  1682. }
  1683. }
  1684. #endif
  1685. /* br_mst.c */
  1686. #ifdef CONFIG_BRIDGE_VLAN_FILTERING
  1687. DECLARE_STATIC_KEY_FALSE(br_mst_used);
  1688. static inline bool br_mst_is_enabled(const struct net_bridge_port *p)
  1689. {
  1690. /* check the port's vlan group to avoid racing with port deletion */
  1691. return static_branch_unlikely(&br_mst_used) &&
  1692. br_opt_get(p->br, BROPT_MST_ENABLED) &&
  1693. rcu_access_pointer(p->vlgrp);
  1694. }
  1695. int br_mst_set_state(struct net_bridge_port *p, u16 msti, u8 state,
  1696. struct netlink_ext_ack *extack);
  1697. int br_mst_vlan_set_msti(struct net_bridge_vlan *v, u16 msti);
  1698. void br_mst_vlan_init_state(struct net_bridge_vlan *v);
  1699. int br_mst_set_enabled(struct net_bridge *br, bool on,
  1700. struct netlink_ext_ack *extack);
  1701. size_t br_mst_info_size(const struct net_bridge_vlan_group *vg);
  1702. int br_mst_fill_info(struct sk_buff *skb,
  1703. const struct net_bridge_vlan_group *vg);
  1704. int br_mst_process(struct net_bridge_port *p, const struct nlattr *mst_attr,
  1705. struct netlink_ext_ack *extack);
  1706. void br_mst_uninit(struct net_bridge *br);
  1707. #else
  1708. static inline bool br_mst_is_enabled(const struct net_bridge_port *p)
  1709. {
  1710. return false;
  1711. }
  1712. static inline int br_mst_set_state(struct net_bridge_port *p, u16 msti,
  1713. u8 state, struct netlink_ext_ack *extack)
  1714. {
  1715. return -EOPNOTSUPP;
  1716. }
  1717. static inline int br_mst_set_enabled(struct net_bridge *br, bool on,
  1718. struct netlink_ext_ack *extack)
  1719. {
  1720. return -EOPNOTSUPP;
  1721. }
  1722. static inline size_t br_mst_info_size(const struct net_bridge_vlan_group *vg)
  1723. {
  1724. return 0;
  1725. }
  1726. static inline int br_mst_fill_info(struct sk_buff *skb,
  1727. const struct net_bridge_vlan_group *vg)
  1728. {
  1729. return -EOPNOTSUPP;
  1730. }
  1731. static inline int br_mst_process(struct net_bridge_port *p,
  1732. const struct nlattr *mst_attr,
  1733. struct netlink_ext_ack *extack)
  1734. {
  1735. return -EOPNOTSUPP;
  1736. }
  1737. static inline void br_mst_uninit(struct net_bridge *br)
  1738. {
  1739. }
  1740. #endif
  1741. struct nf_br_ops {
  1742. int (*br_dev_xmit_hook)(struct sk_buff *skb);
  1743. };
  1744. extern const struct nf_br_ops __rcu *nf_br_ops;
  1745. /* br_netfilter.c */
  1746. #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
  1747. int br_nf_core_init(void);
  1748. void br_nf_core_fini(void);
  1749. void br_netfilter_rtable_init(struct net_bridge *);
  1750. #else
  1751. static inline int br_nf_core_init(void) { return 0; }
  1752. static inline void br_nf_core_fini(void) {}
  1753. #define br_netfilter_rtable_init(x)
  1754. #endif
  1755. /* br_stp.c */
  1756. void br_set_state(struct net_bridge_port *p, unsigned int state);
  1757. struct net_bridge_port *br_get_port(struct net_bridge *br, u16 port_no);
  1758. void br_init_port(struct net_bridge_port *p);
  1759. void br_become_designated_port(struct net_bridge_port *p);
  1760. void __br_set_forward_delay(struct net_bridge *br, unsigned long t);
  1761. int br_set_forward_delay(struct net_bridge *br, unsigned long x);
  1762. int br_set_hello_time(struct net_bridge *br, unsigned long x);
  1763. int br_set_max_age(struct net_bridge *br, unsigned long x);
  1764. int __set_ageing_time(struct net_device *dev, unsigned long t);
  1765. int br_set_ageing_time(struct net_bridge *br, clock_t ageing_time);
  1766. /* br_stp_if.c */
  1767. void br_stp_enable_bridge(struct net_bridge *br);
  1768. void br_stp_disable_bridge(struct net_bridge *br);
  1769. int br_stp_set_enabled(struct net_bridge *br, unsigned long val,
  1770. struct netlink_ext_ack *extack);
  1771. void br_stp_enable_port(struct net_bridge_port *p);
  1772. void br_stp_disable_port(struct net_bridge_port *p);
  1773. bool br_stp_recalculate_bridge_id(struct net_bridge *br);
  1774. void br_stp_change_bridge_id(struct net_bridge *br, const unsigned char *a);
  1775. void br_stp_set_bridge_priority(struct net_bridge *br, u16 newprio);
  1776. int br_stp_set_port_priority(struct net_bridge_port *p, unsigned long newprio);
  1777. int br_stp_set_path_cost(struct net_bridge_port *p, unsigned long path_cost);
  1778. ssize_t br_show_bridge_id(char *buf, const struct bridge_id *id);
  1779. /* br_stp_bpdu.c */
  1780. struct stp_proto;
  1781. void br_stp_rcv(const struct stp_proto *proto, struct sk_buff *skb,
  1782. struct net_device *dev);
  1783. /* br_stp_timer.c */
  1784. void br_stp_timer_init(struct net_bridge *br);
  1785. void br_stp_port_timer_init(struct net_bridge_port *p);
  1786. unsigned long br_timer_value(const struct timer_list *timer);
  1787. /* br.c */
  1788. #if IS_ENABLED(CONFIG_ATM_LANE)
  1789. extern int (*br_fdb_test_addr_hook)(struct net_device *dev, unsigned char *addr);
  1790. #endif
  1791. /* br_mrp.c */
  1792. #if IS_ENABLED(CONFIG_BRIDGE_MRP)
  1793. int br_mrp_parse(struct net_bridge *br, struct net_bridge_port *p,
  1794. struct nlattr *attr, int cmd, struct netlink_ext_ack *extack);
  1795. bool br_mrp_enabled(struct net_bridge *br);
  1796. void br_mrp_port_del(struct net_bridge *br, struct net_bridge_port *p);
  1797. int br_mrp_fill_info(struct sk_buff *skb, struct net_bridge *br);
  1798. #else
  1799. static inline int br_mrp_parse(struct net_bridge *br, struct net_bridge_port *p,
  1800. struct nlattr *attr, int cmd,
  1801. struct netlink_ext_ack *extack)
  1802. {
  1803. return -EOPNOTSUPP;
  1804. }
  1805. static inline bool br_mrp_enabled(struct net_bridge *br)
  1806. {
  1807. return false;
  1808. }
  1809. static inline void br_mrp_port_del(struct net_bridge *br,
  1810. struct net_bridge_port *p)
  1811. {
  1812. }
  1813. static inline int br_mrp_fill_info(struct sk_buff *skb, struct net_bridge *br)
  1814. {
  1815. return 0;
  1816. }
  1817. #endif
  1818. /* br_cfm.c */
  1819. #if IS_ENABLED(CONFIG_BRIDGE_CFM)
  1820. int br_cfm_parse(struct net_bridge *br, struct net_bridge_port *p,
  1821. struct nlattr *attr, int cmd, struct netlink_ext_ack *extack);
  1822. bool br_cfm_created(struct net_bridge *br);
  1823. void br_cfm_port_del(struct net_bridge *br, struct net_bridge_port *p);
  1824. int br_cfm_config_fill_info(struct sk_buff *skb, struct net_bridge *br);
  1825. int br_cfm_status_fill_info(struct sk_buff *skb,
  1826. struct net_bridge *br,
  1827. bool getlink);
  1828. int br_cfm_mep_count(struct net_bridge *br, u32 *count);
  1829. int br_cfm_peer_mep_count(struct net_bridge *br, u32 *count);
  1830. #else
  1831. static inline int br_cfm_parse(struct net_bridge *br, struct net_bridge_port *p,
  1832. struct nlattr *attr, int cmd,
  1833. struct netlink_ext_ack *extack)
  1834. {
  1835. return -EOPNOTSUPP;
  1836. }
  1837. static inline bool br_cfm_created(struct net_bridge *br)
  1838. {
  1839. return false;
  1840. }
  1841. static inline void br_cfm_port_del(struct net_bridge *br,
  1842. struct net_bridge_port *p)
  1843. {
  1844. }
  1845. static inline int br_cfm_config_fill_info(struct sk_buff *skb, struct net_bridge *br)
  1846. {
  1847. return -EOPNOTSUPP;
  1848. }
  1849. static inline int br_cfm_status_fill_info(struct sk_buff *skb,
  1850. struct net_bridge *br,
  1851. bool getlink)
  1852. {
  1853. return -EOPNOTSUPP;
  1854. }
  1855. static inline int br_cfm_mep_count(struct net_bridge *br, u32 *count)
  1856. {
  1857. *count = 0;
  1858. return -EOPNOTSUPP;
  1859. }
  1860. static inline int br_cfm_peer_mep_count(struct net_bridge *br, u32 *count)
  1861. {
  1862. *count = 0;
  1863. return -EOPNOTSUPP;
  1864. }
  1865. #endif
  1866. /* br_netlink.c */
  1867. extern struct rtnl_link_ops br_link_ops;
  1868. int br_netlink_init(void);
  1869. void br_netlink_fini(void);
  1870. void br_ifinfo_notify(int event, const struct net_bridge *br,
  1871. const struct net_bridge_port *port);
  1872. void br_info_notify(int event, const struct net_bridge *br,
  1873. const struct net_bridge_port *port, u32 filter);
  1874. int br_setlink(struct net_device *dev, struct nlmsghdr *nlmsg, u16 flags,
  1875. struct netlink_ext_ack *extack);
  1876. int br_dellink(struct net_device *dev, struct nlmsghdr *nlmsg, u16 flags);
  1877. int br_getlink(struct sk_buff *skb, u32 pid, u32 seq, struct net_device *dev,
  1878. u32 filter_mask, int nlflags);
  1879. int br_process_vlan_info(struct net_bridge *br,
  1880. struct net_bridge_port *p, int cmd,
  1881. struct bridge_vlan_info *vinfo_curr,
  1882. struct bridge_vlan_info **vinfo_last,
  1883. bool *changed,
  1884. struct netlink_ext_ack *extack);
  1885. #ifdef CONFIG_SYSFS
  1886. /* br_sysfs_if.c */
  1887. extern const struct sysfs_ops brport_sysfs_ops;
  1888. int br_sysfs_addif(struct net_bridge_port *p);
  1889. int br_sysfs_renameif(struct net_bridge_port *p);
  1890. /* br_sysfs_br.c */
  1891. int br_sysfs_addbr(struct net_device *dev);
  1892. void br_sysfs_delbr(struct net_device *dev);
  1893. #else
  1894. static inline int br_sysfs_addif(struct net_bridge_port *p) { return 0; }
  1895. static inline int br_sysfs_renameif(struct net_bridge_port *p) { return 0; }
  1896. static inline int br_sysfs_addbr(struct net_device *dev) { return 0; }
  1897. static inline void br_sysfs_delbr(struct net_device *dev) { return; }
  1898. #endif /* CONFIG_SYSFS */
  1899. /* br_switchdev.c */
  1900. #ifdef CONFIG_NET_SWITCHDEV
  1901. int br_switchdev_port_offload(struct net_bridge_port *p,
  1902. struct net_device *dev, const void *ctx,
  1903. struct notifier_block *atomic_nb,
  1904. struct notifier_block *blocking_nb,
  1905. bool tx_fwd_offload,
  1906. struct netlink_ext_ack *extack);
  1907. void br_switchdev_port_unoffload(struct net_bridge_port *p, const void *ctx,
  1908. struct notifier_block *atomic_nb,
  1909. struct notifier_block *blocking_nb);
  1910. int br_switchdev_port_replay(struct net_bridge_port *p,
  1911. struct net_device *dev, const void *ctx,
  1912. struct notifier_block *atomic_nb,
  1913. struct notifier_block *blocking_nb,
  1914. struct netlink_ext_ack *extack);
  1915. bool br_switchdev_frame_uses_tx_fwd_offload(struct sk_buff *skb);
  1916. void br_switchdev_frame_set_offload_fwd_mark(struct sk_buff *skb);
  1917. void nbp_switchdev_frame_mark_tx_fwd_offload(const struct net_bridge_port *p,
  1918. struct sk_buff *skb);
  1919. void nbp_switchdev_frame_mark_tx_fwd_to_hwdom(const struct net_bridge_port *p,
  1920. struct sk_buff *skb);
  1921. void nbp_switchdev_frame_mark(const struct net_bridge_port *p,
  1922. struct sk_buff *skb);
  1923. bool nbp_switchdev_allowed_egress(const struct net_bridge_port *p,
  1924. const struct sk_buff *skb);
  1925. int br_switchdev_set_port_flag(struct net_bridge_port *p,
  1926. unsigned long flags,
  1927. unsigned long mask,
  1928. struct netlink_ext_ack *extack);
  1929. void br_switchdev_fdb_notify(struct net_bridge *br,
  1930. const struct net_bridge_fdb_entry *fdb, int type);
  1931. void br_switchdev_mdb_notify(struct net_device *dev,
  1932. struct net_bridge_mdb_entry *mp,
  1933. struct net_bridge_port_group *pg,
  1934. int type);
  1935. int br_switchdev_port_vlan_add(struct net_device *dev, u16 vid, u16 flags,
  1936. bool changed, struct netlink_ext_ack *extack);
  1937. int br_switchdev_port_vlan_del(struct net_device *dev, u16 vid);
  1938. void br_switchdev_init(struct net_bridge *br);
  1939. static inline void br_switchdev_frame_unmark(struct sk_buff *skb)
  1940. {
  1941. skb->offload_fwd_mark = 0;
  1942. }
  1943. #else
  1944. static inline int
  1945. br_switchdev_port_offload(struct net_bridge_port *p,
  1946. struct net_device *dev, const void *ctx,
  1947. struct notifier_block *atomic_nb,
  1948. struct notifier_block *blocking_nb,
  1949. bool tx_fwd_offload,
  1950. struct netlink_ext_ack *extack)
  1951. {
  1952. return -EOPNOTSUPP;
  1953. }
  1954. static inline void
  1955. br_switchdev_port_unoffload(struct net_bridge_port *p, const void *ctx,
  1956. struct notifier_block *atomic_nb,
  1957. struct notifier_block *blocking_nb)
  1958. {
  1959. }
  1960. static inline int
  1961. br_switchdev_port_replay(struct net_bridge_port *p,
  1962. struct net_device *dev, const void *ctx,
  1963. struct notifier_block *atomic_nb,
  1964. struct notifier_block *blocking_nb,
  1965. struct netlink_ext_ack *extack)
  1966. {
  1967. return -EOPNOTSUPP;
  1968. }
  1969. static inline bool br_switchdev_frame_uses_tx_fwd_offload(struct sk_buff *skb)
  1970. {
  1971. return false;
  1972. }
  1973. static inline void br_switchdev_frame_set_offload_fwd_mark(struct sk_buff *skb)
  1974. {
  1975. }
  1976. static inline void
  1977. nbp_switchdev_frame_mark_tx_fwd_offload(const struct net_bridge_port *p,
  1978. struct sk_buff *skb)
  1979. {
  1980. }
  1981. static inline void
  1982. nbp_switchdev_frame_mark_tx_fwd_to_hwdom(const struct net_bridge_port *p,
  1983. struct sk_buff *skb)
  1984. {
  1985. }
  1986. static inline void nbp_switchdev_frame_mark(const struct net_bridge_port *p,
  1987. struct sk_buff *skb)
  1988. {
  1989. }
  1990. static inline bool nbp_switchdev_allowed_egress(const struct net_bridge_port *p,
  1991. const struct sk_buff *skb)
  1992. {
  1993. return true;
  1994. }
  1995. static inline int br_switchdev_set_port_flag(struct net_bridge_port *p,
  1996. unsigned long flags,
  1997. unsigned long mask,
  1998. struct netlink_ext_ack *extack)
  1999. {
  2000. return 0;
  2001. }
  2002. static inline int br_switchdev_port_vlan_add(struct net_device *dev, u16 vid,
  2003. u16 flags, bool changed,
  2004. struct netlink_ext_ack *extack)
  2005. {
  2006. return -EOPNOTSUPP;
  2007. }
  2008. static inline int br_switchdev_port_vlan_del(struct net_device *dev, u16 vid)
  2009. {
  2010. return -EOPNOTSUPP;
  2011. }
  2012. static inline void
  2013. br_switchdev_fdb_notify(struct net_bridge *br,
  2014. const struct net_bridge_fdb_entry *fdb, int type)
  2015. {
  2016. }
  2017. static inline void br_switchdev_mdb_notify(struct net_device *dev,
  2018. struct net_bridge_mdb_entry *mp,
  2019. struct net_bridge_port_group *pg,
  2020. int type)
  2021. {
  2022. }
  2023. static inline void br_switchdev_frame_unmark(struct sk_buff *skb)
  2024. {
  2025. }
  2026. static inline void br_switchdev_init(struct net_bridge *br)
  2027. {
  2028. }
  2029. #endif /* CONFIG_NET_SWITCHDEV */
  2030. /* br_arp_nd_proxy.c */
  2031. void br_recalculate_neigh_suppress_enabled(struct net_bridge *br);
  2032. void br_do_proxy_suppress_arp(struct sk_buff *skb, struct net_bridge *br,
  2033. u16 vid, struct net_bridge_port *p);
  2034. void br_do_suppress_nd(struct sk_buff *skb, struct net_bridge *br,
  2035. u16 vid, struct net_bridge_port *p, struct nd_msg *msg);
  2036. struct nd_msg *br_is_nd_neigh_msg(const struct sk_buff *skb, struct nd_msg *m);
  2037. bool br_is_neigh_suppress_enabled(const struct net_bridge_port *p, u16 vid);
  2038. #endif