br_private.h 62 KB

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