1*4cc286f3SDominic Spill /* packet-btbrlmp.c 2*4cc286f3SDominic Spill * Routines for Bluetooth LMP dissection 3*4cc286f3SDominic Spill * Copyright 2009, Michael Ossmann <[email protected]> 4*4cc286f3SDominic Spill * 5*4cc286f3SDominic Spill * Wireshark - Network traffic analyzer 6*4cc286f3SDominic Spill * By Gerald Combs <[email protected]> 7*4cc286f3SDominic Spill * Copyright 1998 Gerald Combs 8*4cc286f3SDominic Spill * 9*4cc286f3SDominic Spill * This program is free software; you can redistribute it and/or 10*4cc286f3SDominic Spill * modify it under the terms of the GNU General Public License 11*4cc286f3SDominic Spill * as published by the Free Software Foundation; either version 2 12*4cc286f3SDominic Spill * of the License, or (at your option) any later version. 13*4cc286f3SDominic Spill * 14*4cc286f3SDominic Spill * This program is distributed in the hope that it will be useful, 15*4cc286f3SDominic Spill * but WITHOUT ANY WARRANTY; without even the implied warranty of 16*4cc286f3SDominic Spill * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17*4cc286f3SDominic Spill * GNU General Public License for more details. 18*4cc286f3SDominic Spill * 19*4cc286f3SDominic Spill * You should have received a copy of the GNU General Public License 20*4cc286f3SDominic Spill * along with this program; if not, write to the Free Software 21*4cc286f3SDominic Spill * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 22*4cc286f3SDominic Spill */ 23*4cc286f3SDominic Spill 24*4cc286f3SDominic Spill #ifdef HAVE_CONFIG_H 25*4cc286f3SDominic Spill #include "config.h" 26*4cc286f3SDominic Spill #else 27*4cc286f3SDominic Spill #include <wireshark/config.h> 28*4cc286f3SDominic Spill #endif 29*4cc286f3SDominic Spill 30*4cc286f3SDominic Spill #include <wireshark/config.h> /* needed for epan/gcc-4.x */ 31*4cc286f3SDominic Spill #include <epan/packet.h> 32*4cc286f3SDominic Spill #include <epan/prefs.h> 33*4cc286f3SDominic Spill 34*4cc286f3SDominic Spill /* LMP opcodes */ 35*4cc286f3SDominic Spill #define LMP_NAME_REQ 1 36*4cc286f3SDominic Spill #define LMP_NAME_RES 2 37*4cc286f3SDominic Spill #define LMP_ACCEPTED 3 38*4cc286f3SDominic Spill #define LMP_NOT_ACCEPTED 4 39*4cc286f3SDominic Spill #define LMP_CLKOFFSET_REQ 5 40*4cc286f3SDominic Spill #define LMP_CLKOFFSET_RES 6 41*4cc286f3SDominic Spill #define LMP_DETACH 7 42*4cc286f3SDominic Spill #define LMP_IN_RAND 8 43*4cc286f3SDominic Spill #define LMP_COMB_KEY 9 44*4cc286f3SDominic Spill #define LMP_UNIT_KEY 10 45*4cc286f3SDominic Spill #define LMP_AU_RAND 11 46*4cc286f3SDominic Spill #define LMP_SRES 12 47*4cc286f3SDominic Spill #define LMP_TEMP_RAND 13 48*4cc286f3SDominic Spill #define LMP_TEMP_KEY 14 49*4cc286f3SDominic Spill #define LMP_ENCRYPTION_MODE_REQ 15 50*4cc286f3SDominic Spill #define LMP_ENCRYPTION_KEY_SIZE_REQ 16 51*4cc286f3SDominic Spill #define LMP_START_ENCRYPTION_REQ 17 52*4cc286f3SDominic Spill #define LMP_STOP_ENCRYPTION_REQ 18 53*4cc286f3SDominic Spill #define LMP_SWITCH_REQ 19 54*4cc286f3SDominic Spill #define LMP_HOLD 20 55*4cc286f3SDominic Spill #define LMP_HOLD_REQ 21 56*4cc286f3SDominic Spill #define LMP_SNIFF_REQ 23 57*4cc286f3SDominic Spill #define LMP_UNSNIFF_REQ 24 58*4cc286f3SDominic Spill #define LMP_PARK_REQ 25 59*4cc286f3SDominic Spill #define LMP_SET_BROADCAST_SCAN_WINDOW 27 60*4cc286f3SDominic Spill #define LMP_MODIFY_BEACON 28 61*4cc286f3SDominic Spill #define LMP_UNPARK_BD_ADDR_REQ 29 62*4cc286f3SDominic Spill #define LMP_UNPARK_PM_ADDR_REQ 30 63*4cc286f3SDominic Spill #define LMP_INCR_POWER_REQ 31 64*4cc286f3SDominic Spill #define LMP_DECR_POWER_REQ 32 65*4cc286f3SDominic Spill #define LMP_MAX_POWER 33 66*4cc286f3SDominic Spill #define LMP_MIN_POWER 34 67*4cc286f3SDominic Spill #define LMP_AUTO_RATE 35 68*4cc286f3SDominic Spill #define LMP_PREFERRED_RATE 36 69*4cc286f3SDominic Spill #define LMP_VERSION_REQ 37 70*4cc286f3SDominic Spill #define LMP_VERSION_RES 38 71*4cc286f3SDominic Spill #define LMP_FEATURES_REQ 39 72*4cc286f3SDominic Spill #define LMP_FEATURES_RES 40 73*4cc286f3SDominic Spill #define LMP_QUALITY_OF_SERVICE 41 74*4cc286f3SDominic Spill #define LMP_QUALITY_OF_SERVICE_REQ 42 75*4cc286f3SDominic Spill #define LMP_SCO_LINK_REQ 43 76*4cc286f3SDominic Spill #define LMP_REMOVE_SCO_LINK_REQ 44 77*4cc286f3SDominic Spill #define LMP_MAX_SLOT 45 78*4cc286f3SDominic Spill #define LMP_MAX_SLOT_REQ 46 79*4cc286f3SDominic Spill #define LMP_TIMING_ACCURACY_REQ 47 80*4cc286f3SDominic Spill #define LMP_TIMING_ACCURACY_RES 48 81*4cc286f3SDominic Spill #define LMP_SETUP_COMPLETE 49 82*4cc286f3SDominic Spill #define LMP_USE_SEMI_PERMANENT_KEY 50 83*4cc286f3SDominic Spill #define LMP_HOST_CONNECTION_REQ 51 84*4cc286f3SDominic Spill #define LMP_SLOT_OFFSET 52 85*4cc286f3SDominic Spill #define LMP_PAGE_MODE_REQ 53 86*4cc286f3SDominic Spill #define LMP_PAGE_SCAN_MODE_REQ 54 87*4cc286f3SDominic Spill #define LMP_SUPERVISION_TIMEOUT 55 88*4cc286f3SDominic Spill #define LMP_TEST_ACTIVATE 56 89*4cc286f3SDominic Spill #define LMP_TEST_CONTROL 57 90*4cc286f3SDominic Spill #define LMP_ENCRYPTION_KEY_SIZE_MASK_REQ 58 91*4cc286f3SDominic Spill #define LMP_ENCRYPTION_KEY_SIZE_MASK_RES 59 92*4cc286f3SDominic Spill #define LMP_SET_AFH 60 93*4cc286f3SDominic Spill #define LMP_ENCAPSULATED_HEADER 61 94*4cc286f3SDominic Spill #define LMP_ENCAPSULATED_PAYLOAD 62 95*4cc286f3SDominic Spill #define LMP_SIMPLE_PAIRING_CONFIRM 63 96*4cc286f3SDominic Spill #define LMP_SIMPLE_PAIRING_NUMBER 64 97*4cc286f3SDominic Spill #define LMP_DHKEY_CHECK 65 98*4cc286f3SDominic Spill #define LMP_ESCAPE_1 124 99*4cc286f3SDominic Spill #define LMP_ESCAPE_2 125 100*4cc286f3SDominic Spill #define LMP_ESCAPE_3 126 101*4cc286f3SDominic Spill #define LMP_ESCAPE_4 127 102*4cc286f3SDominic Spill 103*4cc286f3SDominic Spill /* LMP extended opcodes */ 104*4cc286f3SDominic Spill #define LMP_ACCEPTED_EXT 1 105*4cc286f3SDominic Spill #define LMP_NOT_ACCEPTED_EXT 2 106*4cc286f3SDominic Spill #define LMP_FEATURES_REQ_EXT 3 107*4cc286f3SDominic Spill #define LMP_FEATURES_RES_EXT 4 108*4cc286f3SDominic Spill #define LMP_PACKET_TYPE_TABLE_REQ 11 109*4cc286f3SDominic Spill #define LMP_ESCO_LINK_REQ 12 110*4cc286f3SDominic Spill #define LMP_REMOVE_ESCO_LINK_REQ 13 111*4cc286f3SDominic Spill #define LMP_CHANNEL_CLASSIFICATION_REQ 16 112*4cc286f3SDominic Spill #define LMP_CHANNEL_CLASSIFICATION 17 113*4cc286f3SDominic Spill #define LMP_SNIFF_SUBRATING_REQ 21 114*4cc286f3SDominic Spill #define LMP_SNIFF_SUBRATING_RES 22 115*4cc286f3SDominic Spill #define LMP_PAUSE_ENCRYPTION_REQ 23 116*4cc286f3SDominic Spill #define LMP_RESUME_ENCRYPTION_REQ 24 117*4cc286f3SDominic Spill #define LMP_IO_CAPABILITY_REQ 25 118*4cc286f3SDominic Spill #define LMP_IO_CAPABILITY_RES 26 119*4cc286f3SDominic Spill #define LMP_NUMERIC_COMPARISON_FAILED 27 120*4cc286f3SDominic Spill #define LMP_PASSKEY_FAILED 28 121*4cc286f3SDominic Spill #define LMP_OOB_FAILED 29 122*4cc286f3SDominic Spill #define LMP_KEYPRESS_NOTIFICATION 30 123*4cc286f3SDominic Spill #define LMP_POWER_CONTROL_REQ 31 124*4cc286f3SDominic Spill #define LMP_POWER_CONTROL_RES 32 125*4cc286f3SDominic Spill 126*4cc286f3SDominic Spill /* initialize the protocol and registered fields */ 127*4cc286f3SDominic Spill static int proto_btbrlmp = -1; 128*4cc286f3SDominic Spill static int hf_lmp_accscheme = -1; 129*4cc286f3SDominic Spill static int hf_lmp_afhchmap = -1; 130*4cc286f3SDominic Spill static int hf_lmp_afhclass = -1; 131*4cc286f3SDominic Spill static int hf_lmp_afhinst = -1; 132*4cc286f3SDominic Spill static int hf_lmp_afhmaxintvl = -1; 133*4cc286f3SDominic Spill static int hf_lmp_afhminintvl = -1; 134*4cc286f3SDominic Spill static int hf_lmp_afhmode = -1; 135*4cc286f3SDominic Spill static int hf_lmp_afhrptmode = -1; 136*4cc286f3SDominic Spill static int hf_lmp_airmode = -1; 137*4cc286f3SDominic Spill static int hf_lmp_araddr = -1; 138*4cc286f3SDominic Spill static int hf_lmp_authreqs = -1; 139*4cc286f3SDominic Spill static int hf_lmp_authres = -1; 140*4cc286f3SDominic Spill static int hf_lmp_bdaddr = -1; 141*4cc286f3SDominic Spill static int hf_lmp_bdaddr1 = -1; 142*4cc286f3SDominic Spill static int hf_lmp_bdaddr2 = -1; 143*4cc286f3SDominic Spill static int hf_lmp_bsw = -1; 144*4cc286f3SDominic Spill static int hf_lmp_clkoffset = -1; 145*4cc286f3SDominic Spill static int hf_lmp_commit = -1; 146*4cc286f3SDominic Spill static int hf_lmp_confirm = -1; 147*4cc286f3SDominic Spill static int hf_lmp_compid = -1; 148*4cc286f3SDominic Spill static int hf_lmp_cryptmode = -1; 149*4cc286f3SDominic Spill static int hf_lmp_daccess = -1; 150*4cc286f3SDominic Spill static int hf_lmp_db = -1; 151*4cc286f3SDominic Spill static int hf_lmp_dbsleep = -1; 152*4cc286f3SDominic Spill static int hf_lmp_deltab = -1; 153*4cc286f3SDominic Spill static int hf_lmp_desco = -1; 154*4cc286f3SDominic Spill static int hf_lmp_drift = -1; 155*4cc286f3SDominic Spill static int hf_lmp_dsco = -1; 156*4cc286f3SDominic Spill static int hf_lmp_dsniff = -1; 157*4cc286f3SDominic Spill static int hf_lmp_encdata = -1; 158*4cc286f3SDominic Spill static int hf_lmp_enclen = -1; 159*4cc286f3SDominic Spill static int hf_lmp_encmaj = -1; 160*4cc286f3SDominic Spill static int hf_lmp_encmin = -1; 161*4cc286f3SDominic Spill static int hf_lmp_eop = -1; 162*4cc286f3SDominic Spill static int hf_lmp_eopinre = -1; 163*4cc286f3SDominic Spill static int hf_lmp_escolenms = -1; 164*4cc286f3SDominic Spill static int hf_lmp_escolensm = -1; 165*4cc286f3SDominic Spill static int hf_lmp_escotypems = -1; 166*4cc286f3SDominic Spill static int hf_lmp_escotypesm = -1; 167*4cc286f3SDominic Spill static int hf_lmp_err = -1; 168*4cc286f3SDominic Spill static int hf_lmp_escohdl = -1; 169*4cc286f3SDominic Spill static int hf_lmp_escoltaddr = -1; 170*4cc286f3SDominic Spill static int hf_lmp_features = -1; 171*4cc286f3SDominic Spill static int hf_lmp_fpage = -1; 172*4cc286f3SDominic Spill static int hf_lmp_htime = -1; 173*4cc286f3SDominic Spill static int hf_lmp_hinst = -1; 174*4cc286f3SDominic Spill static int hf_lmp_hopmode = -1; 175*4cc286f3SDominic Spill static int hf_lmp_iocaps = -1; 176*4cc286f3SDominic Spill static int hf_lmp_jitter = -1; 177*4cc286f3SDominic Spill static int hf_lmp_key = -1; 178*4cc286f3SDominic Spill static int hf_lmp_keysz = -1; 179*4cc286f3SDominic Spill static int hf_lmp_ksmask = -1; 180*4cc286f3SDominic Spill static int hf_lmp_ltaddr1 = -1; 181*4cc286f3SDominic Spill static int hf_lmp_ltaddr2 = -1; 182*4cc286f3SDominic Spill static int hf_lmp_ltaddr3 = -1; 183*4cc286f3SDominic Spill static int hf_lmp_ltaddr4 = -1; 184*4cc286f3SDominic Spill static int hf_lmp_ltaddr5 = -1; 185*4cc286f3SDominic Spill static int hf_lmp_ltaddr6 = -1; 186*4cc286f3SDominic Spill static int hf_lmp_ltaddr7 = -1; 187*4cc286f3SDominic Spill static int hf_lmp_maccess = -1; 188*4cc286f3SDominic Spill static int hf_lmp_maxslots = -1; 189*4cc286f3SDominic Spill static int hf_lmp_maxsp = -1; 190*4cc286f3SDominic Spill static int hf_lmp_maxss = -1; 191*4cc286f3SDominic Spill static int hf_lmp_minsmt = -1; 192*4cc286f3SDominic Spill static int hf_lmp_naccslots = -1; 193*4cc286f3SDominic Spill static int hf_lmp_namefrag = -1; 194*4cc286f3SDominic Spill static int hf_lmp_namelen = -1; 195*4cc286f3SDominic Spill static int hf_lmp_nameoffset = -1; 196*4cc286f3SDominic Spill static int hf_lmp_nb = -1; 197*4cc286f3SDominic Spill static int hf_lmp_nbc = -1; 198*4cc286f3SDominic Spill static int hf_lmp_nbsleep = -1; 199*4cc286f3SDominic Spill static int hf_lmp_negstate = -1; 200*4cc286f3SDominic Spill static int hf_lmp_nonce = -1; 201*4cc286f3SDominic Spill static int hf_lmp_nottype = -1; 202*4cc286f3SDominic Spill static int hf_lmp_npoll = -1; 203*4cc286f3SDominic Spill static int hf_lmp_oobauthdata = -1; 204*4cc286f3SDominic Spill static int hf_lmp_op = -1; 205*4cc286f3SDominic Spill static int hf_lmp_opinre = -1; 206*4cc286f3SDominic Spill static int hf_lmp_pagesch = -1; 207*4cc286f3SDominic Spill static int hf_lmp_pcmode = -1; 208*4cc286f3SDominic Spill static int hf_lmp_pkttype = -1; 209*4cc286f3SDominic Spill static int hf_lmp_pkttypetbl = -1; 210*4cc286f3SDominic Spill static int hf_lmp_pmaddr = -1; 211*4cc286f3SDominic Spill static int hf_lmp_pmaddr1 = -1; 212*4cc286f3SDominic Spill static int hf_lmp_pmaddr2 = -1; 213*4cc286f3SDominic Spill static int hf_lmp_pmaddr3 = -1; 214*4cc286f3SDominic Spill static int hf_lmp_pmaddr4 = -1; 215*4cc286f3SDominic Spill static int hf_lmp_pmaddr5 = -1; 216*4cc286f3SDominic Spill static int hf_lmp_pmaddr6 = -1; 217*4cc286f3SDominic Spill static int hf_lmp_pmaddr7 = -1; 218*4cc286f3SDominic Spill static int hf_lmp_pollintvl = -1; 219*4cc286f3SDominic Spill static int hf_lmp_pollper = -1; 220*4cc286f3SDominic Spill static int hf_lmp_pssettings = -1; 221*4cc286f3SDominic Spill static int hf_lmp_pwradjreq = -1; 222*4cc286f3SDominic Spill static int hf_lmp_pwradjres = -1; 223*4cc286f3SDominic Spill static int hf_lmp_pwradj_8dpsk = -1; 224*4cc286f3SDominic Spill static int hf_lmp_pwradj_dqpsk = -1; 225*4cc286f3SDominic Spill static int hf_lmp_pwradj_gfsk = -1; 226*4cc286f3SDominic Spill static int hf_lmp_rand = -1; 227*4cc286f3SDominic Spill static int hf_lmp_rate = -1; 228*4cc286f3SDominic Spill static int hf_lmp_rate_fec = -1; 229*4cc286f3SDominic Spill static int hf_lmp_rate_size = -1; 230*4cc286f3SDominic Spill static int hf_lmp_rate_type = -1; 231*4cc286f3SDominic Spill static int hf_lmp_rate_edrsize = -1; 232*4cc286f3SDominic Spill static int hf_lmp_rxfreq = -1; 233*4cc286f3SDominic Spill static int hf_lmp_scohdl = -1; 234*4cc286f3SDominic Spill static int hf_lmp_scopkt = -1; 235*4cc286f3SDominic Spill static int hf_lmp_slotoffset = -1; 236*4cc286f3SDominic Spill static int hf_lmp_sniffatt = -1; 237*4cc286f3SDominic Spill static int hf_lmp_sniffsi = -1; 238*4cc286f3SDominic Spill static int hf_lmp_sniffto = -1; 239*4cc286f3SDominic Spill static int hf_lmp_subversnr = -1; 240*4cc286f3SDominic Spill static int hf_lmp_suptimeout = -1; 241*4cc286f3SDominic Spill static int hf_lmp_swinst = -1; 242*4cc286f3SDominic Spill static int hf_lmp_taccess = -1; 243*4cc286f3SDominic Spill static int hf_lmp_tb = -1; 244*4cc286f3SDominic Spill static int hf_lmp_tesco = -1; 245*4cc286f3SDominic Spill static int hf_lmp_testlen = -1; 246*4cc286f3SDominic Spill static int hf_lmp_testscen = -1; 247*4cc286f3SDominic Spill static int hf_lmp_tid = -1; 248*4cc286f3SDominic Spill static int hf_lmp_timectrl = -1; 249*4cc286f3SDominic Spill static int hf_lmp_time_change = -1; 250*4cc286f3SDominic Spill static int hf_lmp_time_init = -1; 251*4cc286f3SDominic Spill static int hf_lmp_time_accwin = -1; 252*4cc286f3SDominic Spill static int hf_lmp_tsco = -1; 253*4cc286f3SDominic Spill static int hf_lmp_tsniff = -1; 254*4cc286f3SDominic Spill static int hf_lmp_txfreq = -1; 255*4cc286f3SDominic Spill static int hf_lmp_versnr = -1; 256*4cc286f3SDominic Spill static int hf_lmp_wesco = -1; 257*4cc286f3SDominic Spill 258*4cc286f3SDominic Spill /* timing control flags */ 259*4cc286f3SDominic Spill static const int *timectrl_fields[] = { 260*4cc286f3SDominic Spill &hf_lmp_time_change, 261*4cc286f3SDominic Spill &hf_lmp_time_init, 262*4cc286f3SDominic Spill &hf_lmp_time_accwin, 263*4cc286f3SDominic Spill /* bits 3-7 reserved */ 264*4cc286f3SDominic Spill NULL 265*4cc286f3SDominic Spill }; 266*4cc286f3SDominic Spill 267*4cc286f3SDominic Spill static const true_false_string time_change = { 268*4cc286f3SDominic Spill "timing change", 269*4cc286f3SDominic Spill "no timing change" 270*4cc286f3SDominic Spill }; 271*4cc286f3SDominic Spill 272*4cc286f3SDominic Spill static const true_false_string time_init = { 273*4cc286f3SDominic Spill "use initialization 2", 274*4cc286f3SDominic Spill "use initialization 1" 275*4cc286f3SDominic Spill }; 276*4cc286f3SDominic Spill 277*4cc286f3SDominic Spill static const true_false_string time_accwin = { 278*4cc286f3SDominic Spill "no access window", 279*4cc286f3SDominic Spill "access window" 280*4cc286f3SDominic Spill }; 281*4cc286f3SDominic Spill 282*4cc286f3SDominic Spill static const true_false_string fec = { 283*4cc286f3SDominic Spill "do not use FEC", 284*4cc286f3SDominic Spill "use FEC" 285*4cc286f3SDominic Spill }; 286*4cc286f3SDominic Spill 287*4cc286f3SDominic Spill static const true_false_string tid = { 288*4cc286f3SDominic Spill "transaction initiated by slave", 289*4cc286f3SDominic Spill "transaction initiated by master" 290*4cc286f3SDominic Spill }; 291*4cc286f3SDominic Spill 292*4cc286f3SDominic Spill /* short LMP opcodes */ 293*4cc286f3SDominic Spill static const value_string opcode[] = { 294*4cc286f3SDominic Spill { LMP_NAME_REQ, "LMP_name_req" }, 295*4cc286f3SDominic Spill { LMP_NAME_RES, "LMP_name_res" }, 296*4cc286f3SDominic Spill { LMP_ACCEPTED, "LMP_accepted" }, 297*4cc286f3SDominic Spill { LMP_NOT_ACCEPTED, "LMP_not_accepted" }, 298*4cc286f3SDominic Spill { LMP_CLKOFFSET_REQ, "LMP_clkoffset_req" }, 299*4cc286f3SDominic Spill { LMP_CLKOFFSET_RES, "LMP_clkoffset_res" }, 300*4cc286f3SDominic Spill { LMP_DETACH, "LMP_detach" }, 301*4cc286f3SDominic Spill { LMP_IN_RAND, "LMP_in_rand" }, 302*4cc286f3SDominic Spill { LMP_COMB_KEY, "LMP_comb_key" }, 303*4cc286f3SDominic Spill { LMP_UNIT_KEY, "LMP_unit_key" }, 304*4cc286f3SDominic Spill { LMP_AU_RAND, "LMP_au_rand" }, 305*4cc286f3SDominic Spill { LMP_SRES, "LMP_sres" }, 306*4cc286f3SDominic Spill { LMP_TEMP_RAND, "LMP_temp_rand" }, 307*4cc286f3SDominic Spill { LMP_TEMP_KEY, "LMP_temp_key" }, 308*4cc286f3SDominic Spill { LMP_ENCRYPTION_MODE_REQ, "LMP_encryption_mode_req" }, 309*4cc286f3SDominic Spill { LMP_ENCRYPTION_KEY_SIZE_REQ, "LMP_encryption_key_size_req" }, 310*4cc286f3SDominic Spill { LMP_START_ENCRYPTION_REQ, "LMP_start_encryption_req" }, 311*4cc286f3SDominic Spill { LMP_STOP_ENCRYPTION_REQ, "LMP_stop_encryption_req" }, 312*4cc286f3SDominic Spill { LMP_SWITCH_REQ, "LMP_switch_req" }, 313*4cc286f3SDominic Spill { LMP_HOLD, "LMP_hold" }, 314*4cc286f3SDominic Spill { LMP_HOLD_REQ, "LMP_hold_req" }, 315*4cc286f3SDominic Spill { LMP_SNIFF_REQ, "LMP_sniff_req" }, 316*4cc286f3SDominic Spill { LMP_UNSNIFF_REQ, "LMP_unsniff_req" }, 317*4cc286f3SDominic Spill { LMP_PARK_REQ, "LMP_park_req" }, 318*4cc286f3SDominic Spill { LMP_SET_BROADCAST_SCAN_WINDOW, "LMP_set_broadcast_scan_window" }, 319*4cc286f3SDominic Spill { LMP_MODIFY_BEACON, "LMP_modify_beacon" }, 320*4cc286f3SDominic Spill { LMP_UNPARK_BD_ADDR_REQ, "LMP_unpark_BD_ADDR_req" }, 321*4cc286f3SDominic Spill { LMP_UNPARK_PM_ADDR_REQ, "LMP_unpark_PM_ADDR_req" }, 322*4cc286f3SDominic Spill { LMP_INCR_POWER_REQ, "LMP_incr_power_req" }, 323*4cc286f3SDominic Spill { LMP_DECR_POWER_REQ, "LMP_decr_power_req" }, 324*4cc286f3SDominic Spill { LMP_MAX_POWER, "LMP_max_power" }, 325*4cc286f3SDominic Spill { LMP_MIN_POWER, "LMP_min_power" }, 326*4cc286f3SDominic Spill { LMP_AUTO_RATE, "LMP_auto_rate" }, 327*4cc286f3SDominic Spill { LMP_PREFERRED_RATE, "LMP_preferred_rate" }, 328*4cc286f3SDominic Spill { LMP_VERSION_REQ, "LMP_version_req" }, 329*4cc286f3SDominic Spill { LMP_VERSION_RES, "LMP_version_res" }, 330*4cc286f3SDominic Spill { LMP_FEATURES_REQ, "LMP_features_req" }, 331*4cc286f3SDominic Spill { LMP_FEATURES_RES, "LMP_features_res" }, 332*4cc286f3SDominic Spill { LMP_QUALITY_OF_SERVICE, "LMP_quality_of_service" }, 333*4cc286f3SDominic Spill { LMP_QUALITY_OF_SERVICE_REQ, "LMP_quality_of_service_req" }, 334*4cc286f3SDominic Spill { LMP_SCO_LINK_REQ, "LMP_SCO_link_req" }, 335*4cc286f3SDominic Spill { LMP_REMOVE_SCO_LINK_REQ, "LMP_remove_SCO_link_req" }, 336*4cc286f3SDominic Spill { LMP_MAX_SLOT, "LMP_max_slot" }, 337*4cc286f3SDominic Spill { LMP_MAX_SLOT_REQ, "LMP_max_slot_req" }, 338*4cc286f3SDominic Spill { LMP_TIMING_ACCURACY_REQ, "LMP_timing_accuracy_req" }, 339*4cc286f3SDominic Spill { LMP_TIMING_ACCURACY_RES, "LMP_timing_accuracy_res" }, 340*4cc286f3SDominic Spill { LMP_SETUP_COMPLETE, "LMP_setup_complete" }, 341*4cc286f3SDominic Spill { LMP_USE_SEMI_PERMANENT_KEY, "LMP_use_semi_permanent_key" }, 342*4cc286f3SDominic Spill { LMP_HOST_CONNECTION_REQ, "LMP_host_connection_req" }, 343*4cc286f3SDominic Spill { LMP_SLOT_OFFSET, "LMP_slot_offset" }, 344*4cc286f3SDominic Spill { LMP_PAGE_MODE_REQ, "LMP_page_mode_req" }, 345*4cc286f3SDominic Spill { LMP_PAGE_SCAN_MODE_REQ, "LMP_page_scan_mode_req" }, 346*4cc286f3SDominic Spill { LMP_SUPERVISION_TIMEOUT, "LMP_supervision_timeout" }, 347*4cc286f3SDominic Spill { LMP_TEST_ACTIVATE, "LMP_test_activate" }, 348*4cc286f3SDominic Spill { LMP_TEST_CONTROL, "LMP_test_control" }, 349*4cc286f3SDominic Spill { LMP_ENCRYPTION_KEY_SIZE_MASK_REQ, "LMP_encryption_key_size_mask_req" }, 350*4cc286f3SDominic Spill { LMP_ENCRYPTION_KEY_SIZE_MASK_RES, "LMP_encryption_key_size_mask_res" }, 351*4cc286f3SDominic Spill { LMP_SET_AFH, "LMP_set_AFH" }, 352*4cc286f3SDominic Spill { LMP_ENCAPSULATED_HEADER, "LMP_encapsulated_header" }, 353*4cc286f3SDominic Spill { LMP_ENCAPSULATED_PAYLOAD, "LMP_encapsulated_payload" }, 354*4cc286f3SDominic Spill { LMP_SIMPLE_PAIRING_CONFIRM, "LMP_Simple_Pairing_Confirm" }, 355*4cc286f3SDominic Spill { LMP_SIMPLE_PAIRING_NUMBER, "LMP_Simple_Pairing_Number" }, 356*4cc286f3SDominic Spill { LMP_DHKEY_CHECK, "LMP_DHkey_Check" }, 357*4cc286f3SDominic Spill { LMP_ESCAPE_1, "Escape 1" }, 358*4cc286f3SDominic Spill { LMP_ESCAPE_2, "Escape 2" }, 359*4cc286f3SDominic Spill { LMP_ESCAPE_3, "Escape 3" }, 360*4cc286f3SDominic Spill { LMP_ESCAPE_4, "Escape 4" }, 361*4cc286f3SDominic Spill { 0, NULL } 362*4cc286f3SDominic Spill }; 363*4cc286f3SDominic Spill 364*4cc286f3SDominic Spill /* extended LMP opcodes */ 365*4cc286f3SDominic Spill static const value_string ext_opcode[] = { 366*4cc286f3SDominic Spill { LMP_ACCEPTED_EXT, "LMP_accepted_ext" }, 367*4cc286f3SDominic Spill { LMP_NOT_ACCEPTED_EXT, "LMP_not_accepted_ext" }, 368*4cc286f3SDominic Spill { LMP_FEATURES_REQ_EXT, "LMP_features_req_ext" }, 369*4cc286f3SDominic Spill { LMP_FEATURES_RES_EXT, "LMP_features_res_ext" }, 370*4cc286f3SDominic Spill { LMP_PACKET_TYPE_TABLE_REQ, "LMP_packet_type_table_req" }, 371*4cc286f3SDominic Spill { LMP_ESCO_LINK_REQ, "LMP_eSCO_link_req" }, 372*4cc286f3SDominic Spill { LMP_REMOVE_ESCO_LINK_REQ, "LMP_remove_eSCO_link_req" }, 373*4cc286f3SDominic Spill { LMP_CHANNEL_CLASSIFICATION_REQ, "LMP_channel_classification_req" }, 374*4cc286f3SDominic Spill { LMP_CHANNEL_CLASSIFICATION, "LMP_channel_classification" }, 375*4cc286f3SDominic Spill { LMP_SNIFF_SUBRATING_REQ, "LMP_sniff_subrating_req" }, 376*4cc286f3SDominic Spill { LMP_SNIFF_SUBRATING_RES, "LMP_sniff_subrating_res" }, 377*4cc286f3SDominic Spill { LMP_PAUSE_ENCRYPTION_REQ, "LMP_pause_encryption_req" }, 378*4cc286f3SDominic Spill { LMP_RESUME_ENCRYPTION_REQ, "LMP_resume_encryption_req" }, 379*4cc286f3SDominic Spill { LMP_IO_CAPABILITY_REQ, "LMP_IO_Capability_req" }, 380*4cc286f3SDominic Spill { LMP_IO_CAPABILITY_RES, "LMP_IO_Capability_res" }, 381*4cc286f3SDominic Spill { LMP_NUMERIC_COMPARISON_FAILED, "LMP_numeric_comparison_failed" }, 382*4cc286f3SDominic Spill { LMP_PASSKEY_FAILED, "LMP_passkey_failed" }, 383*4cc286f3SDominic Spill { LMP_OOB_FAILED, "LMP_oob_failed" }, 384*4cc286f3SDominic Spill { LMP_KEYPRESS_NOTIFICATION, "LMP_keypress_notification" }, 385*4cc286f3SDominic Spill { LMP_POWER_CONTROL_REQ, "LMP_power_control_req" }, 386*4cc286f3SDominic Spill { LMP_POWER_CONTROL_RES, "LMP_power_control_res" }, 387*4cc286f3SDominic Spill { 0, NULL } 388*4cc286f3SDominic Spill }; 389*4cc286f3SDominic Spill 390*4cc286f3SDominic Spill /* LMP error codes */ 391*4cc286f3SDominic Spill static const value_string error_code[] = { 392*4cc286f3SDominic Spill { 0x00, "Success" }, 393*4cc286f3SDominic Spill { 0x01, "Unknown HCI Command" }, 394*4cc286f3SDominic Spill { 0x02, "Unknown Connection Identifier" }, 395*4cc286f3SDominic Spill { 0x03, "Hardware Failure" }, 396*4cc286f3SDominic Spill { 0x04, "Page Timeout" }, 397*4cc286f3SDominic Spill { 0x05, "Authentication Failure" }, 398*4cc286f3SDominic Spill { 0x06, "PIN or Key Missing" }, 399*4cc286f3SDominic Spill { 0x07, "Memory Capacity Exceeded" }, 400*4cc286f3SDominic Spill { 0x08, "Connection Timeout" }, 401*4cc286f3SDominic Spill { 0x09, "Connection Limit Exceeded" }, 402*4cc286f3SDominic Spill { 0x0A, "Synchronous Connection Limit To A Device Exceeded" }, 403*4cc286f3SDominic Spill { 0x0B, "ACL Connection Already Exists" }, 404*4cc286f3SDominic Spill { 0x0C, "Command Disallowed" }, 405*4cc286f3SDominic Spill { 0x0D, "Connection Rejected due to Limited Resources" }, 406*4cc286f3SDominic Spill { 0x0E, "Connection Rejected Due To Security Reasons" }, 407*4cc286f3SDominic Spill { 0x0F, "Connection Rejected due to Unacceptable BD_ADDR" }, 408*4cc286f3SDominic Spill { 0x10, "Connection Accept Timeout Exceeded" }, 409*4cc286f3SDominic Spill { 0x11, "Unsupported Feature or Parameter Value" }, 410*4cc286f3SDominic Spill { 0x12, "Invalid HCI Command Parameters" }, 411*4cc286f3SDominic Spill { 0x13, "Remote User Terminated Connection" }, 412*4cc286f3SDominic Spill { 0x14, "Remote Device Terminated Connection due to Low Resources" }, 413*4cc286f3SDominic Spill { 0x15, "Remote Device Terminated Connection due to Power Off" }, 414*4cc286f3SDominic Spill { 0x16, "Connection Terminated By Local Host" }, 415*4cc286f3SDominic Spill { 0x17, "Repeated Attempts" }, 416*4cc286f3SDominic Spill { 0x18, "Pairing Not Allowed" }, 417*4cc286f3SDominic Spill { 0x19, "Unknown LMP PDU" }, 418*4cc286f3SDominic Spill { 0x1A, "Unsupported Remote Feature / Unsupported LMP Feature" }, 419*4cc286f3SDominic Spill { 0x1B, "SCO Offset Rejected" }, 420*4cc286f3SDominic Spill { 0x1C, "SCO Interval Rejected" }, 421*4cc286f3SDominic Spill { 0x1D, "SCO Air Mode Rejected" }, 422*4cc286f3SDominic Spill { 0x1E, "Invalid LMP Parameters" }, 423*4cc286f3SDominic Spill { 0x1F, "Unspecified Error" }, 424*4cc286f3SDominic Spill { 0x20, "Unsupported LMP Parameter Value" }, 425*4cc286f3SDominic Spill { 0x21, "Role Change Not Allowed" }, 426*4cc286f3SDominic Spill { 0x22, "LMP Response Timeout" }, 427*4cc286f3SDominic Spill { 0x23, "LMP Error Transaction Collision" }, 428*4cc286f3SDominic Spill { 0x24, "LMP PDU Not Allowed" }, 429*4cc286f3SDominic Spill { 0x25, "Encryption Mode Not Acceptable" }, 430*4cc286f3SDominic Spill { 0x26, "Link Key Can Not be Changed" }, 431*4cc286f3SDominic Spill { 0x27, "Requested QoS Not Supported" }, 432*4cc286f3SDominic Spill { 0x28, "Instant Passed" }, 433*4cc286f3SDominic Spill { 0x29, "Pairing With Unit Key Not Supported" }, 434*4cc286f3SDominic Spill { 0x2A, "Different Transaction Collision" }, 435*4cc286f3SDominic Spill { 0x2B, "Reserved" }, 436*4cc286f3SDominic Spill { 0x2C, "QoS Unacceptable Parameter" }, 437*4cc286f3SDominic Spill { 0x2D, "QoS Rejected" }, 438*4cc286f3SDominic Spill { 0x2E, "Channel Classification Not Supported" }, 439*4cc286f3SDominic Spill { 0x2F, "Insufficient Security" }, 440*4cc286f3SDominic Spill { 0x30, "Parameter Out Of Mandatory Range" }, 441*4cc286f3SDominic Spill { 0x31, "Reserved" }, 442*4cc286f3SDominic Spill { 0x32, "Role Switch Pending" }, 443*4cc286f3SDominic Spill { 0x33, "Reserved" }, 444*4cc286f3SDominic Spill { 0x34, "Reserved Slot Violation" }, 445*4cc286f3SDominic Spill { 0x35, "Role Switch Failed" }, 446*4cc286f3SDominic Spill { 0x36, "Extended Inquiry Response Too Large" }, 447*4cc286f3SDominic Spill { 0x37, "Secure Simple Pairing Not Supported By Host." }, 448*4cc286f3SDominic Spill { 0x38, "Host Busy - Pairing" }, 449*4cc286f3SDominic Spill { 0x39, "Connection Rejected due to No Suitable Channel Found" }, 450*4cc286f3SDominic Spill { 0, NULL } 451*4cc286f3SDominic Spill }; 452*4cc286f3SDominic Spill 453*4cc286f3SDominic Spill static const value_string encryption_mode[] = { 454*4cc286f3SDominic Spill { 0, "no encryption" }, 455*4cc286f3SDominic Spill { 1, "encryption" }, 456*4cc286f3SDominic Spill { 2, "encryption" }, 457*4cc286f3SDominic Spill /* 3 - 255 reserved */ 458*4cc286f3SDominic Spill { 0, NULL } 459*4cc286f3SDominic Spill }; 460*4cc286f3SDominic Spill 461*4cc286f3SDominic Spill static const value_string access_scheme[] = { 462*4cc286f3SDominic Spill { 0, "polling technique" }, 463*4cc286f3SDominic Spill /* 1 - 15 reserved */ 464*4cc286f3SDominic Spill { 0, NULL } 465*4cc286f3SDominic Spill }; 466*4cc286f3SDominic Spill 467*4cc286f3SDominic Spill static const value_string packet_size[] = { 468*4cc286f3SDominic Spill { 0, "no packet-size preference available" }, 469*4cc286f3SDominic Spill { 1, "use 1-slot packets" }, 470*4cc286f3SDominic Spill { 2, "use 3-slot packets" }, 471*4cc286f3SDominic Spill { 3, "use 5-slot packets" }, 472*4cc286f3SDominic Spill { 0, NULL } 473*4cc286f3SDominic Spill }; 474*4cc286f3SDominic Spill 475*4cc286f3SDominic Spill static const value_string edr_type[] = { 476*4cc286f3SDominic Spill { 0, "use DM1 packets" }, 477*4cc286f3SDominic Spill { 1, "use 2 Mbps packets" }, 478*4cc286f3SDominic Spill { 2, "use 3 Mbps packets" }, 479*4cc286f3SDominic Spill /* 3 reserved */ 480*4cc286f3SDominic Spill { 0, NULL } 481*4cc286f3SDominic Spill }; 482*4cc286f3SDominic Spill 483*4cc286f3SDominic Spill static const value_string versnr[] = { 484*4cc286f3SDominic Spill { 0, "Bluetooth Core Specification 1.0b" }, 485*4cc286f3SDominic Spill { 1, "Bluetooth Core Specification 1.1" }, 486*4cc286f3SDominic Spill { 2, "Bluetooth Core Specification 1.2" }, 487*4cc286f3SDominic Spill { 3, "Bluetooth Core Specification 2.0 + EDR" }, 488*4cc286f3SDominic Spill { 4, "Bluetooth Core Specification 2.1 + EDR" }, 489*4cc286f3SDominic Spill { 5, "Bluetooth Core Specification 3.0 + HS" }, 490*4cc286f3SDominic Spill /* 6 - 255 reserved */ 491*4cc286f3SDominic Spill { 0, NULL } 492*4cc286f3SDominic Spill }; 493*4cc286f3SDominic Spill 494*4cc286f3SDominic Spill static const value_string compid[] = { 495*4cc286f3SDominic Spill { 0, "Ericsson Technology Licensing" }, 496*4cc286f3SDominic Spill { 1, "Nokia Mobile Phones" }, 497*4cc286f3SDominic Spill { 2, "Intel Corp." }, 498*4cc286f3SDominic Spill { 3, "IBM Corp." }, 499*4cc286f3SDominic Spill { 4, "Toshiba Corp." }, 500*4cc286f3SDominic Spill { 5, "3Com" }, 501*4cc286f3SDominic Spill { 6, "Microsoft" }, 502*4cc286f3SDominic Spill { 7, "Lucent" }, 503*4cc286f3SDominic Spill { 8, "Motorola" }, 504*4cc286f3SDominic Spill { 9, "Infineon Technologies AG" }, 505*4cc286f3SDominic Spill { 10, "Cambridge Silicon Radio" }, 506*4cc286f3SDominic Spill { 11, "Silicon Wave" }, 507*4cc286f3SDominic Spill { 12, "Digianswer A/S" }, 508*4cc286f3SDominic Spill { 13, "Texas Instruments Inc." }, 509*4cc286f3SDominic Spill { 14, "Parthus Technologies Inc." }, 510*4cc286f3SDominic Spill { 15, "Broadcom Corporation" }, 511*4cc286f3SDominic Spill { 16, "Mitel Semiconductor" }, 512*4cc286f3SDominic Spill { 17, "Widcomm, Inc." }, 513*4cc286f3SDominic Spill { 18, "Zeevo, Inc." }, 514*4cc286f3SDominic Spill { 19, "Atmel Corporation" }, 515*4cc286f3SDominic Spill { 20, "Mitsubishi Electric Corporation" }, 516*4cc286f3SDominic Spill { 21, "RTX Telecom A/S" }, 517*4cc286f3SDominic Spill { 22, "KC Technology Inc." }, 518*4cc286f3SDominic Spill { 23, "Newlogic" }, 519*4cc286f3SDominic Spill { 24, "Transilica, Inc." }, 520*4cc286f3SDominic Spill { 25, "Rohde & Schwarz GmbH & Co. KG" }, 521*4cc286f3SDominic Spill { 26, "TTPCom Limited" }, 522*4cc286f3SDominic Spill { 27, "Signia Technologies, Inc." }, 523*4cc286f3SDominic Spill { 28, "Conexant Systems Inc." }, 524*4cc286f3SDominic Spill { 29, "Qualcomm" }, 525*4cc286f3SDominic Spill { 30, "Inventel" }, 526*4cc286f3SDominic Spill { 31, "AVM Berlin" }, 527*4cc286f3SDominic Spill { 32, "BandSpeed, Inc." }, 528*4cc286f3SDominic Spill { 33, "Mansella Ltd" }, 529*4cc286f3SDominic Spill { 34, "NEC Corporation" }, 530*4cc286f3SDominic Spill { 35, "WavePlus Technology Co., Ltd." }, 531*4cc286f3SDominic Spill { 36, "Alcatel" }, 532*4cc286f3SDominic Spill { 37, "Philips Semiconductors" }, 533*4cc286f3SDominic Spill { 38, "C Technologies" }, 534*4cc286f3SDominic Spill { 39, "Open Interface" }, 535*4cc286f3SDominic Spill { 40, "R F Micro Devices" }, 536*4cc286f3SDominic Spill { 41, "Hitachi Ltd" }, 537*4cc286f3SDominic Spill { 42, "Symbol Technologies, Inc." }, 538*4cc286f3SDominic Spill { 43, "Tenovis" }, 539*4cc286f3SDominic Spill { 44, "Macronix International Co. Ltd." }, 540*4cc286f3SDominic Spill { 45, "GCT Semiconductor" }, 541*4cc286f3SDominic Spill { 46, "Norwood Systems" }, 542*4cc286f3SDominic Spill { 47, "MewTel Technology Inc." }, 543*4cc286f3SDominic Spill { 48, "ST Microelectronics" }, 544*4cc286f3SDominic Spill { 49, "Synopsys" }, 545*4cc286f3SDominic Spill { 50, "Red-M (Communications) Ltd" }, 546*4cc286f3SDominic Spill { 51, "Commil Ltd" }, 547*4cc286f3SDominic Spill { 52, "Computer Access Technology Corporation (CATC)" }, 548*4cc286f3SDominic Spill { 53, "Eclipse (HQ Espana) S.L." }, 549*4cc286f3SDominic Spill { 54, "Renesas Technology Corp." }, 550*4cc286f3SDominic Spill { 55, "Mobilian Corporation" }, 551*4cc286f3SDominic Spill { 56, "Terax" }, 552*4cc286f3SDominic Spill { 57, "Integrated System Solution Corp." }, 553*4cc286f3SDominic Spill { 58, "Matsushita Electric Industrial Co., Ltd." }, 554*4cc286f3SDominic Spill { 59, "Gennum Corporation" }, 555*4cc286f3SDominic Spill { 60, "Research In Motion" }, 556*4cc286f3SDominic Spill { 61, "IPextreme, Inc." }, 557*4cc286f3SDominic Spill { 62, "Systems and Chips, Inc" }, 558*4cc286f3SDominic Spill { 63, "Bluetooth SIG, Inc" }, 559*4cc286f3SDominic Spill { 64, "Seiko Epson Corporation" }, 560*4cc286f3SDominic Spill { 65, "Integrated Silicon Solution Taiwan, Inc." }, 561*4cc286f3SDominic Spill { 66, "CONWISE Technology Corporation Ltd" }, 562*4cc286f3SDominic Spill { 67, "PARROT SA" }, 563*4cc286f3SDominic Spill { 68, "Socket Mobile" }, 564*4cc286f3SDominic Spill { 69, "Atheros Communications, Inc." }, 565*4cc286f3SDominic Spill { 70, "MediaTek, Inc." }, 566*4cc286f3SDominic Spill { 71, "Bluegiga (tentative)" }, 567*4cc286f3SDominic Spill { 72, "Marvell Technology Group Ltd." }, 568*4cc286f3SDominic Spill { 73, "3DSP Corporation" }, 569*4cc286f3SDominic Spill { 74, "Accel Semiconductor Ltd." }, 570*4cc286f3SDominic Spill { 75, "Continental Automotive Systems" }, 571*4cc286f3SDominic Spill { 76, "Apple, Inc." }, 572*4cc286f3SDominic Spill { 77, "Staccato Communications, Inc." }, 573*4cc286f3SDominic Spill { 78, "Avago Technologies" }, 574*4cc286f3SDominic Spill { 79, "APT Ltd." }, 575*4cc286f3SDominic Spill { 80, "SiRF Technology, Inc." }, 576*4cc286f3SDominic Spill { 81, "Tzero Technologies, Inc." }, 577*4cc286f3SDominic Spill { 82, "J&M Corporation" }, 578*4cc286f3SDominic Spill { 83, "Free2move AB" }, 579*4cc286f3SDominic Spill /* 84 - 65534 reserved */ 580*4cc286f3SDominic Spill { 65535, "test" }, 581*4cc286f3SDominic Spill { 0, NULL } 582*4cc286f3SDominic Spill }; 583*4cc286f3SDominic Spill 584*4cc286f3SDominic Spill static const value_string sco_packet[] = { 585*4cc286f3SDominic Spill { 0, "HV1" }, 586*4cc286f3SDominic Spill { 1, "HV2" }, 587*4cc286f3SDominic Spill { 2, "HV3" }, 588*4cc286f3SDominic Spill /* 3 - 255 reserved */ 589*4cc286f3SDominic Spill { 0, NULL } 590*4cc286f3SDominic Spill }; 591*4cc286f3SDominic Spill 592*4cc286f3SDominic Spill static const value_string air_mode[] = { 593*4cc286f3SDominic Spill { 0, "mu-law log" }, 594*4cc286f3SDominic Spill { 1, "A-law log" }, 595*4cc286f3SDominic Spill { 2, "CVSD" }, 596*4cc286f3SDominic Spill { 3, "transparent data" }, 597*4cc286f3SDominic Spill /* 4 - 255 reserved */ 598*4cc286f3SDominic Spill { 0, NULL } 599*4cc286f3SDominic Spill }; 600*4cc286f3SDominic Spill 601*4cc286f3SDominic Spill static const value_string paging_scheme[] = { 602*4cc286f3SDominic Spill { 0, "mandatory scheme" }, 603*4cc286f3SDominic Spill /* 1 - 255 reserved */ 604*4cc286f3SDominic Spill { 0, NULL } 605*4cc286f3SDominic Spill }; 606*4cc286f3SDominic Spill 607*4cc286f3SDominic Spill static const value_string paging_scheme_settings[] = { 608*4cc286f3SDominic Spill /* for mandatory scheme: */ 609*4cc286f3SDominic Spill { 0, "R0" }, 610*4cc286f3SDominic Spill { 1, "R1" }, 611*4cc286f3SDominic Spill { 2, "R2" }, 612*4cc286f3SDominic Spill /* 3 - 255 reserved */ 613*4cc286f3SDominic Spill { 0, NULL } 614*4cc286f3SDominic Spill }; 615*4cc286f3SDominic Spill 616*4cc286f3SDominic Spill static const value_string afh_mode[] = { 617*4cc286f3SDominic Spill { 0, "AFH disabled" }, 618*4cc286f3SDominic Spill { 1, "AFH enabled" }, 619*4cc286f3SDominic Spill /* 2 - 255 reserved */ 620*4cc286f3SDominic Spill { 0, NULL } 621*4cc286f3SDominic Spill }; 622*4cc286f3SDominic Spill 623*4cc286f3SDominic Spill static const value_string features_page[] = { 624*4cc286f3SDominic Spill { 0, "standard features" }, 625*4cc286f3SDominic Spill /* 1 - 255 other feature pages */ 626*4cc286f3SDominic Spill { 0, NULL } 627*4cc286f3SDominic Spill }; 628*4cc286f3SDominic Spill 629*4cc286f3SDominic Spill static const value_string packet_type_table[] = { 630*4cc286f3SDominic Spill { 0, "1 Mbps only" }, 631*4cc286f3SDominic Spill { 1, "2/3 Mbps" }, 632*4cc286f3SDominic Spill /* 2 - 255 reserved */ 633*4cc286f3SDominic Spill { 0, NULL } 634*4cc286f3SDominic Spill }; 635*4cc286f3SDominic Spill 636*4cc286f3SDominic Spill static const value_string negotiation_state[] = { 637*4cc286f3SDominic Spill { 0, "Initiate negotiation" }, 638*4cc286f3SDominic Spill { 1, "The latest received set of negotiable parameters were possible but these parameters are preferred." }, 639*4cc286f3SDominic Spill { 2, "The latest received set of negotiable parameters would cause a reserved slot violation." }, 640*4cc286f3SDominic Spill { 3, "The latest received set of negotiable parameters would cause a latency violation." }, 641*4cc286f3SDominic Spill { 4, "The latest received set of negotiable parameters are not supported." }, 642*4cc286f3SDominic Spill /* 5 - 255 reserved */ 643*4cc286f3SDominic Spill { 0, NULL } 644*4cc286f3SDominic Spill }; 645*4cc286f3SDominic Spill 646*4cc286f3SDominic Spill static const value_string afh_reporting_mode[] = { 647*4cc286f3SDominic Spill { 0, "AFH reporting disabled" }, 648*4cc286f3SDominic Spill { 1, "AFH reporting enabled" }, 649*4cc286f3SDominic Spill /* 2 - 255 reserved */ 650*4cc286f3SDominic Spill { 0, NULL } 651*4cc286f3SDominic Spill }; 652*4cc286f3SDominic Spill 653*4cc286f3SDominic Spill static const value_string io_capabilities[] = { 654*4cc286f3SDominic Spill { 0, "Display Only" }, 655*4cc286f3SDominic Spill { 1, "Display Yes/No" }, 656*4cc286f3SDominic Spill { 2, "Keyboard Only" }, 657*4cc286f3SDominic Spill { 3, "No Input/No Output" }, 658*4cc286f3SDominic Spill /* 4 - 255 reserved */ 659*4cc286f3SDominic Spill { 0, NULL } 660*4cc286f3SDominic Spill }; 661*4cc286f3SDominic Spill 662*4cc286f3SDominic Spill static const value_string oob_auth_data[] = { 663*4cc286f3SDominic Spill { 0, "No OOB Authentication Data received" }, 664*4cc286f3SDominic Spill { 1, "OOB Authentication Data received" }, 665*4cc286f3SDominic Spill /* 2 - 255 reserved */ 666*4cc286f3SDominic Spill { 0, NULL } 667*4cc286f3SDominic Spill }; 668*4cc286f3SDominic Spill 669*4cc286f3SDominic Spill static const value_string auth_requirements[] = { 670*4cc286f3SDominic Spill { 0x00, "MITM Protection Not Required - No Bonding" }, 671*4cc286f3SDominic Spill { 0x01, "MITM Protection Required - No Bonding" }, 672*4cc286f3SDominic Spill { 0x02, "MITM Protection Not Required - Dedicated Bonding" }, 673*4cc286f3SDominic Spill { 0x03, "MITM Protection Required - Dedicated Bonding" }, 674*4cc286f3SDominic Spill { 0x04, "MITM Protection Not Required - General Bonding" }, 675*4cc286f3SDominic Spill { 0x05, "MITM Protection Required - General Bonding" }, 676*4cc286f3SDominic Spill /* 0x06 - 0xff reserved */ 677*4cc286f3SDominic Spill { 0, NULL } 678*4cc286f3SDominic Spill }; 679*4cc286f3SDominic Spill 680*4cc286f3SDominic Spill static const value_string power_adjust_req[] = { 681*4cc286f3SDominic Spill { 0, "decrement power one step" }, 682*4cc286f3SDominic Spill { 1, "increment power one step" }, 683*4cc286f3SDominic Spill { 2, "increase to maximum power" }, 684*4cc286f3SDominic Spill /* 3 - 255 reserved */ 685*4cc286f3SDominic Spill { 0, NULL } 686*4cc286f3SDominic Spill }; 687*4cc286f3SDominic Spill 688*4cc286f3SDominic Spill static const value_string power_adjust_res[] = { 689*4cc286f3SDominic Spill { 0, "not supported" }, 690*4cc286f3SDominic Spill { 1, "changed one step (not min or max)" }, 691*4cc286f3SDominic Spill { 2, "max power" }, 692*4cc286f3SDominic Spill { 3, "min power" }, 693*4cc286f3SDominic Spill /* 4 - 255 reserved */ 694*4cc286f3SDominic Spill { 0, NULL } 695*4cc286f3SDominic Spill }; 696*4cc286f3SDominic Spill 697*4cc286f3SDominic Spill static const value_string test_scenario[] = { 698*4cc286f3SDominic Spill { 0, "Pause Test Mode" }, 699*4cc286f3SDominic Spill { 1, "Transmitter test - 0 pattern" }, 700*4cc286f3SDominic Spill { 2, "Transmitter test - 1 pattern" }, 701*4cc286f3SDominic Spill { 3, "Transmitter test - 1010 pattern" }, 702*4cc286f3SDominic Spill { 4, "Pseudorandom bit sequence" }, 703*4cc286f3SDominic Spill { 5, "Closed Loop Back - ACL packets" }, 704*4cc286f3SDominic Spill { 6, "Closed Loop Back - Synchronous packets" }, 705*4cc286f3SDominic Spill { 7, "ACL Packets without whitening" }, 706*4cc286f3SDominic Spill { 8, "Synchronous Packets without whitening" }, 707*4cc286f3SDominic Spill { 9, "Transmitter test - 1111 0000 pattern" }, 708*4cc286f3SDominic Spill /* 10 - 254 reserved */ 709*4cc286f3SDominic Spill { 255, "Exit Test Mode" }, 710*4cc286f3SDominic Spill { 0, NULL } 711*4cc286f3SDominic Spill }; 712*4cc286f3SDominic Spill 713*4cc286f3SDominic Spill static const value_string hopping_mode[] = { 714*4cc286f3SDominic Spill { 0, "RX/TX on single frequency" }, 715*4cc286f3SDominic Spill { 1, "Normal hopping" }, 716*4cc286f3SDominic Spill /* 2 - 255 reserved */ 717*4cc286f3SDominic Spill { 0, NULL } 718*4cc286f3SDominic Spill }; 719*4cc286f3SDominic Spill 720*4cc286f3SDominic Spill static const value_string power_control_mode[] = { 721*4cc286f3SDominic Spill { 0, "fixed TX output power" }, 722*4cc286f3SDominic Spill { 1, "adaptive power control" }, 723*4cc286f3SDominic Spill /* 2 - 255 reserved */ 724*4cc286f3SDominic Spill { 0, NULL } 725*4cc286f3SDominic Spill }; 726*4cc286f3SDominic Spill 727*4cc286f3SDominic Spill static const value_string esco_packet_type[] = { 728*4cc286f3SDominic Spill { 0x00, "NULL/POLL" }, 729*4cc286f3SDominic Spill { 0x07, "EV3" }, 730*4cc286f3SDominic Spill { 0x0C, "EV4" }, 731*4cc286f3SDominic Spill { 0x0D, "EV5" }, 732*4cc286f3SDominic Spill { 0x26, "2-EV3" }, 733*4cc286f3SDominic Spill { 0x2C, "2-EV5" }, 734*4cc286f3SDominic Spill { 0x37, "3-EV3" }, 735*4cc286f3SDominic Spill { 0x3D, "3-EV5" }, 736*4cc286f3SDominic Spill /* other values reserved */ 737*4cc286f3SDominic Spill { 0, NULL } 738*4cc286f3SDominic Spill }; 739*4cc286f3SDominic Spill 740*4cc286f3SDominic Spill static const value_string notification_value[] = { 741*4cc286f3SDominic Spill { 0, "passkey entry started" }, 742*4cc286f3SDominic Spill { 1, "passkey digit entered" }, 743*4cc286f3SDominic Spill { 2, "passkey digit erased" }, 744*4cc286f3SDominic Spill { 3, "passkey cleared" }, 745*4cc286f3SDominic Spill { 4, "passkey entry completed" }, 746*4cc286f3SDominic Spill /* 5 - 255 reserved */ 747*4cc286f3SDominic Spill { 0, NULL } 748*4cc286f3SDominic Spill }; 749*4cc286f3SDominic Spill 750*4cc286f3SDominic Spill /* initialize the subtree pointers */ 751*4cc286f3SDominic Spill static gint ett_lmp = -1; 752*4cc286f3SDominic Spill static gint ett_lmp_pwradjres = -1; 753*4cc286f3SDominic Spill static gint ett_lmp_rate = -1; 754*4cc286f3SDominic Spill static gint ett_lmp_timectrl = -1; 755*4cc286f3SDominic Spill 756*4cc286f3SDominic Spill /* LMP PDUs with short opcodes */ 757*4cc286f3SDominic Spill 758*4cc286f3SDominic Spill void 759*4cc286f3SDominic Spill dissect_name_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 760*4cc286f3SDominic Spill { 761*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2); 762*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1); 763*4cc286f3SDominic Spill 764*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_nameoffset, tvb, offset, 1, ENC_NA); 765*4cc286f3SDominic Spill } 766*4cc286f3SDominic Spill 767*4cc286f3SDominic Spill void 768*4cc286f3SDominic Spill dissect_name_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 769*4cc286f3SDominic Spill { 770*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17); 771*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16); 772*4cc286f3SDominic Spill 773*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_nameoffset, tvb, offset, 1, ENC_NA); 774*4cc286f3SDominic Spill offset += 1; 775*4cc286f3SDominic Spill 776*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_namelen, tvb, offset, 1, ENC_NA); 777*4cc286f3SDominic Spill offset += 1; 778*4cc286f3SDominic Spill 779*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_namefrag, tvb, offset, 14, ENC_ASCII|ENC_NA); 780*4cc286f3SDominic Spill } 781*4cc286f3SDominic Spill 782*4cc286f3SDominic Spill void 783*4cc286f3SDominic Spill dissect_accepted(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 784*4cc286f3SDominic Spill { 785*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2); 786*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1); 787*4cc286f3SDominic Spill 788*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_opinre, tvb, offset, 1, ENC_NA); 789*4cc286f3SDominic Spill } 790*4cc286f3SDominic Spill 791*4cc286f3SDominic Spill void 792*4cc286f3SDominic Spill dissect_not_accepted(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 793*4cc286f3SDominic Spill { 794*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 3); 795*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2); 796*4cc286f3SDominic Spill 797*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_opinre, tvb, offset, 1, ENC_NA); 798*4cc286f3SDominic Spill offset += 1; 799*4cc286f3SDominic Spill 800*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_err, tvb, offset, 1, ENC_NA); 801*4cc286f3SDominic Spill } 802*4cc286f3SDominic Spill 803*4cc286f3SDominic Spill void 804*4cc286f3SDominic Spill dissect_clkoffset_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 805*4cc286f3SDominic Spill { 806*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 1); 807*4cc286f3SDominic Spill } 808*4cc286f3SDominic Spill 809*4cc286f3SDominic Spill void 810*4cc286f3SDominic Spill dissect_clkoffset_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 811*4cc286f3SDominic Spill { 812*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 3); 813*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2); 814*4cc286f3SDominic Spill 815*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_clkoffset, tvb, offset, 2, ENC_LITTLE_ENDIAN); 816*4cc286f3SDominic Spill } 817*4cc286f3SDominic Spill 818*4cc286f3SDominic Spill void 819*4cc286f3SDominic Spill dissect_detach(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 820*4cc286f3SDominic Spill { 821*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2); 822*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1); 823*4cc286f3SDominic Spill 824*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_err, tvb, offset, 1, ENC_NA); 825*4cc286f3SDominic Spill } 826*4cc286f3SDominic Spill 827*4cc286f3SDominic Spill void 828*4cc286f3SDominic Spill dissect_in_rand(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 829*4cc286f3SDominic Spill { 830*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17); 831*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16); 832*4cc286f3SDominic Spill 833*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_rand, tvb, offset, 16, ENC_NA); 834*4cc286f3SDominic Spill } 835*4cc286f3SDominic Spill 836*4cc286f3SDominic Spill void 837*4cc286f3SDominic Spill dissect_comb_key(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 838*4cc286f3SDominic Spill { 839*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17); 840*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16); 841*4cc286f3SDominic Spill 842*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_rand, tvb, offset, 16, ENC_NA); 843*4cc286f3SDominic Spill } 844*4cc286f3SDominic Spill 845*4cc286f3SDominic Spill void 846*4cc286f3SDominic Spill dissect_unit_key(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 847*4cc286f3SDominic Spill { 848*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17); 849*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16); 850*4cc286f3SDominic Spill 851*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_key, tvb, offset, 16, ENC_NA); 852*4cc286f3SDominic Spill } 853*4cc286f3SDominic Spill 854*4cc286f3SDominic Spill void 855*4cc286f3SDominic Spill dissect_au_rand(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 856*4cc286f3SDominic Spill { 857*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17); 858*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16); 859*4cc286f3SDominic Spill 860*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_rand, tvb, offset, 16, ENC_NA); 861*4cc286f3SDominic Spill } 862*4cc286f3SDominic Spill 863*4cc286f3SDominic Spill void 864*4cc286f3SDominic Spill dissect_sres(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 865*4cc286f3SDominic Spill { 866*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 5); 867*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 4); 868*4cc286f3SDominic Spill 869*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_authres, tvb, offset, 4, ENC_NA); 870*4cc286f3SDominic Spill } 871*4cc286f3SDominic Spill 872*4cc286f3SDominic Spill void 873*4cc286f3SDominic Spill dissect_temp_rand(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 874*4cc286f3SDominic Spill { 875*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17); 876*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16); 877*4cc286f3SDominic Spill 878*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_rand, tvb, offset, 16, ENC_NA); 879*4cc286f3SDominic Spill } 880*4cc286f3SDominic Spill 881*4cc286f3SDominic Spill void 882*4cc286f3SDominic Spill dissect_temp_key(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 883*4cc286f3SDominic Spill { 884*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17); 885*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16); 886*4cc286f3SDominic Spill 887*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_key, tvb, offset, 16, ENC_NA); 888*4cc286f3SDominic Spill } 889*4cc286f3SDominic Spill 890*4cc286f3SDominic Spill void 891*4cc286f3SDominic Spill dissect_encryption_mode_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 892*4cc286f3SDominic Spill { 893*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2); 894*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1); 895*4cc286f3SDominic Spill 896*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_cryptmode, tvb, offset, 1, ENC_LITTLE_ENDIAN); 897*4cc286f3SDominic Spill } 898*4cc286f3SDominic Spill 899*4cc286f3SDominic Spill void 900*4cc286f3SDominic Spill dissect_encryption_key_size_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 901*4cc286f3SDominic Spill { 902*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2); 903*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1); 904*4cc286f3SDominic Spill 905*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_keysz, tvb, offset, 1, ENC_LITTLE_ENDIAN); 906*4cc286f3SDominic Spill } 907*4cc286f3SDominic Spill 908*4cc286f3SDominic Spill void 909*4cc286f3SDominic Spill dissect_start_encryption_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 910*4cc286f3SDominic Spill { 911*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17); 912*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16); 913*4cc286f3SDominic Spill 914*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_rand, tvb, offset, 16, ENC_NA); 915*4cc286f3SDominic Spill } 916*4cc286f3SDominic Spill 917*4cc286f3SDominic Spill void 918*4cc286f3SDominic Spill dissect_stop_encryption_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 919*4cc286f3SDominic Spill { 920*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 1); 921*4cc286f3SDominic Spill } 922*4cc286f3SDominic Spill 923*4cc286f3SDominic Spill void 924*4cc286f3SDominic Spill dissect_switch_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 925*4cc286f3SDominic Spill { 926*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 5); 927*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 4); 928*4cc286f3SDominic Spill 929*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_swinst, tvb, offset, 4, ENC_LITTLE_ENDIAN); 930*4cc286f3SDominic Spill } 931*4cc286f3SDominic Spill 932*4cc286f3SDominic Spill void 933*4cc286f3SDominic Spill dissect_hold(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 934*4cc286f3SDominic Spill { 935*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 7); 936*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 6); 937*4cc286f3SDominic Spill 938*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_htime, tvb, offset, 2, ENC_LITTLE_ENDIAN); 939*4cc286f3SDominic Spill offset += 2; 940*4cc286f3SDominic Spill 941*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_hinst, tvb, offset, 4, ENC_LITTLE_ENDIAN); 942*4cc286f3SDominic Spill } 943*4cc286f3SDominic Spill 944*4cc286f3SDominic Spill void 945*4cc286f3SDominic Spill dissect_hold_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 946*4cc286f3SDominic Spill { 947*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 7); 948*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 6); 949*4cc286f3SDominic Spill 950*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_htime, tvb, offset, 2, ENC_LITTLE_ENDIAN); 951*4cc286f3SDominic Spill offset += 2; 952*4cc286f3SDominic Spill 953*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_hinst, tvb, offset, 4, ENC_LITTLE_ENDIAN); 954*4cc286f3SDominic Spill } 955*4cc286f3SDominic Spill 956*4cc286f3SDominic Spill void 957*4cc286f3SDominic Spill dissect_sniff_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 958*4cc286f3SDominic Spill { 959*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 10); 960*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 9); 961*4cc286f3SDominic Spill 962*4cc286f3SDominic Spill proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_timectrl, 963*4cc286f3SDominic Spill ett_lmp_timectrl, timectrl_fields, ENC_LITTLE_ENDIAN); 964*4cc286f3SDominic Spill offset += 1; 965*4cc286f3SDominic Spill 966*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_dsniff, tvb, offset, 2, ENC_LITTLE_ENDIAN); 967*4cc286f3SDominic Spill offset += 2; 968*4cc286f3SDominic Spill 969*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_tsniff, tvb, offset, 2, ENC_LITTLE_ENDIAN); 970*4cc286f3SDominic Spill offset += 2; 971*4cc286f3SDominic Spill 972*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_sniffatt, tvb, offset, 2, ENC_LITTLE_ENDIAN); 973*4cc286f3SDominic Spill offset += 2; 974*4cc286f3SDominic Spill 975*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_sniffto, tvb, offset, 2, ENC_LITTLE_ENDIAN); 976*4cc286f3SDominic Spill } 977*4cc286f3SDominic Spill 978*4cc286f3SDominic Spill void 979*4cc286f3SDominic Spill dissect_unsniff_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 980*4cc286f3SDominic Spill { 981*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 1); 982*4cc286f3SDominic Spill } 983*4cc286f3SDominic Spill 984*4cc286f3SDominic Spill void 985*4cc286f3SDominic Spill dissect_park_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 986*4cc286f3SDominic Spill { 987*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17); 988*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16); 989*4cc286f3SDominic Spill 990*4cc286f3SDominic Spill proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_timectrl, 991*4cc286f3SDominic Spill ett_lmp_timectrl, timectrl_fields, ENC_LITTLE_ENDIAN); 992*4cc286f3SDominic Spill offset += 1; 993*4cc286f3SDominic Spill 994*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_db, tvb, offset, 2, ENC_LITTLE_ENDIAN); 995*4cc286f3SDominic Spill offset += 2; 996*4cc286f3SDominic Spill 997*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_tb, tvb, offset, 2, ENC_LITTLE_ENDIAN); 998*4cc286f3SDominic Spill offset += 2; 999*4cc286f3SDominic Spill 1000*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_nb, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1001*4cc286f3SDominic Spill offset += 1; 1002*4cc286f3SDominic Spill 1003*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_deltab, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1004*4cc286f3SDominic Spill offset += 1; 1005*4cc286f3SDominic Spill 1006*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pmaddr, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1007*4cc286f3SDominic Spill offset += 1; 1008*4cc286f3SDominic Spill 1009*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_araddr, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1010*4cc286f3SDominic Spill offset += 1; 1011*4cc286f3SDominic Spill 1012*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_nbsleep, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1013*4cc286f3SDominic Spill offset += 1; 1014*4cc286f3SDominic Spill 1015*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_dbsleep, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1016*4cc286f3SDominic Spill offset += 1; 1017*4cc286f3SDominic Spill 1018*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_daccess, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1019*4cc286f3SDominic Spill offset += 1; 1020*4cc286f3SDominic Spill 1021*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_taccess, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1022*4cc286f3SDominic Spill offset += 1; 1023*4cc286f3SDominic Spill 1024*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_naccslots, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1025*4cc286f3SDominic Spill offset += 1; 1026*4cc286f3SDominic Spill 1027*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_npoll, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1028*4cc286f3SDominic Spill offset += 1; 1029*4cc286f3SDominic Spill 1030*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_maccess, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1031*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_accscheme, tvb, offset, 1, ENC_NA); 1032*4cc286f3SDominic Spill } 1033*4cc286f3SDominic Spill 1034*4cc286f3SDominic Spill void 1035*4cc286f3SDominic Spill dissect_set_broadcast_scan_window(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1036*4cc286f3SDominic Spill { 1037*4cc286f3SDominic Spill int db_present; 1038*4cc286f3SDominic Spill 1039*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1); 1040*4cc286f3SDominic Spill 1041*4cc286f3SDominic Spill proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_timectrl, 1042*4cc286f3SDominic Spill ett_lmp_timectrl, timectrl_fields, ENC_LITTLE_ENDIAN); 1043*4cc286f3SDominic Spill 1044*4cc286f3SDominic Spill /* bit0 of timing control flags indicates presence of db */ 1045*4cc286f3SDominic Spill db_present = tvb_get_guint8(tvb, offset) & 0x01; 1046*4cc286f3SDominic Spill offset += 1; 1047*4cc286f3SDominic Spill 1048*4cc286f3SDominic Spill if (db_present) { 1049*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 6); 1050*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 4); 1051*4cc286f3SDominic Spill 1052*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_db, tvb, offset, 2, ENC_LITTLE_ENDIAN); 1053*4cc286f3SDominic Spill offset += 2; 1054*4cc286f3SDominic Spill } else { 1055*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 4); 1056*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2); 1057*4cc286f3SDominic Spill } 1058*4cc286f3SDominic Spill 1059*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_bsw, tvb, offset, 2, ENC_LITTLE_ENDIAN); 1060*4cc286f3SDominic Spill } 1061*4cc286f3SDominic Spill 1062*4cc286f3SDominic Spill void 1063*4cc286f3SDominic Spill dissect_modify_beacon(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1064*4cc286f3SDominic Spill { 1065*4cc286f3SDominic Spill int db_present; 1066*4cc286f3SDominic Spill 1067*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1); 1068*4cc286f3SDominic Spill 1069*4cc286f3SDominic Spill proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_timectrl, 1070*4cc286f3SDominic Spill ett_lmp_timectrl, timectrl_fields, ENC_LITTLE_ENDIAN); 1071*4cc286f3SDominic Spill 1072*4cc286f3SDominic Spill /* bit0 of timing control flags indicates presence of db */ 1073*4cc286f3SDominic Spill db_present = tvb_get_guint8(tvb, offset) & 0x01; 1074*4cc286f3SDominic Spill offset += 1; 1075*4cc286f3SDominic Spill 1076*4cc286f3SDominic Spill if (db_present) { 1077*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 13); 1078*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 11); 1079*4cc286f3SDominic Spill 1080*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_db, tvb, offset, 2, ENC_LITTLE_ENDIAN); 1081*4cc286f3SDominic Spill offset += 2; 1082*4cc286f3SDominic Spill } else { 1083*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 11); 1084*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 9); 1085*4cc286f3SDominic Spill } 1086*4cc286f3SDominic Spill 1087*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_tb, tvb, offset, 2, ENC_LITTLE_ENDIAN); 1088*4cc286f3SDominic Spill offset += 2; 1089*4cc286f3SDominic Spill 1090*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_nb, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1091*4cc286f3SDominic Spill offset += 1; 1092*4cc286f3SDominic Spill 1093*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_deltab, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1094*4cc286f3SDominic Spill offset += 1; 1095*4cc286f3SDominic Spill 1096*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_daccess, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1097*4cc286f3SDominic Spill offset += 1; 1098*4cc286f3SDominic Spill 1099*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_taccess, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1100*4cc286f3SDominic Spill offset += 1; 1101*4cc286f3SDominic Spill 1102*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_naccslots, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1103*4cc286f3SDominic Spill offset += 1; 1104*4cc286f3SDominic Spill 1105*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_npoll, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1106*4cc286f3SDominic Spill offset += 1; 1107*4cc286f3SDominic Spill 1108*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_maccess, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1109*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_accscheme, tvb, offset, 1, ENC_NA); 1110*4cc286f3SDominic Spill } 1111*4cc286f3SDominic Spill 1112*4cc286f3SDominic Spill void 1113*4cc286f3SDominic Spill dissect_unpark_bd_addr_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1114*4cc286f3SDominic Spill { 1115*4cc286f3SDominic Spill int db_present; 1116*4cc286f3SDominic Spill proto_item *item; 1117*4cc286f3SDominic Spill 1118*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1); 1119*4cc286f3SDominic Spill 1120*4cc286f3SDominic Spill proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_timectrl, 1121*4cc286f3SDominic Spill ett_lmp_timectrl, timectrl_fields, ENC_LITTLE_ENDIAN); 1122*4cc286f3SDominic Spill 1123*4cc286f3SDominic Spill /* bit0 of timing control flags indicates presence of db */ 1124*4cc286f3SDominic Spill db_present = tvb_get_guint8(tvb, offset) & 0x01; 1125*4cc286f3SDominic Spill offset += 1; 1126*4cc286f3SDominic Spill 1127*4cc286f3SDominic Spill if (db_present) { 1128*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17); 1129*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 15); 1130*4cc286f3SDominic Spill 1131*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_db, tvb, offset, 2, ENC_LITTLE_ENDIAN); 1132*4cc286f3SDominic Spill offset += 2; 1133*4cc286f3SDominic Spill } else { 1134*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 15); 1135*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 13); 1136*4cc286f3SDominic Spill } 1137*4cc286f3SDominic Spill 1138*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_ltaddr1, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1139*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_ltaddr2, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1140*4cc286f3SDominic Spill offset += 1; 1141*4cc286f3SDominic Spill 1142*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_bdaddr1, tvb, offset, 6, ENC_LITTLE_ENDIAN); 1143*4cc286f3SDominic Spill offset += 6; 1144*4cc286f3SDominic Spill 1145*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_bdaddr2, tvb, offset, 6, ENC_LITTLE_ENDIAN); 1146*4cc286f3SDominic Spill offset += 6; 1147*4cc286f3SDominic Spill } 1148*4cc286f3SDominic Spill 1149*4cc286f3SDominic Spill void 1150*4cc286f3SDominic Spill dissect_unpark_pm_addr_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1151*4cc286f3SDominic Spill { 1152*4cc286f3SDominic Spill int db_present; 1153*4cc286f3SDominic Spill 1154*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1); 1155*4cc286f3SDominic Spill 1156*4cc286f3SDominic Spill proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_timectrl, 1157*4cc286f3SDominic Spill ett_lmp_timectrl, timectrl_fields, ENC_LITTLE_ENDIAN); 1158*4cc286f3SDominic Spill 1159*4cc286f3SDominic Spill /* bit0 of timing control flags indicates presence of db */ 1160*4cc286f3SDominic Spill db_present = tvb_get_guint8(tvb, offset) & 0x01; 1161*4cc286f3SDominic Spill offset += 1; 1162*4cc286f3SDominic Spill 1163*4cc286f3SDominic Spill if (db_present) { 1164*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 15); 1165*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 13); 1166*4cc286f3SDominic Spill 1167*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_db, tvb, offset, 2, ENC_LITTLE_ENDIAN); 1168*4cc286f3SDominic Spill offset += 2; 1169*4cc286f3SDominic Spill } else { 1170*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 13); 1171*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 11); 1172*4cc286f3SDominic Spill } 1173*4cc286f3SDominic Spill 1174*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_ltaddr1, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1175*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_ltaddr2, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1176*4cc286f3SDominic Spill offset += 1; 1177*4cc286f3SDominic Spill 1178*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pmaddr1, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1179*4cc286f3SDominic Spill offset += 1; 1180*4cc286f3SDominic Spill 1181*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pmaddr2, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1182*4cc286f3SDominic Spill offset += 1; 1183*4cc286f3SDominic Spill 1184*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_ltaddr3, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1185*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_ltaddr4, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1186*4cc286f3SDominic Spill offset += 1; 1187*4cc286f3SDominic Spill 1188*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pmaddr3, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1189*4cc286f3SDominic Spill offset += 1; 1190*4cc286f3SDominic Spill 1191*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pmaddr4, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1192*4cc286f3SDominic Spill offset += 1; 1193*4cc286f3SDominic Spill 1194*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_ltaddr5, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1195*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_ltaddr6, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1196*4cc286f3SDominic Spill offset += 1; 1197*4cc286f3SDominic Spill 1198*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pmaddr5, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1199*4cc286f3SDominic Spill offset += 1; 1200*4cc286f3SDominic Spill 1201*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pmaddr6, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1202*4cc286f3SDominic Spill offset += 1; 1203*4cc286f3SDominic Spill 1204*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_ltaddr7, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1205*4cc286f3SDominic Spill offset += 1; 1206*4cc286f3SDominic Spill 1207*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pmaddr7, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1208*4cc286f3SDominic Spill } 1209*4cc286f3SDominic Spill 1210*4cc286f3SDominic Spill void 1211*4cc286f3SDominic Spill dissect_incr_power_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1212*4cc286f3SDominic Spill { 1213*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2); 1214*4cc286f3SDominic Spill 1215*4cc286f3SDominic Spill /* skipping one byte "for future use" */ 1216*4cc286f3SDominic Spill } 1217*4cc286f3SDominic Spill 1218*4cc286f3SDominic Spill void 1219*4cc286f3SDominic Spill dissect_decr_power_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1220*4cc286f3SDominic Spill { 1221*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2); 1222*4cc286f3SDominic Spill 1223*4cc286f3SDominic Spill /* skipping one byte "for future use" */ 1224*4cc286f3SDominic Spill } 1225*4cc286f3SDominic Spill 1226*4cc286f3SDominic Spill void 1227*4cc286f3SDominic Spill dissect_max_power(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1228*4cc286f3SDominic Spill { 1229*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 1); 1230*4cc286f3SDominic Spill } 1231*4cc286f3SDominic Spill 1232*4cc286f3SDominic Spill void 1233*4cc286f3SDominic Spill dissect_min_power(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1234*4cc286f3SDominic Spill { 1235*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 1); 1236*4cc286f3SDominic Spill } 1237*4cc286f3SDominic Spill 1238*4cc286f3SDominic Spill void 1239*4cc286f3SDominic Spill dissect_auto_rate(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1240*4cc286f3SDominic Spill { 1241*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 1); 1242*4cc286f3SDominic Spill } 1243*4cc286f3SDominic Spill 1244*4cc286f3SDominic Spill void 1245*4cc286f3SDominic Spill dissect_preferred_rate(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1246*4cc286f3SDominic Spill { 1247*4cc286f3SDominic Spill proto_item *rate_item; 1248*4cc286f3SDominic Spill proto_tree *rate_tree; 1249*4cc286f3SDominic Spill 1250*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2); 1251*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1); 1252*4cc286f3SDominic Spill 1253*4cc286f3SDominic Spill rate_item = proto_tree_add_item(tree, hf_lmp_rate, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1254*4cc286f3SDominic Spill rate_tree = proto_item_add_subtree(rate_item, ett_lmp_rate); 1255*4cc286f3SDominic Spill 1256*4cc286f3SDominic Spill proto_tree_add_item(rate_tree, hf_lmp_rate_fec, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1257*4cc286f3SDominic Spill proto_tree_add_item(rate_tree, hf_lmp_rate_size, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1258*4cc286f3SDominic Spill proto_tree_add_item(rate_tree, hf_lmp_rate_type, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1259*4cc286f3SDominic Spill proto_tree_add_item(rate_tree, hf_lmp_rate_edrsize, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1260*4cc286f3SDominic Spill } 1261*4cc286f3SDominic Spill 1262*4cc286f3SDominic Spill void 1263*4cc286f3SDominic Spill dissect_version_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1264*4cc286f3SDominic Spill { 1265*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 6); 1266*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 5); 1267*4cc286f3SDominic Spill 1268*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_versnr, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1269*4cc286f3SDominic Spill offset += 1; 1270*4cc286f3SDominic Spill 1271*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_compid, tvb, offset, 2, ENC_LITTLE_ENDIAN); 1272*4cc286f3SDominic Spill offset += 2; 1273*4cc286f3SDominic Spill 1274*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_subversnr, tvb, offset, 2, ENC_LITTLE_ENDIAN); 1275*4cc286f3SDominic Spill } 1276*4cc286f3SDominic Spill 1277*4cc286f3SDominic Spill void 1278*4cc286f3SDominic Spill dissect_version_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1279*4cc286f3SDominic Spill { 1280*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 6); 1281*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 5); 1282*4cc286f3SDominic Spill 1283*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_versnr, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1284*4cc286f3SDominic Spill offset += 1; 1285*4cc286f3SDominic Spill 1286*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_compid, tvb, offset, 2, ENC_LITTLE_ENDIAN); 1287*4cc286f3SDominic Spill offset += 2; 1288*4cc286f3SDominic Spill 1289*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_subversnr, tvb, offset, 2, ENC_LITTLE_ENDIAN); 1290*4cc286f3SDominic Spill } 1291*4cc286f3SDominic Spill 1292*4cc286f3SDominic Spill void 1293*4cc286f3SDominic Spill dissect_features_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1294*4cc286f3SDominic Spill { 1295*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 9); 1296*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 8); 1297*4cc286f3SDominic Spill 1298*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_features, tvb, offset, 8, ENC_NA); 1299*4cc286f3SDominic Spill } 1300*4cc286f3SDominic Spill 1301*4cc286f3SDominic Spill void 1302*4cc286f3SDominic Spill dissect_features_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1303*4cc286f3SDominic Spill { 1304*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 9); 1305*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 8); 1306*4cc286f3SDominic Spill 1307*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_features, tvb, offset, 8, ENC_NA); 1308*4cc286f3SDominic Spill } 1309*4cc286f3SDominic Spill 1310*4cc286f3SDominic Spill void 1311*4cc286f3SDominic Spill dissect_quality_of_service(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1312*4cc286f3SDominic Spill { 1313*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 4); 1314*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 3); 1315*4cc286f3SDominic Spill 1316*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pollintvl, tvb, offset, 2, ENC_LITTLE_ENDIAN); 1317*4cc286f3SDominic Spill offset += 2; 1318*4cc286f3SDominic Spill 1319*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_nbc, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1320*4cc286f3SDominic Spill } 1321*4cc286f3SDominic Spill 1322*4cc286f3SDominic Spill void 1323*4cc286f3SDominic Spill dissect_quality_of_service_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1324*4cc286f3SDominic Spill { 1325*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 4); 1326*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 3); 1327*4cc286f3SDominic Spill 1328*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pollintvl, tvb, offset, 2, ENC_LITTLE_ENDIAN); 1329*4cc286f3SDominic Spill offset += 2; 1330*4cc286f3SDominic Spill 1331*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_nbc, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1332*4cc286f3SDominic Spill } 1333*4cc286f3SDominic Spill 1334*4cc286f3SDominic Spill void 1335*4cc286f3SDominic Spill dissect_sco_link_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1336*4cc286f3SDominic Spill { 1337*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 7); 1338*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 6); 1339*4cc286f3SDominic Spill 1340*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_scohdl, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1341*4cc286f3SDominic Spill offset += 1; 1342*4cc286f3SDominic Spill 1343*4cc286f3SDominic Spill proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_timectrl, 1344*4cc286f3SDominic Spill ett_lmp_timectrl, timectrl_fields, ENC_LITTLE_ENDIAN); 1345*4cc286f3SDominic Spill offset += 1; 1346*4cc286f3SDominic Spill 1347*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_dsco, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1348*4cc286f3SDominic Spill offset += 1; 1349*4cc286f3SDominic Spill 1350*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_tsco, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1351*4cc286f3SDominic Spill offset += 1; 1352*4cc286f3SDominic Spill 1353*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_scopkt, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1354*4cc286f3SDominic Spill offset += 1; 1355*4cc286f3SDominic Spill 1356*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_airmode, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1357*4cc286f3SDominic Spill } 1358*4cc286f3SDominic Spill 1359*4cc286f3SDominic Spill void 1360*4cc286f3SDominic Spill dissect_remove_sco_link_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1361*4cc286f3SDominic Spill { 1362*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 3); 1363*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2); 1364*4cc286f3SDominic Spill 1365*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_scohdl, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1366*4cc286f3SDominic Spill offset += 1; 1367*4cc286f3SDominic Spill 1368*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_err, tvb, offset, 1, ENC_NA); 1369*4cc286f3SDominic Spill } 1370*4cc286f3SDominic Spill 1371*4cc286f3SDominic Spill void 1372*4cc286f3SDominic Spill dissect_max_slot(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1373*4cc286f3SDominic Spill { 1374*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2); 1375*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1); 1376*4cc286f3SDominic Spill 1377*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_maxslots, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1378*4cc286f3SDominic Spill } 1379*4cc286f3SDominic Spill 1380*4cc286f3SDominic Spill void 1381*4cc286f3SDominic Spill dissect_max_slot_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1382*4cc286f3SDominic Spill { 1383*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2); 1384*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1); 1385*4cc286f3SDominic Spill 1386*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_maxslots, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1387*4cc286f3SDominic Spill } 1388*4cc286f3SDominic Spill 1389*4cc286f3SDominic Spill void 1390*4cc286f3SDominic Spill dissect_timing_accuracy_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1391*4cc286f3SDominic Spill { 1392*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 1); 1393*4cc286f3SDominic Spill } 1394*4cc286f3SDominic Spill 1395*4cc286f3SDominic Spill void 1396*4cc286f3SDominic Spill dissect_timing_accuracy_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1397*4cc286f3SDominic Spill { 1398*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 3); 1399*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2); 1400*4cc286f3SDominic Spill 1401*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_drift, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1402*4cc286f3SDominic Spill offset += 1; 1403*4cc286f3SDominic Spill 1404*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_jitter, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1405*4cc286f3SDominic Spill } 1406*4cc286f3SDominic Spill 1407*4cc286f3SDominic Spill void 1408*4cc286f3SDominic Spill dissect_setup_complete(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1409*4cc286f3SDominic Spill { 1410*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 1); 1411*4cc286f3SDominic Spill } 1412*4cc286f3SDominic Spill 1413*4cc286f3SDominic Spill void 1414*4cc286f3SDominic Spill dissect_use_semi_permanent_key(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1415*4cc286f3SDominic Spill { 1416*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 1); 1417*4cc286f3SDominic Spill } 1418*4cc286f3SDominic Spill 1419*4cc286f3SDominic Spill void 1420*4cc286f3SDominic Spill dissect_host_connection_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1421*4cc286f3SDominic Spill { 1422*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 1); 1423*4cc286f3SDominic Spill } 1424*4cc286f3SDominic Spill 1425*4cc286f3SDominic Spill void 1426*4cc286f3SDominic Spill dissect_slot_offset(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1427*4cc286f3SDominic Spill { 1428*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 9); 1429*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 8); 1430*4cc286f3SDominic Spill 1431*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_slotoffset, tvb, offset, 2, ENC_LITTLE_ENDIAN); 1432*4cc286f3SDominic Spill offset += 2; 1433*4cc286f3SDominic Spill 1434*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_bdaddr, tvb, offset, 6, ENC_LITTLE_ENDIAN); 1435*4cc286f3SDominic Spill } 1436*4cc286f3SDominic Spill 1437*4cc286f3SDominic Spill void 1438*4cc286f3SDominic Spill dissect_page_mode_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1439*4cc286f3SDominic Spill { 1440*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 3); 1441*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2); 1442*4cc286f3SDominic Spill 1443*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pagesch, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1444*4cc286f3SDominic Spill offset += 1; 1445*4cc286f3SDominic Spill 1446*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pssettings, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1447*4cc286f3SDominic Spill } 1448*4cc286f3SDominic Spill 1449*4cc286f3SDominic Spill void 1450*4cc286f3SDominic Spill dissect_page_scan_mode_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1451*4cc286f3SDominic Spill { 1452*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 3); 1453*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2); 1454*4cc286f3SDominic Spill 1455*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pagesch, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1456*4cc286f3SDominic Spill offset += 1; 1457*4cc286f3SDominic Spill 1458*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pssettings, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1459*4cc286f3SDominic Spill } 1460*4cc286f3SDominic Spill 1461*4cc286f3SDominic Spill void 1462*4cc286f3SDominic Spill dissect_supervision_timeout(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1463*4cc286f3SDominic Spill { 1464*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 3); 1465*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2); 1466*4cc286f3SDominic Spill 1467*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_suptimeout, tvb, offset, 2, ENC_LITTLE_ENDIAN); 1468*4cc286f3SDominic Spill } 1469*4cc286f3SDominic Spill 1470*4cc286f3SDominic Spill void 1471*4cc286f3SDominic Spill dissect_test_activate(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1472*4cc286f3SDominic Spill { 1473*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 1); 1474*4cc286f3SDominic Spill } 1475*4cc286f3SDominic Spill 1476*4cc286f3SDominic Spill void 1477*4cc286f3SDominic Spill dissect_test_control(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1478*4cc286f3SDominic Spill { 1479*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 10); 1480*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 9); 1481*4cc286f3SDominic Spill 1482*4cc286f3SDominic Spill /* FIXME these fields should all be XORed with 0x55. . . */ 1483*4cc286f3SDominic Spill 1484*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_testscen, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1485*4cc286f3SDominic Spill offset += 1; 1486*4cc286f3SDominic Spill 1487*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_hopmode, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1488*4cc286f3SDominic Spill offset += 1; 1489*4cc286f3SDominic Spill 1490*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_txfreq, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1491*4cc286f3SDominic Spill offset += 1; 1492*4cc286f3SDominic Spill 1493*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_rxfreq, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1494*4cc286f3SDominic Spill offset += 1; 1495*4cc286f3SDominic Spill 1496*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pcmode, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1497*4cc286f3SDominic Spill offset += 1; 1498*4cc286f3SDominic Spill 1499*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pollper, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1500*4cc286f3SDominic Spill offset += 1; 1501*4cc286f3SDominic Spill 1502*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pkttype, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1503*4cc286f3SDominic Spill offset += 1; 1504*4cc286f3SDominic Spill 1505*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_testlen, tvb, offset, 2, ENC_LITTLE_ENDIAN); 1506*4cc286f3SDominic Spill } 1507*4cc286f3SDominic Spill 1508*4cc286f3SDominic Spill void 1509*4cc286f3SDominic Spill dissect_encryption_key_size_mask_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1510*4cc286f3SDominic Spill { 1511*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 1); 1512*4cc286f3SDominic Spill } 1513*4cc286f3SDominic Spill 1514*4cc286f3SDominic Spill void 1515*4cc286f3SDominic Spill dissect_encryption_key_size_mask_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1516*4cc286f3SDominic Spill { 1517*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 3); 1518*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2); 1519*4cc286f3SDominic Spill 1520*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_ksmask, tvb, offset, 2, ENC_LITTLE_ENDIAN); 1521*4cc286f3SDominic Spill } 1522*4cc286f3SDominic Spill 1523*4cc286f3SDominic Spill void 1524*4cc286f3SDominic Spill dissect_set_afh(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1525*4cc286f3SDominic Spill { 1526*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 16); 1527*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 15); 1528*4cc286f3SDominic Spill 1529*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_afhinst, tvb, offset, 4, ENC_LITTLE_ENDIAN); 1530*4cc286f3SDominic Spill offset += 4; 1531*4cc286f3SDominic Spill 1532*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_afhmode, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1533*4cc286f3SDominic Spill offset += 1; 1534*4cc286f3SDominic Spill 1535*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_afhchmap, tvb, offset, 10, ENC_NA); 1536*4cc286f3SDominic Spill } 1537*4cc286f3SDominic Spill 1538*4cc286f3SDominic Spill void 1539*4cc286f3SDominic Spill dissect_encapsulated_header(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1540*4cc286f3SDominic Spill { 1541*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 4); 1542*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 3); 1543*4cc286f3SDominic Spill 1544*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_encmaj, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1545*4cc286f3SDominic Spill offset += 1; 1546*4cc286f3SDominic Spill 1547*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_encmin, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1548*4cc286f3SDominic Spill offset += 1; 1549*4cc286f3SDominic Spill 1550*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_enclen, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1551*4cc286f3SDominic Spill } 1552*4cc286f3SDominic Spill 1553*4cc286f3SDominic Spill void 1554*4cc286f3SDominic Spill dissect_encapsulated_payload(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1555*4cc286f3SDominic Spill { 1556*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17); 1557*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16); 1558*4cc286f3SDominic Spill 1559*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_encdata, tvb, offset, 16, ENC_NA); 1560*4cc286f3SDominic Spill } 1561*4cc286f3SDominic Spill 1562*4cc286f3SDominic Spill void 1563*4cc286f3SDominic Spill dissect_simple_pairing_confirm(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1564*4cc286f3SDominic Spill { 1565*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17); 1566*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16); 1567*4cc286f3SDominic Spill 1568*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_commit, tvb, offset, 16, ENC_NA); 1569*4cc286f3SDominic Spill } 1570*4cc286f3SDominic Spill 1571*4cc286f3SDominic Spill void 1572*4cc286f3SDominic Spill dissect_simple_pairing_number(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1573*4cc286f3SDominic Spill { 1574*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17); 1575*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16); 1576*4cc286f3SDominic Spill 1577*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_nonce, tvb, offset, 16, ENC_NA); 1578*4cc286f3SDominic Spill } 1579*4cc286f3SDominic Spill 1580*4cc286f3SDominic Spill void 1581*4cc286f3SDominic Spill dissect_dhkey_check(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1582*4cc286f3SDominic Spill { 1583*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17); 1584*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16); 1585*4cc286f3SDominic Spill 1586*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_confirm, tvb, offset, 16, ENC_NA); 1587*4cc286f3SDominic Spill } 1588*4cc286f3SDominic Spill 1589*4cc286f3SDominic Spill /* LMP PDUs with extended opcodes */ 1590*4cc286f3SDominic Spill 1591*4cc286f3SDominic Spill void 1592*4cc286f3SDominic Spill dissect_accepted_ext(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1593*4cc286f3SDominic Spill { 1594*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 4); 1595*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2); 1596*4cc286f3SDominic Spill 1597*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_opinre, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1598*4cc286f3SDominic Spill offset += 1; 1599*4cc286f3SDominic Spill 1600*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_eopinre, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1601*4cc286f3SDominic Spill } 1602*4cc286f3SDominic Spill 1603*4cc286f3SDominic Spill void 1604*4cc286f3SDominic Spill dissect_not_accepted_ext(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1605*4cc286f3SDominic Spill { 1606*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 4); 1607*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2); 1608*4cc286f3SDominic Spill 1609*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_opinre, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1610*4cc286f3SDominic Spill offset += 1; 1611*4cc286f3SDominic Spill 1612*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_eopinre, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1613*4cc286f3SDominic Spill offset += 1; 1614*4cc286f3SDominic Spill 1615*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_err, tvb, offset, 1, ENC_NA); 1616*4cc286f3SDominic Spill } 1617*4cc286f3SDominic Spill 1618*4cc286f3SDominic Spill void 1619*4cc286f3SDominic Spill dissect_features_req_ext(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1620*4cc286f3SDominic Spill { 1621*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 12); 1622*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 10); 1623*4cc286f3SDominic Spill 1624*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_fpage, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1625*4cc286f3SDominic Spill offset += 1; 1626*4cc286f3SDominic Spill 1627*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_maxsp, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1628*4cc286f3SDominic Spill offset += 1; 1629*4cc286f3SDominic Spill 1630*4cc286f3SDominic Spill /* 1631*4cc286f3SDominic Spill * extended features might need to be different from hf_lmp_features 1632*4cc286f3SDominic Spill * if hf_lmp_features is broken out 1633*4cc286f3SDominic Spill */ 1634*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_features, tvb, offset, 8, ENC_NA); 1635*4cc286f3SDominic Spill } 1636*4cc286f3SDominic Spill 1637*4cc286f3SDominic Spill void 1638*4cc286f3SDominic Spill dissect_features_res_ext(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1639*4cc286f3SDominic Spill { 1640*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 12); 1641*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 10); 1642*4cc286f3SDominic Spill 1643*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_fpage, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1644*4cc286f3SDominic Spill offset += 1; 1645*4cc286f3SDominic Spill 1646*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_maxsp, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1647*4cc286f3SDominic Spill offset += 1; 1648*4cc286f3SDominic Spill 1649*4cc286f3SDominic Spill /* 1650*4cc286f3SDominic Spill * extended features might need to be different from hf_lmp_features 1651*4cc286f3SDominic Spill * if hf_lmp_features is broken out 1652*4cc286f3SDominic Spill */ 1653*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_features, tvb, offset, 8, ENC_NA); 1654*4cc286f3SDominic Spill } 1655*4cc286f3SDominic Spill 1656*4cc286f3SDominic Spill void 1657*4cc286f3SDominic Spill dissect_packet_type_table_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1658*4cc286f3SDominic Spill { 1659*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 3); 1660*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1); 1661*4cc286f3SDominic Spill 1662*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pkttypetbl, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1663*4cc286f3SDominic Spill } 1664*4cc286f3SDominic Spill 1665*4cc286f3SDominic Spill void 1666*4cc286f3SDominic Spill dissect_esco_link_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1667*4cc286f3SDominic Spill { 1668*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 16); 1669*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 14); 1670*4cc286f3SDominic Spill 1671*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_escohdl, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1672*4cc286f3SDominic Spill offset += 1; 1673*4cc286f3SDominic Spill 1674*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_escoltaddr, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1675*4cc286f3SDominic Spill offset += 1; 1676*4cc286f3SDominic Spill 1677*4cc286f3SDominic Spill proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_timectrl, 1678*4cc286f3SDominic Spill ett_lmp_timectrl, timectrl_fields, ENC_LITTLE_ENDIAN); 1679*4cc286f3SDominic Spill offset += 1; 1680*4cc286f3SDominic Spill 1681*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_desco, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1682*4cc286f3SDominic Spill offset += 1; 1683*4cc286f3SDominic Spill 1684*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_tesco, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1685*4cc286f3SDominic Spill offset += 1; 1686*4cc286f3SDominic Spill 1687*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_wesco, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1688*4cc286f3SDominic Spill offset += 1; 1689*4cc286f3SDominic Spill 1690*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_escotypems, tvb, offset, 1, ENC_NA); 1691*4cc286f3SDominic Spill offset += 1; 1692*4cc286f3SDominic Spill 1693*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_escotypesm, tvb, offset, 1, ENC_NA); 1694*4cc286f3SDominic Spill offset += 1; 1695*4cc286f3SDominic Spill 1696*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_escolenms, tvb, offset, 2, ENC_LITTLE_ENDIAN); 1697*4cc286f3SDominic Spill offset += 2; 1698*4cc286f3SDominic Spill 1699*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_escolensm, tvb, offset, 2, ENC_LITTLE_ENDIAN); 1700*4cc286f3SDominic Spill offset += 2; 1701*4cc286f3SDominic Spill 1702*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_airmode, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1703*4cc286f3SDominic Spill offset += 1; 1704*4cc286f3SDominic Spill 1705*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_negstate, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1706*4cc286f3SDominic Spill } 1707*4cc286f3SDominic Spill 1708*4cc286f3SDominic Spill void 1709*4cc286f3SDominic Spill dissect_remove_esco_link_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1710*4cc286f3SDominic Spill { 1711*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 4); 1712*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2); 1713*4cc286f3SDominic Spill 1714*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_escohdl, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1715*4cc286f3SDominic Spill offset += 1; 1716*4cc286f3SDominic Spill 1717*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_err, tvb, offset, 1, ENC_NA); 1718*4cc286f3SDominic Spill } 1719*4cc286f3SDominic Spill 1720*4cc286f3SDominic Spill void 1721*4cc286f3SDominic Spill dissect_channel_classification_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1722*4cc286f3SDominic Spill { 1723*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 7); 1724*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 5); 1725*4cc286f3SDominic Spill 1726*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_afhrptmode, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1727*4cc286f3SDominic Spill offset += 1; 1728*4cc286f3SDominic Spill 1729*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_afhminintvl, tvb, offset, 2, ENC_LITTLE_ENDIAN); 1730*4cc286f3SDominic Spill offset += 2; 1731*4cc286f3SDominic Spill 1732*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_afhmaxintvl, tvb, offset, 2, ENC_LITTLE_ENDIAN); 1733*4cc286f3SDominic Spill } 1734*4cc286f3SDominic Spill 1735*4cc286f3SDominic Spill void 1736*4cc286f3SDominic Spill dissect_channel_classification(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1737*4cc286f3SDominic Spill { 1738*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 12); 1739*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 10); 1740*4cc286f3SDominic Spill 1741*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_afhclass, tvb, offset, 10, ENC_NA); 1742*4cc286f3SDominic Spill } 1743*4cc286f3SDominic Spill 1744*4cc286f3SDominic Spill void 1745*4cc286f3SDominic Spill dissect_sniff_subrating_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1746*4cc286f3SDominic Spill { 1747*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 9); 1748*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 7); 1749*4cc286f3SDominic Spill 1750*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_maxss, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1751*4cc286f3SDominic Spill offset += 1; 1752*4cc286f3SDominic Spill 1753*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_minsmt, tvb, offset, 2, ENC_LITTLE_ENDIAN); 1754*4cc286f3SDominic Spill offset += 2; 1755*4cc286f3SDominic Spill 1756*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_sniffsi, tvb, offset, 2, ENC_LITTLE_ENDIAN); 1757*4cc286f3SDominic Spill } 1758*4cc286f3SDominic Spill 1759*4cc286f3SDominic Spill void 1760*4cc286f3SDominic Spill dissect_sniff_subrating_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1761*4cc286f3SDominic Spill { 1762*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 9); 1763*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 7); 1764*4cc286f3SDominic Spill 1765*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_maxss, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1766*4cc286f3SDominic Spill offset += 1; 1767*4cc286f3SDominic Spill 1768*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_minsmt, tvb, offset, 2, ENC_LITTLE_ENDIAN); 1769*4cc286f3SDominic Spill offset += 2; 1770*4cc286f3SDominic Spill 1771*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_sniffsi, tvb, offset, 2, ENC_LITTLE_ENDIAN); 1772*4cc286f3SDominic Spill } 1773*4cc286f3SDominic Spill 1774*4cc286f3SDominic Spill void 1775*4cc286f3SDominic Spill dissect_pause_encryption_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1776*4cc286f3SDominic Spill { 1777*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2); 1778*4cc286f3SDominic Spill } 1779*4cc286f3SDominic Spill 1780*4cc286f3SDominic Spill void 1781*4cc286f3SDominic Spill dissect_resume_encryption_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1782*4cc286f3SDominic Spill { 1783*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2); 1784*4cc286f3SDominic Spill } 1785*4cc286f3SDominic Spill 1786*4cc286f3SDominic Spill void 1787*4cc286f3SDominic Spill dissect_io_capability_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1788*4cc286f3SDominic Spill { 1789*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 5); 1790*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 3); 1791*4cc286f3SDominic Spill 1792*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_iocaps, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1793*4cc286f3SDominic Spill offset += 1; 1794*4cc286f3SDominic Spill 1795*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_oobauthdata, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1796*4cc286f3SDominic Spill offset += 1; 1797*4cc286f3SDominic Spill 1798*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_authreqs, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1799*4cc286f3SDominic Spill } 1800*4cc286f3SDominic Spill 1801*4cc286f3SDominic Spill void 1802*4cc286f3SDominic Spill dissect_io_capability_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1803*4cc286f3SDominic Spill { 1804*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 5); 1805*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 3); 1806*4cc286f3SDominic Spill 1807*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_iocaps, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1808*4cc286f3SDominic Spill offset += 1; 1809*4cc286f3SDominic Spill 1810*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_oobauthdata, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1811*4cc286f3SDominic Spill offset += 1; 1812*4cc286f3SDominic Spill 1813*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_authreqs, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1814*4cc286f3SDominic Spill } 1815*4cc286f3SDominic Spill 1816*4cc286f3SDominic Spill void 1817*4cc286f3SDominic Spill dissect_numeric_comparison_failed(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1818*4cc286f3SDominic Spill { 1819*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2); 1820*4cc286f3SDominic Spill } 1821*4cc286f3SDominic Spill 1822*4cc286f3SDominic Spill void 1823*4cc286f3SDominic Spill dissect_passkey_failed(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1824*4cc286f3SDominic Spill { 1825*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2); 1826*4cc286f3SDominic Spill } 1827*4cc286f3SDominic Spill 1828*4cc286f3SDominic Spill void 1829*4cc286f3SDominic Spill dissect_oob_failed(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1830*4cc286f3SDominic Spill { 1831*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2); 1832*4cc286f3SDominic Spill } 1833*4cc286f3SDominic Spill 1834*4cc286f3SDominic Spill void 1835*4cc286f3SDominic Spill dissect_keypress_notification(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1836*4cc286f3SDominic Spill { 1837*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 3); 1838*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1); 1839*4cc286f3SDominic Spill 1840*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_nottype, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1841*4cc286f3SDominic Spill } 1842*4cc286f3SDominic Spill 1843*4cc286f3SDominic Spill void 1844*4cc286f3SDominic Spill dissect_power_control_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1845*4cc286f3SDominic Spill { 1846*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 3); 1847*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1); 1848*4cc286f3SDominic Spill 1849*4cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pwradjreq, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1850*4cc286f3SDominic Spill } 1851*4cc286f3SDominic Spill 1852*4cc286f3SDominic Spill void 1853*4cc286f3SDominic Spill dissect_power_control_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len) 1854*4cc286f3SDominic Spill { 1855*4cc286f3SDominic Spill proto_item *pa_item; 1856*4cc286f3SDominic Spill proto_tree *pa_tree; 1857*4cc286f3SDominic Spill 1858*4cc286f3SDominic Spill DISSECTOR_ASSERT(len == 3); 1859*4cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1); 1860*4cc286f3SDominic Spill 1861*4cc286f3SDominic Spill pa_item = proto_tree_add_item(tree, hf_lmp_pwradjres, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1862*4cc286f3SDominic Spill pa_tree = proto_item_add_subtree(pa_item, ett_lmp_pwradjres); 1863*4cc286f3SDominic Spill 1864*4cc286f3SDominic Spill proto_tree_add_item(pa_tree, hf_lmp_pwradj_gfsk, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1865*4cc286f3SDominic Spill proto_tree_add_item(pa_tree, hf_lmp_pwradj_dqpsk, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1866*4cc286f3SDominic Spill proto_tree_add_item(pa_tree, hf_lmp_pwradj_8dpsk, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1867*4cc286f3SDominic Spill } 1868*4cc286f3SDominic Spill 1869*4cc286f3SDominic Spill /* Link Manager Protocol */ 1870*4cc286f3SDominic Spill static void 1871*4cc286f3SDominic Spill dissect_btbrlmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) 1872*4cc286f3SDominic Spill { 1873*4cc286f3SDominic Spill proto_item *lmp_item; 1874*4cc286f3SDominic Spill proto_tree *lmp_tree; 1875*4cc286f3SDominic Spill int offset; 1876*4cc286f3SDominic Spill int len; 1877*4cc286f3SDominic Spill int op; /* opcode */ 1878*4cc286f3SDominic Spill int eop; /* extended opcode */ 1879*4cc286f3SDominic Spill 1880*4cc286f3SDominic Spill offset = 0; 1881*4cc286f3SDominic Spill len = tvb_reported_length(tvb); 1882*4cc286f3SDominic Spill 1883*4cc286f3SDominic Spill DISSECTOR_ASSERT(len >= 1); 1884*4cc286f3SDominic Spill 1885*4cc286f3SDominic Spill /* make entries in protocol column and info column on summary display */ 1886*4cc286f3SDominic Spill col_set_str(pinfo->cinfo, COL_PROTOCOL, "LMP"); 1887*4cc286f3SDominic Spill 1888*4cc286f3SDominic Spill /* clear the info column first just in case of type fetching failure. */ 1889*4cc286f3SDominic Spill col_clear(pinfo->cinfo, COL_INFO); 1890*4cc286f3SDominic Spill 1891*4cc286f3SDominic Spill op = tvb_get_guint8(tvb, offset) >> 1; 1892*4cc286f3SDominic Spill 1893*4cc286f3SDominic Spill if (op == LMP_ESCAPE_4) { 1894*4cc286f3SDominic Spill DISSECTOR_ASSERT(len >= 2); 1895*4cc286f3SDominic Spill 1896*4cc286f3SDominic Spill eop = tvb_get_guint8(tvb, offset + 1); 1897*4cc286f3SDominic Spill 1898*4cc286f3SDominic Spill col_add_str(pinfo->cinfo, COL_INFO, val_to_str(eop, 1899*4cc286f3SDominic Spill opcode, "Unknown Extended Opcode (%d)")); 1900*4cc286f3SDominic Spill } else { 1901*4cc286f3SDominic Spill col_add_str(pinfo->cinfo, COL_INFO, val_to_str(op, 1902*4cc286f3SDominic Spill opcode, "Unknown Opcode (%d)")); 1903*4cc286f3SDominic Spill } 1904*4cc286f3SDominic Spill 1905*4cc286f3SDominic Spill /* see if we are being asked for details */ 1906*4cc286f3SDominic Spill if (!tree) 1907*4cc286f3SDominic Spill return; 1908*4cc286f3SDominic Spill 1909*4cc286f3SDominic Spill lmp_item = proto_tree_add_item(tree, proto_btbrlmp, tvb, offset, -1, ENC_NA); 1910*4cc286f3SDominic Spill lmp_tree = proto_item_add_subtree(lmp_item, ett_lmp); 1911*4cc286f3SDominic Spill 1912*4cc286f3SDominic Spill proto_tree_add_item(lmp_tree, hf_lmp_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1913*4cc286f3SDominic Spill 1914*4cc286f3SDominic Spill proto_tree_add_item(lmp_tree, hf_lmp_op, tvb, offset, 1, ENC_LITTLE_ENDIAN); 1915*4cc286f3SDominic Spill offset += 1; 1916*4cc286f3SDominic Spill 1917*4cc286f3SDominic Spill switch (op) { 1918*4cc286f3SDominic Spill case LMP_NAME_REQ: 1919*4cc286f3SDominic Spill dissect_name_req(lmp_tree, tvb, offset, len); 1920*4cc286f3SDominic Spill break; 1921*4cc286f3SDominic Spill case LMP_NAME_RES: 1922*4cc286f3SDominic Spill dissect_name_res(lmp_tree, tvb, offset, len); 1923*4cc286f3SDominic Spill break; 1924*4cc286f3SDominic Spill case LMP_ACCEPTED: 1925*4cc286f3SDominic Spill dissect_accepted(lmp_tree, tvb, offset, len); 1926*4cc286f3SDominic Spill break; 1927*4cc286f3SDominic Spill case LMP_NOT_ACCEPTED: 1928*4cc286f3SDominic Spill dissect_not_accepted(lmp_tree, tvb, offset, len); 1929*4cc286f3SDominic Spill break; 1930*4cc286f3SDominic Spill case LMP_CLKOFFSET_REQ: 1931*4cc286f3SDominic Spill dissect_clkoffset_req(lmp_tree, tvb, offset, len); 1932*4cc286f3SDominic Spill break; 1933*4cc286f3SDominic Spill case LMP_CLKOFFSET_RES: 1934*4cc286f3SDominic Spill dissect_clkoffset_res(lmp_tree, tvb, offset, len); 1935*4cc286f3SDominic Spill break; 1936*4cc286f3SDominic Spill case LMP_DETACH: 1937*4cc286f3SDominic Spill dissect_detach(lmp_tree, tvb, offset, len); 1938*4cc286f3SDominic Spill break; 1939*4cc286f3SDominic Spill case LMP_IN_RAND: 1940*4cc286f3SDominic Spill dissect_in_rand(lmp_tree, tvb, offset, len); 1941*4cc286f3SDominic Spill break; 1942*4cc286f3SDominic Spill case LMP_COMB_KEY: 1943*4cc286f3SDominic Spill dissect_comb_key(lmp_tree, tvb, offset, len); 1944*4cc286f3SDominic Spill break; 1945*4cc286f3SDominic Spill case LMP_UNIT_KEY: 1946*4cc286f3SDominic Spill dissect_unit_key(lmp_tree, tvb, offset, len); 1947*4cc286f3SDominic Spill break; 1948*4cc286f3SDominic Spill case LMP_AU_RAND: 1949*4cc286f3SDominic Spill dissect_au_rand(lmp_tree, tvb, offset, len); 1950*4cc286f3SDominic Spill break; 1951*4cc286f3SDominic Spill case LMP_SRES: 1952*4cc286f3SDominic Spill dissect_sres(lmp_tree, tvb, offset, len); 1953*4cc286f3SDominic Spill break; 1954*4cc286f3SDominic Spill case LMP_TEMP_RAND: 1955*4cc286f3SDominic Spill dissect_temp_rand(lmp_tree, tvb, offset, len); 1956*4cc286f3SDominic Spill break; 1957*4cc286f3SDominic Spill case LMP_TEMP_KEY: 1958*4cc286f3SDominic Spill dissect_temp_key(lmp_tree, tvb, offset, len); 1959*4cc286f3SDominic Spill break; 1960*4cc286f3SDominic Spill case LMP_ENCRYPTION_MODE_REQ: 1961*4cc286f3SDominic Spill dissect_encryption_mode_req(lmp_tree, tvb, offset, len); 1962*4cc286f3SDominic Spill break; 1963*4cc286f3SDominic Spill case LMP_ENCRYPTION_KEY_SIZE_REQ: 1964*4cc286f3SDominic Spill dissect_encryption_key_size_req(lmp_tree, tvb, offset, len); 1965*4cc286f3SDominic Spill break; 1966*4cc286f3SDominic Spill case LMP_START_ENCRYPTION_REQ: 1967*4cc286f3SDominic Spill dissect_start_encryption_req(lmp_tree, tvb, offset, len); 1968*4cc286f3SDominic Spill break; 1969*4cc286f3SDominic Spill case LMP_STOP_ENCRYPTION_REQ: 1970*4cc286f3SDominic Spill dissect_stop_encryption_req(lmp_tree, tvb, offset, len); 1971*4cc286f3SDominic Spill break; 1972*4cc286f3SDominic Spill case LMP_SWITCH_REQ: 1973*4cc286f3SDominic Spill dissect_switch_req(lmp_tree, tvb, offset, len); 1974*4cc286f3SDominic Spill break; 1975*4cc286f3SDominic Spill case LMP_HOLD: 1976*4cc286f3SDominic Spill dissect_hold(lmp_tree, tvb, offset, len); 1977*4cc286f3SDominic Spill break; 1978*4cc286f3SDominic Spill case LMP_HOLD_REQ: 1979*4cc286f3SDominic Spill dissect_hold_req(lmp_tree, tvb, offset, len); 1980*4cc286f3SDominic Spill break; 1981*4cc286f3SDominic Spill case LMP_SNIFF_REQ: 1982*4cc286f3SDominic Spill dissect_sniff_req(lmp_tree, tvb, offset, len); 1983*4cc286f3SDominic Spill break; 1984*4cc286f3SDominic Spill case LMP_UNSNIFF_REQ: 1985*4cc286f3SDominic Spill dissect_unsniff_req(lmp_tree, tvb, offset, len); 1986*4cc286f3SDominic Spill break; 1987*4cc286f3SDominic Spill case LMP_PARK_REQ: 1988*4cc286f3SDominic Spill dissect_park_req(lmp_tree, tvb, offset, len); 1989*4cc286f3SDominic Spill break; 1990*4cc286f3SDominic Spill case LMP_SET_BROADCAST_SCAN_WINDOW: 1991*4cc286f3SDominic Spill dissect_set_broadcast_scan_window(lmp_tree, tvb, offset, len); 1992*4cc286f3SDominic Spill break; 1993*4cc286f3SDominic Spill case LMP_MODIFY_BEACON: 1994*4cc286f3SDominic Spill dissect_modify_beacon(lmp_tree, tvb, offset, len); 1995*4cc286f3SDominic Spill break; 1996*4cc286f3SDominic Spill case LMP_UNPARK_BD_ADDR_REQ: 1997*4cc286f3SDominic Spill dissect_unpark_bd_addr_req(lmp_tree, tvb, offset, len); 1998*4cc286f3SDominic Spill break; 1999*4cc286f3SDominic Spill case LMP_UNPARK_PM_ADDR_REQ: 2000*4cc286f3SDominic Spill dissect_unpark_pm_addr_req(lmp_tree, tvb, offset, len); 2001*4cc286f3SDominic Spill break; 2002*4cc286f3SDominic Spill case LMP_INCR_POWER_REQ: 2003*4cc286f3SDominic Spill dissect_incr_power_req(lmp_tree, tvb, offset, len); 2004*4cc286f3SDominic Spill break; 2005*4cc286f3SDominic Spill case LMP_DECR_POWER_REQ: 2006*4cc286f3SDominic Spill dissect_decr_power_req(lmp_tree, tvb, offset, len); 2007*4cc286f3SDominic Spill break; 2008*4cc286f3SDominic Spill case LMP_MAX_POWER: 2009*4cc286f3SDominic Spill dissect_max_power(lmp_tree, tvb, offset, len); 2010*4cc286f3SDominic Spill break; 2011*4cc286f3SDominic Spill case LMP_MIN_POWER: 2012*4cc286f3SDominic Spill dissect_min_power(lmp_tree, tvb, offset, len); 2013*4cc286f3SDominic Spill break; 2014*4cc286f3SDominic Spill case LMP_AUTO_RATE: 2015*4cc286f3SDominic Spill dissect_auto_rate(lmp_tree, tvb, offset, len); 2016*4cc286f3SDominic Spill break; 2017*4cc286f3SDominic Spill case LMP_PREFERRED_RATE: 2018*4cc286f3SDominic Spill dissect_preferred_rate(lmp_tree, tvb, offset, len); 2019*4cc286f3SDominic Spill break; 2020*4cc286f3SDominic Spill case LMP_VERSION_REQ: 2021*4cc286f3SDominic Spill dissect_version_req(lmp_tree, tvb, offset, len); 2022*4cc286f3SDominic Spill break; 2023*4cc286f3SDominic Spill case LMP_VERSION_RES: 2024*4cc286f3SDominic Spill dissect_version_res(lmp_tree, tvb, offset, len); 2025*4cc286f3SDominic Spill break; 2026*4cc286f3SDominic Spill case LMP_FEATURES_REQ: 2027*4cc286f3SDominic Spill dissect_features_req(lmp_tree, tvb, offset, len); 2028*4cc286f3SDominic Spill break; 2029*4cc286f3SDominic Spill case LMP_FEATURES_RES: 2030*4cc286f3SDominic Spill dissect_features_res(lmp_tree, tvb, offset, len); 2031*4cc286f3SDominic Spill break; 2032*4cc286f3SDominic Spill case LMP_QUALITY_OF_SERVICE: 2033*4cc286f3SDominic Spill dissect_quality_of_service(lmp_tree, tvb, offset, len); 2034*4cc286f3SDominic Spill break; 2035*4cc286f3SDominic Spill case LMP_QUALITY_OF_SERVICE_REQ: 2036*4cc286f3SDominic Spill dissect_quality_of_service_req(lmp_tree, tvb, offset, len); 2037*4cc286f3SDominic Spill break; 2038*4cc286f3SDominic Spill case LMP_SCO_LINK_REQ: 2039*4cc286f3SDominic Spill dissect_sco_link_req(lmp_tree, tvb, offset, len); 2040*4cc286f3SDominic Spill break; 2041*4cc286f3SDominic Spill case LMP_REMOVE_SCO_LINK_REQ: 2042*4cc286f3SDominic Spill dissect_remove_sco_link_req(lmp_tree, tvb, offset, len); 2043*4cc286f3SDominic Spill break; 2044*4cc286f3SDominic Spill case LMP_MAX_SLOT: 2045*4cc286f3SDominic Spill dissect_max_slot(lmp_tree, tvb, offset, len); 2046*4cc286f3SDominic Spill break; 2047*4cc286f3SDominic Spill case LMP_MAX_SLOT_REQ: 2048*4cc286f3SDominic Spill dissect_max_slot_req(lmp_tree, tvb, offset, len); 2049*4cc286f3SDominic Spill break; 2050*4cc286f3SDominic Spill case LMP_TIMING_ACCURACY_REQ: 2051*4cc286f3SDominic Spill dissect_timing_accuracy_req(lmp_tree, tvb, offset, len); 2052*4cc286f3SDominic Spill break; 2053*4cc286f3SDominic Spill case LMP_TIMING_ACCURACY_RES: 2054*4cc286f3SDominic Spill dissect_timing_accuracy_res(lmp_tree, tvb, offset, len); 2055*4cc286f3SDominic Spill break; 2056*4cc286f3SDominic Spill case LMP_SETUP_COMPLETE: 2057*4cc286f3SDominic Spill dissect_setup_complete(lmp_tree, tvb, offset, len); 2058*4cc286f3SDominic Spill break; 2059*4cc286f3SDominic Spill case LMP_USE_SEMI_PERMANENT_KEY: 2060*4cc286f3SDominic Spill dissect_use_semi_permanent_key(lmp_tree, tvb, offset, len); 2061*4cc286f3SDominic Spill break; 2062*4cc286f3SDominic Spill case LMP_HOST_CONNECTION_REQ: 2063*4cc286f3SDominic Spill dissect_host_connection_req(lmp_tree, tvb, offset, len); 2064*4cc286f3SDominic Spill break; 2065*4cc286f3SDominic Spill case LMP_SLOT_OFFSET: 2066*4cc286f3SDominic Spill dissect_slot_offset(lmp_tree, tvb, offset, len); 2067*4cc286f3SDominic Spill break; 2068*4cc286f3SDominic Spill case LMP_PAGE_MODE_REQ: 2069*4cc286f3SDominic Spill dissect_page_mode_req(lmp_tree, tvb, offset, len); 2070*4cc286f3SDominic Spill break; 2071*4cc286f3SDominic Spill case LMP_PAGE_SCAN_MODE_REQ: 2072*4cc286f3SDominic Spill dissect_page_scan_mode_req(lmp_tree, tvb, offset, len); 2073*4cc286f3SDominic Spill break; 2074*4cc286f3SDominic Spill case LMP_SUPERVISION_TIMEOUT: 2075*4cc286f3SDominic Spill dissect_supervision_timeout(lmp_tree, tvb, offset, len); 2076*4cc286f3SDominic Spill break; 2077*4cc286f3SDominic Spill case LMP_TEST_ACTIVATE: 2078*4cc286f3SDominic Spill dissect_test_activate(lmp_tree, tvb, offset, len); 2079*4cc286f3SDominic Spill break; 2080*4cc286f3SDominic Spill case LMP_TEST_CONTROL: 2081*4cc286f3SDominic Spill dissect_test_control(lmp_tree, tvb, offset, len); 2082*4cc286f3SDominic Spill break; 2083*4cc286f3SDominic Spill case LMP_ENCRYPTION_KEY_SIZE_MASK_REQ: 2084*4cc286f3SDominic Spill dissect_encryption_key_size_mask_req(lmp_tree, tvb, offset, len); 2085*4cc286f3SDominic Spill break; 2086*4cc286f3SDominic Spill case LMP_ENCRYPTION_KEY_SIZE_MASK_RES: 2087*4cc286f3SDominic Spill dissect_encryption_key_size_mask_res(lmp_tree, tvb, offset, len); 2088*4cc286f3SDominic Spill break; 2089*4cc286f3SDominic Spill case LMP_SET_AFH: 2090*4cc286f3SDominic Spill dissect_set_afh(lmp_tree, tvb, offset, len); 2091*4cc286f3SDominic Spill break; 2092*4cc286f3SDominic Spill case LMP_ENCAPSULATED_HEADER: 2093*4cc286f3SDominic Spill dissect_encapsulated_header(lmp_tree, tvb, offset, len); 2094*4cc286f3SDominic Spill break; 2095*4cc286f3SDominic Spill case LMP_ENCAPSULATED_PAYLOAD: 2096*4cc286f3SDominic Spill dissect_encapsulated_payload(lmp_tree, tvb, offset, len); 2097*4cc286f3SDominic Spill break; 2098*4cc286f3SDominic Spill case LMP_SIMPLE_PAIRING_CONFIRM: 2099*4cc286f3SDominic Spill dissect_simple_pairing_confirm(lmp_tree, tvb, offset, len); 2100*4cc286f3SDominic Spill break; 2101*4cc286f3SDominic Spill case LMP_SIMPLE_PAIRING_NUMBER: 2102*4cc286f3SDominic Spill dissect_simple_pairing_number(lmp_tree, tvb, offset, len); 2103*4cc286f3SDominic Spill break; 2104*4cc286f3SDominic Spill case LMP_DHKEY_CHECK: 2105*4cc286f3SDominic Spill dissect_dhkey_check(lmp_tree, tvb, offset, len); 2106*4cc286f3SDominic Spill break; 2107*4cc286f3SDominic Spill case LMP_ESCAPE_1: 2108*4cc286f3SDominic Spill break; 2109*4cc286f3SDominic Spill case LMP_ESCAPE_2: 2110*4cc286f3SDominic Spill break; 2111*4cc286f3SDominic Spill case LMP_ESCAPE_3: 2112*4cc286f3SDominic Spill break; 2113*4cc286f3SDominic Spill case LMP_ESCAPE_4: 2114*4cc286f3SDominic Spill /* extended opcode */ 2115*4cc286f3SDominic Spill DISSECTOR_ASSERT(len >= 2); 2116*4cc286f3SDominic Spill proto_tree_add_item(lmp_tree, hf_lmp_eop, tvb, offset, 1, ENC_NA); 2117*4cc286f3SDominic Spill offset += 1; 2118*4cc286f3SDominic Spill 2119*4cc286f3SDominic Spill switch (eop) { 2120*4cc286f3SDominic Spill case LMP_ACCEPTED_EXT: 2121*4cc286f3SDominic Spill dissect_accepted_ext(lmp_tree, tvb, offset, len); 2122*4cc286f3SDominic Spill break; 2123*4cc286f3SDominic Spill case LMP_NOT_ACCEPTED_EXT: 2124*4cc286f3SDominic Spill dissect_not_accepted_ext(lmp_tree, tvb, offset, len); 2125*4cc286f3SDominic Spill break; 2126*4cc286f3SDominic Spill case LMP_FEATURES_REQ_EXT: 2127*4cc286f3SDominic Spill dissect_features_req_ext(lmp_tree, tvb, offset, len); 2128*4cc286f3SDominic Spill break; 2129*4cc286f3SDominic Spill case LMP_FEATURES_RES_EXT: 2130*4cc286f3SDominic Spill dissect_features_res_ext(lmp_tree, tvb, offset, len); 2131*4cc286f3SDominic Spill break; 2132*4cc286f3SDominic Spill case LMP_PACKET_TYPE_TABLE_REQ: 2133*4cc286f3SDominic Spill dissect_packet_type_table_req(lmp_tree, tvb, offset, len); 2134*4cc286f3SDominic Spill break; 2135*4cc286f3SDominic Spill case LMP_ESCO_LINK_REQ: 2136*4cc286f3SDominic Spill dissect_esco_link_req(lmp_tree, tvb, offset, len); 2137*4cc286f3SDominic Spill break; 2138*4cc286f3SDominic Spill case LMP_REMOVE_ESCO_LINK_REQ: 2139*4cc286f3SDominic Spill dissect_remove_esco_link_req(lmp_tree, tvb, offset, len); 2140*4cc286f3SDominic Spill break; 2141*4cc286f3SDominic Spill case LMP_CHANNEL_CLASSIFICATION_REQ: 2142*4cc286f3SDominic Spill dissect_channel_classification_req(lmp_tree, tvb, offset, len); 2143*4cc286f3SDominic Spill break; 2144*4cc286f3SDominic Spill case LMP_CHANNEL_CLASSIFICATION: 2145*4cc286f3SDominic Spill dissect_channel_classification(lmp_tree, tvb, offset, len); 2146*4cc286f3SDominic Spill break; 2147*4cc286f3SDominic Spill case LMP_SNIFF_SUBRATING_REQ: 2148*4cc286f3SDominic Spill dissect_sniff_subrating_req(lmp_tree, tvb, offset, len); 2149*4cc286f3SDominic Spill break; 2150*4cc286f3SDominic Spill case LMP_SNIFF_SUBRATING_RES: 2151*4cc286f3SDominic Spill dissect_sniff_subrating_res(lmp_tree, tvb, offset, len); 2152*4cc286f3SDominic Spill break; 2153*4cc286f3SDominic Spill case LMP_PAUSE_ENCRYPTION_REQ: 2154*4cc286f3SDominic Spill dissect_pause_encryption_req(lmp_tree, tvb, offset, len); 2155*4cc286f3SDominic Spill break; 2156*4cc286f3SDominic Spill case LMP_RESUME_ENCRYPTION_REQ: 2157*4cc286f3SDominic Spill dissect_resume_encryption_req(lmp_tree, tvb, offset, len); 2158*4cc286f3SDominic Spill break; 2159*4cc286f3SDominic Spill case LMP_IO_CAPABILITY_REQ: 2160*4cc286f3SDominic Spill dissect_io_capability_req(lmp_tree, tvb, offset, len); 2161*4cc286f3SDominic Spill break; 2162*4cc286f3SDominic Spill case LMP_IO_CAPABILITY_RES: 2163*4cc286f3SDominic Spill dissect_io_capability_res(lmp_tree, tvb, offset, len); 2164*4cc286f3SDominic Spill break; 2165*4cc286f3SDominic Spill case LMP_NUMERIC_COMPARISON_FAILED: 2166*4cc286f3SDominic Spill dissect_numeric_comparison_failed(lmp_tree, tvb, offset, len); 2167*4cc286f3SDominic Spill break; 2168*4cc286f3SDominic Spill case LMP_PASSKEY_FAILED: 2169*4cc286f3SDominic Spill dissect_passkey_failed(lmp_tree, tvb, offset, len); 2170*4cc286f3SDominic Spill break; 2171*4cc286f3SDominic Spill case LMP_OOB_FAILED: 2172*4cc286f3SDominic Spill dissect_oob_failed(lmp_tree, tvb, offset, len); 2173*4cc286f3SDominic Spill break; 2174*4cc286f3SDominic Spill case LMP_KEYPRESS_NOTIFICATION: 2175*4cc286f3SDominic Spill dissect_keypress_notification(lmp_tree, tvb, offset, len); 2176*4cc286f3SDominic Spill break; 2177*4cc286f3SDominic Spill case LMP_POWER_CONTROL_REQ: 2178*4cc286f3SDominic Spill dissect_power_control_req(lmp_tree, tvb, offset, len); 2179*4cc286f3SDominic Spill break; 2180*4cc286f3SDominic Spill case LMP_POWER_CONTROL_RES: 2181*4cc286f3SDominic Spill dissect_power_control_res(lmp_tree, tvb, offset, len); 2182*4cc286f3SDominic Spill break; 2183*4cc286f3SDominic Spill default: 2184*4cc286f3SDominic Spill break; 2185*4cc286f3SDominic Spill } 2186*4cc286f3SDominic Spill default: 2187*4cc286f3SDominic Spill break; 2188*4cc286f3SDominic Spill } 2189*4cc286f3SDominic Spill }; 2190*4cc286f3SDominic Spill 2191*4cc286f3SDominic Spill /* register the protocol with Wireshark */ 2192*4cc286f3SDominic Spill void 2193*4cc286f3SDominic Spill proto_register_btbrlmp(void) 2194*4cc286f3SDominic Spill { 2195*4cc286f3SDominic Spill 2196*4cc286f3SDominic Spill /* list of fields */ 2197*4cc286f3SDominic Spill static hf_register_info hf[] = { 2198*4cc286f3SDominic Spill { &hf_lmp_accscheme, 2199*4cc286f3SDominic Spill { "Access Scheme", "btbrlmp.accscheme", 2200*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(access_scheme), 0xf0, 2201*4cc286f3SDominic Spill NULL, HFILL } 2202*4cc286f3SDominic Spill }, 2203*4cc286f3SDominic Spill { &hf_lmp_afhchmap, 2204*4cc286f3SDominic Spill { "AFH Channel Map", "btbrlmp.afhchmap", 2205*4cc286f3SDominic Spill /* could break out individual channels but long */ 2206*4cc286f3SDominic Spill FT_BYTES, BASE_NONE, NULL, 0x0, 2207*4cc286f3SDominic Spill "Adaptive Frequency Hopping Channel Map", HFILL } 2208*4cc286f3SDominic Spill }, 2209*4cc286f3SDominic Spill { &hf_lmp_afhclass, 2210*4cc286f3SDominic Spill { "AFH Channel Classification", "btbrlmp.afhclass", 2211*4cc286f3SDominic Spill /* could break out individual channels but long */ 2212*4cc286f3SDominic Spill FT_BYTES, BASE_NONE, NULL, 0x0, 2213*4cc286f3SDominic Spill "Adaptive Frequency Hopping Channel Classification", HFILL } 2214*4cc286f3SDominic Spill }, 2215*4cc286f3SDominic Spill { &hf_lmp_afhinst, 2216*4cc286f3SDominic Spill { "AFH Instant", "btbrlmp.afhinst", 2217*4cc286f3SDominic Spill FT_UINT32, BASE_HEX, NULL, 0x0, 2218*4cc286f3SDominic Spill "Adaptive Frequency Hopping Instant (slot)", HFILL } 2219*4cc286f3SDominic Spill }, 2220*4cc286f3SDominic Spill { &hf_lmp_afhmaxintvl, 2221*4cc286f3SDominic Spill { "AFH Max Interval", "btbrlmp.maxintvl", 2222*4cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0, 2223*4cc286f3SDominic Spill "Adaptive Maximum Interval in slots", HFILL } 2224*4cc286f3SDominic Spill }, 2225*4cc286f3SDominic Spill { &hf_lmp_afhminintvl, 2226*4cc286f3SDominic Spill { "AFH Min Interval", "btbrlmp.minintvl", 2227*4cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0, 2228*4cc286f3SDominic Spill "Adaptive Minimum Interval in slots", HFILL } 2229*4cc286f3SDominic Spill }, 2230*4cc286f3SDominic Spill { &hf_lmp_afhmode, 2231*4cc286f3SDominic Spill { "AFH Mode", "btbrlmp.afhmode", 2232*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(afh_mode), 0x0, 2233*4cc286f3SDominic Spill "Adaptive Frequency Hopping Mode", HFILL } 2234*4cc286f3SDominic Spill }, 2235*4cc286f3SDominic Spill { &hf_lmp_afhrptmode, 2236*4cc286f3SDominic Spill { "AFH Reporting Mode", "btbrlmp.afhrptmode", 2237*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(afh_reporting_mode), 0x0, 2238*4cc286f3SDominic Spill "Adaptive Frequency Hopping Reporting Mode", HFILL } 2239*4cc286f3SDominic Spill }, 2240*4cc286f3SDominic Spill { &hf_lmp_airmode, 2241*4cc286f3SDominic Spill { "Air Mode", "btbrlmp.airmode", 2242*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, VALS(air_mode), 0x0, 2243*4cc286f3SDominic Spill NULL, HFILL } 2244*4cc286f3SDominic Spill }, 2245*4cc286f3SDominic Spill { &hf_lmp_araddr, 2246*4cc286f3SDominic Spill { "AR_ADDR", "btbrlmp.araddr", 2247*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0xfe, 2248*4cc286f3SDominic Spill NULL, HFILL } 2249*4cc286f3SDominic Spill }, 2250*4cc286f3SDominic Spill { &hf_lmp_authreqs, 2251*4cc286f3SDominic Spill { "Authentication Requirements", "btbrlmp.authreqs", 2252*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, VALS(auth_requirements), 0xf0, 2253*4cc286f3SDominic Spill NULL, HFILL } 2254*4cc286f3SDominic Spill }, 2255*4cc286f3SDominic Spill { &hf_lmp_authres, 2256*4cc286f3SDominic Spill { "Authentication Response", "btbrlmp.authres", 2257*4cc286f3SDominic Spill FT_BYTES, BASE_NONE, NULL, 0x0, 2258*4cc286f3SDominic Spill NULL, HFILL } 2259*4cc286f3SDominic Spill }, 2260*4cc286f3SDominic Spill { &hf_lmp_bdaddr, 2261*4cc286f3SDominic Spill { "BD_ADDR", "btbrlmp.bdaddr", 2262*4cc286f3SDominic Spill FT_UINT64, BASE_HEX, NULL, 0x0000ffffffffffff, 2263*4cc286f3SDominic Spill NULL, HFILL } 2264*4cc286f3SDominic Spill }, 2265*4cc286f3SDominic Spill { &hf_lmp_bdaddr1, 2266*4cc286f3SDominic Spill { "BD_ADDR 1", "btbrlmp.bdaddr", 2267*4cc286f3SDominic Spill FT_UINT64, BASE_HEX, NULL, 0x0000ffffffffffff, 2268*4cc286f3SDominic Spill NULL, HFILL } 2269*4cc286f3SDominic Spill }, 2270*4cc286f3SDominic Spill { &hf_lmp_bdaddr2, 2271*4cc286f3SDominic Spill { "BD_ADDR2", "btbrlmp.bdaddr", 2272*4cc286f3SDominic Spill FT_UINT64, BASE_HEX, NULL, 0x0000ffffffffffff, 2273*4cc286f3SDominic Spill "BD_ADDR 2", HFILL } 2274*4cc286f3SDominic Spill }, 2275*4cc286f3SDominic Spill { &hf_lmp_bsw, 2276*4cc286f3SDominic Spill { "Broadcast Scan Window", "btbrlmp.bsw", 2277*4cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0, 2278*4cc286f3SDominic Spill "Broadcast Scan Window in slots", HFILL } 2279*4cc286f3SDominic Spill }, 2280*4cc286f3SDominic Spill { &hf_lmp_clkoffset, 2281*4cc286f3SDominic Spill { "Clock Offset", "btbrlmp.clkoffset", 2282*4cc286f3SDominic Spill FT_UINT16, BASE_DEC, NULL, 0x0, 2283*4cc286f3SDominic Spill "Clock Offset in units of 1.25 ms", HFILL } 2284*4cc286f3SDominic Spill }, 2285*4cc286f3SDominic Spill { &hf_lmp_commit, 2286*4cc286f3SDominic Spill { "Commitment Value", "btbrlmp.commit", 2287*4cc286f3SDominic Spill FT_BYTES, BASE_NONE, NULL, 0x0, 2288*4cc286f3SDominic Spill NULL, HFILL } 2289*4cc286f3SDominic Spill }, 2290*4cc286f3SDominic Spill { &hf_lmp_confirm, 2291*4cc286f3SDominic Spill { "Confirmation Value", "btbrlmp.confirm", 2292*4cc286f3SDominic Spill FT_BYTES, BASE_NONE, NULL, 0x0, 2293*4cc286f3SDominic Spill NULL, HFILL } 2294*4cc286f3SDominic Spill }, 2295*4cc286f3SDominic Spill { &hf_lmp_compid, 2296*4cc286f3SDominic Spill { "Company ID", "btbrlmp.compid", 2297*4cc286f3SDominic Spill FT_UINT16, BASE_DEC, VALS(compid), 0x0, 2298*4cc286f3SDominic Spill NULL, HFILL } 2299*4cc286f3SDominic Spill }, 2300*4cc286f3SDominic Spill { &hf_lmp_cryptmode, 2301*4cc286f3SDominic Spill { "Encryption Mode", "btbrlmp.cryptmode", 2302*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(encryption_mode), 0x0, 2303*4cc286f3SDominic Spill NULL, HFILL } 2304*4cc286f3SDominic Spill }, 2305*4cc286f3SDominic Spill { &hf_lmp_daccess, 2306*4cc286f3SDominic Spill { "Daccess", "btbrlmp.daccess", 2307*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2308*4cc286f3SDominic Spill "Daccess in slots", HFILL } 2309*4cc286f3SDominic Spill }, 2310*4cc286f3SDominic Spill { &hf_lmp_db, 2311*4cc286f3SDominic Spill { "Db", "btbrlmp.db", 2312*4cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0, 2313*4cc286f3SDominic Spill "Db in slots", HFILL } 2314*4cc286f3SDominic Spill }, 2315*4cc286f3SDominic Spill { &hf_lmp_dbsleep, 2316*4cc286f3SDominic Spill { "Dbsleep", "btbrlmp.dbsleep", 2317*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2318*4cc286f3SDominic Spill NULL, HFILL } 2319*4cc286f3SDominic Spill }, 2320*4cc286f3SDominic Spill { &hf_lmp_deltab, 2321*4cc286f3SDominic Spill { "Deltab", "btbrlmp.deltab", 2322*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2323*4cc286f3SDominic Spill "Deltab in slots", HFILL } 2324*4cc286f3SDominic Spill }, 2325*4cc286f3SDominic Spill { &hf_lmp_desco, 2326*4cc286f3SDominic Spill { "Desco", "btbrlmp.desco", 2327*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2328*4cc286f3SDominic Spill "Desco in slots", HFILL } 2329*4cc286f3SDominic Spill }, 2330*4cc286f3SDominic Spill { &hf_lmp_drift, 2331*4cc286f3SDominic Spill { "Drift", "btbrlmp.drift", 2332*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, NULL, 0x0, 2333*4cc286f3SDominic Spill "Drift in ppm", HFILL } 2334*4cc286f3SDominic Spill }, 2335*4cc286f3SDominic Spill { &hf_lmp_dsco, 2336*4cc286f3SDominic Spill { "Dsco", "btbrlmp.dsco", 2337*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2338*4cc286f3SDominic Spill "Dsco in slots", HFILL } 2339*4cc286f3SDominic Spill }, 2340*4cc286f3SDominic Spill { &hf_lmp_dsniff, 2341*4cc286f3SDominic Spill { "Dsniff", "btbrlmp.dsniff", 2342*4cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0, 2343*4cc286f3SDominic Spill "Dsniff in slots", HFILL } 2344*4cc286f3SDominic Spill }, 2345*4cc286f3SDominic Spill { &hf_lmp_encdata, 2346*4cc286f3SDominic Spill { "Encapsulated Data", "btbrlmp.encdata", 2347*4cc286f3SDominic Spill FT_BYTES, BASE_NONE, NULL, 0x0, 2348*4cc286f3SDominic Spill NULL, HFILL } 2349*4cc286f3SDominic Spill }, 2350*4cc286f3SDominic Spill { &hf_lmp_enclen, 2351*4cc286f3SDominic Spill { "Encapsulated Length", "btbrlmp.enclen", 2352*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, NULL, 0x0, 2353*4cc286f3SDominic Spill NULL, HFILL } 2354*4cc286f3SDominic Spill }, 2355*4cc286f3SDominic Spill { &hf_lmp_encmaj, 2356*4cc286f3SDominic Spill { "Encapsulated Major Type", "btbrlmp.encmaj", 2357*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, NULL, 0x0, 2358*4cc286f3SDominic Spill NULL, HFILL } 2359*4cc286f3SDominic Spill }, 2360*4cc286f3SDominic Spill { &hf_lmp_encmin, 2361*4cc286f3SDominic Spill { "Encapsulated Minor Type", "btbrlmp.encmin", 2362*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, NULL, 0x0, 2363*4cc286f3SDominic Spill NULL, HFILL } 2364*4cc286f3SDominic Spill }, 2365*4cc286f3SDominic Spill { &hf_lmp_eop, 2366*4cc286f3SDominic Spill { "Extended Opcode", "btbrlmp.eop", 2367*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(ext_opcode), 0x0, 2368*4cc286f3SDominic Spill NULL, HFILL } 2369*4cc286f3SDominic Spill }, 2370*4cc286f3SDominic Spill { &hf_lmp_eopinre, 2371*4cc286f3SDominic Spill { "In Response To", "btbrlmp.eopinre", 2372*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(ext_opcode), 0x0, 2373*4cc286f3SDominic Spill "Extended Opcode this is in response to", HFILL } 2374*4cc286f3SDominic Spill }, 2375*4cc286f3SDominic Spill { &hf_lmp_escolenms, 2376*4cc286f3SDominic Spill { "Packet Length M -> S", "btbrlmp.escolenms", 2377*4cc286f3SDominic Spill FT_UINT16, BASE_DEC, NULL, 0x0, 2378*4cc286f3SDominic Spill "Packet Length in bytes Master to Slave", HFILL } 2379*4cc286f3SDominic Spill }, 2380*4cc286f3SDominic Spill { &hf_lmp_escolensm, 2381*4cc286f3SDominic Spill { "Packet Length S -> M", "btbrlmp.escolensm", 2382*4cc286f3SDominic Spill FT_UINT16, BASE_DEC, NULL, 0x0, 2383*4cc286f3SDominic Spill "Packet Length in bytes Slave to Master", HFILL } 2384*4cc286f3SDominic Spill }, 2385*4cc286f3SDominic Spill { &hf_lmp_escotypems, 2386*4cc286f3SDominic Spill { "eSCO Packet Type M -> S", "btbrlmp.escotypems", 2387*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, VALS(esco_packet_type), 0x0, 2388*4cc286f3SDominic Spill "eSCO Packet Type Master to Slave", HFILL } 2389*4cc286f3SDominic Spill }, 2390*4cc286f3SDominic Spill { &hf_lmp_escotypesm, 2391*4cc286f3SDominic Spill { "eSCO Packet Type S -> M", "btbrlmp.escotypesm", 2392*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, VALS(esco_packet_type), 0x0, 2393*4cc286f3SDominic Spill "eSCO Packet Type Slave to Master", HFILL } 2394*4cc286f3SDominic Spill }, 2395*4cc286f3SDominic Spill { &hf_lmp_err, 2396*4cc286f3SDominic Spill { "Error Code", "btbrlmp.err", 2397*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, VALS(error_code), 0x0, 2398*4cc286f3SDominic Spill NULL, HFILL } 2399*4cc286f3SDominic Spill }, 2400*4cc286f3SDominic Spill { &hf_lmp_escohdl, 2401*4cc286f3SDominic Spill { "eSCO Handle", "btbrlmp.escohdl", 2402*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2403*4cc286f3SDominic Spill NULL, HFILL } 2404*4cc286f3SDominic Spill }, 2405*4cc286f3SDominic Spill { &hf_lmp_escoltaddr, 2406*4cc286f3SDominic Spill { "eSCO LT_ADDR", "btbrlmp.escoltaddr", 2407*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2408*4cc286f3SDominic Spill "eSCO Logical Transport Address", HFILL } 2409*4cc286f3SDominic Spill }, 2410*4cc286f3SDominic Spill { &hf_lmp_features, 2411*4cc286f3SDominic Spill { "Features", "btbrlmp.features", 2412*4cc286f3SDominic Spill /* could break out individual features but long */ 2413*4cc286f3SDominic Spill FT_BYTES, BASE_NONE, NULL, 0x0, 2414*4cc286f3SDominic Spill "Feature Mask", HFILL } 2415*4cc286f3SDominic Spill }, 2416*4cc286f3SDominic Spill { &hf_lmp_fpage, 2417*4cc286f3SDominic Spill { "Features Page", "btbrlmp.fpage", 2418*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(features_page), 0x0, 2419*4cc286f3SDominic Spill NULL, HFILL } 2420*4cc286f3SDominic Spill }, 2421*4cc286f3SDominic Spill { &hf_lmp_htime, 2422*4cc286f3SDominic Spill { "Hold Time", "btbrlmp.htime", 2423*4cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0, 2424*4cc286f3SDominic Spill "Hold Time in slots", HFILL } 2425*4cc286f3SDominic Spill }, 2426*4cc286f3SDominic Spill { &hf_lmp_hinst, 2427*4cc286f3SDominic Spill { "Hold Instant", "btbrlmp.hinst", 2428*4cc286f3SDominic Spill FT_UINT32, BASE_HEX, NULL, 0x0, 2429*4cc286f3SDominic Spill "Hold Instant (slot)", HFILL } 2430*4cc286f3SDominic Spill }, 2431*4cc286f3SDominic Spill { &hf_lmp_hopmode, 2432*4cc286f3SDominic Spill { "Hopping Mode", "btbrlmp.hopmode", 2433*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(hopping_mode), 0x0, 2434*4cc286f3SDominic Spill NULL, HFILL } 2435*4cc286f3SDominic Spill }, 2436*4cc286f3SDominic Spill { &hf_lmp_iocaps, 2437*4cc286f3SDominic Spill { "IO Capabilities", "btbrlmp.iocaps", 2438*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(io_capabilities), 0x0, 2439*4cc286f3SDominic Spill "Input/Output Capabilities", HFILL } 2440*4cc286f3SDominic Spill }, 2441*4cc286f3SDominic Spill { &hf_lmp_jitter, 2442*4cc286f3SDominic Spill { "Jitter", "btbrlmp.jitter", 2443*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, NULL, 0x0, 2444*4cc286f3SDominic Spill "Jitter in microseconds", HFILL } 2445*4cc286f3SDominic Spill }, 2446*4cc286f3SDominic Spill { &hf_lmp_key, 2447*4cc286f3SDominic Spill { "Key", "btbrlmp.key", 2448*4cc286f3SDominic Spill FT_BYTES, BASE_NONE, NULL, 0x0, 2449*4cc286f3SDominic Spill NULL, HFILL } 2450*4cc286f3SDominic Spill }, 2451*4cc286f3SDominic Spill { &hf_lmp_keysz, 2452*4cc286f3SDominic Spill { "Key Size", "btbrlmp.keysz", 2453*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, NULL, 0x0, 2454*4cc286f3SDominic Spill "Key Size in bytes", HFILL } 2455*4cc286f3SDominic Spill }, 2456*4cc286f3SDominic Spill { &hf_lmp_ksmask, 2457*4cc286f3SDominic Spill { "Key Size Mask", "btbrlmp.ksmask", 2458*4cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0, 2459*4cc286f3SDominic Spill NULL, HFILL } 2460*4cc286f3SDominic Spill }, 2461*4cc286f3SDominic Spill { &hf_lmp_ltaddr1, 2462*4cc286f3SDominic Spill { "LT_ADDR 1", "btbrlmp.ltaddr", 2463*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0f, 2464*4cc286f3SDominic Spill "Logical Transport Address 1", HFILL } 2465*4cc286f3SDominic Spill }, 2466*4cc286f3SDominic Spill { &hf_lmp_ltaddr2, 2467*4cc286f3SDominic Spill { "LT_ADDR 2", "btbrlmp.ltaddr", 2468*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0xf0, 2469*4cc286f3SDominic Spill "Logical Transport Address 2", HFILL } 2470*4cc286f3SDominic Spill }, 2471*4cc286f3SDominic Spill { &hf_lmp_ltaddr3, 2472*4cc286f3SDominic Spill { "LT_ADDR 3", "btbrlmp.ltaddr", 2473*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0f, 2474*4cc286f3SDominic Spill "Logical Transport Address 3", HFILL } 2475*4cc286f3SDominic Spill }, 2476*4cc286f3SDominic Spill { &hf_lmp_ltaddr4, 2477*4cc286f3SDominic Spill { "LT_ADDR 4", "btbrlmp.ltaddr", 2478*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0xf0, 2479*4cc286f3SDominic Spill "Logical Transport Address 4", HFILL } 2480*4cc286f3SDominic Spill }, 2481*4cc286f3SDominic Spill { &hf_lmp_ltaddr5, 2482*4cc286f3SDominic Spill { "LT_ADDR 5", "btbrlmp.ltaddr", 2483*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0f, 2484*4cc286f3SDominic Spill "Logical Transport Address 5", HFILL } 2485*4cc286f3SDominic Spill }, 2486*4cc286f3SDominic Spill { &hf_lmp_ltaddr6, 2487*4cc286f3SDominic Spill { "LT_ADDR 6", "btbrlmp.ltaddr", 2488*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0xf0, 2489*4cc286f3SDominic Spill "Logical Transport Address 6", HFILL } 2490*4cc286f3SDominic Spill }, 2491*4cc286f3SDominic Spill { &hf_lmp_ltaddr7, 2492*4cc286f3SDominic Spill { "LT_ADDR 7", "btbrlmp.ltaddr", 2493*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0f, 2494*4cc286f3SDominic Spill "Logical Transport Address 7", HFILL } 2495*4cc286f3SDominic Spill }, 2496*4cc286f3SDominic Spill { &hf_lmp_maccess, 2497*4cc286f3SDominic Spill { "Maccess", "btbrlmp.maccess", 2498*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0f, 2499*4cc286f3SDominic Spill "Number of access windows", HFILL } 2500*4cc286f3SDominic Spill }, 2501*4cc286f3SDominic Spill { &hf_lmp_maxslots, 2502*4cc286f3SDominic Spill { "Max Slots", "btbrlmp.maxslots", 2503*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2504*4cc286f3SDominic Spill NULL, HFILL } 2505*4cc286f3SDominic Spill }, 2506*4cc286f3SDominic Spill { &hf_lmp_maxsp, 2507*4cc286f3SDominic Spill { "Max Supported Page", "btbrlmp.maxsp", 2508*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, NULL, 0x0, 2509*4cc286f3SDominic Spill "Highest extended features page with non-zero bit", HFILL } 2510*4cc286f3SDominic Spill }, 2511*4cc286f3SDominic Spill { &hf_lmp_maxss, 2512*4cc286f3SDominic Spill { "Max Sniff Subrate", "btbrlmp.maxss", 2513*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, NULL, 0x0, 2514*4cc286f3SDominic Spill NULL, HFILL } 2515*4cc286f3SDominic Spill }, 2516*4cc286f3SDominic Spill { &hf_lmp_minsmt, 2517*4cc286f3SDominic Spill { "Min Sniff Mode Timeout", "btbrlmp.minsmt", 2518*4cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0, 2519*4cc286f3SDominic Spill "Min Sniff Mode Timeout in slots", HFILL } 2520*4cc286f3SDominic Spill }, 2521*4cc286f3SDominic Spill { &hf_lmp_naccslots, 2522*4cc286f3SDominic Spill { "Nacc-slots", "btbrlmp.naccslots", 2523*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2524*4cc286f3SDominic Spill NULL, HFILL } 2525*4cc286f3SDominic Spill }, 2526*4cc286f3SDominic Spill { &hf_lmp_namefrag, 2527*4cc286f3SDominic Spill { "Name Fragment", "btbrlmp.namefrag", 2528*4cc286f3SDominic Spill FT_STRING, BASE_NONE, NULL, 0x0, 2529*4cc286f3SDominic Spill NULL, HFILL } 2530*4cc286f3SDominic Spill }, 2531*4cc286f3SDominic Spill { &hf_lmp_namelen, 2532*4cc286f3SDominic Spill { "Name Length", "btbrlmp.namelen", 2533*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, NULL, 0x0, 2534*4cc286f3SDominic Spill "Name Length in bytes", HFILL } 2535*4cc286f3SDominic Spill }, 2536*4cc286f3SDominic Spill { &hf_lmp_nameoffset, 2537*4cc286f3SDominic Spill { "Name Offset", "btbrlmp.nameoffset", 2538*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, NULL, 0x0, 2539*4cc286f3SDominic Spill "Name Offset in bytes", HFILL } 2540*4cc286f3SDominic Spill }, 2541*4cc286f3SDominic Spill { &hf_lmp_nb, 2542*4cc286f3SDominic Spill { "Nb", "btbrlmp.nb", 2543*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2544*4cc286f3SDominic Spill NULL, HFILL } 2545*4cc286f3SDominic Spill }, 2546*4cc286f3SDominic Spill { &hf_lmp_nbc, 2547*4cc286f3SDominic Spill { "Nbc", "btbrlmp.nbc", 2548*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2549*4cc286f3SDominic Spill NULL, HFILL } 2550*4cc286f3SDominic Spill }, 2551*4cc286f3SDominic Spill { &hf_lmp_nbsleep, 2552*4cc286f3SDominic Spill { "Nbsleep", "btbrlmp.nbsleep", 2553*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2554*4cc286f3SDominic Spill NULL, HFILL } 2555*4cc286f3SDominic Spill }, 2556*4cc286f3SDominic Spill { &hf_lmp_negstate, 2557*4cc286f3SDominic Spill { "Negotiation State", "btbrlmp.negstate", 2558*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(negotiation_state), 0x0, 2559*4cc286f3SDominic Spill NULL, HFILL } 2560*4cc286f3SDominic Spill }, 2561*4cc286f3SDominic Spill { &hf_lmp_nonce, 2562*4cc286f3SDominic Spill { "Nonce Value", "btbrlmp.nonce", 2563*4cc286f3SDominic Spill FT_BYTES, BASE_NONE, NULL, 0x0, 2564*4cc286f3SDominic Spill NULL, HFILL } 2565*4cc286f3SDominic Spill }, 2566*4cc286f3SDominic Spill { &hf_lmp_nottype, 2567*4cc286f3SDominic Spill { "Notification Type", "btbrlmp.nottype", 2568*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(notification_value), 0x0, 2569*4cc286f3SDominic Spill NULL, HFILL } 2570*4cc286f3SDominic Spill }, 2571*4cc286f3SDominic Spill { &hf_lmp_npoll, 2572*4cc286f3SDominic Spill { "Npoll", "btbrlmp.npoll", 2573*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2574*4cc286f3SDominic Spill NULL, HFILL } 2575*4cc286f3SDominic Spill }, 2576*4cc286f3SDominic Spill { &hf_lmp_oobauthdata, 2577*4cc286f3SDominic Spill { "OOB Authentication Data", "btbrlmp.oobauthdata", 2578*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(oob_auth_data), 0xfe, 2579*4cc286f3SDominic Spill NULL, HFILL } 2580*4cc286f3SDominic Spill }, 2581*4cc286f3SDominic Spill { &hf_lmp_op, 2582*4cc286f3SDominic Spill { "Opcode", "btbrlmp.op", 2583*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(opcode), 0xfe, 2584*4cc286f3SDominic Spill NULL, HFILL } 2585*4cc286f3SDominic Spill }, 2586*4cc286f3SDominic Spill { &hf_lmp_opinre, 2587*4cc286f3SDominic Spill { "In Response To", "btbrlmp.opinre", 2588*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(opcode), 0x7f, 2589*4cc286f3SDominic Spill "Opcode this is in response to", HFILL } 2590*4cc286f3SDominic Spill }, 2591*4cc286f3SDominic Spill { &hf_lmp_pagesch, 2592*4cc286f3SDominic Spill { "Paging Scheme", "btbrlmp.pagesch", 2593*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(paging_scheme), 0x0, 2594*4cc286f3SDominic Spill NULL, HFILL } 2595*4cc286f3SDominic Spill }, 2596*4cc286f3SDominic Spill { &hf_lmp_pcmode, 2597*4cc286f3SDominic Spill { "Power Control Mode", "btbrlmp.pcmode", 2598*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(power_control_mode), 0x0, 2599*4cc286f3SDominic Spill NULL, HFILL } 2600*4cc286f3SDominic Spill }, 2601*4cc286f3SDominic Spill { &hf_lmp_pkttype, 2602*4cc286f3SDominic Spill { "Packet Type", "btbrlmp.pkttype", 2603*4cc286f3SDominic Spill /* FIXME break out further */ 2604*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2605*4cc286f3SDominic Spill "Packet Type", HFILL } 2606*4cc286f3SDominic Spill }, 2607*4cc286f3SDominic Spill { &hf_lmp_pkttypetbl, 2608*4cc286f3SDominic Spill { "Packet Type Table", "btbrlmp.pkttypetbl", 2609*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(packet_type_table), 0x0, 2610*4cc286f3SDominic Spill NULL, HFILL } 2611*4cc286f3SDominic Spill }, 2612*4cc286f3SDominic Spill { &hf_lmp_pmaddr, 2613*4cc286f3SDominic Spill { "PM_ADDR", "btbrlmp.pmaddr", 2614*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2615*4cc286f3SDominic Spill NULL, HFILL } 2616*4cc286f3SDominic Spill }, 2617*4cc286f3SDominic Spill { &hf_lmp_pmaddr1, 2618*4cc286f3SDominic Spill { "PM_ADDR 1", "btbrlmp.pmaddr1", 2619*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2620*4cc286f3SDominic Spill NULL, HFILL } 2621*4cc286f3SDominic Spill }, 2622*4cc286f3SDominic Spill { &hf_lmp_pmaddr2, 2623*4cc286f3SDominic Spill { "PM_ADDR 2", "btbrlmp.pmaddr2", 2624*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2625*4cc286f3SDominic Spill NULL, HFILL } 2626*4cc286f3SDominic Spill }, 2627*4cc286f3SDominic Spill { &hf_lmp_pmaddr3, 2628*4cc286f3SDominic Spill { "PM_ADDR 3", "btbrlmp.pmaddr3", 2629*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2630*4cc286f3SDominic Spill NULL, HFILL } 2631*4cc286f3SDominic Spill }, 2632*4cc286f3SDominic Spill { &hf_lmp_pmaddr4, 2633*4cc286f3SDominic Spill { "PM_ADDR 4", "btbrlmp.pmaddr4", 2634*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2635*4cc286f3SDominic Spill NULL, HFILL } 2636*4cc286f3SDominic Spill }, 2637*4cc286f3SDominic Spill { &hf_lmp_pmaddr5, 2638*4cc286f3SDominic Spill { "PM_ADDR 5", "btbrlmp.pmaddr5", 2639*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2640*4cc286f3SDominic Spill NULL, HFILL } 2641*4cc286f3SDominic Spill }, 2642*4cc286f3SDominic Spill { &hf_lmp_pmaddr6, 2643*4cc286f3SDominic Spill { "PM_ADDR 6", "btbrlmp.pmaddr6", 2644*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2645*4cc286f3SDominic Spill NULL, HFILL } 2646*4cc286f3SDominic Spill }, 2647*4cc286f3SDominic Spill { &hf_lmp_pmaddr7, 2648*4cc286f3SDominic Spill { "PM_ADDR 7", "btbrlmp.pmaddr7", 2649*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2650*4cc286f3SDominic Spill NULL, HFILL } 2651*4cc286f3SDominic Spill }, 2652*4cc286f3SDominic Spill { &hf_lmp_pollintvl, 2653*4cc286f3SDominic Spill { "Poll Interval", "btbrlmp.pollintvl", 2654*4cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0, 2655*4cc286f3SDominic Spill "Poll Interval in slots", HFILL } 2656*4cc286f3SDominic Spill }, 2657*4cc286f3SDominic Spill { &hf_lmp_pollper, 2658*4cc286f3SDominic Spill { "Poll Period", "btbrlmp.pollper", 2659*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, NULL, 0x0, 2660*4cc286f3SDominic Spill "Poll Period in units of 1.25 ms", HFILL } 2661*4cc286f3SDominic Spill }, 2662*4cc286f3SDominic Spill { &hf_lmp_pssettings, 2663*4cc286f3SDominic Spill { "Paging Scheme Settings", "btbrlmp.pssettings", 2664*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(paging_scheme_settings), 0x0, 2665*4cc286f3SDominic Spill NULL, HFILL } 2666*4cc286f3SDominic Spill }, 2667*4cc286f3SDominic Spill { &hf_lmp_pwradjreq, 2668*4cc286f3SDominic Spill { "Power Adjustment Request", "btbrlmp.pwradjreq", 2669*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(power_adjust_req), 0x0, 2670*4cc286f3SDominic Spill NULL, HFILL } 2671*4cc286f3SDominic Spill }, 2672*4cc286f3SDominic Spill { &hf_lmp_pwradjres, 2673*4cc286f3SDominic Spill { "Power Adjustment Response", "btbrlmp.pwradjres", 2674*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2675*4cc286f3SDominic Spill NULL, HFILL } 2676*4cc286f3SDominic Spill }, 2677*4cc286f3SDominic Spill { &hf_lmp_pwradj_8dpsk, 2678*4cc286f3SDominic Spill { "8DPSK", "btbrlmp.pwradj_8dpsk", 2679*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(power_adjust_res), 0x30, 2680*4cc286f3SDominic Spill "8DPSK Power Adjustment Response", HFILL } 2681*4cc286f3SDominic Spill }, 2682*4cc286f3SDominic Spill { &hf_lmp_pwradj_dqpsk, 2683*4cc286f3SDominic Spill { "DQPSK", "btbrlmp.pwradj_dqpsk", 2684*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(power_adjust_res), 0x0C, 2685*4cc286f3SDominic Spill "DQPSK Power Adjustment Response", HFILL } 2686*4cc286f3SDominic Spill }, 2687*4cc286f3SDominic Spill { &hf_lmp_pwradj_gfsk, 2688*4cc286f3SDominic Spill { "GFSK", "btbrlmp.pwradj_gfsk", 2689*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(power_adjust_res), 0x03, 2690*4cc286f3SDominic Spill "GFSK Power Adjustment Response", HFILL } 2691*4cc286f3SDominic Spill }, 2692*4cc286f3SDominic Spill { &hf_lmp_rand, 2693*4cc286f3SDominic Spill { "Random Number", "btbrlmp.rand", 2694*4cc286f3SDominic Spill FT_BYTES, BASE_NONE, NULL, 0x0, 2695*4cc286f3SDominic Spill NULL, HFILL } 2696*4cc286f3SDominic Spill }, 2697*4cc286f3SDominic Spill { &hf_lmp_rate, 2698*4cc286f3SDominic Spill { "Data Rate", "btbrlmp.rate", 2699*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2700*4cc286f3SDominic Spill NULL, HFILL } 2701*4cc286f3SDominic Spill }, 2702*4cc286f3SDominic Spill { &hf_lmp_rate_fec, 2703*4cc286f3SDominic Spill { "FEC", "btbrlmp.rate.fec", 2704*4cc286f3SDominic Spill FT_BOOLEAN, BASE_DEC, TFS(&fec), 0x01, 2705*4cc286f3SDominic Spill "Forward Error Correction", HFILL } 2706*4cc286f3SDominic Spill }, 2707*4cc286f3SDominic Spill { &hf_lmp_rate_size, 2708*4cc286f3SDominic Spill { "Packet Size", "btbrlmp.rate.size", 2709*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, VALS(packet_size), 0x06, 2710*4cc286f3SDominic Spill "Basic Rate Packet Size", HFILL } 2711*4cc286f3SDominic Spill }, 2712*4cc286f3SDominic Spill { &hf_lmp_rate_type, 2713*4cc286f3SDominic Spill { "EDR Type", "btbrlmp.rate.type", 2714*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, VALS(edr_type), 0x18, 2715*4cc286f3SDominic Spill "Enhanced Data Rate type", HFILL } 2716*4cc286f3SDominic Spill }, 2717*4cc286f3SDominic Spill { &hf_lmp_rate_edrsize, 2718*4cc286f3SDominic Spill { "EDR Size", "btbrlmp.rate.edrsize", 2719*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, VALS(packet_size), 0x60, 2720*4cc286f3SDominic Spill "Enhanced Data Rate packet size", HFILL } 2721*4cc286f3SDominic Spill }, 2722*4cc286f3SDominic Spill { &hf_lmp_rxfreq, 2723*4cc286f3SDominic Spill { "RX Frequency", "btbrlmp.rxfreq", 2724*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, NULL, 0x0, 2725*4cc286f3SDominic Spill "Receive Frequency in MHz above 2402", HFILL } 2726*4cc286f3SDominic Spill }, 2727*4cc286f3SDominic Spill { &hf_lmp_scohdl, 2728*4cc286f3SDominic Spill { "SCO Handle", "btbrlmp.scohdl", 2729*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2730*4cc286f3SDominic Spill NULL, HFILL } 2731*4cc286f3SDominic Spill }, 2732*4cc286f3SDominic Spill { &hf_lmp_scopkt, 2733*4cc286f3SDominic Spill { "SCO Packet", "btbrlmp.scopkt", 2734*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(sco_packet), 0x0, 2735*4cc286f3SDominic Spill NULL, HFILL } 2736*4cc286f3SDominic Spill }, 2737*4cc286f3SDominic Spill { &hf_lmp_slotoffset, 2738*4cc286f3SDominic Spill { "Slot Offset", "btbrlmp.slotoffset", 2739*4cc286f3SDominic Spill FT_UINT16, BASE_DEC, NULL, 0x0, 2740*4cc286f3SDominic Spill "Slot Offset in microseconds", HFILL } 2741*4cc286f3SDominic Spill }, 2742*4cc286f3SDominic Spill { &hf_lmp_sniffatt, 2743*4cc286f3SDominic Spill { "Sniff Attempt", "btbrlmp.sniffatt", 2744*4cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0, 2745*4cc286f3SDominic Spill "Number of receive slots", HFILL } 2746*4cc286f3SDominic Spill }, 2747*4cc286f3SDominic Spill { &hf_lmp_sniffsi, 2748*4cc286f3SDominic Spill { "Sniff Subrating Instant", "btbrlmp.sniffsi", 2749*4cc286f3SDominic Spill FT_UINT32, BASE_HEX, NULL, 0x0, 2750*4cc286f3SDominic Spill "Sniff Subrating Instant (slot)", HFILL } 2751*4cc286f3SDominic Spill }, 2752*4cc286f3SDominic Spill { &hf_lmp_sniffto, 2753*4cc286f3SDominic Spill { "Sniff Timeout", "btbrlmp.sniffto", 2754*4cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0, 2755*4cc286f3SDominic Spill "Number of receive slots", HFILL } 2756*4cc286f3SDominic Spill }, 2757*4cc286f3SDominic Spill { &hf_lmp_subversnr, 2758*4cc286f3SDominic Spill { "SubVersNr", "btbrlmp.subversnr", 2759*4cc286f3SDominic Spill FT_UINT16, BASE_DEC, NULL, 0x0, 2760*4cc286f3SDominic Spill "SubVersion", HFILL } 2761*4cc286f3SDominic Spill }, 2762*4cc286f3SDominic Spill { &hf_lmp_suptimeout, 2763*4cc286f3SDominic Spill { "Supervision Timeout", "btbrlmp.suptimeout", 2764*4cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0, 2765*4cc286f3SDominic Spill "Supervision Timeout in slots", HFILL } 2766*4cc286f3SDominic Spill }, 2767*4cc286f3SDominic Spill { &hf_lmp_swinst, 2768*4cc286f3SDominic Spill { "Switch Instant", "btbrlmp.swinst", 2769*4cc286f3SDominic Spill FT_UINT32, BASE_HEX, NULL, 0x0, 2770*4cc286f3SDominic Spill "Switch Instant (slot)", HFILL } 2771*4cc286f3SDominic Spill }, 2772*4cc286f3SDominic Spill { &hf_lmp_taccess, 2773*4cc286f3SDominic Spill { "Taccess", "btbrlmp.taccess", 2774*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2775*4cc286f3SDominic Spill "Taccess in slots", HFILL } 2776*4cc286f3SDominic Spill }, 2777*4cc286f3SDominic Spill { &hf_lmp_tb, 2778*4cc286f3SDominic Spill { "Tb", "btbrlmp.tb", 2779*4cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0, 2780*4cc286f3SDominic Spill "Tb in slots", HFILL } 2781*4cc286f3SDominic Spill }, 2782*4cc286f3SDominic Spill { &hf_lmp_tesco, 2783*4cc286f3SDominic Spill { "Tesco", "btbrlmp.tesco", 2784*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2785*4cc286f3SDominic Spill "Tesco in slots", HFILL } 2786*4cc286f3SDominic Spill }, 2787*4cc286f3SDominic Spill { &hf_lmp_testlen, 2788*4cc286f3SDominic Spill { "Test Length", "btbrlmp.testlen", 2789*4cc286f3SDominic Spill FT_UINT16, BASE_DEC, NULL, 0x0, 2790*4cc286f3SDominic Spill "Length of test sequence in bytes", HFILL } 2791*4cc286f3SDominic Spill }, 2792*4cc286f3SDominic Spill { &hf_lmp_testscen, 2793*4cc286f3SDominic Spill { "Test Scenario", "btbrlmp.testscen", 2794*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(test_scenario), 0x0, 2795*4cc286f3SDominic Spill NULL, HFILL } 2796*4cc286f3SDominic Spill }, 2797*4cc286f3SDominic Spill { &hf_lmp_tid, 2798*4cc286f3SDominic Spill { "TID", "btbrlmp.tid", 2799*4cc286f3SDominic Spill FT_BOOLEAN, BASE_DEC, TFS(&tid), 0x01, 2800*4cc286f3SDominic Spill "Transaction ID", HFILL } 2801*4cc286f3SDominic Spill }, 2802*4cc286f3SDominic Spill { &hf_lmp_timectrl, 2803*4cc286f3SDominic Spill { "Timing Control Flags", "btbrlmp.timectrl", 2804*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2805*4cc286f3SDominic Spill NULL, HFILL } 2806*4cc286f3SDominic Spill }, 2807*4cc286f3SDominic Spill { &hf_lmp_time_change, 2808*4cc286f3SDominic Spill { "Timing Change", "btbrlmp.time.change", 2809*4cc286f3SDominic Spill FT_BOOLEAN, 8, TFS(&time_change), 0x01, 2810*4cc286f3SDominic Spill NULL, HFILL } 2811*4cc286f3SDominic Spill }, 2812*4cc286f3SDominic Spill { &hf_lmp_time_init, 2813*4cc286f3SDominic Spill { "Initialization", "btbrlmp.time.init", 2814*4cc286f3SDominic Spill FT_BOOLEAN, 8, TFS(&time_init), 0x02, 2815*4cc286f3SDominic Spill NULL, HFILL } 2816*4cc286f3SDominic Spill }, 2817*4cc286f3SDominic Spill { &hf_lmp_time_accwin, 2818*4cc286f3SDominic Spill { "Access Window", "btbrlmp.time.accwin", 2819*4cc286f3SDominic Spill FT_BOOLEAN, 8, TFS(&time_accwin), 0x04, 2820*4cc286f3SDominic Spill NULL, HFILL } 2821*4cc286f3SDominic Spill }, 2822*4cc286f3SDominic Spill { &hf_lmp_tsco, 2823*4cc286f3SDominic Spill { "Tsco", "btbrlmp.tsco", 2824*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2825*4cc286f3SDominic Spill "Tsco in slots", HFILL } 2826*4cc286f3SDominic Spill }, 2827*4cc286f3SDominic Spill { &hf_lmp_tsniff, 2828*4cc286f3SDominic Spill { "Tsniff", "btbrlmp.tsniff", 2829*4cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0, 2830*4cc286f3SDominic Spill "Tsniff in slots", HFILL } 2831*4cc286f3SDominic Spill }, 2832*4cc286f3SDominic Spill { &hf_lmp_txfreq, 2833*4cc286f3SDominic Spill { "TX Frequency", "btbrlmp.txfreq", 2834*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, NULL, 0x0, 2835*4cc286f3SDominic Spill "Transmit Frequency in MHz above 2402", HFILL } 2836*4cc286f3SDominic Spill }, 2837*4cc286f3SDominic Spill { &hf_lmp_versnr, 2838*4cc286f3SDominic Spill { "VersNr", "btbrlmp.versnr", 2839*4cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(versnr), 0x0, 2840*4cc286f3SDominic Spill "Version", HFILL } 2841*4cc286f3SDominic Spill }, 2842*4cc286f3SDominic Spill { &hf_lmp_wesco, 2843*4cc286f3SDominic Spill { "Wesco", "btbrlmp.wesco", 2844*4cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0, 2845*4cc286f3SDominic Spill "Number of slots in retransmission window", HFILL } 2846*4cc286f3SDominic Spill }, 2847*4cc286f3SDominic Spill }; 2848*4cc286f3SDominic Spill 2849*4cc286f3SDominic Spill /* protocol subtree arrays */ 2850*4cc286f3SDominic Spill static gint *ett[] = { 2851*4cc286f3SDominic Spill &ett_lmp, 2852*4cc286f3SDominic Spill &ett_lmp_pwradjres, 2853*4cc286f3SDominic Spill &ett_lmp_rate, 2854*4cc286f3SDominic Spill &ett_lmp_timectrl, 2855*4cc286f3SDominic Spill }; 2856*4cc286f3SDominic Spill 2857*4cc286f3SDominic Spill /* register the protocol name and description */ 2858*4cc286f3SDominic Spill proto_btbrlmp = proto_register_protocol( 2859*4cc286f3SDominic Spill "Bluetooth BR Link Manager Protocol", /* full name */ 2860*4cc286f3SDominic Spill "btbrlmp", /* short name */ 2861*4cc286f3SDominic Spill "btbrlmp" /* abbreviation (e.g. for filters) */ 2862*4cc286f3SDominic Spill ); 2863*4cc286f3SDominic Spill 2864*4cc286f3SDominic Spill register_dissector("btbrlmp", dissect_btbrlmp, proto_btbrlmp); 2865*4cc286f3SDominic Spill 2866*4cc286f3SDominic Spill /* register the header fields and subtrees used */ 2867*4cc286f3SDominic Spill proto_register_field_array(proto_btbrlmp, hf, array_length(hf)); 2868*4cc286f3SDominic Spill proto_register_subtree_array(ett, array_length(ett)); 2869*4cc286f3SDominic Spill } 2870*4cc286f3SDominic Spill 2871*4cc286f3SDominic Spill void 2872*4cc286f3SDominic Spill proto_reg_handoff_btbrlmp(void) 2873*4cc286f3SDominic Spill { 2874*4cc286f3SDominic Spill } 2875*4cc286f3SDominic Spill 2876*4cc286f3SDominic Spill /* 2877*4cc286f3SDominic Spill * Editor modelines - http://www.wireshark.org/tools/modelines.html 2878*4cc286f3SDominic Spill * 2879*4cc286f3SDominic Spill * Local variables: 2880*4cc286f3SDominic Spill * c-basic-offset: 4 2881*4cc286f3SDominic Spill * tab-width: 8 2882*4cc286f3SDominic Spill * indent-tabs-mode: nil 2883*4cc286f3SDominic Spill * End: 2884*4cc286f3SDominic Spill * 2885*4cc286f3SDominic Spill * vi: set shiftwidth=4 tabstop=8 expandtab: 2886*4cc286f3SDominic Spill * :indentSize=4:tabSize=8:noTabs=true: 2887*4cc286f3SDominic Spill */ 2888