br_private.h 65 KB

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