br_multicast.c 139 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. * Bridge multicast support.
  4. *
  5. * Copyright (c) 2010 Herbert Xu <herbert@gondor.apana.org.au>
  6. */
  7. #include <linux/err.h>
  8. #include <linux/export.h>
  9. #include <linux/if_ether.h>
  10. #include <linux/igmp.h>
  11. #include <linux/in.h>
  12. #include <linux/jhash.h>
  13. #include <linux/kernel.h>
  14. #include <linux/log2.h>
  15. #include <linux/netdevice.h>
  16. #include <linux/netfilter_bridge.h>
  17. #include <linux/random.h>
  18. #include <linux/rculist.h>
  19. #include <linux/skbuff.h>
  20. #include <linux/slab.h>
  21. #include <linux/timer.h>
  22. #include <linux/inetdevice.h>
  23. #include <linux/mroute.h>
  24. #include <net/ip.h>
  25. #include <net/switchdev.h>
  26. #if IS_ENABLED(CONFIG_IPV6)
  27. #include <linux/icmpv6.h>
  28. #include <net/ipv6.h>
  29. #include <net/mld.h>
  30. #include <net/ip6_checksum.h>
  31. #include <net/addrconf.h>
  32. #endif
  33. #include <trace/events/bridge.h>
  34. #include "br_private.h"
  35. #include "br_private_mcast_eht.h"
  36. static const struct rhashtable_params br_mdb_rht_params = {
  37. .head_offset = offsetof(struct net_bridge_mdb_entry, rhnode),
  38. .key_offset = offsetof(struct net_bridge_mdb_entry, addr),
  39. .key_len = sizeof(struct br_ip),
  40. .automatic_shrinking = true,
  41. };
  42. static const struct rhashtable_params br_sg_port_rht_params = {
  43. .head_offset = offsetof(struct net_bridge_port_group, rhnode),
  44. .key_offset = offsetof(struct net_bridge_port_group, key),
  45. .key_len = sizeof(struct net_bridge_port_group_sg_key),
  46. .automatic_shrinking = true,
  47. };
  48. static void br_multicast_start_querier(struct net_bridge_mcast *brmctx,
  49. struct bridge_mcast_own_query *query);
  50. static void br_ip4_multicast_add_router(struct net_bridge_mcast *brmctx,
  51. struct net_bridge_mcast_port *pmctx);
  52. static void br_ip4_multicast_leave_group(struct net_bridge_mcast *brmctx,
  53. struct net_bridge_mcast_port *pmctx,
  54. __be32 group,
  55. __u16 vid,
  56. const unsigned char *src);
  57. static void br_multicast_port_group_rexmit(struct timer_list *t);
  58. static void
  59. br_multicast_rport_del_notify(struct net_bridge_mcast_port *pmctx, bool deleted);
  60. static void br_ip6_multicast_add_router(struct net_bridge_mcast *brmctx,
  61. struct net_bridge_mcast_port *pmctx);
  62. #if IS_ENABLED(CONFIG_IPV6)
  63. static void br_ip6_multicast_leave_group(struct net_bridge_mcast *brmctx,
  64. struct net_bridge_mcast_port *pmctx,
  65. const struct in6_addr *group,
  66. __u16 vid, const unsigned char *src);
  67. #endif
  68. static struct net_bridge_port_group *
  69. __br_multicast_add_group(struct net_bridge_mcast *brmctx,
  70. struct net_bridge_mcast_port *pmctx,
  71. struct br_ip *group,
  72. const unsigned char *src,
  73. u8 filter_mode,
  74. bool igmpv2_mldv1,
  75. bool blocked);
  76. static void br_multicast_find_del_pg(struct net_bridge *br,
  77. struct net_bridge_port_group *pg);
  78. static void __br_multicast_stop(struct net_bridge_mcast *brmctx);
  79. static int br_mc_disabled_update(struct net_device *dev, bool value,
  80. struct netlink_ext_ack *extack);
  81. static struct net_bridge_port_group *
  82. br_sg_port_find(struct net_bridge *br,
  83. struct net_bridge_port_group_sg_key *sg_p)
  84. {
  85. lockdep_assert_held_once(&br->multicast_lock);
  86. return rhashtable_lookup_fast(&br->sg_port_tbl, sg_p,
  87. br_sg_port_rht_params);
  88. }
  89. static struct net_bridge_mdb_entry *br_mdb_ip_get_rcu(struct net_bridge *br,
  90. struct br_ip *dst)
  91. {
  92. return rhashtable_lookup(&br->mdb_hash_tbl, dst, br_mdb_rht_params);
  93. }
  94. struct net_bridge_mdb_entry *br_mdb_ip_get(struct net_bridge *br,
  95. struct br_ip *dst)
  96. {
  97. struct net_bridge_mdb_entry *ent;
  98. lockdep_assert_held_once(&br->multicast_lock);
  99. rcu_read_lock();
  100. ent = rhashtable_lookup(&br->mdb_hash_tbl, dst, br_mdb_rht_params);
  101. rcu_read_unlock();
  102. return ent;
  103. }
  104. static struct net_bridge_mdb_entry *br_mdb_ip4_get(struct net_bridge *br,
  105. __be32 dst, __u16 vid)
  106. {
  107. struct br_ip br_dst;
  108. memset(&br_dst, 0, sizeof(br_dst));
  109. br_dst.dst.ip4 = dst;
  110. br_dst.proto = htons(ETH_P_IP);
  111. br_dst.vid = vid;
  112. return br_mdb_ip_get(br, &br_dst);
  113. }
  114. #if IS_ENABLED(CONFIG_IPV6)
  115. static struct net_bridge_mdb_entry *br_mdb_ip6_get(struct net_bridge *br,
  116. const struct in6_addr *dst,
  117. __u16 vid)
  118. {
  119. struct br_ip br_dst;
  120. memset(&br_dst, 0, sizeof(br_dst));
  121. br_dst.dst.ip6 = *dst;
  122. br_dst.proto = htons(ETH_P_IPV6);
  123. br_dst.vid = vid;
  124. return br_mdb_ip_get(br, &br_dst);
  125. }
  126. #endif
  127. struct net_bridge_mdb_entry *
  128. br_mdb_entry_skb_get(struct net_bridge_mcast *brmctx, struct sk_buff *skb,
  129. u16 vid)
  130. {
  131. struct net_bridge *br = brmctx->br;
  132. struct br_ip ip;
  133. if (!br_opt_get(br, BROPT_MULTICAST_ENABLED) ||
  134. br_multicast_ctx_vlan_global_disabled(brmctx))
  135. return NULL;
  136. if (BR_INPUT_SKB_CB(skb)->igmp)
  137. return NULL;
  138. memset(&ip, 0, sizeof(ip));
  139. ip.proto = skb->protocol;
  140. ip.vid = vid;
  141. switch (skb->protocol) {
  142. case htons(ETH_P_IP):
  143. ip.dst.ip4 = ip_hdr(skb)->daddr;
  144. if (brmctx->multicast_igmp_version == 3) {
  145. struct net_bridge_mdb_entry *mdb;
  146. ip.src.ip4 = ip_hdr(skb)->saddr;
  147. mdb = br_mdb_ip_get_rcu(br, &ip);
  148. if (mdb)
  149. return mdb;
  150. ip.src.ip4 = 0;
  151. }
  152. break;
  153. #if IS_ENABLED(CONFIG_IPV6)
  154. case htons(ETH_P_IPV6):
  155. ip.dst.ip6 = ipv6_hdr(skb)->daddr;
  156. if (brmctx->multicast_mld_version == 2) {
  157. struct net_bridge_mdb_entry *mdb;
  158. ip.src.ip6 = ipv6_hdr(skb)->saddr;
  159. mdb = br_mdb_ip_get_rcu(br, &ip);
  160. if (mdb)
  161. return mdb;
  162. memset(&ip.src.ip6, 0, sizeof(ip.src.ip6));
  163. }
  164. break;
  165. #endif
  166. default:
  167. ip.proto = 0;
  168. ether_addr_copy(ip.dst.mac_addr, eth_hdr(skb)->h_dest);
  169. }
  170. return br_mdb_ip_get_rcu(br, &ip);
  171. }
  172. /* IMPORTANT: this function must be used only when the contexts cannot be
  173. * passed down (e.g. timer) and must be used for read-only purposes because
  174. * the vlan snooping option can change, so it can return any context
  175. * (non-vlan or vlan). Its initial intended purpose is to read timer values
  176. * from the *current* context based on the option. At worst that could lead
  177. * to inconsistent timers when the contexts are changed, i.e. src timer
  178. * which needs to re-arm with a specific delay taken from the old context
  179. */
  180. static struct net_bridge_mcast_port *
  181. br_multicast_pg_to_port_ctx(const struct net_bridge_port_group *pg)
  182. {
  183. struct net_bridge_mcast_port *pmctx = &pg->key.port->multicast_ctx;
  184. struct net_bridge_vlan *vlan;
  185. lockdep_assert_held_once(&pg->key.port->br->multicast_lock);
  186. /* if vlan snooping is disabled use the port's multicast context */
  187. if (!pg->key.addr.vid ||
  188. !br_opt_get(pg->key.port->br, BROPT_MCAST_VLAN_SNOOPING_ENABLED))
  189. goto out;
  190. /* locking is tricky here, due to different rules for multicast and
  191. * vlans we need to take rcu to find the vlan and make sure it has
  192. * the BR_VLFLAG_MCAST_ENABLED flag set, it can only change under
  193. * multicast_lock which must be already held here, so the vlan's pmctx
  194. * can safely be used on return
  195. */
  196. rcu_read_lock();
  197. vlan = br_vlan_find(nbp_vlan_group_rcu(pg->key.port), pg->key.addr.vid);
  198. if (vlan && !br_multicast_port_ctx_vlan_disabled(&vlan->port_mcast_ctx))
  199. pmctx = &vlan->port_mcast_ctx;
  200. else
  201. pmctx = NULL;
  202. rcu_read_unlock();
  203. out:
  204. return pmctx;
  205. }
  206. static struct net_bridge_mcast_port *
  207. br_multicast_port_vid_to_port_ctx(struct net_bridge_port *port, u16 vid)
  208. {
  209. struct net_bridge_mcast_port *pmctx = NULL;
  210. struct net_bridge_vlan *vlan;
  211. lockdep_assert_held_once(&port->br->multicast_lock);
  212. /* Take RCU to access the vlan. */
  213. rcu_read_lock();
  214. vlan = br_vlan_find(nbp_vlan_group_rcu(port), vid);
  215. if (vlan)
  216. pmctx = &vlan->port_mcast_ctx;
  217. rcu_read_unlock();
  218. return pmctx;
  219. }
  220. /* when snooping we need to check if the contexts should be used
  221. * in the following order:
  222. * - if pmctx is non-NULL (port), check if it should be used
  223. * - if pmctx is NULL (bridge), check if brmctx should be used
  224. */
  225. static bool
  226. br_multicast_ctx_should_use(const struct net_bridge_mcast *brmctx,
  227. const struct net_bridge_mcast_port *pmctx)
  228. {
  229. if (!netif_running(brmctx->br->dev))
  230. return false;
  231. if (pmctx)
  232. return !br_multicast_port_ctx_state_disabled(pmctx);
  233. else
  234. return !br_multicast_ctx_vlan_disabled(brmctx);
  235. }
  236. static bool br_port_group_equal(struct net_bridge_port_group *p,
  237. struct net_bridge_port *port,
  238. const unsigned char *src)
  239. {
  240. if (p->key.port != port)
  241. return false;
  242. if (!(port->flags & BR_MULTICAST_TO_UNICAST))
  243. return true;
  244. return ether_addr_equal(src, p->eth_addr);
  245. }
  246. static void __fwd_add_star_excl(struct net_bridge_mcast_port *pmctx,
  247. struct net_bridge_port_group *pg,
  248. struct br_ip *sg_ip)
  249. {
  250. struct net_bridge_port_group_sg_key sg_key;
  251. struct net_bridge_port_group *src_pg;
  252. struct net_bridge_mcast *brmctx;
  253. memset(&sg_key, 0, sizeof(sg_key));
  254. brmctx = br_multicast_port_ctx_get_global(pmctx);
  255. sg_key.port = pg->key.port;
  256. sg_key.addr = *sg_ip;
  257. if (br_sg_port_find(brmctx->br, &sg_key))
  258. return;
  259. src_pg = __br_multicast_add_group(brmctx, pmctx,
  260. sg_ip, pg->eth_addr,
  261. MCAST_INCLUDE, false, false);
  262. if (IS_ERR_OR_NULL(src_pg) ||
  263. src_pg->rt_protocol != RTPROT_KERNEL)
  264. return;
  265. src_pg->flags |= MDB_PG_FLAGS_STAR_EXCL;
  266. }
  267. static void __fwd_del_star_excl(struct net_bridge_port_group *pg,
  268. struct br_ip *sg_ip)
  269. {
  270. struct net_bridge_port_group_sg_key sg_key;
  271. struct net_bridge *br = pg->key.port->br;
  272. struct net_bridge_port_group *src_pg;
  273. memset(&sg_key, 0, sizeof(sg_key));
  274. sg_key.port = pg->key.port;
  275. sg_key.addr = *sg_ip;
  276. src_pg = br_sg_port_find(br, &sg_key);
  277. if (!src_pg || !(src_pg->flags & MDB_PG_FLAGS_STAR_EXCL) ||
  278. src_pg->rt_protocol != RTPROT_KERNEL)
  279. return;
  280. br_multicast_find_del_pg(br, src_pg);
  281. }
  282. /* When a port group transitions to (or is added as) EXCLUDE we need to add it
  283. * to all other ports' S,G entries which are not blocked by the current group
  284. * for proper replication, the assumption is that any S,G blocked entries
  285. * are already added so the S,G,port lookup should skip them.
  286. * When a port group transitions from EXCLUDE -> INCLUDE mode or is being
  287. * deleted we need to remove it from all ports' S,G entries where it was
  288. * automatically installed before (i.e. where it's MDB_PG_FLAGS_STAR_EXCL).
  289. */
  290. void br_multicast_star_g_handle_mode(struct net_bridge_port_group *pg,
  291. u8 filter_mode)
  292. {
  293. struct net_bridge *br = pg->key.port->br;
  294. struct net_bridge_port_group *pg_lst;
  295. struct net_bridge_mcast_port *pmctx;
  296. struct net_bridge_mdb_entry *mp;
  297. struct br_ip sg_ip;
  298. if (WARN_ON(!br_multicast_is_star_g(&pg->key.addr)))
  299. return;
  300. mp = br_mdb_ip_get(br, &pg->key.addr);
  301. if (!mp)
  302. return;
  303. pmctx = br_multicast_pg_to_port_ctx(pg);
  304. if (!pmctx)
  305. return;
  306. memset(&sg_ip, 0, sizeof(sg_ip));
  307. sg_ip = pg->key.addr;
  308. for (pg_lst = mlock_dereference(mp->ports, br);
  309. pg_lst;
  310. pg_lst = mlock_dereference(pg_lst->next, br)) {
  311. struct net_bridge_group_src *src_ent;
  312. if (pg_lst == pg)
  313. continue;
  314. hlist_for_each_entry(src_ent, &pg_lst->src_list, node) {
  315. if (!(src_ent->flags & BR_SGRP_F_INSTALLED))
  316. continue;
  317. sg_ip.src = src_ent->addr.src;
  318. switch (filter_mode) {
  319. case MCAST_INCLUDE:
  320. __fwd_del_star_excl(pg, &sg_ip);
  321. break;
  322. case MCAST_EXCLUDE:
  323. __fwd_add_star_excl(pmctx, pg, &sg_ip);
  324. break;
  325. }
  326. }
  327. }
  328. }
  329. /* called when adding a new S,G with host_joined == false by default */
  330. static void br_multicast_sg_host_state(struct net_bridge_mdb_entry *star_mp,
  331. struct net_bridge_port_group *sg)
  332. {
  333. struct net_bridge_mdb_entry *sg_mp;
  334. if (WARN_ON(!br_multicast_is_star_g(&star_mp->addr)))
  335. return;
  336. if (!star_mp->host_joined)
  337. return;
  338. sg_mp = br_mdb_ip_get(star_mp->br, &sg->key.addr);
  339. if (!sg_mp)
  340. return;
  341. sg_mp->host_joined = true;
  342. }
  343. /* set the host_joined state of all of *,G's S,G entries */
  344. static void br_multicast_star_g_host_state(struct net_bridge_mdb_entry *star_mp)
  345. {
  346. struct net_bridge *br = star_mp->br;
  347. struct net_bridge_mdb_entry *sg_mp;
  348. struct net_bridge_port_group *pg;
  349. struct br_ip sg_ip;
  350. if (WARN_ON(!br_multicast_is_star_g(&star_mp->addr)))
  351. return;
  352. memset(&sg_ip, 0, sizeof(sg_ip));
  353. sg_ip = star_mp->addr;
  354. for (pg = mlock_dereference(star_mp->ports, br);
  355. pg;
  356. pg = mlock_dereference(pg->next, br)) {
  357. struct net_bridge_group_src *src_ent;
  358. hlist_for_each_entry(src_ent, &pg->src_list, node) {
  359. if (!(src_ent->flags & BR_SGRP_F_INSTALLED))
  360. continue;
  361. sg_ip.src = src_ent->addr.src;
  362. sg_mp = br_mdb_ip_get(br, &sg_ip);
  363. if (!sg_mp)
  364. continue;
  365. sg_mp->host_joined = star_mp->host_joined;
  366. }
  367. }
  368. }
  369. static void br_multicast_sg_del_exclude_ports(struct net_bridge_mdb_entry *sgmp)
  370. {
  371. struct net_bridge_port_group __rcu **pp;
  372. struct net_bridge_port_group *p;
  373. /* *,G exclude ports are only added to S,G entries */
  374. if (WARN_ON(br_multicast_is_star_g(&sgmp->addr)))
  375. return;
  376. /* we need the STAR_EXCLUDE ports if there are non-STAR_EXCLUDE ports
  377. * we should ignore perm entries since they're managed by user-space
  378. */
  379. for (pp = &sgmp->ports;
  380. (p = mlock_dereference(*pp, sgmp->br)) != NULL;
  381. pp = &p->next)
  382. if (!(p->flags & (MDB_PG_FLAGS_STAR_EXCL |
  383. MDB_PG_FLAGS_PERMANENT)))
  384. return;
  385. /* currently the host can only have joined the *,G which means
  386. * we treat it as EXCLUDE {}, so for an S,G it's considered a
  387. * STAR_EXCLUDE entry and we can safely leave it
  388. */
  389. sgmp->host_joined = false;
  390. for (pp = &sgmp->ports;
  391. (p = mlock_dereference(*pp, sgmp->br)) != NULL;) {
  392. if (!(p->flags & MDB_PG_FLAGS_PERMANENT))
  393. br_multicast_del_pg(sgmp, p, pp);
  394. else
  395. pp = &p->next;
  396. }
  397. }
  398. void br_multicast_sg_add_exclude_ports(struct net_bridge_mdb_entry *star_mp,
  399. struct net_bridge_port_group *sg)
  400. {
  401. struct net_bridge_port_group_sg_key sg_key;
  402. struct net_bridge *br = star_mp->br;
  403. struct net_bridge_mcast_port *pmctx;
  404. struct net_bridge_port_group *pg;
  405. struct net_bridge_mcast *brmctx;
  406. if (WARN_ON(br_multicast_is_star_g(&sg->key.addr)))
  407. return;
  408. if (WARN_ON(!br_multicast_is_star_g(&star_mp->addr)))
  409. return;
  410. br_multicast_sg_host_state(star_mp, sg);
  411. memset(&sg_key, 0, sizeof(sg_key));
  412. sg_key.addr = sg->key.addr;
  413. /* we need to add all exclude ports to the S,G */
  414. for (pg = mlock_dereference(star_mp->ports, br);
  415. pg;
  416. pg = mlock_dereference(pg->next, br)) {
  417. struct net_bridge_port_group *src_pg;
  418. if (pg == sg || pg->filter_mode == MCAST_INCLUDE)
  419. continue;
  420. sg_key.port = pg->key.port;
  421. if (br_sg_port_find(br, &sg_key))
  422. continue;
  423. pmctx = br_multicast_pg_to_port_ctx(pg);
  424. if (!pmctx)
  425. continue;
  426. brmctx = br_multicast_port_ctx_get_global(pmctx);
  427. src_pg = __br_multicast_add_group(brmctx, pmctx,
  428. &sg->key.addr,
  429. sg->eth_addr,
  430. MCAST_INCLUDE, false, false);
  431. if (IS_ERR_OR_NULL(src_pg) ||
  432. src_pg->rt_protocol != RTPROT_KERNEL)
  433. continue;
  434. src_pg->flags |= MDB_PG_FLAGS_STAR_EXCL;
  435. }
  436. }
  437. static void br_multicast_fwd_src_add(struct net_bridge_group_src *src)
  438. {
  439. struct net_bridge_mdb_entry *star_mp;
  440. struct net_bridge_mcast_port *pmctx;
  441. struct net_bridge_port_group *sg;
  442. struct net_bridge_mcast *brmctx;
  443. struct br_ip sg_ip;
  444. if (src->flags & BR_SGRP_F_INSTALLED)
  445. return;
  446. memset(&sg_ip, 0, sizeof(sg_ip));
  447. pmctx = br_multicast_pg_to_port_ctx(src->pg);
  448. if (!pmctx)
  449. return;
  450. brmctx = br_multicast_port_ctx_get_global(pmctx);
  451. sg_ip = src->pg->key.addr;
  452. sg_ip.src = src->addr.src;
  453. sg = __br_multicast_add_group(brmctx, pmctx, &sg_ip,
  454. src->pg->eth_addr, MCAST_INCLUDE, false,
  455. !timer_pending(&src->timer));
  456. if (IS_ERR_OR_NULL(sg))
  457. return;
  458. src->flags |= BR_SGRP_F_INSTALLED;
  459. sg->flags &= ~MDB_PG_FLAGS_STAR_EXCL;
  460. /* if it was added by user-space as perm we can skip next steps */
  461. if (sg->rt_protocol != RTPROT_KERNEL &&
  462. (sg->flags & MDB_PG_FLAGS_PERMANENT))
  463. return;
  464. /* the kernel is now responsible for removing this S,G */
  465. timer_delete(&sg->timer);
  466. star_mp = br_mdb_ip_get(src->br, &src->pg->key.addr);
  467. if (!star_mp)
  468. return;
  469. br_multicast_sg_add_exclude_ports(star_mp, sg);
  470. }
  471. static void br_multicast_fwd_src_remove(struct net_bridge_group_src *src,
  472. bool fastleave)
  473. {
  474. struct net_bridge_port_group *p, *pg = src->pg;
  475. struct net_bridge_port_group __rcu **pp;
  476. struct net_bridge_mdb_entry *mp;
  477. struct br_ip sg_ip;
  478. memset(&sg_ip, 0, sizeof(sg_ip));
  479. sg_ip = pg->key.addr;
  480. sg_ip.src = src->addr.src;
  481. mp = br_mdb_ip_get(src->br, &sg_ip);
  482. if (!mp)
  483. return;
  484. for (pp = &mp->ports;
  485. (p = mlock_dereference(*pp, src->br)) != NULL;
  486. pp = &p->next) {
  487. if (!br_port_group_equal(p, pg->key.port, pg->eth_addr))
  488. continue;
  489. if (p->rt_protocol != RTPROT_KERNEL &&
  490. (p->flags & MDB_PG_FLAGS_PERMANENT) &&
  491. !(src->flags & BR_SGRP_F_USER_ADDED))
  492. break;
  493. if (fastleave)
  494. p->flags |= MDB_PG_FLAGS_FAST_LEAVE;
  495. br_multicast_del_pg(mp, p, pp);
  496. break;
  497. }
  498. src->flags &= ~BR_SGRP_F_INSTALLED;
  499. }
  500. /* install S,G and based on src's timer enable or disable forwarding */
  501. static void br_multicast_fwd_src_handle(struct net_bridge_group_src *src)
  502. {
  503. struct net_bridge_port_group_sg_key sg_key;
  504. struct net_bridge_port_group *sg;
  505. u8 old_flags;
  506. br_multicast_fwd_src_add(src);
  507. memset(&sg_key, 0, sizeof(sg_key));
  508. sg_key.addr = src->pg->key.addr;
  509. sg_key.addr.src = src->addr.src;
  510. sg_key.port = src->pg->key.port;
  511. sg = br_sg_port_find(src->br, &sg_key);
  512. if (!sg || (sg->flags & MDB_PG_FLAGS_PERMANENT))
  513. return;
  514. old_flags = sg->flags;
  515. if (timer_pending(&src->timer))
  516. sg->flags &= ~MDB_PG_FLAGS_BLOCKED;
  517. else
  518. sg->flags |= MDB_PG_FLAGS_BLOCKED;
  519. if (old_flags != sg->flags) {
  520. struct net_bridge_mdb_entry *sg_mp;
  521. sg_mp = br_mdb_ip_get(src->br, &sg_key.addr);
  522. if (!sg_mp)
  523. return;
  524. br_mdb_notify(src->br->dev, sg_mp, sg, RTM_NEWMDB);
  525. }
  526. }
  527. static void br_multicast_destroy_mdb_entry(struct net_bridge_mcast_gc *gc)
  528. {
  529. struct net_bridge_mdb_entry *mp;
  530. mp = container_of(gc, struct net_bridge_mdb_entry, mcast_gc);
  531. WARN_ON(!hlist_unhashed(&mp->mdb_node));
  532. WARN_ON(mp->ports);
  533. timer_shutdown_sync(&mp->timer);
  534. kfree_rcu(mp, rcu);
  535. }
  536. static void br_multicast_del_mdb_entry(struct net_bridge_mdb_entry *mp)
  537. {
  538. struct net_bridge *br = mp->br;
  539. rhashtable_remove_fast(&br->mdb_hash_tbl, &mp->rhnode,
  540. br_mdb_rht_params);
  541. hlist_del_init_rcu(&mp->mdb_node);
  542. hlist_add_head(&mp->mcast_gc.gc_node, &br->mcast_gc_list);
  543. queue_work(system_long_wq, &br->mcast_gc_work);
  544. }
  545. static void br_multicast_group_expired(struct timer_list *t)
  546. {
  547. struct net_bridge_mdb_entry *mp = timer_container_of(mp, t, timer);
  548. struct net_bridge *br = mp->br;
  549. spin_lock(&br->multicast_lock);
  550. if (hlist_unhashed(&mp->mdb_node) || !netif_running(br->dev) ||
  551. timer_pending(&mp->timer))
  552. goto out;
  553. br_multicast_host_leave(mp, true);
  554. if (mp->ports)
  555. goto out;
  556. br_multicast_del_mdb_entry(mp);
  557. out:
  558. spin_unlock(&br->multicast_lock);
  559. }
  560. static void br_multicast_destroy_group_src(struct net_bridge_mcast_gc *gc)
  561. {
  562. struct net_bridge_group_src *src;
  563. src = container_of(gc, struct net_bridge_group_src, mcast_gc);
  564. WARN_ON(!hlist_unhashed(&src->node));
  565. timer_shutdown_sync(&src->timer);
  566. kfree_rcu(src, rcu);
  567. }
  568. void __br_multicast_del_group_src(struct net_bridge_group_src *src)
  569. {
  570. struct net_bridge *br = src->pg->key.port->br;
  571. hlist_del_init_rcu(&src->node);
  572. src->pg->src_ents--;
  573. hlist_add_head(&src->mcast_gc.gc_node, &br->mcast_gc_list);
  574. queue_work(system_long_wq, &br->mcast_gc_work);
  575. }
  576. void br_multicast_del_group_src(struct net_bridge_group_src *src,
  577. bool fastleave)
  578. {
  579. br_multicast_fwd_src_remove(src, fastleave);
  580. __br_multicast_del_group_src(src);
  581. }
  582. static int
  583. br_multicast_port_ngroups_inc_one(struct net_bridge_mcast_port *pmctx,
  584. struct netlink_ext_ack *extack,
  585. const char *what)
  586. {
  587. u32 max = READ_ONCE(pmctx->mdb_max_entries);
  588. u32 n = READ_ONCE(pmctx->mdb_n_entries);
  589. /* enforce the max limit when it's a port pmctx or a port-vlan pmctx
  590. * with snooping enabled
  591. */
  592. if (!br_multicast_port_ctx_vlan_disabled(pmctx) && max && n >= max) {
  593. NL_SET_ERR_MSG_FMT_MOD(extack, "%s is already in %u groups, and mcast_max_groups=%u",
  594. what, n, max);
  595. return -E2BIG;
  596. }
  597. WRITE_ONCE(pmctx->mdb_n_entries, n + 1);
  598. return 0;
  599. }
  600. static void br_multicast_port_ngroups_dec_one(struct net_bridge_mcast_port *pmctx)
  601. {
  602. u32 n = READ_ONCE(pmctx->mdb_n_entries);
  603. WARN_ON_ONCE(n == 0);
  604. WRITE_ONCE(pmctx->mdb_n_entries, n - 1);
  605. }
  606. static int br_multicast_port_ngroups_inc(struct net_bridge_port *port,
  607. const struct br_ip *group,
  608. struct netlink_ext_ack *extack)
  609. {
  610. struct net_bridge_mcast_port *pmctx;
  611. int err;
  612. lockdep_assert_held_once(&port->br->multicast_lock);
  613. /* Always count on the port context. */
  614. err = br_multicast_port_ngroups_inc_one(&port->multicast_ctx, extack,
  615. "Port");
  616. if (err) {
  617. trace_br_mdb_full(port->dev, group);
  618. return err;
  619. }
  620. /* Only count on the VLAN context if VID is given */
  621. if (!group->vid)
  622. return 0;
  623. pmctx = br_multicast_port_vid_to_port_ctx(port, group->vid);
  624. if (!pmctx)
  625. return 0;
  626. err = br_multicast_port_ngroups_inc_one(pmctx, extack, "Port-VLAN");
  627. if (err) {
  628. trace_br_mdb_full(port->dev, group);
  629. goto dec_one_out;
  630. }
  631. return 0;
  632. dec_one_out:
  633. br_multicast_port_ngroups_dec_one(&port->multicast_ctx);
  634. return err;
  635. }
  636. static void br_multicast_port_ngroups_dec(struct net_bridge_port *port, u16 vid)
  637. {
  638. struct net_bridge_mcast_port *pmctx;
  639. lockdep_assert_held_once(&port->br->multicast_lock);
  640. if (vid) {
  641. pmctx = br_multicast_port_vid_to_port_ctx(port, vid);
  642. if (pmctx)
  643. br_multicast_port_ngroups_dec_one(pmctx);
  644. }
  645. br_multicast_port_ngroups_dec_one(&port->multicast_ctx);
  646. }
  647. u32 br_multicast_ngroups_get(const struct net_bridge_mcast_port *pmctx)
  648. {
  649. return READ_ONCE(pmctx->mdb_n_entries);
  650. }
  651. void br_multicast_ngroups_set_max(struct net_bridge_mcast_port *pmctx, u32 max)
  652. {
  653. WRITE_ONCE(pmctx->mdb_max_entries, max);
  654. }
  655. u32 br_multicast_ngroups_get_max(const struct net_bridge_mcast_port *pmctx)
  656. {
  657. return READ_ONCE(pmctx->mdb_max_entries);
  658. }
  659. static void br_multicast_destroy_port_group(struct net_bridge_mcast_gc *gc)
  660. {
  661. struct net_bridge_port_group *pg;
  662. pg = container_of(gc, struct net_bridge_port_group, mcast_gc);
  663. WARN_ON(!hlist_unhashed(&pg->mglist));
  664. WARN_ON(!hlist_empty(&pg->src_list));
  665. timer_shutdown_sync(&pg->rexmit_timer);
  666. timer_shutdown_sync(&pg->timer);
  667. kfree_rcu(pg, rcu);
  668. }
  669. void br_multicast_del_pg(struct net_bridge_mdb_entry *mp,
  670. struct net_bridge_port_group *pg,
  671. struct net_bridge_port_group __rcu **pp)
  672. {
  673. struct net_bridge *br = pg->key.port->br;
  674. struct net_bridge_group_src *ent;
  675. struct hlist_node *tmp;
  676. rcu_assign_pointer(*pp, pg->next);
  677. hlist_del_init(&pg->mglist);
  678. br_multicast_eht_clean_sets(pg);
  679. hlist_for_each_entry_safe(ent, tmp, &pg->src_list, node)
  680. br_multicast_del_group_src(ent, false);
  681. br_mdb_notify(br->dev, mp, pg, RTM_DELMDB);
  682. if (!br_multicast_is_star_g(&mp->addr)) {
  683. rhashtable_remove_fast(&br->sg_port_tbl, &pg->rhnode,
  684. br_sg_port_rht_params);
  685. br_multicast_sg_del_exclude_ports(mp);
  686. } else {
  687. br_multicast_star_g_handle_mode(pg, MCAST_INCLUDE);
  688. }
  689. br_multicast_port_ngroups_dec(pg->key.port, pg->key.addr.vid);
  690. hlist_add_head(&pg->mcast_gc.gc_node, &br->mcast_gc_list);
  691. queue_work(system_long_wq, &br->mcast_gc_work);
  692. if (!mp->ports && !mp->host_joined && netif_running(br->dev))
  693. mod_timer(&mp->timer, jiffies);
  694. }
  695. static void br_multicast_find_del_pg(struct net_bridge *br,
  696. struct net_bridge_port_group *pg)
  697. {
  698. struct net_bridge_port_group __rcu **pp;
  699. struct net_bridge_mdb_entry *mp;
  700. struct net_bridge_port_group *p;
  701. mp = br_mdb_ip_get(br, &pg->key.addr);
  702. if (WARN_ON(!mp))
  703. return;
  704. for (pp = &mp->ports;
  705. (p = mlock_dereference(*pp, br)) != NULL;
  706. pp = &p->next) {
  707. if (p != pg)
  708. continue;
  709. br_multicast_del_pg(mp, pg, pp);
  710. return;
  711. }
  712. WARN_ON(1);
  713. }
  714. static void br_multicast_port_group_expired(struct timer_list *t)
  715. {
  716. struct net_bridge_port_group *pg = timer_container_of(pg, t, timer);
  717. struct net_bridge_group_src *src_ent;
  718. struct net_bridge *br = pg->key.port->br;
  719. struct hlist_node *tmp;
  720. bool changed;
  721. spin_lock(&br->multicast_lock);
  722. if (!netif_running(br->dev) || timer_pending(&pg->timer) ||
  723. hlist_unhashed(&pg->mglist) || pg->flags & MDB_PG_FLAGS_PERMANENT)
  724. goto out;
  725. changed = !!(pg->filter_mode == MCAST_EXCLUDE);
  726. pg->filter_mode = MCAST_INCLUDE;
  727. hlist_for_each_entry_safe(src_ent, tmp, &pg->src_list, node) {
  728. if (!timer_pending(&src_ent->timer)) {
  729. br_multicast_del_group_src(src_ent, false);
  730. changed = true;
  731. }
  732. }
  733. if (hlist_empty(&pg->src_list)) {
  734. br_multicast_find_del_pg(br, pg);
  735. } else if (changed) {
  736. struct net_bridge_mdb_entry *mp = br_mdb_ip_get(br, &pg->key.addr);
  737. if (changed && br_multicast_is_star_g(&pg->key.addr))
  738. br_multicast_star_g_handle_mode(pg, MCAST_INCLUDE);
  739. if (WARN_ON(!mp))
  740. goto out;
  741. br_mdb_notify(br->dev, mp, pg, RTM_NEWMDB);
  742. }
  743. out:
  744. spin_unlock(&br->multicast_lock);
  745. }
  746. static void br_multicast_gc(struct hlist_head *head)
  747. {
  748. struct net_bridge_mcast_gc *gcent;
  749. struct hlist_node *tmp;
  750. hlist_for_each_entry_safe(gcent, tmp, head, gc_node) {
  751. hlist_del_init(&gcent->gc_node);
  752. gcent->destroy(gcent);
  753. }
  754. }
  755. static void __br_multicast_query_handle_vlan(struct net_bridge_mcast *brmctx,
  756. struct net_bridge_mcast_port *pmctx,
  757. struct sk_buff *skb)
  758. {
  759. struct net_bridge_vlan *vlan = NULL;
  760. if (pmctx && br_multicast_port_ctx_is_vlan(pmctx))
  761. vlan = pmctx->vlan;
  762. else if (br_multicast_ctx_is_vlan(brmctx))
  763. vlan = brmctx->vlan;
  764. if (vlan && !(vlan->flags & BRIDGE_VLAN_INFO_UNTAGGED)) {
  765. u16 vlan_proto;
  766. if (br_vlan_get_proto(brmctx->br->dev, &vlan_proto) != 0)
  767. return;
  768. __vlan_hwaccel_put_tag(skb, htons(vlan_proto), vlan->vid);
  769. }
  770. }
  771. static struct sk_buff *br_ip4_multicast_alloc_query(struct net_bridge_mcast *brmctx,
  772. struct net_bridge_mcast_port *pmctx,
  773. struct net_bridge_port_group *pg,
  774. __be32 ip_dst, __be32 group,
  775. bool with_srcs, bool over_lmqt,
  776. u8 sflag, u8 *igmp_type,
  777. bool *need_rexmit)
  778. {
  779. struct net_bridge_port *p = pg ? pg->key.port : NULL;
  780. struct net_bridge_group_src *ent;
  781. size_t pkt_size, igmp_hdr_size;
  782. unsigned long now = jiffies;
  783. struct igmpv3_query *ihv3;
  784. void *csum_start = NULL;
  785. __sum16 *csum = NULL;
  786. struct sk_buff *skb;
  787. struct igmphdr *ih;
  788. struct ethhdr *eth;
  789. unsigned long lmqt;
  790. struct iphdr *iph;
  791. u16 lmqt_srcs = 0;
  792. igmp_hdr_size = sizeof(*ih);
  793. if (brmctx->multicast_igmp_version == 3) {
  794. igmp_hdr_size = sizeof(*ihv3);
  795. if (pg && with_srcs) {
  796. lmqt = now + (brmctx->multicast_last_member_interval *
  797. brmctx->multicast_last_member_count);
  798. hlist_for_each_entry(ent, &pg->src_list, node) {
  799. if (over_lmqt == time_after(ent->timer.expires,
  800. lmqt) &&
  801. ent->src_query_rexmit_cnt > 0)
  802. lmqt_srcs++;
  803. }
  804. if (!lmqt_srcs)
  805. return NULL;
  806. igmp_hdr_size += lmqt_srcs * sizeof(__be32);
  807. }
  808. }
  809. pkt_size = sizeof(*eth) + sizeof(*iph) + 4 + igmp_hdr_size;
  810. if ((p && pkt_size > p->dev->mtu) ||
  811. pkt_size > brmctx->br->dev->mtu)
  812. return NULL;
  813. skb = netdev_alloc_skb_ip_align(brmctx->br->dev, pkt_size);
  814. if (!skb)
  815. goto out;
  816. __br_multicast_query_handle_vlan(brmctx, pmctx, skb);
  817. skb->protocol = htons(ETH_P_IP);
  818. skb_reset_mac_header(skb);
  819. eth = eth_hdr(skb);
  820. ether_addr_copy(eth->h_source, brmctx->br->dev->dev_addr);
  821. ip_eth_mc_map(ip_dst, eth->h_dest);
  822. eth->h_proto = htons(ETH_P_IP);
  823. skb_put(skb, sizeof(*eth));
  824. skb_set_network_header(skb, skb->len);
  825. iph = ip_hdr(skb);
  826. iph->tot_len = htons(pkt_size - sizeof(*eth));
  827. iph->version = 4;
  828. iph->ihl = 6;
  829. iph->tos = 0xc0;
  830. iph->id = 0;
  831. iph->frag_off = htons(IP_DF);
  832. iph->ttl = 1;
  833. iph->protocol = IPPROTO_IGMP;
  834. iph->saddr = br_opt_get(brmctx->br, BROPT_MULTICAST_QUERY_USE_IFADDR) ?
  835. inet_select_addr(brmctx->br->dev, 0, RT_SCOPE_LINK) : 0;
  836. iph->daddr = ip_dst;
  837. ((u8 *)&iph[1])[0] = IPOPT_RA;
  838. ((u8 *)&iph[1])[1] = 4;
  839. ((u8 *)&iph[1])[2] = 0;
  840. ((u8 *)&iph[1])[3] = 0;
  841. ip_send_check(iph);
  842. skb_put(skb, 24);
  843. skb_set_transport_header(skb, skb->len);
  844. *igmp_type = IGMP_HOST_MEMBERSHIP_QUERY;
  845. switch (brmctx->multicast_igmp_version) {
  846. case 2:
  847. ih = igmp_hdr(skb);
  848. ih->type = IGMP_HOST_MEMBERSHIP_QUERY;
  849. ih->code = (group ? brmctx->multicast_last_member_interval :
  850. brmctx->multicast_query_response_interval) /
  851. (HZ / IGMP_TIMER_SCALE);
  852. ih->group = group;
  853. ih->csum = 0;
  854. csum = &ih->csum;
  855. csum_start = (void *)ih;
  856. break;
  857. case 3:
  858. ihv3 = igmpv3_query_hdr(skb);
  859. ihv3->type = IGMP_HOST_MEMBERSHIP_QUERY;
  860. ihv3->code = (group ? brmctx->multicast_last_member_interval :
  861. brmctx->multicast_query_response_interval) /
  862. (HZ / IGMP_TIMER_SCALE);
  863. ihv3->group = group;
  864. ihv3->qqic = brmctx->multicast_query_interval / HZ;
  865. ihv3->nsrcs = htons(lmqt_srcs);
  866. ihv3->resv = 0;
  867. ihv3->suppress = sflag;
  868. ihv3->qrv = 2;
  869. ihv3->csum = 0;
  870. csum = &ihv3->csum;
  871. csum_start = (void *)ihv3;
  872. if (!pg || !with_srcs)
  873. break;
  874. lmqt_srcs = 0;
  875. hlist_for_each_entry(ent, &pg->src_list, node) {
  876. if (over_lmqt == time_after(ent->timer.expires,
  877. lmqt) &&
  878. ent->src_query_rexmit_cnt > 0) {
  879. ihv3->srcs[lmqt_srcs++] = ent->addr.src.ip4;
  880. ent->src_query_rexmit_cnt--;
  881. if (need_rexmit && ent->src_query_rexmit_cnt)
  882. *need_rexmit = true;
  883. }
  884. }
  885. if (WARN_ON(lmqt_srcs != ntohs(ihv3->nsrcs))) {
  886. kfree_skb(skb);
  887. return NULL;
  888. }
  889. break;
  890. }
  891. if (WARN_ON(!csum || !csum_start)) {
  892. kfree_skb(skb);
  893. return NULL;
  894. }
  895. *csum = ip_compute_csum(csum_start, igmp_hdr_size);
  896. skb_put(skb, igmp_hdr_size);
  897. __skb_pull(skb, sizeof(*eth));
  898. out:
  899. return skb;
  900. }
  901. #if IS_ENABLED(CONFIG_IPV6)
  902. static struct sk_buff *br_ip6_multicast_alloc_query(struct net_bridge_mcast *brmctx,
  903. struct net_bridge_mcast_port *pmctx,
  904. struct net_bridge_port_group *pg,
  905. const struct in6_addr *ip6_dst,
  906. const struct in6_addr *group,
  907. bool with_srcs, bool over_llqt,
  908. u8 sflag, u8 *igmp_type,
  909. bool *need_rexmit)
  910. {
  911. struct net_bridge_port *p = pg ? pg->key.port : NULL;
  912. struct net_bridge_group_src *ent;
  913. size_t pkt_size, mld_hdr_size;
  914. unsigned long now = jiffies;
  915. struct mld2_query *mld2q;
  916. void *csum_start = NULL;
  917. unsigned long interval;
  918. __sum16 *csum = NULL;
  919. struct ipv6hdr *ip6h;
  920. struct mld_msg *mldq;
  921. struct sk_buff *skb;
  922. unsigned long llqt;
  923. struct ethhdr *eth;
  924. u16 llqt_srcs = 0;
  925. u8 *hopopt;
  926. mld_hdr_size = sizeof(*mldq);
  927. if (brmctx->multicast_mld_version == 2) {
  928. mld_hdr_size = sizeof(*mld2q);
  929. if (pg && with_srcs) {
  930. llqt = now + (brmctx->multicast_last_member_interval *
  931. brmctx->multicast_last_member_count);
  932. hlist_for_each_entry(ent, &pg->src_list, node) {
  933. if (over_llqt == time_after(ent->timer.expires,
  934. llqt) &&
  935. ent->src_query_rexmit_cnt > 0)
  936. llqt_srcs++;
  937. }
  938. if (!llqt_srcs)
  939. return NULL;
  940. mld_hdr_size += llqt_srcs * sizeof(struct in6_addr);
  941. }
  942. }
  943. pkt_size = sizeof(*eth) + sizeof(*ip6h) + 8 + mld_hdr_size;
  944. if ((p && pkt_size > p->dev->mtu) ||
  945. pkt_size > brmctx->br->dev->mtu)
  946. return NULL;
  947. skb = netdev_alloc_skb_ip_align(brmctx->br->dev, pkt_size);
  948. if (!skb)
  949. goto out;
  950. __br_multicast_query_handle_vlan(brmctx, pmctx, skb);
  951. skb->protocol = htons(ETH_P_IPV6);
  952. /* Ethernet header */
  953. skb_reset_mac_header(skb);
  954. eth = eth_hdr(skb);
  955. ether_addr_copy(eth->h_source, brmctx->br->dev->dev_addr);
  956. eth->h_proto = htons(ETH_P_IPV6);
  957. skb_put(skb, sizeof(*eth));
  958. /* IPv6 header + HbH option */
  959. skb_set_network_header(skb, skb->len);
  960. ip6h = ipv6_hdr(skb);
  961. *(__force __be32 *)ip6h = htonl(0x60000000);
  962. ip6h->payload_len = htons(8 + mld_hdr_size);
  963. ip6h->nexthdr = IPPROTO_HOPOPTS;
  964. ip6h->hop_limit = 1;
  965. ip6h->daddr = *ip6_dst;
  966. if (ipv6_dev_get_saddr(dev_net(brmctx->br->dev), brmctx->br->dev,
  967. &ip6h->daddr, 0, &ip6h->saddr)) {
  968. kfree_skb(skb);
  969. br_opt_toggle(brmctx->br, BROPT_HAS_IPV6_ADDR, false);
  970. return NULL;
  971. }
  972. br_opt_toggle(brmctx->br, BROPT_HAS_IPV6_ADDR, true);
  973. ipv6_eth_mc_map(&ip6h->daddr, eth->h_dest);
  974. hopopt = (u8 *)(ip6h + 1);
  975. hopopt[0] = IPPROTO_ICMPV6; /* next hdr */
  976. hopopt[1] = 0; /* length of HbH */
  977. hopopt[2] = IPV6_TLV_ROUTERALERT; /* Router Alert */
  978. hopopt[3] = 2; /* Length of RA Option */
  979. hopopt[4] = 0; /* Type = 0x0000 (MLD) */
  980. hopopt[5] = 0;
  981. hopopt[6] = IPV6_TLV_PAD1; /* Pad1 */
  982. hopopt[7] = IPV6_TLV_PAD1; /* Pad1 */
  983. skb_put(skb, sizeof(*ip6h) + 8);
  984. /* ICMPv6 */
  985. skb_set_transport_header(skb, skb->len);
  986. interval = ipv6_addr_any(group) ?
  987. brmctx->multicast_query_response_interval :
  988. brmctx->multicast_last_member_interval;
  989. *igmp_type = ICMPV6_MGM_QUERY;
  990. switch (brmctx->multicast_mld_version) {
  991. case 1:
  992. mldq = (struct mld_msg *)icmp6_hdr(skb);
  993. mldq->mld_type = ICMPV6_MGM_QUERY;
  994. mldq->mld_code = 0;
  995. mldq->mld_cksum = 0;
  996. mldq->mld_maxdelay = htons((u16)jiffies_to_msecs(interval));
  997. mldq->mld_reserved = 0;
  998. mldq->mld_mca = *group;
  999. csum = &mldq->mld_cksum;
  1000. csum_start = (void *)mldq;
  1001. break;
  1002. case 2:
  1003. mld2q = (struct mld2_query *)icmp6_hdr(skb);
  1004. mld2q->mld2q_mrc = htons((u16)jiffies_to_msecs(interval));
  1005. mld2q->mld2q_type = ICMPV6_MGM_QUERY;
  1006. mld2q->mld2q_code = 0;
  1007. mld2q->mld2q_cksum = 0;
  1008. mld2q->mld2q_resv1 = 0;
  1009. mld2q->mld2q_resv2 = 0;
  1010. mld2q->mld2q_suppress = sflag;
  1011. mld2q->mld2q_qrv = 2;
  1012. mld2q->mld2q_nsrcs = htons(llqt_srcs);
  1013. mld2q->mld2q_qqic = brmctx->multicast_query_interval / HZ;
  1014. mld2q->mld2q_mca = *group;
  1015. csum = &mld2q->mld2q_cksum;
  1016. csum_start = (void *)mld2q;
  1017. if (!pg || !with_srcs)
  1018. break;
  1019. llqt_srcs = 0;
  1020. hlist_for_each_entry(ent, &pg->src_list, node) {
  1021. if (over_llqt == time_after(ent->timer.expires,
  1022. llqt) &&
  1023. ent->src_query_rexmit_cnt > 0) {
  1024. mld2q->mld2q_srcs[llqt_srcs++] = ent->addr.src.ip6;
  1025. ent->src_query_rexmit_cnt--;
  1026. if (need_rexmit && ent->src_query_rexmit_cnt)
  1027. *need_rexmit = true;
  1028. }
  1029. }
  1030. if (WARN_ON(llqt_srcs != ntohs(mld2q->mld2q_nsrcs))) {
  1031. kfree_skb(skb);
  1032. return NULL;
  1033. }
  1034. break;
  1035. }
  1036. if (WARN_ON(!csum || !csum_start)) {
  1037. kfree_skb(skb);
  1038. return NULL;
  1039. }
  1040. *csum = csum_ipv6_magic(&ip6h->saddr, &ip6h->daddr, mld_hdr_size,
  1041. IPPROTO_ICMPV6,
  1042. csum_partial(csum_start, mld_hdr_size, 0));
  1043. skb_put(skb, mld_hdr_size);
  1044. __skb_pull(skb, sizeof(*eth));
  1045. out:
  1046. return skb;
  1047. }
  1048. #endif
  1049. static struct sk_buff *br_multicast_alloc_query(struct net_bridge_mcast *brmctx,
  1050. struct net_bridge_mcast_port *pmctx,
  1051. struct net_bridge_port_group *pg,
  1052. struct br_ip *ip_dst,
  1053. struct br_ip *group,
  1054. bool with_srcs, bool over_lmqt,
  1055. u8 sflag, u8 *igmp_type,
  1056. bool *need_rexmit)
  1057. {
  1058. __be32 ip4_dst;
  1059. switch (group->proto) {
  1060. case htons(ETH_P_IP):
  1061. ip4_dst = ip_dst ? ip_dst->dst.ip4 : htonl(INADDR_ALLHOSTS_GROUP);
  1062. return br_ip4_multicast_alloc_query(brmctx, pmctx, pg,
  1063. ip4_dst, group->dst.ip4,
  1064. with_srcs, over_lmqt,
  1065. sflag, igmp_type,
  1066. need_rexmit);
  1067. #if IS_ENABLED(CONFIG_IPV6)
  1068. case htons(ETH_P_IPV6): {
  1069. struct in6_addr ip6_dst;
  1070. if (ip_dst)
  1071. ip6_dst = ip_dst->dst.ip6;
  1072. else
  1073. ipv6_addr_set(&ip6_dst, htonl(0xff020000), 0, 0,
  1074. htonl(1));
  1075. return br_ip6_multicast_alloc_query(brmctx, pmctx, pg,
  1076. &ip6_dst, &group->dst.ip6,
  1077. with_srcs, over_lmqt,
  1078. sflag, igmp_type,
  1079. need_rexmit);
  1080. }
  1081. #endif
  1082. }
  1083. return NULL;
  1084. }
  1085. struct net_bridge_mdb_entry *br_multicast_new_group(struct net_bridge *br,
  1086. struct br_ip *group)
  1087. {
  1088. struct net_bridge_mdb_entry *mp;
  1089. int err;
  1090. mp = br_mdb_ip_get(br, group);
  1091. if (mp)
  1092. return mp;
  1093. if (atomic_read(&br->mdb_hash_tbl.nelems) >= br->hash_max) {
  1094. trace_br_mdb_full(br->dev, group);
  1095. br_mc_disabled_update(br->dev, false, NULL);
  1096. br_opt_toggle(br, BROPT_MULTICAST_ENABLED, false);
  1097. return ERR_PTR(-E2BIG);
  1098. }
  1099. mp = kzalloc_obj(*mp, GFP_ATOMIC);
  1100. if (unlikely(!mp))
  1101. return ERR_PTR(-ENOMEM);
  1102. mp->br = br;
  1103. mp->addr = *group;
  1104. mp->mcast_gc.destroy = br_multicast_destroy_mdb_entry;
  1105. timer_setup(&mp->timer, br_multicast_group_expired, 0);
  1106. err = rhashtable_lookup_insert_fast(&br->mdb_hash_tbl, &mp->rhnode,
  1107. br_mdb_rht_params);
  1108. if (err) {
  1109. kfree(mp);
  1110. mp = ERR_PTR(err);
  1111. } else {
  1112. hlist_add_head_rcu(&mp->mdb_node, &br->mdb_list);
  1113. }
  1114. return mp;
  1115. }
  1116. static void br_multicast_group_src_expired(struct timer_list *t)
  1117. {
  1118. struct net_bridge_group_src *src = timer_container_of(src, t, timer);
  1119. struct net_bridge_port_group *pg;
  1120. struct net_bridge *br = src->br;
  1121. spin_lock(&br->multicast_lock);
  1122. if (hlist_unhashed(&src->node) || !netif_running(br->dev) ||
  1123. timer_pending(&src->timer))
  1124. goto out;
  1125. pg = src->pg;
  1126. if (pg->filter_mode == MCAST_INCLUDE) {
  1127. br_multicast_del_group_src(src, false);
  1128. if (!hlist_empty(&pg->src_list))
  1129. goto out;
  1130. br_multicast_find_del_pg(br, pg);
  1131. } else {
  1132. br_multicast_fwd_src_handle(src);
  1133. }
  1134. out:
  1135. spin_unlock(&br->multicast_lock);
  1136. }
  1137. struct net_bridge_group_src *
  1138. br_multicast_find_group_src(struct net_bridge_port_group *pg, struct br_ip *ip)
  1139. {
  1140. struct net_bridge_group_src *ent;
  1141. switch (ip->proto) {
  1142. case htons(ETH_P_IP):
  1143. hlist_for_each_entry(ent, &pg->src_list, node)
  1144. if (ip->src.ip4 == ent->addr.src.ip4)
  1145. return ent;
  1146. break;
  1147. #if IS_ENABLED(CONFIG_IPV6)
  1148. case htons(ETH_P_IPV6):
  1149. hlist_for_each_entry(ent, &pg->src_list, node)
  1150. if (!ipv6_addr_cmp(&ent->addr.src.ip6, &ip->src.ip6))
  1151. return ent;
  1152. break;
  1153. #endif
  1154. }
  1155. return NULL;
  1156. }
  1157. struct net_bridge_group_src *
  1158. br_multicast_new_group_src(struct net_bridge_port_group *pg, struct br_ip *src_ip)
  1159. {
  1160. struct net_bridge_group_src *grp_src;
  1161. if (unlikely(pg->src_ents >= PG_SRC_ENT_LIMIT))
  1162. return NULL;
  1163. switch (src_ip->proto) {
  1164. case htons(ETH_P_IP):
  1165. if (ipv4_is_zeronet(src_ip->src.ip4) ||
  1166. ipv4_is_multicast(src_ip->src.ip4))
  1167. return NULL;
  1168. break;
  1169. #if IS_ENABLED(CONFIG_IPV6)
  1170. case htons(ETH_P_IPV6):
  1171. if (ipv6_addr_any(&src_ip->src.ip6) ||
  1172. ipv6_addr_is_multicast(&src_ip->src.ip6))
  1173. return NULL;
  1174. break;
  1175. #endif
  1176. }
  1177. grp_src = kzalloc_obj(*grp_src, GFP_ATOMIC);
  1178. if (unlikely(!grp_src))
  1179. return NULL;
  1180. grp_src->pg = pg;
  1181. grp_src->br = pg->key.port->br;
  1182. grp_src->addr = *src_ip;
  1183. grp_src->mcast_gc.destroy = br_multicast_destroy_group_src;
  1184. timer_setup(&grp_src->timer, br_multicast_group_src_expired, 0);
  1185. hlist_add_head_rcu(&grp_src->node, &pg->src_list);
  1186. pg->src_ents++;
  1187. return grp_src;
  1188. }
  1189. struct net_bridge_port_group *br_multicast_new_port_group(
  1190. struct net_bridge_port *port,
  1191. const struct br_ip *group,
  1192. struct net_bridge_port_group __rcu *next,
  1193. unsigned char flags,
  1194. const unsigned char *src,
  1195. u8 filter_mode,
  1196. u8 rt_protocol,
  1197. struct netlink_ext_ack *extack)
  1198. {
  1199. struct net_bridge_port_group *p;
  1200. int err;
  1201. err = br_multicast_port_ngroups_inc(port, group, extack);
  1202. if (err)
  1203. return NULL;
  1204. p = kzalloc_obj(*p, GFP_ATOMIC);
  1205. if (unlikely(!p)) {
  1206. NL_SET_ERR_MSG_MOD(extack, "Couldn't allocate new port group");
  1207. goto dec_out;
  1208. }
  1209. p->key.addr = *group;
  1210. p->key.port = port;
  1211. p->flags = flags;
  1212. p->filter_mode = filter_mode;
  1213. p->rt_protocol = rt_protocol;
  1214. p->eht_host_tree = RB_ROOT;
  1215. p->eht_set_tree = RB_ROOT;
  1216. p->mcast_gc.destroy = br_multicast_destroy_port_group;
  1217. INIT_HLIST_HEAD(&p->src_list);
  1218. if (!br_multicast_is_star_g(group) &&
  1219. rhashtable_lookup_insert_fast(&port->br->sg_port_tbl, &p->rhnode,
  1220. br_sg_port_rht_params)) {
  1221. NL_SET_ERR_MSG_MOD(extack, "Couldn't insert new port group");
  1222. goto free_out;
  1223. }
  1224. rcu_assign_pointer(p->next, next);
  1225. timer_setup(&p->timer, br_multicast_port_group_expired, 0);
  1226. timer_setup(&p->rexmit_timer, br_multicast_port_group_rexmit, 0);
  1227. hlist_add_head(&p->mglist, &port->mglist);
  1228. if (src)
  1229. memcpy(p->eth_addr, src, ETH_ALEN);
  1230. else
  1231. eth_broadcast_addr(p->eth_addr);
  1232. return p;
  1233. free_out:
  1234. kfree(p);
  1235. dec_out:
  1236. br_multicast_port_ngroups_dec(port, group->vid);
  1237. return NULL;
  1238. }
  1239. void br_multicast_del_port_group(struct net_bridge_port_group *p)
  1240. {
  1241. struct net_bridge_port *port = p->key.port;
  1242. __u16 vid = p->key.addr.vid;
  1243. hlist_del_init(&p->mglist);
  1244. if (!br_multicast_is_star_g(&p->key.addr))
  1245. rhashtable_remove_fast(&port->br->sg_port_tbl, &p->rhnode,
  1246. br_sg_port_rht_params);
  1247. kfree(p);
  1248. br_multicast_port_ngroups_dec(port, vid);
  1249. }
  1250. void br_multicast_host_join(const struct net_bridge_mcast *brmctx,
  1251. struct net_bridge_mdb_entry *mp, bool notify)
  1252. {
  1253. if (!mp->host_joined) {
  1254. mp->host_joined = true;
  1255. if (br_multicast_is_star_g(&mp->addr))
  1256. br_multicast_star_g_host_state(mp);
  1257. if (notify)
  1258. br_mdb_notify(mp->br->dev, mp, NULL, RTM_NEWMDB);
  1259. }
  1260. if (br_group_is_l2(&mp->addr))
  1261. return;
  1262. mod_timer(&mp->timer, jiffies + brmctx->multicast_membership_interval);
  1263. }
  1264. void br_multicast_host_leave(struct net_bridge_mdb_entry *mp, bool notify)
  1265. {
  1266. if (!mp->host_joined)
  1267. return;
  1268. mp->host_joined = false;
  1269. if (br_multicast_is_star_g(&mp->addr))
  1270. br_multicast_star_g_host_state(mp);
  1271. if (notify)
  1272. br_mdb_notify(mp->br->dev, mp, NULL, RTM_DELMDB);
  1273. }
  1274. static struct net_bridge_port_group *
  1275. __br_multicast_add_group(struct net_bridge_mcast *brmctx,
  1276. struct net_bridge_mcast_port *pmctx,
  1277. struct br_ip *group,
  1278. const unsigned char *src,
  1279. u8 filter_mode,
  1280. bool igmpv2_mldv1,
  1281. bool blocked)
  1282. {
  1283. struct net_bridge_port_group __rcu **pp;
  1284. struct net_bridge_port_group *p = NULL;
  1285. struct net_bridge_mdb_entry *mp;
  1286. unsigned long now = jiffies;
  1287. if (!br_multicast_ctx_should_use(brmctx, pmctx))
  1288. goto out;
  1289. mp = br_multicast_new_group(brmctx->br, group);
  1290. if (IS_ERR(mp))
  1291. return ERR_CAST(mp);
  1292. if (!pmctx) {
  1293. br_multicast_host_join(brmctx, mp, true);
  1294. goto out;
  1295. }
  1296. for (pp = &mp->ports;
  1297. (p = mlock_dereference(*pp, brmctx->br)) != NULL;
  1298. pp = &p->next) {
  1299. if (br_port_group_equal(p, pmctx->port, src))
  1300. goto found;
  1301. if ((unsigned long)p->key.port < (unsigned long)pmctx->port)
  1302. break;
  1303. }
  1304. p = br_multicast_new_port_group(pmctx->port, group, *pp, 0, src,
  1305. filter_mode, RTPROT_KERNEL, NULL);
  1306. if (unlikely(!p)) {
  1307. p = ERR_PTR(-ENOMEM);
  1308. goto out;
  1309. }
  1310. rcu_assign_pointer(*pp, p);
  1311. if (blocked)
  1312. p->flags |= MDB_PG_FLAGS_BLOCKED;
  1313. br_mdb_notify(brmctx->br->dev, mp, p, RTM_NEWMDB);
  1314. found:
  1315. if (igmpv2_mldv1)
  1316. mod_timer(&p->timer,
  1317. now + brmctx->multicast_membership_interval);
  1318. out:
  1319. return p;
  1320. }
  1321. static int br_multicast_add_group(struct net_bridge_mcast *brmctx,
  1322. struct net_bridge_mcast_port *pmctx,
  1323. struct br_ip *group,
  1324. const unsigned char *src,
  1325. u8 filter_mode,
  1326. bool igmpv2_mldv1)
  1327. {
  1328. struct net_bridge_port_group *pg;
  1329. int err;
  1330. spin_lock(&brmctx->br->multicast_lock);
  1331. pg = __br_multicast_add_group(brmctx, pmctx, group, src, filter_mode,
  1332. igmpv2_mldv1, false);
  1333. /* NULL is considered valid for host joined groups */
  1334. err = PTR_ERR_OR_ZERO(pg);
  1335. spin_unlock(&brmctx->br->multicast_lock);
  1336. return err;
  1337. }
  1338. static int br_ip4_multicast_add_group(struct net_bridge_mcast *brmctx,
  1339. struct net_bridge_mcast_port *pmctx,
  1340. __be32 group,
  1341. __u16 vid,
  1342. const unsigned char *src,
  1343. bool igmpv2)
  1344. {
  1345. struct br_ip br_group;
  1346. u8 filter_mode;
  1347. if (ipv4_is_local_multicast(group))
  1348. return 0;
  1349. memset(&br_group, 0, sizeof(br_group));
  1350. br_group.dst.ip4 = group;
  1351. br_group.proto = htons(ETH_P_IP);
  1352. br_group.vid = vid;
  1353. filter_mode = igmpv2 ? MCAST_EXCLUDE : MCAST_INCLUDE;
  1354. return br_multicast_add_group(brmctx, pmctx, &br_group, src,
  1355. filter_mode, igmpv2);
  1356. }
  1357. #if IS_ENABLED(CONFIG_IPV6)
  1358. static int br_ip6_multicast_add_group(struct net_bridge_mcast *brmctx,
  1359. struct net_bridge_mcast_port *pmctx,
  1360. const struct in6_addr *group,
  1361. __u16 vid,
  1362. const unsigned char *src,
  1363. bool mldv1)
  1364. {
  1365. struct br_ip br_group;
  1366. u8 filter_mode;
  1367. if (ipv6_addr_is_ll_all_nodes(group))
  1368. return 0;
  1369. memset(&br_group, 0, sizeof(br_group));
  1370. br_group.dst.ip6 = *group;
  1371. br_group.proto = htons(ETH_P_IPV6);
  1372. br_group.vid = vid;
  1373. filter_mode = mldv1 ? MCAST_EXCLUDE : MCAST_INCLUDE;
  1374. return br_multicast_add_group(brmctx, pmctx, &br_group, src,
  1375. filter_mode, mldv1);
  1376. }
  1377. #endif
  1378. static bool br_multicast_rport_del(struct hlist_node *rlist)
  1379. {
  1380. if (hlist_unhashed(rlist))
  1381. return false;
  1382. hlist_del_init_rcu(rlist);
  1383. return true;
  1384. }
  1385. static bool br_ip4_multicast_rport_del(struct net_bridge_mcast_port *pmctx)
  1386. {
  1387. return br_multicast_rport_del(&pmctx->ip4_rlist);
  1388. }
  1389. static bool br_ip6_multicast_rport_del(struct net_bridge_mcast_port *pmctx)
  1390. {
  1391. #if IS_ENABLED(CONFIG_IPV6)
  1392. return br_multicast_rport_del(&pmctx->ip6_rlist);
  1393. #else
  1394. return false;
  1395. #endif
  1396. }
  1397. static void br_multicast_router_expired(struct net_bridge_mcast_port *pmctx,
  1398. struct timer_list *t,
  1399. struct hlist_node *rlist)
  1400. {
  1401. struct net_bridge *br = pmctx->port->br;
  1402. bool del;
  1403. spin_lock(&br->multicast_lock);
  1404. if (pmctx->multicast_router == MDB_RTR_TYPE_DISABLED ||
  1405. pmctx->multicast_router == MDB_RTR_TYPE_PERM ||
  1406. timer_pending(t))
  1407. goto out;
  1408. del = br_multicast_rport_del(rlist);
  1409. br_multicast_rport_del_notify(pmctx, del);
  1410. out:
  1411. spin_unlock(&br->multicast_lock);
  1412. }
  1413. static void br_ip4_multicast_router_expired(struct timer_list *t)
  1414. {
  1415. struct net_bridge_mcast_port *pmctx = timer_container_of(pmctx, t,
  1416. ip4_mc_router_timer);
  1417. br_multicast_router_expired(pmctx, t, &pmctx->ip4_rlist);
  1418. }
  1419. #if IS_ENABLED(CONFIG_IPV6)
  1420. static void br_ip6_multicast_router_expired(struct timer_list *t)
  1421. {
  1422. struct net_bridge_mcast_port *pmctx = timer_container_of(pmctx, t,
  1423. ip6_mc_router_timer);
  1424. br_multicast_router_expired(pmctx, t, &pmctx->ip6_rlist);
  1425. }
  1426. #endif
  1427. static void br_mc_router_state_change(struct net_bridge *p,
  1428. bool is_mc_router)
  1429. {
  1430. struct switchdev_attr attr = {
  1431. .orig_dev = p->dev,
  1432. .id = SWITCHDEV_ATTR_ID_BRIDGE_MROUTER,
  1433. .flags = SWITCHDEV_F_DEFER,
  1434. .u.mrouter = is_mc_router,
  1435. };
  1436. switchdev_port_attr_set(p->dev, &attr, NULL);
  1437. }
  1438. static void br_multicast_local_router_expired(struct net_bridge_mcast *brmctx,
  1439. struct timer_list *timer)
  1440. {
  1441. spin_lock(&brmctx->br->multicast_lock);
  1442. if (brmctx->multicast_router == MDB_RTR_TYPE_DISABLED ||
  1443. brmctx->multicast_router == MDB_RTR_TYPE_PERM ||
  1444. br_ip4_multicast_is_router(brmctx) ||
  1445. br_ip6_multicast_is_router(brmctx))
  1446. goto out;
  1447. br_mc_router_state_change(brmctx->br, false);
  1448. out:
  1449. spin_unlock(&brmctx->br->multicast_lock);
  1450. }
  1451. static void br_ip4_multicast_local_router_expired(struct timer_list *t)
  1452. {
  1453. struct net_bridge_mcast *brmctx = timer_container_of(brmctx, t,
  1454. ip4_mc_router_timer);
  1455. br_multicast_local_router_expired(brmctx, t);
  1456. }
  1457. #if IS_ENABLED(CONFIG_IPV6)
  1458. static void br_ip6_multicast_local_router_expired(struct timer_list *t)
  1459. {
  1460. struct net_bridge_mcast *brmctx = timer_container_of(brmctx, t,
  1461. ip6_mc_router_timer);
  1462. br_multicast_local_router_expired(brmctx, t);
  1463. }
  1464. #endif
  1465. static void br_multicast_querier_expired(struct net_bridge_mcast *brmctx,
  1466. struct bridge_mcast_own_query *query)
  1467. {
  1468. spin_lock(&brmctx->br->multicast_lock);
  1469. if (!netif_running(brmctx->br->dev) ||
  1470. br_multicast_ctx_vlan_global_disabled(brmctx) ||
  1471. !br_opt_get(brmctx->br, BROPT_MULTICAST_ENABLED))
  1472. goto out;
  1473. br_multicast_start_querier(brmctx, query);
  1474. out:
  1475. spin_unlock(&brmctx->br->multicast_lock);
  1476. }
  1477. static void br_ip4_multicast_querier_expired(struct timer_list *t)
  1478. {
  1479. struct net_bridge_mcast *brmctx = timer_container_of(brmctx, t,
  1480. ip4_other_query.timer);
  1481. br_multicast_querier_expired(brmctx, &brmctx->ip4_own_query);
  1482. }
  1483. #if IS_ENABLED(CONFIG_IPV6)
  1484. static void br_ip6_multicast_querier_expired(struct timer_list *t)
  1485. {
  1486. struct net_bridge_mcast *brmctx = timer_container_of(brmctx, t,
  1487. ip6_other_query.timer);
  1488. br_multicast_querier_expired(brmctx, &brmctx->ip6_own_query);
  1489. }
  1490. #endif
  1491. static void br_multicast_query_delay_expired(struct timer_list *t)
  1492. {
  1493. }
  1494. static void br_multicast_select_own_querier(struct net_bridge_mcast *brmctx,
  1495. struct br_ip *ip,
  1496. struct sk_buff *skb)
  1497. {
  1498. if (ip->proto == htons(ETH_P_IP))
  1499. brmctx->ip4_querier.addr.src.ip4 = ip_hdr(skb)->saddr;
  1500. #if IS_ENABLED(CONFIG_IPV6)
  1501. else
  1502. brmctx->ip6_querier.addr.src.ip6 = ipv6_hdr(skb)->saddr;
  1503. #endif
  1504. }
  1505. static void __br_multicast_send_query(struct net_bridge_mcast *brmctx,
  1506. struct net_bridge_mcast_port *pmctx,
  1507. struct net_bridge_port_group *pg,
  1508. struct br_ip *ip_dst,
  1509. struct br_ip *group,
  1510. bool with_srcs,
  1511. u8 sflag,
  1512. bool *need_rexmit)
  1513. {
  1514. bool over_lmqt = !!sflag;
  1515. struct sk_buff *skb;
  1516. u8 igmp_type;
  1517. if (!br_multicast_ctx_should_use(brmctx, pmctx) ||
  1518. !br_multicast_ctx_matches_vlan_snooping(brmctx))
  1519. return;
  1520. again_under_lmqt:
  1521. skb = br_multicast_alloc_query(brmctx, pmctx, pg, ip_dst, group,
  1522. with_srcs, over_lmqt, sflag, &igmp_type,
  1523. need_rexmit);
  1524. if (!skb)
  1525. return;
  1526. if (pmctx) {
  1527. skb->dev = pmctx->port->dev;
  1528. br_multicast_count(brmctx->br, pmctx->port, skb, igmp_type,
  1529. BR_MCAST_DIR_TX);
  1530. NF_HOOK(NFPROTO_BRIDGE, NF_BR_LOCAL_OUT,
  1531. dev_net(pmctx->port->dev), NULL, skb, NULL, skb->dev,
  1532. br_dev_queue_push_xmit);
  1533. if (over_lmqt && with_srcs && sflag) {
  1534. over_lmqt = false;
  1535. goto again_under_lmqt;
  1536. }
  1537. } else {
  1538. br_multicast_select_own_querier(brmctx, group, skb);
  1539. br_multicast_count(brmctx->br, NULL, skb, igmp_type,
  1540. BR_MCAST_DIR_RX);
  1541. netif_rx(skb);
  1542. }
  1543. }
  1544. static void br_multicast_read_querier(const struct bridge_mcast_querier *querier,
  1545. struct bridge_mcast_querier *dest)
  1546. {
  1547. unsigned int seq;
  1548. memset(dest, 0, sizeof(*dest));
  1549. do {
  1550. seq = read_seqcount_begin(&querier->seq);
  1551. dest->port_ifidx = querier->port_ifidx;
  1552. memcpy(&dest->addr, &querier->addr, sizeof(struct br_ip));
  1553. } while (read_seqcount_retry(&querier->seq, seq));
  1554. }
  1555. static void br_multicast_update_querier(struct net_bridge_mcast *brmctx,
  1556. struct bridge_mcast_querier *querier,
  1557. int ifindex,
  1558. struct br_ip *saddr)
  1559. {
  1560. write_seqcount_begin(&querier->seq);
  1561. querier->port_ifidx = ifindex;
  1562. memcpy(&querier->addr, saddr, sizeof(*saddr));
  1563. write_seqcount_end(&querier->seq);
  1564. }
  1565. static void br_multicast_send_query(struct net_bridge_mcast *brmctx,
  1566. struct net_bridge_mcast_port *pmctx,
  1567. struct bridge_mcast_own_query *own_query)
  1568. {
  1569. struct bridge_mcast_other_query *other_query = NULL;
  1570. struct bridge_mcast_querier *querier;
  1571. struct br_ip br_group;
  1572. unsigned long time;
  1573. if (!br_multicast_ctx_should_use(brmctx, pmctx) ||
  1574. !br_opt_get(brmctx->br, BROPT_MULTICAST_ENABLED) ||
  1575. !brmctx->multicast_querier)
  1576. return;
  1577. memset(&br_group.dst, 0, sizeof(br_group.dst));
  1578. if (pmctx ? (own_query == &pmctx->ip4_own_query) :
  1579. (own_query == &brmctx->ip4_own_query)) {
  1580. querier = &brmctx->ip4_querier;
  1581. other_query = &brmctx->ip4_other_query;
  1582. br_group.proto = htons(ETH_P_IP);
  1583. #if IS_ENABLED(CONFIG_IPV6)
  1584. } else {
  1585. querier = &brmctx->ip6_querier;
  1586. other_query = &brmctx->ip6_other_query;
  1587. br_group.proto = htons(ETH_P_IPV6);
  1588. #endif
  1589. }
  1590. if (!other_query || timer_pending(&other_query->timer))
  1591. return;
  1592. /* we're about to select ourselves as querier */
  1593. if (!pmctx && querier->port_ifidx) {
  1594. struct br_ip zeroip = {};
  1595. br_multicast_update_querier(brmctx, querier, 0, &zeroip);
  1596. }
  1597. __br_multicast_send_query(brmctx, pmctx, NULL, NULL, &br_group, false,
  1598. 0, NULL);
  1599. time = jiffies;
  1600. time += own_query->startup_sent < brmctx->multicast_startup_query_count ?
  1601. brmctx->multicast_startup_query_interval :
  1602. brmctx->multicast_query_interval;
  1603. mod_timer(&own_query->timer, time);
  1604. }
  1605. static void
  1606. br_multicast_port_query_expired(struct net_bridge_mcast_port *pmctx,
  1607. struct bridge_mcast_own_query *query)
  1608. {
  1609. struct net_bridge *br = pmctx->port->br;
  1610. struct net_bridge_mcast *brmctx;
  1611. spin_lock(&br->multicast_lock);
  1612. if (br_multicast_port_ctx_state_stopped(pmctx))
  1613. goto out;
  1614. brmctx = br_multicast_port_ctx_get_global(pmctx);
  1615. if (query->startup_sent < brmctx->multicast_startup_query_count)
  1616. query->startup_sent++;
  1617. br_multicast_send_query(brmctx, pmctx, query);
  1618. out:
  1619. spin_unlock(&br->multicast_lock);
  1620. }
  1621. static void br_ip4_multicast_port_query_expired(struct timer_list *t)
  1622. {
  1623. struct net_bridge_mcast_port *pmctx = timer_container_of(pmctx, t,
  1624. ip4_own_query.timer);
  1625. br_multicast_port_query_expired(pmctx, &pmctx->ip4_own_query);
  1626. }
  1627. #if IS_ENABLED(CONFIG_IPV6)
  1628. static void br_ip6_multicast_port_query_expired(struct timer_list *t)
  1629. {
  1630. struct net_bridge_mcast_port *pmctx = timer_container_of(pmctx, t,
  1631. ip6_own_query.timer);
  1632. br_multicast_port_query_expired(pmctx, &pmctx->ip6_own_query);
  1633. }
  1634. #endif
  1635. static void br_multicast_port_group_rexmit(struct timer_list *t)
  1636. {
  1637. struct net_bridge_port_group *pg = timer_container_of(pg, t,
  1638. rexmit_timer);
  1639. struct bridge_mcast_other_query *other_query = NULL;
  1640. struct net_bridge *br = pg->key.port->br;
  1641. struct net_bridge_mcast_port *pmctx;
  1642. struct net_bridge_mcast *brmctx;
  1643. bool need_rexmit = false;
  1644. spin_lock(&br->multicast_lock);
  1645. if (!netif_running(br->dev) || hlist_unhashed(&pg->mglist) ||
  1646. !br_opt_get(br, BROPT_MULTICAST_ENABLED))
  1647. goto out;
  1648. pmctx = br_multicast_pg_to_port_ctx(pg);
  1649. if (!pmctx)
  1650. goto out;
  1651. brmctx = br_multicast_port_ctx_get_global(pmctx);
  1652. if (!brmctx->multicast_querier)
  1653. goto out;
  1654. if (pg->key.addr.proto == htons(ETH_P_IP))
  1655. other_query = &brmctx->ip4_other_query;
  1656. #if IS_ENABLED(CONFIG_IPV6)
  1657. else
  1658. other_query = &brmctx->ip6_other_query;
  1659. #endif
  1660. if (!other_query || timer_pending(&other_query->timer))
  1661. goto out;
  1662. if (pg->grp_query_rexmit_cnt) {
  1663. pg->grp_query_rexmit_cnt--;
  1664. __br_multicast_send_query(brmctx, pmctx, pg, &pg->key.addr,
  1665. &pg->key.addr, false, 1, NULL);
  1666. }
  1667. __br_multicast_send_query(brmctx, pmctx, pg, &pg->key.addr,
  1668. &pg->key.addr, true, 0, &need_rexmit);
  1669. if (pg->grp_query_rexmit_cnt || need_rexmit)
  1670. mod_timer(&pg->rexmit_timer, jiffies +
  1671. brmctx->multicast_last_member_interval);
  1672. out:
  1673. spin_unlock(&br->multicast_lock);
  1674. }
  1675. static int br_mc_disabled_update(struct net_device *dev, bool value,
  1676. struct netlink_ext_ack *extack)
  1677. {
  1678. struct switchdev_attr attr = {
  1679. .orig_dev = dev,
  1680. .id = SWITCHDEV_ATTR_ID_BRIDGE_MC_DISABLED,
  1681. .flags = SWITCHDEV_F_DEFER,
  1682. .u.mc_disabled = !value,
  1683. };
  1684. return switchdev_port_attr_set(dev, &attr, extack);
  1685. }
  1686. void br_multicast_port_ctx_init(struct net_bridge_port *port,
  1687. struct net_bridge_vlan *vlan,
  1688. struct net_bridge_mcast_port *pmctx)
  1689. {
  1690. pmctx->port = port;
  1691. pmctx->vlan = vlan;
  1692. pmctx->multicast_router = MDB_RTR_TYPE_TEMP_QUERY;
  1693. timer_setup(&pmctx->ip4_mc_router_timer,
  1694. br_ip4_multicast_router_expired, 0);
  1695. timer_setup(&pmctx->ip4_own_query.timer,
  1696. br_ip4_multicast_port_query_expired, 0);
  1697. #if IS_ENABLED(CONFIG_IPV6)
  1698. timer_setup(&pmctx->ip6_mc_router_timer,
  1699. br_ip6_multicast_router_expired, 0);
  1700. timer_setup(&pmctx->ip6_own_query.timer,
  1701. br_ip6_multicast_port_query_expired, 0);
  1702. #endif
  1703. /* initialize mdb_n_entries if a new port vlan is being created */
  1704. if (vlan) {
  1705. struct net_bridge_port_group *pg;
  1706. u32 n = 0;
  1707. spin_lock_bh(&port->br->multicast_lock);
  1708. hlist_for_each_entry(pg, &port->mglist, mglist)
  1709. if (pg->key.addr.vid == vlan->vid)
  1710. n++;
  1711. WRITE_ONCE(pmctx->mdb_n_entries, n);
  1712. spin_unlock_bh(&port->br->multicast_lock);
  1713. }
  1714. }
  1715. void br_multicast_port_ctx_deinit(struct net_bridge_mcast_port *pmctx)
  1716. {
  1717. struct net_bridge *br = pmctx->port->br;
  1718. bool del = false;
  1719. #if IS_ENABLED(CONFIG_IPV6)
  1720. timer_delete_sync(&pmctx->ip6_mc_router_timer);
  1721. #endif
  1722. timer_delete_sync(&pmctx->ip4_mc_router_timer);
  1723. spin_lock_bh(&br->multicast_lock);
  1724. del |= br_ip6_multicast_rport_del(pmctx);
  1725. del |= br_ip4_multicast_rport_del(pmctx);
  1726. br_multicast_rport_del_notify(pmctx, del);
  1727. spin_unlock_bh(&br->multicast_lock);
  1728. }
  1729. int br_multicast_add_port(struct net_bridge_port *port)
  1730. {
  1731. int err;
  1732. port->multicast_eht_hosts_limit = BR_MCAST_DEFAULT_EHT_HOSTS_LIMIT;
  1733. br_multicast_port_ctx_init(port, NULL, &port->multicast_ctx);
  1734. err = br_mc_disabled_update(port->dev,
  1735. br_opt_get(port->br,
  1736. BROPT_MULTICAST_ENABLED),
  1737. NULL);
  1738. if (err && err != -EOPNOTSUPP)
  1739. return err;
  1740. port->mcast_stats = netdev_alloc_pcpu_stats(struct bridge_mcast_stats);
  1741. if (!port->mcast_stats)
  1742. return -ENOMEM;
  1743. return 0;
  1744. }
  1745. void br_multicast_del_port(struct net_bridge_port *port)
  1746. {
  1747. struct net_bridge *br = port->br;
  1748. struct net_bridge_port_group *pg;
  1749. struct hlist_node *n;
  1750. /* Take care of the remaining groups, only perm ones should be left */
  1751. spin_lock_bh(&br->multicast_lock);
  1752. hlist_for_each_entry_safe(pg, n, &port->mglist, mglist)
  1753. br_multicast_find_del_pg(br, pg);
  1754. spin_unlock_bh(&br->multicast_lock);
  1755. flush_work(&br->mcast_gc_work);
  1756. br_multicast_port_ctx_deinit(&port->multicast_ctx);
  1757. free_percpu(port->mcast_stats);
  1758. }
  1759. static void br_multicast_enable(struct bridge_mcast_own_query *query)
  1760. {
  1761. query->startup_sent = 0;
  1762. if (timer_delete_sync_try(&query->timer) >= 0 ||
  1763. timer_delete(&query->timer))
  1764. mod_timer(&query->timer, jiffies);
  1765. }
  1766. static void __br_multicast_enable_port_ctx(struct net_bridge_mcast_port *pmctx)
  1767. {
  1768. struct net_bridge *br = pmctx->port->br;
  1769. struct net_bridge_mcast *brmctx;
  1770. brmctx = br_multicast_port_ctx_get_global(pmctx);
  1771. if (!br_opt_get(br, BROPT_MULTICAST_ENABLED) ||
  1772. !netif_running(br->dev))
  1773. return;
  1774. br_multicast_enable(&pmctx->ip4_own_query);
  1775. #if IS_ENABLED(CONFIG_IPV6)
  1776. br_multicast_enable(&pmctx->ip6_own_query);
  1777. #endif
  1778. if (pmctx->multicast_router == MDB_RTR_TYPE_PERM) {
  1779. br_ip4_multicast_add_router(brmctx, pmctx);
  1780. br_ip6_multicast_add_router(brmctx, pmctx);
  1781. }
  1782. }
  1783. static void br_multicast_enable_port_ctx(struct net_bridge_mcast_port *pmctx)
  1784. {
  1785. struct net_bridge *br = pmctx->port->br;
  1786. spin_lock_bh(&br->multicast_lock);
  1787. if (br_multicast_port_ctx_is_vlan(pmctx) &&
  1788. !(pmctx->vlan->priv_flags & BR_VLFLAG_MCAST_ENABLED)) {
  1789. spin_unlock_bh(&br->multicast_lock);
  1790. return;
  1791. }
  1792. __br_multicast_enable_port_ctx(pmctx);
  1793. spin_unlock_bh(&br->multicast_lock);
  1794. }
  1795. static void __br_multicast_disable_port_ctx(struct net_bridge_mcast_port *pmctx)
  1796. {
  1797. struct net_bridge_port_group *pg;
  1798. struct hlist_node *n;
  1799. bool del = false;
  1800. hlist_for_each_entry_safe(pg, n, &pmctx->port->mglist, mglist)
  1801. if (!(pg->flags & MDB_PG_FLAGS_PERMANENT) &&
  1802. (!br_multicast_port_ctx_is_vlan(pmctx) ||
  1803. pg->key.addr.vid == pmctx->vlan->vid))
  1804. br_multicast_find_del_pg(pmctx->port->br, pg);
  1805. del |= br_ip4_multicast_rport_del(pmctx);
  1806. timer_delete(&pmctx->ip4_mc_router_timer);
  1807. timer_delete(&pmctx->ip4_own_query.timer);
  1808. del |= br_ip6_multicast_rport_del(pmctx);
  1809. #if IS_ENABLED(CONFIG_IPV6)
  1810. timer_delete(&pmctx->ip6_mc_router_timer);
  1811. timer_delete(&pmctx->ip6_own_query.timer);
  1812. #endif
  1813. br_multicast_rport_del_notify(pmctx, del);
  1814. }
  1815. static void br_multicast_disable_port_ctx(struct net_bridge_mcast_port *pmctx)
  1816. {
  1817. struct net_bridge *br = pmctx->port->br;
  1818. spin_lock_bh(&br->multicast_lock);
  1819. if (br_multicast_port_ctx_is_vlan(pmctx) &&
  1820. !(pmctx->vlan->priv_flags & BR_VLFLAG_MCAST_ENABLED)) {
  1821. spin_unlock_bh(&br->multicast_lock);
  1822. return;
  1823. }
  1824. __br_multicast_disable_port_ctx(pmctx);
  1825. spin_unlock_bh(&br->multicast_lock);
  1826. }
  1827. static void br_multicast_toggle_port(struct net_bridge_port *port, bool on)
  1828. {
  1829. #if IS_ENABLED(CONFIG_BRIDGE_VLAN_FILTERING)
  1830. if (br_opt_get(port->br, BROPT_MCAST_VLAN_SNOOPING_ENABLED)) {
  1831. struct net_bridge_vlan_group *vg;
  1832. struct net_bridge_vlan *vlan;
  1833. rcu_read_lock();
  1834. vg = nbp_vlan_group_rcu(port);
  1835. if (!vg) {
  1836. rcu_read_unlock();
  1837. return;
  1838. }
  1839. /* iterate each vlan, toggle vlan multicast context */
  1840. list_for_each_entry_rcu(vlan, &vg->vlan_list, vlist) {
  1841. struct net_bridge_mcast_port *pmctx =
  1842. &vlan->port_mcast_ctx;
  1843. u8 state = br_vlan_get_state(vlan);
  1844. /* enable vlan multicast context when state is
  1845. * LEARNING or FORWARDING
  1846. */
  1847. if (on && br_vlan_state_allowed(state, true))
  1848. br_multicast_enable_port_ctx(pmctx);
  1849. else
  1850. br_multicast_disable_port_ctx(pmctx);
  1851. }
  1852. rcu_read_unlock();
  1853. return;
  1854. }
  1855. #endif
  1856. /* toggle port multicast context when vlan snooping is disabled */
  1857. if (on)
  1858. br_multicast_enable_port_ctx(&port->multicast_ctx);
  1859. else
  1860. br_multicast_disable_port_ctx(&port->multicast_ctx);
  1861. }
  1862. void br_multicast_enable_port(struct net_bridge_port *port)
  1863. {
  1864. br_multicast_toggle_port(port, true);
  1865. }
  1866. void br_multicast_disable_port(struct net_bridge_port *port)
  1867. {
  1868. br_multicast_toggle_port(port, false);
  1869. }
  1870. static int __grp_src_delete_marked(struct net_bridge_port_group *pg)
  1871. {
  1872. struct net_bridge_group_src *ent;
  1873. struct hlist_node *tmp;
  1874. int deleted = 0;
  1875. hlist_for_each_entry_safe(ent, tmp, &pg->src_list, node)
  1876. if (ent->flags & BR_SGRP_F_DELETE) {
  1877. br_multicast_del_group_src(ent, false);
  1878. deleted++;
  1879. }
  1880. return deleted;
  1881. }
  1882. static void __grp_src_mod_timer(struct net_bridge_group_src *src,
  1883. unsigned long expires)
  1884. {
  1885. mod_timer(&src->timer, expires);
  1886. br_multicast_fwd_src_handle(src);
  1887. }
  1888. static void __grp_src_query_marked_and_rexmit(struct net_bridge_mcast *brmctx,
  1889. struct net_bridge_mcast_port *pmctx,
  1890. struct net_bridge_port_group *pg)
  1891. {
  1892. struct bridge_mcast_other_query *other_query = NULL;
  1893. u32 lmqc = brmctx->multicast_last_member_count;
  1894. unsigned long lmqt, lmi, now = jiffies;
  1895. struct net_bridge_group_src *ent;
  1896. if (!netif_running(brmctx->br->dev) ||
  1897. !br_opt_get(brmctx->br, BROPT_MULTICAST_ENABLED))
  1898. return;
  1899. if (pg->key.addr.proto == htons(ETH_P_IP))
  1900. other_query = &brmctx->ip4_other_query;
  1901. #if IS_ENABLED(CONFIG_IPV6)
  1902. else
  1903. other_query = &brmctx->ip6_other_query;
  1904. #endif
  1905. lmqt = now + br_multicast_lmqt(brmctx);
  1906. hlist_for_each_entry(ent, &pg->src_list, node) {
  1907. if (ent->flags & BR_SGRP_F_SEND) {
  1908. ent->flags &= ~BR_SGRP_F_SEND;
  1909. if (ent->timer.expires > lmqt) {
  1910. if (brmctx->multicast_querier &&
  1911. other_query &&
  1912. !timer_pending(&other_query->timer))
  1913. ent->src_query_rexmit_cnt = lmqc;
  1914. __grp_src_mod_timer(ent, lmqt);
  1915. }
  1916. }
  1917. }
  1918. if (!brmctx->multicast_querier ||
  1919. !other_query || timer_pending(&other_query->timer))
  1920. return;
  1921. __br_multicast_send_query(brmctx, pmctx, pg, &pg->key.addr,
  1922. &pg->key.addr, true, 1, NULL);
  1923. lmi = now + brmctx->multicast_last_member_interval;
  1924. if (!timer_pending(&pg->rexmit_timer) ||
  1925. time_after(pg->rexmit_timer.expires, lmi))
  1926. mod_timer(&pg->rexmit_timer, lmi);
  1927. }
  1928. static void __grp_send_query_and_rexmit(struct net_bridge_mcast *brmctx,
  1929. struct net_bridge_mcast_port *pmctx,
  1930. struct net_bridge_port_group *pg)
  1931. {
  1932. struct bridge_mcast_other_query *other_query = NULL;
  1933. unsigned long now = jiffies, lmi;
  1934. if (!netif_running(brmctx->br->dev) ||
  1935. !br_opt_get(brmctx->br, BROPT_MULTICAST_ENABLED))
  1936. return;
  1937. if (pg->key.addr.proto == htons(ETH_P_IP))
  1938. other_query = &brmctx->ip4_other_query;
  1939. #if IS_ENABLED(CONFIG_IPV6)
  1940. else
  1941. other_query = &brmctx->ip6_other_query;
  1942. #endif
  1943. if (brmctx->multicast_querier &&
  1944. other_query && !timer_pending(&other_query->timer)) {
  1945. lmi = now + brmctx->multicast_last_member_interval;
  1946. pg->grp_query_rexmit_cnt = brmctx->multicast_last_member_count - 1;
  1947. __br_multicast_send_query(brmctx, pmctx, pg, &pg->key.addr,
  1948. &pg->key.addr, false, 0, NULL);
  1949. if (!timer_pending(&pg->rexmit_timer) ||
  1950. time_after(pg->rexmit_timer.expires, lmi))
  1951. mod_timer(&pg->rexmit_timer, lmi);
  1952. }
  1953. if (pg->filter_mode == MCAST_EXCLUDE &&
  1954. (!timer_pending(&pg->timer) ||
  1955. time_after(pg->timer.expires, now + br_multicast_lmqt(brmctx))))
  1956. mod_timer(&pg->timer, now + br_multicast_lmqt(brmctx));
  1957. }
  1958. /* State Msg type New state Actions
  1959. * INCLUDE (A) IS_IN (B) INCLUDE (A+B) (B)=GMI
  1960. * INCLUDE (A) ALLOW (B) INCLUDE (A+B) (B)=GMI
  1961. * EXCLUDE (X,Y) ALLOW (A) EXCLUDE (X+A,Y-A) (A)=GMI
  1962. */
  1963. static bool br_multicast_isinc_allow(const struct net_bridge_mcast *brmctx,
  1964. struct net_bridge_port_group *pg, void *h_addr,
  1965. void *srcs, u32 nsrcs, size_t addr_size,
  1966. int grec_type)
  1967. {
  1968. struct net_bridge_group_src *ent;
  1969. unsigned long now = jiffies;
  1970. bool changed = false;
  1971. struct br_ip src_ip;
  1972. u32 src_idx;
  1973. memset(&src_ip, 0, sizeof(src_ip));
  1974. src_ip.proto = pg->key.addr.proto;
  1975. for (src_idx = 0; src_idx < nsrcs; src_idx++) {
  1976. memcpy(&src_ip.src, srcs + (src_idx * addr_size), addr_size);
  1977. ent = br_multicast_find_group_src(pg, &src_ip);
  1978. if (!ent) {
  1979. ent = br_multicast_new_group_src(pg, &src_ip);
  1980. if (ent)
  1981. changed = true;
  1982. }
  1983. if (ent)
  1984. __grp_src_mod_timer(ent, now + br_multicast_gmi(brmctx));
  1985. }
  1986. if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
  1987. grec_type))
  1988. changed = true;
  1989. return changed;
  1990. }
  1991. /* State Msg type New state Actions
  1992. * INCLUDE (A) IS_EX (B) EXCLUDE (A*B,B-A) (B-A)=0
  1993. * Delete (A-B)
  1994. * Group Timer=GMI
  1995. */
  1996. static void __grp_src_isexc_incl(const struct net_bridge_mcast *brmctx,
  1997. struct net_bridge_port_group *pg, void *h_addr,
  1998. void *srcs, u32 nsrcs, size_t addr_size,
  1999. int grec_type)
  2000. {
  2001. struct net_bridge_group_src *ent;
  2002. struct br_ip src_ip;
  2003. u32 src_idx;
  2004. hlist_for_each_entry(ent, &pg->src_list, node)
  2005. ent->flags |= BR_SGRP_F_DELETE;
  2006. memset(&src_ip, 0, sizeof(src_ip));
  2007. src_ip.proto = pg->key.addr.proto;
  2008. for (src_idx = 0; src_idx < nsrcs; src_idx++) {
  2009. memcpy(&src_ip.src, srcs + (src_idx * addr_size), addr_size);
  2010. ent = br_multicast_find_group_src(pg, &src_ip);
  2011. if (ent)
  2012. ent->flags &= ~BR_SGRP_F_DELETE;
  2013. else
  2014. ent = br_multicast_new_group_src(pg, &src_ip);
  2015. if (ent)
  2016. br_multicast_fwd_src_handle(ent);
  2017. }
  2018. br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
  2019. grec_type);
  2020. __grp_src_delete_marked(pg);
  2021. }
  2022. /* State Msg type New state Actions
  2023. * EXCLUDE (X,Y) IS_EX (A) EXCLUDE (A-Y,Y*A) (A-X-Y)=GMI
  2024. * Delete (X-A)
  2025. * Delete (Y-A)
  2026. * Group Timer=GMI
  2027. */
  2028. static bool __grp_src_isexc_excl(const struct net_bridge_mcast *brmctx,
  2029. struct net_bridge_port_group *pg, void *h_addr,
  2030. void *srcs, u32 nsrcs, size_t addr_size,
  2031. int grec_type)
  2032. {
  2033. struct net_bridge_group_src *ent;
  2034. unsigned long now = jiffies;
  2035. bool changed = false;
  2036. struct br_ip src_ip;
  2037. u32 src_idx;
  2038. hlist_for_each_entry(ent, &pg->src_list, node)
  2039. ent->flags |= BR_SGRP_F_DELETE;
  2040. memset(&src_ip, 0, sizeof(src_ip));
  2041. src_ip.proto = pg->key.addr.proto;
  2042. for (src_idx = 0; src_idx < nsrcs; src_idx++) {
  2043. memcpy(&src_ip.src, srcs + (src_idx * addr_size), addr_size);
  2044. ent = br_multicast_find_group_src(pg, &src_ip);
  2045. if (ent) {
  2046. ent->flags &= ~BR_SGRP_F_DELETE;
  2047. } else {
  2048. ent = br_multicast_new_group_src(pg, &src_ip);
  2049. if (ent) {
  2050. __grp_src_mod_timer(ent,
  2051. now + br_multicast_gmi(brmctx));
  2052. changed = true;
  2053. }
  2054. }
  2055. }
  2056. if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
  2057. grec_type))
  2058. changed = true;
  2059. if (__grp_src_delete_marked(pg))
  2060. changed = true;
  2061. return changed;
  2062. }
  2063. static bool br_multicast_isexc(const struct net_bridge_mcast *brmctx,
  2064. struct net_bridge_port_group *pg, void *h_addr,
  2065. void *srcs, u32 nsrcs, size_t addr_size,
  2066. int grec_type)
  2067. {
  2068. bool changed = false;
  2069. switch (pg->filter_mode) {
  2070. case MCAST_INCLUDE:
  2071. __grp_src_isexc_incl(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
  2072. grec_type);
  2073. br_multicast_star_g_handle_mode(pg, MCAST_EXCLUDE);
  2074. changed = true;
  2075. break;
  2076. case MCAST_EXCLUDE:
  2077. changed = __grp_src_isexc_excl(brmctx, pg, h_addr, srcs, nsrcs,
  2078. addr_size, grec_type);
  2079. break;
  2080. }
  2081. pg->filter_mode = MCAST_EXCLUDE;
  2082. mod_timer(&pg->timer, jiffies + br_multicast_gmi(brmctx));
  2083. return changed;
  2084. }
  2085. /* State Msg type New state Actions
  2086. * INCLUDE (A) TO_IN (B) INCLUDE (A+B) (B)=GMI
  2087. * Send Q(G,A-B)
  2088. */
  2089. static bool __grp_src_toin_incl(struct net_bridge_mcast *brmctx,
  2090. struct net_bridge_mcast_port *pmctx,
  2091. struct net_bridge_port_group *pg, void *h_addr,
  2092. void *srcs, u32 nsrcs, size_t addr_size,
  2093. int grec_type)
  2094. {
  2095. u32 src_idx, to_send = pg->src_ents;
  2096. struct net_bridge_group_src *ent;
  2097. unsigned long now = jiffies;
  2098. bool changed = false;
  2099. struct br_ip src_ip;
  2100. hlist_for_each_entry(ent, &pg->src_list, node)
  2101. ent->flags |= BR_SGRP_F_SEND;
  2102. memset(&src_ip, 0, sizeof(src_ip));
  2103. src_ip.proto = pg->key.addr.proto;
  2104. for (src_idx = 0; src_idx < nsrcs; src_idx++) {
  2105. memcpy(&src_ip.src, srcs + (src_idx * addr_size), addr_size);
  2106. ent = br_multicast_find_group_src(pg, &src_ip);
  2107. if (ent) {
  2108. ent->flags &= ~BR_SGRP_F_SEND;
  2109. to_send--;
  2110. } else {
  2111. ent = br_multicast_new_group_src(pg, &src_ip);
  2112. if (ent)
  2113. changed = true;
  2114. }
  2115. if (ent)
  2116. __grp_src_mod_timer(ent, now + br_multicast_gmi(brmctx));
  2117. }
  2118. if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
  2119. grec_type))
  2120. changed = true;
  2121. if (to_send)
  2122. __grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
  2123. return changed;
  2124. }
  2125. /* State Msg type New state Actions
  2126. * EXCLUDE (X,Y) TO_IN (A) EXCLUDE (X+A,Y-A) (A)=GMI
  2127. * Send Q(G,X-A)
  2128. * Send Q(G)
  2129. */
  2130. static bool __grp_src_toin_excl(struct net_bridge_mcast *brmctx,
  2131. struct net_bridge_mcast_port *pmctx,
  2132. struct net_bridge_port_group *pg, void *h_addr,
  2133. void *srcs, u32 nsrcs, size_t addr_size,
  2134. int grec_type)
  2135. {
  2136. u32 src_idx, to_send = pg->src_ents;
  2137. struct net_bridge_group_src *ent;
  2138. unsigned long now = jiffies;
  2139. bool changed = false;
  2140. struct br_ip src_ip;
  2141. hlist_for_each_entry(ent, &pg->src_list, node)
  2142. if (timer_pending(&ent->timer))
  2143. ent->flags |= BR_SGRP_F_SEND;
  2144. memset(&src_ip, 0, sizeof(src_ip));
  2145. src_ip.proto = pg->key.addr.proto;
  2146. for (src_idx = 0; src_idx < nsrcs; src_idx++) {
  2147. memcpy(&src_ip.src, srcs + (src_idx * addr_size), addr_size);
  2148. ent = br_multicast_find_group_src(pg, &src_ip);
  2149. if (ent) {
  2150. if (timer_pending(&ent->timer)) {
  2151. ent->flags &= ~BR_SGRP_F_SEND;
  2152. to_send--;
  2153. }
  2154. } else {
  2155. ent = br_multicast_new_group_src(pg, &src_ip);
  2156. if (ent)
  2157. changed = true;
  2158. }
  2159. if (ent)
  2160. __grp_src_mod_timer(ent, now + br_multicast_gmi(brmctx));
  2161. }
  2162. if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
  2163. grec_type))
  2164. changed = true;
  2165. if (to_send)
  2166. __grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
  2167. __grp_send_query_and_rexmit(brmctx, pmctx, pg);
  2168. return changed;
  2169. }
  2170. static bool br_multicast_toin(struct net_bridge_mcast *brmctx,
  2171. struct net_bridge_mcast_port *pmctx,
  2172. struct net_bridge_port_group *pg, void *h_addr,
  2173. void *srcs, u32 nsrcs, size_t addr_size,
  2174. int grec_type)
  2175. {
  2176. bool changed = false;
  2177. switch (pg->filter_mode) {
  2178. case MCAST_INCLUDE:
  2179. changed = __grp_src_toin_incl(brmctx, pmctx, pg, h_addr, srcs,
  2180. nsrcs, addr_size, grec_type);
  2181. break;
  2182. case MCAST_EXCLUDE:
  2183. changed = __grp_src_toin_excl(brmctx, pmctx, pg, h_addr, srcs,
  2184. nsrcs, addr_size, grec_type);
  2185. break;
  2186. }
  2187. if (br_multicast_eht_should_del_pg(pg)) {
  2188. pg->flags |= MDB_PG_FLAGS_FAST_LEAVE;
  2189. br_multicast_find_del_pg(pg->key.port->br, pg);
  2190. /* a notification has already been sent and we shouldn't
  2191. * access pg after the delete so we have to return false
  2192. */
  2193. changed = false;
  2194. }
  2195. return changed;
  2196. }
  2197. /* State Msg type New state Actions
  2198. * INCLUDE (A) TO_EX (B) EXCLUDE (A*B,B-A) (B-A)=0
  2199. * Delete (A-B)
  2200. * Send Q(G,A*B)
  2201. * Group Timer=GMI
  2202. */
  2203. static void __grp_src_toex_incl(struct net_bridge_mcast *brmctx,
  2204. struct net_bridge_mcast_port *pmctx,
  2205. struct net_bridge_port_group *pg, void *h_addr,
  2206. void *srcs, u32 nsrcs, size_t addr_size,
  2207. int grec_type)
  2208. {
  2209. struct net_bridge_group_src *ent;
  2210. u32 src_idx, to_send = 0;
  2211. struct br_ip src_ip;
  2212. hlist_for_each_entry(ent, &pg->src_list, node)
  2213. ent->flags = (ent->flags & ~BR_SGRP_F_SEND) | BR_SGRP_F_DELETE;
  2214. memset(&src_ip, 0, sizeof(src_ip));
  2215. src_ip.proto = pg->key.addr.proto;
  2216. for (src_idx = 0; src_idx < nsrcs; src_idx++) {
  2217. memcpy(&src_ip.src, srcs + (src_idx * addr_size), addr_size);
  2218. ent = br_multicast_find_group_src(pg, &src_ip);
  2219. if (ent) {
  2220. ent->flags = (ent->flags & ~BR_SGRP_F_DELETE) |
  2221. BR_SGRP_F_SEND;
  2222. to_send++;
  2223. } else {
  2224. ent = br_multicast_new_group_src(pg, &src_ip);
  2225. }
  2226. if (ent)
  2227. br_multicast_fwd_src_handle(ent);
  2228. }
  2229. br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
  2230. grec_type);
  2231. __grp_src_delete_marked(pg);
  2232. if (to_send)
  2233. __grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
  2234. }
  2235. /* State Msg type New state Actions
  2236. * EXCLUDE (X,Y) TO_EX (A) EXCLUDE (A-Y,Y*A) (A-X-Y)=Group Timer
  2237. * Delete (X-A)
  2238. * Delete (Y-A)
  2239. * Send Q(G,A-Y)
  2240. * Group Timer=GMI
  2241. */
  2242. static bool __grp_src_toex_excl(struct net_bridge_mcast *brmctx,
  2243. struct net_bridge_mcast_port *pmctx,
  2244. struct net_bridge_port_group *pg, void *h_addr,
  2245. void *srcs, u32 nsrcs, size_t addr_size,
  2246. int grec_type)
  2247. {
  2248. struct net_bridge_group_src *ent;
  2249. u32 src_idx, to_send = 0;
  2250. bool changed = false;
  2251. struct br_ip src_ip;
  2252. hlist_for_each_entry(ent, &pg->src_list, node)
  2253. ent->flags = (ent->flags & ~BR_SGRP_F_SEND) | BR_SGRP_F_DELETE;
  2254. memset(&src_ip, 0, sizeof(src_ip));
  2255. src_ip.proto = pg->key.addr.proto;
  2256. for (src_idx = 0; src_idx < nsrcs; src_idx++) {
  2257. memcpy(&src_ip.src, srcs + (src_idx * addr_size), addr_size);
  2258. ent = br_multicast_find_group_src(pg, &src_ip);
  2259. if (ent) {
  2260. ent->flags &= ~BR_SGRP_F_DELETE;
  2261. } else {
  2262. ent = br_multicast_new_group_src(pg, &src_ip);
  2263. if (ent) {
  2264. __grp_src_mod_timer(ent, pg->timer.expires);
  2265. changed = true;
  2266. }
  2267. }
  2268. if (ent && timer_pending(&ent->timer)) {
  2269. ent->flags |= BR_SGRP_F_SEND;
  2270. to_send++;
  2271. }
  2272. }
  2273. if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
  2274. grec_type))
  2275. changed = true;
  2276. if (__grp_src_delete_marked(pg))
  2277. changed = true;
  2278. if (to_send)
  2279. __grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
  2280. return changed;
  2281. }
  2282. static bool br_multicast_toex(struct net_bridge_mcast *brmctx,
  2283. struct net_bridge_mcast_port *pmctx,
  2284. struct net_bridge_port_group *pg, void *h_addr,
  2285. void *srcs, u32 nsrcs, size_t addr_size,
  2286. int grec_type)
  2287. {
  2288. bool changed = false;
  2289. switch (pg->filter_mode) {
  2290. case MCAST_INCLUDE:
  2291. __grp_src_toex_incl(brmctx, pmctx, pg, h_addr, srcs, nsrcs,
  2292. addr_size, grec_type);
  2293. br_multicast_star_g_handle_mode(pg, MCAST_EXCLUDE);
  2294. changed = true;
  2295. break;
  2296. case MCAST_EXCLUDE:
  2297. changed = __grp_src_toex_excl(brmctx, pmctx, pg, h_addr, srcs,
  2298. nsrcs, addr_size, grec_type);
  2299. break;
  2300. }
  2301. pg->filter_mode = MCAST_EXCLUDE;
  2302. mod_timer(&pg->timer, jiffies + br_multicast_gmi(brmctx));
  2303. return changed;
  2304. }
  2305. /* State Msg type New state Actions
  2306. * INCLUDE (A) BLOCK (B) INCLUDE (A) Send Q(G,A*B)
  2307. */
  2308. static bool __grp_src_block_incl(struct net_bridge_mcast *brmctx,
  2309. struct net_bridge_mcast_port *pmctx,
  2310. struct net_bridge_port_group *pg, void *h_addr,
  2311. void *srcs, u32 nsrcs, size_t addr_size, int grec_type)
  2312. {
  2313. struct net_bridge_group_src *ent;
  2314. u32 src_idx, to_send = 0;
  2315. bool changed = false;
  2316. struct br_ip src_ip;
  2317. hlist_for_each_entry(ent, &pg->src_list, node)
  2318. ent->flags &= ~BR_SGRP_F_SEND;
  2319. memset(&src_ip, 0, sizeof(src_ip));
  2320. src_ip.proto = pg->key.addr.proto;
  2321. for (src_idx = 0; src_idx < nsrcs; src_idx++) {
  2322. memcpy(&src_ip.src, srcs + (src_idx * addr_size), addr_size);
  2323. ent = br_multicast_find_group_src(pg, &src_ip);
  2324. if (ent) {
  2325. ent->flags |= BR_SGRP_F_SEND;
  2326. to_send++;
  2327. }
  2328. }
  2329. if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
  2330. grec_type))
  2331. changed = true;
  2332. if (to_send)
  2333. __grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
  2334. return changed;
  2335. }
  2336. /* State Msg type New state Actions
  2337. * EXCLUDE (X,Y) BLOCK (A) EXCLUDE (X+(A-Y),Y) (A-X-Y)=Group Timer
  2338. * Send Q(G,A-Y)
  2339. */
  2340. static bool __grp_src_block_excl(struct net_bridge_mcast *brmctx,
  2341. struct net_bridge_mcast_port *pmctx,
  2342. struct net_bridge_port_group *pg, void *h_addr,
  2343. void *srcs, u32 nsrcs, size_t addr_size, int grec_type)
  2344. {
  2345. struct net_bridge_group_src *ent;
  2346. u32 src_idx, to_send = 0;
  2347. bool changed = false;
  2348. struct br_ip src_ip;
  2349. hlist_for_each_entry(ent, &pg->src_list, node)
  2350. ent->flags &= ~BR_SGRP_F_SEND;
  2351. memset(&src_ip, 0, sizeof(src_ip));
  2352. src_ip.proto = pg->key.addr.proto;
  2353. for (src_idx = 0; src_idx < nsrcs; src_idx++) {
  2354. memcpy(&src_ip.src, srcs + (src_idx * addr_size), addr_size);
  2355. ent = br_multicast_find_group_src(pg, &src_ip);
  2356. if (!ent) {
  2357. ent = br_multicast_new_group_src(pg, &src_ip);
  2358. if (ent) {
  2359. __grp_src_mod_timer(ent, pg->timer.expires);
  2360. changed = true;
  2361. }
  2362. }
  2363. if (ent && timer_pending(&ent->timer)) {
  2364. ent->flags |= BR_SGRP_F_SEND;
  2365. to_send++;
  2366. }
  2367. }
  2368. if (br_multicast_eht_handle(brmctx, pg, h_addr, srcs, nsrcs, addr_size,
  2369. grec_type))
  2370. changed = true;
  2371. if (to_send)
  2372. __grp_src_query_marked_and_rexmit(brmctx, pmctx, pg);
  2373. return changed;
  2374. }
  2375. static bool br_multicast_block(struct net_bridge_mcast *brmctx,
  2376. struct net_bridge_mcast_port *pmctx,
  2377. struct net_bridge_port_group *pg, void *h_addr,
  2378. void *srcs, u32 nsrcs, size_t addr_size, int grec_type)
  2379. {
  2380. bool changed = false;
  2381. switch (pg->filter_mode) {
  2382. case MCAST_INCLUDE:
  2383. changed = __grp_src_block_incl(brmctx, pmctx, pg, h_addr, srcs,
  2384. nsrcs, addr_size, grec_type);
  2385. break;
  2386. case MCAST_EXCLUDE:
  2387. changed = __grp_src_block_excl(brmctx, pmctx, pg, h_addr, srcs,
  2388. nsrcs, addr_size, grec_type);
  2389. break;
  2390. }
  2391. if ((pg->filter_mode == MCAST_INCLUDE && hlist_empty(&pg->src_list)) ||
  2392. br_multicast_eht_should_del_pg(pg)) {
  2393. if (br_multicast_eht_should_del_pg(pg))
  2394. pg->flags |= MDB_PG_FLAGS_FAST_LEAVE;
  2395. br_multicast_find_del_pg(pg->key.port->br, pg);
  2396. /* a notification has already been sent and we shouldn't
  2397. * access pg after the delete so we have to return false
  2398. */
  2399. changed = false;
  2400. }
  2401. return changed;
  2402. }
  2403. static struct net_bridge_port_group *
  2404. br_multicast_find_port(struct net_bridge_mdb_entry *mp,
  2405. struct net_bridge_port *p,
  2406. const unsigned char *src)
  2407. {
  2408. struct net_bridge *br __maybe_unused = mp->br;
  2409. struct net_bridge_port_group *pg;
  2410. for (pg = mlock_dereference(mp->ports, br);
  2411. pg;
  2412. pg = mlock_dereference(pg->next, br))
  2413. if (br_port_group_equal(pg, p, src))
  2414. return pg;
  2415. return NULL;
  2416. }
  2417. static int br_ip4_multicast_igmp3_report(struct net_bridge_mcast *brmctx,
  2418. struct net_bridge_mcast_port *pmctx,
  2419. struct sk_buff *skb,
  2420. u16 vid)
  2421. {
  2422. bool igmpv2 = brmctx->multicast_igmp_version == 2;
  2423. struct net_bridge_mdb_entry *mdst;
  2424. struct net_bridge_port_group *pg;
  2425. const unsigned char *src;
  2426. struct igmpv3_report *ih;
  2427. struct igmpv3_grec *grec;
  2428. int i, len, num, type;
  2429. __be32 group, *h_addr;
  2430. bool changed = false;
  2431. int err = 0;
  2432. u16 nsrcs;
  2433. ih = igmpv3_report_hdr(skb);
  2434. num = ntohs(ih->ngrec);
  2435. len = skb_transport_offset(skb) + sizeof(*ih);
  2436. for (i = 0; i < num; i++) {
  2437. len += sizeof(*grec);
  2438. if (!ip_mc_may_pull(skb, len))
  2439. return -EINVAL;
  2440. grec = (void *)(skb->data + len - sizeof(*grec));
  2441. group = grec->grec_mca;
  2442. type = grec->grec_type;
  2443. nsrcs = ntohs(grec->grec_nsrcs);
  2444. len += nsrcs * 4;
  2445. if (!ip_mc_may_pull(skb, len))
  2446. return -EINVAL;
  2447. switch (type) {
  2448. case IGMPV3_MODE_IS_INCLUDE:
  2449. case IGMPV3_MODE_IS_EXCLUDE:
  2450. case IGMPV3_CHANGE_TO_INCLUDE:
  2451. case IGMPV3_CHANGE_TO_EXCLUDE:
  2452. case IGMPV3_ALLOW_NEW_SOURCES:
  2453. case IGMPV3_BLOCK_OLD_SOURCES:
  2454. break;
  2455. default:
  2456. continue;
  2457. }
  2458. src = eth_hdr(skb)->h_source;
  2459. if (nsrcs == 0 &&
  2460. (type == IGMPV3_CHANGE_TO_INCLUDE ||
  2461. type == IGMPV3_MODE_IS_INCLUDE)) {
  2462. if (!pmctx || igmpv2) {
  2463. br_ip4_multicast_leave_group(brmctx, pmctx,
  2464. group, vid, src);
  2465. continue;
  2466. }
  2467. } else {
  2468. err = br_ip4_multicast_add_group(brmctx, pmctx, group,
  2469. vid, src, igmpv2);
  2470. if (err)
  2471. break;
  2472. }
  2473. if (!pmctx || igmpv2)
  2474. continue;
  2475. spin_lock(&brmctx->br->multicast_lock);
  2476. if (!br_multicast_ctx_should_use(brmctx, pmctx))
  2477. goto unlock_continue;
  2478. mdst = br_mdb_ip4_get(brmctx->br, group, vid);
  2479. if (!mdst)
  2480. goto unlock_continue;
  2481. pg = br_multicast_find_port(mdst, pmctx->port, src);
  2482. if (!pg || (pg->flags & MDB_PG_FLAGS_PERMANENT))
  2483. goto unlock_continue;
  2484. /* reload grec and host addr */
  2485. grec = (void *)(skb->data + len - sizeof(*grec) - (nsrcs * 4));
  2486. h_addr = &ip_hdr(skb)->saddr;
  2487. switch (type) {
  2488. case IGMPV3_ALLOW_NEW_SOURCES:
  2489. changed = br_multicast_isinc_allow(brmctx, pg, h_addr,
  2490. grec->grec_src,
  2491. nsrcs, sizeof(__be32), type);
  2492. break;
  2493. case IGMPV3_MODE_IS_INCLUDE:
  2494. changed = br_multicast_isinc_allow(brmctx, pg, h_addr,
  2495. grec->grec_src,
  2496. nsrcs, sizeof(__be32), type);
  2497. break;
  2498. case IGMPV3_MODE_IS_EXCLUDE:
  2499. changed = br_multicast_isexc(brmctx, pg, h_addr,
  2500. grec->grec_src,
  2501. nsrcs, sizeof(__be32), type);
  2502. break;
  2503. case IGMPV3_CHANGE_TO_INCLUDE:
  2504. changed = br_multicast_toin(brmctx, pmctx, pg, h_addr,
  2505. grec->grec_src,
  2506. nsrcs, sizeof(__be32), type);
  2507. break;
  2508. case IGMPV3_CHANGE_TO_EXCLUDE:
  2509. changed = br_multicast_toex(brmctx, pmctx, pg, h_addr,
  2510. grec->grec_src,
  2511. nsrcs, sizeof(__be32), type);
  2512. break;
  2513. case IGMPV3_BLOCK_OLD_SOURCES:
  2514. changed = br_multicast_block(brmctx, pmctx, pg, h_addr,
  2515. grec->grec_src,
  2516. nsrcs, sizeof(__be32), type);
  2517. break;
  2518. }
  2519. if (changed)
  2520. br_mdb_notify(brmctx->br->dev, mdst, pg, RTM_NEWMDB);
  2521. unlock_continue:
  2522. spin_unlock(&brmctx->br->multicast_lock);
  2523. }
  2524. return err;
  2525. }
  2526. #if IS_ENABLED(CONFIG_IPV6)
  2527. static int br_ip6_multicast_mld2_report(struct net_bridge_mcast *brmctx,
  2528. struct net_bridge_mcast_port *pmctx,
  2529. struct sk_buff *skb,
  2530. u16 vid)
  2531. {
  2532. bool mldv1 = brmctx->multicast_mld_version == 1;
  2533. struct net_bridge_mdb_entry *mdst;
  2534. struct net_bridge_port_group *pg;
  2535. unsigned int nsrcs_offset;
  2536. struct mld2_report *mld2r;
  2537. const unsigned char *src;
  2538. struct in6_addr *h_addr;
  2539. struct mld2_grec *grec;
  2540. unsigned int grec_len;
  2541. bool changed = false;
  2542. int i, len, num;
  2543. int err = 0;
  2544. if (!ipv6_mc_may_pull(skb, sizeof(*mld2r)))
  2545. return -EINVAL;
  2546. mld2r = (struct mld2_report *)icmp6_hdr(skb);
  2547. num = ntohs(mld2r->mld2r_ngrec);
  2548. len = skb_transport_offset(skb) + sizeof(*mld2r);
  2549. for (i = 0; i < num; i++) {
  2550. __be16 *_nsrcs, __nsrcs;
  2551. u16 nsrcs;
  2552. nsrcs_offset = len + offsetof(struct mld2_grec, grec_nsrcs);
  2553. if (skb_transport_offset(skb) + ipv6_transport_len(skb) <
  2554. nsrcs_offset + sizeof(__nsrcs))
  2555. return -EINVAL;
  2556. _nsrcs = skb_header_pointer(skb, nsrcs_offset,
  2557. sizeof(__nsrcs), &__nsrcs);
  2558. if (!_nsrcs)
  2559. return -EINVAL;
  2560. nsrcs = ntohs(*_nsrcs);
  2561. grec_len = struct_size(grec, grec_src, nsrcs);
  2562. if (!ipv6_mc_may_pull(skb, len + grec_len))
  2563. return -EINVAL;
  2564. grec = (struct mld2_grec *)(skb->data + len);
  2565. len += grec_len;
  2566. switch (grec->grec_type) {
  2567. case MLD2_MODE_IS_INCLUDE:
  2568. case MLD2_MODE_IS_EXCLUDE:
  2569. case MLD2_CHANGE_TO_INCLUDE:
  2570. case MLD2_CHANGE_TO_EXCLUDE:
  2571. case MLD2_ALLOW_NEW_SOURCES:
  2572. case MLD2_BLOCK_OLD_SOURCES:
  2573. break;
  2574. default:
  2575. continue;
  2576. }
  2577. src = eth_hdr(skb)->h_source;
  2578. if ((grec->grec_type == MLD2_CHANGE_TO_INCLUDE ||
  2579. grec->grec_type == MLD2_MODE_IS_INCLUDE) &&
  2580. nsrcs == 0) {
  2581. if (!pmctx || mldv1) {
  2582. br_ip6_multicast_leave_group(brmctx, pmctx,
  2583. &grec->grec_mca,
  2584. vid, src);
  2585. continue;
  2586. }
  2587. } else {
  2588. err = br_ip6_multicast_add_group(brmctx, pmctx,
  2589. &grec->grec_mca, vid,
  2590. src, mldv1);
  2591. if (err)
  2592. break;
  2593. }
  2594. if (!pmctx || mldv1)
  2595. continue;
  2596. spin_lock(&brmctx->br->multicast_lock);
  2597. if (!br_multicast_ctx_should_use(brmctx, pmctx))
  2598. goto unlock_continue;
  2599. mdst = br_mdb_ip6_get(brmctx->br, &grec->grec_mca, vid);
  2600. if (!mdst)
  2601. goto unlock_continue;
  2602. pg = br_multicast_find_port(mdst, pmctx->port, src);
  2603. if (!pg || (pg->flags & MDB_PG_FLAGS_PERMANENT))
  2604. goto unlock_continue;
  2605. h_addr = &ipv6_hdr(skb)->saddr;
  2606. switch (grec->grec_type) {
  2607. case MLD2_ALLOW_NEW_SOURCES:
  2608. changed = br_multicast_isinc_allow(brmctx, pg, h_addr,
  2609. grec->grec_src, nsrcs,
  2610. sizeof(struct in6_addr),
  2611. grec->grec_type);
  2612. break;
  2613. case MLD2_MODE_IS_INCLUDE:
  2614. changed = br_multicast_isinc_allow(brmctx, pg, h_addr,
  2615. grec->grec_src, nsrcs,
  2616. sizeof(struct in6_addr),
  2617. grec->grec_type);
  2618. break;
  2619. case MLD2_MODE_IS_EXCLUDE:
  2620. changed = br_multicast_isexc(brmctx, pg, h_addr,
  2621. grec->grec_src, nsrcs,
  2622. sizeof(struct in6_addr),
  2623. grec->grec_type);
  2624. break;
  2625. case MLD2_CHANGE_TO_INCLUDE:
  2626. changed = br_multicast_toin(brmctx, pmctx, pg, h_addr,
  2627. grec->grec_src, nsrcs,
  2628. sizeof(struct in6_addr),
  2629. grec->grec_type);
  2630. break;
  2631. case MLD2_CHANGE_TO_EXCLUDE:
  2632. changed = br_multicast_toex(brmctx, pmctx, pg, h_addr,
  2633. grec->grec_src, nsrcs,
  2634. sizeof(struct in6_addr),
  2635. grec->grec_type);
  2636. break;
  2637. case MLD2_BLOCK_OLD_SOURCES:
  2638. changed = br_multicast_block(brmctx, pmctx, pg, h_addr,
  2639. grec->grec_src, nsrcs,
  2640. sizeof(struct in6_addr),
  2641. grec->grec_type);
  2642. break;
  2643. }
  2644. if (changed)
  2645. br_mdb_notify(brmctx->br->dev, mdst, pg, RTM_NEWMDB);
  2646. unlock_continue:
  2647. spin_unlock(&brmctx->br->multicast_lock);
  2648. }
  2649. return err;
  2650. }
  2651. #endif
  2652. static bool br_multicast_select_querier(struct net_bridge_mcast *brmctx,
  2653. struct net_bridge_mcast_port *pmctx,
  2654. struct br_ip *saddr)
  2655. {
  2656. int port_ifidx = pmctx ? pmctx->port->dev->ifindex : 0;
  2657. struct timer_list *own_timer, *other_timer;
  2658. struct bridge_mcast_querier *querier;
  2659. switch (saddr->proto) {
  2660. case htons(ETH_P_IP):
  2661. querier = &brmctx->ip4_querier;
  2662. own_timer = &brmctx->ip4_own_query.timer;
  2663. other_timer = &brmctx->ip4_other_query.timer;
  2664. if (!querier->addr.src.ip4 ||
  2665. ntohl(saddr->src.ip4) <= ntohl(querier->addr.src.ip4))
  2666. goto update;
  2667. break;
  2668. #if IS_ENABLED(CONFIG_IPV6)
  2669. case htons(ETH_P_IPV6):
  2670. querier = &brmctx->ip6_querier;
  2671. own_timer = &brmctx->ip6_own_query.timer;
  2672. other_timer = &brmctx->ip6_other_query.timer;
  2673. if (ipv6_addr_cmp(&saddr->src.ip6, &querier->addr.src.ip6) <= 0)
  2674. goto update;
  2675. break;
  2676. #endif
  2677. default:
  2678. return false;
  2679. }
  2680. if (!timer_pending(own_timer) && !timer_pending(other_timer))
  2681. goto update;
  2682. return false;
  2683. update:
  2684. br_multicast_update_querier(brmctx, querier, port_ifidx, saddr);
  2685. return true;
  2686. }
  2687. static struct net_bridge_port *
  2688. __br_multicast_get_querier_port(struct net_bridge *br,
  2689. const struct bridge_mcast_querier *querier)
  2690. {
  2691. int port_ifidx = READ_ONCE(querier->port_ifidx);
  2692. struct net_bridge_port *p;
  2693. struct net_device *dev;
  2694. if (port_ifidx == 0)
  2695. return NULL;
  2696. dev = dev_get_by_index_rcu(dev_net(br->dev), port_ifidx);
  2697. if (!dev)
  2698. return NULL;
  2699. p = br_port_get_rtnl_rcu(dev);
  2700. if (!p || p->br != br)
  2701. return NULL;
  2702. return p;
  2703. }
  2704. size_t br_multicast_querier_state_size(void)
  2705. {
  2706. return nla_total_size(0) + /* nest attribute */
  2707. nla_total_size(sizeof(__be32)) + /* BRIDGE_QUERIER_IP_ADDRESS */
  2708. nla_total_size(sizeof(int)) + /* BRIDGE_QUERIER_IP_PORT */
  2709. nla_total_size_64bit(sizeof(u64)) + /* BRIDGE_QUERIER_IP_OTHER_TIMER */
  2710. #if IS_ENABLED(CONFIG_IPV6)
  2711. nla_total_size(sizeof(struct in6_addr)) + /* BRIDGE_QUERIER_IPV6_ADDRESS */
  2712. nla_total_size(sizeof(int)) + /* BRIDGE_QUERIER_IPV6_PORT */
  2713. nla_total_size_64bit(sizeof(u64)) + /* BRIDGE_QUERIER_IPV6_OTHER_TIMER */
  2714. #endif
  2715. 0;
  2716. }
  2717. /* protected by rtnl or rcu */
  2718. int br_multicast_dump_querier_state(struct sk_buff *skb,
  2719. const struct net_bridge_mcast *brmctx,
  2720. int nest_attr)
  2721. {
  2722. struct bridge_mcast_querier querier = {};
  2723. struct net_bridge_port *p;
  2724. struct nlattr *nest;
  2725. if (!br_opt_get(brmctx->br, BROPT_MULTICAST_ENABLED) ||
  2726. br_multicast_ctx_vlan_global_disabled(brmctx))
  2727. return 0;
  2728. nest = nla_nest_start(skb, nest_attr);
  2729. if (!nest)
  2730. return -EMSGSIZE;
  2731. rcu_read_lock();
  2732. if (!brmctx->multicast_querier &&
  2733. !timer_pending(&brmctx->ip4_other_query.timer))
  2734. goto out_v6;
  2735. br_multicast_read_querier(&brmctx->ip4_querier, &querier);
  2736. if (nla_put_in_addr(skb, BRIDGE_QUERIER_IP_ADDRESS,
  2737. querier.addr.src.ip4)) {
  2738. rcu_read_unlock();
  2739. goto out_err;
  2740. }
  2741. p = __br_multicast_get_querier_port(brmctx->br, &querier);
  2742. if (timer_pending(&brmctx->ip4_other_query.timer) &&
  2743. (nla_put_u64_64bit(skb, BRIDGE_QUERIER_IP_OTHER_TIMER,
  2744. br_timer_value(&brmctx->ip4_other_query.timer),
  2745. BRIDGE_QUERIER_PAD) ||
  2746. (p && nla_put_u32(skb, BRIDGE_QUERIER_IP_PORT, p->dev->ifindex)))) {
  2747. rcu_read_unlock();
  2748. goto out_err;
  2749. }
  2750. out_v6:
  2751. #if IS_ENABLED(CONFIG_IPV6)
  2752. if (!brmctx->multicast_querier &&
  2753. !timer_pending(&brmctx->ip6_other_query.timer))
  2754. goto out;
  2755. br_multicast_read_querier(&brmctx->ip6_querier, &querier);
  2756. if (nla_put_in6_addr(skb, BRIDGE_QUERIER_IPV6_ADDRESS,
  2757. &querier.addr.src.ip6)) {
  2758. rcu_read_unlock();
  2759. goto out_err;
  2760. }
  2761. p = __br_multicast_get_querier_port(brmctx->br, &querier);
  2762. if (timer_pending(&brmctx->ip6_other_query.timer) &&
  2763. (nla_put_u64_64bit(skb, BRIDGE_QUERIER_IPV6_OTHER_TIMER,
  2764. br_timer_value(&brmctx->ip6_other_query.timer),
  2765. BRIDGE_QUERIER_PAD) ||
  2766. (p && nla_put_u32(skb, BRIDGE_QUERIER_IPV6_PORT,
  2767. p->dev->ifindex)))) {
  2768. rcu_read_unlock();
  2769. goto out_err;
  2770. }
  2771. out:
  2772. #endif
  2773. rcu_read_unlock();
  2774. nla_nest_end(skb, nest);
  2775. if (!nla_len(nest))
  2776. nla_nest_cancel(skb, nest);
  2777. return 0;
  2778. out_err:
  2779. nla_nest_cancel(skb, nest);
  2780. return -EMSGSIZE;
  2781. }
  2782. static void
  2783. br_multicast_update_query_timer(struct net_bridge_mcast *brmctx,
  2784. struct bridge_mcast_other_query *query,
  2785. unsigned long max_delay)
  2786. {
  2787. if (!timer_pending(&query->timer))
  2788. mod_timer(&query->delay_timer, jiffies + max_delay);
  2789. mod_timer(&query->timer, jiffies + brmctx->multicast_querier_interval);
  2790. }
  2791. static void br_port_mc_router_state_change(struct net_bridge_port *p,
  2792. bool is_mc_router)
  2793. {
  2794. struct switchdev_attr attr = {
  2795. .orig_dev = p->dev,
  2796. .id = SWITCHDEV_ATTR_ID_PORT_MROUTER,
  2797. .flags = SWITCHDEV_F_DEFER,
  2798. .u.mrouter = is_mc_router,
  2799. };
  2800. switchdev_port_attr_set(p->dev, &attr, NULL);
  2801. }
  2802. static struct net_bridge_port *
  2803. br_multicast_rport_from_node(struct net_bridge_mcast *brmctx,
  2804. struct hlist_head *mc_router_list,
  2805. struct hlist_node *rlist)
  2806. {
  2807. struct net_bridge_mcast_port *pmctx;
  2808. #if IS_ENABLED(CONFIG_IPV6)
  2809. if (mc_router_list == &brmctx->ip6_mc_router_list)
  2810. pmctx = hlist_entry(rlist, struct net_bridge_mcast_port,
  2811. ip6_rlist);
  2812. else
  2813. #endif
  2814. pmctx = hlist_entry(rlist, struct net_bridge_mcast_port,
  2815. ip4_rlist);
  2816. return pmctx->port;
  2817. }
  2818. static struct hlist_node *
  2819. br_multicast_get_rport_slot(struct net_bridge_mcast *brmctx,
  2820. struct net_bridge_port *port,
  2821. struct hlist_head *mc_router_list)
  2822. {
  2823. struct hlist_node *slot = NULL;
  2824. struct net_bridge_port *p;
  2825. struct hlist_node *rlist;
  2826. hlist_for_each(rlist, mc_router_list) {
  2827. p = br_multicast_rport_from_node(brmctx, mc_router_list, rlist);
  2828. if ((unsigned long)port >= (unsigned long)p)
  2829. break;
  2830. slot = rlist;
  2831. }
  2832. return slot;
  2833. }
  2834. static bool br_multicast_no_router_otherpf(struct net_bridge_mcast_port *pmctx,
  2835. struct hlist_node *rnode)
  2836. {
  2837. #if IS_ENABLED(CONFIG_IPV6)
  2838. if (rnode != &pmctx->ip6_rlist)
  2839. return hlist_unhashed(&pmctx->ip6_rlist);
  2840. else
  2841. return hlist_unhashed(&pmctx->ip4_rlist);
  2842. #else
  2843. return true;
  2844. #endif
  2845. }
  2846. /* Add port to router_list
  2847. * list is maintained ordered by pointer value
  2848. * and locked by br->multicast_lock and RCU
  2849. */
  2850. static void br_multicast_add_router(struct net_bridge_mcast *brmctx,
  2851. struct net_bridge_mcast_port *pmctx,
  2852. struct hlist_node *rlist,
  2853. struct hlist_head *mc_router_list)
  2854. {
  2855. struct hlist_node *slot;
  2856. if (!hlist_unhashed(rlist))
  2857. return;
  2858. slot = br_multicast_get_rport_slot(brmctx, pmctx->port, mc_router_list);
  2859. if (slot)
  2860. hlist_add_behind_rcu(rlist, slot);
  2861. else
  2862. hlist_add_head_rcu(rlist, mc_router_list);
  2863. /* For backwards compatibility for now, only notify if we
  2864. * switched from no IPv4/IPv6 multicast router to a new
  2865. * IPv4 or IPv6 multicast router.
  2866. */
  2867. if (br_multicast_no_router_otherpf(pmctx, rlist)) {
  2868. br_rtr_notify(pmctx->port->br->dev, pmctx, RTM_NEWMDB);
  2869. br_port_mc_router_state_change(pmctx->port, true);
  2870. }
  2871. }
  2872. /* Add port to router_list
  2873. * list is maintained ordered by pointer value
  2874. * and locked by br->multicast_lock and RCU
  2875. */
  2876. static void br_ip4_multicast_add_router(struct net_bridge_mcast *brmctx,
  2877. struct net_bridge_mcast_port *pmctx)
  2878. {
  2879. br_multicast_add_router(brmctx, pmctx, &pmctx->ip4_rlist,
  2880. &brmctx->ip4_mc_router_list);
  2881. }
  2882. /* Add port to router_list
  2883. * list is maintained ordered by pointer value
  2884. * and locked by br->multicast_lock and RCU
  2885. */
  2886. static void br_ip6_multicast_add_router(struct net_bridge_mcast *brmctx,
  2887. struct net_bridge_mcast_port *pmctx)
  2888. {
  2889. #if IS_ENABLED(CONFIG_IPV6)
  2890. br_multicast_add_router(brmctx, pmctx, &pmctx->ip6_rlist,
  2891. &brmctx->ip6_mc_router_list);
  2892. #endif
  2893. }
  2894. static void br_multicast_mark_router(struct net_bridge_mcast *brmctx,
  2895. struct net_bridge_mcast_port *pmctx,
  2896. struct timer_list *timer,
  2897. struct hlist_node *rlist,
  2898. struct hlist_head *mc_router_list)
  2899. {
  2900. unsigned long now = jiffies;
  2901. if (!br_multicast_ctx_should_use(brmctx, pmctx))
  2902. return;
  2903. if (!pmctx) {
  2904. if (brmctx->multicast_router == MDB_RTR_TYPE_TEMP_QUERY) {
  2905. if (!br_ip4_multicast_is_router(brmctx) &&
  2906. !br_ip6_multicast_is_router(brmctx))
  2907. br_mc_router_state_change(brmctx->br, true);
  2908. mod_timer(timer, now + brmctx->multicast_querier_interval);
  2909. }
  2910. return;
  2911. }
  2912. if (pmctx->multicast_router == MDB_RTR_TYPE_DISABLED ||
  2913. pmctx->multicast_router == MDB_RTR_TYPE_PERM)
  2914. return;
  2915. br_multicast_add_router(brmctx, pmctx, rlist, mc_router_list);
  2916. mod_timer(timer, now + brmctx->multicast_querier_interval);
  2917. }
  2918. static void br_ip4_multicast_mark_router(struct net_bridge_mcast *brmctx,
  2919. struct net_bridge_mcast_port *pmctx)
  2920. {
  2921. struct timer_list *timer = &brmctx->ip4_mc_router_timer;
  2922. struct hlist_node *rlist = NULL;
  2923. if (pmctx) {
  2924. timer = &pmctx->ip4_mc_router_timer;
  2925. rlist = &pmctx->ip4_rlist;
  2926. }
  2927. br_multicast_mark_router(brmctx, pmctx, timer, rlist,
  2928. &brmctx->ip4_mc_router_list);
  2929. }
  2930. static void br_ip6_multicast_mark_router(struct net_bridge_mcast *brmctx,
  2931. struct net_bridge_mcast_port *pmctx)
  2932. {
  2933. #if IS_ENABLED(CONFIG_IPV6)
  2934. struct timer_list *timer = &brmctx->ip6_mc_router_timer;
  2935. struct hlist_node *rlist = NULL;
  2936. if (pmctx) {
  2937. timer = &pmctx->ip6_mc_router_timer;
  2938. rlist = &pmctx->ip6_rlist;
  2939. }
  2940. br_multicast_mark_router(brmctx, pmctx, timer, rlist,
  2941. &brmctx->ip6_mc_router_list);
  2942. #endif
  2943. }
  2944. static void
  2945. br_ip4_multicast_query_received(struct net_bridge_mcast *brmctx,
  2946. struct net_bridge_mcast_port *pmctx,
  2947. struct bridge_mcast_other_query *query,
  2948. struct br_ip *saddr,
  2949. unsigned long max_delay)
  2950. {
  2951. if (!br_multicast_select_querier(brmctx, pmctx, saddr))
  2952. return;
  2953. br_multicast_update_query_timer(brmctx, query, max_delay);
  2954. br_ip4_multicast_mark_router(brmctx, pmctx);
  2955. }
  2956. #if IS_ENABLED(CONFIG_IPV6)
  2957. static void
  2958. br_ip6_multicast_query_received(struct net_bridge_mcast *brmctx,
  2959. struct net_bridge_mcast_port *pmctx,
  2960. struct bridge_mcast_other_query *query,
  2961. struct br_ip *saddr,
  2962. unsigned long max_delay)
  2963. {
  2964. if (!br_multicast_select_querier(brmctx, pmctx, saddr))
  2965. return;
  2966. br_multicast_update_query_timer(brmctx, query, max_delay);
  2967. br_ip6_multicast_mark_router(brmctx, pmctx);
  2968. }
  2969. #endif
  2970. static void br_ip4_multicast_query(struct net_bridge_mcast *brmctx,
  2971. struct net_bridge_mcast_port *pmctx,
  2972. struct sk_buff *skb,
  2973. u16 vid)
  2974. {
  2975. unsigned int transport_len = ip_transport_len(skb);
  2976. const struct iphdr *iph = ip_hdr(skb);
  2977. struct igmphdr *ih = igmp_hdr(skb);
  2978. struct net_bridge_mdb_entry *mp;
  2979. struct igmpv3_query *ih3;
  2980. struct net_bridge_port_group *p;
  2981. struct net_bridge_port_group __rcu **pp;
  2982. struct br_ip saddr = {};
  2983. unsigned long max_delay;
  2984. unsigned long now = jiffies;
  2985. __be32 group;
  2986. spin_lock(&brmctx->br->multicast_lock);
  2987. if (!br_multicast_ctx_should_use(brmctx, pmctx))
  2988. goto out;
  2989. group = ih->group;
  2990. if (transport_len == sizeof(*ih)) {
  2991. max_delay = ih->code * (HZ / IGMP_TIMER_SCALE);
  2992. if (!max_delay) {
  2993. max_delay = 10 * HZ;
  2994. group = 0;
  2995. }
  2996. } else if (transport_len >= sizeof(*ih3)) {
  2997. ih3 = igmpv3_query_hdr(skb);
  2998. if (ih3->nsrcs ||
  2999. (brmctx->multicast_igmp_version == 3 && group &&
  3000. ih3->suppress))
  3001. goto out;
  3002. max_delay = ih3->code ?
  3003. IGMPV3_MRC(ih3->code) * (HZ / IGMP_TIMER_SCALE) : 1;
  3004. } else {
  3005. goto out;
  3006. }
  3007. if (!group) {
  3008. saddr.proto = htons(ETH_P_IP);
  3009. saddr.src.ip4 = iph->saddr;
  3010. br_ip4_multicast_query_received(brmctx, pmctx,
  3011. &brmctx->ip4_other_query,
  3012. &saddr, max_delay);
  3013. goto out;
  3014. }
  3015. mp = br_mdb_ip4_get(brmctx->br, group, vid);
  3016. if (!mp)
  3017. goto out;
  3018. max_delay *= brmctx->multicast_last_member_count;
  3019. if (mp->host_joined &&
  3020. (timer_pending(&mp->timer) ?
  3021. time_after(mp->timer.expires, now + max_delay) :
  3022. timer_delete_sync_try(&mp->timer) >= 0))
  3023. mod_timer(&mp->timer, now + max_delay);
  3024. for (pp = &mp->ports;
  3025. (p = mlock_dereference(*pp, brmctx->br)) != NULL;
  3026. pp = &p->next) {
  3027. if (timer_pending(&p->timer) ?
  3028. time_after(p->timer.expires, now + max_delay) :
  3029. timer_delete_sync_try(&p->timer) >= 0 &&
  3030. (brmctx->multicast_igmp_version == 2 ||
  3031. p->filter_mode == MCAST_EXCLUDE))
  3032. mod_timer(&p->timer, now + max_delay);
  3033. }
  3034. out:
  3035. spin_unlock(&brmctx->br->multicast_lock);
  3036. }
  3037. #if IS_ENABLED(CONFIG_IPV6)
  3038. static int br_ip6_multicast_query(struct net_bridge_mcast *brmctx,
  3039. struct net_bridge_mcast_port *pmctx,
  3040. struct sk_buff *skb,
  3041. u16 vid)
  3042. {
  3043. unsigned int transport_len = ipv6_transport_len(skb);
  3044. struct mld_msg *mld;
  3045. struct net_bridge_mdb_entry *mp;
  3046. struct mld2_query *mld2q;
  3047. struct net_bridge_port_group *p;
  3048. struct net_bridge_port_group __rcu **pp;
  3049. struct br_ip saddr = {};
  3050. unsigned long max_delay;
  3051. unsigned long now = jiffies;
  3052. unsigned int offset = skb_transport_offset(skb);
  3053. const struct in6_addr *group = NULL;
  3054. bool is_general_query;
  3055. int err = 0;
  3056. spin_lock(&brmctx->br->multicast_lock);
  3057. if (!br_multicast_ctx_should_use(brmctx, pmctx))
  3058. goto out;
  3059. if (transport_len == sizeof(*mld)) {
  3060. if (!pskb_may_pull(skb, offset + sizeof(*mld))) {
  3061. err = -EINVAL;
  3062. goto out;
  3063. }
  3064. mld = (struct mld_msg *) icmp6_hdr(skb);
  3065. max_delay = msecs_to_jiffies(ntohs(mld->mld_maxdelay));
  3066. if (max_delay)
  3067. group = &mld->mld_mca;
  3068. } else {
  3069. if (!pskb_may_pull(skb, offset + sizeof(*mld2q))) {
  3070. err = -EINVAL;
  3071. goto out;
  3072. }
  3073. mld2q = (struct mld2_query *)icmp6_hdr(skb);
  3074. if (!mld2q->mld2q_nsrcs)
  3075. group = &mld2q->mld2q_mca;
  3076. if (brmctx->multicast_mld_version == 2 &&
  3077. !ipv6_addr_any(&mld2q->mld2q_mca) &&
  3078. mld2q->mld2q_suppress)
  3079. goto out;
  3080. max_delay = max(msecs_to_jiffies(mldv2_mrc(mld2q)), 1UL);
  3081. }
  3082. is_general_query = group && ipv6_addr_any(group);
  3083. if (is_general_query) {
  3084. saddr.proto = htons(ETH_P_IPV6);
  3085. saddr.src.ip6 = ipv6_hdr(skb)->saddr;
  3086. br_ip6_multicast_query_received(brmctx, pmctx,
  3087. &brmctx->ip6_other_query,
  3088. &saddr, max_delay);
  3089. goto out;
  3090. } else if (!group) {
  3091. goto out;
  3092. }
  3093. mp = br_mdb_ip6_get(brmctx->br, group, vid);
  3094. if (!mp)
  3095. goto out;
  3096. max_delay *= brmctx->multicast_last_member_count;
  3097. if (mp->host_joined &&
  3098. (timer_pending(&mp->timer) ?
  3099. time_after(mp->timer.expires, now + max_delay) :
  3100. timer_delete_sync_try(&mp->timer) >= 0))
  3101. mod_timer(&mp->timer, now + max_delay);
  3102. for (pp = &mp->ports;
  3103. (p = mlock_dereference(*pp, brmctx->br)) != NULL;
  3104. pp = &p->next) {
  3105. if (timer_pending(&p->timer) ?
  3106. time_after(p->timer.expires, now + max_delay) :
  3107. timer_delete_sync_try(&p->timer) >= 0 &&
  3108. (brmctx->multicast_mld_version == 1 ||
  3109. p->filter_mode == MCAST_EXCLUDE))
  3110. mod_timer(&p->timer, now + max_delay);
  3111. }
  3112. out:
  3113. spin_unlock(&brmctx->br->multicast_lock);
  3114. return err;
  3115. }
  3116. #endif
  3117. static void
  3118. br_multicast_leave_group(struct net_bridge_mcast *brmctx,
  3119. struct net_bridge_mcast_port *pmctx,
  3120. struct br_ip *group,
  3121. struct bridge_mcast_other_query *other_query,
  3122. struct bridge_mcast_own_query *own_query,
  3123. const unsigned char *src)
  3124. {
  3125. struct net_bridge_mdb_entry *mp;
  3126. struct net_bridge_port_group *p;
  3127. unsigned long now;
  3128. unsigned long time;
  3129. spin_lock(&brmctx->br->multicast_lock);
  3130. if (!br_multicast_ctx_should_use(brmctx, pmctx))
  3131. goto out;
  3132. mp = br_mdb_ip_get(brmctx->br, group);
  3133. if (!mp)
  3134. goto out;
  3135. if (pmctx && (pmctx->port->flags & BR_MULTICAST_FAST_LEAVE)) {
  3136. struct net_bridge_port_group __rcu **pp;
  3137. for (pp = &mp->ports;
  3138. (p = mlock_dereference(*pp, brmctx->br)) != NULL;
  3139. pp = &p->next) {
  3140. if (!br_port_group_equal(p, pmctx->port, src))
  3141. continue;
  3142. if (p->flags & MDB_PG_FLAGS_PERMANENT)
  3143. break;
  3144. p->flags |= MDB_PG_FLAGS_FAST_LEAVE;
  3145. br_multicast_del_pg(mp, p, pp);
  3146. }
  3147. goto out;
  3148. }
  3149. if (timer_pending(&other_query->timer))
  3150. goto out;
  3151. if (brmctx->multicast_querier) {
  3152. __br_multicast_send_query(brmctx, pmctx, NULL, NULL, &mp->addr,
  3153. false, 0, NULL);
  3154. time = jiffies + brmctx->multicast_last_member_count *
  3155. brmctx->multicast_last_member_interval;
  3156. mod_timer(&own_query->timer, time);
  3157. for (p = mlock_dereference(mp->ports, brmctx->br);
  3158. p != NULL && pmctx != NULL;
  3159. p = mlock_dereference(p->next, brmctx->br)) {
  3160. if (!br_port_group_equal(p, pmctx->port, src))
  3161. continue;
  3162. if (!hlist_unhashed(&p->mglist) &&
  3163. (timer_pending(&p->timer) ?
  3164. time_after(p->timer.expires, time) :
  3165. timer_delete_sync_try(&p->timer) >= 0)) {
  3166. mod_timer(&p->timer, time);
  3167. }
  3168. break;
  3169. }
  3170. }
  3171. now = jiffies;
  3172. time = now + brmctx->multicast_last_member_count *
  3173. brmctx->multicast_last_member_interval;
  3174. if (!pmctx) {
  3175. if (mp->host_joined &&
  3176. (timer_pending(&mp->timer) ?
  3177. time_after(mp->timer.expires, time) :
  3178. timer_delete_sync_try(&mp->timer) >= 0)) {
  3179. mod_timer(&mp->timer, time);
  3180. }
  3181. goto out;
  3182. }
  3183. for (p = mlock_dereference(mp->ports, brmctx->br);
  3184. p != NULL;
  3185. p = mlock_dereference(p->next, brmctx->br)) {
  3186. if (p->key.port != pmctx->port)
  3187. continue;
  3188. if (!hlist_unhashed(&p->mglist) &&
  3189. (timer_pending(&p->timer) ?
  3190. time_after(p->timer.expires, time) :
  3191. timer_delete_sync_try(&p->timer) >= 0)) {
  3192. mod_timer(&p->timer, time);
  3193. }
  3194. break;
  3195. }
  3196. out:
  3197. spin_unlock(&brmctx->br->multicast_lock);
  3198. }
  3199. static void br_ip4_multicast_leave_group(struct net_bridge_mcast *brmctx,
  3200. struct net_bridge_mcast_port *pmctx,
  3201. __be32 group,
  3202. __u16 vid,
  3203. const unsigned char *src)
  3204. {
  3205. struct br_ip br_group;
  3206. struct bridge_mcast_own_query *own_query;
  3207. if (ipv4_is_local_multicast(group))
  3208. return;
  3209. own_query = pmctx ? &pmctx->ip4_own_query : &brmctx->ip4_own_query;
  3210. memset(&br_group, 0, sizeof(br_group));
  3211. br_group.dst.ip4 = group;
  3212. br_group.proto = htons(ETH_P_IP);
  3213. br_group.vid = vid;
  3214. br_multicast_leave_group(brmctx, pmctx, &br_group,
  3215. &brmctx->ip4_other_query,
  3216. own_query, src);
  3217. }
  3218. #if IS_ENABLED(CONFIG_IPV6)
  3219. static void br_ip6_multicast_leave_group(struct net_bridge_mcast *brmctx,
  3220. struct net_bridge_mcast_port *pmctx,
  3221. const struct in6_addr *group,
  3222. __u16 vid,
  3223. const unsigned char *src)
  3224. {
  3225. struct br_ip br_group;
  3226. struct bridge_mcast_own_query *own_query;
  3227. if (ipv6_addr_is_ll_all_nodes(group))
  3228. return;
  3229. own_query = pmctx ? &pmctx->ip6_own_query : &brmctx->ip6_own_query;
  3230. memset(&br_group, 0, sizeof(br_group));
  3231. br_group.dst.ip6 = *group;
  3232. br_group.proto = htons(ETH_P_IPV6);
  3233. br_group.vid = vid;
  3234. br_multicast_leave_group(brmctx, pmctx, &br_group,
  3235. &brmctx->ip6_other_query,
  3236. own_query, src);
  3237. }
  3238. #endif
  3239. static void br_multicast_err_count(const struct net_bridge *br,
  3240. const struct net_bridge_port *p,
  3241. __be16 proto)
  3242. {
  3243. struct bridge_mcast_stats __percpu *stats;
  3244. struct bridge_mcast_stats *pstats;
  3245. if (!br_opt_get(br, BROPT_MULTICAST_STATS_ENABLED))
  3246. return;
  3247. if (p)
  3248. stats = p->mcast_stats;
  3249. else
  3250. stats = br->mcast_stats;
  3251. if (WARN_ON(!stats))
  3252. return;
  3253. pstats = this_cpu_ptr(stats);
  3254. u64_stats_update_begin(&pstats->syncp);
  3255. switch (proto) {
  3256. case htons(ETH_P_IP):
  3257. pstats->mstats.igmp_parse_errors++;
  3258. break;
  3259. #if IS_ENABLED(CONFIG_IPV6)
  3260. case htons(ETH_P_IPV6):
  3261. pstats->mstats.mld_parse_errors++;
  3262. break;
  3263. #endif
  3264. }
  3265. u64_stats_update_end(&pstats->syncp);
  3266. }
  3267. static void br_multicast_pim(struct net_bridge_mcast *brmctx,
  3268. struct net_bridge_mcast_port *pmctx,
  3269. const struct sk_buff *skb)
  3270. {
  3271. unsigned int offset = skb_transport_offset(skb);
  3272. struct pimhdr *pimhdr, _pimhdr;
  3273. pimhdr = skb_header_pointer(skb, offset, sizeof(_pimhdr), &_pimhdr);
  3274. if (!pimhdr || pim_hdr_version(pimhdr) != PIM_VERSION ||
  3275. pim_hdr_type(pimhdr) != PIM_TYPE_HELLO)
  3276. return;
  3277. spin_lock(&brmctx->br->multicast_lock);
  3278. br_ip4_multicast_mark_router(brmctx, pmctx);
  3279. spin_unlock(&brmctx->br->multicast_lock);
  3280. }
  3281. static int br_ip4_multicast_mrd_rcv(struct net_bridge_mcast *brmctx,
  3282. struct net_bridge_mcast_port *pmctx,
  3283. struct sk_buff *skb)
  3284. {
  3285. if (ip_hdr(skb)->protocol != IPPROTO_IGMP ||
  3286. igmp_hdr(skb)->type != IGMP_MRDISC_ADV)
  3287. return -ENOMSG;
  3288. spin_lock(&brmctx->br->multicast_lock);
  3289. br_ip4_multicast_mark_router(brmctx, pmctx);
  3290. spin_unlock(&brmctx->br->multicast_lock);
  3291. return 0;
  3292. }
  3293. static int br_multicast_ipv4_rcv(struct net_bridge_mcast *brmctx,
  3294. struct net_bridge_mcast_port *pmctx,
  3295. struct sk_buff *skb,
  3296. u16 vid)
  3297. {
  3298. struct net_bridge_port *p = pmctx ? pmctx->port : NULL;
  3299. const unsigned char *src;
  3300. struct igmphdr *ih;
  3301. int err;
  3302. err = ip_mc_check_igmp(skb);
  3303. if (err == -ENOMSG) {
  3304. if (!ipv4_is_local_multicast(ip_hdr(skb)->daddr)) {
  3305. BR_INPUT_SKB_CB(skb)->mrouters_only = 1;
  3306. } else if (pim_ipv4_all_pim_routers(ip_hdr(skb)->daddr)) {
  3307. if (ip_hdr(skb)->protocol == IPPROTO_PIM)
  3308. br_multicast_pim(brmctx, pmctx, skb);
  3309. } else if (ipv4_is_all_snoopers(ip_hdr(skb)->daddr)) {
  3310. br_ip4_multicast_mrd_rcv(brmctx, pmctx, skb);
  3311. }
  3312. return 0;
  3313. } else if (err < 0) {
  3314. br_multicast_err_count(brmctx->br, p, skb->protocol);
  3315. return err;
  3316. }
  3317. ih = igmp_hdr(skb);
  3318. src = eth_hdr(skb)->h_source;
  3319. BR_INPUT_SKB_CB(skb)->igmp = ih->type;
  3320. switch (ih->type) {
  3321. case IGMP_HOST_MEMBERSHIP_REPORT:
  3322. case IGMPV2_HOST_MEMBERSHIP_REPORT:
  3323. BR_INPUT_SKB_CB(skb)->mrouters_only = 1;
  3324. err = br_ip4_multicast_add_group(brmctx, pmctx, ih->group, vid,
  3325. src, true);
  3326. break;
  3327. case IGMPV3_HOST_MEMBERSHIP_REPORT:
  3328. err = br_ip4_multicast_igmp3_report(brmctx, pmctx, skb, vid);
  3329. break;
  3330. case IGMP_HOST_MEMBERSHIP_QUERY:
  3331. br_ip4_multicast_query(brmctx, pmctx, skb, vid);
  3332. break;
  3333. case IGMP_HOST_LEAVE_MESSAGE:
  3334. br_ip4_multicast_leave_group(brmctx, pmctx, ih->group, vid, src);
  3335. break;
  3336. }
  3337. br_multicast_count(brmctx->br, p, skb, BR_INPUT_SKB_CB(skb)->igmp,
  3338. BR_MCAST_DIR_RX);
  3339. return err;
  3340. }
  3341. #if IS_ENABLED(CONFIG_IPV6)
  3342. static void br_ip6_multicast_mrd_rcv(struct net_bridge_mcast *brmctx,
  3343. struct net_bridge_mcast_port *pmctx,
  3344. struct sk_buff *skb)
  3345. {
  3346. if (icmp6_hdr(skb)->icmp6_type != ICMPV6_MRDISC_ADV)
  3347. return;
  3348. spin_lock(&brmctx->br->multicast_lock);
  3349. br_ip6_multicast_mark_router(brmctx, pmctx);
  3350. spin_unlock(&brmctx->br->multicast_lock);
  3351. }
  3352. static int br_multicast_ipv6_rcv(struct net_bridge_mcast *brmctx,
  3353. struct net_bridge_mcast_port *pmctx,
  3354. struct sk_buff *skb,
  3355. u16 vid)
  3356. {
  3357. struct net_bridge_port *p = pmctx ? pmctx->port : NULL;
  3358. const unsigned char *src;
  3359. struct mld_msg *mld;
  3360. int err;
  3361. err = ipv6_mc_check_mld(skb);
  3362. if (err == -ENOMSG || err == -ENODATA) {
  3363. if (!ipv6_addr_is_ll_all_nodes(&ipv6_hdr(skb)->daddr))
  3364. BR_INPUT_SKB_CB(skb)->mrouters_only = 1;
  3365. if (err == -ENODATA &&
  3366. ipv6_addr_is_all_snoopers(&ipv6_hdr(skb)->daddr))
  3367. br_ip6_multicast_mrd_rcv(brmctx, pmctx, skb);
  3368. return 0;
  3369. } else if (err < 0) {
  3370. br_multicast_err_count(brmctx->br, p, skb->protocol);
  3371. return err;
  3372. }
  3373. mld = (struct mld_msg *)skb_transport_header(skb);
  3374. BR_INPUT_SKB_CB(skb)->igmp = mld->mld_type;
  3375. switch (mld->mld_type) {
  3376. case ICMPV6_MGM_REPORT:
  3377. src = eth_hdr(skb)->h_source;
  3378. BR_INPUT_SKB_CB(skb)->mrouters_only = 1;
  3379. err = br_ip6_multicast_add_group(brmctx, pmctx, &mld->mld_mca,
  3380. vid, src, true);
  3381. break;
  3382. case ICMPV6_MLD2_REPORT:
  3383. err = br_ip6_multicast_mld2_report(brmctx, pmctx, skb, vid);
  3384. break;
  3385. case ICMPV6_MGM_QUERY:
  3386. err = br_ip6_multicast_query(brmctx, pmctx, skb, vid);
  3387. break;
  3388. case ICMPV6_MGM_REDUCTION:
  3389. src = eth_hdr(skb)->h_source;
  3390. br_ip6_multicast_leave_group(brmctx, pmctx, &mld->mld_mca, vid,
  3391. src);
  3392. break;
  3393. }
  3394. br_multicast_count(brmctx->br, p, skb, BR_INPUT_SKB_CB(skb)->igmp,
  3395. BR_MCAST_DIR_RX);
  3396. return err;
  3397. }
  3398. #endif
  3399. int br_multicast_rcv(struct net_bridge_mcast **brmctx,
  3400. struct net_bridge_mcast_port **pmctx,
  3401. struct net_bridge_vlan *vlan,
  3402. struct sk_buff *skb, u16 vid)
  3403. {
  3404. int ret = 0;
  3405. BR_INPUT_SKB_CB(skb)->igmp = 0;
  3406. BR_INPUT_SKB_CB(skb)->mrouters_only = 0;
  3407. if (!br_opt_get((*brmctx)->br, BROPT_MULTICAST_ENABLED))
  3408. return 0;
  3409. if (br_opt_get((*brmctx)->br, BROPT_MCAST_VLAN_SNOOPING_ENABLED) && vlan) {
  3410. const struct net_bridge_vlan *masterv;
  3411. /* the vlan has the master flag set only when transmitting
  3412. * through the bridge device
  3413. */
  3414. if (br_vlan_is_master(vlan)) {
  3415. masterv = vlan;
  3416. *brmctx = &vlan->br_mcast_ctx;
  3417. *pmctx = NULL;
  3418. } else {
  3419. masterv = vlan->brvlan;
  3420. *brmctx = &vlan->brvlan->br_mcast_ctx;
  3421. *pmctx = &vlan->port_mcast_ctx;
  3422. }
  3423. if (!(masterv->priv_flags & BR_VLFLAG_GLOBAL_MCAST_ENABLED))
  3424. return 0;
  3425. }
  3426. switch (skb->protocol) {
  3427. case htons(ETH_P_IP):
  3428. ret = br_multicast_ipv4_rcv(*brmctx, *pmctx, skb, vid);
  3429. break;
  3430. #if IS_ENABLED(CONFIG_IPV6)
  3431. case htons(ETH_P_IPV6):
  3432. ret = br_multicast_ipv6_rcv(*brmctx, *pmctx, skb, vid);
  3433. break;
  3434. #endif
  3435. }
  3436. return ret;
  3437. }
  3438. static void br_multicast_query_expired(struct net_bridge_mcast *brmctx,
  3439. struct bridge_mcast_own_query *query)
  3440. {
  3441. spin_lock(&brmctx->br->multicast_lock);
  3442. if (br_multicast_ctx_vlan_disabled(brmctx))
  3443. goto out;
  3444. if (query->startup_sent < brmctx->multicast_startup_query_count)
  3445. query->startup_sent++;
  3446. br_multicast_send_query(brmctx, NULL, query);
  3447. out:
  3448. spin_unlock(&brmctx->br->multicast_lock);
  3449. }
  3450. static void br_ip4_multicast_query_expired(struct timer_list *t)
  3451. {
  3452. struct net_bridge_mcast *brmctx = timer_container_of(brmctx, t,
  3453. ip4_own_query.timer);
  3454. br_multicast_query_expired(brmctx, &brmctx->ip4_own_query);
  3455. }
  3456. #if IS_ENABLED(CONFIG_IPV6)
  3457. static void br_ip6_multicast_query_expired(struct timer_list *t)
  3458. {
  3459. struct net_bridge_mcast *brmctx = timer_container_of(brmctx, t,
  3460. ip6_own_query.timer);
  3461. br_multicast_query_expired(brmctx, &brmctx->ip6_own_query);
  3462. }
  3463. #endif
  3464. static void br_multicast_gc_work(struct work_struct *work)
  3465. {
  3466. struct net_bridge *br = container_of(work, struct net_bridge,
  3467. mcast_gc_work);
  3468. HLIST_HEAD(deleted_head);
  3469. spin_lock_bh(&br->multicast_lock);
  3470. hlist_move_list(&br->mcast_gc_list, &deleted_head);
  3471. spin_unlock_bh(&br->multicast_lock);
  3472. br_multicast_gc(&deleted_head);
  3473. }
  3474. void br_multicast_ctx_init(struct net_bridge *br,
  3475. struct net_bridge_vlan *vlan,
  3476. struct net_bridge_mcast *brmctx)
  3477. {
  3478. brmctx->br = br;
  3479. brmctx->vlan = vlan;
  3480. brmctx->multicast_router = MDB_RTR_TYPE_TEMP_QUERY;
  3481. brmctx->multicast_last_member_count = 2;
  3482. brmctx->multicast_startup_query_count = 2;
  3483. brmctx->multicast_last_member_interval = HZ;
  3484. brmctx->multicast_query_response_interval = 10 * HZ;
  3485. brmctx->multicast_startup_query_interval = 125 * HZ / 4;
  3486. brmctx->multicast_query_interval = 125 * HZ;
  3487. brmctx->multicast_querier_interval = 255 * HZ;
  3488. brmctx->multicast_membership_interval = 260 * HZ;
  3489. brmctx->ip4_querier.port_ifidx = 0;
  3490. seqcount_spinlock_init(&brmctx->ip4_querier.seq, &br->multicast_lock);
  3491. brmctx->multicast_igmp_version = 2;
  3492. #if IS_ENABLED(CONFIG_IPV6)
  3493. brmctx->multicast_mld_version = 1;
  3494. brmctx->ip6_querier.port_ifidx = 0;
  3495. seqcount_spinlock_init(&brmctx->ip6_querier.seq, &br->multicast_lock);
  3496. #endif
  3497. timer_setup(&brmctx->ip4_mc_router_timer,
  3498. br_ip4_multicast_local_router_expired, 0);
  3499. timer_setup(&brmctx->ip4_other_query.timer,
  3500. br_ip4_multicast_querier_expired, 0);
  3501. timer_setup(&brmctx->ip4_other_query.delay_timer,
  3502. br_multicast_query_delay_expired, 0);
  3503. timer_setup(&brmctx->ip4_own_query.timer,
  3504. br_ip4_multicast_query_expired, 0);
  3505. #if IS_ENABLED(CONFIG_IPV6)
  3506. timer_setup(&brmctx->ip6_mc_router_timer,
  3507. br_ip6_multicast_local_router_expired, 0);
  3508. timer_setup(&brmctx->ip6_other_query.timer,
  3509. br_ip6_multicast_querier_expired, 0);
  3510. timer_setup(&brmctx->ip6_other_query.delay_timer,
  3511. br_multicast_query_delay_expired, 0);
  3512. timer_setup(&brmctx->ip6_own_query.timer,
  3513. br_ip6_multicast_query_expired, 0);
  3514. #endif
  3515. }
  3516. void br_multicast_ctx_deinit(struct net_bridge_mcast *brmctx)
  3517. {
  3518. __br_multicast_stop(brmctx);
  3519. }
  3520. void br_multicast_init(struct net_bridge *br)
  3521. {
  3522. br->hash_max = BR_MULTICAST_DEFAULT_HASH_MAX;
  3523. br_multicast_ctx_init(br, NULL, &br->multicast_ctx);
  3524. br_opt_toggle(br, BROPT_MULTICAST_ENABLED, true);
  3525. br_opt_toggle(br, BROPT_HAS_IPV6_ADDR, true);
  3526. spin_lock_init(&br->multicast_lock);
  3527. INIT_HLIST_HEAD(&br->mdb_list);
  3528. INIT_HLIST_HEAD(&br->mcast_gc_list);
  3529. INIT_WORK(&br->mcast_gc_work, br_multicast_gc_work);
  3530. }
  3531. static void br_ip4_multicast_join_snoopers(struct net_bridge *br)
  3532. {
  3533. struct in_device *in_dev = in_dev_get(br->dev);
  3534. if (!in_dev)
  3535. return;
  3536. __ip_mc_inc_group(in_dev, htonl(INADDR_ALLSNOOPERS_GROUP), GFP_ATOMIC);
  3537. in_dev_put(in_dev);
  3538. }
  3539. #if IS_ENABLED(CONFIG_IPV6)
  3540. static void br_ip6_multicast_join_snoopers(struct net_bridge *br)
  3541. {
  3542. struct in6_addr addr;
  3543. ipv6_addr_set(&addr, htonl(0xff020000), 0, 0, htonl(0x6a));
  3544. ipv6_dev_mc_inc(br->dev, &addr);
  3545. }
  3546. #else
  3547. static inline void br_ip6_multicast_join_snoopers(struct net_bridge *br)
  3548. {
  3549. }
  3550. #endif
  3551. void br_multicast_join_snoopers(struct net_bridge *br)
  3552. {
  3553. br_ip4_multicast_join_snoopers(br);
  3554. br_ip6_multicast_join_snoopers(br);
  3555. }
  3556. static void br_ip4_multicast_leave_snoopers(struct net_bridge *br)
  3557. {
  3558. struct in_device *in_dev = in_dev_get(br->dev);
  3559. if (WARN_ON(!in_dev))
  3560. return;
  3561. __ip_mc_dec_group(in_dev, htonl(INADDR_ALLSNOOPERS_GROUP), GFP_ATOMIC);
  3562. in_dev_put(in_dev);
  3563. }
  3564. #if IS_ENABLED(CONFIG_IPV6)
  3565. static void br_ip6_multicast_leave_snoopers(struct net_bridge *br)
  3566. {
  3567. struct in6_addr addr;
  3568. ipv6_addr_set(&addr, htonl(0xff020000), 0, 0, htonl(0x6a));
  3569. ipv6_dev_mc_dec(br->dev, &addr);
  3570. }
  3571. #else
  3572. static inline void br_ip6_multicast_leave_snoopers(struct net_bridge *br)
  3573. {
  3574. }
  3575. #endif
  3576. void br_multicast_leave_snoopers(struct net_bridge *br)
  3577. {
  3578. br_ip4_multicast_leave_snoopers(br);
  3579. br_ip6_multicast_leave_snoopers(br);
  3580. }
  3581. static void __br_multicast_open_query(struct net_bridge *br,
  3582. struct bridge_mcast_own_query *query)
  3583. {
  3584. query->startup_sent = 0;
  3585. if (!br_opt_get(br, BROPT_MULTICAST_ENABLED))
  3586. return;
  3587. mod_timer(&query->timer, jiffies);
  3588. }
  3589. static void __br_multicast_open(struct net_bridge_mcast *brmctx)
  3590. {
  3591. __br_multicast_open_query(brmctx->br, &brmctx->ip4_own_query);
  3592. #if IS_ENABLED(CONFIG_IPV6)
  3593. __br_multicast_open_query(brmctx->br, &brmctx->ip6_own_query);
  3594. #endif
  3595. }
  3596. void br_multicast_open(struct net_bridge *br)
  3597. {
  3598. ASSERT_RTNL();
  3599. if (br_opt_get(br, BROPT_MCAST_VLAN_SNOOPING_ENABLED)) {
  3600. struct net_bridge_vlan_group *vg;
  3601. struct net_bridge_vlan *vlan;
  3602. vg = br_vlan_group(br);
  3603. if (vg) {
  3604. list_for_each_entry(vlan, &vg->vlan_list, vlist) {
  3605. struct net_bridge_mcast *brmctx;
  3606. brmctx = &vlan->br_mcast_ctx;
  3607. if (br_vlan_is_brentry(vlan) &&
  3608. !br_multicast_ctx_vlan_disabled(brmctx))
  3609. __br_multicast_open(&vlan->br_mcast_ctx);
  3610. }
  3611. }
  3612. } else {
  3613. __br_multicast_open(&br->multicast_ctx);
  3614. }
  3615. }
  3616. static void __br_multicast_stop(struct net_bridge_mcast *brmctx)
  3617. {
  3618. timer_delete_sync(&brmctx->ip4_mc_router_timer);
  3619. timer_delete_sync(&brmctx->ip4_other_query.timer);
  3620. timer_delete_sync(&brmctx->ip4_other_query.delay_timer);
  3621. timer_delete_sync(&brmctx->ip4_own_query.timer);
  3622. #if IS_ENABLED(CONFIG_IPV6)
  3623. timer_delete_sync(&brmctx->ip6_mc_router_timer);
  3624. timer_delete_sync(&brmctx->ip6_other_query.timer);
  3625. timer_delete_sync(&brmctx->ip6_other_query.delay_timer);
  3626. timer_delete_sync(&brmctx->ip6_own_query.timer);
  3627. #endif
  3628. }
  3629. void br_multicast_update_vlan_mcast_ctx(struct net_bridge_vlan *v, u8 state)
  3630. {
  3631. #if IS_ENABLED(CONFIG_BRIDGE_VLAN_FILTERING)
  3632. struct net_bridge *br;
  3633. if (!br_vlan_should_use(v))
  3634. return;
  3635. if (br_vlan_is_master(v))
  3636. return;
  3637. br = v->port->br;
  3638. if (!br_opt_get(br, BROPT_MCAST_VLAN_SNOOPING_ENABLED))
  3639. return;
  3640. if (br_vlan_state_allowed(state, true))
  3641. br_multicast_enable_port_ctx(&v->port_mcast_ctx);
  3642. /* Multicast is not disabled for the vlan when it goes in
  3643. * blocking state because the timers will expire and stop by
  3644. * themselves without sending more queries.
  3645. */
  3646. #endif
  3647. }
  3648. void br_multicast_toggle_one_vlan(struct net_bridge_vlan *vlan, bool on)
  3649. {
  3650. struct net_bridge *br;
  3651. /* it's okay to check for the flag without the multicast lock because it
  3652. * can only change under RTNL -> multicast_lock, we need the latter to
  3653. * sync with timers and packets
  3654. */
  3655. if (on == !!(vlan->priv_flags & BR_VLFLAG_MCAST_ENABLED))
  3656. return;
  3657. if (br_vlan_is_master(vlan)) {
  3658. br = vlan->br;
  3659. if (!br_vlan_is_brentry(vlan) ||
  3660. (on &&
  3661. br_multicast_ctx_vlan_global_disabled(&vlan->br_mcast_ctx)))
  3662. return;
  3663. spin_lock_bh(&br->multicast_lock);
  3664. vlan->priv_flags ^= BR_VLFLAG_MCAST_ENABLED;
  3665. spin_unlock_bh(&br->multicast_lock);
  3666. if (on)
  3667. __br_multicast_open(&vlan->br_mcast_ctx);
  3668. else
  3669. __br_multicast_stop(&vlan->br_mcast_ctx);
  3670. } else {
  3671. struct net_bridge_mcast *brmctx;
  3672. brmctx = br_multicast_port_ctx_get_global(&vlan->port_mcast_ctx);
  3673. if (on && br_multicast_ctx_vlan_global_disabled(brmctx))
  3674. return;
  3675. br = vlan->port->br;
  3676. spin_lock_bh(&br->multicast_lock);
  3677. vlan->priv_flags ^= BR_VLFLAG_MCAST_ENABLED;
  3678. if (on)
  3679. __br_multicast_enable_port_ctx(&vlan->port_mcast_ctx);
  3680. else
  3681. __br_multicast_disable_port_ctx(&vlan->port_mcast_ctx);
  3682. spin_unlock_bh(&br->multicast_lock);
  3683. }
  3684. }
  3685. static void br_multicast_toggle_vlan(struct net_bridge_vlan *vlan, bool on)
  3686. {
  3687. struct net_bridge_port *p;
  3688. if (WARN_ON_ONCE(!br_vlan_is_master(vlan)))
  3689. return;
  3690. list_for_each_entry(p, &vlan->br->port_list, list) {
  3691. struct net_bridge_vlan *vport;
  3692. vport = br_vlan_find(nbp_vlan_group(p), vlan->vid);
  3693. if (!vport)
  3694. continue;
  3695. br_multicast_toggle_one_vlan(vport, on);
  3696. }
  3697. if (br_vlan_is_brentry(vlan))
  3698. br_multicast_toggle_one_vlan(vlan, on);
  3699. }
  3700. int br_multicast_toggle_vlan_snooping(struct net_bridge *br, bool on,
  3701. struct netlink_ext_ack *extack)
  3702. {
  3703. struct net_bridge_vlan_group *vg;
  3704. struct net_bridge_vlan *vlan;
  3705. struct net_bridge_port *p;
  3706. if (br_opt_get(br, BROPT_MCAST_VLAN_SNOOPING_ENABLED) == on)
  3707. return 0;
  3708. if (on && !br_opt_get(br, BROPT_VLAN_ENABLED)) {
  3709. NL_SET_ERR_MSG_MOD(extack, "Cannot enable multicast vlan snooping with vlan filtering disabled");
  3710. return -EINVAL;
  3711. }
  3712. vg = br_vlan_group(br);
  3713. if (!vg)
  3714. return 0;
  3715. br_opt_toggle(br, BROPT_MCAST_VLAN_SNOOPING_ENABLED, on);
  3716. /* disable/enable non-vlan mcast contexts based on vlan snooping */
  3717. if (on)
  3718. __br_multicast_stop(&br->multicast_ctx);
  3719. else
  3720. __br_multicast_open(&br->multicast_ctx);
  3721. list_for_each_entry(p, &br->port_list, list) {
  3722. if (on)
  3723. br_multicast_disable_port_ctx(&p->multicast_ctx);
  3724. else
  3725. br_multicast_enable_port_ctx(&p->multicast_ctx);
  3726. }
  3727. list_for_each_entry(vlan, &vg->vlan_list, vlist)
  3728. br_multicast_toggle_vlan(vlan, on);
  3729. return 0;
  3730. }
  3731. bool br_multicast_toggle_global_vlan(struct net_bridge_vlan *vlan, bool on)
  3732. {
  3733. ASSERT_RTNL();
  3734. /* BR_VLFLAG_GLOBAL_MCAST_ENABLED relies on eventual consistency and
  3735. * requires only RTNL to change
  3736. */
  3737. if (on == !!(vlan->priv_flags & BR_VLFLAG_GLOBAL_MCAST_ENABLED))
  3738. return false;
  3739. vlan->priv_flags ^= BR_VLFLAG_GLOBAL_MCAST_ENABLED;
  3740. br_multicast_toggle_vlan(vlan, on);
  3741. return true;
  3742. }
  3743. void br_multicast_stop(struct net_bridge *br)
  3744. {
  3745. ASSERT_RTNL();
  3746. if (br_opt_get(br, BROPT_MCAST_VLAN_SNOOPING_ENABLED)) {
  3747. struct net_bridge_vlan_group *vg;
  3748. struct net_bridge_vlan *vlan;
  3749. vg = br_vlan_group(br);
  3750. if (vg) {
  3751. list_for_each_entry(vlan, &vg->vlan_list, vlist) {
  3752. struct net_bridge_mcast *brmctx;
  3753. brmctx = &vlan->br_mcast_ctx;
  3754. if (br_vlan_is_brentry(vlan) &&
  3755. !br_multicast_ctx_vlan_disabled(brmctx))
  3756. __br_multicast_stop(&vlan->br_mcast_ctx);
  3757. }
  3758. }
  3759. } else {
  3760. __br_multicast_stop(&br->multicast_ctx);
  3761. }
  3762. }
  3763. void br_multicast_dev_del(struct net_bridge *br)
  3764. {
  3765. struct net_bridge_mdb_entry *mp;
  3766. HLIST_HEAD(deleted_head);
  3767. struct hlist_node *tmp;
  3768. spin_lock_bh(&br->multicast_lock);
  3769. hlist_for_each_entry_safe(mp, tmp, &br->mdb_list, mdb_node)
  3770. br_multicast_del_mdb_entry(mp);
  3771. hlist_move_list(&br->mcast_gc_list, &deleted_head);
  3772. spin_unlock_bh(&br->multicast_lock);
  3773. br_multicast_ctx_deinit(&br->multicast_ctx);
  3774. br_multicast_gc(&deleted_head);
  3775. cancel_work_sync(&br->mcast_gc_work);
  3776. rcu_barrier();
  3777. }
  3778. int br_multicast_set_router(struct net_bridge_mcast *brmctx, unsigned long val)
  3779. {
  3780. int err = -EINVAL;
  3781. spin_lock_bh(&brmctx->br->multicast_lock);
  3782. switch (val) {
  3783. case MDB_RTR_TYPE_DISABLED:
  3784. case MDB_RTR_TYPE_PERM:
  3785. br_mc_router_state_change(brmctx->br, val == MDB_RTR_TYPE_PERM);
  3786. timer_delete(&brmctx->ip4_mc_router_timer);
  3787. #if IS_ENABLED(CONFIG_IPV6)
  3788. timer_delete(&brmctx->ip6_mc_router_timer);
  3789. #endif
  3790. brmctx->multicast_router = val;
  3791. err = 0;
  3792. break;
  3793. case MDB_RTR_TYPE_TEMP_QUERY:
  3794. if (brmctx->multicast_router != MDB_RTR_TYPE_TEMP_QUERY)
  3795. br_mc_router_state_change(brmctx->br, false);
  3796. brmctx->multicast_router = val;
  3797. err = 0;
  3798. break;
  3799. }
  3800. spin_unlock_bh(&brmctx->br->multicast_lock);
  3801. return err;
  3802. }
  3803. static void
  3804. br_multicast_rport_del_notify(struct net_bridge_mcast_port *pmctx, bool deleted)
  3805. {
  3806. if (!deleted)
  3807. return;
  3808. /* For backwards compatibility for now, only notify if there is
  3809. * no multicast router anymore for both IPv4 and IPv6.
  3810. */
  3811. if (!hlist_unhashed(&pmctx->ip4_rlist))
  3812. return;
  3813. #if IS_ENABLED(CONFIG_IPV6)
  3814. if (!hlist_unhashed(&pmctx->ip6_rlist))
  3815. return;
  3816. #endif
  3817. br_rtr_notify(pmctx->port->br->dev, pmctx, RTM_DELMDB);
  3818. br_port_mc_router_state_change(pmctx->port, false);
  3819. /* don't allow timer refresh */
  3820. if (pmctx->multicast_router == MDB_RTR_TYPE_TEMP)
  3821. pmctx->multicast_router = MDB_RTR_TYPE_TEMP_QUERY;
  3822. }
  3823. int br_multicast_set_port_router(struct net_bridge_mcast_port *pmctx,
  3824. unsigned long val)
  3825. {
  3826. struct net_bridge_mcast *brmctx;
  3827. unsigned long now = jiffies;
  3828. int err = -EINVAL;
  3829. bool del = false;
  3830. brmctx = br_multicast_port_ctx_get_global(pmctx);
  3831. spin_lock_bh(&brmctx->br->multicast_lock);
  3832. if (pmctx->multicast_router == val) {
  3833. /* Refresh the temp router port timer */
  3834. if (pmctx->multicast_router == MDB_RTR_TYPE_TEMP) {
  3835. mod_timer(&pmctx->ip4_mc_router_timer,
  3836. now + brmctx->multicast_querier_interval);
  3837. #if IS_ENABLED(CONFIG_IPV6)
  3838. mod_timer(&pmctx->ip6_mc_router_timer,
  3839. now + brmctx->multicast_querier_interval);
  3840. #endif
  3841. }
  3842. err = 0;
  3843. goto unlock;
  3844. }
  3845. switch (val) {
  3846. case MDB_RTR_TYPE_DISABLED:
  3847. pmctx->multicast_router = MDB_RTR_TYPE_DISABLED;
  3848. del |= br_ip4_multicast_rport_del(pmctx);
  3849. timer_delete(&pmctx->ip4_mc_router_timer);
  3850. del |= br_ip6_multicast_rport_del(pmctx);
  3851. #if IS_ENABLED(CONFIG_IPV6)
  3852. timer_delete(&pmctx->ip6_mc_router_timer);
  3853. #endif
  3854. br_multicast_rport_del_notify(pmctx, del);
  3855. break;
  3856. case MDB_RTR_TYPE_TEMP_QUERY:
  3857. pmctx->multicast_router = MDB_RTR_TYPE_TEMP_QUERY;
  3858. del |= br_ip4_multicast_rport_del(pmctx);
  3859. del |= br_ip6_multicast_rport_del(pmctx);
  3860. br_multicast_rport_del_notify(pmctx, del);
  3861. break;
  3862. case MDB_RTR_TYPE_PERM:
  3863. pmctx->multicast_router = MDB_RTR_TYPE_PERM;
  3864. timer_delete(&pmctx->ip4_mc_router_timer);
  3865. br_ip4_multicast_add_router(brmctx, pmctx);
  3866. #if IS_ENABLED(CONFIG_IPV6)
  3867. timer_delete(&pmctx->ip6_mc_router_timer);
  3868. #endif
  3869. br_ip6_multicast_add_router(brmctx, pmctx);
  3870. break;
  3871. case MDB_RTR_TYPE_TEMP:
  3872. pmctx->multicast_router = MDB_RTR_TYPE_TEMP;
  3873. br_ip4_multicast_mark_router(brmctx, pmctx);
  3874. br_ip6_multicast_mark_router(brmctx, pmctx);
  3875. break;
  3876. default:
  3877. goto unlock;
  3878. }
  3879. err = 0;
  3880. unlock:
  3881. spin_unlock_bh(&brmctx->br->multicast_lock);
  3882. return err;
  3883. }
  3884. int br_multicast_set_vlan_router(struct net_bridge_vlan *v, u8 mcast_router)
  3885. {
  3886. int err;
  3887. if (br_vlan_is_master(v))
  3888. err = br_multicast_set_router(&v->br_mcast_ctx, mcast_router);
  3889. else
  3890. err = br_multicast_set_port_router(&v->port_mcast_ctx,
  3891. mcast_router);
  3892. return err;
  3893. }
  3894. static void br_multicast_start_querier(struct net_bridge_mcast *brmctx,
  3895. struct bridge_mcast_own_query *query)
  3896. {
  3897. struct net_bridge_port *port;
  3898. if (!br_multicast_ctx_matches_vlan_snooping(brmctx))
  3899. return;
  3900. __br_multicast_open_query(brmctx->br, query);
  3901. rcu_read_lock();
  3902. list_for_each_entry_rcu(port, &brmctx->br->port_list, list) {
  3903. struct bridge_mcast_own_query *ip4_own_query;
  3904. #if IS_ENABLED(CONFIG_IPV6)
  3905. struct bridge_mcast_own_query *ip6_own_query;
  3906. #endif
  3907. if (br_multicast_port_ctx_state_stopped(&port->multicast_ctx))
  3908. continue;
  3909. if (br_multicast_ctx_is_vlan(brmctx)) {
  3910. struct net_bridge_vlan *vlan;
  3911. vlan = br_vlan_find(nbp_vlan_group_rcu(port),
  3912. brmctx->vlan->vid);
  3913. if (!vlan ||
  3914. br_multicast_port_ctx_state_stopped(&vlan->port_mcast_ctx))
  3915. continue;
  3916. ip4_own_query = &vlan->port_mcast_ctx.ip4_own_query;
  3917. #if IS_ENABLED(CONFIG_IPV6)
  3918. ip6_own_query = &vlan->port_mcast_ctx.ip6_own_query;
  3919. #endif
  3920. } else {
  3921. ip4_own_query = &port->multicast_ctx.ip4_own_query;
  3922. #if IS_ENABLED(CONFIG_IPV6)
  3923. ip6_own_query = &port->multicast_ctx.ip6_own_query;
  3924. #endif
  3925. }
  3926. if (query == &brmctx->ip4_own_query)
  3927. br_multicast_enable(ip4_own_query);
  3928. #if IS_ENABLED(CONFIG_IPV6)
  3929. else
  3930. br_multicast_enable(ip6_own_query);
  3931. #endif
  3932. }
  3933. rcu_read_unlock();
  3934. }
  3935. static void br_multicast_del_grps(struct net_bridge *br)
  3936. {
  3937. struct net_bridge_port *port;
  3938. list_for_each_entry(port, &br->port_list, list)
  3939. __br_multicast_disable_port_ctx(&port->multicast_ctx);
  3940. }
  3941. int br_multicast_toggle(struct net_bridge *br, unsigned long val,
  3942. struct netlink_ext_ack *extack)
  3943. {
  3944. struct net_bridge_port *port;
  3945. bool change_snoopers = false;
  3946. int err = 0;
  3947. spin_lock_bh(&br->multicast_lock);
  3948. if (!!br_opt_get(br, BROPT_MULTICAST_ENABLED) == !!val)
  3949. goto unlock;
  3950. err = br_mc_disabled_update(br->dev, val, extack);
  3951. if (err == -EOPNOTSUPP)
  3952. err = 0;
  3953. if (err)
  3954. goto unlock;
  3955. br_opt_toggle(br, BROPT_MULTICAST_ENABLED, !!val);
  3956. if (!br_opt_get(br, BROPT_MULTICAST_ENABLED)) {
  3957. change_snoopers = true;
  3958. br_multicast_del_grps(br);
  3959. goto unlock;
  3960. }
  3961. if (!netif_running(br->dev))
  3962. goto unlock;
  3963. br_multicast_open(br);
  3964. list_for_each_entry(port, &br->port_list, list)
  3965. __br_multicast_enable_port_ctx(&port->multicast_ctx);
  3966. change_snoopers = true;
  3967. unlock:
  3968. spin_unlock_bh(&br->multicast_lock);
  3969. /* br_multicast_join_snoopers has the potential to cause
  3970. * an MLD Report/Leave to be delivered to br_multicast_rcv,
  3971. * which would in turn call br_multicast_add_group, which would
  3972. * attempt to acquire multicast_lock. This function should be
  3973. * called after the lock has been released to avoid deadlocks on
  3974. * multicast_lock.
  3975. *
  3976. * br_multicast_leave_snoopers does not have the problem since
  3977. * br_multicast_rcv first checks BROPT_MULTICAST_ENABLED, and
  3978. * returns without calling br_multicast_ipv4/6_rcv if it's not
  3979. * enabled. Moved both functions out just for symmetry.
  3980. */
  3981. if (change_snoopers) {
  3982. if (br_opt_get(br, BROPT_MULTICAST_ENABLED))
  3983. br_multicast_join_snoopers(br);
  3984. else
  3985. br_multicast_leave_snoopers(br);
  3986. }
  3987. return err;
  3988. }
  3989. bool br_multicast_enabled(const struct net_device *dev)
  3990. {
  3991. struct net_bridge *br = netdev_priv(dev);
  3992. return !!br_opt_get(br, BROPT_MULTICAST_ENABLED);
  3993. }
  3994. EXPORT_SYMBOL_GPL(br_multicast_enabled);
  3995. bool br_multicast_router(const struct net_device *dev)
  3996. {
  3997. struct net_bridge *br = netdev_priv(dev);
  3998. bool is_router;
  3999. spin_lock_bh(&br->multicast_lock);
  4000. is_router = br_multicast_is_router(&br->multicast_ctx, NULL);
  4001. spin_unlock_bh(&br->multicast_lock);
  4002. return is_router;
  4003. }
  4004. EXPORT_SYMBOL_GPL(br_multicast_router);
  4005. int br_multicast_set_querier(struct net_bridge_mcast *brmctx, unsigned long val)
  4006. {
  4007. unsigned long max_delay;
  4008. val = !!val;
  4009. spin_lock_bh(&brmctx->br->multicast_lock);
  4010. if (brmctx->multicast_querier == val)
  4011. goto unlock;
  4012. WRITE_ONCE(brmctx->multicast_querier, val);
  4013. if (!val)
  4014. goto unlock;
  4015. max_delay = brmctx->multicast_query_response_interval;
  4016. if (!timer_pending(&brmctx->ip4_other_query.timer))
  4017. mod_timer(&brmctx->ip4_other_query.delay_timer,
  4018. jiffies + max_delay);
  4019. br_multicast_start_querier(brmctx, &brmctx->ip4_own_query);
  4020. #if IS_ENABLED(CONFIG_IPV6)
  4021. if (!timer_pending(&brmctx->ip6_other_query.timer))
  4022. mod_timer(&brmctx->ip6_other_query.delay_timer,
  4023. jiffies + max_delay);
  4024. br_multicast_start_querier(brmctx, &brmctx->ip6_own_query);
  4025. #endif
  4026. unlock:
  4027. spin_unlock_bh(&brmctx->br->multicast_lock);
  4028. return 0;
  4029. }
  4030. int br_multicast_set_igmp_version(struct net_bridge_mcast *brmctx,
  4031. unsigned long val)
  4032. {
  4033. /* Currently we support only version 2 and 3 */
  4034. switch (val) {
  4035. case 2:
  4036. case 3:
  4037. break;
  4038. default:
  4039. return -EINVAL;
  4040. }
  4041. spin_lock_bh(&brmctx->br->multicast_lock);
  4042. brmctx->multicast_igmp_version = val;
  4043. spin_unlock_bh(&brmctx->br->multicast_lock);
  4044. return 0;
  4045. }
  4046. #if IS_ENABLED(CONFIG_IPV6)
  4047. int br_multicast_set_mld_version(struct net_bridge_mcast *brmctx,
  4048. unsigned long val)
  4049. {
  4050. /* Currently we support version 1 and 2 */
  4051. switch (val) {
  4052. case 1:
  4053. case 2:
  4054. break;
  4055. default:
  4056. return -EINVAL;
  4057. }
  4058. spin_lock_bh(&brmctx->br->multicast_lock);
  4059. brmctx->multicast_mld_version = val;
  4060. spin_unlock_bh(&brmctx->br->multicast_lock);
  4061. return 0;
  4062. }
  4063. #endif
  4064. void br_multicast_set_query_intvl(struct net_bridge_mcast *brmctx,
  4065. unsigned long val)
  4066. {
  4067. unsigned long intvl_jiffies = clock_t_to_jiffies(val);
  4068. if (intvl_jiffies < BR_MULTICAST_QUERY_INTVL_MIN) {
  4069. br_info(brmctx->br,
  4070. "trying to set multicast query interval below minimum, setting to %lu (%ums)\n",
  4071. jiffies_to_clock_t(BR_MULTICAST_QUERY_INTVL_MIN),
  4072. jiffies_to_msecs(BR_MULTICAST_QUERY_INTVL_MIN));
  4073. intvl_jiffies = BR_MULTICAST_QUERY_INTVL_MIN;
  4074. }
  4075. if (intvl_jiffies > BR_MULTICAST_QUERY_INTVL_MAX) {
  4076. br_info(brmctx->br,
  4077. "trying to set multicast query interval above maximum, setting to %lu (%ums)\n",
  4078. jiffies_to_clock_t(BR_MULTICAST_QUERY_INTVL_MAX),
  4079. jiffies_to_msecs(BR_MULTICAST_QUERY_INTVL_MAX));
  4080. intvl_jiffies = BR_MULTICAST_QUERY_INTVL_MAX;
  4081. }
  4082. brmctx->multicast_query_interval = intvl_jiffies;
  4083. }
  4084. void br_multicast_set_startup_query_intvl(struct net_bridge_mcast *brmctx,
  4085. unsigned long val)
  4086. {
  4087. unsigned long intvl_jiffies = clock_t_to_jiffies(val);
  4088. if (intvl_jiffies < BR_MULTICAST_STARTUP_QUERY_INTVL_MIN) {
  4089. br_info(brmctx->br,
  4090. "trying to set multicast startup query interval below minimum, setting to %lu (%ums)\n",
  4091. jiffies_to_clock_t(BR_MULTICAST_STARTUP_QUERY_INTVL_MIN),
  4092. jiffies_to_msecs(BR_MULTICAST_STARTUP_QUERY_INTVL_MIN));
  4093. intvl_jiffies = BR_MULTICAST_STARTUP_QUERY_INTVL_MIN;
  4094. }
  4095. if (intvl_jiffies > BR_MULTICAST_STARTUP_QUERY_INTVL_MAX) {
  4096. br_info(brmctx->br,
  4097. "trying to set multicast startup query interval above maximum, setting to %lu (%ums)\n",
  4098. jiffies_to_clock_t(BR_MULTICAST_STARTUP_QUERY_INTVL_MAX),
  4099. jiffies_to_msecs(BR_MULTICAST_STARTUP_QUERY_INTVL_MAX));
  4100. intvl_jiffies = BR_MULTICAST_STARTUP_QUERY_INTVL_MAX;
  4101. }
  4102. brmctx->multicast_startup_query_interval = intvl_jiffies;
  4103. }
  4104. /**
  4105. * br_multicast_list_adjacent - Returns snooped multicast addresses
  4106. * @dev: The bridge port adjacent to which to retrieve addresses
  4107. * @br_ip_list: The list to store found, snooped multicast IP addresses in
  4108. *
  4109. * Creates a list of IP addresses (struct br_ip_list) sensed by the multicast
  4110. * snooping feature on all bridge ports of dev's bridge device, excluding
  4111. * the addresses from dev itself.
  4112. *
  4113. * Returns the number of items added to br_ip_list.
  4114. *
  4115. * Notes:
  4116. * - br_ip_list needs to be initialized by caller
  4117. * - br_ip_list might contain duplicates in the end
  4118. * (needs to be taken care of by caller)
  4119. * - br_ip_list needs to be freed by caller
  4120. */
  4121. int br_multicast_list_adjacent(struct net_device *dev,
  4122. struct list_head *br_ip_list)
  4123. {
  4124. struct net_bridge *br;
  4125. struct net_bridge_port *port;
  4126. struct net_bridge_port_group *group;
  4127. struct br_ip_list *entry;
  4128. int count = 0;
  4129. rcu_read_lock();
  4130. if (!br_ip_list || !netif_is_bridge_port(dev))
  4131. goto unlock;
  4132. port = br_port_get_rcu(dev);
  4133. if (!port || !port->br)
  4134. goto unlock;
  4135. br = port->br;
  4136. list_for_each_entry_rcu(port, &br->port_list, list) {
  4137. if (!port->dev || port->dev == dev)
  4138. continue;
  4139. hlist_for_each_entry_rcu(group, &port->mglist, mglist) {
  4140. entry = kmalloc_obj(*entry, GFP_ATOMIC);
  4141. if (!entry)
  4142. goto unlock;
  4143. entry->addr = group->key.addr;
  4144. list_add(&entry->list, br_ip_list);
  4145. count++;
  4146. }
  4147. }
  4148. unlock:
  4149. rcu_read_unlock();
  4150. return count;
  4151. }
  4152. EXPORT_SYMBOL_GPL(br_multicast_list_adjacent);
  4153. /**
  4154. * br_multicast_has_querier_anywhere - Checks for a querier on a bridge
  4155. * @dev: The bridge port providing the bridge on which to check for a querier
  4156. * @proto: The protocol family to check for: IGMP -> ETH_P_IP, MLD -> ETH_P_IPV6
  4157. *
  4158. * Checks whether the given interface has a bridge on top and if so returns
  4159. * true if a valid querier exists anywhere on the bridged link layer.
  4160. * Otherwise returns false.
  4161. */
  4162. bool br_multicast_has_querier_anywhere(struct net_device *dev, int proto)
  4163. {
  4164. struct net_bridge *br;
  4165. struct net_bridge_port *port;
  4166. struct ethhdr eth;
  4167. bool ret = false;
  4168. rcu_read_lock();
  4169. if (!netif_is_bridge_port(dev))
  4170. goto unlock;
  4171. port = br_port_get_rcu(dev);
  4172. if (!port || !port->br)
  4173. goto unlock;
  4174. br = port->br;
  4175. memset(&eth, 0, sizeof(eth));
  4176. eth.h_proto = htons(proto);
  4177. ret = br_multicast_querier_exists(&br->multicast_ctx, &eth, NULL);
  4178. unlock:
  4179. rcu_read_unlock();
  4180. return ret;
  4181. }
  4182. EXPORT_SYMBOL_GPL(br_multicast_has_querier_anywhere);
  4183. /**
  4184. * br_multicast_has_querier_adjacent - Checks for a querier behind a bridge port
  4185. * @dev: The bridge port adjacent to which to check for a querier
  4186. * @proto: The protocol family to check for: IGMP -> ETH_P_IP, MLD -> ETH_P_IPV6
  4187. *
  4188. * Checks whether the given interface has a bridge on top and if so returns
  4189. * true if a selected querier is behind one of the other ports of this
  4190. * bridge. Otherwise returns false.
  4191. */
  4192. bool br_multicast_has_querier_adjacent(struct net_device *dev, int proto)
  4193. {
  4194. struct net_bridge_mcast *brmctx;
  4195. struct net_bridge *br;
  4196. struct net_bridge_port *port;
  4197. bool ret = false;
  4198. int port_ifidx;
  4199. rcu_read_lock();
  4200. if (!netif_is_bridge_port(dev))
  4201. goto unlock;
  4202. port = br_port_get_rcu(dev);
  4203. if (!port || !port->br)
  4204. goto unlock;
  4205. br = port->br;
  4206. brmctx = &br->multicast_ctx;
  4207. switch (proto) {
  4208. case ETH_P_IP:
  4209. port_ifidx = brmctx->ip4_querier.port_ifidx;
  4210. if (!timer_pending(&brmctx->ip4_other_query.timer) ||
  4211. port_ifidx == port->dev->ifindex)
  4212. goto unlock;
  4213. break;
  4214. #if IS_ENABLED(CONFIG_IPV6)
  4215. case ETH_P_IPV6:
  4216. port_ifidx = brmctx->ip6_querier.port_ifidx;
  4217. if (!timer_pending(&brmctx->ip6_other_query.timer) ||
  4218. port_ifidx == port->dev->ifindex)
  4219. goto unlock;
  4220. break;
  4221. #endif
  4222. default:
  4223. goto unlock;
  4224. }
  4225. ret = true;
  4226. unlock:
  4227. rcu_read_unlock();
  4228. return ret;
  4229. }
  4230. EXPORT_SYMBOL_GPL(br_multicast_has_querier_adjacent);
  4231. /**
  4232. * br_multicast_has_router_adjacent - Checks for a router behind a bridge port
  4233. * @dev: The bridge port adjacent to which to check for a multicast router
  4234. * @proto: The protocol family to check for: IGMP -> ETH_P_IP, MLD -> ETH_P_IPV6
  4235. *
  4236. * Checks whether the given interface has a bridge on top and if so returns
  4237. * true if a multicast router is behind one of the other ports of this
  4238. * bridge. Otherwise returns false.
  4239. */
  4240. bool br_multicast_has_router_adjacent(struct net_device *dev, int proto)
  4241. {
  4242. struct net_bridge_mcast_port *pmctx;
  4243. struct net_bridge_mcast *brmctx;
  4244. struct net_bridge_port *port;
  4245. bool ret = false;
  4246. rcu_read_lock();
  4247. port = br_port_get_check_rcu(dev);
  4248. if (!port)
  4249. goto unlock;
  4250. brmctx = &port->br->multicast_ctx;
  4251. switch (proto) {
  4252. case ETH_P_IP:
  4253. hlist_for_each_entry_rcu(pmctx, &brmctx->ip4_mc_router_list,
  4254. ip4_rlist) {
  4255. if (pmctx->port == port)
  4256. continue;
  4257. ret = true;
  4258. goto unlock;
  4259. }
  4260. break;
  4261. #if IS_ENABLED(CONFIG_IPV6)
  4262. case ETH_P_IPV6:
  4263. hlist_for_each_entry_rcu(pmctx, &brmctx->ip6_mc_router_list,
  4264. ip6_rlist) {
  4265. if (pmctx->port == port)
  4266. continue;
  4267. ret = true;
  4268. goto unlock;
  4269. }
  4270. break;
  4271. #endif
  4272. default:
  4273. /* when compiled without IPv6 support, be conservative and
  4274. * always assume presence of an IPv6 multicast router
  4275. */
  4276. ret = true;
  4277. }
  4278. unlock:
  4279. rcu_read_unlock();
  4280. return ret;
  4281. }
  4282. EXPORT_SYMBOL_GPL(br_multicast_has_router_adjacent);
  4283. static void br_mcast_stats_add(struct bridge_mcast_stats __percpu *stats,
  4284. const struct sk_buff *skb, u8 type, u8 dir)
  4285. {
  4286. struct bridge_mcast_stats *pstats = this_cpu_ptr(stats);
  4287. __be16 proto = skb->protocol;
  4288. unsigned int t_len;
  4289. u64_stats_update_begin(&pstats->syncp);
  4290. switch (proto) {
  4291. case htons(ETH_P_IP):
  4292. t_len = ntohs(ip_hdr(skb)->tot_len) - ip_hdrlen(skb);
  4293. switch (type) {
  4294. case IGMP_HOST_MEMBERSHIP_REPORT:
  4295. pstats->mstats.igmp_v1reports[dir]++;
  4296. break;
  4297. case IGMPV2_HOST_MEMBERSHIP_REPORT:
  4298. pstats->mstats.igmp_v2reports[dir]++;
  4299. break;
  4300. case IGMPV3_HOST_MEMBERSHIP_REPORT:
  4301. pstats->mstats.igmp_v3reports[dir]++;
  4302. break;
  4303. case IGMP_HOST_MEMBERSHIP_QUERY:
  4304. if (t_len != sizeof(struct igmphdr)) {
  4305. pstats->mstats.igmp_v3queries[dir]++;
  4306. } else {
  4307. unsigned int offset = skb_transport_offset(skb);
  4308. struct igmphdr *ih, _ihdr;
  4309. ih = skb_header_pointer(skb, offset,
  4310. sizeof(_ihdr), &_ihdr);
  4311. if (!ih)
  4312. break;
  4313. if (!ih->code)
  4314. pstats->mstats.igmp_v1queries[dir]++;
  4315. else
  4316. pstats->mstats.igmp_v2queries[dir]++;
  4317. }
  4318. break;
  4319. case IGMP_HOST_LEAVE_MESSAGE:
  4320. pstats->mstats.igmp_leaves[dir]++;
  4321. break;
  4322. }
  4323. break;
  4324. #if IS_ENABLED(CONFIG_IPV6)
  4325. case htons(ETH_P_IPV6):
  4326. t_len = ntohs(ipv6_hdr(skb)->payload_len) +
  4327. sizeof(struct ipv6hdr);
  4328. t_len -= skb_network_header_len(skb);
  4329. switch (type) {
  4330. case ICMPV6_MGM_REPORT:
  4331. pstats->mstats.mld_v1reports[dir]++;
  4332. break;
  4333. case ICMPV6_MLD2_REPORT:
  4334. pstats->mstats.mld_v2reports[dir]++;
  4335. break;
  4336. case ICMPV6_MGM_QUERY:
  4337. if (t_len != sizeof(struct mld_msg))
  4338. pstats->mstats.mld_v2queries[dir]++;
  4339. else
  4340. pstats->mstats.mld_v1queries[dir]++;
  4341. break;
  4342. case ICMPV6_MGM_REDUCTION:
  4343. pstats->mstats.mld_leaves[dir]++;
  4344. break;
  4345. }
  4346. break;
  4347. #endif /* CONFIG_IPV6 */
  4348. }
  4349. u64_stats_update_end(&pstats->syncp);
  4350. }
  4351. void br_multicast_count(struct net_bridge *br,
  4352. const struct net_bridge_port *p,
  4353. const struct sk_buff *skb, u8 type, u8 dir)
  4354. {
  4355. struct bridge_mcast_stats __percpu *stats;
  4356. /* if multicast_disabled is true then igmp type can't be set */
  4357. if (!type || !br_opt_get(br, BROPT_MULTICAST_STATS_ENABLED))
  4358. return;
  4359. if (p)
  4360. stats = p->mcast_stats;
  4361. else
  4362. stats = br->mcast_stats;
  4363. if (WARN_ON(!stats))
  4364. return;
  4365. br_mcast_stats_add(stats, skb, type, dir);
  4366. }
  4367. int br_multicast_init_stats(struct net_bridge *br)
  4368. {
  4369. br->mcast_stats = netdev_alloc_pcpu_stats(struct bridge_mcast_stats);
  4370. if (!br->mcast_stats)
  4371. return -ENOMEM;
  4372. return 0;
  4373. }
  4374. void br_multicast_uninit_stats(struct net_bridge *br)
  4375. {
  4376. free_percpu(br->mcast_stats);
  4377. }
  4378. /* noinline for https://llvm.org/pr45802#c9 */
  4379. static noinline_for_stack void mcast_stats_add_dir(u64 *dst, u64 *src)
  4380. {
  4381. dst[BR_MCAST_DIR_RX] += src[BR_MCAST_DIR_RX];
  4382. dst[BR_MCAST_DIR_TX] += src[BR_MCAST_DIR_TX];
  4383. }
  4384. void br_multicast_get_stats(const struct net_bridge *br,
  4385. const struct net_bridge_port *p,
  4386. struct br_mcast_stats *dest)
  4387. {
  4388. struct bridge_mcast_stats __percpu *stats;
  4389. struct br_mcast_stats tdst;
  4390. int i;
  4391. memset(dest, 0, sizeof(*dest));
  4392. if (p)
  4393. stats = p->mcast_stats;
  4394. else
  4395. stats = br->mcast_stats;
  4396. if (WARN_ON(!stats))
  4397. return;
  4398. memset(&tdst, 0, sizeof(tdst));
  4399. for_each_possible_cpu(i) {
  4400. struct bridge_mcast_stats *cpu_stats = per_cpu_ptr(stats, i);
  4401. struct br_mcast_stats temp;
  4402. unsigned int start;
  4403. do {
  4404. start = u64_stats_fetch_begin(&cpu_stats->syncp);
  4405. u64_stats_copy(&temp, &cpu_stats->mstats, sizeof(temp));
  4406. } while (u64_stats_fetch_retry(&cpu_stats->syncp, start));
  4407. mcast_stats_add_dir(tdst.igmp_v1queries, temp.igmp_v1queries);
  4408. mcast_stats_add_dir(tdst.igmp_v2queries, temp.igmp_v2queries);
  4409. mcast_stats_add_dir(tdst.igmp_v3queries, temp.igmp_v3queries);
  4410. mcast_stats_add_dir(tdst.igmp_leaves, temp.igmp_leaves);
  4411. mcast_stats_add_dir(tdst.igmp_v1reports, temp.igmp_v1reports);
  4412. mcast_stats_add_dir(tdst.igmp_v2reports, temp.igmp_v2reports);
  4413. mcast_stats_add_dir(tdst.igmp_v3reports, temp.igmp_v3reports);
  4414. tdst.igmp_parse_errors += temp.igmp_parse_errors;
  4415. mcast_stats_add_dir(tdst.mld_v1queries, temp.mld_v1queries);
  4416. mcast_stats_add_dir(tdst.mld_v2queries, temp.mld_v2queries);
  4417. mcast_stats_add_dir(tdst.mld_leaves, temp.mld_leaves);
  4418. mcast_stats_add_dir(tdst.mld_v1reports, temp.mld_v1reports);
  4419. mcast_stats_add_dir(tdst.mld_v2reports, temp.mld_v2reports);
  4420. tdst.mld_parse_errors += temp.mld_parse_errors;
  4421. }
  4422. memcpy(dest, &tdst, sizeof(*dest));
  4423. }
  4424. int br_mdb_hash_init(struct net_bridge *br)
  4425. {
  4426. int err;
  4427. err = rhashtable_init(&br->sg_port_tbl, &br_sg_port_rht_params);
  4428. if (err)
  4429. return err;
  4430. err = rhashtable_init(&br->mdb_hash_tbl, &br_mdb_rht_params);
  4431. if (err) {
  4432. rhashtable_destroy(&br->sg_port_tbl);
  4433. return err;
  4434. }
  4435. return 0;
  4436. }
  4437. void br_mdb_hash_fini(struct net_bridge *br)
  4438. {
  4439. rhashtable_destroy(&br->sg_port_tbl);
  4440. rhashtable_destroy(&br->mdb_hash_tbl);
  4441. }