| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962996399649965996699679968996999709971997299739974997599769977997899799980998199829983998499859986998799889989999099919992999399949995999699979998999910000100011000210003100041000510006100071000810009100101001110012100131001410015100161001710018100191002010021100221002310024100251002610027100281002910030100311003210033100341003510036100371003810039100401004110042100431004410045100461004710048100491005010051100521005310054100551005610057100581005910060100611006210063100641006510066100671006810069100701007110072100731007410075100761007710078100791008010081100821008310084100851008610087100881008910090100911009210093100941009510096100971009810099101001010110102101031010410105101061010710108101091011010111101121011310114101151011610117101181011910120101211012210123101241012510126101271012810129101301013110132101331013410135101361013710138101391014010141101421014310144101451014610147101481014910150101511015210153101541015510156101571015810159101601016110162101631016410165101661016710168101691017010171101721017310174101751017610177101781017910180101811018210183101841018510186101871018810189101901019110192101931019410195101961019710198101991020010201102021020310204102051020610207102081020910210102111021210213102141021510216102171021810219102201022110222102231022410225102261022710228102291023010231102321023310234102351023610237102381023910240102411024210243102441024510246102471024810249102501025110252102531025410255102561025710258102591026010261102621026310264102651026610267102681026910270102711027210273102741027510276102771027810279102801028110282102831028410285102861028710288102891029010291102921029310294102951029610297102981029910300103011030210303103041030510306103071030810309103101031110312103131031410315103161031710318103191032010321103221032310324103251032610327103281032910330103311033210333103341033510336103371033810339103401034110342103431034410345103461034710348103491035010351103521035310354103551035610357103581035910360103611036210363103641036510366103671036810369103701037110372103731037410375103761037710378103791038010381103821038310384103851038610387103881038910390103911039210393103941039510396103971039810399104001040110402104031040410405104061040710408104091041010411104121041310414104151041610417104181041910420104211042210423104241042510426104271042810429104301043110432104331043410435104361043710438104391044010441104421044310444104451044610447104481044910450104511045210453104541045510456104571045810459104601046110462104631046410465104661046710468104691047010471104721047310474104751047610477104781047910480104811048210483104841048510486104871048810489104901049110492104931049410495104961049710498104991050010501105021050310504105051050610507105081050910510105111051210513105141051510516105171051810519105201052110522105231052410525105261052710528105291053010531105321053310534105351053610537105381053910540105411054210543105441054510546105471054810549105501055110552105531055410555105561055710558105591056010561105621056310564105651056610567105681056910570105711057210573105741057510576105771057810579105801058110582105831058410585105861058710588105891059010591105921059310594105951059610597105981059910600106011060210603106041060510606106071060810609106101061110612106131061410615106161061710618106191062010621106221062310624106251062610627106281062910630106311063210633106341063510636106371063810639106401064110642106431064410645106461064710648106491065010651106521065310654106551065610657106581065910660106611066210663106641066510666106671066810669106701067110672106731067410675106761067710678106791068010681106821068310684106851068610687106881068910690106911069210693106941069510696106971069810699107001070110702107031070410705107061070710708107091071010711107121071310714107151071610717107181071910720107211072210723107241072510726107271072810729107301073110732107331073410735107361073710738107391074010741107421074310744107451074610747107481074910750107511075210753107541075510756107571075810759107601076110762107631076410765107661076710768107691077010771107721077310774107751077610777107781077910780107811078210783107841078510786107871078810789107901079110792107931079410795107961079710798107991080010801108021080310804108051080610807108081080910810108111081210813108141081510816108171081810819108201082110822108231082410825108261082710828108291083010831108321083310834108351083610837108381083910840108411084210843108441084510846108471084810849108501085110852108531085410855108561085710858108591086010861108621086310864108651086610867108681086910870108711087210873108741087510876108771087810879108801088110882108831088410885108861088710888108891089010891108921089310894108951089610897108981089910900109011090210903109041090510906109071090810909109101091110912109131091410915109161091710918109191092010921109221092310924109251092610927109281092910930109311093210933109341093510936109371093810939109401094110942109431094410945109461094710948109491095010951109521095310954109551095610957109581095910960109611096210963109641096510966109671096810969109701097110972109731097410975109761097710978109791098010981109821098310984109851098610987109881098910990109911099210993109941099510996109971099810999110001100111002110031100411005110061100711008110091101011011110121101311014110151101611017110181101911020110211102211023110241102511026110271102811029110301103111032110331103411035110361103711038110391104011041110421104311044110451104611047110481104911050110511105211053110541105511056110571105811059110601106111062110631106411065110661106711068110691107011071110721107311074110751107611077110781107911080110811108211083110841108511086110871108811089110901109111092110931109411095110961109711098110991110011101111021110311104111051110611107111081110911110111111111211113111141111511116111171111811119111201112111122111231112411125111261112711128111291113011131111321113311134111351113611137111381113911140111411114211143111441114511146111471114811149111501115111152111531115411155111561115711158111591116011161111621116311164111651116611167111681116911170111711117211173111741117511176111771117811179111801118111182111831118411185111861118711188111891119011191111921119311194111951119611197111981119911200112011120211203112041120511206112071120811209112101121111212112131121411215112161121711218112191122011221112221122311224112251122611227112281122911230112311123211233112341123511236112371123811239112401124111242112431124411245112461124711248112491125011251112521125311254112551125611257112581125911260112611126211263112641126511266112671126811269112701127111272112731127411275112761127711278112791128011281112821128311284112851128611287112881128911290112911129211293112941129511296112971129811299113001130111302113031130411305113061130711308113091131011311113121131311314113151131611317113181131911320113211132211323113241132511326113271132811329113301133111332113331133411335113361133711338113391134011341113421134311344113451134611347113481134911350113511135211353113541135511356113571135811359113601136111362113631136411365113661136711368113691137011371113721137311374113751137611377113781137911380113811138211383113841138511386113871138811389113901139111392113931139411395113961139711398113991140011401114021140311404114051140611407114081140911410114111141211413114141141511416114171141811419114201142111422114231142411425114261142711428114291143011431114321143311434114351143611437114381143911440114411144211443114441144511446114471144811449114501145111452114531145411455114561145711458114591146011461114621146311464114651146611467114681146911470114711147211473114741147511476114771147811479114801148111482114831148411485114861148711488114891149011491114921149311494114951149611497114981149911500115011150211503115041150511506115071150811509115101151111512115131151411515115161151711518115191152011521115221152311524115251152611527115281152911530115311153211533115341153511536115371153811539115401154111542115431154411545115461154711548115491155011551115521155311554115551155611557115581155911560115611156211563115641156511566115671156811569115701157111572115731157411575115761157711578115791158011581115821158311584115851158611587115881158911590115911159211593115941159511596115971159811599116001160111602116031160411605116061160711608116091161011611116121161311614116151161611617116181161911620116211162211623116241162511626116271162811629116301163111632116331163411635116361163711638116391164011641116421164311644116451164611647116481164911650116511165211653116541165511656116571165811659116601166111662116631166411665116661166711668116691167011671116721167311674116751167611677116781167911680116811168211683116841168511686116871168811689116901169111692116931169411695116961169711698116991170011701117021170311704117051170611707117081170911710117111171211713117141171511716117171171811719117201172111722117231172411725117261172711728117291173011731117321173311734117351173611737117381173911740117411174211743117441174511746117471174811749117501175111752117531175411755117561175711758117591176011761117621176311764117651176611767117681176911770117711177211773117741177511776117771177811779117801178111782117831178411785117861178711788117891179011791117921179311794117951179611797117981179911800118011180211803118041180511806118071180811809118101181111812118131181411815118161181711818118191182011821118221182311824118251182611827118281182911830118311183211833118341183511836118371183811839118401184111842118431184411845118461184711848118491185011851118521185311854118551185611857118581185911860118611186211863118641186511866118671186811869118701187111872118731187411875118761187711878118791188011881118821188311884118851188611887118881188911890118911189211893118941189511896118971189811899119001190111902119031190411905119061190711908119091191011911119121191311914119151191611917119181191911920119211192211923119241192511926119271192811929119301193111932119331193411935119361193711938119391194011941119421194311944119451194611947119481194911950119511195211953119541195511956119571195811959119601196111962119631196411965119661196711968119691197011971119721197311974119751197611977119781197911980119811198211983119841198511986119871198811989119901199111992119931199411995119961199711998119991200012001120021200312004120051200612007120081200912010120111201212013120141201512016120171201812019120201202112022120231202412025120261202712028120291203012031120321203312034120351203612037120381203912040120411204212043120441204512046120471204812049120501205112052120531205412055120561205712058120591206012061120621206312064120651206612067120681206912070120711207212073120741207512076120771207812079120801208112082120831208412085120861208712088120891209012091120921209312094120951209612097120981209912100121011210212103121041210512106121071210812109121101211112112121131211412115121161211712118121191212012121121221212312124121251212612127121281212912130121311213212133121341213512136121371213812139121401214112142121431214412145121461214712148121491215012151121521215312154121551215612157121581215912160121611216212163121641216512166121671216812169121701217112172121731217412175121761217712178121791218012181121821218312184121851218612187121881218912190121911219212193121941219512196121971219812199122001220112202122031220412205122061220712208122091221012211122121221312214122151221612217122181221912220122211222212223122241222512226122271222812229122301223112232122331223412235122361223712238122391224012241122421224312244122451224612247122481224912250122511225212253122541225512256122571225812259122601226112262122631226412265122661226712268122691227012271122721227312274122751227612277122781227912280122811228212283122841228512286122871228812289122901229112292122931229412295122961229712298122991230012301123021230312304123051230612307123081230912310123111231212313123141231512316123171231812319123201232112322123231232412325123261232712328123291233012331123321233312334123351233612337123381233912340123411234212343123441234512346123471234812349123501235112352123531235412355123561235712358123591236012361123621236312364123651236612367123681236912370123711237212373123741237512376123771237812379123801238112382123831238412385123861238712388123891239012391123921239312394123951239612397123981239912400124011240212403124041240512406124071240812409124101241112412124131241412415124161241712418124191242012421124221242312424124251242612427124281242912430124311243212433124341243512436124371243812439124401244112442124431244412445124461244712448124491245012451124521245312454124551245612457124581245912460124611246212463124641246512466124671246812469124701247112472124731247412475124761247712478124791248012481124821248312484124851248612487124881248912490124911249212493124941249512496124971249812499125001250112502125031250412505125061250712508125091251012511125121251312514125151251612517125181251912520125211252212523125241252512526125271252812529125301253112532125331253412535125361253712538125391254012541125421254312544125451254612547125481254912550125511255212553125541255512556125571255812559125601256112562125631256412565125661256712568125691257012571125721257312574125751257612577125781257912580125811258212583125841258512586125871258812589125901259112592125931259412595125961259712598125991260012601126021260312604126051260612607126081260912610126111261212613126141261512616126171261812619126201262112622126231262412625126261262712628126291263012631126321263312634126351263612637126381263912640126411264212643126441264512646126471264812649126501265112652126531265412655126561265712658126591266012661126621266312664126651266612667126681266912670126711267212673126741267512676126771267812679126801268112682126831268412685126861268712688126891269012691126921269312694126951269612697126981269912700127011270212703127041270512706127071270812709127101271112712127131271412715127161271712718 |
- // SPDX-License-Identifier: GPL-2.0-or-later
- /*
- *
- * BlueZ - Bluetooth protocol stack for Linux
- *
- * Copyright (C) 2012 Intel Corporation. All rights reserved.
- *
- *
- */
- #ifdef HAVE_CONFIG_H
- #include <config.h>
- #endif
- #include <stdlib.h>
- #include <stdbool.h>
- #include <sys/ioctl.h>
- #include <sys/stat.h>
- #include <sys/types.h>
- #include <fcntl.h>
- #include <errno.h>
- #include <unistd.h>
- #include <glib.h>
- #include "lib/bluetooth.h"
- #include "lib/hci.h"
- #include "lib/hci_lib.h"
- #include "lib/mgmt.h"
- #include "lib/l2cap.h"
- #include "monitor/bt.h"
- #include "emulator/bthost.h"
- #include "emulator/hciemu.h"
- #include "src/shared/util.h"
- #include "src/shared/tester.h"
- #include "src/shared/mgmt.h"
- struct test_data {
- tester_data_func_t test_setup;
- const void *test_data;
- uint8_t expected_version;
- uint16_t expected_manufacturer;
- uint32_t expected_supported_settings;
- uint32_t initial_settings;
- struct mgmt *mgmt;
- struct mgmt *mgmt_alt;
- unsigned int mgmt_settings_id;
- unsigned int mgmt_alt_settings_id;
- unsigned int mgmt_alt_ev_id;
- unsigned int mgmt_discov_ev_id;
- uint8_t mgmt_version;
- uint16_t mgmt_revision;
- uint16_t mgmt_index;
- struct hciemu *hciemu;
- enum hciemu_type hciemu_type;
- bool expect_hci_command_done;
- int unmet_conditions;
- int unmet_setup_conditions;
- int sk;
- };
- static void print_debug(const char *str, void *user_data)
- {
- const char *prefix = user_data;
- tester_print("%s%s", prefix, str);
- }
- static void test_post_teardown(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- if (data->sk >= 0)
- close(data->sk);
- hciemu_unref(data->hciemu);
- data->hciemu = NULL;
- }
- static void test_pre_setup_failed(void)
- {
- test_post_teardown(NULL);
- tester_pre_setup_failed();
- }
- static void read_version_callback(uint8_t status, uint16_t length,
- const void *param, void *user_data)
- {
- struct test_data *data = tester_get_data();
- const struct mgmt_rp_read_version *rp = param;
- tester_print("Read Version callback");
- tester_print(" Status: %s (0x%02x)", mgmt_errstr(status), status);
- if (status || !param) {
- test_pre_setup_failed();
- return;
- }
- data->mgmt_version = rp->version;
- data->mgmt_revision = btohs(rp->revision);
- tester_print(" Version %u.%u",
- data->mgmt_version, data->mgmt_revision);
- }
- static void read_commands_callback(uint8_t status, uint16_t length,
- const void *param, void *user_data)
- {
- tester_print("Read Commands callback");
- tester_print(" Status: %s (0x%02x)", mgmt_errstr(status), status);
- if (status || !param) {
- test_pre_setup_failed();
- return;
- }
- }
- static bool check_settings(uint32_t supported, uint32_t expected)
- {
- int i;
- if (supported == expected)
- return true;
- for (i = 0; i < 17; i++) {
- if (supported & BIT(i))
- continue;
- if (expected & BIT(i)) {
- tester_warn("Expected bit %u not supported", i);
- return false;
- }
- }
- return true;
- }
- static void read_info_callback(uint8_t status, uint16_t length,
- const void *param, void *user_data)
- {
- struct test_data *data = tester_get_data();
- const struct mgmt_rp_read_info *rp = param;
- char addr[18];
- uint16_t manufacturer;
- uint32_t supported_settings, current_settings;
- struct bthost *bthost;
- tester_print("Read Info callback");
- tester_print(" Status: %s (0x%02x)", mgmt_errstr(status), status);
- if (status || !param) {
- test_pre_setup_failed();
- return;
- }
- ba2str(&rp->bdaddr, addr);
- manufacturer = btohs(rp->manufacturer);
- supported_settings = btohl(rp->supported_settings);
- current_settings = btohl(rp->current_settings);
- tester_print(" Address: %s", addr);
- tester_print(" Version: 0x%02x", rp->version);
- tester_print(" Manufacturer: 0x%04x", manufacturer);
- tester_print(" Supported settings: 0x%08x", supported_settings);
- tester_print(" Current settings: 0x%08x", current_settings);
- tester_print(" Class: 0x%02x%02x%02x",
- rp->dev_class[2], rp->dev_class[1], rp->dev_class[0]);
- tester_print(" Name: %s", rp->name);
- tester_print(" Short name: %s", rp->short_name);
- if (strcmp(hciemu_get_address(data->hciemu), addr)) {
- test_pre_setup_failed();
- return;
- }
- if (rp->version != data->expected_version) {
- tester_warn("Expected version: 0x%02x != 0x%02x",
- rp->version, data->expected_version);
- test_pre_setup_failed();
- return;
- }
- if (manufacturer != data->expected_manufacturer) {
- tester_warn("Expected manufacturer: 0x%04x != 0x%04x",
- manufacturer, data->expected_manufacturer);
- test_pre_setup_failed();
- return;
- }
- if (!check_settings(supported_settings,
- data->expected_supported_settings)) {
- tester_warn("Expected supported settings: 0x%08x != 0x%08x",
- supported_settings,
- data->expected_supported_settings);
- test_pre_setup_failed();
- return;
- }
- if (!check_settings(current_settings, data->initial_settings)) {
- tester_warn("Initial settings: 0x%08x != 0x%08x",
- current_settings, data->initial_settings);
- test_pre_setup_failed();
- return;
- }
- if (rp->dev_class[0] != 0x00 || rp->dev_class[1] != 0x00 ||
- rp->dev_class[2] != 0x00) {
- test_pre_setup_failed();
- return;
- }
- bthost = hciemu_client_get_host(data->hciemu);
- bthost_notify_ready(bthost, tester_pre_setup_complete);
- }
- static void index_added_callback(uint16_t index, uint16_t length,
- const void *param, void *user_data)
- {
- struct test_data *data = tester_get_data();
- tester_print("Index Added callback");
- tester_print(" Index: 0x%04x", index);
- data->mgmt_index = index;
- mgmt_send(data->mgmt, MGMT_OP_READ_INFO, data->mgmt_index, 0, NULL,
- read_info_callback, NULL, NULL);
- }
- static void index_removed_callback(uint16_t index, uint16_t length,
- const void *param, void *user_data)
- {
- struct test_data *data = tester_get_data();
- tester_print("Index Removed callback");
- tester_print(" Index: 0x%04x", index);
- if (index != data->mgmt_index)
- return;
- mgmt_unregister_index(data->mgmt, data->mgmt_index);
- mgmt_unregister_index(data->mgmt_alt, data->mgmt_index);
- mgmt_unref(data->mgmt);
- data->mgmt = NULL;
- mgmt_unref(data->mgmt_alt);
- data->mgmt_alt = NULL;
- tester_post_teardown_complete();
- }
- struct generic_data {
- bool setup_le_states;
- const uint8_t *le_states;
- const uint16_t *setup_settings;
- bool setup_nobredr;
- bool setup_limited_discov;
- uint16_t setup_expect_hci_command;
- const void *setup_expect_hci_param;
- uint8_t setup_expect_hci_len;
- uint16_t setup_send_opcode;
- const void *setup_send_param;
- uint16_t setup_send_len;
- const struct setup_mgmt_cmd *setup_mgmt_cmd_arr;
- bool send_index_none;
- const void *setup_discovery_param;
- uint16_t send_opcode;
- const void *send_param;
- uint16_t send_len;
- const void * (*send_func)(uint16_t *len);
- uint8_t expect_status;
- bool expect_ignore_param;
- const void *expect_param;
- uint16_t expect_len;
- const void * (*expect_func)(uint16_t *len);
- uint32_t expect_settings_set;
- uint32_t expect_settings_unset;
- uint16_t expect_alt_ev;
- const void *expect_alt_ev_param;
- bool (*verify_alt_ev_func)(const void *param, uint16_t length);
- uint16_t expect_alt_ev_len;
- uint16_t expect_hci_command;
- const void *expect_hci_param;
- int (*expect_hci_param_check_func)(const void *param, uint16_t length);
- uint8_t expect_hci_len;
- const void * (*expect_hci_func)(uint8_t *len);
- bool expect_pin;
- uint8_t pin_len;
- const void *pin;
- uint8_t client_pin_len;
- const void *client_pin;
- bool client_enable_ssp;
- uint8_t io_cap;
- uint8_t client_io_cap;
- uint8_t client_auth_req;
- bool reject_confirm;
- bool client_reject_confirm;
- bool just_works;
- bool client_enable_le;
- bool client_enable_sc;
- bool client_enable_adv;
- bool expect_sc_key;
- bool force_power_off;
- bool addr_type_avail;
- bool fail_tolerant;
- uint8_t addr_type;
- bool set_adv;
- const uint8_t *adv_data;
- uint8_t adv_data_len;
- };
- static int set_debugfs_force_suspend(int index, bool enable)
- {
- int fd, n, err;
- char val, path[64];
- err = 0;
- /* path for the debugfs file
- * /sys/kernel/debug/bluetooth/hciX/force_suspend
- */
- memset(path, 0, sizeof(path));
- sprintf(path, "/sys/kernel/debug/bluetooth/hci%d/force_suspend", index);
- fd = open(path, O_RDWR);
- if (fd < 0)
- return -errno;
- val = (enable) ? 'Y' : 'N';
- n = write(fd, &val, sizeof(val));
- if (n < (ssize_t) sizeof(val))
- err = -errno;
- close(fd);
- return err;
- }
- static int set_debugfs_force_wakeup(int index, bool enable)
- {
- int fd, n, err;
- char val, path[64];
- err = 0;
- /* path for the debugfs file
- * /sys/kernel/debug/bluetooth/hciX/force_suspend
- */
- memset(path, 0, sizeof(path));
- sprintf(path, "/sys/kernel/debug/bluetooth/hci%d/force_wakeup", index);
- fd = open(path, O_RDWR);
- if (fd < 0)
- return -errno;
- val = (enable) ? 'Y' : 'N';
- n = write(fd, &val, sizeof(val));
- if (n < (ssize_t) sizeof(val))
- err = -errno;
- close(fd);
- return err;
- }
- static const uint8_t set_exp_feat_param_debug[] = {
- 0x1c, 0xda, 0x47, 0x1c, 0x48, 0x6c, 0x01, 0xab, /* UUID - Debug */
- 0x9f, 0x46, 0xec, 0xb9, 0x30, 0x25, 0x99, 0xd4,
- 0x01, /* Action - enable */
- };
- static void debug_exp_callback(uint8_t status, uint16_t length,
- const void *param, void *user_data)
- {
- if (status != MGMT_STATUS_SUCCESS) {
- tester_print("Debug feature could not be enabled");
- return;
- }
- tester_print("Debug feature is enabled");
- }
- static void debug_exp_feature(struct test_data *data)
- {
- tester_print("Enabling Debug feature");
- mgmt_send(data->mgmt, MGMT_OP_SET_EXP_FEATURE, MGMT_INDEX_NONE,
- sizeof(set_exp_feat_param_debug), set_exp_feat_param_debug,
- debug_exp_callback, NULL, NULL);
- }
- static void read_index_list_callback(uint8_t status, uint16_t length,
- const void *param, void *user_data)
- {
- struct test_data *data = tester_get_data();
- const struct generic_data *test = data->test_data;
- tester_print("Read Index List callback");
- tester_print(" Status: %s (0x%02x)", mgmt_errstr(status), status);
- if (status || !param) {
- test_pre_setup_failed();
- return;
- }
- mgmt_register(data->mgmt, MGMT_EV_INDEX_ADDED, MGMT_INDEX_NONE,
- index_added_callback, NULL, NULL);
- mgmt_register(data->mgmt, MGMT_EV_INDEX_REMOVED, MGMT_INDEX_NONE,
- index_removed_callback, NULL, NULL);
- data->hciemu = hciemu_new(data->hciemu_type);
- if (!data->hciemu) {
- tester_warn("Failed to setup HCI emulation");
- test_pre_setup_failed();
- }
- if (tester_use_debug())
- hciemu_set_debug(data->hciemu, print_debug, "hciemu: ", NULL);
- if (test && test->setup_le_states)
- hciemu_set_central_le_states(data->hciemu, test->le_states);
- }
- static void test_pre_setup(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- data->mgmt = mgmt_new_default();
- if (!data->mgmt) {
- tester_warn("Failed to setup management interface");
- test_pre_setup_failed();
- return;
- }
- data->mgmt_alt = mgmt_new_default();
- if (!data->mgmt_alt) {
- tester_warn("Failed to setup alternate management interface");
- test_pre_setup_failed();
- mgmt_unref(data->mgmt);
- data->mgmt = NULL;
- return;
- }
- if (tester_use_debug()) {
- mgmt_set_debug(data->mgmt, print_debug, "mgmt: ", NULL);
- mgmt_set_debug(data->mgmt_alt, print_debug, "mgmt-alt: ", NULL);
- debug_exp_feature(data);
- }
- mgmt_send(data->mgmt, MGMT_OP_READ_VERSION, MGMT_INDEX_NONE, 0, NULL,
- read_version_callback, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_READ_COMMANDS, MGMT_INDEX_NONE, 0, NULL,
- read_commands_callback, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_READ_INDEX_LIST, MGMT_INDEX_NONE, 0, NULL,
- read_index_list_callback, NULL, NULL);
- data->sk = -1;
- }
- static void test_add_condition(struct test_data *data)
- {
- data->unmet_conditions++;
- tester_print("Test condition added, total %d", data->unmet_conditions);
- }
- static void test_add_setup_condition(struct test_data *data)
- {
- data->unmet_setup_conditions++;
- tester_print("Test setup condition added, total %d",
- data->unmet_setup_conditions);
- }
- static void test_setup_condition_complete(struct test_data *data)
- {
- data->unmet_setup_conditions--;
- tester_print("Test setup condition complete, %d left",
- data->unmet_setup_conditions);
- if (data->unmet_setup_conditions > 0)
- return;
- tester_setup_complete();
- }
- static void test_condition_complete(struct test_data *data)
- {
- data->unmet_conditions--;
- tester_print("Test condition complete, %d left",
- data->unmet_conditions);
- if (data->unmet_conditions > 0)
- return;
- tester_test_passed();
- }
- #define test_full(name, data, setup, func, timeout, type, version, \
- expected_settings, settings) \
- do { \
- struct test_data *user; \
- user = new0(struct test_data, 1); \
- user->hciemu_type = type; \
- user->test_setup = setup; \
- user->test_data = data; \
- user->expected_version = version; \
- user->expected_manufacturer = 0x003f; \
- user->expected_supported_settings = expected_settings; \
- user->initial_settings = settings; \
- tester_add_full(name, data, \
- test_pre_setup, test_setup, func, NULL, \
- test_post_teardown, timeout, user, free); \
- } while (0)
- #define test_bredrle_full(name, data, setup, func, timeout) \
- test_full(name, data, setup, func, timeout, HCIEMU_TYPE_BREDRLE, \
- 0x09, 0x0001beff, 0x00000080)
- #define test_bredrle(name, data, setup, func) \
- test_bredrle_full(name, data, setup, func, 2)
- #define test_bredr20(name, data, setup, func) \
- test_full(name, data, setup, func, 2, HCIEMU_TYPE_LEGACY, \
- 0x03, 0x000110bf, 0x00000080)
- #define test_bredr(name, data, setup, func) \
- test_full(name, data, setup, func, 2, HCIEMU_TYPE_BREDR, \
- 0x05, 0x000110ff, 0x00000080)
- #define test_le_full(name, data, setup, func, timeout) \
- test_full(name, data, setup, func, timeout, HCIEMU_TYPE_LE, \
- 0x09, 0x0001be1b, 0x00000200)
- #define test_le(name, data, setup, func) \
- test_le_full(name, data, setup, func, 2)
- #define test_bredrle50_full(name, data, setup, func, timeout) \
- test_full(name, data, setup, func, timeout, HCIEMU_TYPE_BREDRLE50, \
- 0x09, 0x0001beff, 0x00000080)
- #define test_bredrle50(name, data, setup, func) \
- test_bredrle50_full(name, data, setup, func, 2)
- #define test_hs_full(name, data, setup, func, timeout) \
- test_full(name, data, setup, func, timeout, HCIEMU_TYPE_BREDRLE, \
- 0x09, 0x0001bfff, 0x00000080)
- #define test_hs(name, data, setup, func) \
- test_hs_full(name, data, setup, func, 2)
- static void controller_setup(const void *test_data)
- {
- tester_test_passed();
- }
- struct setup_mgmt_cmd {
- uint8_t send_opcode;
- const void *send_param;
- uint16_t send_len;
- };
- static const char dummy_data[] = { 0x00 };
- static const struct generic_data invalid_command_test = {
- .send_opcode = 0xffff,
- .expect_status = MGMT_STATUS_UNKNOWN_COMMAND,
- };
- static const struct generic_data read_version_success_test = {
- .send_index_none = true,
- .send_opcode = MGMT_OP_READ_VERSION,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_len = 3,
- };
- static const struct generic_data read_version_invalid_param_test = {
- .send_index_none = true,
- .send_opcode = MGMT_OP_READ_VERSION,
- .send_param = dummy_data,
- .send_len = sizeof(dummy_data),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data read_version_invalid_index_test = {
- .send_opcode = MGMT_OP_READ_VERSION,
- .expect_status = MGMT_STATUS_INVALID_INDEX,
- };
- static const struct generic_data read_commands_invalid_param_test = {
- .send_index_none = true,
- .send_opcode = MGMT_OP_READ_COMMANDS,
- .send_param = dummy_data,
- .send_len = sizeof(dummy_data),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data read_commands_invalid_index_test = {
- .send_opcode = MGMT_OP_READ_COMMANDS,
- .expect_status = MGMT_STATUS_INVALID_INDEX,
- };
- static const struct generic_data read_index_list_invalid_param_test = {
- .send_index_none = true,
- .send_opcode = MGMT_OP_READ_INDEX_LIST,
- .send_param = dummy_data,
- .send_len = sizeof(dummy_data),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data read_index_list_invalid_index_test = {
- .send_opcode = MGMT_OP_READ_INDEX_LIST,
- .expect_status = MGMT_STATUS_INVALID_INDEX,
- };
- static const struct generic_data read_info_invalid_param_test = {
- .send_opcode = MGMT_OP_READ_INFO,
- .send_param = dummy_data,
- .send_len = sizeof(dummy_data),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data read_info_invalid_index_test = {
- .send_index_none = true,
- .send_opcode = MGMT_OP_READ_INFO,
- .expect_status = MGMT_STATUS_INVALID_INDEX,
- };
- static const struct generic_data read_unconf_index_list_invalid_param_test = {
- .send_index_none = true,
- .send_opcode = MGMT_OP_READ_UNCONF_INDEX_LIST,
- .send_param = dummy_data,
- .send_len = sizeof(dummy_data),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data read_unconf_index_list_invalid_index_test = {
- .send_opcode = MGMT_OP_READ_UNCONF_INDEX_LIST,
- .expect_status = MGMT_STATUS_INVALID_INDEX,
- };
- static const struct generic_data read_config_info_invalid_param_test = {
- .send_opcode = MGMT_OP_READ_CONFIG_INFO,
- .send_param = dummy_data,
- .send_len = sizeof(dummy_data),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data read_config_info_invalid_index_test = {
- .send_index_none = true,
- .send_opcode = MGMT_OP_READ_CONFIG_INFO,
- .expect_status = MGMT_STATUS_INVALID_INDEX,
- };
- static const struct generic_data read_ext_index_list_invalid_param_test = {
- .send_index_none = true,
- .send_opcode = MGMT_OP_READ_EXT_INDEX_LIST,
- .send_param = dummy_data,
- .send_len = sizeof(dummy_data),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data read_ext_index_list_invalid_index_test = {
- .send_opcode = MGMT_OP_READ_EXT_INDEX_LIST,
- .expect_status = MGMT_STATUS_INVALID_INDEX,
- };
- static const char set_powered_on_param[] = { 0x01 };
- static const char set_powered_invalid_param[] = { 0x02 };
- static const char set_powered_garbage_param[] = { 0x01, 0x00 };
- static const char set_powered_settings_param[] = { 0x81, 0x00, 0x00, 0x00 };
- static const struct generic_data set_powered_on_success_test = {
- .send_opcode = MGMT_OP_SET_POWERED,
- .send_param = set_powered_on_param,
- .send_len = sizeof(set_powered_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_powered_settings_param,
- .expect_len = sizeof(set_powered_settings_param),
- .expect_settings_set = MGMT_SETTING_POWERED,
- };
- static const struct generic_data set_powered_on_invalid_param_test_1 = {
- .send_opcode = MGMT_OP_SET_POWERED,
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_powered_on_invalid_param_test_2 = {
- .send_opcode = MGMT_OP_SET_POWERED,
- .send_param = set_powered_invalid_param,
- .send_len = sizeof(set_powered_invalid_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_powered_on_invalid_param_test_3 = {
- .send_opcode = MGMT_OP_SET_POWERED,
- .send_param = set_powered_garbage_param,
- .send_len = sizeof(set_powered_garbage_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_powered_on_invalid_index_test = {
- .send_index_none = true,
- .send_opcode = MGMT_OP_SET_POWERED,
- .send_param = set_powered_on_param,
- .send_len = sizeof(set_powered_on_param),
- .expect_status = MGMT_STATUS_INVALID_INDEX,
- };
- static uint16_t settings_powered_advertising_privacy[] = {
- MGMT_OP_SET_PRIVACY,
- MGMT_OP_SET_ADVERTISING,
- MGMT_OP_SET_POWERED, 0 };
- static const char set_adv_off_param[] = { 0x00 };
- static const struct generic_data set_powered_on_privacy_adv_test = {
- .setup_settings = settings_powered_advertising_privacy,
- .send_opcode = MGMT_OP_SET_ADVERTISING,
- .send_param = set_adv_off_param,
- .send_len = sizeof(set_adv_off_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_ignore_param = true,
- };
- static const uint16_t settings_powered[] = { MGMT_OP_SET_POWERED, 0 };
- static const char set_powered_off_param[] = { 0x00 };
- static const char set_powered_off_settings_param[] = { 0x80, 0x00, 0x00, 0x00 };
- static const char set_powered_off_class_of_dev[] = { 0x00, 0x00, 0x00 };
- static const struct generic_data set_powered_off_success_test = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_SET_POWERED,
- .send_param = set_powered_off_param,
- .send_len = sizeof(set_powered_off_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_powered_off_settings_param,
- .expect_len = sizeof(set_powered_off_settings_param),
- .expect_settings_unset = MGMT_SETTING_POWERED,
- };
- static const struct generic_data set_powered_off_class_test = {
- .send_opcode = MGMT_OP_SET_POWERED,
- .send_param = set_powered_off_param,
- .send_len = sizeof(set_powered_off_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_powered_off_settings_param,
- .expect_len = sizeof(set_powered_off_settings_param),
- .expect_settings_unset = MGMT_SETTING_POWERED,
- .expect_alt_ev = MGMT_EV_CLASS_OF_DEV_CHANGED,
- .expect_alt_ev_param = set_powered_off_class_of_dev,
- .expect_alt_ev_len = sizeof(set_powered_off_class_of_dev),
- };
- static const struct generic_data set_powered_off_invalid_param_test_1 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_SET_POWERED,
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_powered_off_invalid_param_test_2 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_SET_POWERED,
- .send_param = set_powered_invalid_param,
- .send_len = sizeof(set_powered_invalid_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_powered_off_invalid_param_test_3 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_SET_POWERED,
- .send_param = set_powered_garbage_param,
- .send_len = sizeof(set_powered_garbage_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const char set_connectable_on_param[] = { 0x01 };
- static const char set_connectable_invalid_param[] = { 0x02 };
- static const char set_connectable_garbage_param[] = { 0x01, 0x00 };
- static const char set_connectable_settings_param_1[] = { 0x82, 0x00, 0x00, 0x00 };
- static const char set_connectable_settings_param_2[] = { 0x83, 0x00, 0x00, 0x00 };
- static const char set_connectable_scan_enable_param[] = { 0x02 };
- static const struct generic_data set_connectable_on_success_test_1 = {
- .send_opcode = MGMT_OP_SET_CONNECTABLE,
- .send_param = set_connectable_on_param,
- .send_len = sizeof(set_connectable_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_connectable_settings_param_1,
- .expect_len = sizeof(set_connectable_settings_param_1),
- .expect_settings_set = MGMT_SETTING_CONNECTABLE,
- };
- static const struct generic_data set_connectable_on_success_test_2 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_SET_CONNECTABLE,
- .send_param = set_connectable_on_param,
- .send_len = sizeof(set_connectable_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_connectable_settings_param_2,
- .expect_len = sizeof(set_connectable_settings_param_2),
- .expect_settings_set = MGMT_SETTING_CONNECTABLE,
- .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
- .expect_hci_param = set_connectable_scan_enable_param,
- .expect_hci_len = sizeof(set_connectable_scan_enable_param),
- };
- static const struct generic_data set_connectable_on_invalid_param_test_1 = {
- .send_opcode = MGMT_OP_SET_CONNECTABLE,
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_connectable_on_invalid_param_test_2 = {
- .send_opcode = MGMT_OP_SET_CONNECTABLE,
- .send_param = set_connectable_invalid_param,
- .send_len = sizeof(set_connectable_invalid_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_connectable_on_invalid_param_test_3 = {
- .send_opcode = MGMT_OP_SET_CONNECTABLE,
- .send_param = set_connectable_garbage_param,
- .send_len = sizeof(set_connectable_garbage_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_connectable_on_invalid_index_test = {
- .send_index_none = true,
- .send_opcode = MGMT_OP_SET_CONNECTABLE,
- .send_param = set_connectable_on_param,
- .send_len = sizeof(set_connectable_on_param),
- .expect_status = MGMT_STATUS_INVALID_INDEX,
- };
- static uint16_t settings_powered_advertising[] = { MGMT_OP_SET_ADVERTISING,
- MGMT_OP_SET_POWERED, 0 };
- static const char set_connectable_le_settings_param_1[] = { 0x02, 0x02, 0x00, 0x00 };
- static const char set_connectable_le_settings_param_2[] = { 0x03, 0x02, 0x00, 0x00 };
- static const char set_connectable_le_settings_param_3[] = { 0x03, 0x06, 0x00, 0x00 };
- static const struct generic_data set_connectable_on_le_test_1 = {
- .send_opcode = MGMT_OP_SET_CONNECTABLE,
- .send_param = set_connectable_on_param,
- .send_len = sizeof(set_connectable_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_connectable_le_settings_param_1,
- .expect_len = sizeof(set_connectable_le_settings_param_1),
- .expect_settings_set = MGMT_SETTING_CONNECTABLE,
- };
- static const struct generic_data set_connectable_on_le_test_2 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_SET_CONNECTABLE,
- .send_param = set_connectable_on_param,
- .send_len = sizeof(set_connectable_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_connectable_le_settings_param_2,
- .expect_len = sizeof(set_connectable_le_settings_param_2),
- .expect_settings_set = MGMT_SETTING_CONNECTABLE,
- };
- static uint8_t set_connectable_on_adv_param[] = {
- 0x00, 0x08, /* min_interval */
- 0x00, 0x08, /* max_interval */
- 0x00, /* type */
- 0x00, /* own_addr_type */
- 0x00, /* direct_addr_type */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* direct_addr */
- 0x07, /* channel_map */
- 0x00, /* filter_policy */
- };
- static const struct generic_data set_connectable_on_le_test_3 = {
- .setup_settings = settings_powered_advertising,
- .send_opcode = MGMT_OP_SET_CONNECTABLE,
- .send_param = set_connectable_on_param,
- .send_len = sizeof(set_connectable_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_connectable_le_settings_param_3,
- .expect_len = sizeof(set_connectable_le_settings_param_3),
- .expect_settings_set = MGMT_SETTING_CONNECTABLE,
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
- .expect_hci_param = set_connectable_on_adv_param,
- .expect_hci_len = sizeof(set_connectable_on_adv_param),
- };
- static const uint16_t settings_connectable[] = { MGMT_OP_SET_CONNECTABLE, 0 };
- static const uint16_t settings_powered_connectable[] = {
- MGMT_OP_SET_CONNECTABLE,
- MGMT_OP_SET_POWERED, 0 };
- static const uint16_t settings_powered_discoverable[] = {
- MGMT_OP_SET_CONNECTABLE,
- MGMT_OP_SET_DISCOVERABLE,
- MGMT_OP_SET_POWERED, 0 };
- static const char set_connectable_off_param[] = { 0x00 };
- static const char set_connectable_off_settings_1[] = { 0x80, 0x00, 0x00, 0x00 };
- static const char set_connectable_off_settings_2[] = { 0x81, 0x00, 0x00, 0x00 };
- static const char set_connectable_off_scan_enable_param[] = { 0x00 };
- static const struct generic_data set_connectable_off_success_test_1 = {
- .setup_settings = settings_connectable,
- .send_opcode = MGMT_OP_SET_CONNECTABLE,
- .send_param = set_connectable_off_param,
- .send_len = sizeof(set_connectable_off_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_connectable_off_settings_1,
- .expect_len = sizeof(set_connectable_off_settings_1),
- .expect_settings_unset = MGMT_SETTING_CONNECTABLE,
- };
- static const struct generic_data set_connectable_off_success_test_2 = {
- .setup_settings = settings_powered_connectable,
- .send_opcode = MGMT_OP_SET_CONNECTABLE,
- .send_param = set_connectable_off_param,
- .send_len = sizeof(set_connectable_off_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_connectable_off_settings_2,
- .expect_len = sizeof(set_connectable_off_settings_2),
- .expect_settings_unset = MGMT_SETTING_CONNECTABLE,
- .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
- .expect_hci_param = set_connectable_off_scan_enable_param,
- .expect_hci_len = sizeof(set_connectable_off_scan_enable_param),
- };
- static const struct generic_data set_connectable_off_success_test_3 = {
- .setup_settings = settings_powered_discoverable,
- .send_opcode = MGMT_OP_SET_CONNECTABLE,
- .send_param = set_connectable_off_param,
- .send_len = sizeof(set_connectable_off_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_connectable_off_settings_2,
- .expect_len = sizeof(set_connectable_off_settings_2),
- .expect_settings_unset = MGMT_SETTING_CONNECTABLE,
- .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
- .expect_hci_param = set_connectable_off_scan_enable_param,
- .expect_hci_len = sizeof(set_connectable_off_scan_enable_param),
- };
- static const struct generic_data set_connectable_off_success_test_4 = {
- .setup_settings = settings_powered_discoverable,
- .send_opcode = MGMT_OP_SET_CONNECTABLE,
- .send_param = set_connectable_off_param,
- .send_len = sizeof(set_connectable_off_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_connectable_off_settings_2,
- .expect_len = sizeof(set_connectable_off_settings_2),
- .expect_settings_unset = MGMT_SETTING_CONNECTABLE,
- .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
- .expect_hci_param = set_connectable_scan_enable_param,
- .expect_hci_len = sizeof(set_connectable_scan_enable_param),
- };
- static const char set_connectable_off_le_settings_1[] = { 0x00, 0x02, 0x00, 0x00 };
- static const char set_connectable_off_le_settings_2[] = { 0x01, 0x06, 0x00, 0x00 };
- static uint16_t settings_le_connectable[] = { MGMT_OP_SET_LE,
- MGMT_OP_SET_CONNECTABLE, 0 };
- static const struct generic_data set_connectable_off_le_test_1 = {
- .setup_settings = settings_le_connectable,
- .send_opcode = MGMT_OP_SET_CONNECTABLE,
- .send_param = set_connectable_off_param,
- .send_len = sizeof(set_connectable_off_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_connectable_off_le_settings_1,
- .expect_len = sizeof(set_connectable_off_le_settings_1),
- .expect_settings_unset = MGMT_SETTING_CONNECTABLE,
- };
- static uint16_t settings_powered_le_connectable_advertising[] = {
- MGMT_OP_SET_LE,
- MGMT_OP_SET_CONNECTABLE,
- MGMT_OP_SET_ADVERTISING,
- MGMT_OP_SET_POWERED, 0 };
- static uint8_t set_connectable_off_scan_adv_param[] = {
- 0x64, 0x00, /* min_interval */
- 0x96, 0x00, /* max_interval */
- 0x02, /* type */
- 0x01, /* own_addr_type */
- 0x00, /* direct_addr_type */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* direct_addr */
- 0x07, /* channel_map */
- 0x00, /* filter_policy */
- };
- static int set_connectable_off_scan_adv_check_func(const void *param,
- uint16_t length)
- {
- const uint8_t *received = param;
- uint8_t *expected = set_connectable_off_scan_adv_param;
- /* Compare the received param with expected param, but ignore the
- * min_internal and max_interval since these values are turned often
- * in the kernel and we don't want to update the expected value every
- * time.
- */
- return memcmp(&received[4], &expected[4], length - 4);
- }
- static const struct generic_data set_connectable_off_le_test_2 = {
- .setup_settings = settings_powered_le_connectable_advertising,
- .send_opcode = MGMT_OP_SET_CONNECTABLE,
- .send_param = set_connectable_off_param,
- .send_len = sizeof(set_connectable_off_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_connectable_off_le_settings_2,
- .expect_len = sizeof(set_connectable_off_le_settings_2),
- .expect_settings_unset = MGMT_SETTING_CONNECTABLE,
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
- .expect_hci_param = set_connectable_off_scan_adv_param,
- .expect_hci_len = sizeof(set_connectable_off_scan_adv_param),
- .expect_hci_param_check_func = set_connectable_off_scan_adv_check_func
- };
- static uint16_t settings_powered_le_discoverable[] = {
- MGMT_OP_SET_LE,
- MGMT_OP_SET_CONNECTABLE,
- MGMT_OP_SET_POWERED,
- MGMT_OP_SET_DISCOVERABLE, 0 };
- static uint16_t settings_powered_le_discoverable_advertising[] = {
- MGMT_OP_SET_LE,
- MGMT_OP_SET_CONNECTABLE,
- MGMT_OP_SET_ADVERTISING,
- MGMT_OP_SET_POWERED,
- MGMT_OP_SET_DISCOVERABLE, 0 };
- static const struct generic_data set_connectable_off_le_test_3 = {
- .setup_settings = settings_powered_le_discoverable_advertising,
- .send_opcode = MGMT_OP_SET_CONNECTABLE,
- .send_param = set_connectable_off_param,
- .send_len = sizeof(set_connectable_off_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_connectable_off_le_settings_2,
- .expect_len = sizeof(set_connectable_off_le_settings_2),
- .expect_settings_unset = MGMT_SETTING_CONNECTABLE,
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
- .expect_hci_param = set_connectable_off_scan_adv_param,
- .expect_hci_len = sizeof(set_connectable_off_scan_adv_param),
- .expect_hci_param_check_func = set_connectable_off_scan_adv_check_func
- };
- static const struct generic_data set_connectable_off_le_test_4 = {
- .setup_settings = settings_powered_le_discoverable_advertising,
- .setup_limited_discov = true,
- .send_opcode = MGMT_OP_SET_CONNECTABLE,
- .send_param = set_connectable_off_param,
- .send_len = sizeof(set_connectable_off_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_connectable_off_le_settings_2,
- .expect_len = sizeof(set_connectable_off_le_settings_2),
- .expect_settings_unset = MGMT_SETTING_CONNECTABLE,
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
- .expect_hci_param = set_connectable_off_scan_adv_param,
- .expect_hci_len = sizeof(set_connectable_off_scan_adv_param),
- .expect_hci_param_check_func = set_connectable_off_scan_adv_check_func
- };
- static const char set_fast_conn_on_param[] = { 0x01 };
- static const char set_fast_conn_on_settings_1[] = { 0x87, 0x00, 0x00, 0x00 };
- static const char set_fast_conn_on_settings_2[] = { 0x85, 0x00, 0x00, 0x00 };
- static const char set_fast_conn_on_settings_3[] = { 0x84, 0x00, 0x00, 0x00 };
- static const struct generic_data set_fast_conn_on_success_test_1 = {
- .setup_settings = settings_powered_connectable,
- .send_opcode = MGMT_OP_SET_FAST_CONNECTABLE,
- .send_param = set_fast_conn_on_param,
- .send_len = sizeof(set_fast_conn_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_fast_conn_on_settings_1,
- .expect_len = sizeof(set_fast_conn_on_settings_1),
- .expect_settings_set = MGMT_SETTING_FAST_CONNECTABLE,
- };
- static const struct generic_data set_fast_conn_on_success_test_2 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_SET_FAST_CONNECTABLE,
- .send_param = set_fast_conn_on_param,
- .send_len = sizeof(set_fast_conn_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_fast_conn_on_settings_2,
- .expect_len = sizeof(set_fast_conn_on_settings_2),
- .expect_settings_set = MGMT_SETTING_FAST_CONNECTABLE,
- };
- static const struct generic_data set_fast_conn_on_success_test_3 = {
- .send_opcode = MGMT_OP_SET_FAST_CONNECTABLE,
- .send_param = set_fast_conn_on_param,
- .send_len = sizeof(set_fast_conn_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_fast_conn_on_settings_3,
- .expect_len = sizeof(set_fast_conn_on_settings_3),
- .expect_settings_set = MGMT_SETTING_FAST_CONNECTABLE,
- };
- static const struct generic_data set_fast_conn_on_not_supported_test_1 = {
- .setup_settings = settings_powered_connectable,
- .send_opcode = MGMT_OP_SET_FAST_CONNECTABLE,
- .send_param = set_fast_conn_on_param,
- .send_len = sizeof(set_fast_conn_on_param),
- .expect_status = MGMT_STATUS_NOT_SUPPORTED,
- };
- static const char set_fast_conn_nval_param[] = { 0xff };
- static const struct generic_data set_fast_conn_nval_param_test_1 = {
- .send_opcode = MGMT_OP_SET_FAST_CONNECTABLE,
- .send_param = set_fast_conn_nval_param,
- .send_len = sizeof(set_fast_conn_nval_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const char set_bondable_on_param[] = { 0x01 };
- static const char set_bondable_invalid_param[] = { 0x02 };
- static const char set_bondable_garbage_param[] = { 0x01, 0x00 };
- static const char set_bondable_settings_param[] = { 0x90, 0x00, 0x00, 0x00 };
- static const struct generic_data set_bondable_on_success_test = {
- .send_opcode = MGMT_OP_SET_BONDABLE,
- .send_param = set_bondable_on_param,
- .send_len = sizeof(set_bondable_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_bondable_settings_param,
- .expect_len = sizeof(set_bondable_settings_param),
- .expect_settings_set = MGMT_SETTING_BONDABLE,
- };
- static const struct generic_data set_bondable_on_invalid_param_test_1 = {
- .send_opcode = MGMT_OP_SET_BONDABLE,
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_bondable_on_invalid_param_test_2 = {
- .send_opcode = MGMT_OP_SET_BONDABLE,
- .send_param = set_bondable_invalid_param,
- .send_len = sizeof(set_bondable_invalid_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_bondable_on_invalid_param_test_3 = {
- .send_opcode = MGMT_OP_SET_BONDABLE,
- .send_param = set_bondable_garbage_param,
- .send_len = sizeof(set_bondable_garbage_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_bondable_on_invalid_index_test = {
- .send_index_none = true,
- .send_opcode = MGMT_OP_SET_BONDABLE,
- .send_param = set_bondable_on_param,
- .send_len = sizeof(set_bondable_on_param),
- .expect_status = MGMT_STATUS_INVALID_INDEX,
- };
- static const uint8_t set_discoverable_on_param[] = { 0x01, 0x00, 0x00 };
- static const uint8_t set_discoverable_timeout_param[] = { 0x01, 0x0a, 0x00 };
- static const uint8_t set_discoverable_invalid_param[] = { 0x02, 0x00, 0x00 };
- static const uint8_t set_discoverable_off_param[] = { 0x00, 0x00, 0x00 };
- static const uint8_t set_discoverable_offtimeout_param[] = { 0x00, 0x01, 0x00 };
- static const uint8_t set_discoverable_garbage_param[] = { 0x01, 0x00, 0x00, 0x00 };
- static const uint8_t set_discoverable_on_settings_param_1[] = { 0x8a, 0x00, 0x00, 0x00 };
- static const uint8_t set_discoverable_on_settings_param_2[] = { 0x8b, 0x00, 0x00, 0x00 };
- static const uint8_t set_discoverable_off_settings_param_1[] = { 0x82, 0x00, 0x00, 0x00 };
- static const uint8_t set_discoverable_off_settings_param_2[] = { 0x83, 0x00, 0x00, 0x00 };
- static const uint8_t set_discoverable_on_scan_enable_param[] = { 0x03 };
- static const uint8_t set_discoverable_off_scan_enable_param[] = { 0x02 };
- static const struct generic_data set_discoverable_on_invalid_param_test_1 = {
- .send_opcode = MGMT_OP_SET_DISCOVERABLE,
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_discoverable_on_invalid_param_test_2 = {
- .send_opcode = MGMT_OP_SET_DISCOVERABLE,
- .send_param = set_discoverable_invalid_param,
- .send_len = sizeof(set_discoverable_invalid_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_discoverable_on_invalid_param_test_3 = {
- .send_opcode = MGMT_OP_SET_DISCOVERABLE,
- .send_param = set_discoverable_garbage_param,
- .send_len = sizeof(set_discoverable_garbage_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_discoverable_on_invalid_param_test_4 = {
- .send_opcode = MGMT_OP_SET_DISCOVERABLE,
- .send_param = set_discoverable_offtimeout_param,
- .send_len = sizeof(set_discoverable_offtimeout_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_discoverable_on_not_powered_test_1 = {
- .send_opcode = MGMT_OP_SET_DISCOVERABLE,
- .send_param = set_discoverable_timeout_param,
- .send_len = sizeof(set_discoverable_timeout_param),
- .expect_status = MGMT_STATUS_NOT_POWERED,
- };
- static const struct generic_data set_discoverable_on_not_powered_test_2 = {
- .setup_settings = settings_connectable,
- .send_opcode = MGMT_OP_SET_DISCOVERABLE,
- .send_param = set_discoverable_timeout_param,
- .send_len = sizeof(set_discoverable_timeout_param),
- .expect_status = MGMT_STATUS_NOT_POWERED,
- };
- static const struct generic_data set_discoverable_on_rejected_test_1 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_SET_DISCOVERABLE,
- .send_param = set_discoverable_on_param,
- .send_len = sizeof(set_discoverable_on_param),
- .expect_status = MGMT_STATUS_REJECTED,
- };
- static const struct generic_data set_discoverable_on_rejected_test_2 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_SET_DISCOVERABLE,
- .send_param = set_discoverable_on_param,
- .send_len = sizeof(set_discoverable_on_param),
- .expect_status = MGMT_STATUS_REJECTED,
- };
- static const struct generic_data set_discoverable_on_rejected_test_3 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_SET_DISCOVERABLE,
- .send_param = set_discoverable_timeout_param,
- .send_len = sizeof(set_discoverable_timeout_param),
- .expect_status = MGMT_STATUS_REJECTED,
- };
- static const struct generic_data set_discoverable_on_success_test_1 = {
- .setup_settings = settings_connectable,
- .send_opcode = MGMT_OP_SET_DISCOVERABLE,
- .send_param = set_discoverable_on_param,
- .send_len = sizeof(set_discoverable_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_discoverable_on_settings_param_1,
- .expect_len = sizeof(set_discoverable_on_settings_param_1),
- .expect_settings_set = MGMT_SETTING_DISCOVERABLE,
- };
- static const struct generic_data set_discoverable_on_success_test_2 = {
- .setup_settings = settings_powered_connectable,
- .send_opcode = MGMT_OP_SET_DISCOVERABLE,
- .send_param = set_discoverable_on_param,
- .send_len = sizeof(set_discoverable_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_discoverable_on_settings_param_2,
- .expect_len = sizeof(set_discoverable_on_settings_param_2),
- .expect_settings_set = MGMT_SETTING_DISCOVERABLE,
- .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
- .expect_hci_param = set_discoverable_on_scan_enable_param,
- .expect_hci_len = sizeof(set_discoverable_on_scan_enable_param),
- };
- static uint8_t set_discov_on_le_param[] = { 0x0b, 0x06, 0x00, 0x00 };
- static uint8_t set_discov_adv_data[32] = { 0x06, 0x02, 0x01, 0x06,
- 0x02, 0x0a, };
- static const struct generic_data set_discov_on_le_success_1 = {
- .setup_settings = settings_powered_le_connectable_advertising,
- .send_opcode = MGMT_OP_SET_DISCOVERABLE,
- .send_param = set_discoverable_on_param,
- .send_len = sizeof(set_discoverable_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_discov_on_le_param,
- .expect_len = sizeof(set_discov_on_le_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
- .expect_hci_param = set_discov_adv_data,
- .expect_hci_len = sizeof(set_discov_adv_data),
- };
- static const struct generic_data set_discoverable_off_success_test_1 = {
- .setup_settings = settings_connectable,
- .send_opcode = MGMT_OP_SET_DISCOVERABLE,
- .send_param = set_discoverable_off_param,
- .send_len = sizeof(set_discoverable_off_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_discoverable_off_settings_param_1,
- .expect_len = sizeof(set_discoverable_off_settings_param_1),
- };
- static const struct generic_data set_discoverable_off_success_test_2 = {
- .setup_settings = settings_powered_discoverable,
- .send_opcode = MGMT_OP_SET_DISCOVERABLE,
- .send_param = set_discoverable_off_param,
- .send_len = sizeof(set_discoverable_off_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_discoverable_off_settings_param_2,
- .expect_len = sizeof(set_discoverable_off_settings_param_2),
- .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
- .expect_hci_param = set_discoverable_off_scan_enable_param,
- .expect_hci_len = sizeof(set_discoverable_off_scan_enable_param),
- };
- static const uint8_t set_limited_discov_on_param[] = { 0x02, 0x01, 0x00 };
- static const struct generic_data set_limited_discov_on_success_1 = {
- .setup_settings = settings_powered_connectable,
- .send_opcode = MGMT_OP_SET_DISCOVERABLE,
- .send_param = set_limited_discov_on_param,
- .send_len = sizeof(set_limited_discov_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_discoverable_on_settings_param_2,
- .expect_len = sizeof(set_discoverable_on_settings_param_2),
- .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
- .expect_hci_param = set_discoverable_on_scan_enable_param,
- .expect_hci_len = sizeof(set_discoverable_on_scan_enable_param),
- };
- static uint8_t write_current_iac_lap_limited[] = { 0x01, 0x00, 0x8b, 0x9e };
- static const struct generic_data set_limited_discov_on_success_2 = {
- .setup_settings = settings_powered_connectable,
- .send_opcode = MGMT_OP_SET_DISCOVERABLE,
- .send_param = set_limited_discov_on_param,
- .send_len = sizeof(set_limited_discov_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_discoverable_on_settings_param_2,
- .expect_len = sizeof(set_discoverable_on_settings_param_2),
- .expect_hci_command = BT_HCI_CMD_WRITE_CURRENT_IAC_LAP,
- .expect_hci_param = write_current_iac_lap_limited,
- .expect_hci_len = sizeof(write_current_iac_lap_limited),
- };
- static uint8_t write_cod_limited[] = { 0x00, 0x20, 0x00 };
- static const struct generic_data set_limited_discov_on_success_3 = {
- .setup_settings = settings_powered_connectable,
- .send_opcode = MGMT_OP_SET_DISCOVERABLE,
- .send_param = set_limited_discov_on_param,
- .send_len = sizeof(set_limited_discov_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_discoverable_on_settings_param_2,
- .expect_len = sizeof(set_discoverable_on_settings_param_2),
- .expect_hci_command = BT_HCI_CMD_WRITE_CLASS_OF_DEV,
- .expect_hci_param = write_cod_limited,
- .expect_hci_len = sizeof(write_cod_limited),
- };
- static uint8_t set_limited_discov_adv_data[32] = { 0x06, 0x02, 0x01, 0x05,
- 0x02, 0x0a, };
- static const struct generic_data set_limited_discov_on_le_success_1 = {
- .setup_settings = settings_powered_le_connectable_advertising,
- .send_opcode = MGMT_OP_SET_DISCOVERABLE,
- .send_param = set_limited_discov_on_param,
- .send_len = sizeof(set_limited_discov_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_discov_on_le_param,
- .expect_len = sizeof(set_discov_on_le_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
- .expect_hci_param = set_limited_discov_adv_data,
- .expect_hci_len = sizeof(set_limited_discov_adv_data),
- };
- static uint16_t settings_link_sec[] = { MGMT_OP_SET_LINK_SECURITY, 0 };
- static const char set_link_sec_on_param[] = { 0x01 };
- static const char set_link_sec_invalid_param[] = { 0x02 };
- static const char set_link_sec_garbage_param[] = { 0x01, 0x00 };
- static const char set_link_sec_settings_param_1[] = { 0xa0, 0x00, 0x00, 0x00 };
- static const char set_link_sec_settings_param_2[] = { 0xa1, 0x00, 0x00, 0x00 };
- static const char set_link_sec_auth_enable_param[] = { 0x01 };
- static const struct generic_data set_link_sec_on_success_test_1 = {
- .send_opcode = MGMT_OP_SET_LINK_SECURITY,
- .send_param = set_link_sec_on_param,
- .send_len = sizeof(set_link_sec_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_link_sec_settings_param_1,
- .expect_len = sizeof(set_link_sec_settings_param_1),
- .expect_settings_set = MGMT_SETTING_LINK_SECURITY,
- };
- static const struct generic_data set_link_sec_on_success_test_2 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_SET_LINK_SECURITY,
- .send_param = set_link_sec_on_param,
- .send_len = sizeof(set_link_sec_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_link_sec_settings_param_2,
- .expect_len = sizeof(set_link_sec_settings_param_2),
- .expect_settings_set = MGMT_SETTING_LINK_SECURITY,
- .expect_hci_command = BT_HCI_CMD_WRITE_AUTH_ENABLE,
- .expect_hci_param = set_link_sec_auth_enable_param,
- .expect_hci_len = sizeof(set_link_sec_auth_enable_param),
- };
- static const struct generic_data set_link_sec_on_success_test_3 = {
- .setup_settings = settings_link_sec,
- .send_opcode = MGMT_OP_SET_POWERED,
- .send_param = set_powered_on_param,
- .send_len = sizeof(set_powered_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_link_sec_settings_param_2,
- .expect_len = sizeof(set_link_sec_settings_param_2),
- .expect_settings_set = MGMT_SETTING_LINK_SECURITY,
- .expect_hci_command = BT_HCI_CMD_WRITE_AUTH_ENABLE,
- .expect_hci_param = set_link_sec_auth_enable_param,
- .expect_hci_len = sizeof(set_link_sec_auth_enable_param),
- };
- static const struct generic_data set_link_sec_on_invalid_param_test_1 = {
- .send_opcode = MGMT_OP_SET_LINK_SECURITY,
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_link_sec_on_invalid_param_test_2 = {
- .send_opcode = MGMT_OP_SET_LINK_SECURITY,
- .send_param = set_link_sec_invalid_param,
- .send_len = sizeof(set_link_sec_invalid_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_link_sec_on_invalid_param_test_3 = {
- .send_opcode = MGMT_OP_SET_LINK_SECURITY,
- .send_param = set_link_sec_garbage_param,
- .send_len = sizeof(set_link_sec_garbage_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_link_sec_on_invalid_index_test = {
- .send_index_none = true,
- .send_opcode = MGMT_OP_SET_LINK_SECURITY,
- .send_param = set_link_sec_on_param,
- .send_len = sizeof(set_link_sec_on_param),
- .expect_status = MGMT_STATUS_INVALID_INDEX,
- };
- static const uint16_t settings_powered_link_sec[] = {
- MGMT_OP_SET_LINK_SECURITY,
- MGMT_OP_SET_POWERED, 0 };
- static const char set_link_sec_off_param[] = { 0x00 };
- static const char set_link_sec_off_settings_1[] = { 0x80, 0x00, 0x00, 0x00 };
- static const char set_link_sec_off_settings_2[] = { 0x81, 0x00, 0x00, 0x00 };
- static const char set_link_sec_off_auth_enable_param[] = { 0x00 };
- static const struct generic_data set_link_sec_off_success_test_1 = {
- .setup_settings = settings_link_sec,
- .send_opcode = MGMT_OP_SET_LINK_SECURITY,
- .send_param = set_link_sec_off_param,
- .send_len = sizeof(set_link_sec_off_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_link_sec_off_settings_1,
- .expect_len = sizeof(set_link_sec_off_settings_1),
- .expect_settings_unset = MGMT_SETTING_LINK_SECURITY,
- };
- static const struct generic_data set_link_sec_off_success_test_2 = {
- .setup_settings = settings_powered_link_sec,
- .send_opcode = MGMT_OP_SET_LINK_SECURITY,
- .send_param = set_link_sec_off_param,
- .send_len = sizeof(set_link_sec_off_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_link_sec_off_settings_2,
- .expect_len = sizeof(set_link_sec_off_settings_2),
- .expect_settings_unset = MGMT_SETTING_LINK_SECURITY,
- .expect_hci_command = BT_HCI_CMD_WRITE_AUTH_ENABLE,
- .expect_hci_param = set_link_sec_off_auth_enable_param,
- .expect_hci_len = sizeof(set_link_sec_off_auth_enable_param),
- };
- static uint16_t settings_ssp[] = { MGMT_OP_SET_SSP, 0 };
- static const char set_ssp_on_param[] = { 0x01 };
- static const char set_ssp_invalid_param[] = { 0x02 };
- static const char set_ssp_garbage_param[] = { 0x01, 0x00 };
- static const char set_ssp_settings_param_1[] = { 0xc0, 0x00, 0x00, 0x00 };
- static const char set_ssp_settings_param_2[] = { 0xc1, 0x00, 0x00, 0x00 };
- static const char set_ssp_on_write_ssp_mode_param[] = { 0x01 };
- static const struct generic_data set_ssp_on_success_test_1 = {
- .send_opcode = MGMT_OP_SET_SSP,
- .send_param = set_ssp_on_param,
- .send_len = sizeof(set_ssp_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_ssp_settings_param_1,
- .expect_len = sizeof(set_ssp_settings_param_1),
- .expect_settings_set = MGMT_SETTING_SSP,
- };
- static const struct generic_data set_ssp_on_success_test_2 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_SET_SSP,
- .send_param = set_ssp_on_param,
- .send_len = sizeof(set_ssp_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_ssp_settings_param_2,
- .expect_len = sizeof(set_ssp_settings_param_2),
- .expect_settings_set = MGMT_SETTING_SSP,
- .expect_hci_command = BT_HCI_CMD_WRITE_SIMPLE_PAIRING_MODE,
- .expect_hci_param = set_ssp_on_write_ssp_mode_param,
- .expect_hci_len = sizeof(set_ssp_on_write_ssp_mode_param),
- };
- static const struct generic_data set_ssp_on_success_test_3 = {
- .setup_settings = settings_ssp,
- .send_opcode = MGMT_OP_SET_POWERED,
- .send_param = set_powered_on_param,
- .send_len = sizeof(set_powered_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_ssp_settings_param_2,
- .expect_len = sizeof(set_ssp_settings_param_2),
- .expect_settings_set = MGMT_SETTING_SSP,
- .expect_hci_command = BT_HCI_CMD_WRITE_SIMPLE_PAIRING_MODE,
- .expect_hci_param = set_ssp_on_write_ssp_mode_param,
- .expect_hci_len = sizeof(set_ssp_on_write_ssp_mode_param),
- };
- static const struct generic_data set_ssp_on_invalid_param_test_1 = {
- .send_opcode = MGMT_OP_SET_SSP,
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_ssp_on_invalid_param_test_2 = {
- .send_opcode = MGMT_OP_SET_SSP,
- .send_param = set_ssp_invalid_param,
- .send_len = sizeof(set_ssp_invalid_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_ssp_on_invalid_param_test_3 = {
- .send_opcode = MGMT_OP_SET_SSP,
- .send_param = set_ssp_garbage_param,
- .send_len = sizeof(set_ssp_garbage_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_ssp_on_invalid_index_test = {
- .send_index_none = true,
- .send_opcode = MGMT_OP_SET_SSP,
- .send_param = set_ssp_on_param,
- .send_len = sizeof(set_ssp_on_param),
- .expect_status = MGMT_STATUS_INVALID_INDEX,
- };
- static uint16_t settings_powered_ssp[] = { MGMT_OP_SET_SSP,
- MGMT_OP_SET_POWERED, 0 };
- static uint16_t settings_powered_sc[] = { MGMT_OP_SET_SSP,
- MGMT_OP_SET_SECURE_CONN,
- MGMT_OP_SET_POWERED, 0 };
- static const char set_sc_on_param[] = { 0x01 };
- static const char set_sc_only_on_param[] = { 0x02 };
- static const char set_sc_invalid_param[] = { 0x03 };
- static const char set_sc_garbage_param[] = { 0x01, 0x00 };
- static const char set_sc_settings_param_1[] = { 0xc0, 0x08, 0x00, 0x00 };
- static const char set_sc_settings_param_2[] = { 0xc1, 0x08, 0x00, 0x00 };
- static const char set_sc_on_write_sc_support_param[] = { 0x01 };
- static const struct generic_data set_sc_on_success_test_1 = {
- .setup_settings = settings_ssp,
- .send_opcode = MGMT_OP_SET_SECURE_CONN,
- .send_param = set_sc_on_param,
- .send_len = sizeof(set_sc_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_sc_settings_param_1,
- .expect_len = sizeof(set_sc_settings_param_1),
- .expect_settings_set = MGMT_SETTING_SECURE_CONN,
- };
- static const struct generic_data set_sc_on_success_test_2 = {
- .setup_settings = settings_powered_ssp,
- .send_opcode = MGMT_OP_SET_SECURE_CONN,
- .send_param = set_sc_on_param,
- .send_len = sizeof(set_sc_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_sc_settings_param_2,
- .expect_len = sizeof(set_sc_settings_param_2),
- .expect_settings_set = MGMT_SETTING_SECURE_CONN,
- .expect_hci_command = BT_HCI_CMD_WRITE_SECURE_CONN_SUPPORT,
- .expect_hci_param = set_sc_on_write_sc_support_param,
- .expect_hci_len = sizeof(set_sc_on_write_sc_support_param),
- };
- static const struct generic_data set_sc_on_invalid_param_test_1 = {
- .setup_settings = settings_ssp,
- .send_opcode = MGMT_OP_SET_SECURE_CONN,
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_sc_on_invalid_param_test_2 = {
- .setup_settings = settings_ssp,
- .send_opcode = MGMT_OP_SET_SECURE_CONN,
- .send_param = set_sc_invalid_param,
- .send_len = sizeof(set_sc_invalid_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_sc_on_invalid_param_test_3 = {
- .setup_settings = settings_ssp,
- .send_opcode = MGMT_OP_SET_SECURE_CONN,
- .send_param = set_sc_garbage_param,
- .send_len = sizeof(set_sc_garbage_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_sc_on_invalid_index_test = {
- .setup_settings = settings_ssp,
- .send_index_none = true,
- .send_opcode = MGMT_OP_SET_SECURE_CONN,
- .send_param = set_sc_on_param,
- .send_len = sizeof(set_sc_on_param),
- .expect_status = MGMT_STATUS_INVALID_INDEX,
- };
- static const struct generic_data set_sc_on_not_supported_test_1 = {
- .setup_settings = settings_ssp,
- .send_opcode = MGMT_OP_SET_SECURE_CONN,
- .send_param = set_sc_on_param,
- .send_len = sizeof(set_sc_on_param),
- .expect_status = MGMT_STATUS_NOT_SUPPORTED,
- };
- static const struct generic_data set_sc_on_not_supported_test_2 = {
- .setup_settings = settings_powered_ssp,
- .send_opcode = MGMT_OP_SET_SECURE_CONN,
- .send_param = set_sc_on_param,
- .send_len = sizeof(set_sc_on_param),
- .expect_status = MGMT_STATUS_NOT_SUPPORTED,
- };
- static const struct generic_data set_sc_only_on_success_test_1 = {
- .setup_settings = settings_ssp,
- .send_opcode = MGMT_OP_SET_SECURE_CONN,
- .send_param = set_sc_only_on_param,
- .send_len = sizeof(set_sc_only_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_sc_settings_param_1,
- .expect_len = sizeof(set_sc_settings_param_1),
- .expect_settings_set = MGMT_SETTING_SECURE_CONN,
- };
- static const struct generic_data set_sc_only_on_success_test_2 = {
- .setup_settings = settings_powered_ssp,
- .send_opcode = MGMT_OP_SET_SECURE_CONN,
- .send_param = set_sc_only_on_param,
- .send_len = sizeof(set_sc_only_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_sc_settings_param_2,
- .expect_len = sizeof(set_sc_settings_param_2),
- .expect_settings_set = MGMT_SETTING_SECURE_CONN,
- .expect_hci_command = BT_HCI_CMD_WRITE_SECURE_CONN_SUPPORT,
- .expect_hci_param = set_sc_on_write_sc_support_param,
- .expect_hci_len = sizeof(set_sc_on_write_sc_support_param),
- };
- static const char set_hs_on_param[] = { 0x01 };
- static const char set_hs_invalid_param[] = { 0x02 };
- static const char set_hs_garbage_param[] = { 0x01, 0x00 };
- static const char set_hs_settings_param_1[] = { 0xc0, 0x01, 0x00, 0x00 };
- static const struct generic_data set_hs_on_success_test = {
- .setup_settings = settings_ssp,
- .send_opcode = MGMT_OP_SET_HS,
- .send_param = set_hs_on_param,
- .send_len = sizeof(set_hs_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_hs_settings_param_1,
- .expect_len = sizeof(set_hs_settings_param_1),
- .expect_settings_set = MGMT_SETTING_HS,
- };
- static const struct generic_data set_hs_on_invalid_param_test_1 = {
- .setup_settings = settings_ssp,
- .send_opcode = MGMT_OP_SET_HS,
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_hs_on_invalid_param_test_2 = {
- .setup_settings = settings_ssp,
- .send_opcode = MGMT_OP_SET_HS,
- .send_param = set_hs_invalid_param,
- .send_len = sizeof(set_hs_invalid_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_hs_on_invalid_param_test_3 = {
- .setup_settings = settings_ssp,
- .send_opcode = MGMT_OP_SET_HS,
- .send_param = set_hs_garbage_param,
- .send_len = sizeof(set_hs_garbage_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_hs_on_invalid_index_test = {
- .setup_settings = settings_ssp,
- .send_index_none = true,
- .send_opcode = MGMT_OP_SET_HS,
- .send_param = set_hs_on_param,
- .send_len = sizeof(set_hs_on_param),
- .expect_status = MGMT_STATUS_INVALID_INDEX,
- };
- static uint16_t settings_le[] = { MGMT_OP_SET_LE, 0 };
- static const char set_le_on_param[] = { 0x01 };
- static const char set_le_off_param[] = { 0x00 };
- static const char set_le_invalid_param[] = { 0x02 };
- static const char set_le_garbage_param[] = { 0x01, 0x00 };
- static const char set_le_settings_param_1[] = { 0x80, 0x02, 0x00, 0x00 };
- static const char set_le_settings_param_2[] = { 0x81, 0x02, 0x00, 0x00 };
- static const char set_le_on_write_le_host_param[] = { 0x01, 0x00 };
- static const struct generic_data set_le_on_success_test_1 = {
- .send_opcode = MGMT_OP_SET_LE,
- .send_param = set_le_on_param,
- .send_len = sizeof(set_le_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_le_settings_param_1,
- .expect_len = sizeof(set_le_settings_param_1),
- .expect_settings_set = MGMT_SETTING_LE,
- };
- static const struct generic_data set_le_on_success_test_2 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_SET_LE,
- .send_param = set_le_on_param,
- .send_len = sizeof(set_le_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_le_settings_param_2,
- .expect_len = sizeof(set_le_settings_param_2),
- .expect_settings_set = MGMT_SETTING_LE,
- .expect_hci_command = BT_HCI_CMD_WRITE_LE_HOST_SUPPORTED,
- .expect_hci_param = set_le_on_write_le_host_param,
- .expect_hci_len = sizeof(set_le_on_write_le_host_param),
- };
- static const struct generic_data set_le_on_success_test_3 = {
- .setup_settings = settings_le,
- .send_opcode = MGMT_OP_SET_POWERED,
- .send_param = set_powered_on_param,
- .send_len = sizeof(set_powered_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_le_settings_param_2,
- .expect_len = sizeof(set_le_settings_param_2),
- .expect_settings_set = MGMT_SETTING_LE,
- .expect_hci_command = BT_HCI_CMD_WRITE_LE_HOST_SUPPORTED,
- .expect_hci_param = set_le_on_write_le_host_param,
- .expect_hci_len = sizeof(set_le_on_write_le_host_param),
- };
- static const struct generic_data set_le_on_invalid_param_test_1 = {
- .send_opcode = MGMT_OP_SET_LE,
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_le_on_invalid_param_test_2 = {
- .send_opcode = MGMT_OP_SET_LE,
- .send_param = set_le_invalid_param,
- .send_len = sizeof(set_le_invalid_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_le_on_invalid_param_test_3 = {
- .send_opcode = MGMT_OP_SET_LE,
- .send_param = set_le_garbage_param,
- .send_len = sizeof(set_le_garbage_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data set_le_on_invalid_index_test = {
- .send_index_none = true,
- .send_opcode = MGMT_OP_SET_LE,
- .send_param = set_le_on_param,
- .send_len = sizeof(set_le_on_param),
- .expect_status = MGMT_STATUS_INVALID_INDEX,
- };
- static uint16_t settings_powered_le[] = { MGMT_OP_SET_LE,
- MGMT_OP_SET_POWERED, 0 };
- static const char set_adv_on_param[] = { 0x01 };
- static const char set_adv_settings_param_1[] = { 0x80, 0x06, 0x00, 0x00 };
- static const char set_adv_settings_param_2[] = { 0x81, 0x06, 0x00, 0x00 };
- static const char set_adv_on_set_adv_enable_param[] = { 0x01 };
- static const char set_adv_on_set_adv_disable_param[] = { 0x00 };
- static const struct generic_data set_adv_on_success_test_1 = {
- .setup_settings = settings_le,
- .send_opcode = MGMT_OP_SET_ADVERTISING,
- .send_param = set_adv_on_param,
- .send_len = sizeof(set_adv_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_adv_settings_param_1,
- .expect_len = sizeof(set_adv_settings_param_1),
- .expect_settings_set = MGMT_SETTING_ADVERTISING,
- };
- static const struct generic_data set_adv_on_success_test_2 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_SET_ADVERTISING,
- .send_param = set_adv_on_param,
- .send_len = sizeof(set_adv_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_adv_settings_param_2,
- .expect_len = sizeof(set_adv_settings_param_2),
- .expect_settings_set = MGMT_SETTING_ADVERTISING,
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_ENABLE,
- .expect_hci_param = set_adv_on_set_adv_enable_param,
- .expect_hci_len = sizeof(set_adv_on_set_adv_enable_param),
- };
- static const struct generic_data set_adv_on_rejected_test_1 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_SET_ADVERTISING,
- .send_param = set_adv_on_param,
- .send_len = sizeof(set_adv_on_param),
- .expect_status = MGMT_STATUS_REJECTED,
- };
- static const uint8_t set_adv_set_appearance_param[2] = { 0x54, 0x65 };
- static const uint8_t set_adv_scan_rsp_data_appear_1[] = {
- 0x04, /* Scan rsp data len */
- 0x03, /* Local name data len */
- 0x19, /* Complete name */
- 0x54, 0x65,
- /* padding */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- };
- static const struct generic_data set_adv_on_appearance_test_1 = {
- .setup_settings = settings_powered_le,
- .setup_send_opcode = MGMT_OP_SET_APPEARANCE,
- .setup_send_param = set_adv_set_appearance_param,
- .setup_send_len = sizeof(set_adv_set_appearance_param),
- .send_opcode = MGMT_OP_SET_ADVERTISING,
- .send_param = set_adv_on_param,
- .expect_param = set_adv_settings_param_2,
- .expect_len = sizeof(set_adv_settings_param_2),
- .send_len = sizeof(set_adv_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_RSP_DATA,
- .expect_hci_param = set_adv_scan_rsp_data_appear_1,
- .expect_hci_len = sizeof(set_adv_scan_rsp_data_appear_1),
- };
- static const char set_adv_set_local_name_param[260] = { 'T', 'e', 's', 't', ' ',
- 'n', 'a', 'm', 'e' };
- static const uint8_t set_adv_scan_rsp_data_name_1[] = {
- 0x0c, /* Scan rsp data len */
- 0x0b, /* Local name data len */
- 0x09, /* Complete name */
- 0x54, 0x65, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, /* "Test name" */
- 0x00, /* null */
- /* padding */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- };
- static const struct generic_data set_adv_on_local_name_test_1 = {
- .setup_settings = settings_powered_le,
- .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
- .setup_send_param = set_adv_set_local_name_param,
- .setup_send_len = sizeof(set_adv_set_local_name_param),
- .send_opcode = MGMT_OP_SET_ADVERTISING,
- .send_param = set_adv_on_param,
- .expect_param = set_adv_settings_param_2,
- .expect_len = sizeof(set_adv_settings_param_2),
- .send_len = sizeof(set_adv_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_RSP_DATA,
- .expect_hci_param = set_adv_scan_rsp_data_name_1,
- .expect_hci_len = sizeof(set_adv_scan_rsp_data_name_1),
- };
- static const struct setup_mgmt_cmd set_advertising_mgmt_cmd_arr[] = {
- {
- .send_opcode = MGMT_OP_SET_APPEARANCE,
- .send_param = set_adv_set_appearance_param,
- .send_len = sizeof(set_adv_set_appearance_param),
- },
- {
- .send_opcode = MGMT_OP_SET_LOCAL_NAME,
- .send_param = set_adv_set_local_name_param,
- .send_len = sizeof(set_adv_set_local_name_param),
- },
- { /* last element should always have opcode 0x00 */
- .send_opcode = 0x00,
- .send_param = NULL,
- .send_len = 0,
- }
- };
- static const uint8_t set_adv_scan_rsp_data_name_and_appearance[] = {
- 0x10, /* scan rsp data len */
- 0x03, /* appearance data len */
- 0x19, /* eir_appearance */
- 0x54, 0x65, /* appearance value */
- 0x0b, /* local name data len */
- 0x09, /* complete name */
- 0x54, 0x65, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, /* "test name" */
- 0x00, /* null */
- /* padding */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00,
- };
- static const struct generic_data set_adv_on_local_name_appear_test_1 = {
- .setup_settings = settings_powered_le,
- .setup_mgmt_cmd_arr = set_advertising_mgmt_cmd_arr,
- .send_opcode = MGMT_OP_SET_ADVERTISING,
- .send_param = set_adv_on_param,
- .expect_param = set_adv_settings_param_2,
- .expect_len = sizeof(set_adv_settings_param_2),
- .send_len = sizeof(set_adv_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_RSP_DATA,
- .expect_hci_param = set_adv_scan_rsp_data_name_and_appearance,
- .expect_hci_len = sizeof(set_adv_scan_rsp_data_name_and_appearance),
- };
- static const char set_bredr_off_param[] = { 0x00 };
- static const char set_bredr_on_param[] = { 0x01 };
- static const char set_bredr_invalid_param[] = { 0x02 };
- static const char set_bredr_settings_param_1[] = { 0x00, 0x02, 0x00, 0x00 };
- static const char set_bredr_settings_param_2[] = { 0x80, 0x02, 0x00, 0x00 };
- static const char set_bredr_settings_param_3[] = { 0x81, 0x02, 0x00, 0x00 };
- static const struct generic_data set_bredr_off_success_test_1 = {
- .setup_settings = settings_le,
- .send_opcode = MGMT_OP_SET_BREDR,
- .send_param = set_bredr_off_param,
- .send_len = sizeof(set_bredr_off_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_bredr_settings_param_1,
- .expect_len = sizeof(set_bredr_settings_param_1),
- .expect_settings_unset = MGMT_SETTING_BREDR,
- };
- static const struct generic_data set_bredr_on_success_test_1 = {
- .setup_settings = settings_le,
- .setup_nobredr = true,
- .send_opcode = MGMT_OP_SET_BREDR,
- .send_param = set_bredr_on_param,
- .send_len = sizeof(set_bredr_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_bredr_settings_param_2,
- .expect_len = sizeof(set_bredr_settings_param_2),
- .expect_settings_set = MGMT_SETTING_BREDR,
- };
- static const struct generic_data set_bredr_on_success_test_2 = {
- .setup_settings = settings_powered_le,
- .setup_nobredr = true,
- .send_opcode = MGMT_OP_SET_BREDR,
- .send_param = set_bredr_on_param,
- .send_len = sizeof(set_bredr_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_bredr_settings_param_3,
- .expect_len = sizeof(set_bredr_settings_param_3),
- .expect_settings_set = MGMT_SETTING_BREDR,
- };
- static const struct generic_data set_bredr_off_notsupp_test = {
- .send_opcode = MGMT_OP_SET_BREDR,
- .send_param = set_bredr_off_param,
- .send_len = sizeof(set_bredr_off_param),
- .expect_status = MGMT_STATUS_NOT_SUPPORTED,
- };
- static const struct generic_data set_bredr_off_failure_test_1 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_SET_BREDR,
- .send_param = set_bredr_off_param,
- .send_len = sizeof(set_bredr_off_param),
- .expect_status = MGMT_STATUS_REJECTED,
- };
- static const struct generic_data set_bredr_off_failure_test_2 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_SET_BREDR,
- .send_param = set_bredr_off_param,
- .send_len = sizeof(set_bredr_off_param),
- .expect_status = MGMT_STATUS_REJECTED,
- };
- static const struct generic_data set_bredr_off_failure_test_3 = {
- .setup_settings = settings_le,
- .send_opcode = MGMT_OP_SET_BREDR,
- .send_param = set_bredr_invalid_param,
- .send_len = sizeof(set_bredr_invalid_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const char set_local_name_param[260] = { 'T', 'e', 's', 't', ' ',
- 'n', 'a', 'm', 'e' };
- static const char write_local_name_hci[248] = { 'T', 'e', 's', 't', ' ',
- 'n', 'a', 'm', 'e' };
- static const char write_eir_local_name_hci_1[241] = { 0x00,
- 0x0a, 0x09, 'T', 'e', 's', 't', ' ', 'n', 'a', 'm', 'e',
- 0x02, 0x0a, 0x00, };
- static const struct mgmt_cp_set_local_name set_local_name_cp = {
- .name = {'T', 'e', 's', 't', ' ', 'n', 'a', 'm', 'e'},
- .short_name = {'T', 'e', 's', 't'},
- };
- static const struct mgmt_cp_set_local_name set_local_name_longer_cp = {
- .name = {'T', 'e', 's', 't', ' ', 'n', 'a', 'm', 'e', '1', '2', '3'},
- };
- static const struct mgmt_cp_set_local_name set_local_name_long_short_cp = {
- .name = {'T', 'e', 's', 't', ' ', 'n', 'a', 'm', 'e', '1', '2', '3'},
- .short_name = {'T', 'e', 's', 't'},
- };
- static const struct generic_data set_local_name_test_1 = {
- .send_opcode = MGMT_OP_SET_LOCAL_NAME,
- .send_param = set_local_name_param,
- .send_len = sizeof(set_local_name_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_local_name_param,
- .expect_len = sizeof(set_local_name_param),
- .expect_alt_ev = MGMT_EV_LOCAL_NAME_CHANGED,
- .expect_alt_ev_param = set_local_name_param,
- .expect_alt_ev_len = sizeof(set_local_name_param),
- };
- static const struct generic_data set_local_name_test_2 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_SET_LOCAL_NAME,
- .send_param = set_local_name_param,
- .send_len = sizeof(set_local_name_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_local_name_param,
- .expect_len = sizeof(set_local_name_param),
- .expect_hci_command = BT_HCI_CMD_WRITE_LOCAL_NAME,
- .expect_hci_param = write_local_name_hci,
- .expect_hci_len = sizeof(write_local_name_hci),
- .expect_alt_ev = MGMT_EV_LOCAL_NAME_CHANGED,
- .expect_alt_ev_param = set_local_name_param,
- .expect_alt_ev_len = sizeof(set_local_name_param),
- };
- static const struct generic_data set_local_name_test_3 = {
- .setup_settings = settings_powered_ssp,
- .send_opcode = MGMT_OP_SET_LOCAL_NAME,
- .send_param = set_local_name_param,
- .send_len = sizeof(set_local_name_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_local_name_param,
- .expect_len = sizeof(set_local_name_param),
- .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
- .expect_hci_param = write_eir_local_name_hci_1,
- .expect_hci_len = sizeof(write_eir_local_name_hci_1),
- .expect_alt_ev = MGMT_EV_LOCAL_NAME_CHANGED,
- .expect_alt_ev_param = set_local_name_param,
- .expect_alt_ev_len = sizeof(set_local_name_param),
- };
- static const char start_discovery_invalid_param[] = { 0x00 };
- static const char start_discovery_bredr_param[] = { 0x01 };
- static const char start_discovery_le_param[] = { 0x06 };
- static const char start_discovery_bredrle_param[] = { 0x07 };
- static const char start_discovery_valid_hci[] = { 0x01, 0x01 };
- static const char start_discovery_evt[] = { 0x07, 0x01 };
- static const char start_discovery_le_evt[] = { 0x06, 0x01 };
- static const struct generic_data start_discovery_not_powered_test_1 = {
- .send_opcode = MGMT_OP_START_DISCOVERY,
- .send_param = start_discovery_bredr_param,
- .send_len = sizeof(start_discovery_bredr_param),
- .expect_status = MGMT_STATUS_NOT_POWERED,
- .expect_param = start_discovery_bredr_param,
- .expect_len = sizeof(start_discovery_bredr_param),
- };
- static const struct generic_data start_discovery_invalid_param_test_1 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_START_DISCOVERY,
- .send_param = start_discovery_invalid_param,
- .send_len = sizeof(start_discovery_invalid_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- .expect_param = start_discovery_invalid_param,
- .expect_len = sizeof(start_discovery_invalid_param),
- };
- static const struct generic_data start_discovery_not_supported_test_1 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_START_DISCOVERY,
- .send_param = start_discovery_le_param,
- .send_len = sizeof(start_discovery_le_param),
- .expect_status = MGMT_STATUS_REJECTED,
- .expect_param = start_discovery_le_param,
- .expect_len = sizeof(start_discovery_le_param),
- };
- static const struct generic_data start_discovery_valid_param_test_1 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_START_DISCOVERY,
- .send_param = start_discovery_bredrle_param,
- .send_len = sizeof(start_discovery_bredrle_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = start_discovery_bredrle_param,
- .expect_len = sizeof(start_discovery_bredrle_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_ENABLE,
- .expect_hci_param = start_discovery_valid_hci,
- .expect_hci_len = sizeof(start_discovery_valid_hci),
- .expect_alt_ev = MGMT_EV_DISCOVERING,
- .expect_alt_ev_param = start_discovery_evt,
- .expect_alt_ev_len = sizeof(start_discovery_evt),
- };
- static const struct generic_data start_discovery_valid_param_test_2 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_START_DISCOVERY,
- .send_param = start_discovery_le_param,
- .send_len = sizeof(start_discovery_le_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = start_discovery_le_param,
- .expect_len = sizeof(start_discovery_le_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_ENABLE,
- .expect_hci_param = start_discovery_valid_hci,
- .expect_hci_len = sizeof(start_discovery_valid_hci),
- .expect_alt_ev = MGMT_EV_DISCOVERING,
- .expect_alt_ev_param = start_discovery_le_evt,
- .expect_alt_ev_len = sizeof(start_discovery_le_evt),
- };
- static const struct generic_data start_discovery_valid_param_power_off_1 = {
- .setup_settings = settings_le,
- .send_opcode = MGMT_OP_START_DISCOVERY,
- .send_param = start_discovery_bredrle_param,
- .send_len = sizeof(start_discovery_bredrle_param),
- .expect_status = MGMT_STATUS_NOT_POWERED,
- .force_power_off = true,
- .expect_param = start_discovery_bredrle_param,
- .expect_len = sizeof(start_discovery_bredrle_param),
- };
- static const char set_resolv_off_param[] = { 0x00 };
- static const char set_resolv_on_param[] = { 0x01 };
- static const struct generic_data start_discovery_ll_privacy_disable_resolv = {
- .send_opcode = MGMT_OP_START_DISCOVERY,
- .send_param = start_discovery_le_param,
- .send_len = sizeof(start_discovery_le_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = start_discovery_le_param,
- .expect_len = sizeof(start_discovery_le_param),
- .setup_expect_hci_command = BT_HCI_CMD_LE_SET_RESOLV_ENABLE,
- .setup_expect_hci_param = set_resolv_on_param,
- .setup_expect_hci_len = sizeof(set_resolv_on_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_RESOLV_ENABLE,
- .expect_hci_param = set_resolv_off_param,
- .expect_hci_len = sizeof(set_resolv_off_param),
- };
- static const char stop_discovery_bredrle_param[] = { 0x07 };
- static const char stop_discovery_bredrle_invalid_param[] = { 0x06 };
- static const char stop_discovery_valid_hci[] = { 0x00, 0x00 };
- static const char stop_discovery_evt[] = { 0x07, 0x00 };
- static const char stop_discovery_bredr_param[] = { 0x01 };
- static const char stop_discovery_bredr_discovering[] = { 0x01, 0x00 };
- static const struct generic_data stop_discovery_success_test_1 = {
- .setup_settings = settings_powered_le,
- .setup_send_opcode = MGMT_OP_START_DISCOVERY,
- .setup_send_param = start_discovery_bredrle_param,
- .setup_send_len = sizeof(start_discovery_bredrle_param),
- .send_opcode = MGMT_OP_STOP_DISCOVERY,
- .send_param = stop_discovery_bredrle_param,
- .send_len = sizeof(stop_discovery_bredrle_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = stop_discovery_bredrle_param,
- .expect_len = sizeof(stop_discovery_bredrle_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_ENABLE,
- .expect_hci_param = stop_discovery_valid_hci,
- .expect_hci_len = sizeof(stop_discovery_valid_hci),
- .expect_alt_ev = MGMT_EV_DISCOVERING,
- .expect_alt_ev_param = stop_discovery_evt,
- .expect_alt_ev_len = sizeof(stop_discovery_evt),
- };
- static const struct generic_data stop_discovery_bredr_success_test_1 = {
- .setup_settings = settings_powered,
- .setup_send_opcode = MGMT_OP_START_DISCOVERY,
- .setup_send_param = start_discovery_bredr_param,
- .setup_send_len = sizeof(start_discovery_bredr_param),
- .send_opcode = MGMT_OP_STOP_DISCOVERY,
- .send_param = stop_discovery_bredr_param,
- .send_len = sizeof(stop_discovery_bredr_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = stop_discovery_bredr_param,
- .expect_len = sizeof(stop_discovery_bredr_param),
- .expect_hci_command = BT_HCI_CMD_INQUIRY_CANCEL,
- .expect_alt_ev = MGMT_EV_DISCOVERING,
- .expect_alt_ev_param = stop_discovery_bredr_discovering,
- .expect_alt_ev_len = sizeof(stop_discovery_bredr_discovering),
- };
- static const struct generic_data stop_discovery_rejected_test_1 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_STOP_DISCOVERY,
- .send_param = stop_discovery_bredrle_param,
- .send_len = sizeof(stop_discovery_bredrle_param),
- .expect_status = MGMT_STATUS_REJECTED,
- .expect_param = stop_discovery_bredrle_param,
- .expect_len = sizeof(stop_discovery_bredrle_param),
- };
- static const struct generic_data stop_discovery_invalid_param_test_1 = {
- .setup_settings = settings_powered_le,
- .setup_send_opcode = MGMT_OP_START_DISCOVERY,
- .setup_send_param = start_discovery_bredrle_param,
- .setup_send_len = sizeof(start_discovery_bredrle_param),
- .send_opcode = MGMT_OP_STOP_DISCOVERY,
- .send_param = stop_discovery_bredrle_invalid_param,
- .send_len = sizeof(stop_discovery_bredrle_invalid_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- .expect_param = stop_discovery_bredrle_invalid_param,
- .expect_len = sizeof(stop_discovery_bredrle_invalid_param),
- };
- static const char start_service_discovery_invalid_param[] = { 0x00, 0x00, 0x00, 0x00 };
- static const char start_service_discovery_invalid_resp[] = { 0x00 };
- static const char start_service_discovery_bredr_param[] = { 0x01, 0x00, 0x00, 0x00};
- static const char start_service_discovery_bredr_resp[] = { 0x01 };
- static const char start_service_discovery_le_param[] = { 0x06, 0x00, 0x01, 0x00,
- 0xfa, 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00,
- 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 };
- static const char start_service_discovery_le_resp[] = { 0x06 };
- static const char start_service_discovery_bredrle_param[] = { 0x07, 0x00, 0x01, 0x00,
- 0xfa, 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00,
- 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00 };
- static const char start_service_discovery_bredrle_resp[] = { 0x07 };
- static const char start_service_discovery_valid_hci[] = { 0x01, 0x01 };
- static const char start_service_discovery_evt[] = { 0x07, 0x01 };
- static const char start_service_discovery_le_evt[] = { 0x06, 0x01 };
- static const struct generic_data start_service_discovery_not_powered_test_1 = {
- .send_opcode = MGMT_OP_START_SERVICE_DISCOVERY,
- .send_param = start_service_discovery_bredr_param,
- .send_len = sizeof(start_service_discovery_bredr_param),
- .expect_status = MGMT_STATUS_NOT_POWERED,
- .expect_param = start_service_discovery_bredr_resp,
- .expect_len = sizeof(start_service_discovery_bredr_resp),
- };
- static const struct generic_data start_service_discovery_invalid_param_test_1 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_START_SERVICE_DISCOVERY,
- .send_param = start_service_discovery_invalid_param,
- .send_len = sizeof(start_service_discovery_invalid_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- .expect_param = start_service_discovery_invalid_resp,
- .expect_len = sizeof(start_service_discovery_invalid_resp),
- };
- static const struct generic_data start_service_discovery_not_supported_test_1 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_START_SERVICE_DISCOVERY,
- .send_param = start_service_discovery_le_param,
- .send_len = sizeof(start_service_discovery_le_param),
- .expect_status = MGMT_STATUS_REJECTED,
- .expect_param = start_service_discovery_le_resp,
- .expect_len = sizeof(start_service_discovery_le_resp),
- };
- static const struct generic_data start_service_discovery_valid_param_test_1 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_START_SERVICE_DISCOVERY,
- .send_param = start_service_discovery_bredrle_param,
- .send_len = sizeof(start_service_discovery_bredrle_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = start_service_discovery_bredrle_resp,
- .expect_len = sizeof(start_service_discovery_bredrle_resp),
- .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_ENABLE,
- .expect_hci_param = start_service_discovery_valid_hci,
- .expect_hci_len = sizeof(start_service_discovery_valid_hci),
- .expect_alt_ev = MGMT_EV_DISCOVERING,
- .expect_alt_ev_param = start_service_discovery_evt,
- .expect_alt_ev_len = sizeof(start_service_discovery_evt),
- };
- static const struct generic_data start_service_discovery_valid_param_test_2 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_START_SERVICE_DISCOVERY,
- .send_param = start_service_discovery_le_param,
- .send_len = sizeof(start_service_discovery_le_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = start_service_discovery_le_resp,
- .expect_len = sizeof(start_service_discovery_le_resp),
- .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_ENABLE,
- .expect_hci_param = start_service_discovery_valid_hci,
- .expect_hci_len = sizeof(start_service_discovery_valid_hci),
- .expect_alt_ev = MGMT_EV_DISCOVERING,
- .expect_alt_ev_param = start_service_discovery_le_evt,
- .expect_alt_ev_len = sizeof(start_service_discovery_le_evt),
- };
- static const char set_dev_class_valid_param[] = { 0x01, 0x0c };
- static const char set_dev_class_zero_rsp[] = { 0x00, 0x00, 0x00 };
- static const char set_dev_class_valid_rsp[] = { 0x0c, 0x01, 0x00 };
- static const char set_dev_class_valid_hci[] = { 0x0c, 0x01, 0x00 };
- static const char set_dev_class_invalid_param[] = { 0x01, 0x01 };
- static const struct generic_data set_dev_class_valid_param_test_1 = {
- .send_opcode = MGMT_OP_SET_DEV_CLASS,
- .send_param = set_dev_class_valid_param,
- .send_len = sizeof(set_dev_class_valid_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_dev_class_zero_rsp,
- .expect_len = sizeof(set_dev_class_zero_rsp),
- };
- static const struct generic_data set_dev_class_valid_param_test_2 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_SET_DEV_CLASS,
- .send_param = set_dev_class_valid_param,
- .send_len = sizeof(set_dev_class_valid_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_dev_class_valid_rsp,
- .expect_len = sizeof(set_dev_class_valid_rsp),
- .expect_alt_ev = MGMT_EV_CLASS_OF_DEV_CHANGED,
- .expect_alt_ev_param = set_dev_class_valid_rsp,
- .expect_alt_ev_len = sizeof(set_dev_class_valid_rsp),
- .expect_hci_command = BT_HCI_CMD_WRITE_CLASS_OF_DEV,
- .expect_hci_param = set_dev_class_valid_hci,
- .expect_hci_len = sizeof(set_dev_class_valid_hci),
- };
- static const struct generic_data set_dev_class_invalid_param_test_1 = {
- .send_opcode = MGMT_OP_SET_DEV_CLASS,
- .send_param = set_dev_class_invalid_param,
- .send_len = sizeof(set_dev_class_invalid_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const char add_spp_uuid_param[] = {
- 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
- 0x00, 0x10, 0x00, 0x00, 0x01, 0x11, 0x00, 0x00,
- 0x00 };
- static const char add_dun_uuid_param[] = {
- 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
- 0x00, 0x10, 0x00, 0x00, 0x03, 0x11, 0x00, 0x00,
- 0x00 };
- static const char add_sync_uuid_param[] = {
- 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
- 0x00, 0x10, 0x00, 0x00, 0x04, 0x11, 0x00, 0x00,
- 0x00 };
- static const char add_opp_uuid_param[] = {
- 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
- 0x00, 0x10, 0x00, 0x00, 0x05, 0x11, 0x00, 0x00,
- 0x00 };
- static const char write_eir_uuid16_hci[241] = { 0x00,
- 0x02, 0x0a, 0x00, 0x03, 0x03, 0x01, 0x11 };
- static const char write_eir_multi_uuid16_hci_1[241] = { 0x00,
- 0x02, 0x0a, 0x00, 0x09, 0x03, 0x01, 0x11, 0x03,
- 0x11, 0x04, 0x11, 0x05, 0x11 };
- static const char write_eir_multi_uuid16_hci_2[241] = { 0x00,
- 0x02, 0x0a, 0x00, 0xeb, 0x02, 0x00, 0x20, 0x01,
- 0x20, 0x02, 0x20, 0x03, 0x20, 0x04, 0x20, 0x05,
- 0x20, 0x06, 0x20, 0x07, 0x20, 0x08, 0x20, 0x09,
- 0x20, 0x0a, 0x20, 0x0b, 0x20, 0x0c, 0x20, 0x0d,
- 0x20, 0x0e, 0x20, 0x0f, 0x20, 0x10, 0x20, 0x11,
- 0x20, 0x12, 0x20, 0x13, 0x20, 0x14, 0x20, 0x15,
- 0x20, 0x16, 0x20, 0x17, 0x20, 0x18, 0x20, 0x19,
- 0x20, 0x1a, 0x20, 0x1b, 0x20, 0x1c, 0x20, 0x1d,
- 0x20, 0x1e, 0x20, 0x1f, 0x20, 0x20, 0x20, 0x21,
- 0x20, 0x22, 0x20, 0x23, 0x20, 0x24, 0x20, 0x25,
- 0x20, 0x26, 0x20, 0x27, 0x20, 0x28, 0x20, 0x29,
- 0x20, 0x2a, 0x20, 0x2b, 0x20, 0x2c, 0x20, 0x2d,
- 0x20, 0x2e, 0x20, 0x2f, 0x20, 0x30, 0x20, 0x31,
- 0x20, 0x32, 0x20, 0x33, 0x20, 0x34, 0x20, 0x35,
- 0x20, 0x36, 0x20, 0x37, 0x20, 0x38, 0x20, 0x39,
- 0x20, 0x3a, 0x20, 0x3b, 0x20, 0x3c, 0x20, 0x3d,
- 0x20, 0x3e, 0x20, 0x3f, 0x20, 0x40, 0x20, 0x41,
- 0x20, 0x42, 0x20, 0x43, 0x20, 0x44, 0x20, 0x45,
- 0x20, 0x46, 0x20, 0x47, 0x20, 0x48, 0x20, 0x49,
- 0x20, 0x4a, 0x20, 0x4b, 0x20, 0x4c, 0x20, 0x4d,
- 0x20, 0x4e, 0x20, 0x4f, 0x20, 0x50, 0x20, 0x51,
- 0x20, 0x52, 0x20, 0x53, 0x20, 0x54, 0x20, 0x55,
- 0x20, 0x56, 0x20, 0x57, 0x20, 0x58, 0x20, 0x59,
- 0x20, 0x5a, 0x20, 0x5b, 0x20, 0x5c, 0x20, 0x5d,
- 0x20, 0x5e, 0x20, 0x5f, 0x20, 0x60, 0x20, 0x61,
- 0x20, 0x62, 0x20, 0x63, 0x20, 0x64, 0x20, 0x65,
- 0x20, 0x66, 0x20, 0x67, 0x20, 0x68, 0x20, 0x69,
- 0x20, 0x6a, 0x20, 0x6b, 0x20, 0x6c, 0x20, 0x6d,
- 0x20, 0x6e, 0x20, 0x6f, 0x20, 0x70, 0x20, 0x71,
- 0x20, 0x72, 0x20, 0x73, 0x20, 0x74, 0x20, 0x00 };
- static const char add_uuid32_param_1[] = {
- 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
- 0x00, 0x10, 0x00, 0x00, 0x78, 0x56, 0x34, 0x12,
- 0x00 };
- static const char add_uuid32_param_2[] = {
- 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
- 0x00, 0x10, 0x00, 0x00, 0xef, 0xcd, 0xbc, 0x9a,
- 0x00 };
- static const char add_uuid32_param_3[] = {
- 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
- 0x00, 0x10, 0x00, 0x00, 0xff, 0xee, 0xdd, 0xcc,
- 0x00 };
- static const char add_uuid32_param_4[] = {
- 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
- 0x00, 0x10, 0x00, 0x00, 0x11, 0x22, 0x33, 0x44,
- 0x00 };
- static const char write_eir_uuid32_hci[241] = { 0x00,
- 0x02, 0x0a, 0x00, 0x05, 0x05, 0x78, 0x56, 0x34,
- 0x12 };
- static const char write_eir_uuid32_multi_hci[241] = { 0x00,
- 0x02, 0x0a, 0x00, 0x11, 0x05, 0x78, 0x56, 0x34,
- 0x12, 0xef, 0xcd, 0xbc, 0x9a, 0xff, 0xee, 0xdd,
- 0xcc, 0x11, 0x22, 0x33, 0x44 };
- static const char write_eir_uuid32_multi_hci_2[] = { 0x00,
- 0x02, 0x0a, 0x00, 0xe9, 0x04, 0xff, 0xff, 0xff,
- 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff,
- 0xff, 0xfc, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff,
- 0xff, 0xfa, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff,
- 0xff, 0xf8, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff,
- 0xff, 0xf6, 0xff, 0xff, 0xff, 0xf5, 0xff, 0xff,
- 0xff, 0xf4, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff,
- 0xff, 0xf2, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff,
- 0xff, 0xf0, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff,
- 0xff, 0xee, 0xff, 0xff, 0xff, 0xed, 0xff, 0xff,
- 0xff, 0xec, 0xff, 0xff, 0xff, 0xeb, 0xff, 0xff,
- 0xff, 0xea, 0xff, 0xff, 0xff, 0xe9, 0xff, 0xff,
- 0xff, 0xe8, 0xff, 0xff, 0xff, 0xe7, 0xff, 0xff,
- 0xff, 0xe6, 0xff, 0xff, 0xff, 0xe5, 0xff, 0xff,
- 0xff, 0xe4, 0xff, 0xff, 0xff, 0xe3, 0xff, 0xff,
- 0xff, 0xe2, 0xff, 0xff, 0xff, 0xe1, 0xff, 0xff,
- 0xff, 0xe0, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff,
- 0xff, 0xde, 0xff, 0xff, 0xff, 0xdd, 0xff, 0xff,
- 0xff, 0xdc, 0xff, 0xff, 0xff, 0xdb, 0xff, 0xff,
- 0xff, 0xda, 0xff, 0xff, 0xff, 0xd9, 0xff, 0xff,
- 0xff, 0xd8, 0xff, 0xff, 0xff, 0xd7, 0xff, 0xff,
- 0xff, 0xd6, 0xff, 0xff, 0xff, 0xd5, 0xff, 0xff,
- 0xff, 0xd4, 0xff, 0xff, 0xff, 0xd3, 0xff, 0xff,
- 0xff, 0xd2, 0xff, 0xff, 0xff, 0xd1, 0xff, 0xff,
- 0xff, 0xd0, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff,
- 0xff, 0xce, 0xff, 0xff, 0xff, 0xcd, 0xff, 0xff,
- 0xff, 0xcc, 0xff, 0xff, 0xff, 0xcb, 0xff, 0xff,
- 0xff, 0xca, 0xff, 0xff, 0xff, 0xc9, 0xff, 0xff,
- 0xff, 0xc8, 0xff, 0xff, 0xff, 0xc7, 0xff, 0xff,
- 0xff, 0xc6, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 };
- static const char add_uuid128_param_1[] = {
- 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
- 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
- 0x00 };
- static const char add_uuid128_param_2[] = {
- 0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa, 0x99, 0x88,
- 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x00,
- 0x00 };
- static const char write_eir_uuid128_hci[241] = { 0x00,
- 0x02, 0x0a, 0x00, 0x11, 0x07, 0x00, 0x11, 0x22,
- 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa,
- 0xbb, 0xcc, 0xdd, 0xee, 0xff };
- static const char write_eir_uuid128_multi_hci[241] = { 0x00,
- 0x02, 0x0a, 0x00, 0x21, 0x07, 0x00, 0x11, 0x22,
- 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa,
- 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0xff, 0xee, 0xdd,
- 0xcc, 0xbb, 0xaa, 0x99, 0x88, 0x77, 0x66, 0x55,
- 0x44, 0x33, 0x22, 0x11 };
- static const char write_eir_uuid128_multi_hci_2[] = { 0x00,
- 0x02, 0x0a, 0x00, 0xe1, 0x07, 0x11, 0x22, 0x33,
- 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
- 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, 0x22, 0x33,
- 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
- 0xcc, 0xdd, 0xee, 0xff, 0x01, 0x11, 0x22, 0x33,
- 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
- 0xcc, 0xdd, 0xee, 0xff, 0x02, 0x11, 0x22, 0x33,
- 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
- 0xcc, 0xdd, 0xee, 0xff, 0x03, 0x11, 0x22, 0x33,
- 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
- 0xcc, 0xdd, 0xee, 0xff, 0x04, 0x11, 0x22, 0x33,
- 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
- 0xcc, 0xdd, 0xee, 0xff, 0x05, 0x11, 0x22, 0x33,
- 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
- 0xcc, 0xdd, 0xee, 0xff, 0x06, 0x11, 0x22, 0x33,
- 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
- 0xcc, 0xdd, 0xee, 0xff, 0x07, 0x11, 0x22, 0x33,
- 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
- 0xcc, 0xdd, 0xee, 0xff, 0x08, 0x11, 0x22, 0x33,
- 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
- 0xcc, 0xdd, 0xee, 0xff, 0x09, 0x11, 0x22, 0x33,
- 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
- 0xcc, 0xdd, 0xee, 0xff, 0x0a, 0x11, 0x22, 0x33,
- 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
- 0xcc, 0xdd, 0xee, 0xff, 0x0b, 0x11, 0x22, 0x33,
- 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb,
- 0xcc, 0xdd, 0xee, 0xff, 0x0c, 0xff, 0xee, 0xdd,
- 0xcc, 0xbb, 0xaa, 0x99, 0x88, 0x77, 0x66, 0x55,
- 0x44, 0x33, 0x22, 0x11, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
- static const char write_eir_uuid_mix_hci[241] = { 0x00,
- 0x02, 0x0a, 0x00, 0x05, 0x03, 0x01, 0x11, 0x03,
- 0x11, 0x09, 0x05, 0x78, 0x56, 0x34, 0x12, 0xef,
- 0xcd, 0xbc, 0x9a, 0x21, 0x07, 0x00, 0x11, 0x22,
- 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa,
- 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0xff, 0xee, 0xdd,
- 0xcc, 0xbb, 0xaa, 0x99, 0x88, 0x77, 0x66, 0x55,
- 0x44, 0x33, 0x22, 0x11 };
- static const struct generic_data add_uuid16_test_1 = {
- .setup_settings = settings_powered_ssp,
- .send_opcode = MGMT_OP_ADD_UUID,
- .send_param = add_spp_uuid_param,
- .send_len = sizeof(add_spp_uuid_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_dev_class_zero_rsp,
- .expect_len = sizeof(set_dev_class_zero_rsp),
- .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
- .expect_hci_param = write_eir_uuid16_hci,
- .expect_hci_len = sizeof(write_eir_uuid16_hci),
- };
- static const struct generic_data add_multi_uuid16_test_1 = {
- .send_opcode = MGMT_OP_ADD_UUID,
- .send_param = add_opp_uuid_param,
- .send_len = sizeof(add_opp_uuid_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_dev_class_zero_rsp,
- .expect_len = sizeof(set_dev_class_zero_rsp),
- .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
- .expect_hci_param = write_eir_multi_uuid16_hci_1,
- .expect_hci_len = sizeof(write_eir_multi_uuid16_hci_1),
- };
- static const struct generic_data add_multi_uuid16_test_2 = {
- .send_opcode = MGMT_OP_ADD_UUID,
- .send_param = add_opp_uuid_param,
- .send_len = sizeof(add_opp_uuid_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_dev_class_zero_rsp,
- .expect_len = sizeof(set_dev_class_zero_rsp),
- .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
- .expect_hci_param = write_eir_multi_uuid16_hci_2,
- .expect_hci_len = sizeof(write_eir_multi_uuid16_hci_2),
- };
- static const struct generic_data add_uuid32_test_1 = {
- .setup_settings = settings_powered_ssp,
- .send_opcode = MGMT_OP_ADD_UUID,
- .send_param = add_uuid32_param_1,
- .send_len = sizeof(add_uuid32_param_1),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_dev_class_zero_rsp,
- .expect_len = sizeof(set_dev_class_zero_rsp),
- .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
- .expect_hci_param = write_eir_uuid32_hci,
- .expect_hci_len = sizeof(write_eir_uuid32_hci),
- };
- static const struct generic_data add_uuid32_multi_test_1 = {
- .send_opcode = MGMT_OP_ADD_UUID,
- .send_param = add_uuid32_param_4,
- .send_len = sizeof(add_uuid32_param_4),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_dev_class_zero_rsp,
- .expect_len = sizeof(set_dev_class_zero_rsp),
- .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
- .expect_hci_param = write_eir_uuid32_multi_hci,
- .expect_hci_len = sizeof(write_eir_uuid32_multi_hci),
- };
- static const struct generic_data add_uuid32_multi_test_2 = {
- .send_opcode = MGMT_OP_ADD_UUID,
- .send_param = add_uuid32_param_4,
- .send_len = sizeof(add_uuid32_param_4),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_dev_class_zero_rsp,
- .expect_len = sizeof(set_dev_class_zero_rsp),
- .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
- .expect_hci_param = write_eir_uuid32_multi_hci_2,
- .expect_hci_len = sizeof(write_eir_uuid32_multi_hci_2),
- };
- static const struct generic_data add_uuid128_test_1 = {
- .setup_settings = settings_powered_ssp,
- .send_opcode = MGMT_OP_ADD_UUID,
- .send_param = add_uuid128_param_1,
- .send_len = sizeof(add_uuid128_param_1),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_dev_class_zero_rsp,
- .expect_len = sizeof(set_dev_class_zero_rsp),
- .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
- .expect_hci_param = write_eir_uuid128_hci,
- .expect_hci_len = sizeof(write_eir_uuid128_hci),
- };
- static const struct generic_data add_uuid128_multi_test_1 = {
- .send_opcode = MGMT_OP_ADD_UUID,
- .send_param = add_uuid128_param_2,
- .send_len = sizeof(add_uuid32_param_2),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_dev_class_zero_rsp,
- .expect_len = sizeof(set_dev_class_zero_rsp),
- .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
- .expect_hci_param = write_eir_uuid128_multi_hci,
- .expect_hci_len = sizeof(write_eir_uuid128_multi_hci),
- };
- static const struct generic_data add_uuid128_multi_test_2 = {
- .send_opcode = MGMT_OP_ADD_UUID,
- .send_param = add_uuid128_param_2,
- .send_len = sizeof(add_uuid128_param_2),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_dev_class_zero_rsp,
- .expect_len = sizeof(set_dev_class_zero_rsp),
- .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
- .expect_hci_param = write_eir_uuid128_multi_hci_2,
- .expect_hci_len = sizeof(write_eir_uuid128_multi_hci_2),
- };
- static const struct generic_data add_uuid_mix_test_1 = {
- .send_opcode = MGMT_OP_ADD_UUID,
- .send_param = add_uuid128_param_2,
- .send_len = sizeof(add_uuid128_param_2),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_dev_class_zero_rsp,
- .expect_len = sizeof(set_dev_class_zero_rsp),
- .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
- .expect_hci_param = write_eir_uuid_mix_hci,
- .expect_hci_len = sizeof(write_eir_uuid_mix_hci),
- };
- static const char remove_dun_uuid_param[] = {
- 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
- 0x00, 0x10, 0x00, 0x00, 0x03, 0x11, 0x00, 0x00 };
- static const char write_eir_remove_dun_hci[241] = {
- 0x00, 0x02, 0x0a, 0x00, 0x05, 0x03, 0x01, 0x11, 0x04,
- 0x11 };
- static const struct generic_data remove_uuid_success_1 = {
- .send_opcode = MGMT_OP_REMOVE_UUID,
- .send_param = remove_dun_uuid_param,
- .send_len = sizeof(remove_dun_uuid_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_dev_class_zero_rsp,
- .expect_len = sizeof(set_dev_class_zero_rsp),
- .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
- .expect_hci_param = write_eir_remove_dun_hci,
- .expect_hci_len = sizeof(write_eir_remove_dun_hci),
- };
- static const char remove_all_uuid_param[16] = { 0x00 };
- static const struct generic_data remove_uuid_all_success_2 = {
- .send_opcode = MGMT_OP_REMOVE_UUID,
- .send_param = remove_all_uuid_param,
- .send_len = sizeof(remove_all_uuid_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_dev_class_zero_rsp,
- .expect_len = sizeof(set_dev_class_zero_rsp),
- };
- static const struct generic_data remove_uuid_power_off_success_3 = {
- .send_opcode = MGMT_OP_REMOVE_UUID,
- .send_param = remove_dun_uuid_param,
- .send_len = sizeof(remove_dun_uuid_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_dev_class_zero_rsp,
- .expect_len = sizeof(set_dev_class_zero_rsp),
- };
- static const struct generic_data remove_uuid_power_off_on_success_4 = {
- .send_opcode = MGMT_OP_SET_POWERED,
- .send_param = set_powered_on_param,
- .send_len = sizeof(set_powered_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_ssp_settings_param_2,
- .expect_len = sizeof(set_ssp_settings_param_2),
- .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
- .expect_hci_param = write_eir_remove_dun_hci,
- .expect_hci_len = sizeof(write_eir_remove_dun_hci),
- };
- static const struct generic_data remove_uuid_invalid_params_1 = {
- .send_opcode = MGMT_OP_REMOVE_UUID,
- .send_param = add_opp_uuid_param,
- .send_len = sizeof(add_opp_uuid_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const char load_link_keys_valid_param_1[] = { 0x00, 0x00, 0x00 };
- static const char load_link_keys_valid_param_2[] = { 0x01, 0x00, 0x00 };
- static const char load_link_keys_invalid_param_1[] = { 0x02, 0x00, 0x00 };
- static const char load_link_keys_invalid_param_2[] = { 0x00, 0x01, 0x00 };
- /* Invalid bdaddr type */
- static const char load_link_keys_invalid_param_3[] = { 0x00, 0x01, 0x00,
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* addr */
- 0x01, /* addr type */
- 0x00, /* key type */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
- 0x04, /* PIN length */
- };
- static const struct generic_data load_link_keys_success_test_1 = {
- .send_opcode = MGMT_OP_LOAD_LINK_KEYS,
- .send_param = load_link_keys_valid_param_1,
- .send_len = sizeof(load_link_keys_valid_param_1),
- .expect_status = MGMT_STATUS_SUCCESS,
- };
- static const struct generic_data load_link_keys_success_test_2 = {
- .send_opcode = MGMT_OP_LOAD_LINK_KEYS,
- .send_param = load_link_keys_valid_param_2,
- .send_len = sizeof(load_link_keys_valid_param_2),
- .expect_status = MGMT_STATUS_SUCCESS,
- };
- static const struct generic_data load_link_keys_invalid_params_test_1 = {
- .send_opcode = MGMT_OP_LOAD_LINK_KEYS,
- .send_param = load_link_keys_invalid_param_1,
- .send_len = sizeof(load_link_keys_invalid_param_1),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data load_link_keys_invalid_params_test_2 = {
- .send_opcode = MGMT_OP_LOAD_LINK_KEYS,
- .send_param = load_link_keys_invalid_param_2,
- .send_len = sizeof(load_link_keys_invalid_param_2),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data load_link_keys_invalid_params_test_3 = {
- .send_opcode = MGMT_OP_LOAD_LINK_KEYS,
- .send_param = load_link_keys_invalid_param_3,
- .send_len = sizeof(load_link_keys_invalid_param_3),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const char load_ltks_valid_param_1[] = { 0x00, 0x00 };
- static const char load_ltks_valid_param_2[] = {
- 0x01, 0x00, /* count */
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
- 0x01, /* addr type */
- 0x00, /* authenticated */
- 0x00, /* master */
- 0x00, /* encryption size */
- 0x00, 0x00, /* diversifier */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
- };
- /* 20 keys at once */
- static const char load_ltks_valid_param_20[] = {
- 0x14, 0x00, /* count */
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
- 0x01, /* addr type */
- 0x00, /* authenticated */
- 0x00, /* master */
- 0x00, /* encryption size */
- 0x00, 0x00, /* diversifier */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
- 0x01, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
- 0x01, /* addr type */
- 0x00, /* authenticated */
- 0x00, /* master */
- 0x00, /* encryption size */
- 0x00, 0x00, /* diversifier */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
- 0x02, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
- 0x01, /* addr type */
- 0x00, /* authenticated */
- 0x00, /* master */
- 0x00, /* encryption size */
- 0x00, 0x00, /* diversifier */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
- 0x03, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
- 0x01, /* addr type */
- 0x00, /* authenticated */
- 0x00, /* master */
- 0x00, /* encryption size */
- 0x00, 0x00, /* diversifier */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
- 0x04, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
- 0x01, /* addr type */
- 0x00, /* authenticated */
- 0x00, /* master */
- 0x00, /* encryption size */
- 0x00, 0x00, /* diversifier */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
- 0x05, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
- 0x01, /* addr type */
- 0x00, /* authenticated */
- 0x00, /* master */
- 0x00, /* encryption size */
- 0x00, 0x00, /* diversifier */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
- 0x06, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
- 0x01, /* addr type */
- 0x00, /* authenticated */
- 0x00, /* master */
- 0x00, /* encryption size */
- 0x00, 0x00, /* diversifier */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
- 0x07, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
- 0x01, /* addr type */
- 0x00, /* authenticated */
- 0x00, /* master */
- 0x00, /* encryption size */
- 0x00, 0x00, /* diversifier */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
- 0x08, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
- 0x01, /* addr type */
- 0x00, /* authenticated */
- 0x00, /* master */
- 0x00, /* encryption size */
- 0x00, 0x00, /* diversifier */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
- 0x09, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
- 0x01, /* addr type */
- 0x00, /* authenticated */
- 0x00, /* master */
- 0x00, /* encryption size */
- 0x00, 0x00, /* diversifier */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
- 0x0a, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
- 0x01, /* addr type */
- 0x00, /* authenticated */
- 0x00, /* master */
- 0x00, /* encryption size */
- 0x00, 0x00, /* diversifier */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
- 0x0b, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
- 0x01, /* addr type */
- 0x00, /* authenticated */
- 0x00, /* master */
- 0x00, /* encryption size */
- 0x00, 0x00, /* diversifier */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
- 0x0c, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
- 0x01, /* addr type */
- 0x00, /* authenticated */
- 0x00, /* master */
- 0x00, /* encryption size */
- 0x00, 0x00, /* diversifier */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
- 0x0d, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
- 0x01, /* addr type */
- 0x00, /* authenticated */
- 0x00, /* master */
- 0x00, /* encryption size */
- 0x00, 0x00, /* diversifier */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
- 0x0e, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
- 0x01, /* addr type */
- 0x00, /* authenticated */
- 0x00, /* master */
- 0x00, /* encryption size */
- 0x00, 0x00, /* diversifier */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
- 0x0f, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
- 0x01, /* addr type */
- 0x00, /* authenticated */
- 0x00, /* master */
- 0x00, /* encryption size */
- 0x00, 0x00, /* diversifier */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
- 0x10, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
- 0x01, /* addr type */
- 0x00, /* authenticated */
- 0x00, /* master */
- 0x00, /* encryption size */
- 0x00, 0x00, /* diversifier */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
- 0x11, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
- 0x01, /* addr type */
- 0x00, /* authenticated */
- 0x00, /* master */
- 0x00, /* encryption size */
- 0x00, 0x00, /* diversifier */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
- 0x12, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
- 0x01, /* addr type */
- 0x00, /* authenticated */
- 0x00, /* master */
- 0x00, /* encryption size */
- 0x00, 0x00, /* diversifier */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
- 0x13, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
- 0x01, /* addr type */
- 0x00, /* authenticated */
- 0x00, /* master */
- 0x00, /* encryption size */
- 0x00, 0x00, /* diversifier */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
- };
- /* Invalid key count */
- static const char load_ltks_invalid_param_1[] = { 0x01, 0x00 };
- /* Invalid addr type */
- static const char load_ltks_invalid_param_2[] = {
- 0x01, 0x00, /* count */
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
- 0x00, /* addr type */
- 0x00, /* authenticated */
- 0x00, /* central */
- 0x00, /* encryption size */
- 0x00, 0x00, /* diversifier */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
- };
- /* Invalid central value */
- static const char load_ltks_invalid_param_3[] = {
- 0x01, 0x00, /* count */
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, /* bdaddr */
- 0x01, /* addr type */
- 0x00, /* authenticated */
- 0x02, /* central */
- 0x00, /* encryption size */
- 0x00, 0x00, /* diversifier */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* rand */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (1/2) */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* value (2/2) */
- };
- static const struct generic_data load_ltks_success_test_1 = {
- .send_opcode = MGMT_OP_LOAD_LONG_TERM_KEYS,
- .send_param = load_ltks_valid_param_1,
- .send_len = sizeof(load_ltks_valid_param_1),
- .expect_status = MGMT_STATUS_SUCCESS,
- };
- static const struct generic_data load_ltks_success_test_2 = {
- .send_opcode = MGMT_OP_LOAD_LONG_TERM_KEYS,
- .send_param = load_ltks_valid_param_2,
- .send_len = sizeof(load_ltks_valid_param_2),
- .expect_status = MGMT_STATUS_SUCCESS,
- };
- static const struct generic_data load_ltks_success_test_3 = {
- .send_opcode = MGMT_OP_LOAD_LONG_TERM_KEYS,
- .send_param = load_ltks_valid_param_2,
- .send_len = sizeof(load_ltks_valid_param_2),
- .expect_status = MGMT_STATUS_SUCCESS,
- };
- static const struct generic_data load_ltks_success_test_4 = {
- .send_opcode = MGMT_OP_LOAD_LONG_TERM_KEYS,
- .send_param = load_ltks_valid_param_20,
- .send_len = sizeof(load_ltks_valid_param_20),
- .expect_status = MGMT_STATUS_SUCCESS,
- };
- static const struct generic_data load_ltks_success_test_5 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_LOAD_LONG_TERM_KEYS,
- .send_param = load_ltks_valid_param_20,
- .send_len = sizeof(load_ltks_valid_param_20),
- .expect_status = MGMT_STATUS_SUCCESS,
- };
- static const struct generic_data load_ltks_invalid_params_test_1 = {
- .send_opcode = MGMT_OP_LOAD_LONG_TERM_KEYS,
- .send_param = load_ltks_invalid_param_1,
- .send_len = sizeof(load_ltks_invalid_param_1),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data load_ltks_invalid_params_test_2 = {
- .send_opcode = MGMT_OP_LOAD_LONG_TERM_KEYS,
- .send_param = load_ltks_invalid_param_2,
- .send_len = sizeof(load_ltks_invalid_param_2),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data load_ltks_invalid_params_test_3 = {
- .send_opcode = MGMT_OP_LOAD_LONG_TERM_KEYS,
- .send_param = load_ltks_invalid_param_3,
- .send_len = sizeof(load_ltks_invalid_param_3),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const char load_ltks_invalid_param_4[22] = { 0x1d, 0x07 };
- static const struct generic_data load_ltks_invalid_params_test_4 = {
- .send_opcode = MGMT_OP_LOAD_LONG_TERM_KEYS,
- .send_param = load_ltks_invalid_param_4,
- .send_len = sizeof(load_ltks_invalid_param_4),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const char set_io_cap_invalid_param_1[] = { 0xff };
- static const struct generic_data set_io_cap_invalid_param_test_1 = {
- .send_opcode = MGMT_OP_SET_IO_CAPABILITY,
- .send_param = set_io_cap_invalid_param_1,
- .send_len = sizeof(set_io_cap_invalid_param_1),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const char pair_device_param[] = {
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00, 0x00 };
- static const char pair_device_rsp[] = {
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00 };
- static const char pair_device_invalid_param_1[] = {
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff, 0x00 };
- static const char pair_device_invalid_param_rsp_1[] = {
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff };
- static const char pair_device_invalid_param_2[] = {
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00, 0x05 };
- static const char pair_device_invalid_param_rsp_2[] = {
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00 };
- static const struct generic_data pair_device_not_powered_test_1 = {
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_param = pair_device_param,
- .send_len = sizeof(pair_device_param),
- .expect_status = MGMT_STATUS_NOT_POWERED,
- .expect_param = pair_device_rsp,
- .expect_len = sizeof(pair_device_rsp),
- };
- static const struct generic_data pair_device_invalid_param_test_1 = {
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_param = pair_device_invalid_param_1,
- .send_len = sizeof(pair_device_invalid_param_1),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- .expect_param = pair_device_invalid_param_rsp_1,
- .expect_len = sizeof(pair_device_invalid_param_rsp_1),
- };
- static const struct generic_data pair_device_invalid_param_test_2 = {
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_param = pair_device_invalid_param_2,
- .send_len = sizeof(pair_device_invalid_param_2),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- .expect_param = pair_device_invalid_param_rsp_2,
- .expect_len = sizeof(pair_device_invalid_param_rsp_2),
- };
- static const void *pair_device_send_param_func(uint16_t *len)
- {
- struct test_data *data = tester_get_data();
- const struct generic_data *test = data->test_data;
- static uint8_t param[8];
- memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
- if (test->addr_type_avail)
- param[6] = test->addr_type;
- else if (data->hciemu_type == HCIEMU_TYPE_LE)
- param[6] = 0x01; /* Address type */
- else
- param[6] = 0x00; /* Address type */
- param[7] = test->io_cap;
- *len = sizeof(param);
- return param;
- }
- static const void *pair_device_expect_param_func(uint16_t *len)
- {
- struct test_data *data = tester_get_data();
- const struct generic_data *test = data->test_data;
- static uint8_t param[7];
- memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
- if (test->addr_type_avail)
- param[6] = test->addr_type;
- else if (data->hciemu_type == HCIEMU_TYPE_LE)
- param[6] = 0x01; /* Address type */
- else
- param[6] = 0x00; /* Address type */
- *len = sizeof(param);
- return param;
- }
- static uint16_t settings_powered_bondable[] = { MGMT_OP_SET_BONDABLE,
- MGMT_OP_SET_POWERED, 0 };
- static uint8_t auth_req_param[] = { 0x2a, 0x00 };
- static uint8_t pair_device_pin[] = { 0x30, 0x30, 0x30, 0x30 }; /* "0000" */
- static const struct generic_data pair_device_success_test_1 = {
- .setup_settings = settings_powered_bondable,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_func = pair_device_expect_param_func,
- .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
- .expect_alt_ev_len = 26,
- .expect_hci_command = BT_HCI_CMD_AUTH_REQUESTED,
- .expect_hci_param = auth_req_param,
- .expect_hci_len = sizeof(auth_req_param),
- .pin = pair_device_pin,
- .pin_len = sizeof(pair_device_pin),
- .client_pin = pair_device_pin,
- .client_pin_len = sizeof(pair_device_pin),
- };
- static uint16_t settings_powered_bondable_linksec[] = { MGMT_OP_SET_BONDABLE,
- MGMT_OP_SET_POWERED,
- MGMT_OP_SET_LINK_SECURITY,
- 0 };
- static const struct generic_data pair_device_success_test_2 = {
- .setup_settings = settings_powered_bondable_linksec,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_func = pair_device_expect_param_func,
- .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
- .expect_alt_ev_len = 26,
- .expect_hci_command = BT_HCI_CMD_AUTH_REQUESTED,
- .expect_hci_param = auth_req_param,
- .expect_hci_len = sizeof(auth_req_param),
- .pin = pair_device_pin,
- .pin_len = sizeof(pair_device_pin),
- .client_pin = pair_device_pin,
- .client_pin_len = sizeof(pair_device_pin),
- };
- static const struct generic_data pair_device_legacy_nonbondable_1 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_func = pair_device_expect_param_func,
- .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
- .expect_alt_ev_len = 26,
- .pin = pair_device_pin,
- .pin_len = sizeof(pair_device_pin),
- .client_pin = pair_device_pin,
- .client_pin_len = sizeof(pair_device_pin),
- };
- static const struct generic_data pair_device_power_off_test_1 = {
- .setup_settings = settings_powered_bondable,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .force_power_off = true,
- .expect_status = MGMT_STATUS_NOT_POWERED,
- .expect_func = pair_device_expect_param_func,
- };
- static const void *client_bdaddr_param_func(uint8_t *len)
- {
- struct test_data *data = tester_get_data();
- static uint8_t bdaddr[6];
- memcpy(bdaddr, hciemu_get_client_bdaddr(data->hciemu), 6);
- *len = sizeof(bdaddr);
- return bdaddr;
- }
- static const struct generic_data pair_device_not_supported_test_1 = {
- .setup_settings = settings_powered_bondable,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .expect_status = MGMT_STATUS_NOT_SUPPORTED,
- .expect_func = pair_device_expect_param_func,
- .addr_type_avail = true,
- .addr_type = BDADDR_BREDR,
- };
- static const struct generic_data pair_device_not_supported_test_2 = {
- .setup_settings = settings_powered_bondable,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .expect_status = MGMT_STATUS_NOT_SUPPORTED,
- .expect_func = pair_device_expect_param_func,
- .addr_type_avail = true,
- .addr_type = BDADDR_LE_PUBLIC,
- };
- static uint16_t settings_powered_bondable_le[] = { MGMT_OP_SET_LE,
- MGMT_OP_SET_BONDABLE,
- MGMT_OP_SET_POWERED,
- 0 };
- static const struct generic_data pair_device_reject_transport_not_enabled_1 = {
- .setup_settings = settings_powered_bondable_le,
- .setup_nobredr = true,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .expect_status = MGMT_STATUS_REJECTED,
- .expect_func = pair_device_expect_param_func,
- .addr_type_avail = true,
- .addr_type = BDADDR_BREDR,
- };
- static const struct generic_data pair_device_reject_transport_not_enabled_2 = {
- .setup_settings = settings_powered_bondable,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .expect_status = MGMT_STATUS_REJECTED,
- .expect_func = pair_device_expect_param_func,
- .addr_type_avail = true,
- .addr_type = BDADDR_LE_PUBLIC,
- };
- static const struct generic_data pair_device_reject_test_1 = {
- .setup_settings = settings_powered_bondable,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .expect_status = MGMT_STATUS_AUTH_FAILED,
- .expect_func = pair_device_expect_param_func,
- .expect_alt_ev = MGMT_EV_AUTH_FAILED,
- .expect_alt_ev_len = 8,
- .expect_hci_command = BT_HCI_CMD_PIN_CODE_REQUEST_NEG_REPLY,
- .expect_hci_func = client_bdaddr_param_func,
- .expect_pin = true,
- .client_pin = pair_device_pin,
- .client_pin_len = sizeof(pair_device_pin),
- };
- static const struct generic_data pair_device_reject_test_2 = {
- .setup_settings = settings_powered_bondable,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .expect_status = MGMT_STATUS_AUTH_FAILED,
- .expect_func = pair_device_expect_param_func,
- .expect_alt_ev = MGMT_EV_AUTH_FAILED,
- .expect_alt_ev_len = 8,
- .expect_hci_command = BT_HCI_CMD_AUTH_REQUESTED,
- .expect_hci_param = auth_req_param,
- .expect_hci_len = sizeof(auth_req_param),
- .pin = pair_device_pin,
- .pin_len = sizeof(pair_device_pin),
- };
- static const struct generic_data pair_device_reject_test_3 = {
- .setup_settings = settings_powered_bondable_linksec,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .expect_status = MGMT_STATUS_AUTH_FAILED,
- .expect_func = pair_device_expect_param_func,
- .expect_hci_command = BT_HCI_CMD_PIN_CODE_REQUEST_NEG_REPLY,
- .expect_hci_func = client_bdaddr_param_func,
- .expect_pin = true,
- .client_pin = pair_device_pin,
- .client_pin_len = sizeof(pair_device_pin),
- };
- static const struct generic_data pair_device_reject_test_4 = {
- .setup_settings = settings_powered_bondable_linksec,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .expect_status = MGMT_STATUS_AUTH_FAILED,
- .expect_func = pair_device_expect_param_func,
- .pin = pair_device_pin,
- .pin_len = sizeof(pair_device_pin),
- };
- static uint16_t settings_powered_bondable_ssp[] = { MGMT_OP_SET_BONDABLE,
- MGMT_OP_SET_SSP,
- MGMT_OP_SET_POWERED,
- 0 };
- static const struct generic_data pair_device_ssp_test_1 = {
- .setup_settings = settings_powered_bondable_ssp,
- .client_enable_ssp = true,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_func = pair_device_expect_param_func,
- .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
- .expect_alt_ev_len = 26,
- .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
- .expect_hci_func = client_bdaddr_param_func,
- .io_cap = 0x03, /* NoInputNoOutput */
- .client_io_cap = 0x03, /* NoInputNoOutput */
- };
- static const void *client_io_cap_param_func(uint8_t *len)
- {
- struct test_data *data = tester_get_data();
- const struct generic_data *test = data->test_data;
- static uint8_t param[9];
- memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
- memcpy(¶m[6], test->expect_hci_param, 3);
- *len = sizeof(param);
- return param;
- }
- const uint8_t no_bonding_io_cap[] = { 0x03, 0x00, 0x00 };
- static const struct generic_data pair_device_ssp_test_2 = {
- .setup_settings = settings_powered_ssp,
- .client_enable_ssp = true,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_func = pair_device_expect_param_func,
- .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
- .expect_alt_ev_len = 26,
- .expect_hci_command = BT_HCI_CMD_IO_CAPABILITY_REQUEST_REPLY,
- .expect_hci_func = client_io_cap_param_func,
- .expect_hci_param = no_bonding_io_cap,
- .expect_hci_len = sizeof(no_bonding_io_cap),
- .io_cap = 0x03, /* NoInputNoOutput */
- .client_io_cap = 0x03, /* NoInputNoOutput */
- };
- const uint8_t bonding_io_cap[] = { 0x03, 0x00, 0x02 };
- static const struct generic_data pair_device_ssp_test_3 = {
- .setup_settings = settings_powered_bondable_ssp,
- .client_enable_ssp = true,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_func = pair_device_expect_param_func,
- .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
- .expect_alt_ev_len = 26,
- .expect_hci_command = BT_HCI_CMD_IO_CAPABILITY_REQUEST_REPLY,
- .expect_hci_func = client_io_cap_param_func,
- .expect_hci_param = bonding_io_cap,
- .expect_hci_len = sizeof(bonding_io_cap),
- .io_cap = 0x03, /* NoInputNoOutput */
- .client_io_cap = 0x03, /* NoInputNoOutput */
- };
- static const struct generic_data pair_device_ssp_test_4 = {
- .setup_settings = settings_powered_bondable_ssp,
- .client_enable_ssp = true,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_func = pair_device_expect_param_func,
- .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
- .expect_alt_ev_len = 26,
- .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
- .expect_hci_func = client_bdaddr_param_func,
- .io_cap = 0x01, /* DisplayYesNo */
- .client_io_cap = 0x01, /* DisplayYesNo */
- };
- const uint8_t mitm_no_bonding_io_cap[] = { 0x01, 0x00, 0x01 };
- static const struct generic_data pair_device_ssp_test_5 = {
- .setup_settings = settings_powered_ssp,
- .client_enable_ssp = true,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_func = pair_device_expect_param_func,
- .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
- .expect_alt_ev_len = 26,
- .expect_hci_command = BT_HCI_CMD_IO_CAPABILITY_REQUEST_REPLY,
- .expect_hci_func = client_io_cap_param_func,
- .expect_hci_param = mitm_no_bonding_io_cap,
- .expect_hci_len = sizeof(mitm_no_bonding_io_cap),
- .io_cap = 0x01, /* DisplayYesNo */
- .client_io_cap = 0x01, /* DisplayYesNo */
- };
- const uint8_t mitm_bonding_io_cap[] = { 0x01, 0x00, 0x03 };
- static const struct generic_data pair_device_ssp_test_6 = {
- .setup_settings = settings_powered_bondable_ssp,
- .client_enable_ssp = true,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_func = pair_device_expect_param_func,
- .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
- .expect_alt_ev_len = 26,
- .expect_hci_command = BT_HCI_CMD_IO_CAPABILITY_REQUEST_REPLY,
- .expect_hci_func = client_io_cap_param_func,
- .expect_hci_param = mitm_bonding_io_cap,
- .expect_hci_len = sizeof(mitm_bonding_io_cap),
- .io_cap = 0x01, /* DisplayYesNo */
- .client_io_cap = 0x01, /* DisplayYesNo */
- };
- static const struct generic_data pair_device_ssp_reject_1 = {
- .setup_settings = settings_powered_bondable_ssp,
- .client_enable_ssp = true,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .expect_status = MGMT_STATUS_AUTH_FAILED,
- .expect_func = pair_device_expect_param_func,
- .expect_alt_ev = MGMT_EV_AUTH_FAILED,
- .expect_alt_ev_len = 8,
- .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_NEG_REPLY,
- .expect_hci_func = client_bdaddr_param_func,
- .io_cap = 0x01, /* DisplayYesNo */
- .client_io_cap = 0x01, /* DisplayYesNo */
- .client_auth_req = 0x01, /* No Bonding - MITM */
- .reject_confirm = true,
- };
- static const struct generic_data pair_device_ssp_reject_2 = {
- .setup_settings = settings_powered_bondable_ssp,
- .client_enable_ssp = true,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .expect_status = MGMT_STATUS_AUTH_FAILED,
- .expect_func = pair_device_expect_param_func,
- .expect_alt_ev = MGMT_EV_AUTH_FAILED,
- .expect_alt_ev_len = 8,
- .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
- .expect_hci_func = client_bdaddr_param_func,
- .io_cap = 0x01, /* DisplayYesNo */
- .client_io_cap = 0x01, /* DisplayYesNo */
- .client_reject_confirm = true,
- };
- static const struct generic_data pair_device_ssp_nonbondable_1 = {
- .setup_settings = settings_powered_ssp,
- .client_enable_ssp = true,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_func = pair_device_expect_param_func,
- .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
- .expect_alt_ev_len = 26,
- .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
- .expect_hci_func = client_bdaddr_param_func,
- .io_cap = 0x01, /* DisplayYesNo */
- .client_io_cap = 0x01, /* DisplayYesNo */
- };
- static const struct generic_data pair_device_le_success_test_1 = {
- .setup_settings = settings_powered_bondable,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .just_works = true,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_func = pair_device_expect_param_func,
- .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
- .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
- };
- static bool ltk_is_authenticated(const struct mgmt_ltk_info *ltk)
- {
- switch (ltk->type) {
- case 0x01:
- case 0x03:
- return true;
- default:
- return false;
- }
- }
- static bool ltk_is_sc(const struct mgmt_ltk_info *ltk)
- {
- switch (ltk->type) {
- case 0x02:
- case 0x03:
- case 0x04:
- return true;
- default:
- return false;
- }
- }
- static bool verify_ltk(const void *param, uint16_t length)
- {
- struct test_data *data = tester_get_data();
- const struct generic_data *test = data->test_data;
- const struct mgmt_ev_new_long_term_key *ev = param;
- if (length != sizeof(struct mgmt_ev_new_long_term_key)) {
- tester_warn("Invalid new ltk length %u != %zu", length,
- sizeof(struct mgmt_ev_new_long_term_key));
- return false;
- }
- if (test->just_works && ltk_is_authenticated(&ev->key)) {
- tester_warn("Authenticated key for just-works");
- return false;
- }
- if (!test->just_works && !ltk_is_authenticated(&ev->key)) {
- tester_warn("Unauthenticated key for MITM");
- return false;
- }
- if (test->expect_sc_key && !ltk_is_sc(&ev->key)) {
- tester_warn("Non-LE SC key for SC pairing");
- return false;
- }
- if (!test->expect_sc_key && ltk_is_sc(&ev->key)) {
- tester_warn("SC key for Non-SC pairing");
- return false;
- }
- return true;
- }
- static const struct generic_data pair_device_le_success_test_2 = {
- .setup_settings = settings_powered_bondable,
- .io_cap = 0x02, /* KeyboardOnly */
- .client_io_cap = 0x04, /* KeyboardDisplay */
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_func = pair_device_expect_param_func,
- .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
- .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
- .verify_alt_ev_func = verify_ltk,
- };
- static uint16_t settings_powered_sc_bondable_le_ssp[] = {
- MGMT_OP_SET_BONDABLE,
- MGMT_OP_SET_LE,
- MGMT_OP_SET_SSP,
- MGMT_OP_SET_SECURE_CONN,
- MGMT_OP_SET_POWERED,
- 0 };
- static const struct generic_data pair_device_smp_bredr_test_1 = {
- .setup_settings = settings_powered_sc_bondable_le_ssp,
- .client_enable_ssp = true,
- .client_enable_le = true,
- .client_enable_sc = true,
- .expect_sc_key = true,
- .just_works = true,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_func = pair_device_expect_param_func,
- .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
- .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
- .verify_alt_ev_func = verify_ltk,
- .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
- .expect_hci_func = client_bdaddr_param_func,
- .io_cap = 0x03, /* NoInputNoOutput */
- .client_io_cap = 0x03, /* NoInputNoOutput */
- };
- static const struct generic_data pair_device_smp_bredr_test_2 = {
- .setup_settings = settings_powered_sc_bondable_le_ssp,
- .client_enable_ssp = true,
- .client_enable_le = true,
- .client_enable_sc = true,
- .expect_sc_key = true,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_func = pair_device_expect_param_func,
- .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
- .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
- .verify_alt_ev_func = verify_ltk,
- .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
- .expect_hci_func = client_bdaddr_param_func,
- .io_cap = 0x01, /* DisplayYesNo */
- .client_io_cap = 0x01, /* DisplayYesNo */
- };
- static const struct generic_data pair_device_le_reject_test_1 = {
- .setup_settings = settings_powered_bondable,
- .io_cap = 0x02, /* KeyboardOnly */
- .client_io_cap = 0x04, /* KeyboardDisplay */
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .expect_status = MGMT_STATUS_AUTH_FAILED,
- .expect_func = pair_device_expect_param_func,
- .expect_alt_ev = MGMT_EV_AUTH_FAILED,
- .expect_alt_ev_len = sizeof(struct mgmt_ev_auth_failed),
- .reject_confirm = true,
- };
- static uint16_t settings_powered_sc_bondable[] = { MGMT_OP_SET_BONDABLE,
- MGMT_OP_SET_SECURE_CONN,
- MGMT_OP_SET_POWERED, 0 };
- static const struct generic_data pair_device_le_sc_legacy_test_1 = {
- .setup_settings = settings_powered_sc_bondable,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .just_works = true,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_func = pair_device_expect_param_func,
- .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
- .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
- .verify_alt_ev_func = verify_ltk,
- };
- static const struct generic_data pair_device_le_sc_success_test_1 = {
- .setup_settings = settings_powered_sc_bondable,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .just_works = true,
- .client_enable_sc = true,
- .expect_sc_key = true,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_func = pair_device_expect_param_func,
- .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
- .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
- .verify_alt_ev_func = verify_ltk,
- };
- static const struct generic_data pair_device_le_sc_success_test_2 = {
- .setup_settings = settings_powered_sc_bondable,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .client_enable_sc = true,
- .expect_sc_key = true,
- .io_cap = 0x02, /* KeyboardOnly */
- .client_io_cap = 0x02, /* KeyboardOnly */
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_func = pair_device_expect_param_func,
- .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
- .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
- .verify_alt_ev_func = verify_ltk,
- };
- static bool lk_is_authenticated(const struct mgmt_link_key_info *lk)
- {
- switch (lk->type) {
- case 0x00: /* Combination Key */
- case 0x01: /* Local Unit Key */
- case 0x02: /* Remote Unit Key */
- case 0x03: /* Debug Combination Key */
- if (lk->pin_len == 16)
- return true;
- return false;
- case 0x05: /* Authenticated Combination Key generated from P-192 */
- case 0x08: /* Authenticated Combination Key generated from P-256 */
- return true;
- default:
- return false;
- }
- }
- static bool lk_is_sc(const struct mgmt_link_key_info *lk)
- {
- switch (lk->type) {
- case 0x07: /* Unauthenticated Combination Key generated from P-256 */
- case 0x08: /* Authenticated Combination Key generated from P-256 */
- return true;
- default:
- return false;
- }
- }
- static bool verify_link_key(const void *param, uint16_t length)
- {
- struct test_data *data = tester_get_data();
- const struct generic_data *test = data->test_data;
- const struct mgmt_ev_new_link_key *ev = param;
- if (length != sizeof(struct mgmt_ev_new_link_key)) {
- tester_warn("Invalid new Link Key length %u != %zu", length,
- sizeof(struct mgmt_ev_new_link_key));
- return false;
- }
- if (test->just_works && lk_is_authenticated(&ev->key)) {
- tester_warn("Authenticated key for just-works");
- return false;
- }
- if (!test->just_works && !lk_is_authenticated(&ev->key)) {
- tester_warn("Unauthenticated key for MITM");
- return false;
- }
- if (test->expect_sc_key && !lk_is_sc(&ev->key)) {
- tester_warn("Non-LE SC key for SC pairing");
- return false;
- }
- if (!test->expect_sc_key && lk_is_sc(&ev->key)) {
- tester_warn("SC key for Non-SC pairing");
- return false;
- }
- return true;
- }
- static uint16_t settings_powered_le_sc_bondable[] = {
- MGMT_OP_SET_LE,
- MGMT_OP_SET_SSP,
- MGMT_OP_SET_BONDABLE,
- MGMT_OP_SET_SECURE_CONN,
- MGMT_OP_SET_POWERED, 0 };
- static const struct generic_data pair_device_le_sc_success_test_3 = {
- .setup_settings = settings_powered_le_sc_bondable,
- .send_opcode = MGMT_OP_PAIR_DEVICE,
- .send_func = pair_device_send_param_func,
- .addr_type_avail = true,
- .addr_type = 0x01,
- .client_enable_sc = true,
- .client_enable_ssp = true,
- .client_enable_adv = true,
- .expect_sc_key = true,
- .io_cap = 0x02, /* KeyboardOnly */
- .client_io_cap = 0x02, /* KeyboardOnly */
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_func = pair_device_expect_param_func,
- .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
- .expect_alt_ev_len = 26,
- .verify_alt_ev_func = verify_link_key,
- };
- static uint16_t settings_powered_connectable_bondable[] = {
- MGMT_OP_SET_BONDABLE,
- MGMT_OP_SET_CONNECTABLE,
- MGMT_OP_SET_POWERED, 0 };
- static const struct generic_data pairing_acceptor_legacy_1 = {
- .setup_settings = settings_powered_connectable_bondable,
- .pin = pair_device_pin,
- .pin_len = sizeof(pair_device_pin),
- .client_pin = pair_device_pin,
- .client_pin_len = sizeof(pair_device_pin),
- .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
- .expect_alt_ev_len = 26,
- };
- static const struct generic_data pairing_acceptor_legacy_2 = {
- .setup_settings = settings_powered_connectable_bondable,
- .expect_pin = true,
- .client_pin = pair_device_pin,
- .client_pin_len = sizeof(pair_device_pin),
- .expect_alt_ev = MGMT_EV_AUTH_FAILED,
- .expect_alt_ev_len = 8,
- };
- static const struct generic_data pairing_acceptor_legacy_3 = {
- .setup_settings = settings_powered_connectable,
- .client_pin = pair_device_pin,
- .client_pin_len = sizeof(pair_device_pin),
- .expect_alt_ev = MGMT_EV_AUTH_FAILED,
- .expect_alt_ev_len = 8,
- .expect_hci_command = BT_HCI_CMD_PIN_CODE_REQUEST_NEG_REPLY,
- .expect_hci_func = client_bdaddr_param_func,
- };
- static uint16_t settings_powered_connectable_bondable_linksec[] = {
- MGMT_OP_SET_BONDABLE,
- MGMT_OP_SET_CONNECTABLE,
- MGMT_OP_SET_LINK_SECURITY,
- MGMT_OP_SET_POWERED, 0 };
- static const struct generic_data pairing_acceptor_linksec_1 = {
- .setup_settings = settings_powered_connectable_bondable_linksec,
- .pin = pair_device_pin,
- .pin_len = sizeof(pair_device_pin),
- .client_pin = pair_device_pin,
- .client_pin_len = sizeof(pair_device_pin),
- .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
- .expect_alt_ev_len = 26,
- };
- static const struct generic_data pairing_acceptor_linksec_2 = {
- .setup_settings = settings_powered_connectable_bondable_linksec,
- .expect_pin = true,
- .client_pin = pair_device_pin,
- .client_pin_len = sizeof(pair_device_pin),
- .expect_alt_ev = MGMT_EV_CONNECT_FAILED,
- .expect_alt_ev_len = 8,
- };
- static uint16_t settings_powered_connectable_bondable_ssp[] = {
- MGMT_OP_SET_BONDABLE,
- MGMT_OP_SET_CONNECTABLE,
- MGMT_OP_SET_SSP,
- MGMT_OP_SET_POWERED, 0 };
- static const struct generic_data pairing_acceptor_ssp_1 = {
- .setup_settings = settings_powered_connectable_bondable_ssp,
- .client_enable_ssp = true,
- .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
- .expect_alt_ev_len = 26,
- .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
- .expect_hci_func = client_bdaddr_param_func,
- .io_cap = 0x03, /* NoInputNoOutput */
- .client_io_cap = 0x03, /* NoInputNoOutput */
- .just_works = true,
- };
- static const struct generic_data pairing_acceptor_ssp_2 = {
- .setup_settings = settings_powered_connectable_bondable_ssp,
- .client_enable_ssp = true,
- .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
- .expect_alt_ev_len = 26,
- .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
- .expect_hci_func = client_bdaddr_param_func,
- .io_cap = 0x01, /* DisplayYesNo */
- .client_io_cap = 0x01, /* DisplayYesNo */
- };
- static const struct generic_data pairing_acceptor_ssp_3 = {
- .setup_settings = settings_powered_connectable_bondable_ssp,
- .client_enable_ssp = true,
- .expect_alt_ev = MGMT_EV_NEW_LINK_KEY,
- .expect_alt_ev_len = 26,
- .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
- .expect_hci_func = client_bdaddr_param_func,
- .io_cap = 0x01, /* DisplayYesNo */
- .client_io_cap = 0x01, /* DisplayYesNo */
- .just_works = true,
- };
- static const void *client_io_cap_reject_param_func(uint8_t *len)
- {
- struct test_data *data = tester_get_data();
- static uint8_t param[7];
- memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
- param[6] = 0x18; /* Pairing Not Allowed */
- *len = sizeof(param);
- return param;
- }
- static uint16_t settings_powered_connectable_ssp[] = {
- MGMT_OP_SET_CONNECTABLE,
- MGMT_OP_SET_SSP,
- MGMT_OP_SET_POWERED, 0 };
- static const struct generic_data pairing_acceptor_ssp_4 = {
- .setup_settings = settings_powered_connectable_ssp,
- .client_enable_ssp = true,
- .expect_alt_ev = MGMT_EV_AUTH_FAILED,
- .expect_alt_ev_len = 8,
- .expect_hci_command = BT_HCI_CMD_IO_CAPABILITY_REQUEST_NEG_REPLY,
- .expect_hci_func = client_io_cap_reject_param_func,
- .io_cap = 0x01, /* DisplayYesNo */
- .client_io_cap = 0x01, /* DisplayYesNo */
- .client_auth_req = 0x02, /* Dedicated Bonding - No MITM */
- };
- static uint16_t settings_powered_sc_bondable_connectable_le_ssp[] = {
- MGMT_OP_SET_BONDABLE,
- MGMT_OP_SET_CONNECTABLE,
- MGMT_OP_SET_LE,
- MGMT_OP_SET_SSP,
- MGMT_OP_SET_SECURE_CONN,
- MGMT_OP_SET_POWERED,
- 0 };
- static const struct generic_data pairing_acceptor_smp_bredr_1 = {
- .setup_settings = settings_powered_sc_bondable_connectable_le_ssp,
- .client_enable_ssp = true,
- .client_enable_le = true,
- .client_enable_sc = true,
- .expect_sc_key = true,
- .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
- .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
- .verify_alt_ev_func = verify_ltk,
- .just_works = true,
- .io_cap = 0x03, /* NoInputNoOutput */
- .client_io_cap = 0x03, /* No InputNoOutput */
- .client_auth_req = 0x00, /* No Bonding - No MITM */
- };
- static const struct generic_data pairing_acceptor_smp_bredr_2 = {
- .setup_settings = settings_powered_sc_bondable_connectable_le_ssp,
- .client_enable_ssp = true,
- .client_enable_le = true,
- .client_enable_sc = true,
- .expect_sc_key = true,
- .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
- .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
- .verify_alt_ev_func = verify_ltk,
- .io_cap = 0x01, /* DisplayYesNo */
- .client_io_cap = 0x01, /* DisplayYesNo */
- .client_auth_req = 0x02, /* Dedicated Bonding - No MITM */
- };
- static uint16_t settings_powered_bondable_connectable_advertising[] = {
- MGMT_OP_SET_BONDABLE,
- MGMT_OP_SET_CONNECTABLE,
- MGMT_OP_SET_ADVERTISING,
- MGMT_OP_SET_POWERED, 0 };
- static const struct generic_data pairing_acceptor_le_1 = {
- .setup_settings = settings_powered_bondable_connectable_advertising,
- .io_cap = 0x03, /* NoInputNoOutput */
- .client_io_cap = 0x03, /* NoInputNoOutput */
- .just_works = true,
- .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
- .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
- .verify_alt_ev_func = verify_ltk,
- };
- static const struct generic_data pairing_acceptor_le_2 = {
- .setup_settings = settings_powered_bondable_connectable_advertising,
- .io_cap = 0x04, /* KeyboardDisplay */
- .client_io_cap = 0x04, /* KeyboardDisplay */
- .client_auth_req = 0x05, /* Bonding - MITM */
- .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
- .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
- .verify_alt_ev_func = verify_ltk,
- };
- static const struct generic_data pairing_acceptor_le_3 = {
- .setup_settings = settings_powered_bondable_connectable_advertising,
- .io_cap = 0x04, /* KeyboardDisplay */
- .client_io_cap = 0x04, /* KeyboardDisplay */
- .expect_alt_ev = MGMT_EV_AUTH_FAILED,
- .expect_alt_ev_len = sizeof(struct mgmt_ev_auth_failed),
- .reject_confirm = true,
- };
- static const struct generic_data pairing_acceptor_le_4 = {
- .setup_settings = settings_powered_bondable_connectable_advertising,
- .io_cap = 0x02, /* KeyboardOnly */
- .client_io_cap = 0x04, /* KeyboardDisplay */
- .client_auth_req = 0x05, /* Bonding - MITM */
- .expect_alt_ev = MGMT_EV_NEW_LONG_TERM_KEY,
- .expect_alt_ev_len = sizeof(struct mgmt_ev_new_long_term_key),
- .verify_alt_ev_func = verify_ltk,
- };
- static const struct generic_data pairing_acceptor_le_5 = {
- .setup_settings = settings_powered_bondable_connectable_advertising,
- .io_cap = 0x02, /* KeyboardOnly */
- .client_io_cap = 0x04, /* KeyboardDisplay */
- .client_auth_req = 0x05, /* Bonding - MITM */
- .reject_confirm = true,
- .expect_alt_ev = MGMT_EV_AUTH_FAILED,
- .expect_alt_ev_len = sizeof(struct mgmt_ev_auth_failed),
- };
- static const char unpair_device_param[] = {
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00, 0x00 };
- static const char unpair_device_rsp[] = {
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00 };
- static const char unpair_device_invalid_param_1[] = {
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff, 0x00 };
- static const char unpair_device_invalid_param_rsp_1[] = {
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff };
- static const char unpair_device_invalid_param_2[] = {
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00, 0x02 };
- static const char unpair_device_invalid_param_rsp_2[] = {
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00 };
- static const struct generic_data unpair_device_not_powered_test_1 = {
- .send_opcode = MGMT_OP_UNPAIR_DEVICE,
- .send_param = unpair_device_param,
- .send_len = sizeof(unpair_device_param),
- .expect_status = MGMT_STATUS_NOT_POWERED,
- .expect_param = unpair_device_rsp,
- .expect_len = sizeof(unpair_device_rsp),
- };
- static const struct generic_data unpair_device_invalid_param_test_1 = {
- .send_opcode = MGMT_OP_UNPAIR_DEVICE,
- .send_param = unpair_device_invalid_param_1,
- .send_len = sizeof(unpair_device_invalid_param_1),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- .expect_param = unpair_device_invalid_param_rsp_1,
- .expect_len = sizeof(unpair_device_invalid_param_rsp_1),
- };
- static const struct generic_data unpair_device_invalid_param_test_2 = {
- .send_opcode = MGMT_OP_UNPAIR_DEVICE,
- .send_param = unpair_device_invalid_param_2,
- .send_len = sizeof(unpair_device_invalid_param_2),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- .expect_param = unpair_device_invalid_param_rsp_2,
- .expect_len = sizeof(unpair_device_invalid_param_rsp_2),
- };
- static const char disconnect_invalid_param_1[] = {
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff };
- static const char disconnect_invalid_param_rsp_1[] = {
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff };
- static const struct generic_data disconnect_invalid_param_test_1 = {
- .send_opcode = MGMT_OP_DISCONNECT,
- .send_param = disconnect_invalid_param_1,
- .send_len = sizeof(disconnect_invalid_param_1),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- .expect_param = disconnect_invalid_param_rsp_1,
- .expect_len = sizeof(disconnect_invalid_param_rsp_1),
- };
- static const char block_device_invalid_param_1[] = {
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff };
- static const char block_device_invalid_param_rsp_1[] = {
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff };
- static const struct generic_data block_device_invalid_param_test_1 = {
- .send_opcode = MGMT_OP_BLOCK_DEVICE,
- .send_param = block_device_invalid_param_1,
- .send_len = sizeof(block_device_invalid_param_1),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- .expect_param = block_device_invalid_param_rsp_1,
- .expect_len = sizeof(block_device_invalid_param_rsp_1),
- };
- static const char unblock_device_invalid_param_1[] = {
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff };
- static const char unblock_device_invalid_param_rsp_1[] = {
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0xff };
- static const struct generic_data unblock_device_invalid_param_test_1 = {
- .send_opcode = MGMT_OP_UNBLOCK_DEVICE,
- .send_param = unblock_device_invalid_param_1,
- .send_len = sizeof(unblock_device_invalid_param_1),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- .expect_param = unblock_device_invalid_param_rsp_1,
- .expect_len = sizeof(unblock_device_invalid_param_rsp_1),
- };
- static const char set_static_addr_valid_param[] = {
- 0x11, 0x22, 0x33, 0x44, 0x55, 0xc0 };
- static const char set_static_addr_settings[] = { 0x00, 0x82, 0x00, 0x00 };
- static const struct generic_data set_static_addr_success_test = {
- .send_opcode = MGMT_OP_SET_STATIC_ADDRESS,
- .send_param = set_static_addr_valid_param,
- .send_len = sizeof(set_static_addr_valid_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_static_addr_settings,
- .expect_len = sizeof(set_static_addr_settings),
- .expect_settings_set = MGMT_SETTING_STATIC_ADDRESS,
- };
- static const char set_static_addr_settings_dual[] = { 0x80, 0x00, 0x00, 0x00 };
- static const struct generic_data set_static_addr_success_test_2 = {
- .send_opcode = MGMT_OP_SET_STATIC_ADDRESS,
- .send_param = set_static_addr_valid_param,
- .send_len = sizeof(set_static_addr_valid_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_static_addr_settings_dual,
- .expect_len = sizeof(set_static_addr_settings_dual),
- };
- static const struct generic_data set_static_addr_failure_test = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_SET_STATIC_ADDRESS,
- .send_param = set_static_addr_valid_param,
- .send_len = sizeof(set_static_addr_valid_param),
- .expect_status = MGMT_STATUS_REJECTED,
- };
- static const struct generic_data set_static_addr_failure_test_2 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_SET_STATIC_ADDRESS,
- .send_param = set_static_addr_valid_param,
- .send_len = sizeof(set_static_addr_valid_param),
- .expect_status = MGMT_STATUS_NOT_SUPPORTED,
- };
- static const char set_scan_params_valid_param[] = { 0x60, 0x00, 0x30, 0x00 };
- static const struct generic_data set_scan_params_success_test = {
- .send_opcode = MGMT_OP_SET_SCAN_PARAMS,
- .send_param = set_scan_params_valid_param,
- .send_len = sizeof(set_scan_params_valid_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- };
- static const char load_irks_empty_list[] = { 0x00, 0x00 };
- static const struct generic_data load_irks_success1_test = {
- .send_opcode = MGMT_OP_LOAD_IRKS,
- .send_param = load_irks_empty_list,
- .send_len = sizeof(load_irks_empty_list),
- .expect_status = MGMT_STATUS_SUCCESS,
- };
- static const char load_irks_one_irk[] = { 0x01, 0x00,
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x01,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
- static const struct generic_data load_irks_success2_test = {
- .send_opcode = MGMT_OP_LOAD_IRKS,
- .send_param = load_irks_one_irk,
- .send_len = sizeof(load_irks_one_irk),
- .expect_status = MGMT_STATUS_SUCCESS,
- };
- static const char load_irks_nval_addr_type[] = { 0x01, 0x00,
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x00,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
- static const struct generic_data load_irks_nval_param1_test = {
- .send_opcode = MGMT_OP_LOAD_IRKS,
- .send_param = load_irks_nval_addr_type,
- .send_len = sizeof(load_irks_nval_addr_type),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const char load_irks_nval_rand_addr[] = { 0x01, 0x00,
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x02,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
- static const struct generic_data load_irks_nval_param2_test = {
- .send_opcode = MGMT_OP_LOAD_IRKS,
- .send_param = load_irks_nval_rand_addr,
- .send_len = sizeof(load_irks_nval_rand_addr),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const char load_irks_nval_len[] = { 0x02, 0x00, 0xff, 0xff };
- static const struct generic_data load_irks_nval_param3_test = {
- .send_opcode = MGMT_OP_LOAD_IRKS,
- .send_param = load_irks_nval_len,
- .send_len = sizeof(load_irks_nval_len),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data load_irks_not_supported_test = {
- .send_opcode = MGMT_OP_LOAD_IRKS,
- .send_param = load_irks_empty_list,
- .send_len = sizeof(load_irks_empty_list),
- .expect_status = MGMT_STATUS_NOT_SUPPORTED,
- };
- static const char set_privacy_valid_param[] = { 0x01,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
- static const char set_privacy_settings_param[] = { 0x80, 0x20, 0x00, 0x00 };
- static const struct generic_data set_privacy_success_test = {
- .send_opcode = MGMT_OP_SET_PRIVACY,
- .send_param = set_privacy_valid_param,
- .send_len = sizeof(set_privacy_valid_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_privacy_settings_param,
- .expect_len = sizeof(set_privacy_settings_param),
- .expect_settings_set = MGMT_SETTING_PRIVACY,
- };
- static const struct generic_data set_privacy_powered_test = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_SET_PRIVACY,
- .send_param = set_privacy_valid_param,
- .send_len = sizeof(set_privacy_valid_param),
- .expect_status = MGMT_STATUS_REJECTED,
- };
- static const char set_privacy_nval_param[] = { 0xff,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
- static const struct generic_data set_privacy_nval_param_test = {
- .send_opcode = MGMT_OP_SET_PRIVACY,
- .send_param = set_privacy_nval_param,
- .send_len = sizeof(set_privacy_nval_param),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const void *get_clock_info_send_param_func(uint16_t *len)
- {
- struct test_data *data = tester_get_data();
- static uint8_t param[7];
- memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
- param[6] = 0x00; /* Address type */
- *len = sizeof(param);
- return param;
- }
- static const void *get_clock_info_expect_param_func(uint16_t *len)
- {
- struct test_data *data = tester_get_data();
- static uint8_t param[17];
- struct mgmt_rp_get_clock_info *rp;
- rp = (struct mgmt_rp_get_clock_info *)param;
- memset(param, 0, sizeof(param));
- memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
- param[6] = 0x00; /* Address type */
- rp->local_clock = 0x11223344;
- rp->piconet_clock = 0x11223344;
- rp->accuracy = 0x5566;
- *len = sizeof(param);
- return param;
- }
- static const void *get_clock_info_expect_param_not_powered_func(uint16_t *len)
- {
- struct test_data *data = tester_get_data();
- static uint8_t param[17];
- memset(param, 0, sizeof(param));
- memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
- param[6] = 0x00; /* Address type */
- *len = sizeof(param);
- return param;
- }
- static const void *get_conn_info_send_param_func(uint16_t *len)
- {
- struct test_data *data = tester_get_data();
- static uint8_t param[7];
- memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
- param[6] = 0x00; /* Address type */
- *len = sizeof(param);
- return param;
- }
- static const void *get_conn_info_expect_param_func(uint16_t *len)
- {
- struct test_data *data = tester_get_data();
- static uint8_t param[10];
- memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
- param[6] = 0x00; /* Address type */
- param[7] = 0xff; /* RSSI (= -1) */
- param[8] = 0xff; /* TX power (= -1) */
- param[9] = 0x04; /* max TX power */
- *len = sizeof(param);
- return param;
- }
- static const void *get_conn_info_error_expect_param_func(uint16_t *len)
- {
- struct test_data *data = tester_get_data();
- static uint8_t param[10];
- /* All unset parameters shall be 0 in case of error */
- memset(param, 0, sizeof(param));
- memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
- param[6] = 0x00; /* Address type */
- *len = sizeof(param);
- return param;
- }
- static const struct generic_data get_clock_info_succes1_test = {
- .setup_settings = settings_powered_connectable_bondable_ssp,
- .send_opcode = MGMT_OP_GET_CLOCK_INFO,
- .send_func = get_clock_info_send_param_func,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_func = get_clock_info_expect_param_func,
- };
- static const struct generic_data get_clock_info_fail1_test = {
- .send_opcode = MGMT_OP_GET_CLOCK_INFO,
- .send_func = get_clock_info_send_param_func,
- .expect_status = MGMT_STATUS_NOT_POWERED,
- .expect_func = get_clock_info_expect_param_not_powered_func,
- };
- static const struct generic_data get_conn_info_succes1_test = {
- .setup_settings = settings_powered_connectable_bondable_ssp,
- .send_opcode = MGMT_OP_GET_CONN_INFO,
- .send_func = get_conn_info_send_param_func,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_func = get_conn_info_expect_param_func,
- };
- static const struct generic_data get_conn_info_ncon_test = {
- .setup_settings = settings_powered_connectable_bondable_ssp,
- .send_opcode = MGMT_OP_GET_CONN_INFO,
- .send_func = get_conn_info_send_param_func,
- .expect_status = MGMT_STATUS_NOT_CONNECTED,
- .expect_func = get_conn_info_error_expect_param_func,
- };
- static const void *get_conn_info_expect_param_power_off_func(uint16_t *len)
- {
- struct test_data *data = tester_get_data();
- static uint8_t param[10];
- memcpy(param, hciemu_get_client_bdaddr(data->hciemu), 6);
- param[6] = 0x00; /* Address type */
- param[7] = 127; /* RSSI */
- param[8] = 127; /* TX power */
- param[9] = 127; /* max TX power */
- *len = sizeof(param);
- return param;
- }
- static const struct generic_data get_conn_info_power_off_test = {
- .setup_settings = settings_powered_connectable_bondable_ssp,
- .send_opcode = MGMT_OP_GET_CONN_INFO,
- .send_func = get_conn_info_send_param_func,
- .force_power_off = true,
- .expect_status = MGMT_STATUS_NOT_POWERED,
- .expect_func = get_conn_info_expect_param_power_off_func,
- .fail_tolerant = true,
- };
- static const uint8_t load_conn_param_nval_1[16] = { 0x12, 0x11 };
- static const struct generic_data load_conn_params_fail_1 = {
- .send_opcode = MGMT_OP_LOAD_CONN_PARAM,
- .send_param = load_conn_param_nval_1,
- .send_len = sizeof(load_conn_param_nval_1),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const uint8_t add_device_nval_1[] = {
- 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
- 0x00,
- 0x00,
- };
- static const uint8_t add_device_rsp[] = {
- 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
- 0x00,
- };
- static const struct generic_data add_device_fail_1 = {
- .send_opcode = MGMT_OP_ADD_DEVICE,
- .send_param = add_device_nval_1,
- .send_len = sizeof(add_device_nval_1),
- .expect_param = add_device_rsp,
- .expect_len = sizeof(add_device_rsp),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const uint8_t add_device_nval_2[] = {
- 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
- 0x00,
- 0x02,
- };
- static const struct generic_data add_device_fail_2 = {
- .send_opcode = MGMT_OP_ADD_DEVICE,
- .send_param = add_device_nval_2,
- .send_len = sizeof(add_device_nval_2),
- .expect_param = add_device_rsp,
- .expect_len = sizeof(add_device_rsp),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const uint8_t add_device_nval_3[] = {
- 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
- 0x00,
- 0xff,
- };
- static const struct generic_data add_device_fail_3 = {
- .send_opcode = MGMT_OP_ADD_DEVICE,
- .send_param = add_device_nval_3,
- .send_len = sizeof(add_device_nval_3),
- .expect_param = add_device_rsp,
- .expect_len = sizeof(add_device_rsp),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const uint8_t add_device_nval_4[] = {
- 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
- 0x02,
- 0x02,
- };
- static const uint8_t add_device_rsp_4[] = {
- 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
- 0x02,
- };
- static const struct generic_data add_device_fail_4 = {
- .send_opcode = MGMT_OP_ADD_DEVICE,
- .send_param = add_device_nval_4,
- .send_len = sizeof(add_device_nval_4),
- .expect_param = add_device_rsp_4,
- .expect_len = sizeof(add_device_rsp_4),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const uint8_t add_device_success_param_1[] = {
- 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
- 0x00,
- 0x01,
- };
- static const struct generic_data add_device_success_1 = {
- .send_opcode = MGMT_OP_ADD_DEVICE,
- .send_param = add_device_success_param_1,
- .send_len = sizeof(add_device_success_param_1),
- .expect_param = add_device_rsp,
- .expect_len = sizeof(add_device_rsp),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_alt_ev = MGMT_EV_DEVICE_ADDED,
- .expect_alt_ev_param = add_device_success_param_1,
- .expect_alt_ev_len = sizeof(add_device_success_param_1),
- };
- static const uint8_t add_device_success_param_2[] = {
- 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
- 0x01,
- 0x00,
- };
- static const uint8_t add_device_rsp_le[] = {
- 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
- 0x01,
- };
- static const struct generic_data add_device_success_2 = {
- .send_opcode = MGMT_OP_ADD_DEVICE,
- .send_param = add_device_success_param_2,
- .send_len = sizeof(add_device_success_param_2),
- .expect_param = add_device_rsp_le,
- .expect_len = sizeof(add_device_rsp_le),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_alt_ev = MGMT_EV_DEVICE_ADDED,
- .expect_alt_ev_param = add_device_success_param_2,
- .expect_alt_ev_len = sizeof(add_device_success_param_2),
- };
- static const uint8_t add_device_success_param_3[] = {
- 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
- 0x01,
- 0x02,
- };
- static const struct generic_data add_device_success_3 = {
- .send_opcode = MGMT_OP_ADD_DEVICE,
- .send_param = add_device_success_param_3,
- .send_len = sizeof(add_device_success_param_3),
- .expect_param = add_device_rsp_le,
- .expect_len = sizeof(add_device_rsp_le),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_alt_ev = MGMT_EV_DEVICE_ADDED,
- .expect_alt_ev_param = add_device_success_param_3,
- .expect_alt_ev_len = sizeof(add_device_success_param_3),
- };
- static const struct generic_data add_device_success_4 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_ADD_DEVICE,
- .send_param = add_device_success_param_1,
- .send_len = sizeof(add_device_success_param_1),
- .expect_param = add_device_rsp,
- .expect_len = sizeof(add_device_rsp),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_alt_ev = MGMT_EV_DEVICE_ADDED,
- .expect_alt_ev_param = add_device_success_param_1,
- .expect_alt_ev_len = sizeof(add_device_success_param_1),
- .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
- .expect_hci_param = set_connectable_scan_enable_param,
- .expect_hci_len = sizeof(set_connectable_scan_enable_param),
- };
- static const uint8_t le_scan_enable[] = { 0x01, 0x01 };
- static const struct generic_data add_device_success_5 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_DEVICE,
- .send_param = add_device_success_param_2,
- .send_len = sizeof(add_device_success_param_2),
- .expect_param = add_device_rsp_le,
- .expect_len = sizeof(add_device_rsp_le),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_alt_ev = MGMT_EV_DEVICE_ADDED,
- .expect_alt_ev_param = add_device_success_param_2,
- .expect_alt_ev_len = sizeof(add_device_success_param_2),
- .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_ENABLE,
- .expect_hci_param = le_scan_enable,
- .expect_hci_len = sizeof(le_scan_enable),
- };
- static const uint8_t add_device_success_param_6[] = {
- 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
- 0x01,
- 0x02,
- };
- static const uint8_t le_add_to_accept_list_param[] = {
- 0x00, /* Type */
- 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* Address */
- };
- static const struct generic_data add_device_success_6 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_DEVICE,
- .send_param = add_device_success_param_6,
- .send_len = sizeof(add_device_success_param_6),
- .expect_param = add_device_rsp_le,
- .expect_len = sizeof(add_device_rsp_le),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_alt_ev = MGMT_EV_DEVICE_ADDED,
- .expect_alt_ev_param = add_device_success_param_6,
- .expect_alt_ev_len = sizeof(add_device_success_param_6),
- .expect_hci_command = BT_HCI_CMD_LE_ADD_TO_ACCEPT_LIST,
- .expect_hci_param = le_add_to_accept_list_param,
- .expect_hci_len = sizeof(le_add_to_accept_list_param),
- };
- static const uint8_t le_add_to_resolv_list_param[] = {
- 0x00, /* Type */
- 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* Address */
- 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, /* Peer IRK */
- 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, /* Local IRK */
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
- };
- static const struct generic_data add_device_success_7 = {
- .send_opcode = MGMT_OP_ADD_DEVICE,
- .send_param = add_device_success_param_6,
- .send_len = sizeof(add_device_success_param_6),
- .expect_param = add_device_rsp_le,
- .expect_len = sizeof(add_device_rsp_le),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_alt_ev = MGMT_EV_DEVICE_ADDED,
- .expect_alt_ev_param = add_device_success_param_6,
- .expect_alt_ev_len = sizeof(add_device_success_param_6),
- .expect_hci_command = BT_HCI_CMD_LE_ADD_TO_RESOLV_LIST,
- .expect_hci_param = le_add_to_resolv_list_param,
- .expect_hci_len = sizeof(le_add_to_resolv_list_param),
- };
- static const struct generic_data add_device_success_8 = {
- .send_opcode = MGMT_OP_ADD_DEVICE,
- .send_param = add_device_success_param_6,
- .send_len = sizeof(add_device_success_param_6),
- .expect_param = add_device_rsp_le,
- .expect_len = sizeof(add_device_rsp_le),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_alt_ev = MGMT_EV_DEVICE_ADDED,
- .expect_alt_ev_param = add_device_success_param_6,
- .expect_alt_ev_len = sizeof(add_device_success_param_6),
- .expect_hci_command = BT_HCI_CMD_LE_SET_RESOLV_ENABLE,
- .expect_hci_param = set_resolv_on_param,
- .expect_hci_len = sizeof(set_resolv_on_param),
- };
- static const uint8_t remove_device_nval_1[] = {
- 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
- 0xff,
- };
- static const struct generic_data remove_device_fail_1 = {
- .send_opcode = MGMT_OP_REMOVE_DEVICE,
- .send_param = remove_device_nval_1,
- .send_len = sizeof(remove_device_nval_1),
- .expect_param = remove_device_nval_1,
- .expect_len = sizeof(remove_device_nval_1),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const uint8_t remove_device_param_1[] = {
- 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
- 0x00,
- };
- static const struct generic_data remove_device_fail_2 = {
- .send_opcode = MGMT_OP_REMOVE_DEVICE,
- .send_param = remove_device_param_1,
- .send_len = sizeof(remove_device_param_1),
- .expect_param = remove_device_param_1,
- .expect_len = sizeof(remove_device_param_1),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const uint8_t remove_device_param_3[] = {
- 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
- 0x02,
- };
- static const struct generic_data remove_device_fail_3 = {
- .send_opcode = MGMT_OP_REMOVE_DEVICE,
- .send_param = remove_device_param_3,
- .send_len = sizeof(remove_device_param_3),
- .expect_param = remove_device_param_3,
- .expect_len = sizeof(remove_device_param_3),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data remove_device_success_1 = {
- .send_opcode = MGMT_OP_REMOVE_DEVICE,
- .send_param = remove_device_param_1,
- .send_len = sizeof(remove_device_param_1),
- .expect_param = remove_device_param_1,
- .expect_len = sizeof(remove_device_param_1),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_alt_ev = MGMT_EV_DEVICE_REMOVED,
- .expect_alt_ev_param = remove_device_param_1,
- .expect_alt_ev_len = sizeof(remove_device_param_1),
- };
- static const struct generic_data remove_device_success_2 = {
- .send_opcode = MGMT_OP_REMOVE_DEVICE,
- .send_param = remove_device_param_1,
- .send_len = sizeof(remove_device_param_1),
- .expect_param = remove_device_param_1,
- .expect_len = sizeof(remove_device_param_1),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_alt_ev = MGMT_EV_DEVICE_REMOVED,
- .expect_alt_ev_param = remove_device_param_1,
- .expect_alt_ev_len = sizeof(remove_device_param_1),
- .expect_hci_command = BT_HCI_CMD_WRITE_SCAN_ENABLE,
- .expect_hci_param = set_connectable_off_scan_enable_param,
- .expect_hci_len = sizeof(set_connectable_off_scan_enable_param),
- };
- static const struct generic_data remove_device_success_3 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_REMOVE_DEVICE,
- .send_param = remove_device_param_1,
- .send_len = sizeof(remove_device_param_1),
- .expect_param = remove_device_param_1,
- .expect_len = sizeof(remove_device_param_1),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_alt_ev = MGMT_EV_DEVICE_REMOVED,
- .expect_alt_ev_param = remove_device_param_1,
- .expect_alt_ev_len = sizeof(remove_device_param_1),
- };
- static const uint8_t remove_device_param_2[] = {
- 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc,
- 0x01,
- };
- static const struct generic_data remove_device_success_4 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_REMOVE_DEVICE,
- .send_param = remove_device_param_2,
- .send_len = sizeof(remove_device_param_2),
- .expect_param = remove_device_param_2,
- .expect_len = sizeof(remove_device_param_2),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_alt_ev = MGMT_EV_DEVICE_REMOVED,
- .expect_alt_ev_param = remove_device_param_2,
- .expect_alt_ev_len = sizeof(remove_device_param_2),
- };
- static const struct generic_data remove_device_success_5 = {
- .send_opcode = MGMT_OP_REMOVE_DEVICE,
- .send_param = remove_device_param_2,
- .send_len = sizeof(remove_device_param_2),
- .expect_param = remove_device_param_2,
- .expect_len = sizeof(remove_device_param_2),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_alt_ev = MGMT_EV_DEVICE_REMOVED,
- .expect_alt_ev_param = remove_device_param_2,
- .expect_alt_ev_len = sizeof(remove_device_param_2),
- };
- static const uint8_t remove_device_param_all[7] = { 0x00 };
- static const struct generic_data remove_device_success_6 = {
- .send_opcode = MGMT_OP_REMOVE_DEVICE,
- .send_param = remove_device_param_all,
- .send_len = sizeof(remove_device_param_all),
- .expect_param = remove_device_param_all,
- .expect_len = sizeof(remove_device_param_all),
- .expect_status = MGMT_STATUS_SUCCESS,
- };
- static const struct generic_data remove_device_success_7 = {
- .send_opcode = MGMT_OP_REMOVE_DEVICE,
- .send_param = remove_device_param_2,
- .send_len = sizeof(remove_device_param_2),
- .expect_param = remove_device_param_2,
- .expect_len = sizeof(remove_device_param_2),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_REMOVE_FROM_ACCEPT_LIST,
- .expect_hci_param = le_add_to_accept_list_param,
- .expect_hci_len = sizeof(le_add_to_accept_list_param),
- .expect_alt_ev = MGMT_EV_DEVICE_REMOVED,
- .expect_alt_ev_param = remove_device_param_2,
- .expect_alt_ev_len = sizeof(remove_device_param_2),
- };
- static const struct generic_data remove_device_success_8 = {
- .send_opcode = MGMT_OP_REMOVE_DEVICE,
- .send_param = remove_device_param_2,
- .send_len = sizeof(remove_device_param_2),
- .expect_param = remove_device_param_2,
- .expect_len = sizeof(remove_device_param_2),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_REMOVE_FROM_RESOLV_LIST,
- .expect_hci_param = le_add_to_accept_list_param,
- .expect_hci_len = sizeof(le_add_to_accept_list_param),
- .expect_alt_ev = MGMT_EV_DEVICE_REMOVED,
- .expect_alt_ev_param = remove_device_param_2,
- .expect_alt_ev_len = sizeof(remove_device_param_2),
- };
- static const struct generic_data read_adv_features_invalid_param_test = {
- .send_opcode = MGMT_OP_READ_ADV_FEATURES,
- .send_param = dummy_data,
- .send_len = sizeof(dummy_data),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data read_adv_features_invalid_index_test = {
- .send_index_none = true,
- .send_opcode = MGMT_OP_READ_ADV_FEATURES,
- .expect_status = MGMT_STATUS_INVALID_INDEX,
- };
- static const uint8_t read_adv_features_rsp_1[] = {
- 0x7f, 0xf0, 0x01, 0x00, /* supported flags */
- 0x1f, /* max_adv_data_len */
- 0x1f, /* max_scan_rsp_len */
- 0x05, /* max_instances */
- 0x00, /* num_instances */
- };
- static const struct generic_data read_adv_features_success_1 = {
- .send_opcode = MGMT_OP_READ_ADV_FEATURES,
- .expect_param = read_adv_features_rsp_1,
- .expect_len = sizeof(read_adv_features_rsp_1),
- .expect_status = MGMT_STATUS_SUCCESS,
- };
- static const uint8_t read_adv_features_rsp_2[] = {
- 0x7f, 0xf0, 0x01, 0x00, /* supported flags */
- 0x1f, /* max_adv_data_len */
- 0x1f, /* max_scan_rsp_len */
- 0x05, /* max_instances */
- 0x01, /* num_instances */
- 0x01, /* instance identifiers */
- };
- static const struct generic_data read_adv_features_success_2 = {
- .send_opcode = MGMT_OP_READ_ADV_FEATURES,
- .expect_param = read_adv_features_rsp_2,
- .expect_len = sizeof(read_adv_features_rsp_2),
- .expect_status = MGMT_STATUS_SUCCESS,
- };
- /* simple add advertising command */
- static const uint8_t add_advertising_param_uuid[] = {
- 0x01, /* adv instance */
- 0x00, 0x00, 0x00, 0x00, /* flags: none */
- 0x00, 0x00, /* duration: default */
- 0x00, 0x00, /* timeout: none */
- 0x09, /* adv data len */
- 0x00, /* scan rsp len */
- /* adv data: */
- 0x03, /* AD len */
- 0x02, /* AD type: some 16 bit service class UUIDs */
- 0x0d, 0x18, /* heart rate monitor */
- 0x04, /* AD len */
- 0xff, /* AD type: manufacturer specific data */
- 0x01, 0x02, 0x03, /* custom advertising data */
- };
- /* add advertising with scan response data */
- static const uint8_t add_advertising_param_scanrsp[] = {
- /* instance, flags, duration, timeout, adv data len: same as before */
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
- 0x0a, /* scan rsp len */
- /* adv data: same as before */
- 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
- /* scan rsp data: */
- 0x03, /* AD len */
- 0x19, /* AD type: external appearance */
- 0x40, 0x03, /* some custom appearance */
- 0x05, /* AD len */
- 0x03, /* AD type: all 16 bit service class UUIDs */
- 0x0d, 0x18, /* heart rate monitor */
- 0x0f, 0x18, /* battery service */
- };
- /* add advertising with timeout */
- static const uint8_t add_advertising_param_timeout[] = {
- /* instance, flags, duration: same as before */
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x05, 0x00, /* timeout: 5 seconds */
- /* adv data: same as before */
- 0x09, 0x00, 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
- };
- /* add advertising with connectable flag */
- static const uint8_t add_advertising_param_connectable[] = {
- 0x01, /* adv instance */
- 0x01, 0x00, 0x00, 0x00, /* flags: connectable*/
- /* duration, timeout, adv/scan data: same as before */
- 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
- 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
- };
- /* add advertising with general discoverable flag */
- static const uint8_t add_advertising_param_general_discov[] = {
- 0x01, /* adv instance */
- 0x02, 0x00, 0x00, 0x00, /* flags: general discoverable*/
- /* duration, timeout, adv/scan data: same as before */
- 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
- 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
- };
- /* add advertising with limited discoverable flag */
- static const uint8_t add_advertising_param_limited_discov[] = {
- 0x01, /* adv instance */
- 0x04, 0x00, 0x00, 0x00, /* flags: limited discoverable */
- /* duration, timeout, adv/scan data: same as before */
- 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
- 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
- };
- /* add advertising with managed flags */
- static const uint8_t add_advertising_param_managed[] = {
- 0x01, /* adv instance */
- 0x08, 0x00, 0x00, 0x00, /* flags: managed flags */
- /* duration, timeout, adv/scan data: same as before */
- 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
- 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
- };
- /* add advertising with tx power flag */
- static const uint8_t add_advertising_param_txpwr[] = {
- 0x01, /* adv instance */
- 0x10, 0x00, 0x00, 0x00, /* flags: tx power */
- /* duration, timeout, adv/scan data: same as before */
- 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
- 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
- };
- /* add advertising command for a second instance */
- static const uint8_t add_advertising_param_test2[] = {
- 0x02, /* adv instance */
- 0x00, 0x00, 0x00, 0x00, /* flags: none */
- 0x00, 0x00, /* duration: default */
- 0x01, 0x00, /* timeout: 1 second */
- 0x07, /* adv data len */
- 0x00, /* scan rsp len */
- /* adv data: */
- 0x06, /* AD len */
- 0x08, /* AD type: shortened local name */
- 0x74, 0x65, 0x73, 0x74, 0x32, /* "test2" */
- };
- static const uint8_t advertising_instance1_param[] = {
- 0x01,
- };
- static const uint8_t advertising_instance2_param[] = {
- 0x02,
- };
- static const uint8_t set_adv_data_uuid[] = {
- /* adv data len */
- 0x09,
- /* advertise heart rate monitor and manufacturer specific data */
- 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
- /* padding */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00,
- };
- static const uint8_t set_adv_data_test1[] = {
- 0x07, /* adv data len */
- 0x06, /* AD len */
- 0x08, /* AD type: shortened local name */
- 0x74, 0x65, 0x73, 0x74, 0x31, /* "test1" */
- /* padding */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- };
- static const uint8_t set_adv_data_test2[] = {
- 0x07, /* adv data len */
- 0x06, /* AD len */
- 0x08, /* AD type: shortened local name */
- 0x74, 0x65, 0x73, 0x74, 0x32, /* "test2" */
- /* padding */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- };
- static const uint8_t set_adv_data_txpwr[] = {
- 0x03, /* adv data len */
- 0x02, /* AD len */
- 0x0a, /* AD type: tx power */
- 0x00, /* tx power */
- /* padding */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- };
- static const uint8_t set_adv_data_general_discov[] = {
- 0x0c, /* adv data len */
- 0x02, /* AD len */
- 0x01, /* AD type: flags */
- 0x02, /* general discoverable */
- 0x03, /* AD len */
- 0x02, /* AD type: some 16bit service class UUIDs */
- 0x0d, 0x18, /* heart rate monitor */
- 0x04, /* AD len */
- 0xff, /* AD type: manufacturer specific data */
- 0x01, 0x02, 0x03, /* custom advertising data */
- /* padding */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- };
- static const uint8_t set_adv_data_limited_discov[] = {
- 0x0c, /* adv data len */
- 0x02, /* AD len */
- 0x01, /* AD type: flags */
- 0x01, /* limited discoverable */
- /* rest: same as before */
- 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
- /* padding */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- };
- static const uint8_t set_adv_data_uuid_txpwr[] = {
- 0x0c, /* adv data len */
- 0x03, /* AD len */
- 0x02, /* AD type: some 16bit service class UUIDs */
- 0x0d, 0x18, /* heart rate monitor */
- 0x04, /* AD len */
- 0xff, /* AD type: manufacturer specific data */
- 0x01, 0x02, 0x03, /* custom advertising data */
- 0x02, /* AD len */
- 0x0a, /* AD type: tx power */
- 0x00, /* tx power */
- /* padding */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- };
- static const uint8_t set_scan_rsp_uuid[] = {
- 0x0a, /* scan rsp data len */
- 0x03, /* AD len */
- 0x19, /* AD type: external appearance */
- 0x40, 0x03, /* some custom appearance */
- 0x05, /* AD len */
- 0x03, /* AD type: all 16 bit service class UUIDs */
- 0x0d, 0x18, 0x0f, 0x18, /* heart rate monitor, battery service */
- /* padding */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00,
- };
- static const uint8_t add_advertising_invalid_param_1[] = {
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
- 0x03, 0x03, 0x0d, 0x18,
- 0x19, 0xff, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
- 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
- 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e,
- };
- static const uint8_t add_advertising_invalid_param_2[] = {
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
- 0x04, 0x03, 0x0d, 0x18,
- 0x04, 0xff, 0x01, 0x02, 0x03,
- };
- static const uint8_t add_advertising_invalid_param_3[] = {
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
- 0x03, 0x03, 0x0d, 0x18,
- 0x02, 0xff, 0x01, 0x02, 0x03,
- };
- static const uint8_t add_advertising_invalid_param_4[] = {
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
- 0x03, 0x03, 0x0d, 0x18,
- 0x05, 0xff, 0x01, 0x02, 0x03,
- };
- static const uint8_t add_advertising_invalid_param_5[] = {
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D, 0x00,
- 0x03, 0x03, 0x0d, 0x18,
- 0x19, 0xff, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
- 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
- 0x15, 0x16, 0x17, 0x18,
- };
- static const uint8_t add_advertising_invalid_param_6[] = {
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
- 0x03, 0x03, 0x0d, 0x18,
- 0x19, 0xff, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
- 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
- 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e,
- };
- static const uint8_t add_advertising_invalid_param_7[] = {
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
- 0x04, 0x03, 0x0d, 0x18,
- 0x04, 0xff, 0x01, 0x02, 0x03,
- };
- static const uint8_t add_advertising_invalid_param_8[] = {
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
- 0x03, 0x03, 0x0d, 0x18,
- 0x02, 0xff, 0x01, 0x02, 0x03,
- };
- static const uint8_t add_advertising_invalid_param_9[] = {
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09,
- 0x03, 0x03, 0x0d, 0x18,
- 0x05, 0xff, 0x01, 0x02, 0x03,
- };
- static const uint8_t add_advertising_invalid_param_10[] = {
- 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1D,
- 0x03, 0x03, 0x0d, 0x18,
- 0x19, 0xff, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
- 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
- 0x15, 0x16, 0x17, 0x18,
- };
- static const struct generic_data add_advertising_fail_1 = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_uuid,
- .send_len = sizeof(add_advertising_param_uuid),
- .expect_status = MGMT_STATUS_REJECTED,
- };
- static const struct generic_data add_advertising_fail_2 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_invalid_param_1,
- .send_len = sizeof(add_advertising_invalid_param_1),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data add_advertising_fail_3 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_invalid_param_2,
- .send_len = sizeof(add_advertising_invalid_param_2),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data add_advertising_fail_4 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_invalid_param_3,
- .send_len = sizeof(add_advertising_invalid_param_3),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data add_advertising_fail_5 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_invalid_param_4,
- .send_len = sizeof(add_advertising_invalid_param_4),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data add_advertising_fail_6 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_invalid_param_5,
- .send_len = sizeof(add_advertising_invalid_param_5),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data add_advertising_fail_7 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_invalid_param_6,
- .send_len = sizeof(add_advertising_invalid_param_6),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data add_advertising_fail_8 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_invalid_param_7,
- .send_len = sizeof(add_advertising_invalid_param_7),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data add_advertising_fail_9 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_invalid_param_8,
- .send_len = sizeof(add_advertising_invalid_param_8),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data add_advertising_fail_10 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_invalid_param_9,
- .send_len = sizeof(add_advertising_invalid_param_9),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data add_advertising_fail_11 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_invalid_param_10,
- .send_len = sizeof(add_advertising_invalid_param_10),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data add_advertising_fail_12 = {
- .setup_settings = settings_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_timeout,
- .send_len = sizeof(add_advertising_param_timeout),
- .expect_status = MGMT_STATUS_REJECTED,
- };
- static const struct generic_data add_advertising_success_1 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_uuid,
- .send_len = sizeof(add_advertising_param_uuid),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_alt_ev = MGMT_EV_ADVERTISING_ADDED,
- .expect_alt_ev_param = advertising_instance1_param,
- .expect_alt_ev_len = sizeof(advertising_instance1_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
- .expect_hci_param = set_adv_data_uuid,
- .expect_hci_len = sizeof(set_adv_data_uuid),
- };
- static const char set_powered_adv_instance_settings_param[] = {
- 0x81, 0x02, 0x00, 0x00,
- };
- static const struct generic_data add_advertising_success_pwron_data = {
- .send_opcode = MGMT_OP_SET_POWERED,
- .send_param = set_powered_on_param,
- .send_len = sizeof(set_powered_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_powered_adv_instance_settings_param,
- .expect_len = sizeof(set_powered_adv_instance_settings_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
- .expect_hci_param = set_adv_data_test1,
- .expect_hci_len = sizeof(set_adv_data_test1),
- };
- static const struct generic_data add_advertising_success_pwron_enabled = {
- .send_opcode = MGMT_OP_SET_POWERED,
- .send_param = set_powered_on_param,
- .send_len = sizeof(set_powered_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_powered_adv_instance_settings_param,
- .expect_len = sizeof(set_powered_adv_instance_settings_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_ENABLE,
- .expect_hci_param = set_adv_on_set_adv_enable_param,
- .expect_hci_len = sizeof(set_adv_on_set_adv_enable_param),
- };
- static const struct generic_data add_advertising_success_4 = {
- .send_opcode = MGMT_OP_SET_ADVERTISING,
- .send_param = set_adv_on_param,
- .send_len = sizeof(set_adv_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_adv_settings_param_2,
- .expect_len = sizeof(set_adv_settings_param_2),
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
- .expect_hci_param = set_adv_data_txpwr,
- .expect_hci_len = sizeof(set_adv_data_txpwr),
- };
- static const struct generic_data add_advertising_success_5 = {
- .send_opcode = MGMT_OP_SET_ADVERTISING,
- .send_param = set_adv_off_param,
- .send_len = sizeof(set_adv_off_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_powered_adv_instance_settings_param,
- .expect_len = sizeof(set_powered_adv_instance_settings_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
- .expect_hci_param = set_adv_data_test1,
- .expect_hci_len = sizeof(set_adv_data_test1),
- };
- static const struct generic_data add_advertising_success_6 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_scanrsp,
- .send_len = sizeof(add_advertising_param_scanrsp),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_alt_ev = MGMT_EV_ADVERTISING_ADDED,
- .expect_alt_ev_param = advertising_instance1_param,
- .expect_alt_ev_len = sizeof(advertising_instance1_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
- .expect_hci_param = set_adv_data_uuid,
- .expect_hci_len = sizeof(set_adv_data_uuid),
- };
- static const struct generic_data add_advertising_success_7 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_scanrsp,
- .send_len = sizeof(add_advertising_param_scanrsp),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_alt_ev = MGMT_EV_ADVERTISING_ADDED,
- .expect_alt_ev_param = advertising_instance1_param,
- .expect_alt_ev_len = sizeof(advertising_instance1_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_RSP_DATA,
- .expect_hci_param = set_scan_rsp_uuid,
- .expect_hci_len = sizeof(set_scan_rsp_uuid),
- };
- static const struct generic_data add_advertising_success_8 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_connectable,
- .send_len = sizeof(add_advertising_param_connectable),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
- .expect_hci_param = set_connectable_on_adv_param,
- .expect_hci_len = sizeof(set_connectable_on_adv_param),
- };
- static const struct generic_data add_advertising_success_9 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_general_discov,
- .send_len = sizeof(add_advertising_param_general_discov),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
- .expect_hci_param = set_adv_data_general_discov,
- .expect_hci_len = sizeof(set_adv_data_general_discov),
- };
- static const struct generic_data add_advertising_success_10 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_limited_discov,
- .send_len = sizeof(add_advertising_param_limited_discov),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
- .expect_hci_param = set_adv_data_limited_discov,
- .expect_hci_len = sizeof(set_adv_data_limited_discov),
- };
- static const struct generic_data add_advertising_success_11 = {
- .setup_settings = settings_powered_le_discoverable,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_managed,
- .send_len = sizeof(add_advertising_param_managed),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
- .expect_hci_param = set_adv_data_general_discov,
- .expect_hci_len = sizeof(set_adv_data_general_discov),
- };
- static const struct generic_data add_advertising_success_12 = {
- .setup_settings = settings_powered_le_discoverable,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_txpwr,
- .send_len = sizeof(add_advertising_param_txpwr),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
- .expect_hci_param = set_adv_data_uuid_txpwr,
- .expect_hci_len = sizeof(set_adv_data_uuid_txpwr),
- };
- static uint16_t settings_powered_le_connectable[] = {
- MGMT_OP_SET_POWERED,
- MGMT_OP_SET_LE,
- MGMT_OP_SET_CONNECTABLE, 0 };
- static const struct generic_data add_advertising_success_13 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_scanrsp,
- .send_len = sizeof(add_advertising_param_scanrsp),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
- .expect_hci_param = set_connectable_off_scan_adv_param,
- .expect_hci_len = sizeof(set_connectable_off_scan_adv_param),
- .expect_hci_param_check_func = set_connectable_off_scan_adv_check_func
- };
- static uint8_t set_connectable_off_adv_param[] = {
- 0x64, 0x00, /* min_interval */
- 0x96, 0x00, /* max_interval */
- 0x03, /* type */
- 0x01, /* own_addr_type */
- 0x00, /* direct_addr_type */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* direct_addr */
- 0x07, /* channel_map */
- 0x00, /* filter_policy */
- };
- static int set_connectable_off_adv_check_func(const void *param,
- uint16_t length)
- {
- const uint8_t *received = param;
- uint8_t *expected = set_connectable_off_adv_param;
- /* Compare the received param with expected param, but ignore the
- * min_internal and max_interval since these values are turned often
- * in the kernel and we don't want to update the expected value every
- * time.
- */
- return memcmp(&received[4], &expected[4], length - 4);
- }
- static const struct generic_data add_advertising_success_14 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_uuid,
- .send_len = sizeof(add_advertising_param_uuid),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
- .expect_hci_param = set_connectable_off_adv_param,
- .expect_hci_len = sizeof(set_connectable_off_adv_param),
- .expect_hci_param_check_func = set_connectable_off_adv_check_func
- };
- static const struct generic_data add_advertising_success_15 = {
- .setup_settings = settings_powered_le_connectable,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_uuid,
- .send_len = sizeof(add_advertising_param_uuid),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
- .expect_hci_param = set_connectable_on_adv_param,
- .expect_hci_len = sizeof(set_connectable_on_adv_param),
- };
- static const char set_connectable_settings_param_3[] = {
- 0x83, 0x02, 0x00, 0x00 };
- static const struct generic_data add_advertising_success_16 = {
- .send_opcode = MGMT_OP_SET_CONNECTABLE,
- .send_param = set_connectable_on_param,
- .send_len = sizeof(set_connectable_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_connectable_settings_param_3,
- .expect_len = sizeof(set_connectable_settings_param_3),
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
- .expect_hci_param = set_connectable_on_adv_param,
- .expect_hci_len = sizeof(set_connectable_on_adv_param),
- };
- static const struct generic_data add_advertising_success_17 = {
- .send_opcode = MGMT_OP_SET_CONNECTABLE,
- .send_param = set_connectable_off_param,
- .send_len = sizeof(set_connectable_off_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_le_settings_param_2,
- .expect_len = sizeof(set_le_settings_param_2),
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_PARAMETERS,
- .expect_hci_param = set_connectable_off_adv_param,
- .expect_hci_len = sizeof(set_connectable_off_adv_param),
- .expect_hci_param_check_func = set_connectable_off_adv_check_func
- };
- static const char set_powered_off_le_settings_param[] = {
- 0x80, 0x02, 0x00, 0x00
- };
- static const struct generic_data add_advertising_power_off = {
- .send_opcode = MGMT_OP_SET_POWERED,
- .send_param = set_powered_off_param,
- .send_len = sizeof(set_powered_off_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_powered_off_le_settings_param,
- .expect_len = sizeof(set_powered_off_le_settings_param),
- .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
- .expect_alt_ev_param = advertising_instance1_param,
- .expect_alt_ev_len = sizeof(advertising_instance1_param),
- };
- static const char set_le_settings_param_off[] = { 0x81, 0x00, 0x00, 0x00 };
- static const struct generic_data add_advertising_le_off = {
- .send_opcode = MGMT_OP_SET_LE,
- .send_param = set_le_off_param,
- .send_len = sizeof(set_le_off_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_le_settings_param_off,
- .expect_len = sizeof(set_le_settings_param_off),
- .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
- .expect_alt_ev_param = advertising_instance1_param,
- .expect_alt_ev_len = sizeof(advertising_instance1_param),
- };
- static const struct generic_data add_advertising_success_18 = {
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_uuid,
- .send_len = sizeof(add_advertising_param_uuid),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
- .expect_hci_param = set_adv_data_uuid,
- .expect_hci_len = sizeof(set_adv_data_uuid),
- };
- static const struct generic_data add_advertising_timeout_expired = {
- .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
- .expect_alt_ev_param = advertising_instance1_param,
- .expect_alt_ev_len = sizeof(advertising_instance1_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_ENABLE,
- .expect_hci_param = set_adv_on_set_adv_disable_param,
- .expect_hci_len = sizeof(set_adv_on_set_adv_disable_param),
- };
- static const uint8_t remove_advertising_param_1[] = {
- 0x01,
- };
- static const uint8_t remove_advertising_param_2[] = {
- 0x00,
- };
- static const struct generic_data remove_advertising_fail_1 = {
- .send_opcode = MGMT_OP_REMOVE_ADVERTISING,
- .send_param = remove_advertising_param_1,
- .send_len = sizeof(remove_advertising_param_1),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data remove_advertising_success_1 = {
- .send_opcode = MGMT_OP_REMOVE_ADVERTISING,
- .send_param = remove_advertising_param_1,
- .send_len = sizeof(remove_advertising_param_1),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = remove_advertising_param_1,
- .expect_len = sizeof(remove_advertising_param_1),
- .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
- .expect_alt_ev_param = advertising_instance1_param,
- .expect_alt_ev_len = sizeof(advertising_instance1_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_ENABLE,
- .expect_hci_param = set_adv_off_param,
- .expect_hci_len = sizeof(set_adv_off_param),
- };
- static const struct generic_data remove_advertising_success_2 = {
- .send_opcode = MGMT_OP_REMOVE_ADVERTISING,
- .send_param = remove_advertising_param_2,
- .send_len = sizeof(remove_advertising_param_2),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = remove_advertising_param_2,
- .expect_len = sizeof(remove_advertising_param_2),
- .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
- .expect_alt_ev_param = advertising_instance1_param,
- .expect_alt_ev_len = sizeof(advertising_instance1_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_ENABLE,
- .expect_hci_param = set_adv_off_param,
- .expect_hci_len = sizeof(set_adv_off_param),
- };
- static const struct generic_data multi_advertising_switch = {
- .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
- .expect_alt_ev_param = advertising_instance1_param,
- .expect_alt_ev_len = sizeof(advertising_instance1_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
- .expect_hci_param = set_adv_data_test2,
- .expect_hci_len = sizeof(set_adv_data_test2),
- };
- static const struct generic_data multi_advertising_add_second = {
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_test2,
- .send_len = sizeof(add_advertising_param_test2),
- .expect_param = advertising_instance2_param,
- .expect_len = sizeof(advertising_instance2_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_alt_ev = MGMT_EV_ADVERTISING_ADDED,
- .expect_alt_ev_param = advertising_instance2_param,
- .expect_alt_ev_len = sizeof(advertising_instance2_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_ADV_DATA,
- .expect_hci_param = set_adv_data_test2,
- .expect_hci_len = sizeof(set_adv_data_test2),
- };
- /* based on G-Tag ADV_DATA */
- static const uint8_t adv_data_invalid_significant_len[] = { 0x02, 0x01, 0x06,
- 0x0d, 0xff, 0x80, 0x01, 0x02, 0x15, 0x12, 0x34, 0x80, 0x91,
- 0xd0, 0xf2, 0xbb, 0xc5, 0x03, 0x02, 0x0f, 0x18, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
- static const char device_found_valid[] = { 0x00, 0x00, 0x01, 0x01, 0xaa, 0x00,
- 0x01, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x02, 0x01,
- 0x06, 0x0d, 0xff, 0x80, 0x01, 0x02, 0x15, 0x12, 0x34, 0x80,
- 0x91, 0xd0, 0xf2, 0xbb, 0xc5, 0x03, 0x02, 0x0f, 0x18 };
- static const struct generic_data device_found_gtag = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_START_DISCOVERY,
- .send_param = start_discovery_le_param,
- .send_len = sizeof(start_discovery_le_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = start_discovery_le_param,
- .expect_len = sizeof(start_discovery_le_param),
- .expect_alt_ev = MGMT_EV_DEVICE_FOUND,
- .expect_alt_ev_param = device_found_valid,
- .expect_alt_ev_len = sizeof(device_found_valid),
- .set_adv = true,
- .adv_data_len = sizeof(adv_data_invalid_significant_len),
- .adv_data = adv_data_invalid_significant_len,
- };
- static const uint8_t adv_data_invalid_field_len[] = { 0x02, 0x01, 0x01,
- 0x05, 0x09, 0x74, 0x65, 0x73, 0x74,
- 0xa0, 0xff, 0x01, 0x02, 0x03, 0x04, 0x05};
- static const char device_found_valid2[] = { 0x00, 0x00, 0x01, 0x01, 0xaa, 0x00,
- 0x01, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x02, 0x01,
- 0x01, 0x05, 0x09, 0x74, 0x65, 0x73, 0x74};
- static const struct generic_data device_found_invalid_field = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_START_DISCOVERY,
- .send_param = start_discovery_le_param,
- .send_len = sizeof(start_discovery_le_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = start_discovery_le_param,
- .expect_len = sizeof(start_discovery_le_param),
- .expect_alt_ev = MGMT_EV_DEVICE_FOUND,
- .expect_alt_ev_param = device_found_valid2,
- .expect_alt_ev_len = sizeof(device_found_valid2),
- .set_adv = true,
- .adv_data_len = sizeof(adv_data_invalid_field_len),
- .adv_data = adv_data_invalid_field_len,
- };
- static const struct generic_data read_local_oob_not_powered_test = {
- .send_opcode = MGMT_OP_READ_LOCAL_OOB_DATA,
- .expect_status = MGMT_STATUS_NOT_POWERED,
- };
- static const struct generic_data read_local_oob_invalid_param_test = {
- .send_opcode = MGMT_OP_READ_LOCAL_OOB_DATA,
- .send_param = dummy_data,
- .send_len = sizeof(dummy_data),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data read_local_oob_invalid_index_test = {
- .send_index_none = true,
- .send_opcode = MGMT_OP_READ_LOCAL_OOB_DATA,
- .expect_status = MGMT_STATUS_INVALID_INDEX,
- };
- static const struct generic_data read_local_oob_legacy_pairing_test = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_READ_LOCAL_OOB_DATA,
- .expect_status = MGMT_STATUS_NOT_SUPPORTED,
- };
- static const struct generic_data read_local_oob_success_ssp_test = {
- .setup_settings = settings_powered_ssp,
- .send_opcode = MGMT_OP_READ_LOCAL_OOB_DATA,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_ignore_param = true,
- .expect_hci_command = BT_HCI_CMD_READ_LOCAL_OOB_DATA,
- };
- static const struct generic_data read_local_oob_success_sc_test = {
- .setup_settings = settings_powered_sc,
- .send_opcode = MGMT_OP_READ_LOCAL_OOB_DATA,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_ignore_param = true,
- .expect_hci_command = BT_HCI_CMD_READ_LOCAL_OOB_EXT_DATA,
- };
- static const uint8_t oob_type_bredr[] = { 0x01 };
- static const struct generic_data read_local_oob_ext_invalid_index_test = {
- .send_index_none = true,
- .send_opcode = MGMT_OP_READ_LOCAL_OOB_EXT_DATA,
- .send_param = oob_type_bredr,
- .send_len = sizeof(oob_type_bredr),
- .expect_status = MGMT_STATUS_INVALID_INDEX,
- };
- static const struct generic_data read_local_oob_ext_legacy_pairing_test = {
- .setup_settings = settings_powered,
- .send_opcode = MGMT_OP_READ_LOCAL_OOB_EXT_DATA,
- .send_param = oob_type_bredr,
- .send_len = sizeof(oob_type_bredr),
- .expect_ignore_param = true,
- .expect_status = MGMT_STATUS_NOT_SUPPORTED,
- };
- static const struct generic_data read_local_oob_ext_success_ssp_test = {
- .setup_settings = settings_powered_ssp,
- .send_opcode = MGMT_OP_READ_LOCAL_OOB_EXT_DATA,
- .send_param = oob_type_bredr,
- .send_len = sizeof(oob_type_bredr),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_ignore_param = true,
- .expect_hci_command = BT_HCI_CMD_READ_LOCAL_OOB_DATA,
- };
- static const struct generic_data read_local_oob_ext_success_sc_test = {
- .setup_settings = settings_powered_sc,
- .send_opcode = MGMT_OP_READ_LOCAL_OOB_EXT_DATA,
- .send_param = oob_type_bredr,
- .send_len = sizeof(oob_type_bredr),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_ignore_param = true,
- .expect_hci_command = BT_HCI_CMD_READ_LOCAL_OOB_EXT_DATA,
- };
- static const uint8_t le_states_conn_peripheral_adv_connectable[] = {
- 0x00, 0x00, 0x20, 0x00, 0x40, 0x00, 0x00, 0x00};
- static const uint8_t le_states_conn_peripheral_adv_non_connectable[] = {
- 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00};
- static const uint8_t le_states_conn_central_adv_connectable[] = {
- 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00};
- static const uint8_t le_states_conn_central_adv_non_connectable[] = {
- 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00};
- static const struct generic_data conn_peripheral_adv_connectable_test = {
- .setup_le_states = true,
- .le_states = le_states_conn_peripheral_adv_connectable,
- .setup_settings = settings_powered_le,
- .client_enable_le = true
- };
- static const struct generic_data conn_peripheral_adv_non_connectable_test = {
- .setup_le_states = true,
- .le_states = le_states_conn_peripheral_adv_non_connectable,
- .setup_settings = settings_powered_le,
- .client_enable_le = true
- };
- static const struct generic_data conn_central_adv_connectable_test = {
- .setup_le_states = true,
- .le_states = le_states_conn_central_adv_connectable,
- .setup_settings = settings_powered_le,
- .client_enable_le = true,
- .client_enable_adv = 1
- };
- static const struct generic_data conn_central_adv_non_connectable_test = {
- .setup_le_states = true,
- .le_states = le_states_conn_central_adv_non_connectable,
- .setup_settings = settings_powered_le,
- .client_enable_le = true,
- .client_enable_adv = 1
- };
- static const char ext_ctrl_info1[] = {
- 0x00, 0x00, 0x00, 0x01, 0xaa, 0x00, /* btaddr */
- 0x09, /* version */
- 0x3f, 0x00, /* manufacturer */
- 0xff, 0xbf, 0x01, 0x00, /* supported settings */
- 0x80, 0x00, 0x00, 0x00, /* current settings */
- 0x09, 0x00, /* eir length */
- 0x04, /* dev class length */
- 0x0d, /* dev class info */
- 0x00, /* minor */
- 0x00, /* major */
- 0x00, /* service classes */
- 0x01, /* complete name data length */
- 0x09, /* complete name flag */
- 0x01, /* short name data length */
- 0x08, /* short name flag */
- };
- static const struct generic_data read_ext_ctrl_info1 = {
- .send_opcode = MGMT_OP_READ_EXT_INFO,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = ext_ctrl_info1,
- .expect_len = sizeof(ext_ctrl_info1),
- };
- static const char set_dev_class1[] = { 0x03, 0xe0 };
- static const struct setup_mgmt_cmd set_dev_class_cmd_arr1[] = {
- {
- .send_opcode = MGMT_OP_SET_DEV_CLASS,
- .send_param = set_dev_class1,
- .send_len = sizeof(set_dev_class1),
- },
- {
- .send_opcode = MGMT_OP_ADD_UUID,
- .send_param = add_spp_uuid_param,
- .send_len = sizeof(add_spp_uuid_param),
- },
- { /* last element should always have opcode 0x00 */
- .send_opcode = 0x00,
- .send_param = NULL,
- .send_len = 0,
- }
- };
- static const char ext_ctrl_info2[] = {
- 0x00, 0x00, 0x00, 0x01, 0xaa, 0x00, /* btaddr */
- 0x09, /* version */
- 0x3f, 0x00, /* manufacturer */
- 0xff, 0xbf, 0x01, 0x00, /* supported settings */
- 0x81, 0x02, 0x00, 0x00, /* current settings */
- 0x0D, 0x00, /* eir length */
- 0x04, /* dev class length */
- 0x0d, /* dev class info */
- 0xe0, /* minor */
- 0x03, /* major */
- 0x00, /* service classes */
- 0x03, /* appearance length */
- 0x19, /* EIR_APPEARANCE */
- 0x00, /* Appearance value */
- 0x00,
- 0x01, /* complete name data length */
- 0x09, /* complete name flag */
- 0x01, /* short name data length */
- 0x08, /* short name flag */
- };
- static const struct generic_data read_ext_ctrl_info2 = {
- .setup_settings = settings_powered_le,
- .setup_mgmt_cmd_arr = set_dev_class_cmd_arr1,
- .send_opcode = MGMT_OP_READ_EXT_INFO,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = ext_ctrl_info2,
- .expect_len = sizeof(ext_ctrl_info2),
- };
- static const char ext_ctrl_info3[] = {
- 0x00, 0x00, 0x00, 0x01, 0xaa, 0x00, /* btaddr */
- 0x09, /* version */
- 0x3f, 0x00, /* manufacturer */
- 0xff, 0xbf, 0x01, 0x00, /* supported settings */
- 0x80, 0x02, 0x00, 0x00, /* current settings */
- 0x16, 0x00, /* eir length */
- 0x04, /* dev class length */
- 0x0d, /* dev class info */
- 0x00, /* minor */
- 0x00, /* major */
- 0x00, /* service classes */
- 0x03, /* appearance length */
- 0x19, /* EIR_APPEARANCE */
- 0x00, /* Appearance value */
- 0x00,
- 0x0A, /* Local name length */
- 0x09, /* Complete name */
- 0x54, 0x65, 0x73, 0x74,
- 0x20, 0x6E, 0x61, 0x6D, 0x65, /* "Test name" */
- 0x01, /* short name data length */
- 0x08, /* short name flag */
- };
- static const struct generic_data read_ext_ctrl_info3 = {
- .setup_settings = settings_le,
- .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
- .setup_send_param = set_local_name_param,
- .setup_send_len = sizeof(set_local_name_param),
- .send_opcode = MGMT_OP_READ_EXT_INFO,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = ext_ctrl_info3,
- .expect_len = sizeof(ext_ctrl_info3),
- };
- static const char ext_ctrl_info4[] = {
- 0x00, 0x00, 0x00, 0x01, 0xaa, 0x00, /* btaddr */
- 0x09, /* version */
- 0x3f, 0x00, /* manufacturer */
- 0xff, 0xbf, 0x01, 0x00, /* supported settings */
- 0x80, 0x02, 0x00, 0x00, /* current settings */
- 0x1a, 0x00, /* eir length */
- 0x04, /* dev class length */
- 0x0d, /* dev class info */
- 0x00, /* minor */
- 0x00, /* major */
- 0x00, /* service classes */
- 0x03, /* appearance length */
- 0x19, /* EIR_APPEARANCE */
- 0x00, /* Appearance value */
- 0x00,
- 0x0A, /* Complete Local name len */
- 0x09, /* Complete name */
- 0x54, 0x65, 0x73, 0x74,
- 0x20, 0x6E, 0x61, 0x6D, 0x65, /* "Test name" */
- 0x05, /* Short Local name len */
- 0x08, /* Short name */
- 0x54, 0x65, 0x73, 0x74, /* "Test" */
- };
- static const struct generic_data read_ext_ctrl_info4 = {
- .setup_settings = settings_le,
- .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
- .setup_send_param = &set_local_name_cp,
- .setup_send_len = sizeof(set_local_name_cp),
- .send_opcode = MGMT_OP_READ_EXT_INFO,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = ext_ctrl_info4,
- .expect_len = sizeof(ext_ctrl_info4),
- };
- static const struct setup_mgmt_cmd set_dev_class_cmd_arr2[] = {
- {
- .send_opcode = MGMT_OP_SET_DEV_CLASS,
- .send_param = set_dev_class1,
- .send_len = sizeof(set_dev_class1),
- },
- {
- .send_opcode = MGMT_OP_ADD_UUID,
- .send_param = add_spp_uuid_param,
- .send_len = sizeof(add_spp_uuid_param),
- },
- {
- .send_opcode = MGMT_OP_SET_LOCAL_NAME,
- .send_param = &set_local_name_cp,
- .send_len = sizeof(set_local_name_cp),
- },
- { /* last element should always have opcode 0x00 */
- .send_opcode = 0x00,
- .send_param = NULL,
- .send_len = 0,
- }
- };
- static const char ext_ctrl_info5[] = {
- 0x00, 0x00, 0x00, 0x01, 0xaa, 0x00, /* btaddr */
- 0x09, /* version */
- 0x3f, 0x00, /* manufacturer */
- 0xff, 0xbf, 0x01, 0x00, /* supported settings */
- 0x81, 0x02, 0x00, 0x00, /* current settings */
- 0x1a, 0x00, /* eir len */
- 0x04, /* dev class len */
- 0x0d, /* dev class info */
- 0xe0, /* minor */
- 0x03, /* major */
- 0x00, /* service classes */
- 0x03, /* appearance length */
- 0x19, /* EIR_APPEARANCE */
- 0x00, /* Appearance value */
- 0x00,
- 0x0A, /* Complete Local name len */
- 0x09, /* Complete name */
- 0x54, 0x65, 0x73, 0x74,
- 0x20, 0x6E, 0x61, 0x6D, 0x65, /* "Test name" */
- 0x05, /* Short Local name len */
- 0x08, /* Short name */
- 0x54, 0x65, 0x73, 0x74, /* "Test" */
- };
- static const struct generic_data read_ext_ctrl_info5 = {
- .setup_settings = settings_powered_le,
- .setup_mgmt_cmd_arr = set_dev_class_cmd_arr2,
- .send_opcode = MGMT_OP_READ_EXT_INFO,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = ext_ctrl_info5,
- .expect_len = sizeof(ext_ctrl_info5),
- };
- static const struct generic_data read_controller_cap_invalid_param_test = {
- .send_opcode = MGMT_OP_READ_CONTROLLER_CAP,
- .send_param = dummy_data,
- .send_len = sizeof(dummy_data),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data read_controller_cap_success = {
- .send_opcode = MGMT_OP_READ_CONTROLLER_CAP,
- .expect_ignore_param = true,
- .expect_status = MGMT_STATUS_SUCCESS,
- };
- static const char ext_adv_params_valid[] = {
- 0x01, /* instance */
- 0x00, 0xC0, 0x00, 0x00, /* flags, use tx power and intervals */
- 0x00, 0x00, /* duration */
- 0x00, 0x00, /* timeout */
- 0xA0, 0x00, 0x00, 0x00, /* min_interval */
- 0xA0, 0x00, 0x00, 0x00, /* max_interval */
- 0x7f, /* tx_power */
- };
- static const char ext_adv_hci_params_valid[] = {
- 0x01, /* handle */
- 0x10, 0x00, /* evt_properties */
- 0xA0, 0x00, 0x00, /* min_interval */
- 0xA0, 0x00, 0x00, /* max_interval */
- 0x07, /* channel_map */
- 0x01, /* own_addr_type */
- 0x00, /* peer_addr_type */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
- 0x00, /* filter_policy */
- 0x7f, /* tx_power */
- 0x01, /* primary_phy */
- 0x00, /* secondary_max_skip */
- 0x01, /* secondary_phy */
- 0x00, /* sid */
- 0x00, /* notif_enable */
- };
- static const char ext_adv_params_mgmt_rsp_valid_50[] = {
- 0x01, /* instance */
- 0x00, /* tx_power defaults to 0 on BT5 platform*/
- 0x1f, /* max_adv_data_len */
- 0x1f, /* max_scan_rsp_len */
- };
- static const char ext_adv_params_mgmt_rsp_valid[] = {
- 0x01, /* instance */
- 0x7f, /* tx_power */
- 0x1f, /* max_adv_data_len */
- 0x1f, /* max_scan_rsp_len */
- };
- static const char ext_adv_data_mgmt_rsp_valid[] = {
- 0x01, /* instance */
- };
- static const uint8_t ext_adv_data_valid[] = {
- 0x01, /* instance */
- 0x04, /* Ad data len */
- 0x06, /* Scan response data len */
- 0x03, /* Section length */
- 0x19, /* GAP Appearance */
- 0x01,
- 0x23,
- 0x05, /* Section length */
- 0x08, /* ad type Short Name */
- 't',
- 'e',
- 's',
- 't',
- };
- static const char ext_adv_hci_ad_data_valid[] = {
- 0x01, /* handle */
- 0x03, /* operation */
- 0x01, /* minimize fragmentation */
- 0x04, /* data length */
- 0x03, /* Section length */
- 0x19, /* GAP Appearance */
- 0x01,
- 0x23,
- };
- static const char ext_adv_hci_scan_rsp_data_valid[] = {
- 0x01, /* handle */
- 0x03, /* operation */
- 0x01, /* minimize fragmentation */
- 0x06,
- 0x05, /* Section length */
- 0x08, /* ad type Short Name */
- 't',
- 'e',
- 's',
- 't',
- };
- static const uint8_t ext_adv_data_invalid[] = {
- 0x01, /* instance */
- 0x04, /* Ad data len */
- 0x06, /* Scan response data len */
- 0x03, /* Section length */
- 0x19, /* GAP Appearance */
- 0x01,
- 0x23,
- 0x07, /* Section length purposefully two octets too long */
- 0x08, /* ad type Short Name */
- 't',
- 'e',
- 's',
- 't',
- };
- static const struct generic_data adv_params_fail_unpowered = {
- .setup_settings = settings_le, /* Unpowered */
- .send_opcode = MGMT_OP_ADD_EXT_ADV_PARAMS,
- .send_param = ext_adv_params_valid,
- .send_len = sizeof(ext_adv_params_valid),
- .expect_status = MGMT_STATUS_REJECTED,
- };
- static const struct generic_data adv_params_fail_invalid_params = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_EXT_ADV_PARAMS,
- .send_param = dummy_data,
- .send_len = sizeof(dummy_data),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data adv_params_success = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_EXT_ADV_PARAMS,
- .send_param = ext_adv_params_valid,
- .send_len = sizeof(ext_adv_params_valid),
- .expect_param = ext_adv_params_mgmt_rsp_valid,
- .expect_len = sizeof(ext_adv_params_mgmt_rsp_valid),
- .expect_status = MGMT_STATUS_SUCCESS,
- };
- static const struct generic_data adv_params_success_50 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_EXT_ADV_PARAMS,
- .send_param = ext_adv_params_valid,
- .send_len = sizeof(ext_adv_params_valid),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = ext_adv_params_mgmt_rsp_valid_50,
- .expect_len = sizeof(ext_adv_params_mgmt_rsp_valid_50),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
- .expect_hci_param = ext_adv_hci_params_valid,
- .expect_hci_len = sizeof(ext_adv_hci_params_valid),
- };
- static const struct generic_data adv_data_fail_no_params = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_EXT_ADV_DATA,
- .send_param = ext_adv_data_valid,
- .send_len = sizeof(ext_adv_data_valid),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data adv_data_success = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_EXT_ADV_DATA,
- .send_param = ext_adv_data_valid,
- .send_len = sizeof(ext_adv_data_valid),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = ext_adv_data_mgmt_rsp_valid,
- .expect_len = sizeof(ext_adv_data_mgmt_rsp_valid),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_DATA,
- .expect_hci_param = ext_adv_hci_ad_data_valid,
- .expect_hci_len = sizeof(ext_adv_hci_ad_data_valid),
- };
- static const struct generic_data adv_scan_rsp_success = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_EXT_ADV_DATA,
- .send_param = ext_adv_data_valid,
- .send_len = sizeof(ext_adv_data_valid),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = ext_adv_data_mgmt_rsp_valid,
- .expect_len = sizeof(ext_adv_data_mgmt_rsp_valid),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_RSP_DATA,
- .expect_hci_param = ext_adv_hci_scan_rsp_data_valid,
- .expect_hci_len = sizeof(ext_adv_hci_scan_rsp_data_valid),
- };
- static const struct generic_data adv_data_invalid_params = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_EXT_ADV_DATA,
- .send_param = ext_adv_data_invalid,
- .send_len = sizeof(ext_adv_data_invalid),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const uint8_t set_dev_id_param_success_1[] = {
- 0x01, /* Source - 0x0001 (Bluetooth SIG) */
- 0x00,
- 0x02, /* Vendor */
- 0x00,
- 0xcd, /* Product */
- 0xab,
- 0x34,
- 0x12, /* Version */
- };
- static const char write_eir_set_dev_id_success_1[241] = {
- 0x00, 0x02, 0x0a, 0x00, 0x09, 0x10, 0x01, 0x00,
- 0x02, 0x00, 0xcd, 0xab, 0x34, 0x12 };
- static const struct generic_data set_dev_id_success_1 = {
- .setup_settings = settings_powered_ssp,
- .send_opcode = MGMT_OP_SET_DEVICE_ID,
- .send_param = set_dev_id_param_success_1,
- .send_len = sizeof(set_dev_id_param_success_1),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
- .expect_hci_param = write_eir_set_dev_id_success_1,
- .expect_hci_len = sizeof(write_eir_set_dev_id_success_1),
- };
- static const uint8_t set_dev_id_param_success_2[] = {
- 0x02, /* Source - 0x0001 (Bluetooth SIG) */
- 0x00,
- 0x02, /* Vendor */
- 0x00,
- 0xcd, /* Product */
- 0xab,
- 0x34,
- 0x12, /* Version */
- };
- static const char write_eir_set_dev_id_success_2[241] = {
- 0x00, 0x02, 0x0a, 0x00, 0x09, 0x10, 0x02, 0x00,
- 0x02, 0x00, 0xcd, 0xab, 0x34, 0x12 };
- static const struct generic_data set_dev_id_success_2 = {
- .setup_settings = settings_powered_ssp,
- .send_opcode = MGMT_OP_SET_DEVICE_ID,
- .send_param = set_dev_id_param_success_2,
- .send_len = sizeof(set_dev_id_param_success_2),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
- .expect_hci_param = write_eir_set_dev_id_success_2,
- .expect_hci_len = sizeof(write_eir_set_dev_id_success_2),
- };
- static const uint8_t set_dev_id_param_disable[8] = { 0x00 };
- static const struct generic_data set_dev_id_disable = {
- .setup_settings = settings_powered_ssp,
- .send_opcode = MGMT_OP_SET_DEVICE_ID,
- .send_param = set_dev_id_param_disable,
- .send_len = sizeof(set_dev_id_param_disable),
- .expect_status = MGMT_STATUS_SUCCESS,
- };
- static const struct generic_data set_dev_id_power_off_on = {
- .setup_settings = settings_ssp,
- .setup_send_opcode = MGMT_OP_SET_DEVICE_ID,
- .setup_send_param = set_dev_id_param_success_1,
- .setup_send_len = sizeof(set_dev_id_param_success_1),
- .send_opcode = MGMT_OP_SET_POWERED,
- .send_param = set_powered_on_param,
- .send_len = sizeof(set_powered_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_ssp_settings_param_2,
- .expect_len = sizeof(set_ssp_settings_param_2),
- .expect_settings_set = MGMT_SETTING_POWERED,
- .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
- .expect_hci_param = write_eir_set_dev_id_success_1,
- .expect_hci_len = sizeof(write_eir_set_dev_id_success_1),
- };
- static const struct generic_data set_dev_id_ssp_off_on = {
- .setup_settings = settings_powered,
- .setup_send_opcode = MGMT_OP_SET_DEVICE_ID,
- .setup_send_param = set_dev_id_param_success_1,
- .setup_send_len = sizeof(set_dev_id_param_success_1),
- .send_opcode = MGMT_OP_SET_SSP,
- .send_param = set_ssp_on_param,
- .send_len = sizeof(set_ssp_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_ssp_settings_param_2,
- .expect_len = sizeof(set_ssp_settings_param_2),
- .expect_hci_command = BT_HCI_CMD_WRITE_EXT_INQUIRY_RESPONSE,
- .expect_hci_param = write_eir_set_dev_id_success_1,
- .expect_hci_len = sizeof(write_eir_set_dev_id_success_1),
- };
- static const uint8_t set_dev_id_invalid_1[] = {
- 0x03, /* Source */
- 0x00,
- 0x02, /* Vendor */
- 0x00,
- 0xcd, /* Product */
- 0xab,
- 0x34,
- 0x12, /* Version */
- };
- static const struct generic_data set_dev_id_invalid_param = {
- .setup_settings = settings_powered_ssp,
- .send_opcode = MGMT_OP_SET_DEVICE_ID,
- .send_param = set_dev_id_invalid_1,
- .send_len = sizeof(set_dev_id_invalid_1),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static void client_cmd_complete(uint16_t opcode, uint8_t status,
- const void *param, uint8_t len,
- void *user_data)
- {
- struct test_data *data = tester_get_data();
- const struct generic_data *test = data->test_data;
- struct bthost *bthost;
- bthost = hciemu_client_get_host(data->hciemu);
- switch (opcode) {
- case BT_HCI_CMD_WRITE_SCAN_ENABLE:
- case BT_HCI_CMD_LE_SET_ADV_ENABLE:
- case BT_HCI_CMD_LE_SET_EXT_ADV_ENABLE:
- tester_print("Client set connectable: %s (0x%02x)",
- mgmt_errstr(status), status);
- if (!status && test->client_enable_ssp) {
- bthost_write_ssp_mode(bthost, 0x01);
- return;
- }
- break;
- case BT_HCI_CMD_WRITE_SIMPLE_PAIRING_MODE:
- tester_print("Client enable SSP: %s (0x%02x)",
- mgmt_errstr(status), status);
- break;
- default:
- return;
- }
- if (status)
- tester_setup_failed();
- else
- test_setup_condition_complete(data);
- }
- static void setup_bthost(void)
- {
- struct test_data *data = tester_get_data();
- const struct generic_data *test = data->test_data;
- struct bthost *bthost;
- bthost = hciemu_client_get_host(data->hciemu);
- bthost_set_cmd_complete_cb(bthost, client_cmd_complete, data);
- test_add_setup_condition(data);
- if (data->hciemu_type == HCIEMU_TYPE_LE ||
- test->client_enable_adv) {
- if (data->hciemu_type >= HCIEMU_TYPE_BREDRLE50) {
- bthost_set_ext_adv_params(bthost);
- bthost_set_ext_adv_enable(bthost, 0x01);
- } else
- bthost_set_adv_enable(bthost, 0x01);
- } else
- bthost_write_scan_enable(bthost, 0x03);
- }
- static void setup_pairing_acceptor(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- const struct generic_data *test = data->test_data;
- if (!test->io_cap)
- return;
- mgmt_send(data->mgmt, MGMT_OP_SET_IO_CAPABILITY, data->mgmt_index,
- sizeof(test->io_cap), &test->io_cap,
- NULL, NULL, NULL);
- setup_bthost();
- }
- static void setup_powered_callback(uint8_t status, uint16_t length,
- const void *param, void *user_data)
- {
- if (status != MGMT_STATUS_SUCCESS) {
- tester_setup_failed();
- return;
- }
- tester_print("Controller powered on");
- setup_bthost();
- }
- static void setup_class(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- unsigned char param[] = { 0x01 };
- unsigned char class_param[] = { 0x01, 0x0c };
- tester_print("Setting device class and powering on");
- mgmt_send(data->mgmt, MGMT_OP_SET_DEV_CLASS, data->mgmt_index,
- sizeof(class_param), class_param,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
- sizeof(param), param,
- setup_powered_callback, NULL, NULL);
- }
- static void discovering_event(uint16_t index, uint16_t length,
- const void *param, void *user_data)
- {
- struct test_data *data = tester_get_data();
- const struct mgmt_ev_discovering *ev = param;
- mgmt_unregister(data->mgmt, data->mgmt_discov_ev_id);
- if (length != sizeof(*ev)) {
- tester_warn("Incorrect discovering event length");
- tester_setup_failed();
- return;
- }
- if (!ev->discovering) {
- tester_warn("Unexpected discovery stopped event");
- tester_setup_failed();
- return;
- }
- tester_setup_complete();
- }
- static void setup_discovery_callback(uint8_t status, uint16_t length,
- const void *param, void *user_data)
- {
- if (status != MGMT_STATUS_SUCCESS) {
- tester_setup_failed();
- return;
- }
- tester_print("Discovery started");
- }
- static void setup_start_discovery(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- const struct generic_data *test = data->test_data;
- const void *send_param = test->setup_send_param;
- uint16_t send_len = test->setup_send_len;
- unsigned int id;
- id = mgmt_register(data->mgmt, MGMT_EV_DISCOVERING, data->mgmt_index,
- discovering_event, NULL, NULL);
- data->mgmt_discov_ev_id = id;
- mgmt_send(data->mgmt, test->setup_send_opcode, data->mgmt_index,
- send_len, send_param, setup_discovery_callback,
- NULL, NULL);
- }
- static void setup_multi_uuid32(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- unsigned char param[] = { 0x01 };
- tester_print("Powering on controller (with 32-bit UUID)");
- mgmt_send(data->mgmt, MGMT_OP_SET_SSP, data->mgmt_index,
- sizeof(param), param, NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
- sizeof(add_uuid32_param_1), add_uuid32_param_1,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
- sizeof(add_uuid32_param_2), add_uuid32_param_2,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
- sizeof(add_uuid32_param_3), add_uuid32_param_3,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
- sizeof(param), param,
- setup_powered_callback, NULL, NULL);
- }
- static void setup_multi_uuid32_2(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- unsigned char param[] = { 0x01 };
- unsigned char uuid_param[] = {
- 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00 };
- int i;
- tester_print("Powering on controller (with many 32-bit UUIDs)");
- mgmt_send(data->mgmt, MGMT_OP_SET_SSP, data->mgmt_index,
- sizeof(param), param, NULL, NULL, NULL);
- for (i = 0; i < 58; i++) {
- uint32_t val = htobl(0xffffffff - i);
- memcpy(&uuid_param[12], &val, sizeof(val));
- mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
- sizeof(uuid_param), uuid_param,
- NULL, NULL, NULL);
- }
- mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
- sizeof(param), param,
- setup_powered_callback, NULL, NULL);
- }
- static void setup_multi_uuid128(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- unsigned char param[] = { 0x01 };
- tester_print("Powering on controller (with 128-bit UUID)");
- mgmt_send(data->mgmt, MGMT_OP_SET_SSP, data->mgmt_index,
- sizeof(param), param, NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
- sizeof(add_uuid128_param_1), add_uuid128_param_1,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
- sizeof(param), param,
- setup_powered_callback, NULL, NULL);
- }
- static void setup_multi_uuid128_2(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- unsigned char param[] = { 0x01 };
- unsigned char uuid_param[] = {
- 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
- 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00,
- 0x00 };
- int i;
- tester_print("Powering on controller (with many 128-bit UUIDs)");
- mgmt_send(data->mgmt, MGMT_OP_SET_SSP, data->mgmt_index,
- sizeof(param), param, NULL, NULL, NULL);
- for (i = 0; i < 13; i++) {
- uuid_param[15] = i;
- mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
- sizeof(uuid_param), uuid_param,
- NULL, NULL, NULL);
- }
- mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
- sizeof(param), param,
- setup_powered_callback, NULL, NULL);
- }
- static void setup_multi_uuid16(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- unsigned char param[] = { 0x01 };
- tester_print("Powering on controller (with SPP UUID)");
- mgmt_send(data->mgmt, MGMT_OP_SET_SSP, data->mgmt_index,
- sizeof(param), param, NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
- sizeof(add_spp_uuid_param), add_spp_uuid_param,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
- sizeof(add_dun_uuid_param), add_dun_uuid_param,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
- sizeof(add_sync_uuid_param), add_sync_uuid_param,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
- sizeof(param), param,
- setup_powered_callback, NULL, NULL);
- }
- static void setup_multi_uuid16_power_off(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- unsigned char param[] = { 0x01 };
- tester_print("Adding UUIDs without powering on");
- mgmt_send(data->mgmt, MGMT_OP_SET_SSP, data->mgmt_index,
- sizeof(param), param, NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
- sizeof(add_spp_uuid_param), add_spp_uuid_param,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
- sizeof(add_dun_uuid_param), add_dun_uuid_param,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
- sizeof(add_sync_uuid_param), add_sync_uuid_param,
- NULL, NULL, NULL);
- setup_bthost();
- }
- static void setup_multi_uuid16_power_off_remove(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- unsigned char param[] = { 0x01 };
- tester_print("Adding UUIDs without powering on and remove UUID");
- mgmt_send(data->mgmt, MGMT_OP_SET_SSP, data->mgmt_index,
- sizeof(param), param, NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
- sizeof(add_spp_uuid_param), add_spp_uuid_param,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
- sizeof(add_dun_uuid_param), add_dun_uuid_param,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
- sizeof(add_sync_uuid_param), add_sync_uuid_param,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_REMOVE_UUID, data->mgmt_index,
- sizeof(remove_dun_uuid_param), remove_dun_uuid_param,
- NULL, NULL, NULL);
- setup_bthost();
- }
- static void setup_multi_uuid16_2(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- unsigned char param[] = { 0x01 };
- unsigned char uuid_param[] = {
- 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
- 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00 };
- int i;
- tester_print("Powering on controller (with many 16-bit UUIDs)");
- mgmt_send(data->mgmt, MGMT_OP_SET_SSP, data->mgmt_index,
- sizeof(param), param, NULL, NULL, NULL);
- for (i = 0; i < 117; i++) {
- uint16_t val = htobs(i + 0x2000);
- memcpy(&uuid_param[12], &val, sizeof(val));
- mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
- sizeof(uuid_param), uuid_param,
- NULL, NULL, NULL);
- }
- mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
- sizeof(param), param,
- setup_powered_callback, NULL, NULL);
- }
- static void setup_uuid_mix(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- unsigned char param[] = { 0x01 };
- tester_print("Powering on controller (with mixed UUIDs)");
- mgmt_send(data->mgmt, MGMT_OP_SET_SSP, data->mgmt_index,
- sizeof(param), param, NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
- sizeof(add_spp_uuid_param), add_spp_uuid_param,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
- sizeof(add_uuid32_param_1), add_uuid32_param_1,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
- sizeof(add_uuid128_param_1), add_uuid128_param_1,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
- sizeof(add_dun_uuid_param), add_dun_uuid_param,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_UUID, data->mgmt_index,
- sizeof(add_uuid32_param_2), add_uuid32_param_2,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
- sizeof(param), param,
- setup_powered_callback, NULL, NULL);
- }
- static void setup_load_ltks_callback(uint8_t status, uint16_t length,
- const void *param, void *user_data)
- {
- if (status != MGMT_STATUS_SUCCESS) {
- tester_setup_failed();
- return;
- }
- tester_print("Loaded Long Term Key");
- }
- static void setup_load_ltks_20_by_1(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- struct mgmt_cp_load_long_term_keys *cp;
- struct mgmt_ltk_info *info;
- unsigned char param[sizeof(*cp) + sizeof(*info)] = { 0x00 };
- unsigned char param_on[] = { 0x01 };
- int i;
- cp = (struct mgmt_cp_load_long_term_keys *)param;
- cp->key_count = 1;
- info = (struct mgmt_ltk_info *)cp->keys;
- info->addr.type = 0x01; /* LE Public */
- for (i = 0; i < 20; i++) {
- /* Update BDADDR */
- info->addr.bdaddr.b[0] = i + 1;
- mgmt_send(data->mgmt, MGMT_OP_LOAD_LONG_TERM_KEYS,
- data->mgmt_index, sizeof(param), param,
- setup_load_ltks_callback, NULL, NULL);
- }
- mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
- sizeof(param_on), param_on,
- setup_powered_callback, NULL, NULL);
- }
- static void setup_add_device(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- unsigned char param[] = { 0x01 };
- const unsigned char *add_param;
- size_t add_param_len;
- tester_print("Powering on controller (with added device)");
- if (data->hciemu_type == HCIEMU_TYPE_LE) {
- add_param = add_device_success_param_2;
- add_param_len = sizeof(add_device_success_param_2);
- } else {
- add_param = add_device_success_param_1;
- add_param_len = sizeof(add_device_success_param_1);
- }
- mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
- add_param_len, add_param, NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
- sizeof(param), param,
- setup_powered_callback, NULL, NULL);
- }
- static void setup_add_advertising_callback(uint8_t status, uint16_t length,
- const void *param, void *user_data)
- {
- struct mgmt_rp_add_advertising *rp =
- (struct mgmt_rp_add_advertising *) param;
- if (status != MGMT_STATUS_SUCCESS) {
- tester_setup_failed();
- return;
- }
- tester_print("Add Advertising setup complete (instance %d)",
- rp->instance);
- setup_bthost();
- }
- #define TESTER_ADD_ADV_DATA_LEN 7
- static void setup_add_adv_param(struct mgmt_cp_add_advertising *cp,
- uint8_t instance)
- {
- memset(cp, 0, sizeof(*cp));
- cp->instance = instance;
- cp->adv_data_len = TESTER_ADD_ADV_DATA_LEN;
- cp->data[0] = TESTER_ADD_ADV_DATA_LEN - 1; /* AD len */
- cp->data[1] = 0x08; /* AD type: shortened local name */
- cp->data[2] = 't'; /* adv data ... */
- cp->data[3] = 'e';
- cp->data[4] = 's';
- cp->data[5] = 't';
- cp->data[6] = '0' + instance;
- }
- static void setup_add_advertising_not_powered(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- struct mgmt_cp_add_advertising *cp;
- unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
- unsigned char param[] = { 0x01 };
- tester_print("Adding advertising instance while unpowered");
- cp = (struct mgmt_cp_add_advertising *) adv_param;
- setup_add_adv_param(cp, 1);
- mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
- sizeof(param), ¶m,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
- sizeof(adv_param), adv_param,
- setup_add_advertising_callback,
- NULL, NULL);
- }
- static void setup_add_advertising(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- struct mgmt_cp_add_advertising *cp;
- unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
- unsigned char param[] = { 0x01 };
- tester_print("Adding advertising instance while powered");
- cp = (struct mgmt_cp_add_advertising *) adv_param;
- setup_add_adv_param(cp, 1);
- mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
- sizeof(param), ¶m,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
- sizeof(param), ¶m,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
- sizeof(adv_param), adv_param,
- setup_add_advertising_callback,
- NULL, NULL);
- }
- static void setup_add_advertising_connectable(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- struct mgmt_cp_add_advertising *cp;
- unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
- unsigned char param[] = { 0x01 };
- tester_print("Adding advertising instance while connectable");
- cp = (struct mgmt_cp_add_advertising *) adv_param;
- setup_add_adv_param(cp, 1);
- mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
- sizeof(param), ¶m,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
- sizeof(param), ¶m,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_CONNECTABLE, data->mgmt_index,
- sizeof(param), ¶m,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
- sizeof(adv_param), adv_param,
- setup_add_advertising_callback,
- NULL, NULL);
- }
- static int create_le_att_sock(struct test_data *data)
- {
- struct sockaddr_l2 addr;
- int sk, err;
- sk = socket(PF_BLUETOOTH, SOCK_SEQPACKET | SOCK_NONBLOCK,
- BTPROTO_L2CAP);
- if (sk < 0) {
- err = -errno;
- tester_warn("Can't create socket: %s (%d)", strerror(errno),
- errno);
- return err;
- }
- memset(&addr, 0, sizeof(addr));
- addr.l2_family = AF_BLUETOOTH;
- addr.l2_psm = 0;
- addr.l2_cid = htobs(0x0004);
- addr.l2_bdaddr_type = BDADDR_LE_PUBLIC;
- if (bind(sk, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
- err = -errno;
- tester_warn("Can't bind socket: %s (%d)", strerror(errno),
- errno);
- close(sk);
- return err;
- }
- if (listen(sk, 1) < 0) {
- err = -errno;
- tester_warn("Can't bind socket: %s (%d)", strerror(errno),
- errno);
- close(sk);
- return err;
- }
- data->sk = sk;
- return sk;
- }
- static void setup_advertise_while_connected(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- struct mgmt_cp_add_advertising *cp;
- uint8_t adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
- tester_print("Adding advertising instances");
- cp = (struct mgmt_cp_add_advertising *) adv_param;
- setup_add_adv_param(cp, 1);
- cp->flags |= MGMT_ADV_FLAG_CONNECTABLE;
- mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
- sizeof(adv_param), adv_param,
- NULL, NULL, NULL);
- cp->flags &= ~MGMT_ADV_FLAG_CONNECTABLE;
- cp->instance = 2;
- mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
- sizeof(adv_param), adv_param,
- setup_add_advertising_callback,
- NULL, NULL);
- /* Listen on the socket so Kernel does not drop connection just after
- * connect. Socket is closed in test_post_teardown
- */
- if (create_le_att_sock(data) < 0)
- tester_test_failed();
- }
- static void setup_add_advertising_timeout(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- struct mgmt_cp_add_advertising *cp;
- unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
- unsigned char param[] = { 0x01 };
- tester_print("Adding advertising instance with timeout");
- cp = (struct mgmt_cp_add_advertising *) adv_param;
- setup_add_adv_param(cp, 1);
- cp->timeout = 1;
- mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
- sizeof(param), ¶m,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
- sizeof(param), ¶m,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
- sizeof(adv_param), adv_param,
- setup_add_advertising_callback,
- NULL, NULL);
- }
- static void setup_add_advertising_duration(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- struct mgmt_cp_add_advertising *cp;
- unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
- unsigned char param[] = { 0x01 };
- tester_print("Adding instance with long timeout/short duration");
- cp = (struct mgmt_cp_add_advertising *) adv_param;
- setup_add_adv_param(cp, 1);
- cp->duration = 1;
- cp->timeout = 30;
- mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
- sizeof(param), ¶m,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
- sizeof(param), ¶m,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
- sizeof(adv_param), adv_param,
- setup_add_advertising_callback,
- NULL, NULL);
- }
- static void setup_power_cycle_callback(uint8_t status, uint16_t length,
- const void *param, void *user_data)
- {
- struct test_data *data = tester_get_data();
- unsigned char param_off[] = { 0x00 };
- if (status != MGMT_STATUS_SUCCESS) {
- tester_setup_failed();
- return;
- }
- mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
- sizeof(param_off), ¶m_off,
- NULL, NULL, NULL);
- setup_bthost();
- }
- static void setup_add_advertising_power_cycle(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- struct mgmt_cp_add_advertising *cp;
- unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
- unsigned char param_on[] = { 0x01 };
- tester_print("Adding instance without timeout and power cycle");
- cp = (struct mgmt_cp_add_advertising *) adv_param;
- setup_add_adv_param(cp, 1);
- mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
- sizeof(param_on), ¶m_on,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
- sizeof(param_on), ¶m_on,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
- sizeof(adv_param), adv_param,
- setup_power_cycle_callback,
- NULL, NULL);
- }
- static void setup_set_and_add_advertising(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- struct mgmt_cp_add_advertising *cp;
- unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
- unsigned char param[] = { 0x01 };
- tester_print("Set and add advertising instance");
- cp = (struct mgmt_cp_add_advertising *) adv_param;
- setup_add_adv_param(cp, 1);
- mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
- sizeof(param), ¶m,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
- sizeof(param), ¶m,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_ADVERTISING, data->mgmt_index,
- sizeof(param), ¶m,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
- sizeof(adv_param), adv_param,
- setup_add_advertising_callback,
- NULL, NULL);
- }
- static void setup_multi_adv_second_instance(uint8_t status, uint16_t length,
- const void *param, void *user_data) {
- struct mgmt_rp_add_advertising *rp =
- (struct mgmt_rp_add_advertising *) param;
- struct test_data *data = tester_get_data();
- struct mgmt_cp_add_advertising *cp;
- unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
- if (status != MGMT_STATUS_SUCCESS) {
- tester_setup_failed();
- return;
- }
- tester_print("Add Advertising setup complete (instance %d)",
- rp->instance);
- cp = (struct mgmt_cp_add_advertising *) adv_param;
- setup_add_adv_param(cp, 2);
- cp->timeout = 1;
- cp->duration = 1;
- mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
- sizeof(adv_param), adv_param,
- setup_add_advertising_callback,
- NULL, NULL);
- }
- static void setup_multi_adv(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- struct mgmt_cp_add_advertising *cp;
- unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
- unsigned char param[] = { 0x01 };
- tester_print("Adding two instances with timeout 1 and duration 1");
- cp = (struct mgmt_cp_add_advertising *) adv_param;
- setup_add_adv_param(cp, 1);
- cp->timeout = 1;
- cp->duration = 1;
- mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
- sizeof(param), ¶m,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
- sizeof(param), ¶m,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
- sizeof(adv_param), adv_param,
- setup_multi_adv_second_instance,
- NULL, NULL);
- }
- static void setup_complete(uint8_t status, uint16_t length,
- const void *param, void *user_data)
- {
- struct test_data *data = tester_get_data();
- if (status != MGMT_STATUS_SUCCESS) {
- tester_setup_failed();
- return;
- }
- tester_print("Initial settings completed");
- if (data->test_setup)
- data->test_setup(data);
- else
- setup_bthost();
- }
- static void setup_set_unpowered_callback(uint8_t status, uint16_t length,
- const void *param, void *user_data)
- {
- if (status != MGMT_STATUS_SUCCESS) {
- tester_setup_failed();
- return;
- }
- setup_bthost();
- }
- static void setup_set_le_callback(uint8_t status, uint16_t length,
- const void *param, void *user_data)
- {
- struct test_data *data = tester_get_data();
- unsigned char power_param[] = { 0x00 };
- if (status != MGMT_STATUS_SUCCESS) {
- tester_setup_failed();
- return;
- }
- tester_print("Disabling power");
- mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
- sizeof(power_param),
- &power_param,
- setup_set_unpowered_callback,
- NULL, NULL);
- }
- static void setup_ext_adv_not_powered(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- unsigned char param[] = { 0x01 };
- tester_print("Enabling LE");
- mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
- sizeof(param), ¶m,
- setup_set_le_callback,
- NULL, NULL);
- }
- static void setup_set_ext_adv_params_callback(uint8_t status, uint16_t length,
- const void *param, void *user_data)
- {
- if (status != MGMT_STATUS_SUCCESS) {
- tester_setup_failed();
- return;
- }
- setup_bthost();
- }
- static void setup_ext_adv_params(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- tester_print("Setting Extended Adv Params");
- mgmt_send(data->mgmt, MGMT_OP_ADD_EXT_ADV_PARAMS, data->mgmt_index,
- sizeof(ext_adv_params_valid),
- &ext_adv_params_valid,
- setup_set_ext_adv_params_callback,
- NULL, NULL);
- }
- static void pin_code_request_callback(uint16_t index, uint16_t length,
- const void *param, void *user_data)
- {
- const struct mgmt_ev_pin_code_request *ev = param;
- struct test_data *data = user_data;
- const struct generic_data *test = data->test_data;
- struct mgmt_cp_pin_code_reply cp;
- test_condition_complete(data);
- memset(&cp, 0, sizeof(cp));
- memcpy(&cp.addr, &ev->addr, sizeof(cp.addr));
- if (!test->pin) {
- mgmt_reply(data->mgmt, MGMT_OP_PIN_CODE_NEG_REPLY,
- data->mgmt_index, sizeof(cp.addr), &cp.addr,
- NULL, NULL, NULL);
- return;
- }
- cp.pin_len = test->pin_len;
- memcpy(cp.pin_code, test->pin, test->pin_len);
- mgmt_reply(data->mgmt, MGMT_OP_PIN_CODE_REPLY, data->mgmt_index,
- sizeof(cp), &cp, NULL, NULL, NULL);
- }
- static void user_confirm_request_callback(uint16_t index, uint16_t length,
- const void *param,
- void *user_data)
- {
- const struct mgmt_ev_user_confirm_request *ev = param;
- struct test_data *data = user_data;
- const struct generic_data *test = data->test_data;
- struct mgmt_cp_user_confirm_reply cp;
- uint16_t opcode;
- memset(&cp, 0, sizeof(cp));
- memcpy(&cp.addr, &ev->addr, sizeof(cp.addr));
- if (test->reject_confirm)
- opcode = MGMT_OP_USER_CONFIRM_NEG_REPLY;
- else
- opcode = MGMT_OP_USER_CONFIRM_REPLY;
- mgmt_reply(data->mgmt, opcode, data->mgmt_index, sizeof(cp), &cp,
- NULL, NULL, NULL);
- }
- static void user_passkey_request_callback(uint16_t index, uint16_t length,
- const void *param,
- void *user_data)
- {
- const struct mgmt_ev_user_passkey_request *ev = param;
- struct test_data *data = user_data;
- const struct generic_data *test = data->test_data;
- struct mgmt_cp_user_passkey_reply cp;
- if (test->just_works) {
- tester_warn("User Passkey Request for just-works case");
- tester_test_failed();
- return;
- }
- memset(&cp, 0, sizeof(cp));
- memcpy(&cp.addr, &ev->addr, sizeof(cp.addr));
- if (test->reject_confirm) {
- mgmt_reply(data->mgmt, MGMT_OP_USER_PASSKEY_NEG_REPLY,
- data->mgmt_index, sizeof(cp.addr), &cp.addr,
- NULL, NULL, NULL);
- return;
- }
- mgmt_reply(data->mgmt, MGMT_OP_USER_PASSKEY_REPLY, data->mgmt_index,
- sizeof(cp), &cp, NULL, NULL, NULL);
- }
- static void test_setup(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- const struct generic_data *test = data->test_data;
- struct bthost *bthost = hciemu_client_get_host(data->hciemu);
- const uint16_t *cmd;
- if (!test)
- goto proceed;
- if (test->pin || test->expect_pin) {
- mgmt_register(data->mgmt, MGMT_EV_PIN_CODE_REQUEST,
- data->mgmt_index, pin_code_request_callback,
- data, NULL);
- test_add_condition(data);
- }
- mgmt_register(data->mgmt, MGMT_EV_USER_CONFIRM_REQUEST,
- data->mgmt_index, user_confirm_request_callback,
- data, NULL);
- mgmt_register(data->mgmt, MGMT_EV_USER_PASSKEY_REQUEST,
- data->mgmt_index, user_passkey_request_callback,
- data, NULL);
- if (test->client_pin)
- bthost_set_pin_code(bthost, test->client_pin,
- test->client_pin_len);
- if (test->client_io_cap)
- bthost_set_io_capability(bthost, test->client_io_cap);
- if (test->client_auth_req)
- bthost_set_auth_req(bthost, test->client_auth_req);
- else if (!test->just_works)
- bthost_set_auth_req(bthost, 0x01);
- if (test->client_reject_confirm)
- bthost_set_reject_user_confirm(bthost, true);
- if (test->client_enable_le)
- bthost_write_le_host_supported(bthost, 0x01);
- if (test->client_enable_sc)
- bthost_set_sc_support(bthost, 0x01);
- proceed:
- if (!test || !test->setup_settings) {
- if (data->test_setup)
- data->test_setup(data);
- else
- tester_setup_complete();
- return;
- }
- for (cmd = test->setup_settings; *cmd; cmd++) {
- unsigned char simple_param[] = { 0x01 };
- unsigned char discov_param[] = { 0x01, 0x00, 0x00 };
- unsigned char privacy_param[] = { 0x01,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
- unsigned char *param = simple_param;
- size_t param_size = sizeof(simple_param);
- mgmt_request_func_t func = NULL;
- /* If this is the last command (next one is 0) request
- * for a callback. */
- if (!cmd[1])
- func = setup_complete;
- if (*cmd == MGMT_OP_SET_DISCOVERABLE) {
- if (test->setup_limited_discov) {
- discov_param[0] = 0x02;
- discov_param[1] = 0x01;
- }
- param_size = sizeof(discov_param);
- param = discov_param;
- }
- if (*cmd == MGMT_OP_SET_PRIVACY) {
- param_size = sizeof(privacy_param);
- param = privacy_param;
- }
- if (*cmd == MGMT_OP_START_DISCOVERY) {
- if (test->setup_discovery_param)
- memcpy(param, test->setup_discovery_param, 1);
- }
- if (*cmd == MGMT_OP_SET_LE && test->setup_nobredr) {
- unsigned char off[] = { 0x00 };
- mgmt_send(data->mgmt, *cmd, data->mgmt_index,
- param_size, param, NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_BREDR,
- data->mgmt_index, sizeof(off), off,
- func, data, NULL);
- } else {
- mgmt_send(data->mgmt, *cmd, data->mgmt_index,
- param_size, param, func, data, NULL);
- }
- }
- }
- static void command_generic_new_settings(uint16_t index, uint16_t length,
- const void *param, void *user_data)
- {
- struct test_data *data = tester_get_data();
- tester_print("New settings event received");
- mgmt_unregister(data->mgmt, data->mgmt_settings_id);
- tester_test_failed();
- }
- static void command_generic_new_settings_alt(uint16_t index, uint16_t length,
- const void *param, void *user_data)
- {
- struct test_data *data = tester_get_data();
- const struct generic_data *test = data->test_data;
- uint32_t settings;
- if (length != 4) {
- tester_warn("Invalid parameter size for new settings event");
- tester_test_failed();
- return;
- }
- settings = get_le32(param);
- tester_print("New settings 0x%08x received", settings);
- if (test->expect_settings_unset) {
- if ((settings & test->expect_settings_unset) != 0)
- return;
- goto done;
- }
- if (!test->expect_settings_set)
- return;
- if ((settings & test->expect_settings_set) != test->expect_settings_set)
- return;
- done:
- tester_print("Unregistering new settings notification");
- mgmt_unregister(data->mgmt_alt, data->mgmt_alt_settings_id);
- test_condition_complete(data);
- }
- static bool verify_alt_ev(const void *param, uint16_t length)
- {
- struct test_data *data = tester_get_data();
- const struct generic_data *test = data->test_data;
- if (length != test->expect_alt_ev_len) {
- tester_warn("Invalid length %u != %u", length,
- test->expect_alt_ev_len);
- return false;
- }
- if (test->expect_alt_ev_param &&
- memcmp(test->expect_alt_ev_param, param, length)) {
- tester_warn("Event parameters do not match");
- util_hexdump('>', param, length, print_debug, "");
- util_hexdump('!', test->expect_alt_ev_param, length,
- print_debug, "");
- return false;
- }
- return true;
- }
- static void command_generic_event_alt(uint16_t index, uint16_t length,
- const void *param,
- void *user_data)
- {
- struct test_data *data = tester_get_data();
- const struct generic_data *test = data->test_data;
- bool (*verify)(const void *param, uint16_t length);
- tester_print("New %s event received", mgmt_evstr(test->expect_alt_ev));
- mgmt_unregister(data->mgmt_alt, data->mgmt_alt_ev_id);
- if (test->verify_alt_ev_func)
- verify = test->verify_alt_ev_func;
- else
- verify = verify_alt_ev;
- if (!verify(param, length)) {
- tester_warn("Incorrect %s event parameters",
- mgmt_evstr(test->expect_alt_ev));
- tester_test_failed();
- return;
- }
- test_condition_complete(data);
- }
- static void command_generic_callback(uint8_t status, uint16_t length,
- const void *param, void *user_data)
- {
- struct test_data *data = tester_get_data();
- const struct generic_data *test = data->test_data;
- const void *expect_param = test->expect_param;
- uint16_t expect_len = test->expect_len;
- tester_print("%s (0x%04x): %s (0x%02x)", mgmt_opstr(test->send_opcode),
- test->send_opcode, mgmt_errstr(status), status);
- if (status != test->expect_status) {
- if (!test->fail_tolerant || !!status != !!test->expect_status) {
- tester_test_abort();
- return;
- }
- tester_warn("Unexpected status got %d expected %d",
- status, test->expect_status);
- }
- if (!test->expect_ignore_param) {
- if (test->expect_func)
- expect_param = test->expect_func(&expect_len);
- if (length != expect_len) {
- tester_warn("Invalid cmd response parameter size");
- tester_test_failed();
- return;
- }
- if (expect_param && expect_len > 0 &&
- memcmp(param, expect_param, length)) {
- tester_warn("Unexpected cmd response parameter value");
- util_hexdump('>', param, length, print_debug, "");
- util_hexdump('!', expect_param, length, print_debug,
- "");
- tester_test_failed();
- return;
- }
- }
- test_condition_complete(data);
- }
- static void command_setup_hci_callback(uint16_t opcode, const void *param,
- uint8_t length, void *user_data)
- {
- struct test_data *data = user_data;
- const struct generic_data *test = data->test_data;
- const void *setup_expect_hci_param = test->setup_expect_hci_param;
- uint8_t setup_expect_hci_len = test->setup_expect_hci_len;
- tester_print("HCI Command 0x%04x length %u", opcode, length);
- if (opcode != test->setup_expect_hci_command)
- return;
- if (length != setup_expect_hci_len) {
- tester_warn("Invalid parameter size for HCI command");
- tester_test_failed();
- return;
- }
- if (memcmp(param, setup_expect_hci_param, length) != 0) {
- tester_warn("Unexpected HCI command parameter value");
- tester_test_failed();
- return;
- }
- hciemu_clear_central_post_command_hooks(data->hciemu);
- test_setup_condition_complete(data);
- }
- static void command_hci_callback(uint16_t opcode, const void *param,
- uint8_t length, void *user_data)
- {
- struct test_data *data = user_data;
- const struct generic_data *test = data->test_data;
- const void *expect_hci_param = test->expect_hci_param;
- uint8_t expect_hci_len = test->expect_hci_len;
- int ret;
- tester_print("HCI Command 0x%04x length %u", opcode, length);
- if (opcode != test->expect_hci_command || data->expect_hci_command_done)
- return;
- data->expect_hci_command_done = true;
- if (test->expect_hci_func)
- expect_hci_param = test->expect_hci_func(&expect_hci_len);
- if (length != expect_hci_len) {
- tester_warn("Invalid parameter size for HCI command");
- tester_test_failed();
- return;
- }
- if (test->expect_hci_param_check_func)
- ret = test->expect_hci_param_check_func(param, length);
- else
- ret = memcmp(param, expect_hci_param, length);
- if (ret != 0) {
- tester_warn("Unexpected HCI command parameter value:");
- util_hexdump('>', param, length, print_debug, "");
- util_hexdump('!', expect_hci_param, length, print_debug, "");
- tester_test_failed();
- return;
- }
- test_condition_complete(data);
- }
- static void setup_mgmt_cmd_callback(uint8_t status, uint16_t length,
- const void *param, void *user_data)
- {
- if (status != MGMT_STATUS_SUCCESS) {
- tester_setup_failed();
- return;
- }
- test_setup_condition_complete(user_data);
- }
- static void setup_command_generic(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- const struct generic_data *test = data->test_data;
- const void *send_param = test->setup_send_param;
- uint16_t send_len = test->setup_send_len;
- size_t i = 0;
- if (test->setup_expect_hci_command) {
- tester_print("Registering setup expected HCI command callback");
- tester_print("Setup expected HCI command 0x%04x",
- test->setup_expect_hci_command);
- hciemu_add_central_post_command_hook(data->hciemu,
- command_setup_hci_callback, data);
- test_add_setup_condition(data);
- }
- if (test->setup_send_opcode) {
- tester_print("Setup sending %s (0x%04x)",
- mgmt_opstr(test->setup_send_opcode),
- test->setup_send_opcode);
- mgmt_send(data->mgmt, test->setup_send_opcode, data->mgmt_index,
- send_len, send_param,
- setup_mgmt_cmd_callback,
- data, NULL);
- test_add_setup_condition(data);
- return;
- }
- tester_print("Sending setup opcode array");
- for (; test->setup_mgmt_cmd_arr + i; ++i) {
- const struct setup_mgmt_cmd *cmd = test->setup_mgmt_cmd_arr + i;
- if (cmd->send_opcode == 0x00)
- break;
- tester_print("Setup sending %s (0x%04x)",
- mgmt_opstr(cmd->send_opcode),
- cmd->send_opcode);
- mgmt_send(data->mgmt, cmd->send_opcode, data->mgmt_index,
- cmd->send_len, cmd->send_param,
- setup_mgmt_cmd_callback,
- data, NULL);
- test_add_setup_condition(data);
- }
- }
- static const uint8_t add_advertising_param_empty[] = {
- 0x01, /* adv instance */
- 0x00, 0x00, 0x00, 0x00, /* flags: none */
- 0x00, 0x00, /* duration: default */
- 0x00, 0x00, /* timeout: none */
- 0x00, /* adv data len */
- 0x00, /* scan rsp len */
- };
- static const struct generic_data add_advertising_empty_scrsp = {
- .setup_settings = settings_powered_le,
- .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
- .setup_send_param = set_local_name_param,
- .setup_send_len = sizeof(set_local_name_param),
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_empty,
- .send_len = sizeof(add_advertising_param_empty),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- };
- static const uint8_t add_advertising_param_scrsp_data_only_ok[] = {
- 0x01, /* adv instance */
- 0x00, 0x00, 0x00, 0x00, /* flags: none */
- 0x00, 0x00, /* duration: default */
- 0x00, 0x00, /* timeout: none */
- 0x00, /* adv data len */
- 0x1f, /* scan rsp len */
- /* adv data: */
- /* scan rsp data: */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00,
- };
- static const struct generic_data add_advertising_scrsp_data_only_ok = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_scrsp_data_only_ok,
- .send_len = sizeof(add_advertising_param_scrsp_data_only_ok),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- };
- static const uint8_t add_advertising_param_scrsp_data_only_too_long[] = {
- 0x01, /* adv instance */
- 0x00, 0x00, 0x00, 0x00, /* flags: none */
- 0x00, 0x00, /* duration: default */
- 0x00, 0x00, /* timeout: none */
- 0x00, /* adv data len */
- 0x20, /* scan rsp len */
- /* adv data: */
- /* scan rsp data: */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00,
- };
- static const struct generic_data add_advertising_scrsp_data_only_too_long = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_scrsp_data_only_too_long,
- .send_len = sizeof(add_advertising_param_scrsp_data_only_too_long),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- .expect_param = NULL,
- .expect_len = 0,
- };
- static const uint8_t set_appearance_param[2] = { 0x54, 0x65 };
- static const uint8_t add_advertising_param_scrsp_appear_data_ok[] = {
- 0x01, /* adv instance */
- 0x20, 0x00, 0x00, 0x00, /* flags: appearance */
- 0x00, 0x00, /* duration: default */
- 0x00, 0x00, /* timeout: none */
- 0x00, /* adv data len */
- 0x1b, /* scan rsp len */
- /* adv data: */
- /* scan rsp data: */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- };
- static const struct generic_data add_advertising_scrsp_appear_data_ok = {
- .setup_settings = settings_powered_le,
- .setup_send_opcode = MGMT_OP_SET_APPEARANCE,
- .setup_send_param = set_appearance_param,
- .setup_send_len = sizeof(set_appearance_param),
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_scrsp_appear_data_ok,
- .send_len = sizeof(add_advertising_param_scrsp_appear_data_ok),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- };
- static const uint8_t add_advertising_param_scrsp_appear_data_too_long[] = {
- 0x01, /* adv instance */
- 0x20, 0x00, 0x00, 0x00, /* flags: appearance */
- 0x00, 0x00, /* duration: default */
- 0x00, 0x00, /* timeout: none */
- 0x00, /* adv data len */
- 0x1c, /* scan rsp len */
- /* adv data: */
- /* scan rsp data: */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- };
- static const struct generic_data add_advertising_scrsp_appear_data_too_long = {
- .setup_settings = settings_powered_le,
- .setup_send_opcode = MGMT_OP_SET_APPEARANCE,
- .setup_send_param = set_appearance_param,
- .setup_send_len = sizeof(set_appearance_param),
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_scrsp_appear_data_too_long,
- .send_len = sizeof(add_advertising_param_scrsp_appear_data_too_long),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- .expect_param = NULL,
- .expect_len = 0,
- };
- static const uint8_t add_advertising_param_scrsp_appear_null[] = {
- 0x01, /* adv instance */
- 0x20, 0x00, 0x00, 0x00, /* flags: appearance */
- 0x00, 0x00, /* duration: default */
- 0x00, 0x00, /* timeout: none */
- 0x00, /* adv data len */
- 0x01, /* scan rsp len */
- /* adv data: */
- /* scan rsp data: */
- 0x00,
- };
- static const struct generic_data add_advertising_scrsp_appear_null = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_scrsp_appear_null,
- .send_len = sizeof(add_advertising_param_scrsp_appear_null),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- };
- static const uint8_t add_advertising_empty_param[] = {
- 0x01, /* adv instance */
- 0x40, 0x00, 0x00, 0x00, /* flags: local name*/
- 0x00, 0x00, /* duration: default */
- 0x00, 0x00, /* timeout: none */
- 0x00, /* adv data len */
- 0x01, /* scan rsp len */
- /* scan rsp data: */
- 0x00,
- };
- static const uint8_t scan_rsp_data_empty[] = {
- 0x01, /* scan rsp data len */
- 0x00, /* scan rsp data */
- /* placeholder data */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- };
- static const struct generic_data add_advertising_no_name_set = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_empty_param,
- .send_len = sizeof(add_advertising_empty_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_RSP_DATA,
- .expect_hci_param = scan_rsp_data_empty,
- .expect_hci_len = sizeof(scan_rsp_data_empty),
- };
- static const uint8_t add_advertising_param_name[] = {
- 0x01, /* adv instance */
- 0x40, 0x00, 0x00, 0x00, /* flags: Add local name to scan_rsp */
- 0x00, 0x00, /* duration: default */
- 0x00, 0x00, /* timeout: none */
- 0x00, /* adv data len */
- 0x00, /* scan rsp len */
- };
- static const uint8_t set_scan_rsp_data_name_fits_in_scrsp[] = {
- 0x0c, /* Scan rsp data len */
- 0x0b, /* Local name data len */
- 0x09, /* Complete name */
- 0x54, 0x65, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, /* "Test name" */
- /* padding */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- };
- static const struct generic_data add_advertising_name_fits_in_scrsp = {
- .setup_settings = settings_powered_le,
- .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
- .setup_send_param = &set_local_name_cp,
- .setup_send_len = sizeof(set_local_name_cp),
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_name,
- .send_len = sizeof(add_advertising_param_name),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_RSP_DATA,
- .expect_hci_param = set_scan_rsp_data_name_fits_in_scrsp,
- .expect_hci_len = sizeof(set_scan_rsp_data_name_fits_in_scrsp),
- };
- static const uint8_t set_scan_rsp_data_shortened_name_fits[] = {
- 0x0d, /* Scan rsp data len */
- 0x0c, /* Local name data len */
- 0x08, /* Short name */
- 0x54, 0x65, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x31,
- /* "Test name1" */
- /* padding */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- };
- static const struct generic_data add_advertising_shortened_name_in_scrsp = {
- .setup_settings = settings_powered_le,
- .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
- .setup_send_param = &set_local_name_longer_cp,
- .setup_send_len = sizeof(set_local_name_longer_cp),
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_name,
- .send_len = sizeof(add_advertising_param_name),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_RSP_DATA,
- .expect_hci_param = set_scan_rsp_data_shortened_name_fits,
- .expect_hci_len = sizeof(set_scan_rsp_data_shortened_name_fits),
- };
- static const uint8_t set_scan_rsp_data_short_name_fits[] = {
- 0x07, /* Scan rsp data len */
- 0x06, /* Local name data len */
- 0x08, /* Short name */
- 0x54, 0x65, 0x73, 0x74,
- /* "Test*/
- /* padding */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00,
- };
- static const struct generic_data add_advertising_short_name_in_scrsp = {
- .setup_settings = settings_powered_le,
- .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
- .setup_send_param = &set_local_name_long_short_cp,
- .setup_send_len = sizeof(set_local_name_long_short_cp),
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_name,
- .send_len = sizeof(add_advertising_param_name),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_RSP_DATA,
- .expect_hci_param = set_scan_rsp_data_short_name_fits,
- .expect_hci_len = sizeof(set_scan_rsp_data_short_name_fits),
- };
- static const uint8_t add_advertising_param_name_data_ok[] = {
- 0x01, /* adv instance */
- 0x40, 0x00, 0x00, 0x00, /* flags: local name */
- 0x00, 0x00, /* duration: default */
- 0x00, 0x00, /* timeout: none */
- 0x00, /* adv data len */
- 0x12, /* scan rsp len */
- /* adv data: */
- /* scan rsp data: */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- };
- static const uint8_t set_scan_rsp_data_param_name_data_ok[] = {
- 0x1e, /* Scan rsp data len */
- /* scan rsp data */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x0b, /* Local name data len */
- 0x09, /* Complete name */
- 0x54, 0x65, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x00,
- /* "Test name" */
- /* padding */
- 0x00,
- };
- static const struct generic_data add_advertising_name_data_ok = {
- .setup_settings = settings_powered_le,
- .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
- .setup_send_param = &set_local_name_cp,
- .setup_send_len = sizeof(set_local_name_cp),
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_name_data_ok,
- .send_len = sizeof(add_advertising_param_name_data_ok),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_RSP_DATA,
- .expect_hci_param = set_scan_rsp_data_param_name_data_ok,
- .expect_hci_len = sizeof(set_scan_rsp_data_param_name_data_ok),
- };
- static const uint8_t add_advertising_param_name_data_inv[] = {
- 0x01, /* adv instance */
- 0x40, 0x00, 0x00, 0x00, /* flags: local name */
- 0x00, 0x00, /* duration: default */
- 0x00, 0x00, /* timeout: none */
- 0x00, /* adv data len */
- 0x14, /* scan rsp len */
- /* adv data: */
- /* scan rsp data: */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- };
- static const struct generic_data add_advertising_name_data_inv = {
- .setup_settings = settings_powered_le,
- .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
- .setup_send_param = &set_local_name_cp,
- .setup_send_len = sizeof(set_local_name_cp),
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_name_data_inv,
- .send_len = sizeof(add_advertising_param_name_data_inv),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- .expect_param = NULL,
- .expect_len = 0,
- };
- static const uint8_t add_advertising_param_name_data_appear[] = {
- 0x01, /* adv instance */
- 0x60, 0x00, 0x00, 0x00, /* flags: local name + appearance */
- 0x00, 0x00, /* duration: default */
- 0x00, 0x00, /* timeout: none */
- 0x00, /* adv data len */
- 0x0e, /* scan rsp len */
- /* adv data: */
- /* scan rsp data: */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- };
- static const struct setup_mgmt_cmd add_advertising_mgmt_cmd_arr[] = {
- {
- .send_opcode = MGMT_OP_SET_APPEARANCE,
- .send_param = set_appearance_param,
- .send_len = sizeof(set_appearance_param),
- },
- {
- .send_opcode = MGMT_OP_SET_LOCAL_NAME,
- .send_param = &set_local_name_cp,
- .send_len = sizeof(set_local_name_cp),
- },
- { /* last element should always have opcode 0x00 */
- .send_opcode = 0x00,
- .send_param = NULL,
- .send_len = 0,
- }
- };
- static const uint8_t set_scan_rsp_data_name_data_appear[] = {
- 0x1e, /* Scan rsp data len */
- 0x03, /* appearance len */
- 0x19, /* EIR_APPEARANCE */
- 0x54, 0x65, /* appearance value */
- /* scan rsp data */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x0b, /* Local name data len */
- 0x09, /* Complete name */
- 0x54, 0x65, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x00,
- /* "Test name" */
- /* padding */
- 0x00,
- };
- static const struct generic_data add_advertising_name_data_appear = {
- .setup_settings = settings_powered_le,
- .setup_mgmt_cmd_arr = add_advertising_mgmt_cmd_arr,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_name_data_appear,
- .send_len = sizeof(add_advertising_param_name_data_appear),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_SCAN_RSP_DATA,
- .expect_hci_param = set_scan_rsp_data_name_data_appear,
- .expect_hci_len = sizeof(set_scan_rsp_data_name_data_appear),
- };
- static const struct generic_data set_appearance_not_supported = {
- .send_opcode = MGMT_OP_SET_APPEARANCE,
- .send_param = set_appearance_param,
- .send_len = sizeof(set_appearance_param),
- .expect_status = MGMT_STATUS_NOT_SUPPORTED,
- .expect_param = NULL,
- .expect_len = 0,
- };
- static const struct generic_data set_appearance_success = {
- .send_opcode = MGMT_OP_SET_APPEARANCE,
- .send_param = set_appearance_param,
- .send_len = sizeof(set_appearance_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = NULL,
- .expect_len = 0,
- };
- static const uint8_t read_adv_features_rsp_3[] = {
- 0xff, 0xff, 0x01, 0x00, /* supported flags */
- 0x1f, /* max_adv_data_len */
- 0x1f, /* max_scan_rsp_len */
- 0x03, /* max_instances */
- 0x00, /* num_instances */
- };
- static const struct generic_data read_adv_features_success_3 = {
- .send_opcode = MGMT_OP_READ_ADV_FEATURES,
- .expect_param = read_adv_features_rsp_3,
- .expect_len = sizeof(read_adv_features_rsp_3),
- .expect_status = MGMT_STATUS_SUCCESS,
- };
- /* add advertising with multiple phy flags */
- static const uint8_t add_ext_advertising_invalid_param_1[] = {
- 0x01, /* adv instance */
- 0x80, 0x01, 0x00, 0x00, /* flags: 1m and 2m*/
- 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
- 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
- };
- static const struct generic_data add_ext_advertising_fail_1 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_ext_advertising_invalid_param_1,
- .send_len = sizeof(add_ext_advertising_invalid_param_1),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- /* add advertising with multiple phy flags */
- static const uint8_t add_ext_advertising_invalid_param_2[] = {
- 0x01, /* adv instance */
- 0x00, 0x03, 0x00, 0x00, /* flags: 2m and coded*/
- 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
- 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
- };
- static const struct generic_data add_ext_advertising_fail_2 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_ext_advertising_invalid_param_2,
- .send_len = sizeof(add_ext_advertising_invalid_param_2),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- /* add advertising with multiple phy flags */
- static const uint8_t add_ext_advertising_invalid_param_3[] = {
- 0x01, /* adv instance */
- 0x80, 0x02, 0x00, 0x00, /* flags: 1m and coded*/
- 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
- 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
- };
- static const struct generic_data add_ext_advertising_fail_3 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_ext_advertising_invalid_param_3,
- .send_len = sizeof(add_ext_advertising_invalid_param_3),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- /* add advertising with multiple phy flags */
- static const uint8_t add_ext_advertising_invalid_param_4[] = {
- 0x01, /* adv instance */
- 0x80, 0x03, 0x00, 0x00, /* flags: 1m, 2m and coded*/
- 0x00, 0x00, 0x00, 0x00, 0x09, 0x00,
- 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
- };
- static const struct generic_data add_ext_advertising_fail_4 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_ext_advertising_invalid_param_4,
- .send_len = sizeof(add_ext_advertising_invalid_param_4),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const uint8_t set_ext_adv_data_uuid[] = {
- /* handle */
- 0x01,
- /* complete data */
- 0x03,
- /* controller should not fragment */
- 0x01,
- /* adv data len */
- 0x09,
- /* advertise heart rate monitor and manufacturer specific data */
- 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
- };
- static const struct generic_data add_ext_advertising_success_1 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_uuid,
- .send_len = sizeof(add_advertising_param_uuid),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_alt_ev = MGMT_EV_ADVERTISING_ADDED,
- .expect_alt_ev_param = advertising_instance1_param,
- .expect_alt_ev_len = sizeof(advertising_instance1_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_DATA,
- .expect_hci_param = set_ext_adv_data_uuid,
- .expect_hci_len = sizeof(set_ext_adv_data_uuid),
- };
- static const uint8_t set_ext_adv_data_test1[] = {
- 0x01, /* handle */
- 0x03, /* complete data */
- 0x01, /* controller should not fragment */
- 0x07, /* adv data len */
- 0x06, /* AD len */
- 0x08, /* AD type: shortened local name */
- 0x74, 0x65, 0x73, 0x74, 0x31, /* "test1" */
- };
- static const struct generic_data add_ext_advertising_success_pwron_data = {
- .send_opcode = MGMT_OP_SET_POWERED,
- .send_param = set_powered_on_param,
- .send_len = sizeof(set_powered_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_powered_adv_instance_settings_param,
- .expect_len = sizeof(set_powered_adv_instance_settings_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_DATA,
- .expect_hci_param = set_ext_adv_data_test1,
- .expect_hci_len = sizeof(set_ext_adv_data_test1),
- };
- static const char set_ext_adv_on_set_adv_enable_param[] = {
- 0x01, /* Enable */
- 0x01, /* No of sets */
- 0x01, /* Handle */
- 0x00, 0x00, /* Duration */
- 0x00, /* Max events */
- };
- static const struct generic_data add_ext_advertising_success_pwron_enabled = {
- .send_opcode = MGMT_OP_SET_POWERED,
- .send_param = set_powered_on_param,
- .send_len = sizeof(set_powered_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_powered_adv_instance_settings_param,
- .expect_len = sizeof(set_powered_adv_instance_settings_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_ENABLE,
- .expect_hci_param = set_ext_adv_on_set_adv_enable_param,
- .expect_hci_len = sizeof(set_ext_adv_on_set_adv_enable_param),
- };
- static const uint8_t set_ext_adv_data_txpwr[] = {
- 0x00, /* handle */
- 0x03, /* complete data */
- 0x01, /* controller should not fragment */
- 0x03, /* adv data len */
- 0x02, /* AD len */
- 0x0a, /* AD type: tx power */
- 0x00, /* tx power */
- };
- static const struct generic_data add_ext_advertising_success_4 = {
- .send_opcode = MGMT_OP_SET_ADVERTISING,
- .send_param = set_adv_on_param,
- .send_len = sizeof(set_adv_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_adv_settings_param_2,
- .expect_len = sizeof(set_adv_settings_param_2),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_DATA,
- .expect_hci_param = set_ext_adv_data_txpwr,
- .expect_hci_len = sizeof(set_ext_adv_data_txpwr),
- };
- static const struct generic_data add_ext_advertising_success_5 = {
- .send_opcode = MGMT_OP_SET_ADVERTISING,
- .send_param = set_adv_off_param,
- .send_len = sizeof(set_adv_off_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_powered_adv_instance_settings_param,
- .expect_len = sizeof(set_powered_adv_instance_settings_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_DATA,
- .expect_hci_param = set_ext_adv_data_test1,
- .expect_hci_len = sizeof(set_ext_adv_data_test1),
- };
- static const struct generic_data add_ext_advertising_success_6 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_scanrsp,
- .send_len = sizeof(add_advertising_param_scanrsp),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_alt_ev = MGMT_EV_ADVERTISING_ADDED,
- .expect_alt_ev_param = advertising_instance1_param,
- .expect_alt_ev_len = sizeof(advertising_instance1_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_DATA,
- .expect_hci_param = set_ext_adv_data_uuid,
- .expect_hci_len = sizeof(set_ext_adv_data_uuid),
- };
- static const uint8_t set_ext_scan_rsp_uuid[] = {
- 0x01, /* handle */
- 0x03, /* complete data */
- 0x01, /* controller should not fragment */
- 0x0a, /* scan rsp data len */
- 0x03, /* AD len */
- 0x19, /* AD type: external appearance */
- 0x40, 0x03, /* some custom appearance */
- 0x05, /* AD len */
- 0x03, /* AD type: all 16 bit service class UUIDs */
- 0x0d, 0x18, 0x0f, 0x18, /* heart rate monitor, battery service */
- };
- static const struct generic_data add_ext_advertising_success_7 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_scanrsp,
- .send_len = sizeof(add_advertising_param_scanrsp),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_alt_ev = MGMT_EV_ADVERTISING_ADDED,
- .expect_alt_ev_param = advertising_instance1_param,
- .expect_alt_ev_len = sizeof(advertising_instance1_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_RSP_DATA,
- .expect_hci_param = set_ext_scan_rsp_uuid,
- .expect_hci_len = sizeof(set_ext_scan_rsp_uuid),
- };
- static uint8_t set_connectable_on_ext_adv_param[] = {
- 0x01, /* Handle */
- 0x13, 0x00, /* Event type */
- 0x00, 0x08, 0x00, /* min_interval */
- 0x00, 0x08, 0x00, /* max_interval */
- 0x07, /* channel_map */
- 0x00, /* own_addr_type */
- 0x00, /* peer_addr_type */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
- 0x00, /* filter_policy */
- 127, /* Tx power */
- 0x01, /* Primary PHY */
- 0x00, /* primary adv max skip */
- 0x01, /* Secondary PHY */
- 0x00, /* adv sid*/
- 0x00, /* Scan req notification */
- };
- static const struct generic_data add_ext_advertising_success_8 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_connectable,
- .send_len = sizeof(add_advertising_param_connectable),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
- .expect_hci_param = set_connectable_on_ext_adv_param,
- .expect_hci_len = sizeof(set_connectable_on_ext_adv_param),
- };
- static const uint8_t set_ext_adv_data_general_discov[] = {
- 0x01, /* handle */
- 0x03, /* complete data */
- 0x01, /* controller should not fragment */
- 0x0c, /* adv data len */
- 0x02, /* AD len */
- 0x01, /* AD type: flags */
- 0x02, /* general discoverable */
- 0x03, /* AD len */
- 0x02, /* AD type: some 16bit service class UUIDs */
- 0x0d, 0x18, /* heart rate monitor */
- 0x04, /* AD len */
- 0xff, /* AD type: manufacturer specific data */
- 0x01, 0x02, 0x03, /* custom advertising data */
- };
- static const uint8_t set_ext_adv_data_limited_discov[] = {
- 0x01, /* handle */
- 0x03, /* complete data */
- 0x01, /* controller should not fragment */
- 0x0c, /* adv data len */
- 0x02, /* AD len */
- 0x01, /* AD type: flags */
- 0x01, /* limited discoverable */
- /* rest: same as before */
- 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
- };
- static const uint8_t set_ext_adv_data_uuid_txpwr[] = {
- 0x01, /* handle */
- 0x03, /* complete data */
- 0x01, /* controller should not fragment */
- 0x0c, /* adv data len */
- 0x03, /* AD len */
- 0x02, /* AD type: some 16bit service class UUIDs */
- 0x0d, 0x18, /* heart rate monitor */
- 0x04, /* AD len */
- 0xff, /* AD type: manufacturer specific data */
- 0x01, 0x02, 0x03, /* custom advertising data */
- 0x02, /* AD len */
- 0x0a, /* AD type: tx power */
- 0x00, /* tx power */
- };
- static const struct generic_data add_ext_advertising_success_9 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_general_discov,
- .send_len = sizeof(add_advertising_param_general_discov),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_DATA,
- .expect_hci_param = set_ext_adv_data_general_discov,
- .expect_hci_len = sizeof(set_ext_adv_data_general_discov),
- };
- static const struct generic_data add_ext_advertising_success_10 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_limited_discov,
- .send_len = sizeof(add_advertising_param_limited_discov),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_DATA,
- .expect_hci_param = set_ext_adv_data_limited_discov,
- .expect_hci_len = sizeof(set_ext_adv_data_limited_discov),
- };
- static const struct generic_data add_ext_advertising_success_11 = {
- .setup_settings = settings_powered_le_discoverable,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_managed,
- .send_len = sizeof(add_advertising_param_managed),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_DATA,
- .expect_hci_param = set_ext_adv_data_general_discov,
- .expect_hci_len = sizeof(set_ext_adv_data_general_discov),
- };
- static const struct generic_data add_ext_advertising_success_12 = {
- .setup_settings = settings_powered_le_discoverable,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_txpwr,
- .send_len = sizeof(add_advertising_param_txpwr),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_DATA,
- .expect_hci_param = set_ext_adv_data_uuid_txpwr,
- .expect_hci_len = sizeof(set_ext_adv_data_uuid_txpwr),
- };
- static uint8_t set_connectable_off_scan_ext_adv_param[] = {
- 0x01, /* Handle */
- 0x12, 0x00, /* Event type */
- 0x00, 0x08, 0x00, /* min_interval */
- 0x00, 0x08, 0x00, /* max_interval */
- 0x07, /* channel_map */
- 0x01, /* own_addr_type */
- 0x00, /* peer_addr_type */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
- 0x00, /* filter_policy */
- 127, /* Tx power */
- 0x01, /* Primary PHY */
- 0x00, /* primary adv max skip */
- 0x01, /* Secondary PHY */
- 0x00, /* adv sid*/
- 0x00, /* Scan req notification */
- };
- static const struct generic_data add_ext_advertising_success_13 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_scanrsp,
- .send_len = sizeof(add_advertising_param_scanrsp),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
- .expect_hci_param = set_connectable_off_scan_ext_adv_param,
- .expect_hci_len = sizeof(set_connectable_off_scan_ext_adv_param),
- };
- static uint8_t set_connectable_off_ext_adv_param[] = {
- 0x01, /* Handle */
- 0x10, 0x00, /* Event type */
- 0x00, 0x08, 0x00, /* min_interval */
- 0x00, 0x08, 0x00, /* max_interval */
- 0x07, /* channel_map */
- 0x01, /* own_addr_type */
- 0x00, /* peer_addr_type */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
- 0x00, /* filter_policy */
- 127, /* Tx power */
- 0x01, /* Primary PHY */
- 0x00, /* primary adv max skip */
- 0x01, /* Secondary PHY */
- 0x00, /* adv sid*/
- 0x00, /* Scan req notification */
- };
- static const struct generic_data add_ext_advertising_success_14 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_uuid,
- .send_len = sizeof(add_advertising_param_uuid),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
- .expect_hci_param = set_connectable_off_ext_adv_param,
- .expect_hci_len = sizeof(set_connectable_off_ext_adv_param),
- };
- static const struct generic_data add_ext_advertising_success_15 = {
- .setup_settings = settings_powered_le_connectable,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_uuid,
- .send_len = sizeof(add_advertising_param_uuid),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
- .expect_hci_param = set_connectable_on_ext_adv_param,
- .expect_hci_len = sizeof(set_connectable_on_ext_adv_param),
- };
- static uint8_t preset_connectable_on_ext_adv_param[] = {
- 0x01, /* Handle */
- 0x13, 0x00, /* Event type */
- 0x00, 0x08, 0x00, /* min_interval */
- 0x00, 0x08, 0x00, /* max_interval */
- 0x07, /* channel_map */
- 0x00, /* own_addr_type */
- 0x00, /* peer_addr_type */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
- 0x00, /* filter_policy */
- 0x00, /* Tx power */
- 0x01, /* Primary PHY */
- 0x00, /* primary adv max skip */
- 0x01, /* Secondary PHY */
- 0x00, /* adv sid*/
- 0x00, /* Scan req notification */
- };
- static const struct generic_data add_ext_advertising_success_16 = {
- .send_opcode = MGMT_OP_SET_CONNECTABLE,
- .send_param = set_connectable_on_param,
- .send_len = sizeof(set_connectable_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_connectable_settings_param_3,
- .expect_len = sizeof(set_connectable_settings_param_3),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
- .expect_hci_param = preset_connectable_on_ext_adv_param,
- .expect_hci_len = sizeof(preset_connectable_on_ext_adv_param),
- };
- static uint8_t preset_connectable_off_ext_adv_param[] = {
- 0x01, /* Handle */
- 0x10, 0x00, /* Event type */
- 0x00, 0x08, 0x00, /* min_interval */
- 0x00, 0x08, 0x00, /* max_interval */
- 0x07, /* channel_map */
- 0x01, /* own_addr_type */
- 0x00, /* peer_addr_type */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
- 0x00, /* filter_policy */
- 0x00, /* Tx power */
- 0x01, /* Primary PHY */
- 0x00, /* primary adv max skip */
- 0x01, /* Secondary PHY */
- 0x00, /* adv sid*/
- 0x00, /* Scan req notification */
- };
- static const struct generic_data add_ext_advertising_success_17 = {
- .send_opcode = MGMT_OP_SET_CONNECTABLE,
- .send_param = set_connectable_off_param,
- .send_len = sizeof(set_connectable_off_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_le_settings_param_2,
- .expect_len = sizeof(set_le_settings_param_2),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
- .expect_hci_param = preset_connectable_off_ext_adv_param,
- .expect_hci_len = sizeof(preset_connectable_off_ext_adv_param),
- };
- static const struct generic_data add_ext_advertising_le_off = {
- .send_opcode = MGMT_OP_SET_LE,
- .send_param = set_le_off_param,
- .send_len = sizeof(set_le_off_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_le_settings_param_off,
- .expect_len = sizeof(set_le_settings_param_off),
- .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
- .expect_alt_ev_param = advertising_instance1_param,
- .expect_alt_ev_len = sizeof(advertising_instance1_param),
- };
- static const struct generic_data add_ext_advertising_success_18 = {
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_uuid,
- .send_len = sizeof(add_advertising_param_uuid),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_DATA,
- .expect_hci_param = set_ext_adv_data_uuid,
- .expect_hci_len = sizeof(set_ext_adv_data_uuid),
- };
- static const char set_ext_adv_disable_param[] = {
- 0x00, 0x00,
- };
- static const char set_ext_adv_disable_param_1[] = {
- 0x00, 0x01, 0x01, 0x00, 0x00, 0x00
- };
- static const struct generic_data add_ext_advertising_timeout_expired = {
- .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
- .expect_alt_ev_param = advertising_instance1_param,
- .expect_alt_ev_len = sizeof(advertising_instance1_param),
- };
- static const struct generic_data remove_ext_advertising_fail_1 = {
- .send_opcode = MGMT_OP_REMOVE_ADVERTISING,
- .send_param = remove_advertising_param_1,
- .send_len = sizeof(remove_advertising_param_1),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const struct generic_data remove_ext_advertising_success_1 = {
- .send_opcode = MGMT_OP_REMOVE_ADVERTISING,
- .send_param = remove_advertising_param_1,
- .send_len = sizeof(remove_advertising_param_1),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = remove_advertising_param_1,
- .expect_len = sizeof(remove_advertising_param_1),
- .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
- .expect_alt_ev_param = advertising_instance1_param,
- .expect_alt_ev_len = sizeof(advertising_instance1_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_ENABLE,
- .expect_hci_param = set_ext_adv_disable_param_1,
- .expect_hci_len = sizeof(set_ext_adv_disable_param_1),
- };
- static const struct generic_data remove_ext_advertising_success_2 = {
- .send_opcode = MGMT_OP_REMOVE_ADVERTISING,
- .send_param = remove_advertising_param_2,
- .send_len = sizeof(remove_advertising_param_2),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = remove_advertising_param_2,
- .expect_len = sizeof(remove_advertising_param_2),
- .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
- .expect_alt_ev_param = advertising_instance1_param,
- .expect_alt_ev_len = sizeof(advertising_instance1_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_ENABLE,
- .expect_hci_param = set_ext_adv_disable_param,
- .expect_hci_len = sizeof(set_ext_adv_disable_param),
- };
- static const uint8_t set_ext_adv_data_test2[] = {
- 0x02, /* handle */
- 0x03, /* complete data */
- 0x01, /* controller should not fragment */
- 0x07, /* adv data len */
- 0x06, /* AD len */
- 0x08, /* AD type: shortened local name */
- 0x74, 0x65, 0x73, 0x74, 0x32, /* "test2" */
- };
- static const struct generic_data multi_ext_advertising = {
- .expect_alt_ev = MGMT_EV_ADVERTISING_REMOVED,
- .expect_alt_ev_param = advertising_instance1_param,
- .expect_alt_ev_len = sizeof(advertising_instance1_param),
- };
- static const struct generic_data multi_ext_advertising_add_second = {
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_test2,
- .send_len = sizeof(add_advertising_param_test2),
- .expect_param = advertising_instance2_param,
- .expect_len = sizeof(advertising_instance2_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_alt_ev = MGMT_EV_ADVERTISING_ADDED,
- .expect_alt_ev_param = advertising_instance2_param,
- .expect_alt_ev_len = sizeof(advertising_instance2_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_DATA,
- .expect_hci_param = set_ext_adv_data_test2,
- .expect_hci_len = sizeof(set_ext_adv_data_test2),
- };
- static const struct generic_data add_ext_advertising_empty_scrsp = {
- .setup_settings = settings_powered_le,
- .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
- .setup_send_param = set_local_name_param,
- .setup_send_len = sizeof(set_local_name_param),
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_empty,
- .send_len = sizeof(add_advertising_param_empty),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- };
- static const struct generic_data add_ext_advertising_scrsp_data_only_ok = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_scrsp_data_only_ok,
- .send_len = sizeof(add_advertising_param_scrsp_data_only_ok),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- };
- static const struct generic_data add_ext_advertising_scrsp_data_only_too_long = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_scrsp_data_only_too_long,
- .send_len = sizeof(add_advertising_param_scrsp_data_only_too_long),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- .expect_param = NULL,
- .expect_len = 0,
- };
- static const struct generic_data add_ext_advertising_scrsp_appear_data_ok = {
- .setup_settings = settings_powered_le,
- .setup_send_opcode = MGMT_OP_SET_APPEARANCE,
- .setup_send_param = set_appearance_param,
- .setup_send_len = sizeof(set_appearance_param),
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_scrsp_appear_data_ok,
- .send_len = sizeof(add_advertising_param_scrsp_appear_data_ok),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- };
- static const struct generic_data add_ext_advertising_scrsp_appear_data_too_long = {
- .setup_settings = settings_powered_le,
- .setup_send_opcode = MGMT_OP_SET_APPEARANCE,
- .setup_send_param = set_appearance_param,
- .setup_send_len = sizeof(set_appearance_param),
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_scrsp_appear_data_too_long,
- .send_len = sizeof(add_advertising_param_scrsp_appear_data_too_long),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- .expect_param = NULL,
- .expect_len = 0,
- };
- static const struct generic_data add_ext_advertising_scrsp_appear_null = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_scrsp_appear_null,
- .send_len = sizeof(add_advertising_param_scrsp_appear_null),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- };
- static const uint8_t ext_scan_rsp_data_empty[] = {
- 0x01, /* handle */
- 0x03, /* complete data */
- 0x01, /* controller should not fragment */
- 0x01, /* scan rsp data len */
- 0x00, /* scan rsp data */
- };
- static const struct generic_data add_ext_advertising_no_name_set = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_empty_param,
- .send_len = sizeof(add_advertising_empty_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_RSP_DATA,
- .expect_hci_param = ext_scan_rsp_data_empty,
- .expect_hci_len = sizeof(ext_scan_rsp_data_empty),
- };
- static const uint8_t set_ext_scan_rsp_data_name_fits_in_scrsp[] = {
- 0x01, /* handle */
- 0x03, /* complete data */
- 0x01, /* controller should not fragment */
- 0x0c, /* Scan rsp data len */
- 0x0b, /* Local name data len */
- 0x09, /* Complete name */
- /* "Test name" */
- 0x54, 0x65, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x00,
- };
- static const struct generic_data add_ext_advertising_name_fits_in_scrsp = {
- .setup_settings = settings_powered_le,
- .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
- .setup_send_param = &set_local_name_cp,
- .setup_send_len = sizeof(set_local_name_cp),
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_name,
- .send_len = sizeof(add_advertising_param_name),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_RSP_DATA,
- .expect_hci_param = set_ext_scan_rsp_data_name_fits_in_scrsp,
- .expect_hci_len = sizeof(set_ext_scan_rsp_data_name_fits_in_scrsp),
- };
- static const uint8_t set_ext_scan_rsp_data_shortened_name_fits[] = {
- 0x01, /* handle */
- 0x03, /* complete data */
- 0x01, /* controller should not fragment */
- 0x0d, /* Scan rsp data len */
- 0x0c, /* Local name data len */
- 0x08, /* Short name */
- /* "Test name1" */
- 0x54, 0x65, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x31, 0x00,
- };
- static const struct generic_data add_ext_advertising_shortened_name_in_scrsp = {
- .setup_settings = settings_powered_le,
- .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
- .setup_send_param = &set_local_name_longer_cp,
- .setup_send_len = sizeof(set_local_name_longer_cp),
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_name,
- .send_len = sizeof(add_advertising_param_name),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_RSP_DATA,
- .expect_hci_param = set_ext_scan_rsp_data_shortened_name_fits,
- .expect_hci_len = sizeof(set_ext_scan_rsp_data_shortened_name_fits),
- };
- static const uint8_t set_ext_scan_rsp_data_param_name_data_ok[] = {
- 0x01, /* handle */
- 0x03, /* complete data */
- 0x01, /* controller should not fragment */
- 0x1e, /* Scan rsp data len */
- /* scan rsp data */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x0b, /* Local name data len */
- 0x09, /* Complete name */
- 0x54, 0x65, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x00,
- /* "Test name" */
- };
- static const struct generic_data add_ext_advertising_name_data_ok = {
- .setup_settings = settings_powered_le,
- .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
- .setup_send_param = &set_local_name_cp,
- .setup_send_len = sizeof(set_local_name_cp),
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_name_data_ok,
- .send_len = sizeof(add_advertising_param_name_data_ok),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_RSP_DATA,
- .expect_hci_param = set_ext_scan_rsp_data_param_name_data_ok,
- .expect_hci_len = sizeof(set_ext_scan_rsp_data_param_name_data_ok),
- };
- static const struct generic_data add_ext_advertising_name_data_inv = {
- .setup_settings = settings_powered_le,
- .setup_send_opcode = MGMT_OP_SET_LOCAL_NAME,
- .setup_send_param = &set_local_name_cp,
- .setup_send_len = sizeof(set_local_name_cp),
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_name_data_inv,
- .send_len = sizeof(add_advertising_param_name_data_inv),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- .expect_param = NULL,
- .expect_len = 0,
- };
- static const uint8_t set_ext_scan_rsp_data_name_data_appear[] = {
- 0x01, /* handle */
- 0x03, /* complete data */
- 0x01, /* controller should not fragment */
- 0x1e, /* Scan rsp data len */
- 0x03, /* appearance len */
- 0x19, /* EIR_APPEARANCE */
- 0x54, 0x65, /* appearance value */
- /* scan rsp data */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x0b, /* Local name data len */
- 0x09, /* Complete name */
- 0x54, 0x65, 0x73, 0x74, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x00,
- /* "Test name" */
- };
- static const struct generic_data add_ext_advertising_name_data_appear = {
- .setup_settings = settings_powered_le,
- .setup_mgmt_cmd_arr = add_advertising_mgmt_cmd_arr,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_name_data_appear,
- .send_len = sizeof(add_advertising_param_name_data_appear),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_RSP_DATA,
- .expect_hci_param = set_ext_scan_rsp_data_name_data_appear,
- .expect_hci_len = sizeof(set_ext_scan_rsp_data_name_data_appear),
- };
- /* simple add advertising command */
- static const uint8_t add_advertising_1m_param_uuid[] = {
- 0x01, /* adv instance */
- 0x80, 0x00, 0x00, 0x00, /* flags: 1m */
- 0x00, 0x00, /* duration: default */
- 0x00, 0x00, /* timeout: none */
- 0x09, /* adv data len */
- 0x00, /* scan rsp len */
- /* adv data: */
- 0x03, /* AD len */
- 0x02, /* AD type: some 16 bit service class UUIDs */
- 0x0d, 0x18, /* heart rate monitor */
- 0x04, /* AD len */
- 0xff, /* AD type: manufacturer specific data */
- 0x01, 0x02, 0x03, /* custom advertising data */
- };
- static uint8_t set_connectable_off_ext_1m_adv_param[] = {
- 0x01, /* Handle */
- 0x00, 0x00, /* Event type */
- 0x00, 0x08, 0x00, /* min_interval */
- 0x00, 0x08, 0x00, /* max_interval */
- 0x07, /* channel_map */
- 0x01, /* own_addr_type */
- 0x00, /* peer_addr_type */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
- 0x00, /* filter_policy */
- 127, /* Tx power */
- 0x01, /* Primary PHY */
- 0x00, /* primary adv max skip */
- 0x01, /* Secondary PHY */
- 0x00, /* adv sid*/
- 0x00, /* Scan req notification */
- };
- static const struct generic_data add_ext_advertising_success_1m = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_1m_param_uuid,
- .send_len = sizeof(add_advertising_1m_param_uuid),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
- .expect_hci_param = set_connectable_off_ext_1m_adv_param,
- .expect_hci_len = sizeof(set_connectable_off_ext_1m_adv_param),
- };
- /* simple add advertising command */
- static const uint8_t add_advertising_2m_param_uuid[] = {
- 0x01, /* adv instance */
- 0x00, 0x01, 0x00, 0x00, /* flags: 2m */
- 0x00, 0x00, /* duration: default */
- 0x00, 0x00, /* timeout: none */
- 0x09, /* adv data len */
- 0x00, /* scan rsp len */
- /* adv data: */
- 0x03, /* AD len */
- 0x02, /* AD type: some 16 bit service class UUIDs */
- 0x0d, 0x18, /* heart rate monitor */
- 0x04, /* AD len */
- 0xff, /* AD type: manufacturer specific data */
- 0x01, 0x02, 0x03, /* custom advertising data */
- };
- static uint8_t set_connectable_off_ext_2m_adv_param[] = {
- 0x01, /* Handle */
- 0x00, 0x00, /* Event type */
- 0x00, 0x08, 0x00, /* min_interval */
- 0x00, 0x08, 0x00, /* max_interval */
- 0x07, /* channel_map */
- 0x01, /* own_addr_type */
- 0x00, /* peer_addr_type */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
- 0x00, /* filter_policy */
- 127, /* Tx power */
- 0x01, /* Primary PHY */
- 0x00, /* primary adv max skip */
- 0x02, /* Secondary PHY */
- 0x00, /* adv sid*/
- 0x00, /* Scan req notification */
- };
- static const struct generic_data add_ext_advertising_success_2m = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_2m_param_uuid,
- .send_len = sizeof(add_advertising_2m_param_uuid),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
- .expect_hci_param = set_connectable_off_ext_2m_adv_param,
- .expect_hci_len = sizeof(set_connectable_off_ext_2m_adv_param),
- };
- /* simple add advertising command */
- static const uint8_t add_advertising_coded_param_uuid[] = {
- 0x01, /* adv instance */
- 0x00, 0x02, 0x00, 0x00, /* flags: coded */
- 0x00, 0x00, /* duration: default */
- 0x00, 0x00, /* timeout: none */
- 0x09, /* adv data len */
- 0x00, /* scan rsp len */
- /* adv data: */
- 0x03, /* AD len */
- 0x02, /* AD type: some 16 bit service class UUIDs */
- 0x0d, 0x18, /* heart rate monitor */
- 0x04, /* AD len */
- 0xff, /* AD type: manufacturer specific data */
- 0x01, 0x02, 0x03, /* custom advertising data */
- };
- static uint8_t set_connectable_off_ext_coded_adv_param[] = {
- 0x01, /* Handle */
- 0x00, 0x00, /* Event type */
- 0x00, 0x08, 0x00, /* min_interval */
- 0x00, 0x08, 0x00, /* max_interval */
- 0x07, /* channel_map */
- 0x01, /* own_addr_type */
- 0x00, /* peer_addr_type */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
- 0x00, /* filter_policy */
- 127, /* Tx power */
- 0x03, /* Primary PHY */
- 0x00, /* primary adv max skip */
- 0x03, /* Secondary PHY */
- 0x00, /* adv sid*/
- 0x00, /* Scan req notification */
- };
- static const struct generic_data add_ext_advertising_success_coded = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_coded_param_uuid,
- .send_len = sizeof(add_advertising_coded_param_uuid),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
- .expect_hci_param = set_connectable_off_ext_coded_adv_param,
- .expect_hci_len = sizeof(set_connectable_off_ext_coded_adv_param),
- };
- /* add advertising with scan response data */
- static const uint8_t add_advertising_param_scanrsp_1m[] = {
- 0x01, /* Instance */
- 0x80, 0x00, 0x00, 0x00, /* Flags: 1m*/
- 0x00, 0x00, /* Duration */
- 0x00, 0x00, /* Timeout */
- 0x09, /* Adv data len */
- 0x0a, /* scan rsp len */
- /* adv data: same as before */
- 0x03, 0x02, 0x0d, 0x18, 0x04, 0xff, 0x01, 0x02, 0x03,
- /* scan rsp data: */
- 0x03, /* AD len */
- 0x19, /* AD type: external appearance */
- 0x40, 0x03, /* some custom appearance */
- 0x05, /* AD len */
- 0x03, /* AD type: all 16 bit service class UUIDs */
- 0x0d, 0x18, /* heart rate monitor */
- 0x0f, 0x18, /* battery service */
- };
- static uint8_t set_connectable_off_scan_ext_pdu_adv_param[] = {
- 0x01, /* Handle */
- 0x02, 0x00, /* Event type */
- 0x00, 0x08, 0x00, /* min_interval */
- 0x00, 0x08, 0x00, /* max_interval */
- 0x07, /* channel_map */
- 0x01, /* own_addr_type */
- 0x00, /* peer_addr_type */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
- 0x00, /* filter_policy */
- 127, /* Tx power */
- 0x01, /* Primary PHY */
- 0x00, /* primary adv max skip */
- 0x01, /* Secondary PHY */
- 0x00, /* adv sid*/
- 0x00, /* Scan req notification */
- };
- static const struct generic_data add_ext_advertising_success_scannable = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_scanrsp_1m,
- .send_len = sizeof(add_advertising_param_scanrsp_1m),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
- .expect_hci_param = set_connectable_off_scan_ext_pdu_adv_param,
- .expect_hci_len = sizeof(set_connectable_off_scan_ext_pdu_adv_param),
- };
- static uint8_t set_connectable_on_ext_pdu_adv_param[] = {
- 0x01, /* Handle */
- 0x01, 0x00, /* Event type */
- 0x00, 0x08, 0x00, /* min_interval */
- 0x00, 0x08, 0x00, /* max_interval */
- 0x07, /* channel_map */
- 0x00, /* own_addr_type */
- 0x00, /* peer_addr_type */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
- 0x00, /* filter_policy */
- 127, /* Tx power */
- 0x01, /* Primary PHY */
- 0x00, /* primary adv max skip */
- 0x01, /* Secondary PHY */
- 0x00, /* adv sid*/
- 0x00, /* Scan req notification */
- };
- static const struct generic_data add_ext_advertising_success_connectable = {
- .setup_settings = settings_powered_le_connectable,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_1m_param_uuid,
- .send_len = sizeof(add_advertising_1m_param_uuid),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
- .expect_hci_param = set_connectable_on_ext_pdu_adv_param,
- .expect_hci_len = sizeof(set_connectable_on_ext_pdu_adv_param),
- };
- static const struct generic_data add_ext_advertising_success_conn_scan = {
- .setup_settings = settings_powered_le_connectable,
- .send_opcode = MGMT_OP_ADD_ADVERTISING,
- .send_param = add_advertising_param_scanrsp_1m,
- .send_len = sizeof(add_advertising_param_scanrsp_1m),
- .expect_param = advertising_instance1_param,
- .expect_len = sizeof(advertising_instance1_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
- .expect_hci_param = set_connectable_on_ext_pdu_adv_param,
- .expect_hci_len = sizeof(set_connectable_on_ext_pdu_adv_param),
- };
- static void setup_add_adv_param_1m(struct mgmt_cp_add_advertising *cp,
- uint8_t instance)
- {
- memset(cp, 0, sizeof(*cp));
- cp->instance = instance;
- cp->flags = cpu_to_le32(MGMT_ADV_FLAG_SEC_1M);
- cp->adv_data_len = TESTER_ADD_ADV_DATA_LEN;
- cp->data[0] = TESTER_ADD_ADV_DATA_LEN - 1; /* AD len */
- cp->data[1] = 0x08; /* AD type: shortened local name */
- cp->data[2] = 't'; /* adv data ... */
- cp->data[3] = 'e';
- cp->data[4] = 's';
- cp->data[5] = 't';
- cp->data[6] = '0' + instance;
- }
- static void setup_add_advertising_1m(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- struct mgmt_cp_add_advertising *cp;
- unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
- unsigned char param[] = { 0x01 };
- tester_print("Adding advertising instance while powered");
- cp = (struct mgmt_cp_add_advertising *) adv_param;
- setup_add_adv_param_1m(cp, 1);
- mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
- sizeof(param), ¶m,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
- sizeof(param), ¶m,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
- sizeof(adv_param), adv_param,
- setup_add_advertising_callback,
- NULL, NULL);
- }
- static uint8_t preset_connectable_on_ext_pdu_adv_param[] = {
- 0x01, /* Handle */
- 0x01, 0x00, /* Event type */
- 0x00, 0x08, 0x00, /* min_interval */
- 0x00, 0x08, 0x00, /* max_interval */
- 0x07, /* channel_map */
- 0x00, /* own_addr_type */
- 0x00, /* peer_addr_type */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
- 0x00, /* filter_policy */
- 0x00, /* Tx power */
- 0x01, /* Primary PHY */
- 0x00, /* primary adv max skip */
- 0x01, /* Secondary PHY */
- 0x00, /* adv sid*/
- 0x00, /* Scan req notification */
- };
- static const struct generic_data add_ext_advertising_conn_on_1m = {
- .send_opcode = MGMT_OP_SET_CONNECTABLE,
- .send_param = set_connectable_on_param,
- .send_len = sizeof(set_connectable_on_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_connectable_settings_param_3,
- .expect_len = sizeof(set_connectable_settings_param_3),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
- .expect_hci_param = preset_connectable_on_ext_pdu_adv_param,
- .expect_hci_len = sizeof(preset_connectable_on_ext_pdu_adv_param),
- };
- static void setup_add_advertising_connectable_1m(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- struct mgmt_cp_add_advertising *cp;
- unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
- unsigned char param[] = { 0x01 };
- tester_print("Adding advertising instance while connectable");
- cp = (struct mgmt_cp_add_advertising *) adv_param;
- setup_add_adv_param_1m(cp, 1);
- mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
- sizeof(param), ¶m,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
- sizeof(param), ¶m,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_CONNECTABLE, data->mgmt_index,
- sizeof(param), ¶m,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
- sizeof(adv_param), adv_param,
- setup_add_advertising_callback,
- NULL, NULL);
- }
- static uint8_t preset_connectable_off_ext_1m_adv_param[] = {
- 0x01, /* Handle */
- 0x00, 0x00, /* Event type */
- 0x00, 0x08, 0x00, /* min_interval */
- 0x00, 0x08, 0x00, /* max_interval */
- 0x07, /* channel_map */
- 0x01, /* own_addr_type */
- 0x00, /* peer_addr_type */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* peer_addr */
- 0x00, /* filter_policy */
- 0x00, /* Tx power */
- 0x01, /* Primary PHY */
- 0x00, /* primary adv max skip */
- 0x01, /* Secondary PHY */
- 0x00, /* adv sid*/
- 0x00, /* Scan req notification */
- };
- static const struct generic_data add_ext_advertising_conn_off_1m = {
- .send_opcode = MGMT_OP_SET_CONNECTABLE,
- .send_param = set_connectable_off_param,
- .send_len = sizeof(set_connectable_off_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_le_settings_param_2,
- .expect_len = sizeof(set_le_settings_param_2),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_PARAMS,
- .expect_hci_param = preset_connectable_off_ext_1m_adv_param,
- .expect_hci_len = sizeof(preset_connectable_off_ext_1m_adv_param),
- };
- static const uint8_t get_phy_param[] = {
- 0xff, 0x7f, 0x00, 0x00, /* All PHYs */
- 0xfe, 0x79, 0x00, 0x00, /* All PHYs except BR 1M 1SLOT, LE 1M TX & LE 1M RX */
- 0xff, 0x07, 0x00, 0x00, /* All BREDR PHYs and LE 1M TX & LE 1M RX */
- };
- static const struct generic_data get_phy_success = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_GET_PHY_CONFIGURATION,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = get_phy_param,
- .expect_len = sizeof(get_phy_param),
- };
- static const uint8_t set_phy_2m_param[] = {
- 0xff, 0x1f, 0x00, 0x00 /* 1mtxrx 2mtxrx */
- };
- static const uint8_t set_default_phy_2m_param[] = {
- 0x00, /* preference is there for tx and rx */
- 0x03, /* 1mtx, 2mtx */
- 0x03, /* 1mrx, 2mrx */
- };
- static const struct generic_data set_phy_2m_success = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_SET_PHY_CONFIGURATION,
- .send_param = set_phy_2m_param,
- .send_len = sizeof(set_phy_2m_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_DEFAULT_PHY,
- .expect_hci_param = set_default_phy_2m_param,
- .expect_hci_len = sizeof(set_default_phy_2m_param),
- .expect_alt_ev = MGMT_EV_PHY_CONFIGURATION_CHANGED,
- .expect_alt_ev_param = set_phy_2m_param,
- .expect_alt_ev_len = sizeof(set_phy_2m_param),
- };
- static const uint8_t set_phy_coded_param[] = {
- 0xff, 0x67, 0x00, 0x00 /* 1mtx, 1m rx, codedtx codedrx */
- };
- static const uint8_t set_default_phy_coded_param[] = {
- 0x00, /* preference is there for tx and rx */
- 0x05, /* 1mtx, codedtx */
- 0x05, /* 1mrx, codedrx */
- };
- static const struct generic_data set_phy_coded_success = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_SET_PHY_CONFIGURATION,
- .send_param = set_phy_coded_param,
- .send_len = sizeof(set_phy_coded_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_DEFAULT_PHY,
- .expect_hci_param = set_default_phy_coded_param,
- .expect_hci_len = sizeof(set_default_phy_coded_param),
- .expect_alt_ev = MGMT_EV_PHY_CONFIGURATION_CHANGED,
- .expect_alt_ev_param = set_phy_coded_param,
- .expect_alt_ev_len = sizeof(set_phy_coded_param),
- };
- static const uint8_t set_phy_all_param[] = {
- 0xff, 0x7f, 0x00, 0x00 /* All PHYs */
- };
- static const uint8_t set_default_phy_all_param[] = {
- 0x00, /* preference is there for tx and rx */
- 0x07, /* 1m 2m coded tx */
- 0x07, /* 1m 2m coded rx */
- };
- static const struct generic_data set_phy_all_success = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_SET_PHY_CONFIGURATION,
- .send_param = set_phy_all_param,
- .send_len = sizeof(set_phy_all_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_DEFAULT_PHY,
- .expect_hci_param = set_default_phy_all_param,
- .expect_hci_len = sizeof(set_default_phy_all_param),
- .expect_alt_ev = MGMT_EV_PHY_CONFIGURATION_CHANGED,
- .expect_alt_ev_param = set_phy_all_param,
- .expect_alt_ev_len = sizeof(set_phy_all_param),
- };
- static const uint8_t set_phy_2m_tx_param[] = {
- 0xff, 0x0f, 0x00, 0x00 /* 1mtxrx, 2m tx */
- };
- static const uint8_t set_default_phy_2m_tx_param[] = {
- 0x00,
- 0x03, /* 1m, 2m tx */
- 0x01, /* 1m rx */
- };
- static const uint8_t set_phy_2m_tx_evt_param[] = {
- 0xff, 0x0f, 0x00, 0x00 /* 2m tx 1m rx */
- };
- static const struct generic_data set_phy_2m_tx_success = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_SET_PHY_CONFIGURATION,
- .send_param = set_phy_2m_tx_param,
- .send_len = sizeof(set_phy_2m_tx_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_DEFAULT_PHY,
- .expect_hci_param = set_default_phy_2m_tx_param,
- .expect_hci_len = sizeof(set_default_phy_2m_tx_param),
- .expect_alt_ev = MGMT_EV_PHY_CONFIGURATION_CHANGED,
- .expect_alt_ev_param = set_phy_2m_tx_evt_param,
- .expect_alt_ev_len = sizeof(set_phy_2m_tx_evt_param),
- };
- static const uint8_t set_phy_2m_rx_param[] = {
- 0xff, 0x17, 0x00, 0x00 /* 1mtxrx, 2m rx */
- };
- static const uint8_t set_default_phy_2m_rx_param[] = {
- 0x00,
- 0x01,
- 0x03, /* 2m rx */
- };
- static const uint8_t set_phy_2m_rx_evt_param[] = {
- 0xff, 0x17, 0x00, 0x00 /* 2m rx 1m tx */
- };
- static const struct generic_data set_phy_2m_rx_success = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_SET_PHY_CONFIGURATION,
- .send_param = set_phy_2m_rx_param,
- .send_len = sizeof(set_phy_2m_rx_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_hci_command = BT_HCI_CMD_LE_SET_DEFAULT_PHY,
- .expect_hci_param = set_default_phy_2m_rx_param,
- .expect_hci_len = sizeof(set_default_phy_2m_rx_param),
- .expect_alt_ev = MGMT_EV_PHY_CONFIGURATION_CHANGED,
- .expect_alt_ev_param = set_phy_2m_rx_evt_param,
- .expect_alt_ev_len = sizeof(set_phy_2m_rx_evt_param),
- };
- static const uint8_t set_phy_param_invalid[] = {
- 0x79, 0xfe, 0x00, 0x00 /* Set unconfigurable phy*/
- };
- static const struct generic_data set_phy_invalid_param = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_SET_PHY_CONFIGURATION,
- .send_param = set_phy_param_invalid,
- .send_len = sizeof(set_phy_param_invalid),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const char start_discovery_valid_ext_scan_enable[] = {
- 0x01,
- 0x01,
- 0x00, 0x00,
- 0x00, 0x00
- };
- static const struct generic_data start_discovery_bredrle_ext_scan_enable = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_START_DISCOVERY,
- .send_param = start_discovery_bredrle_param,
- .send_len = sizeof(start_discovery_bredrle_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = start_discovery_bredrle_param,
- .expect_len = sizeof(start_discovery_bredrle_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_ENABLE,
- .expect_hci_param = start_discovery_valid_ext_scan_enable,
- .expect_hci_len = sizeof(start_discovery_valid_ext_scan_enable),
- .expect_alt_ev = MGMT_EV_DISCOVERING,
- .expect_alt_ev_param = start_discovery_evt,
- .expect_alt_ev_len = sizeof(start_discovery_evt),
- };
- static const struct generic_data start_discovery_le_ext_scan_enable = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_START_DISCOVERY,
- .send_param = start_discovery_le_param,
- .send_len = sizeof(start_discovery_le_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = start_discovery_le_param,
- .expect_len = sizeof(start_discovery_le_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_ENABLE,
- .expect_hci_param = start_discovery_valid_ext_scan_enable,
- .expect_hci_len = sizeof(start_discovery_valid_ext_scan_enable),
- .expect_alt_ev = MGMT_EV_DISCOVERING,
- .expect_alt_ev_param = start_discovery_le_evt,
- .expect_alt_ev_len = sizeof(start_discovery_le_evt),
- };
- static const char start_discovery_valid_ext_scan_param[] = {
- 0x01, /* Own Addr type*/
- 0x00, /* Scan filter policy*/
- 0x01, /*Phys - 1m */
- 0x01, /* Type */
- 0x12, 0x00, /* Interval */
- 0x12, 0x00, /* Window */
- };
- static const struct generic_data start_discovery_le_ext_scan_param = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_START_DISCOVERY,
- .send_param = start_discovery_le_param,
- .send_len = sizeof(start_discovery_le_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = start_discovery_le_param,
- .expect_len = sizeof(start_discovery_le_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_PARAMS,
- .expect_hci_param = start_discovery_valid_ext_scan_param,
- .expect_hci_len = sizeof(start_discovery_valid_ext_scan_param),
- .expect_alt_ev = MGMT_EV_DISCOVERING,
- .expect_alt_ev_param = start_discovery_le_evt,
- .expect_alt_ev_len = sizeof(start_discovery_le_evt),
- };
- static const char stop_discovery_valid_ext_scan_disable[] = {
- 0x00,
- 0x00,
- 0x00, 0x00,
- 0x00, 0x00
- };
- static const struct generic_data stop_discovery_le_ext_scan_disable = {
- .setup_settings = settings_powered_le,
- .setup_send_opcode = MGMT_OP_START_DISCOVERY,
- .setup_send_param = start_discovery_bredrle_param,
- .setup_send_len = sizeof(start_discovery_bredrle_param),
- .send_opcode = MGMT_OP_STOP_DISCOVERY,
- .send_param = stop_discovery_bredrle_param,
- .send_len = sizeof(stop_discovery_bredrle_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = stop_discovery_bredrle_param,
- .expect_len = sizeof(stop_discovery_bredrle_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_ENABLE,
- .expect_hci_param = stop_discovery_valid_ext_scan_disable,
- .expect_hci_len = sizeof(stop_discovery_valid_ext_scan_disable),
- .expect_alt_ev = MGMT_EV_DISCOVERING,
- .expect_alt_ev_param = stop_discovery_evt,
- .expect_alt_ev_len = sizeof(stop_discovery_evt),
- };
- static const struct generic_data start_discovery_le_2m_scan_param = {
- .setup_settings = settings_powered_le,
- .setup_send_opcode = MGMT_OP_SET_PHY_CONFIGURATION,
- .setup_send_param = set_phy_2m_param,
- .setup_send_len = sizeof(set_phy_2m_param),
- .send_opcode = MGMT_OP_START_DISCOVERY,
- .send_param = start_discovery_bredrle_param,
- .send_len = sizeof(start_discovery_bredrle_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = start_discovery_bredrle_param,
- .expect_len = sizeof(start_discovery_bredrle_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_PARAMS,
- .expect_hci_param = start_discovery_valid_ext_scan_param,
- .expect_hci_len = sizeof(start_discovery_valid_ext_scan_param),
- .expect_alt_ev = MGMT_EV_DISCOVERING,
- .expect_alt_ev_param = start_discovery_evt,
- .expect_alt_ev_len = sizeof(start_discovery_evt),
- };
- static const char start_discovery_valid_coded_scan_param[] = {
- 0x01, /* Own Addr type*/
- 0x00, /* Scan filter policy*/
- 0x05, /*Phys - 1m & coded */
- 0x01, /* Type */
- 0x12, 0x00, /* Interval */
- 0x12, 0x00, /* Window */
- 0x01, /* Type */
- 0x12, 0x00, /* Interval */
- 0x12, 0x00, /* Window */
- };
- static const struct generic_data start_discovery_le_coded_scan_param = {
- .setup_settings = settings_powered_le,
- .setup_send_opcode = MGMT_OP_SET_PHY_CONFIGURATION,
- .setup_send_param = set_phy_coded_param,
- .setup_send_len = sizeof(set_phy_coded_param),
- .send_opcode = MGMT_OP_START_DISCOVERY,
- .send_param = start_discovery_bredrle_param,
- .send_len = sizeof(start_discovery_bredrle_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = start_discovery_bredrle_param,
- .expect_len = sizeof(start_discovery_bredrle_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_PARAMS,
- .expect_hci_param = start_discovery_valid_coded_scan_param,
- .expect_hci_len = sizeof(start_discovery_valid_coded_scan_param),
- .expect_alt_ev = MGMT_EV_DISCOVERING,
- .expect_alt_ev_param = start_discovery_evt,
- .expect_alt_ev_len = sizeof(start_discovery_evt),
- };
- static const char start_discovery_valid_1m_2m_coded_scan_param[] = {
- 0x01, /* Own Addr type*/
- 0x00, /* Scan filter policy*/
- 0x05, /*Phys - 1m, coded */
- 0x01, /* Type */
- 0x12, 0x00, /* Interval */
- 0x12, 0x00, /* Window */
- 0x01, /* Type */
- 0x12, 0x00, /* Interval */
- 0x12, 0x00, /* Window */
- };
- static const struct generic_data start_discovery_le_1m_coded_scan_param = {
- .setup_settings = settings_powered_le,
- .setup_send_opcode = MGMT_OP_SET_PHY_CONFIGURATION,
- .setup_send_param = set_phy_all_param,
- .setup_send_len = sizeof(set_phy_all_param),
- .send_opcode = MGMT_OP_START_DISCOVERY,
- .send_param = start_discovery_bredrle_param,
- .send_len = sizeof(start_discovery_bredrle_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = start_discovery_bredrle_param,
- .expect_len = sizeof(start_discovery_bredrle_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_PARAMS,
- .expect_hci_param = start_discovery_valid_1m_2m_coded_scan_param,
- .expect_hci_len = sizeof(start_discovery_valid_1m_2m_coded_scan_param),
- .expect_alt_ev = MGMT_EV_DISCOVERING,
- .expect_alt_ev_param = start_discovery_evt,
- .expect_alt_ev_len = sizeof(start_discovery_evt),
- };
- static void set_phy_callback(uint8_t status, uint16_t length,
- const void *param, void *user_data)
- {
- if (status != MGMT_STATUS_SUCCESS) {
- tester_setup_failed();
- return;
- }
- tester_print("Set PHY Success");
- tester_setup_complete();
- }
- static void setup_phy_configuration(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- const struct generic_data *test = data->test_data;
- const void *send_param = test->setup_send_param;
- uint16_t send_len = test->setup_send_len;
- unsigned int id;
- id = mgmt_register(data->mgmt, MGMT_EV_DISCOVERING, data->mgmt_index,
- discovering_event, NULL, NULL);
- data->mgmt_discov_ev_id = id;
- mgmt_send(data->mgmt, test->setup_send_opcode, data->mgmt_index,
- send_len, send_param, set_phy_callback,
- NULL, NULL);
- }
- static const uint8_t get_dev_flags_param[] = {
- 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* Address */
- 0x00, /* Type */
- };
- static const uint8_t get_dev_flags_rsp_param[] = {
- 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* Address */
- 0x00, /* Type */
- 0x01, 0x00, 0x00, 0x00, /* Supported Flages */
- 0x00, 0x00, 0x00, 0x00, /* Current Flages */
- };
- static const struct generic_data get_dev_flags_success = {
- .send_opcode = MGMT_OP_GET_DEVICE_FLAGS,
- .send_param = get_dev_flags_param,
- .send_len = sizeof(get_dev_flags_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = get_dev_flags_rsp_param,
- .expect_len = sizeof(get_dev_flags_rsp_param),
- };
- static const uint8_t get_dev_flags_param_fail_1[] = {
- 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* Address */
- };
- static const struct generic_data get_dev_flags_fail_1 = {
- .send_opcode = MGMT_OP_GET_DEVICE_FLAGS,
- .send_param = get_dev_flags_param_fail_1,
- .send_len = sizeof(get_dev_flags_param_fail_1),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static void setup_get_dev_flags(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- unsigned char param[] = { 0x01 };
- const unsigned char *add_param;
- size_t add_param_len;
- tester_print("Powering on controller (with added device)");
- if (data->hciemu_type == HCIEMU_TYPE_LE) {
- add_param = add_device_success_param_2;
- add_param_len = sizeof(add_device_success_param_2);
- } else {
- add_param = add_device_success_param_1;
- add_param_len = sizeof(add_device_success_param_1);
- }
- mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
- add_param_len, add_param, NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
- sizeof(param), param,
- setup_powered_callback, NULL, NULL);
- }
- static const uint8_t set_dev_flags_param[] = {
- 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* Address */
- 0x00, /* Type */
- 0x01, 0x00, 0x00, 0x00, /* Current Flages */
- };
- static const uint8_t set_dev_flags_rsp_param[] = {
- 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* Address */
- 0x00, /* Type */
- };
- static const uint8_t dev_flags_changed_param[] = {
- 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* Address */
- 0x00, /* Type */
- 0x01, 0x00, 0x00, 0x00, /* Supported Flages */
- 0x01, 0x00, 0x00, 0x00, /* Current Flages */
- };
- static const struct generic_data set_dev_flags_success = {
- .send_opcode = MGMT_OP_SET_DEVICE_FLAGS,
- .send_param = set_dev_flags_param,
- .send_len = sizeof(set_dev_flags_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_dev_flags_rsp_param,
- .expect_len = sizeof(set_dev_flags_rsp_param),
- .expect_alt_ev = MGMT_EV_DEVICE_FLAGS_CHANGED,
- .expect_alt_ev_param = dev_flags_changed_param,
- .expect_alt_ev_len = sizeof(dev_flags_changed_param),
- };
- static const uint8_t set_dev_flags_param_fail_1[] = {
- 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* Address */
- 0x00, /* Type */
- };
- static const struct generic_data set_dev_flags_fail_1 = {
- .send_opcode = MGMT_OP_SET_DEVICE_FLAGS,
- .send_param = set_dev_flags_param_fail_1,
- .send_len = sizeof(set_dev_flags_param_fail_1),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const uint8_t set_dev_flags_param_fail_2[] = {
- 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* Address */
- 0x00, /* Type */
- 0x03, 0x00, 0x00, 0x00, /* Current Flages */
- };
- static const struct generic_data set_dev_flags_fail_2 = {
- .send_opcode = MGMT_OP_SET_DEVICE_FLAGS,
- .send_param = set_dev_flags_param_fail_2,
- .send_len = sizeof(set_dev_flags_param_fail_2),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- .expect_param = set_dev_flags_rsp_param,
- .expect_len = sizeof(set_dev_flags_rsp_param),
- };
- static const uint8_t set_dev_flags_param_fail_3[] = {
- 0x11, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* Address */
- 0x00, /* Type */
- 0x01, 0x00, 0x00, 0x00, /* Current Flages */
- };
- static const uint8_t set_dev_flags_rsp_param_fail_3[] = {
- 0x11, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* Address */
- 0x00, /* Type */
- };
- static const struct generic_data set_dev_flags_fail_3 = {
- .send_opcode = MGMT_OP_SET_DEVICE_FLAGS,
- .send_param = set_dev_flags_param_fail_3,
- .send_len = sizeof(set_dev_flags_param_fail_3),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- .expect_param = set_dev_flags_rsp_param_fail_3,
- .expect_len = sizeof(set_dev_flags_rsp_param_fail_3),
- };
- static const uint8_t read_exp_feat_param_success[] = {
- 0x03, 0x00, /* Feature Count */
- 0xd6, 0x49, 0xb0, 0xd1, 0x28, 0xeb, /* UUID - Simultaneous */
- 0x27, 0x92, 0x96, 0x46, 0xc0, 0x42, /* Central Peripheral */
- 0xb5, 0x10, 0x1b, 0x67,
- 0x00, 0x00, 0x00, 0x00, /* Flags */
- 0x04, 0x00, 0x13, 0xac, 0x42, 0x02, /* UUID - LL Privacy */
- 0xde, 0xb3, 0xea, 0x11, 0x73, 0xc2,
- 0x48, 0xa1, 0xc0, 0x15,
- 0x02, 0x00, 0x00, 0x00, /* Flags */
- 0xaf, 0x29, 0xc6, 0x66, 0xac, 0x5f, /* UUID - Codec Offload */
- 0x1a, 0x88, 0xb9, 0x4f, 0x7f, 0xee,
- 0xce, 0x5a, 0x69, 0xa6,
- 0x00, 0x00, 0x00, 0x00 /* Flags */
- };
- static const struct generic_data read_exp_feat_success = {
- .send_opcode = MGMT_OP_READ_EXP_FEATURES_INFO,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = read_exp_feat_param_success,
- .expect_len = sizeof(read_exp_feat_param_success),
- };
- static const uint8_t read_exp_feat_param_success_index_none[] = {
- 0x01, 0x00, /* Feature Count */
- 0x1c, 0xda, 0x47, 0x1c, 0x48, 0x6c, /* UUID - Debug */
- 0x01, 0xab, 0x9f, 0x46, 0xec, 0xb9,
- 0x30, 0x25, 0x99, 0xd4,
- 0x00, 0x00, 0x00, 0x00, /* Flags */
- };
- static const struct generic_data read_exp_feat_success_index_none = {
- .send_index_none = true,
- .send_opcode = MGMT_OP_READ_EXP_FEATURES_INFO,
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = read_exp_feat_param_success_index_none,
- .expect_len = sizeof(read_exp_feat_param_success_index_none),
- };
- static uint16_t settings_powered_le_privacy[] = { MGMT_OP_SET_LE,
- MGMT_OP_SET_PRIVACY,
- MGMT_OP_SET_POWERED, 0 };
- static const uint8_t set_exp_feat_param_ll_privacy[] = {
- 0x04, 0x00, 0x13, 0xac, 0x42, 0x02, /* UUID - LL Privacy */
- 0xde, 0xb3, 0xea, 0x11, 0x73, 0xc2,
- 0x48, 0xa1, 0xc0, 0x15,
- 0x01, /* Action - enable */
- };
- static const uint8_t set_exp_feat_rsp_param_ll_privacy[] = {
- 0x04, 0x00, 0x13, 0xac, 0x42, 0x02, /* UUID - LL Privacy */
- 0xde, 0xb3, 0xea, 0x11, 0x73, 0xc2,
- 0x48, 0xa1, 0xc0, 0x15,
- 0x03, 0x00, 0x00, 0x00, /* Action - enable */
- };
- static const uint8_t set_exp_feat_param_offload_codec[] = {
- 0xaf, 0x29, 0xc6, 0x66, 0xac, 0x5f, /* UUID - Codec Offload */
- 0x1a, 0x88, 0xb9, 0x4f, 0x7f, 0xee,
- 0xce, 0x5a, 0x69, 0xa6,
- 0x01, /* Action - enable */
- };
- static const uint8_t set_exp_feat_rsp_param_offload_codec[] = {
- 0xaf, 0x29, 0xc6, 0x66, 0xac, 0x5f, /* UUID - Codec Offload */
- 0x1a, 0x88, 0xb9, 0x4f, 0x7f, 0xee,
- 0xce, 0x5a, 0x69, 0xa6,
- 0x01, 0x00, 0x00, 0x00, /* Action - enable */
- };
- static const struct generic_data set_exp_feat_enable_ll_privacy = {
- .send_opcode = MGMT_OP_SET_EXP_FEATURE,
- .send_param = set_exp_feat_param_ll_privacy,
- .send_len = sizeof(set_exp_feat_param_ll_privacy),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_exp_feat_rsp_param_ll_privacy,
- .expect_len = sizeof(set_exp_feat_rsp_param_ll_privacy),
- .expect_alt_ev = MGMT_EV_EXP_FEATURE_CHANGE,
- .expect_alt_ev_len = sizeof(struct mgmt_ev_exp_feature_changed),
- };
- static void read_exp_feature_callback(uint8_t status, uint16_t length,
- const void *param, void *user_data)
- {
- if (status != MGMT_STATUS_SUCCESS) {
- tester_setup_failed();
- return;
- }
- tester_print("Received Read Experimental Features Info");
- tester_setup_complete();
- }
- static void setup_set_exp_feature_alt(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- /* Send the Read Experiemental Features Information command to receive
- * the Experiemental Feature Changed event
- */
- mgmt_send(data->mgmt_alt, MGMT_OP_READ_EXP_FEATURES_INFO,
- data->mgmt_index, 0, NULL,
- read_exp_feature_callback, NULL, NULL);
- }
- static const struct generic_data set_exp_feat_offload_codec = {
- .send_opcode = MGMT_OP_SET_EXP_FEATURE,
- .send_param = set_exp_feat_param_offload_codec,
- .send_len = sizeof(set_exp_feat_param_offload_codec),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_exp_feat_rsp_param_offload_codec,
- .expect_len = sizeof(set_exp_feat_rsp_param_offload_codec),
- .expect_alt_ev = MGMT_EV_EXP_FEATURE_CHANGE,
- .expect_alt_ev_len = sizeof(struct mgmt_ev_exp_feature_changed),
- };
- static const uint8_t set_exp_feat_param_disable[17] = { 0x00 };
- static const uint8_t set_exp_feat_rsp_param_disable[20] = { 0x00 };
- static const struct generic_data set_exp_feat_disable = {
- .send_opcode = MGMT_OP_SET_EXP_FEATURE,
- .send_param = set_exp_feat_param_disable,
- .send_len = sizeof(set_exp_feat_param_disable),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = set_exp_feat_rsp_param_disable,
- .expect_len = sizeof(set_exp_feat_rsp_param_disable),
- };
- static const struct generic_data set_exp_feat_rejected = {
- .setup_settings = settings_powered_le_privacy,
- .send_opcode = MGMT_OP_SET_EXP_FEATURE,
- .send_param = set_exp_feat_param_ll_privacy,
- .send_len = sizeof(set_exp_feat_param_ll_privacy),
- .expect_status = MGMT_STATUS_REJECTED,
- };
- static const uint8_t set_exp_feat_param_invalid[] = {
- 0x04, 0x00, 0x13, 0xac, 0x42, 0x02, /* UUID - LL Privacy */
- 0xde, 0xb3, 0xea, 0x11, 0x73, 0xc2,
- 0x48, 0xa1, 0xc0, 0x15,
- 0xff, /* Action - invalid */
- };
- static const struct generic_data set_exp_feat_invalid = {
- .send_opcode = MGMT_OP_SET_EXP_FEATURE,
- .send_param = set_exp_feat_param_invalid,
- .send_len = sizeof(set_exp_feat_param_invalid),
- .expect_status = MGMT_STATUS_INVALID_PARAMS,
- };
- static const uint8_t set_exp_feat_param_unknown[] = {
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* UUID - Unknown */
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff,
- 0x01, /* Action - enable */
- };
- static const struct generic_data set_exp_feat_unknown = {
- .send_opcode = MGMT_OP_SET_EXP_FEATURE,
- .send_param = set_exp_feat_param_unknown,
- .send_len = sizeof(set_exp_feat_param_unknown),
- .expect_status = MGMT_STATUS_NOT_SUPPORTED,
- };
- static const char load_irks_params[] = { 0x01, 0x00,
- 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0x01,
- 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88,
- 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88 };
- static void setup_load_irks_callback(uint8_t status, uint16_t length,
- const void *param, void *user_data)
- {
- if (status != MGMT_STATUS_SUCCESS) {
- tester_setup_failed();
- return;
- }
- tester_print("Load IRK completed");
- }
- static void setup_exp_feat_callback(uint8_t status, uint16_t length,
- const void *param, void *user_data)
- {
- if (status != MGMT_STATUS_SUCCESS) {
- tester_setup_failed();
- return;
- }
- tester_print("LL Privacy Exp feature is enabled");
- }
- static void setup_ll_privacy(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- unsigned char param[] = { 0x01 };
- const uint8_t *ext_feat_param;
- size_t ext_feat_len;
- const char *irk_param;
- size_t irk_len;
- unsigned char privacy_param[] = { 0x01,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
- tester_print("Enabling LL Privacy feature");
- ext_feat_param = set_exp_feat_param_ll_privacy;
- ext_feat_len = sizeof(set_exp_feat_param_ll_privacy);
- irk_param = load_irks_params;
- irk_len = sizeof(load_irks_params);
- mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
- sizeof(param), ¶m,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_PRIVACY, data->mgmt_index,
- sizeof(privacy_param), privacy_param,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_LOAD_IRKS, data->mgmt_index,
- irk_len, irk_param,
- setup_load_irks_callback, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_EXP_FEATURE, data->mgmt_index,
- ext_feat_len, ext_feat_param,
- setup_exp_feat_callback, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
- sizeof(param), param,
- setup_powered_callback, NULL, NULL);
- }
- static void setup_add_device_callback(uint8_t status, uint16_t length,
- const void *param, void *user_data)
- {
- if (status != MGMT_STATUS_SUCCESS) {
- tester_setup_failed();
- return;
- }
- tester_print("New Device is Added");
- }
- static void setup_ll_privacy_device(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- const struct generic_data *test = data->test_data;
- unsigned char param[] = { 0x01 };
- const uint8_t *ext_feat_param;
- size_t ext_feat_len;
- const char *irk_param;
- size_t irk_len;
- const uint8_t *dev_param;
- size_t dev_len;
- unsigned char privacy_param[] = { 0x01,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
- tester_print("Setup expected HCI command 0x%04x",
- test->setup_expect_hci_command);
- hciemu_add_central_post_command_hook(data->hciemu,
- command_setup_hci_callback, data);
- test_add_setup_condition(data);
- tester_print("Enabling LL Privacy feature");
- ext_feat_param = set_exp_feat_param_ll_privacy;
- ext_feat_len = sizeof(set_exp_feat_param_ll_privacy);
- irk_param = load_irks_params;
- irk_len = sizeof(load_irks_params);
- dev_param = add_device_success_param_6;
- dev_len = sizeof(add_device_success_param_6);
- mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
- sizeof(param), ¶m,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_PRIVACY, data->mgmt_index,
- sizeof(privacy_param), privacy_param,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_LOAD_IRKS, data->mgmt_index,
- irk_len, irk_param,
- setup_load_irks_callback, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_EXP_FEATURE, data->mgmt_index,
- ext_feat_len, ext_feat_param,
- setup_exp_feat_callback, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
- dev_len, dev_param,
- setup_add_device_callback, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
- sizeof(param), param,
- setup_powered_callback, NULL, NULL);
- }
- static const uint8_t add_device_success_param_4[] = {
- 0x11, 0x22, 0x33, 0x44, 0x55, 0x66,
- 0x01,
- 0x02,
- };
- /* Enable LL Privacy and Add 2 devices */
- static void setup_ll_privacy_device2(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- unsigned char param[] = { 0x01 };
- const uint8_t *ext_feat_param;
- size_t ext_feat_len;
- const char *irk_param;
- size_t irk_len;
- const uint8_t *dev_param, *dev2_param;
- size_t dev_len, dev2_len;
- unsigned char privacy_param[] = { 0x01,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
- 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
- tester_print("Enabling LL Privacy feature");
- ext_feat_param = set_exp_feat_param_ll_privacy;
- ext_feat_len = sizeof(set_exp_feat_param_ll_privacy);
- irk_param = load_irks_params;
- irk_len = sizeof(load_irks_params);
- dev_param = add_device_success_param_6;
- dev_len = sizeof(add_device_success_param_6);
- dev2_param = add_device_success_param_4;
- dev2_len = sizeof(add_device_success_param_4);
- mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
- sizeof(param), ¶m,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_PRIVACY, data->mgmt_index,
- sizeof(privacy_param), privacy_param,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_LOAD_IRKS, data->mgmt_index,
- irk_len, irk_param,
- setup_load_irks_callback, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_EXP_FEATURE, data->mgmt_index,
- ext_feat_len, ext_feat_param,
- setup_exp_feat_callback, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
- dev_len, dev_param,
- setup_add_device_callback, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
- dev2_len, dev2_param,
- setup_add_device_callback, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
- sizeof(param), param,
- setup_powered_callback, NULL, NULL);
- }
- static bool power_off(uint16_t index)
- {
- int sk, err;
- sk = hci_open_dev(index);
- if (sk < 0)
- return false;
- err = ioctl(sk, HCIDEVDOWN, index);
- hci_close_dev(sk);
- if (err < 0)
- return false;
- return true;
- }
- static void test_command_generic(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- const struct generic_data *test = data->test_data;
- const void *send_param = test->send_param;
- uint16_t send_len = test->send_len;
- unsigned int id;
- uint16_t index;
- index = test->send_index_none ? MGMT_INDEX_NONE : data->mgmt_index;
- if (test->expect_settings_set || test->expect_settings_unset) {
- tester_print("Registering new settings notification");
- id = mgmt_register(data->mgmt, MGMT_EV_NEW_SETTINGS, index,
- command_generic_new_settings, NULL, NULL);
- data->mgmt_settings_id = id;
- id = mgmt_register(data->mgmt_alt, MGMT_EV_NEW_SETTINGS, index,
- command_generic_new_settings_alt, NULL, NULL);
- data->mgmt_alt_settings_id = id;
- test_add_condition(data);
- }
- if (test->expect_alt_ev) {
- tester_print("Registering %s notification",
- mgmt_evstr(test->expect_alt_ev));
- id = mgmt_register(data->mgmt_alt, test->expect_alt_ev, index,
- command_generic_event_alt, NULL, NULL);
- data->mgmt_alt_ev_id = id;
- test_add_condition(data);
- }
- if (test->expect_hci_command) {
- tester_print("Registering HCI command callback");
- hciemu_add_central_post_command_hook(data->hciemu,
- command_hci_callback, data);
- test_add_condition(data);
- }
- if (test->send_opcode == 0x0000) {
- tester_print("Executing no-op test");
- return;
- }
- tester_print("Sending %s (0x%04x)", mgmt_opstr(test->send_opcode),
- test->send_opcode);
- if (test->send_func)
- send_param = test->send_func(&send_len);
- if (test->force_power_off) {
- mgmt_send_nowait(data->mgmt, test->send_opcode, index,
- send_len, send_param,
- command_generic_callback, NULL, NULL);
- power_off(data->mgmt_index);
- } else {
- mgmt_send(data->mgmt, test->send_opcode, index, send_len,
- send_param, command_generic_callback,
- NULL, NULL);
- }
- test_add_condition(data);
- }
- static void check_scan(void *user_data)
- {
- struct test_data *data = tester_get_data();
- if (hciemu_get_central_le_scan_enable(data->hciemu)) {
- tester_warn("LE scan still enabled");
- tester_test_failed();
- return;
- }
- if (hciemu_get_central_scan_enable(data->hciemu)) {
- tester_warn("BR/EDR scan still enabled");
- tester_test_failed();
- return;
- }
- test_condition_complete(data);
- }
- static void test_remove_device(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- test_command_generic(test_data);
- tester_wait(1, check_scan, NULL);
- test_add_condition(data);
- }
- static void trigger_device_found(void *user_data)
- {
- struct test_data *data = tester_get_data();
- const struct generic_data *test = data->test_data;
- struct bthost *bthost;
- bthost = hciemu_client_get_host(data->hciemu);
- if ((data->hciemu_type == HCIEMU_TYPE_LE) ||
- (data->hciemu_type == HCIEMU_TYPE_BREDRLE)) {
- if (test->set_adv)
- bthost_set_adv_data(bthost, test->adv_data,
- test->adv_data_len);
- bthost_set_adv_enable(bthost, 0x01);
- } else if (data->hciemu_type >= HCIEMU_TYPE_BREDRLE50) {
- bthost_set_ext_adv_params(bthost);
- if (test->set_adv)
- bthost_set_ext_adv_data(bthost, test->adv_data,
- test->adv_data_len);
- bthost_set_ext_adv_enable(bthost, 0x01);
- }
- if (data->hciemu_type != HCIEMU_TYPE_LE)
- bthost_write_scan_enable(bthost, 0x03);
- test_condition_complete(data);
- }
- static void test_device_found(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- test_command_generic(test_data);
- /* Make sure discovery is enabled before enabling advertising. */
- tester_wait(1, trigger_device_found, NULL);
- test_add_condition(data);
- }
- static void pairing_new_conn(uint16_t handle, void *user_data)
- {
- struct test_data *data = tester_get_data();
- struct bthost *bthost;
- tester_print("New connection with handle 0x%04x", handle);
- bthost = hciemu_client_get_host(data->hciemu);
- bthost_request_auth(bthost, handle);
- }
- static void test_pairing_acceptor(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- const struct generic_data *test = data->test_data;
- const uint8_t *central_bdaddr;
- struct bthost *bthost;
- uint8_t addr_type;
- if (test->expect_alt_ev) {
- unsigned int id;
- tester_print("Registering %s notification",
- mgmt_evstr(test->expect_alt_ev));
- id = mgmt_register(data->mgmt_alt, test->expect_alt_ev,
- data->mgmt_index,
- command_generic_event_alt, NULL, NULL);
- data->mgmt_alt_ev_id = id;
- test_add_condition(data);
- }
- central_bdaddr = hciemu_get_central_bdaddr(data->hciemu);
- if (!central_bdaddr) {
- tester_warn("No central bdaddr");
- tester_test_failed();
- return;
- }
- bthost = hciemu_client_get_host(data->hciemu);
- bthost_set_connect_cb(bthost, pairing_new_conn, data);
- if (data->hciemu_type == HCIEMU_TYPE_BREDRLE)
- addr_type = BDADDR_BREDR;
- else
- addr_type = BDADDR_LE_PUBLIC;
- bthost_hci_connect(bthost, central_bdaddr, addr_type);
- }
- static void connected_event(uint16_t index, uint16_t length, const void *param,
- void *user_data)
- {
- struct test_data *data = tester_get_data();
- const struct generic_data *test = data->test_data;
- const void *send_param = test->send_param;
- uint16_t send_len = test->send_len;
- tester_print("Sending %s 0x%04x", mgmt_opstr(test->send_opcode),
- test->send_opcode);
- if (test->send_func)
- send_param = test->send_func(&send_len);
- if (test->force_power_off) {
- mgmt_send_nowait(data->mgmt, test->send_opcode, index,
- send_len, send_param,
- command_generic_callback, NULL, NULL);
- power_off(data->mgmt_index);
- } else {
- mgmt_send(data->mgmt, test->send_opcode, index, send_len,
- send_param, command_generic_callback,
- NULL, NULL);
- }
- test_add_condition(data);
- /* Complete MGMT_EV_DEVICE_CONNECTED *after* adding new one */
- test_condition_complete(data);
- }
- static void test_command_generic_connect(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- unsigned int id;
- const uint8_t *central_bdaddr;
- uint8_t addr_type;
- struct bthost *bthost;
- tester_print("Registering %s notification",
- mgmt_evstr(MGMT_EV_DEVICE_CONNECTED));
- id = mgmt_register(data->mgmt_alt, MGMT_EV_DEVICE_CONNECTED,
- data->mgmt_index, connected_event,
- NULL, NULL);
- data->mgmt_alt_ev_id = id;
- test_add_condition(data);
- central_bdaddr = hciemu_get_central_bdaddr(data->hciemu);
- if (!central_bdaddr) {
- tester_warn("No central bdaddr");
- tester_test_failed();
- return;
- }
- addr_type = data->hciemu_type == HCIEMU_TYPE_BREDRLE ? BDADDR_BREDR :
- BDADDR_LE_PUBLIC;
- tester_print("ADDR TYPE: %d", addr_type);
- bthost = hciemu_client_get_host(data->hciemu);
- bthost_hci_connect(bthost, central_bdaddr, addr_type);
- }
- static bool test_adv_enable_hook(const void *data, uint16_t len,
- void *user_data)
- {
- struct test_data *test_data = user_data;
- const uint8_t *status = data;
- if (*status == 0) {
- tester_print("Advertising enabled");
- test_condition_complete(test_data);
- } else {
- tester_print("Advertising enabled error 0x%02x", *status);
- }
- return true;
- }
- static void disconnected_event(uint16_t index, uint16_t length,
- const void *param, void *user_data)
- {
- tester_test_failed();
- }
- static void le_connected_event(uint16_t index, uint16_t length,
- const void *param, void *user_data)
- {
- struct test_data *data = tester_get_data();
- tester_print("Device connected");
- if (data->hciemu_type < HCIEMU_TYPE_BREDRLE50) {
- test_add_condition(data);
- hciemu_add_hook(data->hciemu, HCIEMU_HOOK_POST_CMD,
- BT_HCI_CMD_LE_SET_ADV_ENABLE,
- test_adv_enable_hook, data);
- }
- /* Make sure we get not disconnected during the testaces */
- mgmt_register(data->mgmt_alt, MGMT_EV_DEVICE_DISCONNECTED,
- data->mgmt_index, disconnected_event,
- NULL, NULL);
- test_condition_complete(data);
- }
- static void add_device_callback(uint8_t status, uint16_t len, const void *param,
- void *user_data)
- {
- struct test_data *data = user_data;
- const struct generic_data *test = data->test_data;
- struct bthost *bthost;
- const uint8_t *central_bdaddr;
- if (status != 0) {
- tester_test_failed();
- return;
- }
- tester_print("Device added");
- /* If advertising is enabled on client that means we can stop here and
- * just wait for connection
- */
- if (test->client_enable_adv)
- return;
- central_bdaddr = hciemu_get_central_bdaddr(data->hciemu);
- if (!central_bdaddr) {
- tester_warn("No central bdaddr");
- tester_test_failed();
- return;
- }
- bthost = hciemu_client_get_host(data->hciemu);
- if (data->hciemu_type >= HCIEMU_TYPE_BREDRLE50)
- bthost_hci_ext_connect(bthost, central_bdaddr,
- BDADDR_LE_PUBLIC);
- else
- bthost_hci_connect(bthost, central_bdaddr, BDADDR_LE_PUBLIC);
- }
- static void test_connected_and_advertising(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- const struct generic_data *test = data->test_data;
- const uint8_t *client_bdaddr;
- struct mgmt_cp_add_device cp;
- tester_print("Registering %s notification",
- mgmt_evstr(MGMT_EV_DEVICE_CONNECTED));
- test_add_condition(data);
- mgmt_register(data->mgmt_alt, MGMT_EV_DEVICE_CONNECTED,
- data->mgmt_index, le_connected_event,
- NULL, NULL);
- client_bdaddr = hciemu_get_client_bdaddr(data->hciemu);
- if (!client_bdaddr) {
- tester_warn("No client bdaddr");
- tester_test_failed();
- return;
- }
- memset(&cp, 0, sizeof(cp));
- memcpy(&cp.addr.bdaddr, client_bdaddr, 6);
- cp.addr.type = BDADDR_LE_PUBLIC;
- if (test->client_enable_adv)
- cp.action = 0x02; /* Auto connect */
- else
- cp.action = 0x01; /* Allow incoming connection */
- mgmt_send(data->mgmt_alt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
- sizeof(cp), &cp,
- add_device_callback,
- data, NULL);
- }
- static void read_50_controller_cap_complete(uint8_t status, uint16_t length,
- const void *param, void *user_data)
- {
- struct test_data *data = user_data;
- const struct mgmt_rp_read_controller_cap *rp = param;
- const uint8_t *ptr = rp->cap;
- size_t offset = 0;
- uint8_t tag_len;
- uint8_t tag_type;
- if (status || !param) {
- tester_warn("Failed to read advertising features: %s (0x%02x)",
- mgmt_errstr(status), status);
- tester_test_failed();
- }
- if (sizeof(rp->cap_len) + rp->cap_len != length) {
- tester_warn("Controller capabilities malformed, size %zu != %u",
- sizeof(rp->cap_len) + rp->cap_len, length);
- tester_test_failed();
- }
- while (offset < rp->cap_len) {
- tag_len = ptr[offset++];
- tag_type = ptr[offset++];
- switch (tag_type) {
- case MGMT_CAP_LE_TX_PWR:
- if ((tag_len - sizeof(tag_type)) != 2) {
- tester_warn("TX power had unexpected length %d",
- tag_len);
- break;
- }
- tester_print("Expected Tx Power discovered: %d-%d",
- ptr[offset], ptr[offset+1]);
- test_condition_complete(data);
- }
- /* Step to the next entry */
- offset += (tag_len - sizeof(tag_type));
- }
- }
- static void test_50_controller_cap_response(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- test_add_condition(data);
- mgmt_send(data->mgmt_alt, MGMT_OP_READ_CONTROLLER_CAP, data->mgmt_index,
- 0, NULL,
- read_50_controller_cap_complete,
- data, NULL);
- }
- static const uint8_t suspend_state_param_disconnect[] = {
- 0x01,
- };
- static const uint8_t suspend_state_param_page_scan[] = {
- 0x02,
- };
- static const uint8_t resume_state_param_non_bt_wake[] = {
- 0x00,
- 0x00, 0x00, 0x0, 0x00, 0x00, 0x00,
- 0x00
- };
- static const struct generic_data suspend_resume_success_1 = {
- .setup_settings = settings_powered,
- .expect_alt_ev = MGMT_EV_CONTROLLER_SUSPEND,
- .expect_alt_ev_param = suspend_state_param_disconnect,
- .expect_alt_ev_len = sizeof(suspend_state_param_disconnect),
- };
- static void test_suspend_resume_success_1(const void *test_data)
- {
- bool suspend;
- int err;
- /* Triggers the suspend */
- suspend = true;
- err = set_debugfs_force_suspend(0, suspend);
- if (err) {
- tester_warn("Unable to enable the force_suspend");
- tester_test_failed();
- return;
- }
- test_command_generic(test_data);
- }
- static const struct generic_data suspend_resume_success_2 = {
- .setup_settings = settings_powered,
- .expect_alt_ev = MGMT_EV_CONTROLLER_RESUME,
- .expect_alt_ev_param = resume_state_param_non_bt_wake,
- .expect_alt_ev_len = sizeof(resume_state_param_non_bt_wake),
- };
- static void test_suspend_resume_success_2(const void *test_data)
- {
- bool suspend;
- int err;
- /* Triggers the suspend */
- suspend = true;
- err = set_debugfs_force_suspend(0, suspend);
- if (err) {
- tester_warn("Unable to enable the force_suspend");
- tester_test_failed();
- return;
- }
- /* Triggers the resume */
- suspend = false;
- err = set_debugfs_force_suspend(0, suspend);
- if (err) {
- tester_warn("Unable to enable the force_suspend");
- tester_test_failed();
- return;
- }
- test_command_generic(test_data);
- }
- static const struct generic_data suspend_resume_success_3 = {
- .setup_expect_hci_command = BT_HCI_CMD_LE_ADD_TO_ACCEPT_LIST,
- .setup_expect_hci_param = le_add_to_accept_list_param,
- .setup_expect_hci_len = sizeof(le_add_to_accept_list_param),
- .expect_alt_ev = MGMT_EV_CONTROLLER_SUSPEND,
- .expect_alt_ev_param = suspend_state_param_disconnect,
- .expect_alt_ev_len = sizeof(suspend_state_param_disconnect),
- };
- static void setup_suspend_resume_success_3(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- unsigned char param[] = { 0x01 };
- /* Add Device 1 */
- mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index,
- sizeof(add_device_success_param_3),
- add_device_success_param_3,
- setup_add_device_callback,
- NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
- sizeof(param), param,
- setup_powered_callback, NULL, NULL);
- }
- static void test_suspend_resume_success_3(const void *test_data)
- {
- bool suspend;
- int err;
- /* Triggers the suspend */
- suspend = true;
- err = set_debugfs_force_suspend(0, suspend);
- if (err) {
- tester_warn("Unable to enable the force_suspend");
- tester_test_failed();
- return;
- }
- test_command_generic(test_data);
- }
- static const struct generic_data suspend_resume_success_4 = {
- .setup_expect_hci_command = BT_HCI_CMD_LE_SET_EXT_ADV_ENABLE,
- .setup_expect_hci_param = set_ext_adv_on_set_adv_enable_param,
- .setup_expect_hci_len = sizeof(set_ext_adv_on_set_adv_enable_param),
- .expect_alt_ev = MGMT_EV_CONTROLLER_SUSPEND,
- .expect_alt_ev_param = suspend_state_param_disconnect,
- .expect_alt_ev_len = sizeof(suspend_state_param_disconnect),
- };
- static void setup_suspend_resume_success_4(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- struct mgmt_cp_add_advertising *cp;
- unsigned char adv_param[sizeof(*cp) + TESTER_ADD_ADV_DATA_LEN];
- unsigned char param[] = { 0x01 };
- cp = (struct mgmt_cp_add_advertising *) adv_param;
- setup_add_adv_param(cp, 1);
- mgmt_send(data->mgmt, MGMT_OP_SET_LE, data->mgmt_index,
- sizeof(param), ¶m,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index,
- sizeof(param), param,
- NULL, NULL, NULL);
- mgmt_send(data->mgmt, MGMT_OP_ADD_ADVERTISING, data->mgmt_index,
- sizeof(adv_param), adv_param,
- setup_add_advertising_callback,
- NULL, NULL);
- }
- static void test_suspend_resume_success_4(const void *test_data)
- {
- bool suspend;
- int err;
- test_command_generic(test_data);
- /* Triggers the suspend */
- suspend = true;
- tester_print("Set the system into Suspend via force_suspend");
- err = set_debugfs_force_suspend(0, suspend);
- if (err) {
- tester_warn("Unable to enable the force_suspend");
- tester_test_failed();
- return;
- }
- }
- static const struct generic_data suspend_resume_success_5 = {
- .setup_settings = settings_powered_connectable_bondable,
- .pin = pair_device_pin,
- .pin_len = sizeof(pair_device_pin),
- .client_pin = pair_device_pin,
- .client_pin_len = sizeof(pair_device_pin),
- .expect_alt_ev = MGMT_EV_CONTROLLER_SUSPEND,
- .expect_alt_ev_param = suspend_state_param_disconnect,
- .expect_alt_ev_len = sizeof(suspend_state_param_disconnect),
- };
- static void trigger_force_suspend(void *user_data)
- {
- bool suspend;
- int err;
- /* Triggers the suspend */
- suspend = true;
- tester_print("Set the system into Suspend via force_suspend");
- err = set_debugfs_force_suspend(0, suspend);
- if (err) {
- tester_warn("Unable to enable the force_suspend");
- return;
- }
- }
- static void trigger_force_resume(void *user_data)
- {
- bool suspend;
- int err;
- /* Triggers the suspend */
- suspend = false;
- tester_print("Set the system into Resume via force_suspend");
- err = set_debugfs_force_suspend(0, suspend);
- if (err) {
- tester_warn("Unable to disable the force_suspend");
- return;
- }
- }
- static void test_suspend_resume_success_5(const void *test_data)
- {
- test_pairing_acceptor(test_data);
- tester_wait(1, trigger_force_suspend, NULL);
- }
- static const struct generic_data suspend_resume_success_6 = {
- .setup_settings = settings_powered_connectable_bondable_ssp,
- .client_enable_ssp = true,
- .expect_alt_ev = MGMT_EV_CONTROLLER_SUSPEND,
- .expect_alt_ev_param = suspend_state_param_disconnect,
- .expect_alt_ev_len = sizeof(suspend_state_param_disconnect),
- .expect_hci_command = BT_HCI_CMD_USER_CONFIRM_REQUEST_REPLY,
- .expect_hci_func = client_bdaddr_param_func,
- .io_cap = 0x03, /* NoInputNoOutput */
- .client_io_cap = 0x03, /* NoInputNoOutput */
- .just_works = true,
- };
- static const struct generic_data suspend_resume_success_7 = {
- .setup_settings = settings_powered,
- .expect_alt_ev = MGMT_EV_CONTROLLER_SUSPEND,
- .expect_alt_ev_param = suspend_state_param_page_scan,
- .expect_alt_ev_len = sizeof(suspend_state_param_page_scan),
- };
- static void test_suspend_resume_success_7(const void *test_data)
- {
- bool suspend;
- int err;
- /* Set Force Wakeup */
- suspend = true;
- err = set_debugfs_force_wakeup(0, suspend);
- if (err) {
- tester_warn("Unable to enable the force_wakeup");
- tester_test_failed();
- return;
- }
- /* Triggers the suspend */
- suspend = true;
- err = set_debugfs_force_suspend(0, suspend);
- if (err) {
- tester_warn("Unable to enable the force_suspend");
- tester_test_failed();
- return;
- }
- test_command_generic(test_data);
- }
- static const struct generic_data suspend_resume_success_8 = {
- .setup_settings = settings_powered_le,
- .send_opcode = MGMT_OP_START_DISCOVERY,
- .send_param = start_discovery_le_param,
- .send_len = sizeof(start_discovery_le_param),
- .expect_status = MGMT_STATUS_SUCCESS,
- .expect_param = start_discovery_le_param,
- .expect_len = sizeof(start_discovery_le_param),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_ENABLE,
- .expect_hci_param = start_discovery_valid_ext_scan_enable,
- .expect_hci_len = sizeof(start_discovery_valid_ext_scan_enable),
- .expect_alt_ev = MGMT_EV_CONTROLLER_SUSPEND,
- .expect_alt_ev_param = suspend_state_param_disconnect,
- .expect_alt_ev_len = sizeof(suspend_state_param_disconnect),
- };
- static void test_suspend_resume_success_8(const void *test_data)
- {
- test_command_generic(test_data);
- tester_wait(1, trigger_force_suspend, NULL);
- }
- static uint16_t settings_powered_le_discovery[] = { MGMT_OP_SET_LE,
- MGMT_OP_SET_POWERED,
- MGMT_OP_START_DISCOVERY,
- 0 };
- static const struct generic_data suspend_resume_success_9 = {
- .setup_settings = settings_powered_le_discovery,
- .setup_discovery_param = start_discovery_bredrle_param,
- .setup_expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_ENABLE,
- .setup_expect_hci_param = stop_discovery_valid_ext_scan_disable,
- .setup_expect_hci_len = sizeof(stop_discovery_valid_ext_scan_disable),
- .expect_hci_command = BT_HCI_CMD_LE_SET_EXT_SCAN_ENABLE,
- .expect_hci_param = start_discovery_valid_ext_scan_enable,
- .expect_hci_len = sizeof(start_discovery_valid_ext_scan_enable),
- .expect_alt_ev = MGMT_EV_CONTROLLER_RESUME,
- .expect_alt_ev_param = resume_state_param_non_bt_wake,
- .expect_alt_ev_len = sizeof(resume_state_param_non_bt_wake),
- };
- static void trigger_force_suspend_9(void *user_data)
- {
- trigger_force_suspend(user_data);
- }
- static void setup_suspend_resume_success_9(const void *test_data)
- {
- setup_command_generic(test_data);
- tester_wait(1, trigger_force_suspend_9, NULL);
- }
- static void test_suspend_resume_success_9(const void *test_data)
- {
- test_command_generic(test_data);
- tester_wait(2, trigger_force_resume, NULL);
- }
- static const struct generic_data suspend_resume_success_10 = {
- .setup_settings = settings_powered_le,
- .expect_alt_ev = MGMT_EV_CONTROLLER_RESUME,
- .expect_alt_ev_param = resume_state_param_non_bt_wake,
- .expect_alt_ev_len = sizeof(resume_state_param_non_bt_wake),
- };
- static void resume_event(uint16_t index, uint16_t length,
- const void *param, void *user_data)
- {
- struct test_data *data = tester_get_data();
- const struct mgmt_ev_controller_resume *ev = param;
- mgmt_unregister(data->mgmt, data->mgmt_discov_ev_id);
- if (length != sizeof(*ev)) {
- tester_warn("Incorrect resume event length");
- tester_setup_failed();
- return;
- }
- tester_print("New Controller Resume event received");
- test_condition_complete(data);
- tester_setup_complete();
- }
- static void setup_suspend_resume_success_10(const void *test_data)
- {
- struct test_data *data = tester_get_data();
- unsigned int id;
- tester_print("Registering Controller Resume notification");
- id = mgmt_register(data->mgmt, MGMT_EV_CONTROLLER_RESUME,
- data->mgmt_index, resume_event, NULL, NULL);
- /* Reuse the variable */
- data->mgmt_discov_ev_id = id;
- test_add_condition(data);
- tester_wait(1, trigger_force_suspend, NULL);
- tester_wait(2, trigger_force_resume, NULL);
- }
- static void test_suspend_resume_success_10(const void *test_data)
- {
- test_command_generic(test_data);
- tester_wait(1, trigger_force_suspend, NULL);
- tester_wait(2, trigger_force_resume, NULL);
- }
- int main(int argc, char *argv[])
- {
- tester_init(&argc, &argv);
- test_bredrle("Controller setup",
- NULL, NULL, controller_setup);
- test_bredr("Controller setup (BR/EDR-only)",
- NULL, NULL, controller_setup);
- test_le("Controller setup (LE)",
- NULL, NULL, controller_setup);
- test_bredrle("Invalid command",
- &invalid_command_test,
- NULL, test_command_generic);
- test_bredrle("Read version - Success",
- &read_version_success_test,
- NULL, test_command_generic);
- test_bredrle("Read version - Invalid parameters",
- &read_version_invalid_param_test,
- NULL, test_command_generic);
- test_bredrle("Read version - Invalid index",
- &read_version_invalid_index_test,
- NULL, test_command_generic);
- test_bredrle("Read commands - Invalid parameters",
- &read_commands_invalid_param_test,
- NULL, test_command_generic);
- test_bredrle("Read commands - Invalid index",
- &read_commands_invalid_index_test,
- NULL, test_command_generic);
- test_bredrle("Read index list - Invalid parameters",
- &read_index_list_invalid_param_test,
- NULL, test_command_generic);
- test_bredrle("Read index list - Invalid index",
- &read_index_list_invalid_index_test,
- NULL, test_command_generic);
- test_bredrle("Read info - Invalid parameters",
- &read_info_invalid_param_test,
- NULL, test_command_generic);
- test_bredrle("Read info - Invalid index",
- &read_info_invalid_index_test,
- NULL, test_command_generic);
- test_bredrle("Read unconfigured index list - Invalid parameters",
- &read_unconf_index_list_invalid_param_test,
- NULL, test_command_generic);
- test_bredrle("Read unconfigured index list - Invalid index",
- &read_unconf_index_list_invalid_index_test,
- NULL, test_command_generic);
- test_bredrle("Read configuration info - Invalid parameters",
- &read_config_info_invalid_param_test,
- NULL, test_command_generic);
- test_bredrle("Read configuration info - Invalid index",
- &read_config_info_invalid_index_test,
- NULL, test_command_generic);
- test_bredrle("Read extended index list - Invalid parameters",
- &read_ext_index_list_invalid_param_test,
- NULL, test_command_generic);
- test_bredrle("Read extended index list - Invalid index",
- &read_ext_index_list_invalid_index_test,
- NULL, test_command_generic);
- test_bredrle("Set powered on - Success",
- &set_powered_on_success_test,
- NULL, test_command_generic);
- test_bredrle("Set powered on - Invalid parameters 1",
- &set_powered_on_invalid_param_test_1,
- NULL, test_command_generic);
- test_bredrle("Set powered on - Invalid parameters 2",
- &set_powered_on_invalid_param_test_2,
- NULL, test_command_generic);
- test_bredrle("Set powered on - Invalid parameters 3",
- &set_powered_on_invalid_param_test_3,
- NULL, test_command_generic);
- test_bredrle("Set powered on - Invalid index",
- &set_powered_on_invalid_index_test,
- NULL, test_command_generic);
- test_le("Set powered on - Privacy and Advertising",
- &set_powered_on_privacy_adv_test,
- NULL, test_command_generic);
- test_bredrle("Set powered off - Success",
- &set_powered_off_success_test,
- NULL, test_command_generic);
- test_bredrle("Set powered off - Class of Device",
- &set_powered_off_class_test,
- setup_class, test_command_generic);
- test_bredrle("Set powered off - Invalid parameters 1",
- &set_powered_off_invalid_param_test_1,
- NULL, test_command_generic);
- test_bredrle("Set powered off - Invalid parameters 2",
- &set_powered_off_invalid_param_test_2,
- NULL, test_command_generic);
- test_bredrle("Set powered off - Invalid parameters 3",
- &set_powered_off_invalid_param_test_3,
- NULL, test_command_generic);
- test_bredrle("Set connectable on - Success 1",
- &set_connectable_on_success_test_1,
- NULL, test_command_generic);
- test_bredrle("Set connectable on - Success 2",
- &set_connectable_on_success_test_2,
- NULL, test_command_generic);
- test_bredrle("Set connectable on - Invalid parameters 1",
- &set_connectable_on_invalid_param_test_1,
- NULL, test_command_generic);
- test_bredrle("Set connectable on - Invalid parameters 2",
- &set_connectable_on_invalid_param_test_2,
- NULL, test_command_generic);
- test_bredrle("Set connectable on - Invalid parameters 3",
- &set_connectable_on_invalid_param_test_3,
- NULL, test_command_generic);
- test_bredrle("Set connectable on - Invalid index",
- &set_connectable_on_invalid_index_test,
- NULL, test_command_generic);
- test_le("Set connectable on (LE) - Success 1",
- &set_connectable_on_le_test_1,
- NULL, test_command_generic);
- test_le("Set connectable on (LE) - Success 2",
- &set_connectable_on_le_test_2,
- NULL, test_command_generic);
- test_le("Set connectable on (LE) - Success 3",
- &set_connectable_on_le_test_3,
- NULL, test_command_generic);
- test_bredrle("Set connectable off - Success 1",
- &set_connectable_off_success_test_1,
- NULL, test_command_generic);
- test_bredrle("Set connectable off - Success 2",
- &set_connectable_off_success_test_2,
- NULL, test_command_generic);
- test_bredrle("Set connectable off - Success 3",
- &set_connectable_off_success_test_3,
- NULL, test_command_generic);
- test_bredrle("Set connectable off - Success 4",
- &set_connectable_off_success_test_4,
- setup_add_device, test_command_generic);
- test_le("Set connectable off (LE) - Success 1",
- &set_connectable_off_le_test_1,
- NULL, test_command_generic);
- test_le("Set connectable off (LE) - Success 2",
- &set_connectable_off_le_test_2,
- NULL, test_command_generic);
- test_le("Set connectable off (LE) - Success 3",
- &set_connectable_off_le_test_3,
- NULL, test_command_generic);
- test_le("Set connectable off (LE) - Success 4",
- &set_connectable_off_le_test_4,
- NULL, test_command_generic);
- test_bredrle("Set fast connectable on - Success 1",
- &set_fast_conn_on_success_test_1,
- NULL, test_command_generic);
- test_bredrle("Set fast connectable on - Success 2",
- &set_fast_conn_on_success_test_2,
- NULL, test_command_generic);
- test_bredrle("Set fast connectable on - Success 3",
- &set_fast_conn_on_success_test_3,
- NULL, test_command_generic);
- test_bredrle("Set fast connectable on - Invalid Params 1",
- &set_fast_conn_nval_param_test_1,
- NULL, test_command_generic);
- test_le("Set fast connectable on - Not Supported 1",
- &set_fast_conn_on_not_supported_test_1,
- NULL, test_command_generic);
- test_bredrle("Set bondable on - Success",
- &set_bondable_on_success_test,
- NULL, test_command_generic);
- test_bredrle("Set bondable on - Invalid parameters 1",
- &set_bondable_on_invalid_param_test_1,
- NULL, test_command_generic);
- test_bredrle("Set bondable on - Invalid parameters 2",
- &set_bondable_on_invalid_param_test_2,
- NULL, test_command_generic);
- test_bredrle("Set bondable on - Invalid parameters 3",
- &set_bondable_on_invalid_param_test_3,
- NULL, test_command_generic);
- test_bredrle("Set bondable on - Invalid index",
- &set_bondable_on_invalid_index_test,
- NULL, test_command_generic);
- test_bredrle("Set discoverable on - Invalid parameters 1",
- &set_discoverable_on_invalid_param_test_1,
- NULL, test_command_generic);
- test_bredrle("Set discoverable on - Invalid parameters 2",
- &set_discoverable_on_invalid_param_test_2,
- NULL, test_command_generic);
- test_bredrle("Set discoverable on - Invalid parameters 3",
- &set_discoverable_on_invalid_param_test_3,
- NULL, test_command_generic);
- test_bredrle("Set discoverable on - Invalid parameters 4",
- &set_discoverable_on_invalid_param_test_4,
- NULL, test_command_generic);
- test_bredrle("Set discoverable on - Not powered 1",
- &set_discoverable_on_not_powered_test_1,
- NULL, test_command_generic);
- test_bredrle("Set discoverable on - Not powered 2",
- &set_discoverable_on_not_powered_test_2,
- NULL, test_command_generic);
- test_bredrle("Set discoverable on - Rejected 1",
- &set_discoverable_on_rejected_test_1,
- NULL, test_command_generic);
- test_bredrle("Set discoverable on - Rejected 2",
- &set_discoverable_on_rejected_test_2,
- NULL, test_command_generic);
- test_bredrle("Set discoverable on - Rejected 3",
- &set_discoverable_on_rejected_test_3,
- NULL, test_command_generic);
- test_bredrle("Set discoverable on - Success 1",
- &set_discoverable_on_success_test_1,
- NULL, test_command_generic);
- test_bredrle("Set discoverable on - Success 2",
- &set_discoverable_on_success_test_2,
- NULL, test_command_generic);
- test_le("Set discoverable on (LE) - Success 1",
- &set_discov_on_le_success_1,
- NULL, test_command_generic);
- test_bredrle("Set discoverable off - Success 1",
- &set_discoverable_off_success_test_1,
- NULL, test_command_generic);
- test_bredrle("Set discoverable off - Success 2",
- &set_discoverable_off_success_test_2,
- NULL, test_command_generic);
- test_bredrle("Set limited discoverable on - Success 1",
- &set_limited_discov_on_success_1,
- NULL, test_command_generic);
- test_bredrle("Set limited discoverable on - Success 2",
- &set_limited_discov_on_success_2,
- NULL, test_command_generic);
- test_bredrle("Set limited discoverable on - Success 3",
- &set_limited_discov_on_success_3,
- NULL, test_command_generic);
- test_le("Set limited discoverable on (LE) - Success 1",
- &set_limited_discov_on_le_success_1,
- NULL, test_command_generic);
- test_bredrle("Set link security on - Success 1",
- &set_link_sec_on_success_test_1,
- NULL, test_command_generic);
- test_bredrle("Set link security on - Success 2",
- &set_link_sec_on_success_test_2,
- NULL, test_command_generic);
- test_bredrle("Set link security on - Success 3",
- &set_link_sec_on_success_test_3,
- NULL, test_command_generic);
- test_bredrle("Set link security on - Invalid parameters 1",
- &set_link_sec_on_invalid_param_test_1,
- NULL, test_command_generic);
- test_bredrle("Set link security on - Invalid parameters 2",
- &set_link_sec_on_invalid_param_test_2,
- NULL, test_command_generic);
- test_bredrle("Set link security on - Invalid parameters 3",
- &set_link_sec_on_invalid_param_test_3,
- NULL, test_command_generic);
- test_bredrle("Set link security on - Invalid index",
- &set_link_sec_on_invalid_index_test,
- NULL, test_command_generic);
- test_bredrle("Set link security off - Success 1",
- &set_link_sec_off_success_test_1,
- NULL, test_command_generic);
- test_bredrle("Set link security off - Success 2",
- &set_link_sec_off_success_test_2,
- NULL, test_command_generic);
- test_bredrle("Set SSP on - Success 1",
- &set_ssp_on_success_test_1,
- NULL, test_command_generic);
- test_bredrle("Set SSP on - Success 2",
- &set_ssp_on_success_test_2,
- NULL, test_command_generic);
- test_bredrle("Set SSP on - Success 3",
- &set_ssp_on_success_test_3,
- NULL, test_command_generic);
- test_bredrle("Set SSP on - Invalid parameters 1",
- &set_ssp_on_invalid_param_test_1,
- NULL, test_command_generic);
- test_bredrle("Set SSP on - Invalid parameters 2",
- &set_ssp_on_invalid_param_test_2,
- NULL, test_command_generic);
- test_bredrle("Set SSP on - Invalid parameters 3",
- &set_ssp_on_invalid_param_test_3,
- NULL, test_command_generic);
- test_bredrle("Set SSP on - Invalid index",
- &set_ssp_on_invalid_index_test,
- NULL, test_command_generic);
- test_bredrle("Set Secure Connections on - Success 1",
- &set_sc_on_success_test_1,
- NULL, test_command_generic);
- test_bredrle("Set Secure Connections on - Success 2",
- &set_sc_on_success_test_2,
- NULL, test_command_generic);
- test_bredrle("Set Secure Connections on - Invalid params 1",
- &set_sc_on_invalid_param_test_1,
- NULL, test_command_generic);
- test_bredrle("Set Secure Connections on - Invalid params 2",
- &set_sc_on_invalid_param_test_2,
- NULL, test_command_generic);
- test_bredrle("Set Secure Connections on - Invalid params 3",
- &set_sc_on_invalid_param_test_3,
- NULL, test_command_generic);
- test_bredrle("Set Secure Connections on - Invalid index",
- &set_sc_on_invalid_index_test,
- NULL, test_command_generic);
- test_bredr("Set Secure Connections on - Not supported 1",
- &set_sc_on_not_supported_test_1,
- NULL, test_command_generic);
- test_bredr("Set Secure Connections on - Not supported 2",
- &set_sc_on_not_supported_test_2,
- NULL, test_command_generic);
- test_bredrle("Set Secure Connections Only on - Success 1",
- &set_sc_only_on_success_test_1,
- NULL, test_command_generic);
- test_bredrle("Set Secure Connections Only on - Success 2",
- &set_sc_only_on_success_test_2,
- NULL, test_command_generic);
- test_hs("Set High Speed on - Success",
- &set_hs_on_success_test,
- NULL, test_command_generic);
- test_hs("Set High Speed on - Invalid parameters 1",
- &set_hs_on_invalid_param_test_1,
- NULL, test_command_generic);
- test_hs("Set High Speed on - Invalid parameters 2",
- &set_hs_on_invalid_param_test_2,
- NULL, test_command_generic);
- test_hs("Set High Speed on - Invalid parameters 3",
- &set_hs_on_invalid_param_test_3,
- NULL, test_command_generic);
- test_hs("Set High Speed on - Invalid index",
- &set_hs_on_invalid_index_test,
- NULL, test_command_generic);
- test_bredrle("Set Low Energy on - Success 1",
- &set_le_on_success_test_1,
- NULL, test_command_generic);
- test_bredrle("Set Low Energy on - Success 2",
- &set_le_on_success_test_2,
- NULL, test_command_generic);
- test_bredrle("Set Low Energy on - Success 3",
- &set_le_on_success_test_3,
- NULL, test_command_generic);
- test_bredrle("Set Low Energy on - Invalid parameters 1",
- &set_le_on_invalid_param_test_1,
- NULL, test_command_generic);
- test_bredrle("Set Low Energy on - Invalid parameters 2",
- &set_le_on_invalid_param_test_2,
- NULL, test_command_generic);
- test_bredrle("Set Low Energy on - Invalid parameters 3",
- &set_le_on_invalid_param_test_3,
- NULL, test_command_generic);
- test_bredrle("Set Low Energy on - Invalid index",
- &set_le_on_invalid_index_test,
- NULL, test_command_generic);
- test_bredrle("Set Advertising on - Success 1",
- &set_adv_on_success_test_1,
- NULL, test_command_generic);
- test_bredrle("Set Advertising on - Success 2",
- &set_adv_on_success_test_2,
- NULL, test_command_generic);
- test_bredrle("Set Advertising on - Rejected 1",
- &set_adv_on_rejected_test_1,
- NULL, test_command_generic);
- test_bredrle("Set Advertising on - Appearance 1",
- &set_adv_on_appearance_test_1,
- setup_command_generic, test_command_generic);
- test_bredrle("Set Advertising on - Local name 1",
- &set_adv_on_local_name_test_1,
- setup_command_generic, test_command_generic);
- test_bredrle("Set Advertising on - Name + Appear 1",
- &set_adv_on_local_name_appear_test_1,
- setup_command_generic, test_command_generic);
- test_bredrle("Set BR/EDR off - Success 1",
- &set_bredr_off_success_test_1,
- NULL, test_command_generic);
- test_bredrle("Set BR/EDR on - Success 1",
- &set_bredr_on_success_test_1,
- NULL, test_command_generic);
- test_bredrle("Set BR/EDR on - Success 2",
- &set_bredr_on_success_test_2,
- NULL, test_command_generic);
- test_bredr("Set BR/EDR off - Not Supported 1",
- &set_bredr_off_notsupp_test,
- NULL, test_command_generic);
- test_le("Set BR/EDR off - Not Supported 2",
- &set_bredr_off_notsupp_test,
- NULL, test_command_generic);
- test_bredrle("Set BR/EDR off - Rejected 1",
- &set_bredr_off_failure_test_1,
- NULL, test_command_generic);
- test_bredrle("Set BR/EDR off - Rejected 2",
- &set_bredr_off_failure_test_2,
- NULL, test_command_generic);
- test_bredrle("Set BR/EDR off - Invalid Parameters 1",
- &set_bredr_off_failure_test_3,
- NULL, test_command_generic);
- test_bredr("Set Local Name - Success 1",
- &set_local_name_test_1,
- NULL, test_command_generic);
- test_bredr("Set Local Name - Success 2",
- &set_local_name_test_2,
- NULL, test_command_generic);
- test_bredr("Set Local Name - Success 3",
- &set_local_name_test_3,
- NULL, test_command_generic);
- test_bredrle("Start Discovery - Not powered 1",
- &start_discovery_not_powered_test_1,
- NULL, test_command_generic);
- test_bredrle("Start Discovery - Invalid parameters 1",
- &start_discovery_invalid_param_test_1,
- NULL, test_command_generic);
- test_bredrle("Start Discovery - Not supported 1",
- &start_discovery_not_supported_test_1,
- NULL, test_command_generic);
- test_bredrle("Start Discovery - Success 1",
- &start_discovery_valid_param_test_1,
- NULL, test_command_generic);
- test_le("Start Discovery - Success 2",
- &start_discovery_valid_param_test_2,
- NULL, test_command_generic);
- test_bredrle("Start Discovery - Power Off 1",
- &start_discovery_valid_param_power_off_1,
- NULL, test_command_generic);
- /* MGMT_OP_START_DISCOVERY
- * Check if the resolving list is disabled before the scan parameter is
- * changed.
- */
- test_bredrle50("Start Discovery - Disable Resolve List",
- &start_discovery_ll_privacy_disable_resolv,
- setup_ll_privacy_device, test_command_generic);
- test_bredrle("Stop Discovery - Success 1",
- &stop_discovery_success_test_1,
- setup_start_discovery, test_command_generic);
- test_bredr("Stop Discovery - BR/EDR (Inquiry) Success 1",
- &stop_discovery_bredr_success_test_1,
- setup_start_discovery, test_command_generic);
- test_bredrle("Stop Discovery - Rejected 1",
- &stop_discovery_rejected_test_1,
- NULL, test_command_generic);
- test_bredrle("Stop Discovery - Invalid parameters 1",
- &stop_discovery_invalid_param_test_1,
- setup_start_discovery, test_command_generic);
- test_bredrle("Start Service Discovery - Not powered 1",
- &start_service_discovery_not_powered_test_1,
- NULL, test_command_generic);
- test_bredrle("Start Service Discovery - Invalid parameters 1",
- &start_service_discovery_invalid_param_test_1,
- NULL, test_command_generic);
- test_bredrle("Start Service Discovery - Not supported 1",
- &start_service_discovery_not_supported_test_1,
- NULL, test_command_generic);
- test_bredrle("Start Service Discovery - Success 1",
- &start_service_discovery_valid_param_test_1,
- NULL, test_command_generic);
- test_le("Start Service Discovery - Success 2",
- &start_service_discovery_valid_param_test_2,
- NULL, test_command_generic);
- test_bredrle("Set Device Class - Success 1",
- &set_dev_class_valid_param_test_1,
- NULL, test_command_generic);
- test_bredrle("Set Device Class - Success 2",
- &set_dev_class_valid_param_test_2,
- NULL, test_command_generic);
- test_bredrle("Set Device Class - Invalid parameters 1",
- &set_dev_class_invalid_param_test_1,
- NULL, test_command_generic);
- test_bredrle("Add UUID - UUID-16 1",
- &add_uuid16_test_1,
- NULL, test_command_generic);
- test_bredrle("Add UUID - UUID-16 multiple 1",
- &add_multi_uuid16_test_1,
- setup_multi_uuid16, test_command_generic);
- test_bredrle("Add UUID - UUID-16 partial 1",
- &add_multi_uuid16_test_2,
- setup_multi_uuid16_2, test_command_generic);
- test_bredrle("Add UUID - UUID-32 1",
- &add_uuid32_test_1,
- NULL, test_command_generic);
- test_bredrle("Add UUID - UUID-32 multiple 1",
- &add_uuid32_multi_test_1,
- setup_multi_uuid32, test_command_generic);
- test_bredrle("Add UUID - UUID-32 partial 1",
- &add_uuid32_multi_test_2,
- setup_multi_uuid32_2, test_command_generic);
- test_bredrle("Add UUID - UUID-128 1",
- &add_uuid128_test_1,
- NULL, test_command_generic);
- test_bredrle("Add UUID - UUID-128 multiple 1",
- &add_uuid128_multi_test_1,
- setup_multi_uuid128, test_command_generic);
- test_bredrle("Add UUID - UUID-128 partial 1",
- &add_uuid128_multi_test_2,
- setup_multi_uuid128_2, test_command_generic);
- test_bredrle("Add UUID - UUID mix",
- &add_uuid_mix_test_1,
- setup_uuid_mix, test_command_generic);
- /* MGMT_OP_REMOVE_UUID
- * Remove existing UUID.
- */
- test_bredrle("Remove UUID - Success 1",
- &remove_uuid_success_1,
- setup_multi_uuid16, test_command_generic);
- /* MGMT_OP_REMOVE_UUID
- * Remove all UUID by sending zero filled UUID
- */
- test_bredrle("Remove UUID - All UUID - Success 2",
- &remove_uuid_all_success_2,
- setup_multi_uuid16, test_command_generic);
- /* MGMT_OP_REMOVE_UUID
- * Remove UUID while powering off
- * Expect the 0x000000 for the class of device
- */
- test_bredrle("Remove UUID - Power Off - Success 3",
- &remove_uuid_power_off_success_3,
- setup_multi_uuid16_power_off,
- test_command_generic);
- /* MGMT_OP_REMOVE_UUID
- * Remove UUID while powering off and then powering on
- */
- test_bredrle("Remove UUID - Power Off and On - Success 4",
- &remove_uuid_power_off_on_success_4,
- setup_multi_uuid16_power_off_remove,
- test_command_generic);
- /* MGMT_OP_REMOVE_UUID
- * Remove UUID doesn't exist - Invalid parameter
- */
- test_bredrle("Remove UUID - Not Exist - Invalid Params 1",
- &remove_uuid_invalid_params_1,
- setup_multi_uuid16, test_command_generic);
- test_bredrle("Load Link Keys - Empty List Success 1",
- &load_link_keys_success_test_1,
- NULL, test_command_generic);
- test_bredrle("Load Link Keys - Empty List Success 2",
- &load_link_keys_success_test_2,
- NULL, test_command_generic);
- test_bredrle("Load Link Keys - Invalid Parameters 1",
- &load_link_keys_invalid_params_test_1,
- NULL, test_command_generic);
- test_bredrle("Load Link Keys - Invalid Parameters 2",
- &load_link_keys_invalid_params_test_2,
- NULL, test_command_generic);
- test_bredrle("Load Link Keys - Invalid Parameters 3",
- &load_link_keys_invalid_params_test_3,
- NULL, test_command_generic);
- test_bredrle("Load Long Term Keys - Success 1",
- &load_ltks_success_test_1,
- NULL, test_command_generic);
- test_bredrle("Load Long Term Keys - Success 2",
- &load_ltks_success_test_2,
- NULL, test_command_generic);
- test_bredrle("Load Long Term Keys - Success 3 (20 with count 1)",
- &load_ltks_success_test_3,
- setup_load_ltks_20_by_1, test_command_generic);
- test_bredrle("Load Long Term Keys - Success 4 (20 with count 20)",
- &load_ltks_success_test_4,
- NULL, test_command_generic);
- test_bredrle("Load Long Term Keys - Success 5 (Power On and 20 keys)",
- &load_ltks_success_test_5,
- NULL, test_command_generic);
- test_bredrle("Load Long Term Keys - Invalid Parameters 1",
- &load_ltks_invalid_params_test_1,
- NULL, test_command_generic);
- test_bredrle("Load Long Term Keys - Invalid Parameters 2",
- &load_ltks_invalid_params_test_2,
- NULL, test_command_generic);
- test_bredrle("Load Long Term Keys - Invalid Parameters 3",
- &load_ltks_invalid_params_test_3,
- NULL, test_command_generic);
- test_bredrle("Load Long Term Keys - Invalid Parameters 4",
- &load_ltks_invalid_params_test_4,
- NULL, test_command_generic);
- test_bredrle("Set IO Capability - Invalid Params 1",
- &set_io_cap_invalid_param_test_1,
- NULL, test_command_generic);
- test_bredrle("Pair Device - Not Powered 1",
- &pair_device_not_powered_test_1,
- NULL, test_command_generic);
- test_bredrle("Pair Device - Power off 1",
- &pair_device_power_off_test_1,
- NULL, test_command_generic);
- test_le("Pair Device - Incorrect transport reject 1",
- &pair_device_not_supported_test_1,
- NULL, test_command_generic);
- test_bredr("Pair Device - Incorrect transport reject 2",
- &pair_device_not_supported_test_2,
- NULL, test_command_generic);
- test_bredrle("Pair Device - Reject on not enabled transport 1",
- &pair_device_reject_transport_not_enabled_1,
- NULL, test_command_generic);
- test_bredrle("Pair Device - Reject on not enabled transport 2",
- &pair_device_reject_transport_not_enabled_2,
- NULL, test_command_generic);
- test_bredrle("Pair Device - Invalid Parameters 1",
- &pair_device_invalid_param_test_1,
- NULL, test_command_generic);
- test_bredrle("Pair Device - Invalid Parameters 2",
- &pair_device_invalid_param_test_2,
- NULL, test_command_generic);
- test_bredrle("Pair Device - Legacy Success 1",
- &pair_device_success_test_1,
- NULL, test_command_generic);
- test_bredrle("Pair Device - Legacy Non-bondable 1",
- &pair_device_legacy_nonbondable_1,
- NULL, test_command_generic);
- test_bredrle("Pair Device - Sec Mode 3 Success 1",
- &pair_device_success_test_2,
- NULL, test_command_generic);
- test_bredrle("Pair Device - Legacy Reject 1",
- &pair_device_reject_test_1,
- NULL, test_command_generic);
- test_bredrle("Pair Device - Legacy Reject 2",
- &pair_device_reject_test_2,
- NULL, test_command_generic);
- test_bredrle("Pair Device - Sec Mode 3 Reject 1",
- &pair_device_reject_test_3,
- NULL, test_command_generic);
- test_bredrle("Pair Device - Sec Mode 3 Reject 2",
- &pair_device_reject_test_4,
- NULL, test_command_generic);
- test_bredrle("Pair Device - SSP Just-Works Success 1",
- &pair_device_ssp_test_1,
- NULL, test_command_generic);
- test_bredrle("Pair Device - SSP Just-Works Success 2",
- &pair_device_ssp_test_2,
- NULL, test_command_generic);
- test_bredrle("Pair Device - SSP Just-Works Success 3",
- &pair_device_ssp_test_3,
- NULL, test_command_generic);
- test_bredrle("Pair Device - SSP Confirm Success 1",
- &pair_device_ssp_test_4,
- NULL, test_command_generic);
- test_bredrle("Pair Device - SSP Confirm Success 2",
- &pair_device_ssp_test_5,
- NULL, test_command_generic);
- test_bredrle("Pair Device - SSP Confirm Success 3",
- &pair_device_ssp_test_6,
- NULL, test_command_generic);
- test_bredrle("Pair Device - SSP Confirm Reject 1",
- &pair_device_ssp_reject_1,
- NULL, test_command_generic);
- test_bredrle("Pair Device - SSP Confirm Reject 2",
- &pair_device_ssp_reject_2,
- NULL, test_command_generic);
- test_bredrle("Pair Device - SSP Non-bondable 1",
- &pair_device_ssp_nonbondable_1,
- NULL, test_command_generic);
- test_bredrle("Pair Device - SMP over BR/EDR Success 1",
- &pair_device_smp_bredr_test_1,
- NULL, test_command_generic);
- test_bredrle("Pair Device - SMP over BR/EDR Success 2",
- &pair_device_smp_bredr_test_2,
- NULL, test_command_generic);
- test_le("Pair Device - LE Success 1",
- &pair_device_le_success_test_1,
- NULL, test_command_generic);
- test_le("Pair Device - LE Success 2",
- &pair_device_le_success_test_2,
- NULL, test_command_generic);
- test_le("Pair Device - LE Reject 1",
- &pair_device_le_reject_test_1,
- NULL, test_command_generic);
- test_le("Pair Device - LE SC Legacy 1",
- &pair_device_le_sc_legacy_test_1,
- NULL, test_command_generic);
- test_le("Pair Device - LE SC Success 1",
- &pair_device_le_sc_success_test_1,
- NULL, test_command_generic);
- test_le("Pair Device - LE SC Success 2",
- &pair_device_le_sc_success_test_2,
- NULL, test_command_generic);
- test_bredrle("Pair Device - LE SC Success 3",
- &pair_device_le_sc_success_test_3,
- NULL, test_command_generic);
- test_bredrle("Pairing Acceptor - Legacy 1",
- &pairing_acceptor_legacy_1, NULL,
- test_pairing_acceptor);
- test_bredrle("Pairing Acceptor - Legacy 2",
- &pairing_acceptor_legacy_2, NULL,
- test_pairing_acceptor);
- test_bredrle("Pairing Acceptor - Legacy 3",
- &pairing_acceptor_legacy_3, NULL,
- test_pairing_acceptor);
- test_bredrle("Pairing Acceptor - Link Sec 1",
- &pairing_acceptor_linksec_1, NULL,
- test_pairing_acceptor);
- test_bredrle("Pairing Acceptor - Link Sec 2",
- &pairing_acceptor_linksec_2, NULL,
- test_pairing_acceptor);
- test_bredrle("Pairing Acceptor - SSP 1",
- &pairing_acceptor_ssp_1, setup_pairing_acceptor,
- test_pairing_acceptor);
- test_bredrle("Pairing Acceptor - SSP 2",
- &pairing_acceptor_ssp_2, setup_pairing_acceptor,
- test_pairing_acceptor);
- test_bredrle("Pairing Acceptor - SSP 3",
- &pairing_acceptor_ssp_3, setup_pairing_acceptor,
- test_pairing_acceptor);
- test_bredrle("Pairing Acceptor - SSP 4",
- &pairing_acceptor_ssp_4, setup_pairing_acceptor,
- test_pairing_acceptor);
- test_bredrle("Pairing Acceptor - SMP over BR/EDR 1",
- &pairing_acceptor_smp_bredr_1,
- setup_pairing_acceptor, test_pairing_acceptor);
- test_bredrle("Pairing Acceptor - SMP over BR/EDR 2",
- &pairing_acceptor_smp_bredr_2,
- setup_pairing_acceptor, test_pairing_acceptor);
- test_le("Pairing Acceptor - LE 1",
- &pairing_acceptor_le_1, setup_pairing_acceptor,
- test_pairing_acceptor);
- test_le("Pairing Acceptor - LE 2",
- &pairing_acceptor_le_2, setup_pairing_acceptor,
- test_pairing_acceptor);
- test_le("Pairing Acceptor - LE 3",
- &pairing_acceptor_le_3, setup_pairing_acceptor,
- test_pairing_acceptor);
- test_le("Pairing Acceptor - LE 4",
- &pairing_acceptor_le_4, setup_pairing_acceptor,
- test_pairing_acceptor);
- test_le("Pairing Acceptor - LE 5",
- &pairing_acceptor_le_5, setup_pairing_acceptor,
- test_pairing_acceptor);
- test_bredrle("Unpair Device - Not Powered 1",
- &unpair_device_not_powered_test_1,
- NULL, test_command_generic);
- test_bredrle("Unpair Device - Invalid Parameters 1",
- &unpair_device_invalid_param_test_1,
- NULL, test_command_generic);
- test_bredrle("Unpair Device - Invalid Parameters 2",
- &unpair_device_invalid_param_test_2,
- NULL, test_command_generic);
- test_bredrle("Disconnect - Invalid Parameters 1",
- &disconnect_invalid_param_test_1,
- NULL, test_command_generic);
- test_bredrle("Block Device - Invalid Parameters 1",
- &block_device_invalid_param_test_1,
- NULL, test_command_generic);
- test_bredrle("Unblock Device - Invalid Parameters 1",
- &unblock_device_invalid_param_test_1,
- NULL, test_command_generic);
- test_le("Set Static Address - Success 1",
- &set_static_addr_success_test,
- NULL, test_command_generic);
- test_bredrle("Set Static Address - Success 2",
- &set_static_addr_success_test_2,
- NULL, test_command_generic);
- test_bredrle("Set Static Address - Failure 1",
- &set_static_addr_failure_test,
- NULL, test_command_generic);
- test_bredr("Set Static Address - Failure 2",
- &set_static_addr_failure_test_2,
- NULL, test_command_generic);
- test_bredrle("Set Scan Parameters - Success",
- &set_scan_params_success_test,
- NULL, test_command_generic);
- test_bredrle("Load IRKs - Success 1",
- &load_irks_success1_test,
- NULL, test_command_generic);
- test_bredrle("Load IRKs - Success 2",
- &load_irks_success2_test,
- NULL, test_command_generic);
- test_bredrle("Load IRKs - Invalid Parameters 1",
- &load_irks_nval_param1_test,
- NULL, test_command_generic);
- test_bredrle("Load IRKs - Invalid Parameters 2",
- &load_irks_nval_param2_test,
- NULL, test_command_generic);
- test_bredrle("Load IRKs - Invalid Parameters 3",
- &load_irks_nval_param3_test,
- NULL, test_command_generic);
- test_bredr("Load IRKs - Not Supported",
- &load_irks_not_supported_test,
- NULL, test_command_generic);
- test_bredrle("Set Privacy - Success",
- &set_privacy_success_test,
- NULL, test_command_generic);
- test_bredrle("Set Privacy - Rejected",
- &set_privacy_powered_test,
- NULL, test_command_generic);
- test_bredrle("Set Privacy - Invalid Parameters",
- &set_privacy_nval_param_test,
- NULL, test_command_generic);
- test_bredrle("Get Clock Info - Success",
- &get_clock_info_succes1_test, NULL,
- test_command_generic_connect);
- test_bredrle("Get Clock Info - Fail (Power Off)",
- &get_clock_info_fail1_test, NULL,
- test_command_generic);
- test_bredrle("Get Conn Info - Success",
- &get_conn_info_succes1_test, NULL,
- test_command_generic_connect);
- test_bredrle("Get Conn Info - Not Connected",
- &get_conn_info_ncon_test, NULL,
- test_command_generic);
- test_bredrle("Get Conn Info - Power off",
- &get_conn_info_power_off_test, NULL,
- test_command_generic_connect);
- test_bredrle("Load Connection Parameters - Invalid Params 1",
- &load_conn_params_fail_1,
- NULL, test_command_generic);
- test_bredrle("Add Device - Invalid Params 1",
- &add_device_fail_1,
- NULL, test_command_generic);
- test_bredrle("Add Device - Invalid Params 2",
- &add_device_fail_2,
- NULL, test_command_generic);
- test_bredrle("Add Device - Invalid Params 3",
- &add_device_fail_3,
- NULL, test_command_generic);
- test_bredrle("Add Device - Invalid Params 4",
- &add_device_fail_4,
- NULL, test_command_generic);
- test_bredrle("Add Device - Success 1",
- &add_device_success_1,
- NULL, test_command_generic);
- test_bredrle("Add Device - Success 2",
- &add_device_success_2,
- NULL, test_command_generic);
- test_bredrle("Add Device - Success 3",
- &add_device_success_3,
- NULL, test_command_generic);
- test_bredrle("Add Device - Success 4",
- &add_device_success_4,
- NULL, test_command_generic);
- test_bredrle("Add Device - Success 5",
- &add_device_success_5,
- NULL, test_command_generic);
- /* MGMT_OP_ADD_DEVICE
- * Add device and check the device is added to the accept list
- */
- test_bredrle50("Add Device - Success 6 - Add to accept list",
- &add_device_success_6,
- NULL, test_command_generic);
- /* MGMT_OP_ADD_DEVICE
- * Add device and check the device is added to the resolve list
- * when the LL Privacy is enabled
- */
- test_bredrle50("Add Device - Success 7 - Add to resolv list",
- &add_device_success_7,
- setup_ll_privacy, test_command_generic);
- /* MGMT_OP_ADD_DEVICE
- * Add device and check the Resolving List is enabled for the device
- * when the LL Privacy is enabled
- */
- test_bredrle50("Add Device - Success 8 - Enable resolv list",
- &add_device_success_8,
- setup_ll_privacy, test_command_generic);
- test_bredrle("Remove Device - Invalid Params 1",
- &remove_device_fail_1,
- NULL, test_command_generic);
- test_bredrle("Remove Device - Invalid Params 2",
- &remove_device_fail_2,
- NULL, test_command_generic);
- test_bredrle("Remove Device - Invalid Params 3",
- &remove_device_fail_3,
- NULL, test_command_generic);
- test_bredrle("Remove Device - Success 1",
- &remove_device_success_1,
- setup_add_device, test_command_generic);
- test_bredrle("Remove Device - Success 2",
- &remove_device_success_2,
- setup_add_device, test_command_generic);
- test_bredrle("Remove Device - Success 3",
- &remove_device_success_3,
- setup_add_device, test_remove_device);
- test_le("Remove Device - Success 4",
- &remove_device_success_4,
- setup_add_device, test_remove_device);
- test_le("Remove Device - Success 5",
- &remove_device_success_5,
- setup_add_device, test_remove_device);
- /* MGMT_OP_REMOVE_DEVICE
- * Remove all devices
- */
- test_bredrle50("Remove Device - Success 6 - All Devices",
- &remove_device_success_6,
- setup_add_device, test_remove_device);
- /* MGMT_OP_REMOVE_DEVICE
- * Remove the device and check the device is removed from the whilte
- * list as well.
- */
- test_bredrle50("Remove Device - Success 7 - Remove from accept list",
- &remove_device_success_7,
- setup_ll_privacy_device2, test_command_generic);
- /* MGMT_OP_REMOVE_DEVICE
- * Remove the device and check the device is removed from the resolving
- * list as well when the LL Privacy is enabled.
- */
- test_bredrle50("Remove Device - Success 8 - Remove from resolv list",
- &remove_device_success_8,
- setup_ll_privacy_device2, test_command_generic);
- test_bredrle("Read Advertising Features - Invalid parameters",
- &read_adv_features_invalid_param_test,
- NULL, test_command_generic);
- test_bredrle("Read Advertising Features - Invalid index",
- &read_adv_features_invalid_index_test,
- NULL, test_command_generic);
- test_bredrle("Read Advertising Features - Success 1 (No instance)",
- &read_adv_features_success_1,
- NULL, test_command_generic);
- test_bredrle("Read Advertising Features - Success 2 (One instance)",
- &read_adv_features_success_2,
- setup_add_advertising,
- test_command_generic);
- test_bredrle("Add Advertising - Failure: LE off",
- &add_advertising_fail_1,
- NULL, test_command_generic);
- test_bredrle("Add Advertising - Invalid Params 1 (AD too long)",
- &add_advertising_fail_2,
- NULL, test_command_generic);
- test_bredrle("Add Advertising - Invalid Params 2 (Malformed len)",
- &add_advertising_fail_3,
- NULL, test_command_generic);
- test_bredrle("Add Advertising - Invalid Params 3 (Malformed len)",
- &add_advertising_fail_4,
- NULL, test_command_generic);
- test_bredrle("Add Advertising - Invalid Params 4 (Malformed len)",
- &add_advertising_fail_5,
- NULL, test_command_generic);
- test_le("Add Advertising - Invalid Params 5 (AD too long)",
- &add_advertising_fail_6,
- NULL, test_command_generic);
- test_bredrle("Add Advertising - Invalid Params 6 (ScRsp too long)",
- &add_advertising_fail_7,
- NULL, test_command_generic);
- test_bredrle("Add Advertising - Invalid Params 7 (Malformed len)",
- &add_advertising_fail_8,
- NULL, test_command_generic);
- test_bredrle("Add Advertising - Invalid Params 8 (Malformed len)",
- &add_advertising_fail_9,
- NULL, test_command_generic);
- test_bredrle("Add Advertising - Invalid Params 9 (Malformed len)",
- &add_advertising_fail_10,
- NULL, test_command_generic);
- test_le("Add Advertising - Invalid Params 10 (ScRsp too long)",
- &add_advertising_fail_11,
- NULL, test_command_generic);
- test_bredrle("Add Advertising - Rejected (Timeout, !Powered)",
- &add_advertising_fail_12,
- NULL, test_command_generic);
- test_bredrle("Add Advertising - Success 1 (Powered, Add Adv Inst)",
- &add_advertising_success_1,
- NULL, test_command_generic);
- test_bredrle("Add Advertising - Success 2 (!Powered, Add Adv Inst)",
- &add_advertising_success_pwron_data,
- setup_add_advertising_not_powered,
- test_command_generic);
- test_bredrle("Add Advertising - Success 3 (!Powered, Adv Enable)",
- &add_advertising_success_pwron_enabled,
- setup_add_advertising_not_powered,
- test_command_generic);
- test_bredrle("Add Advertising - Success 4 (Set Adv on override)",
- &add_advertising_success_4,
- setup_add_advertising,
- test_command_generic);
- test_bredrle("Add Advertising - Success 5 (Set Adv off override)",
- &add_advertising_success_5,
- setup_set_and_add_advertising,
- test_command_generic);
- test_bredrle("Add Advertising - Success 6 (Scan Rsp Dta, Adv ok)",
- &add_advertising_success_6,
- NULL, test_command_generic);
- test_bredrle("Add Advertising - Success 7 (Scan Rsp Dta, Scan ok) ",
- &add_advertising_success_7,
- NULL, test_command_generic);
- test_bredrle("Add Advertising - Success 8 (Connectable Flag)",
- &add_advertising_success_8,
- NULL, test_command_generic);
- test_bredrle("Add Advertising - Success 9 (General Discov Flag)",
- &add_advertising_success_9,
- NULL, test_command_generic);
- test_bredrle("Add Advertising - Success 10 (Limited Discov Flag)",
- &add_advertising_success_10,
- NULL, test_command_generic);
- test_bredrle("Add Advertising - Success 11 (Managed Flags)",
- &add_advertising_success_11,
- NULL, test_command_generic);
- test_bredrle("Add Advertising - Success 12 (TX Power Flag)",
- &add_advertising_success_12,
- NULL, test_command_generic);
- test_bredrle("Add Advertising - Success 13 (ADV_SCAN_IND)",
- &add_advertising_success_13,
- NULL, test_command_generic);
- test_bredrle("Add Advertising - Success 14 (ADV_NONCONN_IND)",
- &add_advertising_success_14,
- NULL, test_command_generic);
- test_bredrle("Add Advertising - Success 15 (ADV_IND)",
- &add_advertising_success_15,
- NULL, test_command_generic);
- test_bredrle("Add Advertising - Success 16 (Connectable -> on)",
- &add_advertising_success_16,
- setup_add_advertising,
- test_command_generic);
- test_bredrle("Add Advertising - Success 17 (Connectable -> off)",
- &add_advertising_success_17,
- setup_add_advertising_connectable,
- test_command_generic);
- /* Adv instances with a timeout do NOT survive a power cycle. */
- test_bredrle("Add Advertising - Success 18 (Power -> off, Remove)",
- &add_advertising_power_off,
- setup_add_advertising_timeout,
- test_command_generic);
- /* Adv instances without timeout survive a power cycle. */
- test_bredrle("Add Advertising - Success 19 (Power -> off, Keep)",
- &add_advertising_success_pwron_data,
- setup_add_advertising_power_cycle,
- test_command_generic);
- /* Changing an advertising instance while it is still being
- * advertised will immediately update the advertised data if
- * there is no other instance to switch to.
- */
- test_bredrle("Add Advertising - Success 20 (Add Adv override)",
- &add_advertising_success_18,
- setup_add_advertising,
- test_command_generic);
- /* An instance should be removed when its timeout has been reached.
- * Advertising will also be disabled if this was the last instance.
- */
- test_bredrle_full("Add Advertising - Success 21 (Timeout expires)",
- &add_advertising_timeout_expired,
- setup_add_advertising_timeout,
- test_command_generic, 3);
- /* LE off will clear (remove) all instances. */
- test_bredrle("Add Advertising - Success 22 (LE -> off, Remove)",
- &add_advertising_le_off,
- setup_add_advertising,
- test_command_generic);
- test_bredrle("Add Advertising - Success (Empty ScRsp)",
- &add_advertising_empty_scrsp,
- setup_command_generic,
- test_command_generic);
- test_bredrle("Add Advertising - Success (ScRsp only)",
- &add_advertising_scrsp_data_only_ok,
- NULL, test_command_generic);
- test_bredrle("Add Advertising - Invalid Params (ScRsp too long)",
- &add_advertising_scrsp_data_only_too_long,
- NULL, test_command_generic);
- test_bredrle("Add Advertising - Success (ScRsp appear)",
- &add_advertising_scrsp_appear_data_ok,
- setup_command_generic, test_command_generic);
- test_bredrle("Add Advertising - Invalid Params (ScRsp appear long)",
- &add_advertising_scrsp_appear_data_too_long,
- setup_command_generic, test_command_generic);
- test_bredrle("Add Advertising - Success (Appear is null)",
- &add_advertising_scrsp_appear_null,
- NULL, test_command_generic);
- test_bredrle("Add Advertising - Success (Name is null)",
- &add_advertising_no_name_set,
- NULL, test_command_generic);
- test_bredrle("Add Advertising - Success (Complete name)",
- &add_advertising_name_fits_in_scrsp,
- setup_command_generic,
- test_command_generic);
- test_bredrle("Add Advertising - Success (Shortened name)",
- &add_advertising_shortened_name_in_scrsp,
- setup_command_generic,
- test_command_generic);
- test_bredrle("Add Advertising - Success (Short name)",
- &add_advertising_short_name_in_scrsp,
- setup_command_generic,
- test_command_generic);
- test_bredrle("Add Advertising - Success (Name + data)",
- &add_advertising_name_data_ok,
- setup_command_generic,
- test_command_generic);
- test_bredrle("Add Advertising - Invalid Params (Name + data)",
- &add_advertising_name_data_inv,
- setup_command_generic,
- test_command_generic);
- test_bredrle("Add Advertising - Success (Name+data+appear)",
- &add_advertising_name_data_appear,
- setup_command_generic,
- test_command_generic);
- test_le_full("Adv. connectable & connected (peripheral) - Success",
- &conn_peripheral_adv_connectable_test,
- setup_advertise_while_connected,
- test_connected_and_advertising, 10);
- test_le_full("Adv. non-connectable & connected (peripheral) - Success",
- &conn_peripheral_adv_non_connectable_test,
- setup_advertise_while_connected,
- test_connected_and_advertising, 10);
- test_le_full("Adv. connectable & connected (central) - Success",
- &conn_central_adv_connectable_test,
- setup_advertise_while_connected,
- test_connected_and_advertising, 10);
- test_le_full("Adv. non-connectable & connected (central) - Success",
- &conn_central_adv_non_connectable_test,
- setup_advertise_while_connected,
- test_connected_and_advertising, 10);
- test_bredrle("Remove Advertising - Invalid Params 1",
- &remove_advertising_fail_1,
- NULL, test_command_generic);
- test_bredrle("Remove Advertising - Success 1",
- &remove_advertising_success_1,
- setup_add_advertising,
- test_command_generic);
- test_bredrle("Remove Advertising - Success 2",
- &remove_advertising_success_2,
- setup_add_advertising,
- test_command_generic);
- /* When advertising two instances, the instances should be
- * advertised in a round-robin fashion.
- */
- test_bredrle("Multi Advertising - Success 1 (Instance Switch)",
- &multi_advertising_switch,
- setup_multi_adv,
- test_command_generic);
- /* Adding a new instance when one is already being advertised
- * will switch to the new instance after the first has reached
- * its duration. A long timeout has been set to
- */
- test_bredrle_full("Multi Advertising - Success 2 (Add Second Inst)",
- &multi_advertising_add_second,
- setup_add_advertising_duration,
- test_command_generic, 3);
- test_bredr("Set appearance - BR/EDR only",
- &set_appearance_not_supported,
- NULL,
- test_command_generic);
- test_bredrle("Set appearance - BR/EDR LE",
- &set_appearance_success,
- NULL,
- test_command_generic);
- test_le("Set appearance - LE only",
- &set_appearance_success,
- NULL,
- test_command_generic);
- test_bredrle("Read Ext Controller Info 1",
- &read_ext_ctrl_info1,
- NULL, test_command_generic);
- test_bredrle("Read Ext Controller Info 2",
- &read_ext_ctrl_info2,
- setup_command_generic, test_command_generic);
- test_bredrle("Read Ext Controller Info 3",
- &read_ext_ctrl_info3,
- setup_command_generic, test_command_generic);
- test_bredrle("Read Ext Controller Info 4",
- &read_ext_ctrl_info4,
- setup_command_generic, test_command_generic);
- test_bredrle("Read Ext Controller Info 5",
- &read_ext_ctrl_info5,
- setup_command_generic, test_command_generic);
- test_bredrle("Read Local OOB Data - Not powered",
- &read_local_oob_not_powered_test,
- NULL, test_command_generic);
- test_bredrle("Read Local OOB Data - Invalid parameters",
- &read_local_oob_invalid_param_test,
- NULL, test_command_generic);
- test_bredrle("Read Local OOB Data - Invalid index",
- &read_local_oob_invalid_index_test,
- NULL, test_command_generic);
- test_bredr20("Read Local OOB Data - Legacy pairing",
- &read_local_oob_legacy_pairing_test,
- NULL, test_command_generic);
- test_bredrle("Read Local OOB Data - Success SSP",
- &read_local_oob_success_ssp_test,
- NULL, test_command_generic);
- test_bredrle("Read Local OOB Data - Success SC",
- &read_local_oob_success_sc_test,
- NULL, test_command_generic);
- test_bredrle("Read Local OOB Ext Data - Invalid index",
- &read_local_oob_ext_invalid_index_test,
- NULL, test_command_generic);
- test_bredr20("Read Local OOB Ext Data - Legacy pairing",
- &read_local_oob_ext_legacy_pairing_test,
- NULL, test_command_generic);
- test_bredrle("Read Local OOB Ext Data - Success SSP",
- &read_local_oob_ext_success_ssp_test,
- NULL, test_command_generic);
- test_bredrle("Read Local OOB Ext Data - Success SC",
- &read_local_oob_ext_success_sc_test,
- NULL, test_command_generic);
- test_bredrle("Device Found - Advertising data - Zero padded",
- &device_found_gtag,
- NULL, test_device_found);
- test_bredrle("Device Found - Advertising data - Invalid field",
- &device_found_invalid_field,
- NULL, test_device_found);
- test_bredrle50("Read Ext Advertising Features - Success 3 (PHY flags)",
- &read_adv_features_success_3,
- NULL, test_command_generic);
- test_bredrle50("Add Ext Advertising - Invalid Params 1 (Multiple Phys)",
- &add_ext_advertising_fail_1,
- NULL, test_command_generic);
- test_bredrle50("Add Ext Advertising - Invalid Params 2 (Multiple PHYs)",
- &add_ext_advertising_fail_2,
- NULL, test_command_generic);
- test_bredrle50("Add Ext Advertising - Invalid Params 3 (Multiple PHYs)",
- &add_ext_advertising_fail_3,
- NULL, test_command_generic);
- test_bredrle50("Add Ext Advertising - Invalid Params 4 (Multiple PHYs)",
- &add_ext_advertising_fail_4,
- NULL, test_command_generic);
- test_bredrle50("Add Ext Advertising - Success 1 (Powered, Add Adv Inst)",
- &add_ext_advertising_success_1,
- NULL, test_command_generic);
- test_bredrle50("Add Ext Advertising - Success 2 (!Powered, Add Adv Inst)",
- &add_ext_advertising_success_pwron_data,
- setup_add_advertising_not_powered,
- test_command_generic);
- test_bredrle50("Add Ext Advertising - Success 3 (!Powered, Adv Enable)",
- &add_ext_advertising_success_pwron_enabled,
- setup_add_advertising_not_powered,
- test_command_generic);
- test_bredrle50("Add Ext Advertising - Success 4 (Set Adv on override)",
- &add_ext_advertising_success_4,
- setup_add_advertising,
- test_command_generic);
- test_bredrle50("Add Ext Advertising - Success 5 (Set Adv off override)",
- &add_ext_advertising_success_5,
- setup_set_and_add_advertising,
- test_command_generic);
- test_bredrle50("Add Ext Advertising - Success 6 (Scan Rsp Dta, Adv ok)",
- &add_ext_advertising_success_6,
- NULL, test_command_generic);
- test_bredrle50("Add Ext Advertising - Success 7 (Scan Rsp Dta, Scan ok) ",
- &add_ext_advertising_success_7,
- NULL, test_command_generic);
- test_bredrle50("Add Ext Advertising - Success 8 (Connectable Flag)",
- &add_ext_advertising_success_8,
- NULL, test_command_generic);
- test_bredrle50("Add Ext Advertising - Success 9 (General Discov Flag)",
- &add_ext_advertising_success_9,
- NULL, test_command_generic);
- test_bredrle50("Add Ext Advertising - Success 10 (Limited Discov Flag)",
- &add_ext_advertising_success_10,
- NULL, test_command_generic);
- test_bredrle50("Add Ext Advertising - Success 11 (Managed Flags)",
- &add_ext_advertising_success_11,
- NULL, test_command_generic);
- test_bredrle50("Add Ext Advertising - Success 12 (TX Power Flag)",
- &add_ext_advertising_success_12,
- NULL, test_command_generic);
- test_bredrle50("Add Ext Advertising - Success 13 (ADV_SCAN_IND)",
- &add_ext_advertising_success_13,
- NULL, test_command_generic);
- test_bredrle50("Add Ext Advertising - Success 14 (ADV_NONCONN_IND)",
- &add_ext_advertising_success_14,
- NULL, test_command_generic);
- test_bredrle50("Add Ext Advertising - Success 15 (ADV_IND)",
- &add_ext_advertising_success_15,
- NULL, test_command_generic);
- test_bredrle50("Add Ext Advertising - Success 16 (Connectable -> on)",
- &add_ext_advertising_success_16,
- setup_add_advertising,
- test_command_generic);
- test_bredrle50("Add Ext Advertising - Success 17 (Connectable -> off)",
- &add_ext_advertising_success_17,
- setup_add_advertising_connectable,
- test_command_generic);
- /* Changing an advertising instance while it is still being
- * advertised will immediately update the advertised data if
- * there is no other instance to switch to.
- */
- test_bredrle50("Add Ext Advertising - Success 20 (Add Adv override)",
- &add_ext_advertising_success_18,
- setup_add_advertising,
- test_command_generic);
- /* An instance should be removed when its timeout has been reached.
- * Advertising will also be disabled if this was the last instance.
- */
- test_bredrle50_full("Add Ext Advertising - Success 21 (Timeout expires)",
- &add_ext_advertising_timeout_expired,
- setup_add_advertising_timeout,
- test_command_generic, 3);
- /* LE off will clear (remove) all instances. */
- test_bredrle50("Add Ext Advertising - Success 22 (LE -> off, Remove)",
- &add_ext_advertising_le_off,
- setup_add_advertising,
- test_command_generic);
- test_bredrle50("Add Ext Advertising - Success (Empty ScRsp)",
- &add_ext_advertising_empty_scrsp,
- setup_command_generic,
- test_command_generic);
- test_bredrle50("Add Ext Advertising - Success (ScRsp only)",
- &add_ext_advertising_scrsp_data_only_ok,
- NULL, test_command_generic);
- test_bredrle50("Add Ext Advertising - Invalid Params (ScRsp too long)",
- &add_ext_advertising_scrsp_data_only_too_long,
- NULL, test_command_generic);
- test_bredrle50("Add Ext Advertising - Success (ScRsp appear)",
- &add_ext_advertising_scrsp_appear_data_ok,
- setup_command_generic, test_command_generic);
- test_bredrle50("Add Ext Advertising - Invalid Params (ScRsp appear long)",
- &add_ext_advertising_scrsp_appear_data_too_long,
- setup_command_generic, test_command_generic);
- test_bredrle50("Add Ext Advertising - Success (Appear is null)",
- &add_ext_advertising_scrsp_appear_null,
- NULL, test_command_generic);
- test_bredrle50("Add Ext Advertising - Success (Name is null)",
- &add_ext_advertising_no_name_set,
- NULL, test_command_generic);
- test_bredrle50("Add Ext Advertising - Success (Complete name)",
- &add_ext_advertising_name_fits_in_scrsp,
- setup_command_generic,
- test_command_generic);
- test_bredrle50("Add Ext Advertising - Success (Shortened name)",
- &add_ext_advertising_shortened_name_in_scrsp,
- setup_command_generic,
- test_command_generic);
- test_bredrle50("Add Ext Advertising - Success (Short name)",
- &add_ext_advertising_shortened_name_in_scrsp,
- setup_command_generic,
- test_command_generic);
- test_bredrle50("Add Ext Advertising - Success (Name + data)",
- &add_ext_advertising_name_data_ok,
- setup_command_generic,
- test_command_generic);
- test_bredrle50("Add Ext Advertising - Invalid Params (Name + data)",
- &add_ext_advertising_name_data_inv,
- setup_command_generic,
- test_command_generic);
- test_bredrle50("Add Ext Advertising - Success (Name+data+appear)",
- &add_ext_advertising_name_data_appear,
- setup_command_generic,
- test_command_generic);
- test_bredrle50("Add Ext Advertising - Success (PHY -> 1M)",
- &add_ext_advertising_success_1m,
- NULL, test_command_generic);
- test_bredrle50("Add Ext Advertising - Success (PHY -> 2M)",
- &add_ext_advertising_success_2m,
- NULL, test_command_generic);
- test_bredrle50("Add Ext Advertising - Success (PHY -> Coded)",
- &add_ext_advertising_success_coded,
- NULL, test_command_generic);
- test_bredrle50("Add Ext Advertising - Success (Ext Pdu Scannable)",
- &add_ext_advertising_success_scannable,
- NULL, test_command_generic);
- test_bredrle50("Add Ext Advertising - Success (Ext Pdu Connectable)",
- &add_ext_advertising_success_connectable,
- NULL, test_command_generic);
- /* In Ext pdu it shall not be both scannable and connectable */
- test_bredrle50("Add Ext Advertising - Success (Ext Pdu Conn Scan)",
- &add_ext_advertising_success_conn_scan,
- NULL, test_command_generic);
- test_bredrle50("Add Ext Advertising - Success (1m Connectable -> on)",
- &add_ext_advertising_conn_on_1m,
- setup_add_advertising_1m,
- test_command_generic);
- test_bredrle50("Add Ext Advertising - Success (1m Connectable -> off)",
- &add_ext_advertising_conn_off_1m,
- setup_add_advertising_connectable_1m,
- test_command_generic);
- test_bredrle50("Remove Ext Advertising - Invalid Params 1",
- &remove_ext_advertising_fail_1,
- NULL, test_command_generic);
- test_bredrle50("Remove Ext Advertising - Success 1",
- &remove_ext_advertising_success_1,
- setup_add_advertising,
- test_command_generic);
- test_bredrle50("Remove Ext Advertising - Success 2",
- &remove_ext_advertising_success_2,
- setup_add_advertising,
- test_command_generic);
- /* When advertising two instances, the instances should be
- * advertised in a round-robin fashion.
- */
- test_bredrle50("Multi Ext Advertising - Success 1",
- &multi_ext_advertising,
- setup_multi_adv,
- test_command_generic);
- /* Adding a new instance when one is already being advertised
- * will switch to the new instance after the first has reached
- * its duration. A long timeout has been set to
- */
- test_bredrle50_full("Multi Ext Advertising - Success 2 (Add Second Inst)",
- &multi_ext_advertising_add_second,
- setup_add_advertising_duration,
- test_command_generic, 3);
- test_bredrle50("Get PHY Success", &get_phy_success,
- NULL, test_command_generic);
- test_bredrle50("Set PHY 2m Success", &set_phy_2m_success,
- NULL, test_command_generic);
- test_bredrle50("Set PHY coded Succcess", &set_phy_coded_success,
- NULL, test_command_generic);
- test_bredrle50("Set PHY 1m 2m coded Succcess", &set_phy_all_success,
- NULL, test_command_generic);
- test_bredrle50("Set PHY 2m tx success", &set_phy_2m_tx_success,
- NULL, test_command_generic);
- test_bredrle50("Set PHY 2m rx success", &set_phy_2m_rx_success,
- NULL, test_command_generic);
- test_bredrle50("Set PHY Invalid Param", &set_phy_invalid_param,
- NULL, test_command_generic);
- test_bredrle50("Start Discovery BREDR LE - (Ext Scan Enable)",
- &start_discovery_bredrle_ext_scan_enable,
- NULL,
- test_command_generic);
- test_bredrle50("Start Discovery LE - (Ext Scan Enable)",
- &start_discovery_le_ext_scan_enable,
- NULL,
- test_command_generic);
- test_bredrle50("Start Discovery LE - (Ext Scan Param)",
- &start_discovery_le_ext_scan_param,
- NULL,
- test_command_generic);
- test_bredrle50("Stop Discovery - (Ext Scan Disable)",
- &stop_discovery_le_ext_scan_disable,
- setup_start_discovery, test_command_generic);
- test_bredrle50("Start Discovery - (2m, Scan Param)",
- &start_discovery_le_2m_scan_param,
- setup_phy_configuration, test_command_generic);
- test_bredrle50("Start Discovery - (coded, Scan Param)",
- &start_discovery_le_coded_scan_param,
- setup_phy_configuration, test_command_generic);
- test_bredrle50("Start Discovery - (1m, 2m, coded, Scan Param)",
- &start_discovery_le_1m_coded_scan_param,
- setup_phy_configuration, test_command_generic);
- test_bredrle50("Ext Device Found - Advertising data - Zero padded",
- &device_found_gtag,
- NULL, test_device_found);
- test_bredrle50("Ext Device Found - Advertising data - Invalid field",
- &device_found_invalid_field,
- NULL, test_device_found);
- test_bredrle50_full("Ext Adv. connectable & connected (peripheral)",
- &conn_peripheral_adv_connectable_test,
- setup_advertise_while_connected,
- test_connected_and_advertising, 10);
- test_bredrle50_full("Ext Adv. non-connectable & connected (peripheral)",
- &conn_peripheral_adv_non_connectable_test,
- setup_advertise_while_connected,
- test_connected_and_advertising, 10);
- test_bredrle50_full("Ext Adv. connectable & connected (central)",
- &conn_central_adv_connectable_test,
- setup_advertise_while_connected,
- test_connected_and_advertising, 10);
- test_bredrle50_full("Ext Adv. non-connectable & connected (central)",
- &conn_central_adv_non_connectable_test,
- setup_advertise_while_connected,
- test_connected_and_advertising, 10);
- test_bredrle("Read Controller Capabilities - Invalid parameters",
- &read_controller_cap_invalid_param_test,
- NULL, test_command_generic);
- test_bredrle50("Read Controller Capabilities - (5.0) Success",
- &read_controller_cap_success,
- NULL, test_50_controller_cap_response);
- test_bredrle("Ext Adv MGMT Params - Unpowered",
- &adv_params_fail_unpowered,
- setup_ext_adv_not_powered,
- test_command_generic);
- test_bredrle("Ext Adv MGMT Params - Invalid parameters",
- &adv_params_fail_invalid_params,
- NULL, test_command_generic);
- test_bredrle("Ext Adv MGMT Params - Success",
- &adv_params_success,
- NULL, test_command_generic);
- test_bredrle50("Ext Adv MGMT Params - (5.0) Success",
- &adv_params_success_50,
- NULL, test_command_generic);
- test_bredrle("Ext Adv MGMT - Data set without Params",
- &adv_data_fail_no_params,
- NULL, test_command_generic);
- test_bredrle50("Ext Adv MGMT - AD Data (5.0) Invalid parameters",
- &adv_data_invalid_params,
- setup_ext_adv_params,
- test_command_generic);
- test_bredrle50("Ext Adv MGMT - AD Data (5.0) Success",
- &adv_data_success,
- setup_ext_adv_params,
- test_command_generic);
- test_bredrle50("Ext Adv MGMT - AD Scan Response (5.0) Success",
- &adv_scan_rsp_success,
- setup_ext_adv_params,
- test_command_generic);
- /* MGMT_OP_SET_DEVICE_ID
- * Using Bluetooth SIG for source.
- */
- test_bredrle50("Set Device ID - Success 1",
- &set_dev_id_success_1,
- NULL,
- test_command_generic);
- /* MGMT_OP_SET_DEVICE_ID
- * Using SB Implementer's Forum for source.
- */
- test_bredrle50("Set Device ID - Success 2",
- &set_dev_id_success_2,
- NULL,
- test_command_generic);
- /* MGMT_OP_SET_DEVICE_ID
- * Disable DID with disable flag for source.
- */
- test_bredrle50("Set Device ID - Disable",
- &set_dev_id_disable,
- NULL,
- test_command_generic);
- /* MGMT_OP_SET_DEVICE_ID
- * Power off, set device id, and power on.
- * Expect Write_Extended_Inquiry with device id when power on.
- */
- test_bredrle50("Set Device ID - Power off and Power on",
- &set_dev_id_power_off_on,
- setup_command_generic,
- test_command_generic);
- /* MGMT_OP_SET_DEVICE_ID
- * SSP off, set device id, and SSP on.
- * Expect Write_Extended_Inquiry with device id when SSP on.
- */
- test_bredrle50("Set Device ID - SSP off and Power on",
- &set_dev_id_ssp_off_on,
- setup_command_generic,
- test_command_generic);
- /* MGMT_OP_SET_DEVICE_ID
- * Invalid parameter
- */
- test_bredrle50("Set Device ID - Invalid Parameter",
- &set_dev_id_invalid_param,
- NULL,
- test_command_generic);
- /* MGMT_OP_GET_DEVICE_FLAGS
- * Success
- */
- test_bredrle50("Get Device Flags - Success",
- &get_dev_flags_success,
- setup_get_dev_flags,
- test_command_generic);
- /* MGMT_OP_GET_DEVICE_FLAGS
- * Fail - Invalid parameter
- */
- test_bredrle50("Get Device Flags - Invalid Parameter",
- &get_dev_flags_fail_1,
- setup_get_dev_flags,
- test_command_generic);
- /* MGMT_OP_SET_DEVICE_FLAGS
- * Success
- */
- test_bredrle50("Set Device Flags - Success",
- &set_dev_flags_success,
- setup_get_dev_flags,
- test_command_generic);
- /* MGMT_OP_SET_DEVICE_FLAGS
- * Invalid Parameter - Missing parameter
- */
- test_bredrle50("Set Device Flags - Invalid Parameter 1",
- &set_dev_flags_fail_1,
- setup_get_dev_flags,
- test_command_generic);
- /* MGMT_OP_SET_DEVICE_FLAGS
- * Invalid Parameter - Not supported value
- */
- test_bredrle50("Set Device Flags - Invalid Parameter 2",
- &set_dev_flags_fail_2,
- setup_get_dev_flags,
- test_command_generic);
- /* MGMT_OP_SET_DEVICE_FLAGS
- * Device not exist
- */
- test_bredrle50("Set Device Flags - Device not found",
- &set_dev_flags_fail_3,
- setup_get_dev_flags,
- test_command_generic);
- /* Suspend/Resume
- * Setup : Power on and register Suspend Event
- * Run: Enable suspend via force_suspend
- * Expect: Receive the Suspend Event
- */
- test_bredrle50("Suspend - Success 1",
- &suspend_resume_success_1,
- NULL, test_suspend_resume_success_1);
- /* Suspend/Resume
- * Setup : Power on and register Suspend Event
- * Run: Enable suspend, and then resume via force_suspend
- * Expect: Receive the Resume Event
- */
- test_bredrle50("Resume - Success 2",
- &suspend_resume_success_2,
- NULL, test_suspend_resume_success_2);
- /* Suspend/Resume
- * Setup: Enable LL Privacy and power on
- * Run: Add new device, and enable suspend.
- * Expect: Receive the Suspend Event
- */
- test_bredrle50("Suspend - Success 3 (Device in WL)",
- &suspend_resume_success_3,
- setup_suspend_resume_success_3,
- test_suspend_resume_success_3);
- /* Suspend/Resume
- * Setup: Start advertising and power on.
- * Run: Enable suspend
- * Expect: Receive the Suspend Event
- */
- test_bredrle50("Suspend - Success 4 (Advertising)",
- &suspend_resume_success_4,
- setup_suspend_resume_success_4,
- test_suspend_resume_success_4);
- /* Suspend/Resume
- * Setup: Pair.
- * Run: Enable suspend
- * Expect: Receive the Suspend Event
- */
- test_bredrle("Suspend - Success 5 (Pairing - Legacy)",
- &suspend_resume_success_5, NULL,
- test_suspend_resume_success_5);
- /* Suspend/Resume
- * Setup: Pair.
- * Run: Enable suspend
- * Expect: Receive the Suspend Event
- */
- test_bredrle("Suspend - Success 6 (Pairing - SSP)",
- &suspend_resume_success_6,
- setup_pairing_acceptor,
- test_suspend_resume_success_5);
- /* Suspend/Resume
- * Setup : Power on and register Suspend Event
- * Run: Enable suspend via force_suspend
- * Expect: Receive the Suspend Event
- */
- test_bredrle50("Suspend - Success 7 (Suspend/Force Wakeup)",
- &suspend_resume_success_7,
- NULL, test_suspend_resume_success_7);
- /* Suspend/Resume
- * Setup : Power on
- * Run: Start discover and enable suspend
- * Expect: Receive the Suspend Event
- */
- test_bredrle50_full("Suspend - Success 8 (Discovery/Suspend)",
- &suspend_resume_success_8,
- NULL, test_suspend_resume_success_8, 4);
- /* Suspend/Resume
- * Setup : Power on, start discovery
- * Run: Start discover, enable suspend and resume.
- * Expect: Receive the Resume Event
- */
- test_bredrle50_full("Resume - Success 9 (Discovery/Suspend/Resume)",
- &suspend_resume_success_9,
- setup_suspend_resume_success_9,
- test_suspend_resume_success_9, 4);
- /* Suspend/Resume
- * Setup : Power on
- * Run: Suspend, Resume, Suspend, and Resume
- * Expect:
- */
- test_bredrle50_full("Resume - Success 10 (Multiple Suspend/Resume)",
- &suspend_resume_success_10,
- setup_suspend_resume_success_10,
- test_suspend_resume_success_10, 6);
- /* MGMT_OP_READ_EXP_FEATURE
- * Read Experimental features - success
- */
- test_bredrle50("Read Exp Feature - Success",
- &read_exp_feat_success,
- NULL, test_command_generic);
- /* MGMT_OP_READ_EXP_FEATURE
- * Read Experimental features - success (Index None)
- */
- test_bredrle50("Read Exp Feature - Success (Index None)",
- &read_exp_feat_success_index_none,
- NULL, test_command_generic);
- /* MGMT_OP_SET_EXP_FEATURE
- * Enable LL Privacy
- */
- test_bredrle50("Set Exp Feature - Enable LL Privacy",
- &set_exp_feat_enable_ll_privacy,
- setup_set_exp_feature_alt,
- test_command_generic);
- /* MGMT_OP_SET_EXP_FEATURE
- * Offload Codec
- */
- test_bredrle50("Set Exp Feature - Offload Codec",
- &set_exp_feat_offload_codec,
- setup_set_exp_feature_alt,
- test_command_generic);
- /* MGMT_OP_SET_EXP_FEATURE
- * Disable all features by sending zero UUID
- */
- test_bredrle50("Set Exp Feature - Disable all",
- &set_exp_feat_disable,
- NULL, test_command_generic);
- /* MGMT_OP_SET_EXP_FEATURE
- * Rejected - If the power is on, the command should be rejected
- */
- test_bredrle50("Set Exp Feature - Rejected",
- &set_exp_feat_rejected,
- NULL, test_command_generic);
- /* MGMT_OP_SET_EXP_FEATURE
- * Invalid parameter
- */
- test_bredrle50("Set Exp Feature - Invalid params",
- &set_exp_feat_invalid,
- NULL, test_command_generic);
- /* MGMT_OP_SET_EXP_FEATURE
- * Not Supported UUID
- */
- test_bredrle50("Set Exp Feature - Unknown feature",
- &set_exp_feat_unknown,
- NULL, test_command_generic);
- return tester_run();
- }
|