14cc286f3SDominic Spill /* packet-btbrlmp.c
24cc286f3SDominic Spill * Routines for Bluetooth LMP dissection
34cc286f3SDominic Spill * Copyright 2009, Michael Ossmann <[email protected]>
44cc286f3SDominic Spill *
54cc286f3SDominic Spill * Wireshark - Network traffic analyzer
64cc286f3SDominic Spill * By Gerald Combs <[email protected]>
74cc286f3SDominic Spill * Copyright 1998 Gerald Combs
84cc286f3SDominic Spill *
94cc286f3SDominic Spill * This program is free software; you can redistribute it and/or
104cc286f3SDominic Spill * modify it under the terms of the GNU General Public License
114cc286f3SDominic Spill * as published by the Free Software Foundation; either version 2
124cc286f3SDominic Spill * of the License, or (at your option) any later version.
134cc286f3SDominic Spill *
144cc286f3SDominic Spill * This program is distributed in the hope that it will be useful,
154cc286f3SDominic Spill * but WITHOUT ANY WARRANTY; without even the implied warranty of
164cc286f3SDominic Spill * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
174cc286f3SDominic Spill * GNU General Public License for more details.
184cc286f3SDominic Spill *
194cc286f3SDominic Spill * You should have received a copy of the GNU General Public License
204cc286f3SDominic Spill * along with this program; if not, write to the Free Software
214cc286f3SDominic Spill * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
224cc286f3SDominic Spill */
234cc286f3SDominic Spill
244cc286f3SDominic Spill #ifdef HAVE_CONFIG_H
254cc286f3SDominic Spill #include "config.h"
264cc286f3SDominic Spill #else
274cc286f3SDominic Spill #include <wireshark/config.h>
284cc286f3SDominic Spill #endif
294cc286f3SDominic Spill
304cc286f3SDominic Spill #include <wireshark/config.h> /* needed for epan/gcc-4.x */
314cc286f3SDominic Spill #include <epan/packet.h>
324cc286f3SDominic Spill #include <epan/prefs.h>
334cc286f3SDominic Spill
344cc286f3SDominic Spill /* LMP opcodes */
354cc286f3SDominic Spill #define LMP_NAME_REQ 1
364cc286f3SDominic Spill #define LMP_NAME_RES 2
374cc286f3SDominic Spill #define LMP_ACCEPTED 3
384cc286f3SDominic Spill #define LMP_NOT_ACCEPTED 4
394cc286f3SDominic Spill #define LMP_CLKOFFSET_REQ 5
404cc286f3SDominic Spill #define LMP_CLKOFFSET_RES 6
414cc286f3SDominic Spill #define LMP_DETACH 7
424cc286f3SDominic Spill #define LMP_IN_RAND 8
434cc286f3SDominic Spill #define LMP_COMB_KEY 9
444cc286f3SDominic Spill #define LMP_UNIT_KEY 10
454cc286f3SDominic Spill #define LMP_AU_RAND 11
464cc286f3SDominic Spill #define LMP_SRES 12
474cc286f3SDominic Spill #define LMP_TEMP_RAND 13
484cc286f3SDominic Spill #define LMP_TEMP_KEY 14
494cc286f3SDominic Spill #define LMP_ENCRYPTION_MODE_REQ 15
504cc286f3SDominic Spill #define LMP_ENCRYPTION_KEY_SIZE_REQ 16
514cc286f3SDominic Spill #define LMP_START_ENCRYPTION_REQ 17
524cc286f3SDominic Spill #define LMP_STOP_ENCRYPTION_REQ 18
534cc286f3SDominic Spill #define LMP_SWITCH_REQ 19
544cc286f3SDominic Spill #define LMP_HOLD 20
554cc286f3SDominic Spill #define LMP_HOLD_REQ 21
564cc286f3SDominic Spill #define LMP_SNIFF_REQ 23
574cc286f3SDominic Spill #define LMP_UNSNIFF_REQ 24
584cc286f3SDominic Spill #define LMP_PARK_REQ 25
594cc286f3SDominic Spill #define LMP_SET_BROADCAST_SCAN_WINDOW 27
604cc286f3SDominic Spill #define LMP_MODIFY_BEACON 28
614cc286f3SDominic Spill #define LMP_UNPARK_BD_ADDR_REQ 29
624cc286f3SDominic Spill #define LMP_UNPARK_PM_ADDR_REQ 30
634cc286f3SDominic Spill #define LMP_INCR_POWER_REQ 31
644cc286f3SDominic Spill #define LMP_DECR_POWER_REQ 32
654cc286f3SDominic Spill #define LMP_MAX_POWER 33
664cc286f3SDominic Spill #define LMP_MIN_POWER 34
674cc286f3SDominic Spill #define LMP_AUTO_RATE 35
684cc286f3SDominic Spill #define LMP_PREFERRED_RATE 36
694cc286f3SDominic Spill #define LMP_VERSION_REQ 37
704cc286f3SDominic Spill #define LMP_VERSION_RES 38
714cc286f3SDominic Spill #define LMP_FEATURES_REQ 39
724cc286f3SDominic Spill #define LMP_FEATURES_RES 40
734cc286f3SDominic Spill #define LMP_QUALITY_OF_SERVICE 41
744cc286f3SDominic Spill #define LMP_QUALITY_OF_SERVICE_REQ 42
754cc286f3SDominic Spill #define LMP_SCO_LINK_REQ 43
764cc286f3SDominic Spill #define LMP_REMOVE_SCO_LINK_REQ 44
774cc286f3SDominic Spill #define LMP_MAX_SLOT 45
784cc286f3SDominic Spill #define LMP_MAX_SLOT_REQ 46
794cc286f3SDominic Spill #define LMP_TIMING_ACCURACY_REQ 47
804cc286f3SDominic Spill #define LMP_TIMING_ACCURACY_RES 48
814cc286f3SDominic Spill #define LMP_SETUP_COMPLETE 49
824cc286f3SDominic Spill #define LMP_USE_SEMI_PERMANENT_KEY 50
834cc286f3SDominic Spill #define LMP_HOST_CONNECTION_REQ 51
844cc286f3SDominic Spill #define LMP_SLOT_OFFSET 52
854cc286f3SDominic Spill #define LMP_PAGE_MODE_REQ 53
864cc286f3SDominic Spill #define LMP_PAGE_SCAN_MODE_REQ 54
874cc286f3SDominic Spill #define LMP_SUPERVISION_TIMEOUT 55
884cc286f3SDominic Spill #define LMP_TEST_ACTIVATE 56
894cc286f3SDominic Spill #define LMP_TEST_CONTROL 57
904cc286f3SDominic Spill #define LMP_ENCRYPTION_KEY_SIZE_MASK_REQ 58
914cc286f3SDominic Spill #define LMP_ENCRYPTION_KEY_SIZE_MASK_RES 59
924cc286f3SDominic Spill #define LMP_SET_AFH 60
934cc286f3SDominic Spill #define LMP_ENCAPSULATED_HEADER 61
944cc286f3SDominic Spill #define LMP_ENCAPSULATED_PAYLOAD 62
954cc286f3SDominic Spill #define LMP_SIMPLE_PAIRING_CONFIRM 63
964cc286f3SDominic Spill #define LMP_SIMPLE_PAIRING_NUMBER 64
974cc286f3SDominic Spill #define LMP_DHKEY_CHECK 65
984cc286f3SDominic Spill #define LMP_ESCAPE_1 124
994cc286f3SDominic Spill #define LMP_ESCAPE_2 125
1004cc286f3SDominic Spill #define LMP_ESCAPE_3 126
1014cc286f3SDominic Spill #define LMP_ESCAPE_4 127
1024cc286f3SDominic Spill
1034cc286f3SDominic Spill /* LMP extended opcodes */
1044cc286f3SDominic Spill #define LMP_ACCEPTED_EXT 1
1054cc286f3SDominic Spill #define LMP_NOT_ACCEPTED_EXT 2
1064cc286f3SDominic Spill #define LMP_FEATURES_REQ_EXT 3
1074cc286f3SDominic Spill #define LMP_FEATURES_RES_EXT 4
1084cc286f3SDominic Spill #define LMP_PACKET_TYPE_TABLE_REQ 11
1094cc286f3SDominic Spill #define LMP_ESCO_LINK_REQ 12
1104cc286f3SDominic Spill #define LMP_REMOVE_ESCO_LINK_REQ 13
1114cc286f3SDominic Spill #define LMP_CHANNEL_CLASSIFICATION_REQ 16
1124cc286f3SDominic Spill #define LMP_CHANNEL_CLASSIFICATION 17
1134cc286f3SDominic Spill #define LMP_SNIFF_SUBRATING_REQ 21
1144cc286f3SDominic Spill #define LMP_SNIFF_SUBRATING_RES 22
1154cc286f3SDominic Spill #define LMP_PAUSE_ENCRYPTION_REQ 23
1164cc286f3SDominic Spill #define LMP_RESUME_ENCRYPTION_REQ 24
1174cc286f3SDominic Spill #define LMP_IO_CAPABILITY_REQ 25
1184cc286f3SDominic Spill #define LMP_IO_CAPABILITY_RES 26
1194cc286f3SDominic Spill #define LMP_NUMERIC_COMPARISON_FAILED 27
1204cc286f3SDominic Spill #define LMP_PASSKEY_FAILED 28
1214cc286f3SDominic Spill #define LMP_OOB_FAILED 29
1224cc286f3SDominic Spill #define LMP_KEYPRESS_NOTIFICATION 30
1234cc286f3SDominic Spill #define LMP_POWER_CONTROL_REQ 31
1244cc286f3SDominic Spill #define LMP_POWER_CONTROL_RES 32
1254cc286f3SDominic Spill
1264cc286f3SDominic Spill /* initialize the protocol and registered fields */
1274cc286f3SDominic Spill static int proto_btbrlmp = -1;
1284cc286f3SDominic Spill static int hf_lmp_accscheme = -1;
1294cc286f3SDominic Spill static int hf_lmp_afhchmap = -1;
1304cc286f3SDominic Spill static int hf_lmp_afhclass = -1;
1314cc286f3SDominic Spill static int hf_lmp_afhinst = -1;
1324cc286f3SDominic Spill static int hf_lmp_afhmaxintvl = -1;
1334cc286f3SDominic Spill static int hf_lmp_afhminintvl = -1;
1344cc286f3SDominic Spill static int hf_lmp_afhmode = -1;
1354cc286f3SDominic Spill static int hf_lmp_afhrptmode = -1;
1364cc286f3SDominic Spill static int hf_lmp_airmode = -1;
1374cc286f3SDominic Spill static int hf_lmp_araddr = -1;
1384cc286f3SDominic Spill static int hf_lmp_authreqs = -1;
1394cc286f3SDominic Spill static int hf_lmp_authres = -1;
1404cc286f3SDominic Spill static int hf_lmp_bdaddr = -1;
1414cc286f3SDominic Spill static int hf_lmp_bdaddr1 = -1;
1424cc286f3SDominic Spill static int hf_lmp_bdaddr2 = -1;
1434cc286f3SDominic Spill static int hf_lmp_bsw = -1;
1444cc286f3SDominic Spill static int hf_lmp_clkoffset = -1;
1454cc286f3SDominic Spill static int hf_lmp_commit = -1;
1464cc286f3SDominic Spill static int hf_lmp_confirm = -1;
1474cc286f3SDominic Spill static int hf_lmp_compid = -1;
1484cc286f3SDominic Spill static int hf_lmp_cryptmode = -1;
1494cc286f3SDominic Spill static int hf_lmp_daccess = -1;
1504cc286f3SDominic Spill static int hf_lmp_db = -1;
1514cc286f3SDominic Spill static int hf_lmp_dbsleep = -1;
1524cc286f3SDominic Spill static int hf_lmp_deltab = -1;
1534cc286f3SDominic Spill static int hf_lmp_desco = -1;
1544cc286f3SDominic Spill static int hf_lmp_drift = -1;
1554cc286f3SDominic Spill static int hf_lmp_dsco = -1;
1564cc286f3SDominic Spill static int hf_lmp_dsniff = -1;
1574cc286f3SDominic Spill static int hf_lmp_encdata = -1;
1584cc286f3SDominic Spill static int hf_lmp_enclen = -1;
1594cc286f3SDominic Spill static int hf_lmp_encmaj = -1;
1604cc286f3SDominic Spill static int hf_lmp_encmin = -1;
1614cc286f3SDominic Spill static int hf_lmp_eop = -1;
1624cc286f3SDominic Spill static int hf_lmp_eopinre = -1;
1634cc286f3SDominic Spill static int hf_lmp_escolenms = -1;
1644cc286f3SDominic Spill static int hf_lmp_escolensm = -1;
1654cc286f3SDominic Spill static int hf_lmp_escotypems = -1;
1664cc286f3SDominic Spill static int hf_lmp_escotypesm = -1;
1674cc286f3SDominic Spill static int hf_lmp_err = -1;
1684cc286f3SDominic Spill static int hf_lmp_escohdl = -1;
1694cc286f3SDominic Spill static int hf_lmp_escoltaddr = -1;
1704cc286f3SDominic Spill static int hf_lmp_features = -1;
1714cc286f3SDominic Spill static int hf_lmp_fpage = -1;
1724cc286f3SDominic Spill static int hf_lmp_htime = -1;
1734cc286f3SDominic Spill static int hf_lmp_hinst = -1;
1744cc286f3SDominic Spill static int hf_lmp_hopmode = -1;
1754cc286f3SDominic Spill static int hf_lmp_iocaps = -1;
1764cc286f3SDominic Spill static int hf_lmp_jitter = -1;
1774cc286f3SDominic Spill static int hf_lmp_key = -1;
1784cc286f3SDominic Spill static int hf_lmp_keysz = -1;
1794cc286f3SDominic Spill static int hf_lmp_ksmask = -1;
1804cc286f3SDominic Spill static int hf_lmp_ltaddr1 = -1;
1814cc286f3SDominic Spill static int hf_lmp_ltaddr2 = -1;
1824cc286f3SDominic Spill static int hf_lmp_ltaddr3 = -1;
1834cc286f3SDominic Spill static int hf_lmp_ltaddr4 = -1;
1844cc286f3SDominic Spill static int hf_lmp_ltaddr5 = -1;
1854cc286f3SDominic Spill static int hf_lmp_ltaddr6 = -1;
1864cc286f3SDominic Spill static int hf_lmp_ltaddr7 = -1;
1874cc286f3SDominic Spill static int hf_lmp_maccess = -1;
1884cc286f3SDominic Spill static int hf_lmp_maxslots = -1;
1894cc286f3SDominic Spill static int hf_lmp_maxsp = -1;
1904cc286f3SDominic Spill static int hf_lmp_maxss = -1;
1914cc286f3SDominic Spill static int hf_lmp_minsmt = -1;
1924cc286f3SDominic Spill static int hf_lmp_naccslots = -1;
1934cc286f3SDominic Spill static int hf_lmp_namefrag = -1;
1944cc286f3SDominic Spill static int hf_lmp_namelen = -1;
1954cc286f3SDominic Spill static int hf_lmp_nameoffset = -1;
1964cc286f3SDominic Spill static int hf_lmp_nb = -1;
1974cc286f3SDominic Spill static int hf_lmp_nbc = -1;
1984cc286f3SDominic Spill static int hf_lmp_nbsleep = -1;
1994cc286f3SDominic Spill static int hf_lmp_negstate = -1;
2004cc286f3SDominic Spill static int hf_lmp_nonce = -1;
2014cc286f3SDominic Spill static int hf_lmp_nottype = -1;
2024cc286f3SDominic Spill static int hf_lmp_npoll = -1;
2034cc286f3SDominic Spill static int hf_lmp_oobauthdata = -1;
2044cc286f3SDominic Spill static int hf_lmp_op = -1;
2054cc286f3SDominic Spill static int hf_lmp_opinre = -1;
2064cc286f3SDominic Spill static int hf_lmp_pagesch = -1;
2074cc286f3SDominic Spill static int hf_lmp_pcmode = -1;
2084cc286f3SDominic Spill static int hf_lmp_pkttype = -1;
2094cc286f3SDominic Spill static int hf_lmp_pkttypetbl = -1;
2104cc286f3SDominic Spill static int hf_lmp_pmaddr = -1;
2114cc286f3SDominic Spill static int hf_lmp_pmaddr1 = -1;
2124cc286f3SDominic Spill static int hf_lmp_pmaddr2 = -1;
2134cc286f3SDominic Spill static int hf_lmp_pmaddr3 = -1;
2144cc286f3SDominic Spill static int hf_lmp_pmaddr4 = -1;
2154cc286f3SDominic Spill static int hf_lmp_pmaddr5 = -1;
2164cc286f3SDominic Spill static int hf_lmp_pmaddr6 = -1;
2174cc286f3SDominic Spill static int hf_lmp_pmaddr7 = -1;
2184cc286f3SDominic Spill static int hf_lmp_pollintvl = -1;
2194cc286f3SDominic Spill static int hf_lmp_pollper = -1;
2204cc286f3SDominic Spill static int hf_lmp_pssettings = -1;
2214cc286f3SDominic Spill static int hf_lmp_pwradjreq = -1;
2224cc286f3SDominic Spill static int hf_lmp_pwradjres = -1;
2234cc286f3SDominic Spill static int hf_lmp_pwradj_8dpsk = -1;
2244cc286f3SDominic Spill static int hf_lmp_pwradj_dqpsk = -1;
2254cc286f3SDominic Spill static int hf_lmp_pwradj_gfsk = -1;
2264cc286f3SDominic Spill static int hf_lmp_rand = -1;
2274cc286f3SDominic Spill static int hf_lmp_rate = -1;
2284cc286f3SDominic Spill static int hf_lmp_rate_fec = -1;
2294cc286f3SDominic Spill static int hf_lmp_rate_size = -1;
2304cc286f3SDominic Spill static int hf_lmp_rate_type = -1;
2314cc286f3SDominic Spill static int hf_lmp_rate_edrsize = -1;
2324cc286f3SDominic Spill static int hf_lmp_rxfreq = -1;
2334cc286f3SDominic Spill static int hf_lmp_scohdl = -1;
2344cc286f3SDominic Spill static int hf_lmp_scopkt = -1;
2354cc286f3SDominic Spill static int hf_lmp_slotoffset = -1;
2364cc286f3SDominic Spill static int hf_lmp_sniffatt = -1;
2374cc286f3SDominic Spill static int hf_lmp_sniffsi = -1;
2384cc286f3SDominic Spill static int hf_lmp_sniffto = -1;
2394cc286f3SDominic Spill static int hf_lmp_subversnr = -1;
2404cc286f3SDominic Spill static int hf_lmp_suptimeout = -1;
2414cc286f3SDominic Spill static int hf_lmp_swinst = -1;
2424cc286f3SDominic Spill static int hf_lmp_taccess = -1;
2434cc286f3SDominic Spill static int hf_lmp_tb = -1;
2444cc286f3SDominic Spill static int hf_lmp_tesco = -1;
2454cc286f3SDominic Spill static int hf_lmp_testlen = -1;
2464cc286f3SDominic Spill static int hf_lmp_testscen = -1;
2474cc286f3SDominic Spill static int hf_lmp_tid = -1;
2484cc286f3SDominic Spill static int hf_lmp_timectrl = -1;
2494cc286f3SDominic Spill static int hf_lmp_time_change = -1;
2504cc286f3SDominic Spill static int hf_lmp_time_init = -1;
2514cc286f3SDominic Spill static int hf_lmp_time_accwin = -1;
2524cc286f3SDominic Spill static int hf_lmp_tsco = -1;
2534cc286f3SDominic Spill static int hf_lmp_tsniff = -1;
2544cc286f3SDominic Spill static int hf_lmp_txfreq = -1;
2554cc286f3SDominic Spill static int hf_lmp_versnr = -1;
2564cc286f3SDominic Spill static int hf_lmp_wesco = -1;
2574cc286f3SDominic Spill
2584cc286f3SDominic Spill /* timing control flags */
2594cc286f3SDominic Spill static const int *timectrl_fields[] = {
2604cc286f3SDominic Spill &hf_lmp_time_change,
2614cc286f3SDominic Spill &hf_lmp_time_init,
2624cc286f3SDominic Spill &hf_lmp_time_accwin,
2634cc286f3SDominic Spill /* bits 3-7 reserved */
2644cc286f3SDominic Spill NULL
2654cc286f3SDominic Spill };
2664cc286f3SDominic Spill
2674cc286f3SDominic Spill static const true_false_string time_change = {
2684cc286f3SDominic Spill "timing change",
2694cc286f3SDominic Spill "no timing change"
2704cc286f3SDominic Spill };
2714cc286f3SDominic Spill
2724cc286f3SDominic Spill static const true_false_string time_init = {
2734cc286f3SDominic Spill "use initialization 2",
2744cc286f3SDominic Spill "use initialization 1"
2754cc286f3SDominic Spill };
2764cc286f3SDominic Spill
2774cc286f3SDominic Spill static const true_false_string time_accwin = {
2784cc286f3SDominic Spill "no access window",
2794cc286f3SDominic Spill "access window"
2804cc286f3SDominic Spill };
2814cc286f3SDominic Spill
2824cc286f3SDominic Spill static const true_false_string fec = {
2834cc286f3SDominic Spill "do not use FEC",
2844cc286f3SDominic Spill "use FEC"
2854cc286f3SDominic Spill };
2864cc286f3SDominic Spill
2874cc286f3SDominic Spill static const true_false_string tid = {
2884cc286f3SDominic Spill "transaction initiated by slave",
2894cc286f3SDominic Spill "transaction initiated by master"
2904cc286f3SDominic Spill };
2914cc286f3SDominic Spill
2924cc286f3SDominic Spill /* short LMP opcodes */
2934cc286f3SDominic Spill static const value_string opcode[] = {
2944cc286f3SDominic Spill { LMP_NAME_REQ, "LMP_name_req" },
2954cc286f3SDominic Spill { LMP_NAME_RES, "LMP_name_res" },
2964cc286f3SDominic Spill { LMP_ACCEPTED, "LMP_accepted" },
2974cc286f3SDominic Spill { LMP_NOT_ACCEPTED, "LMP_not_accepted" },
2984cc286f3SDominic Spill { LMP_CLKOFFSET_REQ, "LMP_clkoffset_req" },
2994cc286f3SDominic Spill { LMP_CLKOFFSET_RES, "LMP_clkoffset_res" },
3004cc286f3SDominic Spill { LMP_DETACH, "LMP_detach" },
3014cc286f3SDominic Spill { LMP_IN_RAND, "LMP_in_rand" },
3024cc286f3SDominic Spill { LMP_COMB_KEY, "LMP_comb_key" },
3034cc286f3SDominic Spill { LMP_UNIT_KEY, "LMP_unit_key" },
3044cc286f3SDominic Spill { LMP_AU_RAND, "LMP_au_rand" },
3054cc286f3SDominic Spill { LMP_SRES, "LMP_sres" },
3064cc286f3SDominic Spill { LMP_TEMP_RAND, "LMP_temp_rand" },
3074cc286f3SDominic Spill { LMP_TEMP_KEY, "LMP_temp_key" },
3084cc286f3SDominic Spill { LMP_ENCRYPTION_MODE_REQ, "LMP_encryption_mode_req" },
3094cc286f3SDominic Spill { LMP_ENCRYPTION_KEY_SIZE_REQ, "LMP_encryption_key_size_req" },
3104cc286f3SDominic Spill { LMP_START_ENCRYPTION_REQ, "LMP_start_encryption_req" },
3114cc286f3SDominic Spill { LMP_STOP_ENCRYPTION_REQ, "LMP_stop_encryption_req" },
3124cc286f3SDominic Spill { LMP_SWITCH_REQ, "LMP_switch_req" },
3134cc286f3SDominic Spill { LMP_HOLD, "LMP_hold" },
3144cc286f3SDominic Spill { LMP_HOLD_REQ, "LMP_hold_req" },
3154cc286f3SDominic Spill { LMP_SNIFF_REQ, "LMP_sniff_req" },
3164cc286f3SDominic Spill { LMP_UNSNIFF_REQ, "LMP_unsniff_req" },
3174cc286f3SDominic Spill { LMP_PARK_REQ, "LMP_park_req" },
3184cc286f3SDominic Spill { LMP_SET_BROADCAST_SCAN_WINDOW, "LMP_set_broadcast_scan_window" },
3194cc286f3SDominic Spill { LMP_MODIFY_BEACON, "LMP_modify_beacon" },
3204cc286f3SDominic Spill { LMP_UNPARK_BD_ADDR_REQ, "LMP_unpark_BD_ADDR_req" },
3214cc286f3SDominic Spill { LMP_UNPARK_PM_ADDR_REQ, "LMP_unpark_PM_ADDR_req" },
3224cc286f3SDominic Spill { LMP_INCR_POWER_REQ, "LMP_incr_power_req" },
3234cc286f3SDominic Spill { LMP_DECR_POWER_REQ, "LMP_decr_power_req" },
3244cc286f3SDominic Spill { LMP_MAX_POWER, "LMP_max_power" },
3254cc286f3SDominic Spill { LMP_MIN_POWER, "LMP_min_power" },
3264cc286f3SDominic Spill { LMP_AUTO_RATE, "LMP_auto_rate" },
3274cc286f3SDominic Spill { LMP_PREFERRED_RATE, "LMP_preferred_rate" },
3284cc286f3SDominic Spill { LMP_VERSION_REQ, "LMP_version_req" },
3294cc286f3SDominic Spill { LMP_VERSION_RES, "LMP_version_res" },
3304cc286f3SDominic Spill { LMP_FEATURES_REQ, "LMP_features_req" },
3314cc286f3SDominic Spill { LMP_FEATURES_RES, "LMP_features_res" },
3324cc286f3SDominic Spill { LMP_QUALITY_OF_SERVICE, "LMP_quality_of_service" },
3334cc286f3SDominic Spill { LMP_QUALITY_OF_SERVICE_REQ, "LMP_quality_of_service_req" },
3344cc286f3SDominic Spill { LMP_SCO_LINK_REQ, "LMP_SCO_link_req" },
3354cc286f3SDominic Spill { LMP_REMOVE_SCO_LINK_REQ, "LMP_remove_SCO_link_req" },
3364cc286f3SDominic Spill { LMP_MAX_SLOT, "LMP_max_slot" },
3374cc286f3SDominic Spill { LMP_MAX_SLOT_REQ, "LMP_max_slot_req" },
3384cc286f3SDominic Spill { LMP_TIMING_ACCURACY_REQ, "LMP_timing_accuracy_req" },
3394cc286f3SDominic Spill { LMP_TIMING_ACCURACY_RES, "LMP_timing_accuracy_res" },
3404cc286f3SDominic Spill { LMP_SETUP_COMPLETE, "LMP_setup_complete" },
3414cc286f3SDominic Spill { LMP_USE_SEMI_PERMANENT_KEY, "LMP_use_semi_permanent_key" },
3424cc286f3SDominic Spill { LMP_HOST_CONNECTION_REQ, "LMP_host_connection_req" },
3434cc286f3SDominic Spill { LMP_SLOT_OFFSET, "LMP_slot_offset" },
3444cc286f3SDominic Spill { LMP_PAGE_MODE_REQ, "LMP_page_mode_req" },
3454cc286f3SDominic Spill { LMP_PAGE_SCAN_MODE_REQ, "LMP_page_scan_mode_req" },
3464cc286f3SDominic Spill { LMP_SUPERVISION_TIMEOUT, "LMP_supervision_timeout" },
3474cc286f3SDominic Spill { LMP_TEST_ACTIVATE, "LMP_test_activate" },
3484cc286f3SDominic Spill { LMP_TEST_CONTROL, "LMP_test_control" },
3494cc286f3SDominic Spill { LMP_ENCRYPTION_KEY_SIZE_MASK_REQ, "LMP_encryption_key_size_mask_req" },
3504cc286f3SDominic Spill { LMP_ENCRYPTION_KEY_SIZE_MASK_RES, "LMP_encryption_key_size_mask_res" },
3514cc286f3SDominic Spill { LMP_SET_AFH, "LMP_set_AFH" },
3524cc286f3SDominic Spill { LMP_ENCAPSULATED_HEADER, "LMP_encapsulated_header" },
3534cc286f3SDominic Spill { LMP_ENCAPSULATED_PAYLOAD, "LMP_encapsulated_payload" },
3544cc286f3SDominic Spill { LMP_SIMPLE_PAIRING_CONFIRM, "LMP_Simple_Pairing_Confirm" },
3554cc286f3SDominic Spill { LMP_SIMPLE_PAIRING_NUMBER, "LMP_Simple_Pairing_Number" },
3564cc286f3SDominic Spill { LMP_DHKEY_CHECK, "LMP_DHkey_Check" },
3574cc286f3SDominic Spill { LMP_ESCAPE_1, "Escape 1" },
3584cc286f3SDominic Spill { LMP_ESCAPE_2, "Escape 2" },
3594cc286f3SDominic Spill { LMP_ESCAPE_3, "Escape 3" },
3604cc286f3SDominic Spill { LMP_ESCAPE_4, "Escape 4" },
3614cc286f3SDominic Spill { 0, NULL }
3624cc286f3SDominic Spill };
3634cc286f3SDominic Spill
3644cc286f3SDominic Spill /* extended LMP opcodes */
3654cc286f3SDominic Spill static const value_string ext_opcode[] = {
3664cc286f3SDominic Spill { LMP_ACCEPTED_EXT, "LMP_accepted_ext" },
3674cc286f3SDominic Spill { LMP_NOT_ACCEPTED_EXT, "LMP_not_accepted_ext" },
3684cc286f3SDominic Spill { LMP_FEATURES_REQ_EXT, "LMP_features_req_ext" },
3694cc286f3SDominic Spill { LMP_FEATURES_RES_EXT, "LMP_features_res_ext" },
3704cc286f3SDominic Spill { LMP_PACKET_TYPE_TABLE_REQ, "LMP_packet_type_table_req" },
3714cc286f3SDominic Spill { LMP_ESCO_LINK_REQ, "LMP_eSCO_link_req" },
3724cc286f3SDominic Spill { LMP_REMOVE_ESCO_LINK_REQ, "LMP_remove_eSCO_link_req" },
3734cc286f3SDominic Spill { LMP_CHANNEL_CLASSIFICATION_REQ, "LMP_channel_classification_req" },
3744cc286f3SDominic Spill { LMP_CHANNEL_CLASSIFICATION, "LMP_channel_classification" },
3754cc286f3SDominic Spill { LMP_SNIFF_SUBRATING_REQ, "LMP_sniff_subrating_req" },
3764cc286f3SDominic Spill { LMP_SNIFF_SUBRATING_RES, "LMP_sniff_subrating_res" },
3774cc286f3SDominic Spill { LMP_PAUSE_ENCRYPTION_REQ, "LMP_pause_encryption_req" },
3784cc286f3SDominic Spill { LMP_RESUME_ENCRYPTION_REQ, "LMP_resume_encryption_req" },
3794cc286f3SDominic Spill { LMP_IO_CAPABILITY_REQ, "LMP_IO_Capability_req" },
3804cc286f3SDominic Spill { LMP_IO_CAPABILITY_RES, "LMP_IO_Capability_res" },
3814cc286f3SDominic Spill { LMP_NUMERIC_COMPARISON_FAILED, "LMP_numeric_comparison_failed" },
3824cc286f3SDominic Spill { LMP_PASSKEY_FAILED, "LMP_passkey_failed" },
3834cc286f3SDominic Spill { LMP_OOB_FAILED, "LMP_oob_failed" },
3844cc286f3SDominic Spill { LMP_KEYPRESS_NOTIFICATION, "LMP_keypress_notification" },
3854cc286f3SDominic Spill { LMP_POWER_CONTROL_REQ, "LMP_power_control_req" },
3864cc286f3SDominic Spill { LMP_POWER_CONTROL_RES, "LMP_power_control_res" },
3874cc286f3SDominic Spill { 0, NULL }
3884cc286f3SDominic Spill };
3894cc286f3SDominic Spill
3904cc286f3SDominic Spill /* LMP error codes */
3914cc286f3SDominic Spill static const value_string error_code[] = {
3924cc286f3SDominic Spill { 0x00, "Success" },
3934cc286f3SDominic Spill { 0x01, "Unknown HCI Command" },
3944cc286f3SDominic Spill { 0x02, "Unknown Connection Identifier" },
3954cc286f3SDominic Spill { 0x03, "Hardware Failure" },
3964cc286f3SDominic Spill { 0x04, "Page Timeout" },
3974cc286f3SDominic Spill { 0x05, "Authentication Failure" },
3984cc286f3SDominic Spill { 0x06, "PIN or Key Missing" },
3994cc286f3SDominic Spill { 0x07, "Memory Capacity Exceeded" },
4004cc286f3SDominic Spill { 0x08, "Connection Timeout" },
4014cc286f3SDominic Spill { 0x09, "Connection Limit Exceeded" },
4024cc286f3SDominic Spill { 0x0A, "Synchronous Connection Limit To A Device Exceeded" },
4034cc286f3SDominic Spill { 0x0B, "ACL Connection Already Exists" },
4044cc286f3SDominic Spill { 0x0C, "Command Disallowed" },
4054cc286f3SDominic Spill { 0x0D, "Connection Rejected due to Limited Resources" },
4064cc286f3SDominic Spill { 0x0E, "Connection Rejected Due To Security Reasons" },
4074cc286f3SDominic Spill { 0x0F, "Connection Rejected due to Unacceptable BD_ADDR" },
4084cc286f3SDominic Spill { 0x10, "Connection Accept Timeout Exceeded" },
4094cc286f3SDominic Spill { 0x11, "Unsupported Feature or Parameter Value" },
4104cc286f3SDominic Spill { 0x12, "Invalid HCI Command Parameters" },
4114cc286f3SDominic Spill { 0x13, "Remote User Terminated Connection" },
4124cc286f3SDominic Spill { 0x14, "Remote Device Terminated Connection due to Low Resources" },
4134cc286f3SDominic Spill { 0x15, "Remote Device Terminated Connection due to Power Off" },
4144cc286f3SDominic Spill { 0x16, "Connection Terminated By Local Host" },
4154cc286f3SDominic Spill { 0x17, "Repeated Attempts" },
4164cc286f3SDominic Spill { 0x18, "Pairing Not Allowed" },
4174cc286f3SDominic Spill { 0x19, "Unknown LMP PDU" },
4184cc286f3SDominic Spill { 0x1A, "Unsupported Remote Feature / Unsupported LMP Feature" },
4194cc286f3SDominic Spill { 0x1B, "SCO Offset Rejected" },
4204cc286f3SDominic Spill { 0x1C, "SCO Interval Rejected" },
4214cc286f3SDominic Spill { 0x1D, "SCO Air Mode Rejected" },
4224cc286f3SDominic Spill { 0x1E, "Invalid LMP Parameters" },
4234cc286f3SDominic Spill { 0x1F, "Unspecified Error" },
4244cc286f3SDominic Spill { 0x20, "Unsupported LMP Parameter Value" },
4254cc286f3SDominic Spill { 0x21, "Role Change Not Allowed" },
4264cc286f3SDominic Spill { 0x22, "LMP Response Timeout" },
4274cc286f3SDominic Spill { 0x23, "LMP Error Transaction Collision" },
4284cc286f3SDominic Spill { 0x24, "LMP PDU Not Allowed" },
4294cc286f3SDominic Spill { 0x25, "Encryption Mode Not Acceptable" },
4304cc286f3SDominic Spill { 0x26, "Link Key Can Not be Changed" },
4314cc286f3SDominic Spill { 0x27, "Requested QoS Not Supported" },
4324cc286f3SDominic Spill { 0x28, "Instant Passed" },
4334cc286f3SDominic Spill { 0x29, "Pairing With Unit Key Not Supported" },
4344cc286f3SDominic Spill { 0x2A, "Different Transaction Collision" },
4354cc286f3SDominic Spill { 0x2B, "Reserved" },
4364cc286f3SDominic Spill { 0x2C, "QoS Unacceptable Parameter" },
4374cc286f3SDominic Spill { 0x2D, "QoS Rejected" },
4384cc286f3SDominic Spill { 0x2E, "Channel Classification Not Supported" },
4394cc286f3SDominic Spill { 0x2F, "Insufficient Security" },
4404cc286f3SDominic Spill { 0x30, "Parameter Out Of Mandatory Range" },
4414cc286f3SDominic Spill { 0x31, "Reserved" },
4424cc286f3SDominic Spill { 0x32, "Role Switch Pending" },
4434cc286f3SDominic Spill { 0x33, "Reserved" },
4444cc286f3SDominic Spill { 0x34, "Reserved Slot Violation" },
4454cc286f3SDominic Spill { 0x35, "Role Switch Failed" },
4464cc286f3SDominic Spill { 0x36, "Extended Inquiry Response Too Large" },
4474cc286f3SDominic Spill { 0x37, "Secure Simple Pairing Not Supported By Host." },
4484cc286f3SDominic Spill { 0x38, "Host Busy - Pairing" },
4494cc286f3SDominic Spill { 0x39, "Connection Rejected due to No Suitable Channel Found" },
4504cc286f3SDominic Spill { 0, NULL }
4514cc286f3SDominic Spill };
4524cc286f3SDominic Spill
4534cc286f3SDominic Spill static const value_string encryption_mode[] = {
4544cc286f3SDominic Spill { 0, "no encryption" },
4554cc286f3SDominic Spill { 1, "encryption" },
4564cc286f3SDominic Spill { 2, "encryption" },
4574cc286f3SDominic Spill /* 3 - 255 reserved */
4584cc286f3SDominic Spill { 0, NULL }
4594cc286f3SDominic Spill };
4604cc286f3SDominic Spill
4614cc286f3SDominic Spill static const value_string access_scheme[] = {
4624cc286f3SDominic Spill { 0, "polling technique" },
4634cc286f3SDominic Spill /* 1 - 15 reserved */
4644cc286f3SDominic Spill { 0, NULL }
4654cc286f3SDominic Spill };
4664cc286f3SDominic Spill
4674cc286f3SDominic Spill static const value_string packet_size[] = {
4684cc286f3SDominic Spill { 0, "no packet-size preference available" },
4694cc286f3SDominic Spill { 1, "use 1-slot packets" },
4704cc286f3SDominic Spill { 2, "use 3-slot packets" },
4714cc286f3SDominic Spill { 3, "use 5-slot packets" },
4724cc286f3SDominic Spill { 0, NULL }
4734cc286f3SDominic Spill };
4744cc286f3SDominic Spill
4754cc286f3SDominic Spill static const value_string edr_type[] = {
4764cc286f3SDominic Spill { 0, "use DM1 packets" },
4774cc286f3SDominic Spill { 1, "use 2 Mbps packets" },
4784cc286f3SDominic Spill { 2, "use 3 Mbps packets" },
4794cc286f3SDominic Spill /* 3 reserved */
4804cc286f3SDominic Spill { 0, NULL }
4814cc286f3SDominic Spill };
4824cc286f3SDominic Spill
4834cc286f3SDominic Spill static const value_string versnr[] = {
4844cc286f3SDominic Spill { 0, "Bluetooth Core Specification 1.0b" },
4854cc286f3SDominic Spill { 1, "Bluetooth Core Specification 1.1" },
4864cc286f3SDominic Spill { 2, "Bluetooth Core Specification 1.2" },
4874cc286f3SDominic Spill { 3, "Bluetooth Core Specification 2.0 + EDR" },
4884cc286f3SDominic Spill { 4, "Bluetooth Core Specification 2.1 + EDR" },
4894cc286f3SDominic Spill { 5, "Bluetooth Core Specification 3.0 + HS" },
4904cc286f3SDominic Spill /* 6 - 255 reserved */
4914cc286f3SDominic Spill { 0, NULL }
4924cc286f3SDominic Spill };
4934cc286f3SDominic Spill
4944cc286f3SDominic Spill static const value_string compid[] = {
4954cc286f3SDominic Spill { 0, "Ericsson Technology Licensing" },
4964cc286f3SDominic Spill { 1, "Nokia Mobile Phones" },
4974cc286f3SDominic Spill { 2, "Intel Corp." },
4984cc286f3SDominic Spill { 3, "IBM Corp." },
4994cc286f3SDominic Spill { 4, "Toshiba Corp." },
5004cc286f3SDominic Spill { 5, "3Com" },
5014cc286f3SDominic Spill { 6, "Microsoft" },
5024cc286f3SDominic Spill { 7, "Lucent" },
5034cc286f3SDominic Spill { 8, "Motorola" },
5044cc286f3SDominic Spill { 9, "Infineon Technologies AG" },
5054cc286f3SDominic Spill { 10, "Cambridge Silicon Radio" },
5064cc286f3SDominic Spill { 11, "Silicon Wave" },
5074cc286f3SDominic Spill { 12, "Digianswer A/S" },
5084cc286f3SDominic Spill { 13, "Texas Instruments Inc." },
5094cc286f3SDominic Spill { 14, "Parthus Technologies Inc." },
5104cc286f3SDominic Spill { 15, "Broadcom Corporation" },
5114cc286f3SDominic Spill { 16, "Mitel Semiconductor" },
5124cc286f3SDominic Spill { 17, "Widcomm, Inc." },
5134cc286f3SDominic Spill { 18, "Zeevo, Inc." },
5144cc286f3SDominic Spill { 19, "Atmel Corporation" },
5154cc286f3SDominic Spill { 20, "Mitsubishi Electric Corporation" },
5164cc286f3SDominic Spill { 21, "RTX Telecom A/S" },
5174cc286f3SDominic Spill { 22, "KC Technology Inc." },
5184cc286f3SDominic Spill { 23, "Newlogic" },
5194cc286f3SDominic Spill { 24, "Transilica, Inc." },
5204cc286f3SDominic Spill { 25, "Rohde & Schwarz GmbH & Co. KG" },
5214cc286f3SDominic Spill { 26, "TTPCom Limited" },
5224cc286f3SDominic Spill { 27, "Signia Technologies, Inc." },
5234cc286f3SDominic Spill { 28, "Conexant Systems Inc." },
5244cc286f3SDominic Spill { 29, "Qualcomm" },
5254cc286f3SDominic Spill { 30, "Inventel" },
5264cc286f3SDominic Spill { 31, "AVM Berlin" },
5274cc286f3SDominic Spill { 32, "BandSpeed, Inc." },
5284cc286f3SDominic Spill { 33, "Mansella Ltd" },
5294cc286f3SDominic Spill { 34, "NEC Corporation" },
5304cc286f3SDominic Spill { 35, "WavePlus Technology Co., Ltd." },
5314cc286f3SDominic Spill { 36, "Alcatel" },
5324cc286f3SDominic Spill { 37, "Philips Semiconductors" },
5334cc286f3SDominic Spill { 38, "C Technologies" },
5344cc286f3SDominic Spill { 39, "Open Interface" },
5354cc286f3SDominic Spill { 40, "R F Micro Devices" },
5364cc286f3SDominic Spill { 41, "Hitachi Ltd" },
5374cc286f3SDominic Spill { 42, "Symbol Technologies, Inc." },
5384cc286f3SDominic Spill { 43, "Tenovis" },
5394cc286f3SDominic Spill { 44, "Macronix International Co. Ltd." },
5404cc286f3SDominic Spill { 45, "GCT Semiconductor" },
5414cc286f3SDominic Spill { 46, "Norwood Systems" },
5424cc286f3SDominic Spill { 47, "MewTel Technology Inc." },
5434cc286f3SDominic Spill { 48, "ST Microelectronics" },
5444cc286f3SDominic Spill { 49, "Synopsys" },
5454cc286f3SDominic Spill { 50, "Red-M (Communications) Ltd" },
5464cc286f3SDominic Spill { 51, "Commil Ltd" },
5474cc286f3SDominic Spill { 52, "Computer Access Technology Corporation (CATC)" },
5484cc286f3SDominic Spill { 53, "Eclipse (HQ Espana) S.L." },
5494cc286f3SDominic Spill { 54, "Renesas Technology Corp." },
5504cc286f3SDominic Spill { 55, "Mobilian Corporation" },
5514cc286f3SDominic Spill { 56, "Terax" },
5524cc286f3SDominic Spill { 57, "Integrated System Solution Corp." },
5534cc286f3SDominic Spill { 58, "Matsushita Electric Industrial Co., Ltd." },
5544cc286f3SDominic Spill { 59, "Gennum Corporation" },
5554cc286f3SDominic Spill { 60, "Research In Motion" },
5564cc286f3SDominic Spill { 61, "IPextreme, Inc." },
5574cc286f3SDominic Spill { 62, "Systems and Chips, Inc" },
5584cc286f3SDominic Spill { 63, "Bluetooth SIG, Inc" },
5594cc286f3SDominic Spill { 64, "Seiko Epson Corporation" },
5604cc286f3SDominic Spill { 65, "Integrated Silicon Solution Taiwan, Inc." },
5614cc286f3SDominic Spill { 66, "CONWISE Technology Corporation Ltd" },
5624cc286f3SDominic Spill { 67, "PARROT SA" },
5634cc286f3SDominic Spill { 68, "Socket Mobile" },
5644cc286f3SDominic Spill { 69, "Atheros Communications, Inc." },
5654cc286f3SDominic Spill { 70, "MediaTek, Inc." },
5664cc286f3SDominic Spill { 71, "Bluegiga (tentative)" },
5674cc286f3SDominic Spill { 72, "Marvell Technology Group Ltd." },
5684cc286f3SDominic Spill { 73, "3DSP Corporation" },
5694cc286f3SDominic Spill { 74, "Accel Semiconductor Ltd." },
5704cc286f3SDominic Spill { 75, "Continental Automotive Systems" },
5714cc286f3SDominic Spill { 76, "Apple, Inc." },
5724cc286f3SDominic Spill { 77, "Staccato Communications, Inc." },
5734cc286f3SDominic Spill { 78, "Avago Technologies" },
5744cc286f3SDominic Spill { 79, "APT Ltd." },
5754cc286f3SDominic Spill { 80, "SiRF Technology, Inc." },
5764cc286f3SDominic Spill { 81, "Tzero Technologies, Inc." },
5774cc286f3SDominic Spill { 82, "J&M Corporation" },
5784cc286f3SDominic Spill { 83, "Free2move AB" },
5794cc286f3SDominic Spill /* 84 - 65534 reserved */
5804cc286f3SDominic Spill { 65535, "test" },
5814cc286f3SDominic Spill { 0, NULL }
5824cc286f3SDominic Spill };
5834cc286f3SDominic Spill
5844cc286f3SDominic Spill static const value_string sco_packet[] = {
5854cc286f3SDominic Spill { 0, "HV1" },
5864cc286f3SDominic Spill { 1, "HV2" },
5874cc286f3SDominic Spill { 2, "HV3" },
5884cc286f3SDominic Spill /* 3 - 255 reserved */
5894cc286f3SDominic Spill { 0, NULL }
5904cc286f3SDominic Spill };
5914cc286f3SDominic Spill
5924cc286f3SDominic Spill static const value_string air_mode[] = {
5934cc286f3SDominic Spill { 0, "mu-law log" },
5944cc286f3SDominic Spill { 1, "A-law log" },
5954cc286f3SDominic Spill { 2, "CVSD" },
5964cc286f3SDominic Spill { 3, "transparent data" },
5974cc286f3SDominic Spill /* 4 - 255 reserved */
5984cc286f3SDominic Spill { 0, NULL }
5994cc286f3SDominic Spill };
6004cc286f3SDominic Spill
6014cc286f3SDominic Spill static const value_string paging_scheme[] = {
6024cc286f3SDominic Spill { 0, "mandatory scheme" },
6034cc286f3SDominic Spill /* 1 - 255 reserved */
6044cc286f3SDominic Spill { 0, NULL }
6054cc286f3SDominic Spill };
6064cc286f3SDominic Spill
6074cc286f3SDominic Spill static const value_string paging_scheme_settings[] = {
6084cc286f3SDominic Spill /* for mandatory scheme: */
6094cc286f3SDominic Spill { 0, "R0" },
6104cc286f3SDominic Spill { 1, "R1" },
6114cc286f3SDominic Spill { 2, "R2" },
6124cc286f3SDominic Spill /* 3 - 255 reserved */
6134cc286f3SDominic Spill { 0, NULL }
6144cc286f3SDominic Spill };
6154cc286f3SDominic Spill
6164cc286f3SDominic Spill static const value_string afh_mode[] = {
6174cc286f3SDominic Spill { 0, "AFH disabled" },
6184cc286f3SDominic Spill { 1, "AFH enabled" },
6194cc286f3SDominic Spill /* 2 - 255 reserved */
6204cc286f3SDominic Spill { 0, NULL }
6214cc286f3SDominic Spill };
6224cc286f3SDominic Spill
6234cc286f3SDominic Spill static const value_string features_page[] = {
6244cc286f3SDominic Spill { 0, "standard features" },
6254cc286f3SDominic Spill /* 1 - 255 other feature pages */
6264cc286f3SDominic Spill { 0, NULL }
6274cc286f3SDominic Spill };
6284cc286f3SDominic Spill
6294cc286f3SDominic Spill static const value_string packet_type_table[] = {
6304cc286f3SDominic Spill { 0, "1 Mbps only" },
6314cc286f3SDominic Spill { 1, "2/3 Mbps" },
6324cc286f3SDominic Spill /* 2 - 255 reserved */
6334cc286f3SDominic Spill { 0, NULL }
6344cc286f3SDominic Spill };
6354cc286f3SDominic Spill
6364cc286f3SDominic Spill static const value_string negotiation_state[] = {
6374cc286f3SDominic Spill { 0, "Initiate negotiation" },
6384cc286f3SDominic Spill { 1, "The latest received set of negotiable parameters were possible but these parameters are preferred." },
6394cc286f3SDominic Spill { 2, "The latest received set of negotiable parameters would cause a reserved slot violation." },
6404cc286f3SDominic Spill { 3, "The latest received set of negotiable parameters would cause a latency violation." },
6414cc286f3SDominic Spill { 4, "The latest received set of negotiable parameters are not supported." },
6424cc286f3SDominic Spill /* 5 - 255 reserved */
6434cc286f3SDominic Spill { 0, NULL }
6444cc286f3SDominic Spill };
6454cc286f3SDominic Spill
6464cc286f3SDominic Spill static const value_string afh_reporting_mode[] = {
6474cc286f3SDominic Spill { 0, "AFH reporting disabled" },
6484cc286f3SDominic Spill { 1, "AFH reporting enabled" },
6494cc286f3SDominic Spill /* 2 - 255 reserved */
6504cc286f3SDominic Spill { 0, NULL }
6514cc286f3SDominic Spill };
6524cc286f3SDominic Spill
6534cc286f3SDominic Spill static const value_string io_capabilities[] = {
6544cc286f3SDominic Spill { 0, "Display Only" },
6554cc286f3SDominic Spill { 1, "Display Yes/No" },
6564cc286f3SDominic Spill { 2, "Keyboard Only" },
6574cc286f3SDominic Spill { 3, "No Input/No Output" },
6584cc286f3SDominic Spill /* 4 - 255 reserved */
6594cc286f3SDominic Spill { 0, NULL }
6604cc286f3SDominic Spill };
6614cc286f3SDominic Spill
6624cc286f3SDominic Spill static const value_string oob_auth_data[] = {
6634cc286f3SDominic Spill { 0, "No OOB Authentication Data received" },
6644cc286f3SDominic Spill { 1, "OOB Authentication Data received" },
6654cc286f3SDominic Spill /* 2 - 255 reserved */
6664cc286f3SDominic Spill { 0, NULL }
6674cc286f3SDominic Spill };
6684cc286f3SDominic Spill
6694cc286f3SDominic Spill static const value_string auth_requirements[] = {
6704cc286f3SDominic Spill { 0x00, "MITM Protection Not Required - No Bonding" },
6714cc286f3SDominic Spill { 0x01, "MITM Protection Required - No Bonding" },
6724cc286f3SDominic Spill { 0x02, "MITM Protection Not Required - Dedicated Bonding" },
6734cc286f3SDominic Spill { 0x03, "MITM Protection Required - Dedicated Bonding" },
6744cc286f3SDominic Spill { 0x04, "MITM Protection Not Required - General Bonding" },
6754cc286f3SDominic Spill { 0x05, "MITM Protection Required - General Bonding" },
6764cc286f3SDominic Spill /* 0x06 - 0xff reserved */
6774cc286f3SDominic Spill { 0, NULL }
6784cc286f3SDominic Spill };
6794cc286f3SDominic Spill
6804cc286f3SDominic Spill static const value_string power_adjust_req[] = {
6814cc286f3SDominic Spill { 0, "decrement power one step" },
6824cc286f3SDominic Spill { 1, "increment power one step" },
6834cc286f3SDominic Spill { 2, "increase to maximum power" },
6844cc286f3SDominic Spill /* 3 - 255 reserved */
6854cc286f3SDominic Spill { 0, NULL }
6864cc286f3SDominic Spill };
6874cc286f3SDominic Spill
6884cc286f3SDominic Spill static const value_string power_adjust_res[] = {
6894cc286f3SDominic Spill { 0, "not supported" },
6904cc286f3SDominic Spill { 1, "changed one step (not min or max)" },
6914cc286f3SDominic Spill { 2, "max power" },
6924cc286f3SDominic Spill { 3, "min power" },
6934cc286f3SDominic Spill /* 4 - 255 reserved */
6944cc286f3SDominic Spill { 0, NULL }
6954cc286f3SDominic Spill };
6964cc286f3SDominic Spill
6974cc286f3SDominic Spill static const value_string test_scenario[] = {
6984cc286f3SDominic Spill { 0, "Pause Test Mode" },
6994cc286f3SDominic Spill { 1, "Transmitter test - 0 pattern" },
7004cc286f3SDominic Spill { 2, "Transmitter test - 1 pattern" },
7014cc286f3SDominic Spill { 3, "Transmitter test - 1010 pattern" },
7024cc286f3SDominic Spill { 4, "Pseudorandom bit sequence" },
7034cc286f3SDominic Spill { 5, "Closed Loop Back - ACL packets" },
7044cc286f3SDominic Spill { 6, "Closed Loop Back - Synchronous packets" },
7054cc286f3SDominic Spill { 7, "ACL Packets without whitening" },
7064cc286f3SDominic Spill { 8, "Synchronous Packets without whitening" },
7074cc286f3SDominic Spill { 9, "Transmitter test - 1111 0000 pattern" },
7084cc286f3SDominic Spill /* 10 - 254 reserved */
7094cc286f3SDominic Spill { 255, "Exit Test Mode" },
7104cc286f3SDominic Spill { 0, NULL }
7114cc286f3SDominic Spill };
7124cc286f3SDominic Spill
7134cc286f3SDominic Spill static const value_string hopping_mode[] = {
7144cc286f3SDominic Spill { 0, "RX/TX on single frequency" },
7154cc286f3SDominic Spill { 1, "Normal hopping" },
7164cc286f3SDominic Spill /* 2 - 255 reserved */
7174cc286f3SDominic Spill { 0, NULL }
7184cc286f3SDominic Spill };
7194cc286f3SDominic Spill
7204cc286f3SDominic Spill static const value_string power_control_mode[] = {
7214cc286f3SDominic Spill { 0, "fixed TX output power" },
7224cc286f3SDominic Spill { 1, "adaptive power control" },
7234cc286f3SDominic Spill /* 2 - 255 reserved */
7244cc286f3SDominic Spill { 0, NULL }
7254cc286f3SDominic Spill };
7264cc286f3SDominic Spill
7274cc286f3SDominic Spill static const value_string esco_packet_type[] = {
7284cc286f3SDominic Spill { 0x00, "NULL/POLL" },
7294cc286f3SDominic Spill { 0x07, "EV3" },
7304cc286f3SDominic Spill { 0x0C, "EV4" },
7314cc286f3SDominic Spill { 0x0D, "EV5" },
7324cc286f3SDominic Spill { 0x26, "2-EV3" },
7334cc286f3SDominic Spill { 0x2C, "2-EV5" },
7344cc286f3SDominic Spill { 0x37, "3-EV3" },
7354cc286f3SDominic Spill { 0x3D, "3-EV5" },
7364cc286f3SDominic Spill /* other values reserved */
7374cc286f3SDominic Spill { 0, NULL }
7384cc286f3SDominic Spill };
7394cc286f3SDominic Spill
7404cc286f3SDominic Spill static const value_string notification_value[] = {
7414cc286f3SDominic Spill { 0, "passkey entry started" },
7424cc286f3SDominic Spill { 1, "passkey digit entered" },
7434cc286f3SDominic Spill { 2, "passkey digit erased" },
7444cc286f3SDominic Spill { 3, "passkey cleared" },
7454cc286f3SDominic Spill { 4, "passkey entry completed" },
7464cc286f3SDominic Spill /* 5 - 255 reserved */
7474cc286f3SDominic Spill { 0, NULL }
7484cc286f3SDominic Spill };
7494cc286f3SDominic Spill
7504cc286f3SDominic Spill /* initialize the subtree pointers */
7514cc286f3SDominic Spill static gint ett_lmp = -1;
7524cc286f3SDominic Spill static gint ett_lmp_pwradjres = -1;
7534cc286f3SDominic Spill static gint ett_lmp_rate = -1;
7544cc286f3SDominic Spill static gint ett_lmp_timectrl = -1;
7554cc286f3SDominic Spill
7564cc286f3SDominic Spill /* LMP PDUs with short opcodes */
7574cc286f3SDominic Spill
7584cc286f3SDominic Spill void
dissect_name_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)7594cc286f3SDominic Spill dissect_name_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
7604cc286f3SDominic Spill {
7614cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2);
7624cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
7634cc286f3SDominic Spill
7644cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_nameoffset, tvb, offset, 1, ENC_NA);
7654cc286f3SDominic Spill }
7664cc286f3SDominic Spill
7674cc286f3SDominic Spill void
dissect_name_res(proto_tree * tree,tvbuff_t * tvb,int offset,int len)7684cc286f3SDominic Spill dissect_name_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
7694cc286f3SDominic Spill {
7704cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17);
7714cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16);
7724cc286f3SDominic Spill
7734cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_nameoffset, tvb, offset, 1, ENC_NA);
7744cc286f3SDominic Spill offset += 1;
7754cc286f3SDominic Spill
7764cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_namelen, tvb, offset, 1, ENC_NA);
7774cc286f3SDominic Spill offset += 1;
7784cc286f3SDominic Spill
7794cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_namefrag, tvb, offset, 14, ENC_ASCII|ENC_NA);
7804cc286f3SDominic Spill }
7814cc286f3SDominic Spill
7824cc286f3SDominic Spill void
dissect_accepted(proto_tree * tree,tvbuff_t * tvb,int offset,int len)7834cc286f3SDominic Spill dissect_accepted(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
7844cc286f3SDominic Spill {
7854cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2);
7864cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
7874cc286f3SDominic Spill
7884cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_opinre, tvb, offset, 1, ENC_NA);
7894cc286f3SDominic Spill }
7904cc286f3SDominic Spill
7914cc286f3SDominic Spill void
dissect_not_accepted(proto_tree * tree,tvbuff_t * tvb,int offset,int len)7924cc286f3SDominic Spill dissect_not_accepted(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
7934cc286f3SDominic Spill {
7944cc286f3SDominic Spill DISSECTOR_ASSERT(len == 3);
7954cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2);
7964cc286f3SDominic Spill
7974cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_opinre, tvb, offset, 1, ENC_NA);
7984cc286f3SDominic Spill offset += 1;
7994cc286f3SDominic Spill
8004cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_err, tvb, offset, 1, ENC_NA);
8014cc286f3SDominic Spill }
8024cc286f3SDominic Spill
8034cc286f3SDominic Spill void
dissect_clkoffset_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)8044cc286f3SDominic Spill dissect_clkoffset_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
8054cc286f3SDominic Spill {
8064cc286f3SDominic Spill DISSECTOR_ASSERT(len == 1);
8074cc286f3SDominic Spill }
8084cc286f3SDominic Spill
8094cc286f3SDominic Spill void
dissect_clkoffset_res(proto_tree * tree,tvbuff_t * tvb,int offset,int len)8104cc286f3SDominic Spill dissect_clkoffset_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
8114cc286f3SDominic Spill {
8124cc286f3SDominic Spill DISSECTOR_ASSERT(len == 3);
8134cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2);
8144cc286f3SDominic Spill
8154cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_clkoffset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
8164cc286f3SDominic Spill }
8174cc286f3SDominic Spill
8184cc286f3SDominic Spill void
dissect_detach(proto_tree * tree,tvbuff_t * tvb,int offset,int len)8194cc286f3SDominic Spill dissect_detach(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
8204cc286f3SDominic Spill {
8214cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2);
8224cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
8234cc286f3SDominic Spill
8244cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_err, tvb, offset, 1, ENC_NA);
8254cc286f3SDominic Spill }
8264cc286f3SDominic Spill
8274cc286f3SDominic Spill void
dissect_in_rand(proto_tree * tree,tvbuff_t * tvb,int offset,int len)8284cc286f3SDominic Spill dissect_in_rand(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
8294cc286f3SDominic Spill {
8304cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17);
8314cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16);
8324cc286f3SDominic Spill
8334cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_rand, tvb, offset, 16, ENC_NA);
8344cc286f3SDominic Spill }
8354cc286f3SDominic Spill
8364cc286f3SDominic Spill void
dissect_comb_key(proto_tree * tree,tvbuff_t * tvb,int offset,int len)8374cc286f3SDominic Spill dissect_comb_key(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
8384cc286f3SDominic Spill {
8394cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17);
8404cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16);
8414cc286f3SDominic Spill
8424cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_rand, tvb, offset, 16, ENC_NA);
8434cc286f3SDominic Spill }
8444cc286f3SDominic Spill
8454cc286f3SDominic Spill void
dissect_unit_key(proto_tree * tree,tvbuff_t * tvb,int offset,int len)8464cc286f3SDominic Spill dissect_unit_key(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
8474cc286f3SDominic Spill {
8484cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17);
8494cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16);
8504cc286f3SDominic Spill
8514cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_key, tvb, offset, 16, ENC_NA);
8524cc286f3SDominic Spill }
8534cc286f3SDominic Spill
8544cc286f3SDominic Spill void
dissect_au_rand(proto_tree * tree,tvbuff_t * tvb,int offset,int len)8554cc286f3SDominic Spill dissect_au_rand(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
8564cc286f3SDominic Spill {
8574cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17);
8584cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16);
8594cc286f3SDominic Spill
8604cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_rand, tvb, offset, 16, ENC_NA);
8614cc286f3SDominic Spill }
8624cc286f3SDominic Spill
8634cc286f3SDominic Spill void
dissect_sres(proto_tree * tree,tvbuff_t * tvb,int offset,int len)8644cc286f3SDominic Spill dissect_sres(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
8654cc286f3SDominic Spill {
8664cc286f3SDominic Spill DISSECTOR_ASSERT(len == 5);
8674cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 4);
8684cc286f3SDominic Spill
8694cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_authres, tvb, offset, 4, ENC_NA);
8704cc286f3SDominic Spill }
8714cc286f3SDominic Spill
8724cc286f3SDominic Spill void
dissect_temp_rand(proto_tree * tree,tvbuff_t * tvb,int offset,int len)8734cc286f3SDominic Spill dissect_temp_rand(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
8744cc286f3SDominic Spill {
8754cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17);
8764cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16);
8774cc286f3SDominic Spill
8784cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_rand, tvb, offset, 16, ENC_NA);
8794cc286f3SDominic Spill }
8804cc286f3SDominic Spill
8814cc286f3SDominic Spill void
dissect_temp_key(proto_tree * tree,tvbuff_t * tvb,int offset,int len)8824cc286f3SDominic Spill dissect_temp_key(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
8834cc286f3SDominic Spill {
8844cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17);
8854cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16);
8864cc286f3SDominic Spill
8874cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_key, tvb, offset, 16, ENC_NA);
8884cc286f3SDominic Spill }
8894cc286f3SDominic Spill
8904cc286f3SDominic Spill void
dissect_encryption_mode_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)8914cc286f3SDominic Spill dissect_encryption_mode_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
8924cc286f3SDominic Spill {
8934cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2);
8944cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
8954cc286f3SDominic Spill
8964cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_cryptmode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
8974cc286f3SDominic Spill }
8984cc286f3SDominic Spill
8994cc286f3SDominic Spill void
dissect_encryption_key_size_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)9004cc286f3SDominic Spill dissect_encryption_key_size_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
9014cc286f3SDominic Spill {
9024cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2);
9034cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
9044cc286f3SDominic Spill
9054cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_keysz, tvb, offset, 1, ENC_LITTLE_ENDIAN);
9064cc286f3SDominic Spill }
9074cc286f3SDominic Spill
9084cc286f3SDominic Spill void
dissect_start_encryption_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)9094cc286f3SDominic Spill dissect_start_encryption_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
9104cc286f3SDominic Spill {
9114cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17);
9124cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16);
9134cc286f3SDominic Spill
9144cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_rand, tvb, offset, 16, ENC_NA);
9154cc286f3SDominic Spill }
9164cc286f3SDominic Spill
9174cc286f3SDominic Spill void
dissect_stop_encryption_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)9184cc286f3SDominic Spill dissect_stop_encryption_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
9194cc286f3SDominic Spill {
9204cc286f3SDominic Spill DISSECTOR_ASSERT(len == 1);
9214cc286f3SDominic Spill }
9224cc286f3SDominic Spill
9234cc286f3SDominic Spill void
dissect_switch_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)9244cc286f3SDominic Spill dissect_switch_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
9254cc286f3SDominic Spill {
9264cc286f3SDominic Spill DISSECTOR_ASSERT(len == 5);
9274cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 4);
9284cc286f3SDominic Spill
9294cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_swinst, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9304cc286f3SDominic Spill }
9314cc286f3SDominic Spill
9324cc286f3SDominic Spill void
dissect_hold(proto_tree * tree,tvbuff_t * tvb,int offset,int len)9334cc286f3SDominic Spill dissect_hold(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
9344cc286f3SDominic Spill {
9354cc286f3SDominic Spill DISSECTOR_ASSERT(len == 7);
9364cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 6);
9374cc286f3SDominic Spill
9384cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_htime, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9394cc286f3SDominic Spill offset += 2;
9404cc286f3SDominic Spill
9414cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_hinst, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9424cc286f3SDominic Spill }
9434cc286f3SDominic Spill
9444cc286f3SDominic Spill void
dissect_hold_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)9454cc286f3SDominic Spill dissect_hold_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
9464cc286f3SDominic Spill {
9474cc286f3SDominic Spill DISSECTOR_ASSERT(len == 7);
9484cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 6);
9494cc286f3SDominic Spill
9504cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_htime, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9514cc286f3SDominic Spill offset += 2;
9524cc286f3SDominic Spill
9534cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_hinst, tvb, offset, 4, ENC_LITTLE_ENDIAN);
9544cc286f3SDominic Spill }
9554cc286f3SDominic Spill
9564cc286f3SDominic Spill void
dissect_sniff_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)9574cc286f3SDominic Spill dissect_sniff_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
9584cc286f3SDominic Spill {
9594cc286f3SDominic Spill DISSECTOR_ASSERT(len == 10);
9604cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 9);
9614cc286f3SDominic Spill
9624cc286f3SDominic Spill proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_timectrl,
9634cc286f3SDominic Spill ett_lmp_timectrl, timectrl_fields, ENC_LITTLE_ENDIAN);
9644cc286f3SDominic Spill offset += 1;
9654cc286f3SDominic Spill
9664cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_dsniff, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9674cc286f3SDominic Spill offset += 2;
9684cc286f3SDominic Spill
9694cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_tsniff, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9704cc286f3SDominic Spill offset += 2;
9714cc286f3SDominic Spill
9724cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_sniffatt, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9734cc286f3SDominic Spill offset += 2;
9744cc286f3SDominic Spill
9754cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_sniffto, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9764cc286f3SDominic Spill }
9774cc286f3SDominic Spill
9784cc286f3SDominic Spill void
dissect_unsniff_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)9794cc286f3SDominic Spill dissect_unsniff_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
9804cc286f3SDominic Spill {
9814cc286f3SDominic Spill DISSECTOR_ASSERT(len == 1);
9824cc286f3SDominic Spill }
9834cc286f3SDominic Spill
9844cc286f3SDominic Spill void
dissect_park_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)9854cc286f3SDominic Spill dissect_park_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
9864cc286f3SDominic Spill {
9874cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17);
9884cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16);
9894cc286f3SDominic Spill
9904cc286f3SDominic Spill proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_timectrl,
9914cc286f3SDominic Spill ett_lmp_timectrl, timectrl_fields, ENC_LITTLE_ENDIAN);
9924cc286f3SDominic Spill offset += 1;
9934cc286f3SDominic Spill
9944cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_db, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9954cc286f3SDominic Spill offset += 2;
9964cc286f3SDominic Spill
9974cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_tb, tvb, offset, 2, ENC_LITTLE_ENDIAN);
9984cc286f3SDominic Spill offset += 2;
9994cc286f3SDominic Spill
10004cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_nb, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10014cc286f3SDominic Spill offset += 1;
10024cc286f3SDominic Spill
10034cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_deltab, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10044cc286f3SDominic Spill offset += 1;
10054cc286f3SDominic Spill
10064cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pmaddr, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10074cc286f3SDominic Spill offset += 1;
10084cc286f3SDominic Spill
10094cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_araddr, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10104cc286f3SDominic Spill offset += 1;
10114cc286f3SDominic Spill
10124cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_nbsleep, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10134cc286f3SDominic Spill offset += 1;
10144cc286f3SDominic Spill
10154cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_dbsleep, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10164cc286f3SDominic Spill offset += 1;
10174cc286f3SDominic Spill
10184cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_daccess, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10194cc286f3SDominic Spill offset += 1;
10204cc286f3SDominic Spill
10214cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_taccess, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10224cc286f3SDominic Spill offset += 1;
10234cc286f3SDominic Spill
10244cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_naccslots, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10254cc286f3SDominic Spill offset += 1;
10264cc286f3SDominic Spill
10274cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_npoll, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10284cc286f3SDominic Spill offset += 1;
10294cc286f3SDominic Spill
10304cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_maccess, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10314cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_accscheme, tvb, offset, 1, ENC_NA);
10324cc286f3SDominic Spill }
10334cc286f3SDominic Spill
10344cc286f3SDominic Spill void
dissect_set_broadcast_scan_window(proto_tree * tree,tvbuff_t * tvb,int offset,int len)10354cc286f3SDominic Spill dissect_set_broadcast_scan_window(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
10364cc286f3SDominic Spill {
10374cc286f3SDominic Spill int db_present;
10384cc286f3SDominic Spill
10394cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
10404cc286f3SDominic Spill
10414cc286f3SDominic Spill proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_timectrl,
10424cc286f3SDominic Spill ett_lmp_timectrl, timectrl_fields, ENC_LITTLE_ENDIAN);
10434cc286f3SDominic Spill
10444cc286f3SDominic Spill /* bit0 of timing control flags indicates presence of db */
10454cc286f3SDominic Spill db_present = tvb_get_guint8(tvb, offset) & 0x01;
10464cc286f3SDominic Spill offset += 1;
10474cc286f3SDominic Spill
10484cc286f3SDominic Spill if (db_present) {
10494cc286f3SDominic Spill DISSECTOR_ASSERT(len == 6);
10504cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 4);
10514cc286f3SDominic Spill
10524cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_db, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10534cc286f3SDominic Spill offset += 2;
10544cc286f3SDominic Spill } else {
10554cc286f3SDominic Spill DISSECTOR_ASSERT(len == 4);
10564cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2);
10574cc286f3SDominic Spill }
10584cc286f3SDominic Spill
10594cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_bsw, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10604cc286f3SDominic Spill }
10614cc286f3SDominic Spill
10624cc286f3SDominic Spill void
dissect_modify_beacon(proto_tree * tree,tvbuff_t * tvb,int offset,int len)10634cc286f3SDominic Spill dissect_modify_beacon(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
10644cc286f3SDominic Spill {
10654cc286f3SDominic Spill int db_present;
10664cc286f3SDominic Spill
10674cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
10684cc286f3SDominic Spill
10694cc286f3SDominic Spill proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_timectrl,
10704cc286f3SDominic Spill ett_lmp_timectrl, timectrl_fields, ENC_LITTLE_ENDIAN);
10714cc286f3SDominic Spill
10724cc286f3SDominic Spill /* bit0 of timing control flags indicates presence of db */
10734cc286f3SDominic Spill db_present = tvb_get_guint8(tvb, offset) & 0x01;
10744cc286f3SDominic Spill offset += 1;
10754cc286f3SDominic Spill
10764cc286f3SDominic Spill if (db_present) {
10774cc286f3SDominic Spill DISSECTOR_ASSERT(len == 13);
10784cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 11);
10794cc286f3SDominic Spill
10804cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_db, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10814cc286f3SDominic Spill offset += 2;
10824cc286f3SDominic Spill } else {
10834cc286f3SDominic Spill DISSECTOR_ASSERT(len == 11);
10844cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 9);
10854cc286f3SDominic Spill }
10864cc286f3SDominic Spill
10874cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_tb, tvb, offset, 2, ENC_LITTLE_ENDIAN);
10884cc286f3SDominic Spill offset += 2;
10894cc286f3SDominic Spill
10904cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_nb, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10914cc286f3SDominic Spill offset += 1;
10924cc286f3SDominic Spill
10934cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_deltab, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10944cc286f3SDominic Spill offset += 1;
10954cc286f3SDominic Spill
10964cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_daccess, tvb, offset, 1, ENC_LITTLE_ENDIAN);
10974cc286f3SDominic Spill offset += 1;
10984cc286f3SDominic Spill
10994cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_taccess, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11004cc286f3SDominic Spill offset += 1;
11014cc286f3SDominic Spill
11024cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_naccslots, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11034cc286f3SDominic Spill offset += 1;
11044cc286f3SDominic Spill
11054cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_npoll, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11064cc286f3SDominic Spill offset += 1;
11074cc286f3SDominic Spill
11084cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_maccess, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11094cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_accscheme, tvb, offset, 1, ENC_NA);
11104cc286f3SDominic Spill }
11114cc286f3SDominic Spill
11124cc286f3SDominic Spill void
dissect_unpark_bd_addr_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)11134cc286f3SDominic Spill dissect_unpark_bd_addr_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
11144cc286f3SDominic Spill {
11154cc286f3SDominic Spill int db_present;
11164cc286f3SDominic Spill proto_item *item;
11174cc286f3SDominic Spill
11184cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
11194cc286f3SDominic Spill
11204cc286f3SDominic Spill proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_timectrl,
11214cc286f3SDominic Spill ett_lmp_timectrl, timectrl_fields, ENC_LITTLE_ENDIAN);
11224cc286f3SDominic Spill
11234cc286f3SDominic Spill /* bit0 of timing control flags indicates presence of db */
11244cc286f3SDominic Spill db_present = tvb_get_guint8(tvb, offset) & 0x01;
11254cc286f3SDominic Spill offset += 1;
11264cc286f3SDominic Spill
11274cc286f3SDominic Spill if (db_present) {
11284cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17);
11294cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 15);
11304cc286f3SDominic Spill
11314cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_db, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11324cc286f3SDominic Spill offset += 2;
11334cc286f3SDominic Spill } else {
11344cc286f3SDominic Spill DISSECTOR_ASSERT(len == 15);
11354cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 13);
11364cc286f3SDominic Spill }
11374cc286f3SDominic Spill
11384cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_ltaddr1, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11394cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_ltaddr2, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11404cc286f3SDominic Spill offset += 1;
11414cc286f3SDominic Spill
11424cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_bdaddr1, tvb, offset, 6, ENC_LITTLE_ENDIAN);
11434cc286f3SDominic Spill offset += 6;
11444cc286f3SDominic Spill
11454cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_bdaddr2, tvb, offset, 6, ENC_LITTLE_ENDIAN);
11464cc286f3SDominic Spill offset += 6;
11474cc286f3SDominic Spill }
11484cc286f3SDominic Spill
11494cc286f3SDominic Spill void
dissect_unpark_pm_addr_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)11504cc286f3SDominic Spill dissect_unpark_pm_addr_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
11514cc286f3SDominic Spill {
11524cc286f3SDominic Spill int db_present;
11534cc286f3SDominic Spill
11544cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
11554cc286f3SDominic Spill
11564cc286f3SDominic Spill proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_timectrl,
11574cc286f3SDominic Spill ett_lmp_timectrl, timectrl_fields, ENC_LITTLE_ENDIAN);
11584cc286f3SDominic Spill
11594cc286f3SDominic Spill /* bit0 of timing control flags indicates presence of db */
11604cc286f3SDominic Spill db_present = tvb_get_guint8(tvb, offset) & 0x01;
11614cc286f3SDominic Spill offset += 1;
11624cc286f3SDominic Spill
11634cc286f3SDominic Spill if (db_present) {
11644cc286f3SDominic Spill DISSECTOR_ASSERT(len == 15);
11654cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 13);
11664cc286f3SDominic Spill
11674cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_db, tvb, offset, 2, ENC_LITTLE_ENDIAN);
11684cc286f3SDominic Spill offset += 2;
11694cc286f3SDominic Spill } else {
11704cc286f3SDominic Spill DISSECTOR_ASSERT(len == 13);
11714cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 11);
11724cc286f3SDominic Spill }
11734cc286f3SDominic Spill
11744cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_ltaddr1, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11754cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_ltaddr2, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11764cc286f3SDominic Spill offset += 1;
11774cc286f3SDominic Spill
11784cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pmaddr1, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11794cc286f3SDominic Spill offset += 1;
11804cc286f3SDominic Spill
11814cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pmaddr2, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11824cc286f3SDominic Spill offset += 1;
11834cc286f3SDominic Spill
11844cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_ltaddr3, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11854cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_ltaddr4, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11864cc286f3SDominic Spill offset += 1;
11874cc286f3SDominic Spill
11884cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pmaddr3, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11894cc286f3SDominic Spill offset += 1;
11904cc286f3SDominic Spill
11914cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pmaddr4, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11924cc286f3SDominic Spill offset += 1;
11934cc286f3SDominic Spill
11944cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_ltaddr5, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11954cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_ltaddr6, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11964cc286f3SDominic Spill offset += 1;
11974cc286f3SDominic Spill
11984cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pmaddr5, tvb, offset, 1, ENC_LITTLE_ENDIAN);
11994cc286f3SDominic Spill offset += 1;
12004cc286f3SDominic Spill
12014cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pmaddr6, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12024cc286f3SDominic Spill offset += 1;
12034cc286f3SDominic Spill
12044cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_ltaddr7, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12054cc286f3SDominic Spill offset += 1;
12064cc286f3SDominic Spill
12074cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pmaddr7, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12084cc286f3SDominic Spill }
12094cc286f3SDominic Spill
12104cc286f3SDominic Spill void
dissect_incr_power_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)12114cc286f3SDominic Spill dissect_incr_power_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
12124cc286f3SDominic Spill {
12134cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2);
12144cc286f3SDominic Spill
12154cc286f3SDominic Spill /* skipping one byte "for future use" */
12164cc286f3SDominic Spill }
12174cc286f3SDominic Spill
12184cc286f3SDominic Spill void
dissect_decr_power_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)12194cc286f3SDominic Spill dissect_decr_power_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
12204cc286f3SDominic Spill {
12214cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2);
12224cc286f3SDominic Spill
12234cc286f3SDominic Spill /* skipping one byte "for future use" */
12244cc286f3SDominic Spill }
12254cc286f3SDominic Spill
12264cc286f3SDominic Spill void
dissect_max_power(proto_tree * tree,tvbuff_t * tvb,int offset,int len)12274cc286f3SDominic Spill dissect_max_power(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
12284cc286f3SDominic Spill {
12294cc286f3SDominic Spill DISSECTOR_ASSERT(len == 1);
12304cc286f3SDominic Spill }
12314cc286f3SDominic Spill
12324cc286f3SDominic Spill void
dissect_min_power(proto_tree * tree,tvbuff_t * tvb,int offset,int len)12334cc286f3SDominic Spill dissect_min_power(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
12344cc286f3SDominic Spill {
12354cc286f3SDominic Spill DISSECTOR_ASSERT(len == 1);
12364cc286f3SDominic Spill }
12374cc286f3SDominic Spill
12384cc286f3SDominic Spill void
dissect_auto_rate(proto_tree * tree,tvbuff_t * tvb,int offset,int len)12394cc286f3SDominic Spill dissect_auto_rate(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
12404cc286f3SDominic Spill {
12414cc286f3SDominic Spill DISSECTOR_ASSERT(len == 1);
12424cc286f3SDominic Spill }
12434cc286f3SDominic Spill
12444cc286f3SDominic Spill void
dissect_preferred_rate(proto_tree * tree,tvbuff_t * tvb,int offset,int len)12454cc286f3SDominic Spill dissect_preferred_rate(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
12464cc286f3SDominic Spill {
12474cc286f3SDominic Spill proto_item *rate_item;
12484cc286f3SDominic Spill proto_tree *rate_tree;
12494cc286f3SDominic Spill
12504cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2);
12514cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
12524cc286f3SDominic Spill
12534cc286f3SDominic Spill rate_item = proto_tree_add_item(tree, hf_lmp_rate, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12544cc286f3SDominic Spill rate_tree = proto_item_add_subtree(rate_item, ett_lmp_rate);
12554cc286f3SDominic Spill
12564cc286f3SDominic Spill proto_tree_add_item(rate_tree, hf_lmp_rate_fec, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12574cc286f3SDominic Spill proto_tree_add_item(rate_tree, hf_lmp_rate_size, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12584cc286f3SDominic Spill proto_tree_add_item(rate_tree, hf_lmp_rate_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12594cc286f3SDominic Spill proto_tree_add_item(rate_tree, hf_lmp_rate_edrsize, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12604cc286f3SDominic Spill }
12614cc286f3SDominic Spill
12624cc286f3SDominic Spill void
dissect_version_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)12634cc286f3SDominic Spill dissect_version_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
12644cc286f3SDominic Spill {
12654cc286f3SDominic Spill DISSECTOR_ASSERT(len == 6);
12664cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 5);
12674cc286f3SDominic Spill
12684cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_versnr, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12694cc286f3SDominic Spill offset += 1;
12704cc286f3SDominic Spill
12714cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_compid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12724cc286f3SDominic Spill offset += 2;
12734cc286f3SDominic Spill
12744cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_subversnr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12754cc286f3SDominic Spill }
12764cc286f3SDominic Spill
12774cc286f3SDominic Spill void
dissect_version_res(proto_tree * tree,tvbuff_t * tvb,int offset,int len)12784cc286f3SDominic Spill dissect_version_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
12794cc286f3SDominic Spill {
12804cc286f3SDominic Spill DISSECTOR_ASSERT(len == 6);
12814cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 5);
12824cc286f3SDominic Spill
12834cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_versnr, tvb, offset, 1, ENC_LITTLE_ENDIAN);
12844cc286f3SDominic Spill offset += 1;
12854cc286f3SDominic Spill
12864cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_compid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12874cc286f3SDominic Spill offset += 2;
12884cc286f3SDominic Spill
12894cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_subversnr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
12904cc286f3SDominic Spill }
12914cc286f3SDominic Spill
12924cc286f3SDominic Spill void
dissect_features_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)12934cc286f3SDominic Spill dissect_features_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
12944cc286f3SDominic Spill {
12954cc286f3SDominic Spill DISSECTOR_ASSERT(len == 9);
12964cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 8);
12974cc286f3SDominic Spill
12984cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_features, tvb, offset, 8, ENC_NA);
12994cc286f3SDominic Spill }
13004cc286f3SDominic Spill
13014cc286f3SDominic Spill void
dissect_features_res(proto_tree * tree,tvbuff_t * tvb,int offset,int len)13024cc286f3SDominic Spill dissect_features_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
13034cc286f3SDominic Spill {
13044cc286f3SDominic Spill DISSECTOR_ASSERT(len == 9);
13054cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 8);
13064cc286f3SDominic Spill
13074cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_features, tvb, offset, 8, ENC_NA);
13084cc286f3SDominic Spill }
13094cc286f3SDominic Spill
13104cc286f3SDominic Spill void
dissect_quality_of_service(proto_tree * tree,tvbuff_t * tvb,int offset,int len)13114cc286f3SDominic Spill dissect_quality_of_service(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
13124cc286f3SDominic Spill {
13134cc286f3SDominic Spill DISSECTOR_ASSERT(len == 4);
13144cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 3);
13154cc286f3SDominic Spill
13164cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pollintvl, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13174cc286f3SDominic Spill offset += 2;
13184cc286f3SDominic Spill
13194cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_nbc, tvb, offset, 1, ENC_LITTLE_ENDIAN);
13204cc286f3SDominic Spill }
13214cc286f3SDominic Spill
13224cc286f3SDominic Spill void
dissect_quality_of_service_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)13234cc286f3SDominic Spill dissect_quality_of_service_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
13244cc286f3SDominic Spill {
13254cc286f3SDominic Spill DISSECTOR_ASSERT(len == 4);
13264cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 3);
13274cc286f3SDominic Spill
13284cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pollintvl, tvb, offset, 2, ENC_LITTLE_ENDIAN);
13294cc286f3SDominic Spill offset += 2;
13304cc286f3SDominic Spill
13314cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_nbc, tvb, offset, 1, ENC_LITTLE_ENDIAN);
13324cc286f3SDominic Spill }
13334cc286f3SDominic Spill
13344cc286f3SDominic Spill void
dissect_sco_link_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)13354cc286f3SDominic Spill dissect_sco_link_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
13364cc286f3SDominic Spill {
13374cc286f3SDominic Spill DISSECTOR_ASSERT(len == 7);
13384cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 6);
13394cc286f3SDominic Spill
13404cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_scohdl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
13414cc286f3SDominic Spill offset += 1;
13424cc286f3SDominic Spill
13434cc286f3SDominic Spill proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_timectrl,
13444cc286f3SDominic Spill ett_lmp_timectrl, timectrl_fields, ENC_LITTLE_ENDIAN);
13454cc286f3SDominic Spill offset += 1;
13464cc286f3SDominic Spill
13474cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_dsco, tvb, offset, 1, ENC_LITTLE_ENDIAN);
13484cc286f3SDominic Spill offset += 1;
13494cc286f3SDominic Spill
13504cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_tsco, tvb, offset, 1, ENC_LITTLE_ENDIAN);
13514cc286f3SDominic Spill offset += 1;
13524cc286f3SDominic Spill
13534cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_scopkt, tvb, offset, 1, ENC_LITTLE_ENDIAN);
13544cc286f3SDominic Spill offset += 1;
13554cc286f3SDominic Spill
13564cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_airmode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
13574cc286f3SDominic Spill }
13584cc286f3SDominic Spill
13594cc286f3SDominic Spill void
dissect_remove_sco_link_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)13604cc286f3SDominic Spill dissect_remove_sco_link_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
13614cc286f3SDominic Spill {
13624cc286f3SDominic Spill DISSECTOR_ASSERT(len == 3);
13634cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2);
13644cc286f3SDominic Spill
13654cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_scohdl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
13664cc286f3SDominic Spill offset += 1;
13674cc286f3SDominic Spill
13684cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_err, tvb, offset, 1, ENC_NA);
13694cc286f3SDominic Spill }
13704cc286f3SDominic Spill
13714cc286f3SDominic Spill void
dissect_max_slot(proto_tree * tree,tvbuff_t * tvb,int offset,int len)13724cc286f3SDominic Spill dissect_max_slot(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
13734cc286f3SDominic Spill {
13744cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2);
13754cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
13764cc286f3SDominic Spill
13774cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_maxslots, tvb, offset, 1, ENC_LITTLE_ENDIAN);
13784cc286f3SDominic Spill }
13794cc286f3SDominic Spill
13804cc286f3SDominic Spill void
dissect_max_slot_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)13814cc286f3SDominic Spill dissect_max_slot_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
13824cc286f3SDominic Spill {
13834cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2);
13844cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
13854cc286f3SDominic Spill
13864cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_maxslots, tvb, offset, 1, ENC_LITTLE_ENDIAN);
13874cc286f3SDominic Spill }
13884cc286f3SDominic Spill
13894cc286f3SDominic Spill void
dissect_timing_accuracy_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)13904cc286f3SDominic Spill dissect_timing_accuracy_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
13914cc286f3SDominic Spill {
13924cc286f3SDominic Spill DISSECTOR_ASSERT(len == 1);
13934cc286f3SDominic Spill }
13944cc286f3SDominic Spill
13954cc286f3SDominic Spill void
dissect_timing_accuracy_res(proto_tree * tree,tvbuff_t * tvb,int offset,int len)13964cc286f3SDominic Spill dissect_timing_accuracy_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
13974cc286f3SDominic Spill {
13984cc286f3SDominic Spill DISSECTOR_ASSERT(len == 3);
13994cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2);
14004cc286f3SDominic Spill
14014cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_drift, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14024cc286f3SDominic Spill offset += 1;
14034cc286f3SDominic Spill
14044cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_jitter, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14054cc286f3SDominic Spill }
14064cc286f3SDominic Spill
14074cc286f3SDominic Spill void
dissect_setup_complete(proto_tree * tree,tvbuff_t * tvb,int offset,int len)14084cc286f3SDominic Spill dissect_setup_complete(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
14094cc286f3SDominic Spill {
14104cc286f3SDominic Spill DISSECTOR_ASSERT(len == 1);
14114cc286f3SDominic Spill }
14124cc286f3SDominic Spill
14134cc286f3SDominic Spill void
dissect_use_semi_permanent_key(proto_tree * tree,tvbuff_t * tvb,int offset,int len)14144cc286f3SDominic Spill dissect_use_semi_permanent_key(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
14154cc286f3SDominic Spill {
14164cc286f3SDominic Spill DISSECTOR_ASSERT(len == 1);
14174cc286f3SDominic Spill }
14184cc286f3SDominic Spill
14194cc286f3SDominic Spill void
dissect_host_connection_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)14204cc286f3SDominic Spill dissect_host_connection_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
14214cc286f3SDominic Spill {
14224cc286f3SDominic Spill DISSECTOR_ASSERT(len == 1);
14234cc286f3SDominic Spill }
14244cc286f3SDominic Spill
14254cc286f3SDominic Spill void
dissect_slot_offset(proto_tree * tree,tvbuff_t * tvb,int offset,int len)14264cc286f3SDominic Spill dissect_slot_offset(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
14274cc286f3SDominic Spill {
14284cc286f3SDominic Spill DISSECTOR_ASSERT(len == 9);
14294cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 8);
14304cc286f3SDominic Spill
14314cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_slotoffset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14324cc286f3SDominic Spill offset += 2;
14334cc286f3SDominic Spill
14344cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_bdaddr, tvb, offset, 6, ENC_LITTLE_ENDIAN);
14354cc286f3SDominic Spill }
14364cc286f3SDominic Spill
14374cc286f3SDominic Spill void
dissect_page_mode_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)14384cc286f3SDominic Spill dissect_page_mode_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
14394cc286f3SDominic Spill {
14404cc286f3SDominic Spill DISSECTOR_ASSERT(len == 3);
14414cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2);
14424cc286f3SDominic Spill
14434cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pagesch, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14444cc286f3SDominic Spill offset += 1;
14454cc286f3SDominic Spill
14464cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pssettings, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14474cc286f3SDominic Spill }
14484cc286f3SDominic Spill
14494cc286f3SDominic Spill void
dissect_page_scan_mode_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)14504cc286f3SDominic Spill dissect_page_scan_mode_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
14514cc286f3SDominic Spill {
14524cc286f3SDominic Spill DISSECTOR_ASSERT(len == 3);
14534cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2);
14544cc286f3SDominic Spill
14554cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pagesch, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14564cc286f3SDominic Spill offset += 1;
14574cc286f3SDominic Spill
14584cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pssettings, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14594cc286f3SDominic Spill }
14604cc286f3SDominic Spill
14614cc286f3SDominic Spill void
dissect_supervision_timeout(proto_tree * tree,tvbuff_t * tvb,int offset,int len)14624cc286f3SDominic Spill dissect_supervision_timeout(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
14634cc286f3SDominic Spill {
14644cc286f3SDominic Spill DISSECTOR_ASSERT(len == 3);
14654cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2);
14664cc286f3SDominic Spill
14674cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_suptimeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
14684cc286f3SDominic Spill }
14694cc286f3SDominic Spill
14704cc286f3SDominic Spill void
dissect_test_activate(proto_tree * tree,tvbuff_t * tvb,int offset,int len)14714cc286f3SDominic Spill dissect_test_activate(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
14724cc286f3SDominic Spill {
14734cc286f3SDominic Spill DISSECTOR_ASSERT(len == 1);
14744cc286f3SDominic Spill }
14754cc286f3SDominic Spill
14764cc286f3SDominic Spill void
dissect_test_control(proto_tree * tree,tvbuff_t * tvb,int offset,int len)14774cc286f3SDominic Spill dissect_test_control(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
14784cc286f3SDominic Spill {
14794cc286f3SDominic Spill DISSECTOR_ASSERT(len == 10);
14804cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 9);
14814cc286f3SDominic Spill
14824cc286f3SDominic Spill /* FIXME these fields should all be XORed with 0x55. . . */
14834cc286f3SDominic Spill
14844cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_testscen, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14854cc286f3SDominic Spill offset += 1;
14864cc286f3SDominic Spill
14874cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_hopmode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14884cc286f3SDominic Spill offset += 1;
14894cc286f3SDominic Spill
14904cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_txfreq, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14914cc286f3SDominic Spill offset += 1;
14924cc286f3SDominic Spill
14934cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_rxfreq, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14944cc286f3SDominic Spill offset += 1;
14954cc286f3SDominic Spill
14964cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pcmode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
14974cc286f3SDominic Spill offset += 1;
14984cc286f3SDominic Spill
14994cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pollper, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15004cc286f3SDominic Spill offset += 1;
15014cc286f3SDominic Spill
15024cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pkttype, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15034cc286f3SDominic Spill offset += 1;
15044cc286f3SDominic Spill
15054cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_testlen, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15064cc286f3SDominic Spill }
15074cc286f3SDominic Spill
15084cc286f3SDominic Spill void
dissect_encryption_key_size_mask_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)15094cc286f3SDominic Spill dissect_encryption_key_size_mask_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
15104cc286f3SDominic Spill {
15114cc286f3SDominic Spill DISSECTOR_ASSERT(len == 1);
15124cc286f3SDominic Spill }
15134cc286f3SDominic Spill
15144cc286f3SDominic Spill void
dissect_encryption_key_size_mask_res(proto_tree * tree,tvbuff_t * tvb,int offset,int len)15154cc286f3SDominic Spill dissect_encryption_key_size_mask_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
15164cc286f3SDominic Spill {
15174cc286f3SDominic Spill DISSECTOR_ASSERT(len == 3);
15184cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2);
15194cc286f3SDominic Spill
15204cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_ksmask, tvb, offset, 2, ENC_LITTLE_ENDIAN);
15214cc286f3SDominic Spill }
15224cc286f3SDominic Spill
15234cc286f3SDominic Spill void
dissect_set_afh(proto_tree * tree,tvbuff_t * tvb,int offset,int len)15244cc286f3SDominic Spill dissect_set_afh(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
15254cc286f3SDominic Spill {
15264cc286f3SDominic Spill DISSECTOR_ASSERT(len == 16);
15274cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 15);
15284cc286f3SDominic Spill
15294cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_afhinst, tvb, offset, 4, ENC_LITTLE_ENDIAN);
15304cc286f3SDominic Spill offset += 4;
15314cc286f3SDominic Spill
15324cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_afhmode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15334cc286f3SDominic Spill offset += 1;
15344cc286f3SDominic Spill
15354cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_afhchmap, tvb, offset, 10, ENC_NA);
15364cc286f3SDominic Spill }
15374cc286f3SDominic Spill
15384cc286f3SDominic Spill void
dissect_encapsulated_header(proto_tree * tree,tvbuff_t * tvb,int offset,int len)15394cc286f3SDominic Spill dissect_encapsulated_header(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
15404cc286f3SDominic Spill {
15414cc286f3SDominic Spill DISSECTOR_ASSERT(len == 4);
15424cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 3);
15434cc286f3SDominic Spill
15444cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_encmaj, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15454cc286f3SDominic Spill offset += 1;
15464cc286f3SDominic Spill
15474cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_encmin, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15484cc286f3SDominic Spill offset += 1;
15494cc286f3SDominic Spill
15504cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_enclen, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15514cc286f3SDominic Spill }
15524cc286f3SDominic Spill
15534cc286f3SDominic Spill void
dissect_encapsulated_payload(proto_tree * tree,tvbuff_t * tvb,int offset,int len)15544cc286f3SDominic Spill dissect_encapsulated_payload(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
15554cc286f3SDominic Spill {
15564cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17);
15574cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16);
15584cc286f3SDominic Spill
15594cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_encdata, tvb, offset, 16, ENC_NA);
15604cc286f3SDominic Spill }
15614cc286f3SDominic Spill
15624cc286f3SDominic Spill void
dissect_simple_pairing_confirm(proto_tree * tree,tvbuff_t * tvb,int offset,int len)15634cc286f3SDominic Spill dissect_simple_pairing_confirm(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
15644cc286f3SDominic Spill {
15654cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17);
15664cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16);
15674cc286f3SDominic Spill
15684cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_commit, tvb, offset, 16, ENC_NA);
15694cc286f3SDominic Spill }
15704cc286f3SDominic Spill
15714cc286f3SDominic Spill void
dissect_simple_pairing_number(proto_tree * tree,tvbuff_t * tvb,int offset,int len)15724cc286f3SDominic Spill dissect_simple_pairing_number(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
15734cc286f3SDominic Spill {
15744cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17);
15754cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16);
15764cc286f3SDominic Spill
15774cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_nonce, tvb, offset, 16, ENC_NA);
15784cc286f3SDominic Spill }
15794cc286f3SDominic Spill
15804cc286f3SDominic Spill void
dissect_dhkey_check(proto_tree * tree,tvbuff_t * tvb,int offset,int len)15814cc286f3SDominic Spill dissect_dhkey_check(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
15824cc286f3SDominic Spill {
15834cc286f3SDominic Spill DISSECTOR_ASSERT(len == 17);
15844cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16);
15854cc286f3SDominic Spill
15864cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_confirm, tvb, offset, 16, ENC_NA);
15874cc286f3SDominic Spill }
15884cc286f3SDominic Spill
15894cc286f3SDominic Spill /* LMP PDUs with extended opcodes */
15904cc286f3SDominic Spill
15914cc286f3SDominic Spill void
dissect_accepted_ext(proto_tree * tree,tvbuff_t * tvb,int offset,int len)15924cc286f3SDominic Spill dissect_accepted_ext(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
15934cc286f3SDominic Spill {
15944cc286f3SDominic Spill DISSECTOR_ASSERT(len == 4);
15954cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2);
15964cc286f3SDominic Spill
15974cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_opinre, tvb, offset, 1, ENC_LITTLE_ENDIAN);
15984cc286f3SDominic Spill offset += 1;
15994cc286f3SDominic Spill
16004cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_eopinre, tvb, offset, 1, ENC_LITTLE_ENDIAN);
16014cc286f3SDominic Spill }
16024cc286f3SDominic Spill
16034cc286f3SDominic Spill void
dissect_not_accepted_ext(proto_tree * tree,tvbuff_t * tvb,int offset,int len)16044cc286f3SDominic Spill dissect_not_accepted_ext(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
16054cc286f3SDominic Spill {
1606*8d164ca2SDennis Mantz DISSECTOR_ASSERT(len == 5);
1607*8d164ca2SDennis Mantz DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 3);
16084cc286f3SDominic Spill
16094cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_opinre, tvb, offset, 1, ENC_LITTLE_ENDIAN);
16104cc286f3SDominic Spill offset += 1;
16114cc286f3SDominic Spill
16124cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_eopinre, tvb, offset, 1, ENC_LITTLE_ENDIAN);
16134cc286f3SDominic Spill offset += 1;
16144cc286f3SDominic Spill
16154cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_err, tvb, offset, 1, ENC_NA);
16164cc286f3SDominic Spill }
16174cc286f3SDominic Spill
16184cc286f3SDominic Spill void
dissect_features_req_ext(proto_tree * tree,tvbuff_t * tvb,int offset,int len)16194cc286f3SDominic Spill dissect_features_req_ext(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
16204cc286f3SDominic Spill {
16214cc286f3SDominic Spill DISSECTOR_ASSERT(len == 12);
16224cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 10);
16234cc286f3SDominic Spill
16244cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_fpage, tvb, offset, 1, ENC_LITTLE_ENDIAN);
16254cc286f3SDominic Spill offset += 1;
16264cc286f3SDominic Spill
16274cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_maxsp, tvb, offset, 1, ENC_LITTLE_ENDIAN);
16284cc286f3SDominic Spill offset += 1;
16294cc286f3SDominic Spill
16304cc286f3SDominic Spill /*
16314cc286f3SDominic Spill * extended features might need to be different from hf_lmp_features
16324cc286f3SDominic Spill * if hf_lmp_features is broken out
16334cc286f3SDominic Spill */
16344cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_features, tvb, offset, 8, ENC_NA);
16354cc286f3SDominic Spill }
16364cc286f3SDominic Spill
16374cc286f3SDominic Spill void
dissect_features_res_ext(proto_tree * tree,tvbuff_t * tvb,int offset,int len)16384cc286f3SDominic Spill dissect_features_res_ext(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
16394cc286f3SDominic Spill {
16404cc286f3SDominic Spill DISSECTOR_ASSERT(len == 12);
16414cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 10);
16424cc286f3SDominic Spill
16434cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_fpage, tvb, offset, 1, ENC_LITTLE_ENDIAN);
16444cc286f3SDominic Spill offset += 1;
16454cc286f3SDominic Spill
16464cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_maxsp, tvb, offset, 1, ENC_LITTLE_ENDIAN);
16474cc286f3SDominic Spill offset += 1;
16484cc286f3SDominic Spill
16494cc286f3SDominic Spill /*
16504cc286f3SDominic Spill * extended features might need to be different from hf_lmp_features
16514cc286f3SDominic Spill * if hf_lmp_features is broken out
16524cc286f3SDominic Spill */
16534cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_features, tvb, offset, 8, ENC_NA);
16544cc286f3SDominic Spill }
16554cc286f3SDominic Spill
16564cc286f3SDominic Spill void
dissect_packet_type_table_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)16574cc286f3SDominic Spill dissect_packet_type_table_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
16584cc286f3SDominic Spill {
16594cc286f3SDominic Spill DISSECTOR_ASSERT(len == 3);
16604cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
16614cc286f3SDominic Spill
16624cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pkttypetbl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
16634cc286f3SDominic Spill }
16644cc286f3SDominic Spill
16654cc286f3SDominic Spill void
dissect_esco_link_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)16664cc286f3SDominic Spill dissect_esco_link_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
16674cc286f3SDominic Spill {
16684cc286f3SDominic Spill DISSECTOR_ASSERT(len == 16);
16694cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 14);
16704cc286f3SDominic Spill
16714cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_escohdl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
16724cc286f3SDominic Spill offset += 1;
16734cc286f3SDominic Spill
16744cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_escoltaddr, tvb, offset, 1, ENC_LITTLE_ENDIAN);
16754cc286f3SDominic Spill offset += 1;
16764cc286f3SDominic Spill
16774cc286f3SDominic Spill proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_timectrl,
16784cc286f3SDominic Spill ett_lmp_timectrl, timectrl_fields, ENC_LITTLE_ENDIAN);
16794cc286f3SDominic Spill offset += 1;
16804cc286f3SDominic Spill
16814cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_desco, tvb, offset, 1, ENC_LITTLE_ENDIAN);
16824cc286f3SDominic Spill offset += 1;
16834cc286f3SDominic Spill
16844cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_tesco, tvb, offset, 1, ENC_LITTLE_ENDIAN);
16854cc286f3SDominic Spill offset += 1;
16864cc286f3SDominic Spill
16874cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_wesco, tvb, offset, 1, ENC_LITTLE_ENDIAN);
16884cc286f3SDominic Spill offset += 1;
16894cc286f3SDominic Spill
16904cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_escotypems, tvb, offset, 1, ENC_NA);
16914cc286f3SDominic Spill offset += 1;
16924cc286f3SDominic Spill
16934cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_escotypesm, tvb, offset, 1, ENC_NA);
16944cc286f3SDominic Spill offset += 1;
16954cc286f3SDominic Spill
16964cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_escolenms, tvb, offset, 2, ENC_LITTLE_ENDIAN);
16974cc286f3SDominic Spill offset += 2;
16984cc286f3SDominic Spill
16994cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_escolensm, tvb, offset, 2, ENC_LITTLE_ENDIAN);
17004cc286f3SDominic Spill offset += 2;
17014cc286f3SDominic Spill
17024cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_airmode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
17034cc286f3SDominic Spill offset += 1;
17044cc286f3SDominic Spill
17054cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_negstate, tvb, offset, 1, ENC_LITTLE_ENDIAN);
17064cc286f3SDominic Spill }
17074cc286f3SDominic Spill
17084cc286f3SDominic Spill void
dissect_remove_esco_link_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)17094cc286f3SDominic Spill dissect_remove_esco_link_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
17104cc286f3SDominic Spill {
17114cc286f3SDominic Spill DISSECTOR_ASSERT(len == 4);
17124cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2);
17134cc286f3SDominic Spill
17144cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_escohdl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
17154cc286f3SDominic Spill offset += 1;
17164cc286f3SDominic Spill
17174cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_err, tvb, offset, 1, ENC_NA);
17184cc286f3SDominic Spill }
17194cc286f3SDominic Spill
17204cc286f3SDominic Spill void
dissect_channel_classification_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)17214cc286f3SDominic Spill dissect_channel_classification_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
17224cc286f3SDominic Spill {
17234cc286f3SDominic Spill DISSECTOR_ASSERT(len == 7);
17244cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 5);
17254cc286f3SDominic Spill
17264cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_afhrptmode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
17274cc286f3SDominic Spill offset += 1;
17284cc286f3SDominic Spill
17294cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_afhminintvl, tvb, offset, 2, ENC_LITTLE_ENDIAN);
17304cc286f3SDominic Spill offset += 2;
17314cc286f3SDominic Spill
17324cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_afhmaxintvl, tvb, offset, 2, ENC_LITTLE_ENDIAN);
17334cc286f3SDominic Spill }
17344cc286f3SDominic Spill
17354cc286f3SDominic Spill void
dissect_channel_classification(proto_tree * tree,tvbuff_t * tvb,int offset,int len)17364cc286f3SDominic Spill dissect_channel_classification(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
17374cc286f3SDominic Spill {
17384cc286f3SDominic Spill DISSECTOR_ASSERT(len == 12);
17394cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 10);
17404cc286f3SDominic Spill
17414cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_afhclass, tvb, offset, 10, ENC_NA);
17424cc286f3SDominic Spill }
17434cc286f3SDominic Spill
17444cc286f3SDominic Spill void
dissect_sniff_subrating_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)17454cc286f3SDominic Spill dissect_sniff_subrating_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
17464cc286f3SDominic Spill {
17474cc286f3SDominic Spill DISSECTOR_ASSERT(len == 9);
17484cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 7);
17494cc286f3SDominic Spill
17504cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_maxss, tvb, offset, 1, ENC_LITTLE_ENDIAN);
17514cc286f3SDominic Spill offset += 1;
17524cc286f3SDominic Spill
17534cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_minsmt, tvb, offset, 2, ENC_LITTLE_ENDIAN);
17544cc286f3SDominic Spill offset += 2;
17554cc286f3SDominic Spill
17564cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_sniffsi, tvb, offset, 2, ENC_LITTLE_ENDIAN);
17574cc286f3SDominic Spill }
17584cc286f3SDominic Spill
17594cc286f3SDominic Spill void
dissect_sniff_subrating_res(proto_tree * tree,tvbuff_t * tvb,int offset,int len)17604cc286f3SDominic Spill dissect_sniff_subrating_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
17614cc286f3SDominic Spill {
17624cc286f3SDominic Spill DISSECTOR_ASSERT(len == 9);
17634cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 7);
17644cc286f3SDominic Spill
17654cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_maxss, tvb, offset, 1, ENC_LITTLE_ENDIAN);
17664cc286f3SDominic Spill offset += 1;
17674cc286f3SDominic Spill
17684cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_minsmt, tvb, offset, 2, ENC_LITTLE_ENDIAN);
17694cc286f3SDominic Spill offset += 2;
17704cc286f3SDominic Spill
17714cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_sniffsi, tvb, offset, 2, ENC_LITTLE_ENDIAN);
17724cc286f3SDominic Spill }
17734cc286f3SDominic Spill
17744cc286f3SDominic Spill void
dissect_pause_encryption_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)17754cc286f3SDominic Spill dissect_pause_encryption_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
17764cc286f3SDominic Spill {
17774cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2);
17784cc286f3SDominic Spill }
17794cc286f3SDominic Spill
17804cc286f3SDominic Spill void
dissect_resume_encryption_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)17814cc286f3SDominic Spill dissect_resume_encryption_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
17824cc286f3SDominic Spill {
17834cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2);
17844cc286f3SDominic Spill }
17854cc286f3SDominic Spill
17864cc286f3SDominic Spill void
dissect_io_capability_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)17874cc286f3SDominic Spill dissect_io_capability_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
17884cc286f3SDominic Spill {
17894cc286f3SDominic Spill DISSECTOR_ASSERT(len == 5);
17904cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 3);
17914cc286f3SDominic Spill
17924cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_iocaps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
17934cc286f3SDominic Spill offset += 1;
17944cc286f3SDominic Spill
17954cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_oobauthdata, tvb, offset, 1, ENC_LITTLE_ENDIAN);
17964cc286f3SDominic Spill offset += 1;
17974cc286f3SDominic Spill
17984cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_authreqs, tvb, offset, 1, ENC_LITTLE_ENDIAN);
17994cc286f3SDominic Spill }
18004cc286f3SDominic Spill
18014cc286f3SDominic Spill void
dissect_io_capability_res(proto_tree * tree,tvbuff_t * tvb,int offset,int len)18024cc286f3SDominic Spill dissect_io_capability_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
18034cc286f3SDominic Spill {
18044cc286f3SDominic Spill DISSECTOR_ASSERT(len == 5);
18054cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 3);
18064cc286f3SDominic Spill
18074cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_iocaps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
18084cc286f3SDominic Spill offset += 1;
18094cc286f3SDominic Spill
18104cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_oobauthdata, tvb, offset, 1, ENC_LITTLE_ENDIAN);
18114cc286f3SDominic Spill offset += 1;
18124cc286f3SDominic Spill
18134cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_authreqs, tvb, offset, 1, ENC_LITTLE_ENDIAN);
18144cc286f3SDominic Spill }
18154cc286f3SDominic Spill
18164cc286f3SDominic Spill void
dissect_numeric_comparison_failed(proto_tree * tree,tvbuff_t * tvb,int offset,int len)18174cc286f3SDominic Spill dissect_numeric_comparison_failed(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
18184cc286f3SDominic Spill {
18194cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2);
18204cc286f3SDominic Spill }
18214cc286f3SDominic Spill
18224cc286f3SDominic Spill void
dissect_passkey_failed(proto_tree * tree,tvbuff_t * tvb,int offset,int len)18234cc286f3SDominic Spill dissect_passkey_failed(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
18244cc286f3SDominic Spill {
18254cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2);
18264cc286f3SDominic Spill }
18274cc286f3SDominic Spill
18284cc286f3SDominic Spill void
dissect_oob_failed(proto_tree * tree,tvbuff_t * tvb,int offset,int len)18294cc286f3SDominic Spill dissect_oob_failed(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
18304cc286f3SDominic Spill {
18314cc286f3SDominic Spill DISSECTOR_ASSERT(len == 2);
18324cc286f3SDominic Spill }
18334cc286f3SDominic Spill
18344cc286f3SDominic Spill void
dissect_keypress_notification(proto_tree * tree,tvbuff_t * tvb,int offset,int len)18354cc286f3SDominic Spill dissect_keypress_notification(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
18364cc286f3SDominic Spill {
18374cc286f3SDominic Spill DISSECTOR_ASSERT(len == 3);
18384cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
18394cc286f3SDominic Spill
18404cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_nottype, tvb, offset, 1, ENC_LITTLE_ENDIAN);
18414cc286f3SDominic Spill }
18424cc286f3SDominic Spill
18434cc286f3SDominic Spill void
dissect_power_control_req(proto_tree * tree,tvbuff_t * tvb,int offset,int len)18444cc286f3SDominic Spill dissect_power_control_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
18454cc286f3SDominic Spill {
18464cc286f3SDominic Spill DISSECTOR_ASSERT(len == 3);
18474cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
18484cc286f3SDominic Spill
18494cc286f3SDominic Spill proto_tree_add_item(tree, hf_lmp_pwradjreq, tvb, offset, 1, ENC_LITTLE_ENDIAN);
18504cc286f3SDominic Spill }
18514cc286f3SDominic Spill
18524cc286f3SDominic Spill void
dissect_power_control_res(proto_tree * tree,tvbuff_t * tvb,int offset,int len)18534cc286f3SDominic Spill dissect_power_control_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
18544cc286f3SDominic Spill {
18554cc286f3SDominic Spill proto_item *pa_item;
18564cc286f3SDominic Spill proto_tree *pa_tree;
18574cc286f3SDominic Spill
18584cc286f3SDominic Spill DISSECTOR_ASSERT(len == 3);
18594cc286f3SDominic Spill DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
18604cc286f3SDominic Spill
18614cc286f3SDominic Spill pa_item = proto_tree_add_item(tree, hf_lmp_pwradjres, tvb, offset, 1, ENC_LITTLE_ENDIAN);
18624cc286f3SDominic Spill pa_tree = proto_item_add_subtree(pa_item, ett_lmp_pwradjres);
18634cc286f3SDominic Spill
18644cc286f3SDominic Spill proto_tree_add_item(pa_tree, hf_lmp_pwradj_gfsk, tvb, offset, 1, ENC_LITTLE_ENDIAN);
18654cc286f3SDominic Spill proto_tree_add_item(pa_tree, hf_lmp_pwradj_dqpsk, tvb, offset, 1, ENC_LITTLE_ENDIAN);
18664cc286f3SDominic Spill proto_tree_add_item(pa_tree, hf_lmp_pwradj_8dpsk, tvb, offset, 1, ENC_LITTLE_ENDIAN);
18674cc286f3SDominic Spill }
18684cc286f3SDominic Spill
18694cc286f3SDominic Spill /* Link Manager Protocol */
18704cc286f3SDominic Spill static void
dissect_btbrlmp(tvbuff_t * tvb,packet_info * pinfo,proto_tree * tree)18714cc286f3SDominic Spill dissect_btbrlmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
18724cc286f3SDominic Spill {
18734cc286f3SDominic Spill proto_item *lmp_item;
18744cc286f3SDominic Spill proto_tree *lmp_tree;
18754cc286f3SDominic Spill int offset;
18764cc286f3SDominic Spill int len;
18774cc286f3SDominic Spill int op; /* opcode */
18784cc286f3SDominic Spill int eop; /* extended opcode */
18794cc286f3SDominic Spill
18804cc286f3SDominic Spill offset = 0;
18814cc286f3SDominic Spill len = tvb_reported_length(tvb);
18824cc286f3SDominic Spill
18834cc286f3SDominic Spill DISSECTOR_ASSERT(len >= 1);
18844cc286f3SDominic Spill
18854cc286f3SDominic Spill /* make entries in protocol column and info column on summary display */
18864cc286f3SDominic Spill col_set_str(pinfo->cinfo, COL_PROTOCOL, "LMP");
18874cc286f3SDominic Spill
18884cc286f3SDominic Spill /* clear the info column first just in case of type fetching failure. */
18894cc286f3SDominic Spill col_clear(pinfo->cinfo, COL_INFO);
18904cc286f3SDominic Spill
18914cc286f3SDominic Spill op = tvb_get_guint8(tvb, offset) >> 1;
18924cc286f3SDominic Spill
18934cc286f3SDominic Spill if (op == LMP_ESCAPE_4) {
18944cc286f3SDominic Spill DISSECTOR_ASSERT(len >= 2);
18954cc286f3SDominic Spill
18964cc286f3SDominic Spill eop = tvb_get_guint8(tvb, offset + 1);
18974cc286f3SDominic Spill
18984cc286f3SDominic Spill col_add_str(pinfo->cinfo, COL_INFO, val_to_str(eop,
1899*8d164ca2SDennis Mantz ext_opcode, "Unknown Extended Opcode (%d)"));
19004cc286f3SDominic Spill } else {
19014cc286f3SDominic Spill col_add_str(pinfo->cinfo, COL_INFO, val_to_str(op,
19024cc286f3SDominic Spill opcode, "Unknown Opcode (%d)"));
19034cc286f3SDominic Spill }
19044cc286f3SDominic Spill
19054cc286f3SDominic Spill /* see if we are being asked for details */
19064cc286f3SDominic Spill if (!tree)
19074cc286f3SDominic Spill return;
19084cc286f3SDominic Spill
19094cc286f3SDominic Spill lmp_item = proto_tree_add_item(tree, proto_btbrlmp, tvb, offset, -1, ENC_NA);
19104cc286f3SDominic Spill lmp_tree = proto_item_add_subtree(lmp_item, ett_lmp);
19114cc286f3SDominic Spill
19124cc286f3SDominic Spill proto_tree_add_item(lmp_tree, hf_lmp_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
19134cc286f3SDominic Spill
19144cc286f3SDominic Spill proto_tree_add_item(lmp_tree, hf_lmp_op, tvb, offset, 1, ENC_LITTLE_ENDIAN);
19154cc286f3SDominic Spill offset += 1;
19164cc286f3SDominic Spill
19174cc286f3SDominic Spill switch (op) {
19184cc286f3SDominic Spill case LMP_NAME_REQ:
19194cc286f3SDominic Spill dissect_name_req(lmp_tree, tvb, offset, len);
19204cc286f3SDominic Spill break;
19214cc286f3SDominic Spill case LMP_NAME_RES:
19224cc286f3SDominic Spill dissect_name_res(lmp_tree, tvb, offset, len);
19234cc286f3SDominic Spill break;
19244cc286f3SDominic Spill case LMP_ACCEPTED:
19254cc286f3SDominic Spill dissect_accepted(lmp_tree, tvb, offset, len);
19264cc286f3SDominic Spill break;
19274cc286f3SDominic Spill case LMP_NOT_ACCEPTED:
19284cc286f3SDominic Spill dissect_not_accepted(lmp_tree, tvb, offset, len);
19294cc286f3SDominic Spill break;
19304cc286f3SDominic Spill case LMP_CLKOFFSET_REQ:
19314cc286f3SDominic Spill dissect_clkoffset_req(lmp_tree, tvb, offset, len);
19324cc286f3SDominic Spill break;
19334cc286f3SDominic Spill case LMP_CLKOFFSET_RES:
19344cc286f3SDominic Spill dissect_clkoffset_res(lmp_tree, tvb, offset, len);
19354cc286f3SDominic Spill break;
19364cc286f3SDominic Spill case LMP_DETACH:
19374cc286f3SDominic Spill dissect_detach(lmp_tree, tvb, offset, len);
19384cc286f3SDominic Spill break;
19394cc286f3SDominic Spill case LMP_IN_RAND:
19404cc286f3SDominic Spill dissect_in_rand(lmp_tree, tvb, offset, len);
19414cc286f3SDominic Spill break;
19424cc286f3SDominic Spill case LMP_COMB_KEY:
19434cc286f3SDominic Spill dissect_comb_key(lmp_tree, tvb, offset, len);
19444cc286f3SDominic Spill break;
19454cc286f3SDominic Spill case LMP_UNIT_KEY:
19464cc286f3SDominic Spill dissect_unit_key(lmp_tree, tvb, offset, len);
19474cc286f3SDominic Spill break;
19484cc286f3SDominic Spill case LMP_AU_RAND:
19494cc286f3SDominic Spill dissect_au_rand(lmp_tree, tvb, offset, len);
19504cc286f3SDominic Spill break;
19514cc286f3SDominic Spill case LMP_SRES:
19524cc286f3SDominic Spill dissect_sres(lmp_tree, tvb, offset, len);
19534cc286f3SDominic Spill break;
19544cc286f3SDominic Spill case LMP_TEMP_RAND:
19554cc286f3SDominic Spill dissect_temp_rand(lmp_tree, tvb, offset, len);
19564cc286f3SDominic Spill break;
19574cc286f3SDominic Spill case LMP_TEMP_KEY:
19584cc286f3SDominic Spill dissect_temp_key(lmp_tree, tvb, offset, len);
19594cc286f3SDominic Spill break;
19604cc286f3SDominic Spill case LMP_ENCRYPTION_MODE_REQ:
19614cc286f3SDominic Spill dissect_encryption_mode_req(lmp_tree, tvb, offset, len);
19624cc286f3SDominic Spill break;
19634cc286f3SDominic Spill case LMP_ENCRYPTION_KEY_SIZE_REQ:
19644cc286f3SDominic Spill dissect_encryption_key_size_req(lmp_tree, tvb, offset, len);
19654cc286f3SDominic Spill break;
19664cc286f3SDominic Spill case LMP_START_ENCRYPTION_REQ:
19674cc286f3SDominic Spill dissect_start_encryption_req(lmp_tree, tvb, offset, len);
19684cc286f3SDominic Spill break;
19694cc286f3SDominic Spill case LMP_STOP_ENCRYPTION_REQ:
19704cc286f3SDominic Spill dissect_stop_encryption_req(lmp_tree, tvb, offset, len);
19714cc286f3SDominic Spill break;
19724cc286f3SDominic Spill case LMP_SWITCH_REQ:
19734cc286f3SDominic Spill dissect_switch_req(lmp_tree, tvb, offset, len);
19744cc286f3SDominic Spill break;
19754cc286f3SDominic Spill case LMP_HOLD:
19764cc286f3SDominic Spill dissect_hold(lmp_tree, tvb, offset, len);
19774cc286f3SDominic Spill break;
19784cc286f3SDominic Spill case LMP_HOLD_REQ:
19794cc286f3SDominic Spill dissect_hold_req(lmp_tree, tvb, offset, len);
19804cc286f3SDominic Spill break;
19814cc286f3SDominic Spill case LMP_SNIFF_REQ:
19824cc286f3SDominic Spill dissect_sniff_req(lmp_tree, tvb, offset, len);
19834cc286f3SDominic Spill break;
19844cc286f3SDominic Spill case LMP_UNSNIFF_REQ:
19854cc286f3SDominic Spill dissect_unsniff_req(lmp_tree, tvb, offset, len);
19864cc286f3SDominic Spill break;
19874cc286f3SDominic Spill case LMP_PARK_REQ:
19884cc286f3SDominic Spill dissect_park_req(lmp_tree, tvb, offset, len);
19894cc286f3SDominic Spill break;
19904cc286f3SDominic Spill case LMP_SET_BROADCAST_SCAN_WINDOW:
19914cc286f3SDominic Spill dissect_set_broadcast_scan_window(lmp_tree, tvb, offset, len);
19924cc286f3SDominic Spill break;
19934cc286f3SDominic Spill case LMP_MODIFY_BEACON:
19944cc286f3SDominic Spill dissect_modify_beacon(lmp_tree, tvb, offset, len);
19954cc286f3SDominic Spill break;
19964cc286f3SDominic Spill case LMP_UNPARK_BD_ADDR_REQ:
19974cc286f3SDominic Spill dissect_unpark_bd_addr_req(lmp_tree, tvb, offset, len);
19984cc286f3SDominic Spill break;
19994cc286f3SDominic Spill case LMP_UNPARK_PM_ADDR_REQ:
20004cc286f3SDominic Spill dissect_unpark_pm_addr_req(lmp_tree, tvb, offset, len);
20014cc286f3SDominic Spill break;
20024cc286f3SDominic Spill case LMP_INCR_POWER_REQ:
20034cc286f3SDominic Spill dissect_incr_power_req(lmp_tree, tvb, offset, len);
20044cc286f3SDominic Spill break;
20054cc286f3SDominic Spill case LMP_DECR_POWER_REQ:
20064cc286f3SDominic Spill dissect_decr_power_req(lmp_tree, tvb, offset, len);
20074cc286f3SDominic Spill break;
20084cc286f3SDominic Spill case LMP_MAX_POWER:
20094cc286f3SDominic Spill dissect_max_power(lmp_tree, tvb, offset, len);
20104cc286f3SDominic Spill break;
20114cc286f3SDominic Spill case LMP_MIN_POWER:
20124cc286f3SDominic Spill dissect_min_power(lmp_tree, tvb, offset, len);
20134cc286f3SDominic Spill break;
20144cc286f3SDominic Spill case LMP_AUTO_RATE:
20154cc286f3SDominic Spill dissect_auto_rate(lmp_tree, tvb, offset, len);
20164cc286f3SDominic Spill break;
20174cc286f3SDominic Spill case LMP_PREFERRED_RATE:
20184cc286f3SDominic Spill dissect_preferred_rate(lmp_tree, tvb, offset, len);
20194cc286f3SDominic Spill break;
20204cc286f3SDominic Spill case LMP_VERSION_REQ:
20214cc286f3SDominic Spill dissect_version_req(lmp_tree, tvb, offset, len);
20224cc286f3SDominic Spill break;
20234cc286f3SDominic Spill case LMP_VERSION_RES:
20244cc286f3SDominic Spill dissect_version_res(lmp_tree, tvb, offset, len);
20254cc286f3SDominic Spill break;
20264cc286f3SDominic Spill case LMP_FEATURES_REQ:
20274cc286f3SDominic Spill dissect_features_req(lmp_tree, tvb, offset, len);
20284cc286f3SDominic Spill break;
20294cc286f3SDominic Spill case LMP_FEATURES_RES:
20304cc286f3SDominic Spill dissect_features_res(lmp_tree, tvb, offset, len);
20314cc286f3SDominic Spill break;
20324cc286f3SDominic Spill case LMP_QUALITY_OF_SERVICE:
20334cc286f3SDominic Spill dissect_quality_of_service(lmp_tree, tvb, offset, len);
20344cc286f3SDominic Spill break;
20354cc286f3SDominic Spill case LMP_QUALITY_OF_SERVICE_REQ:
20364cc286f3SDominic Spill dissect_quality_of_service_req(lmp_tree, tvb, offset, len);
20374cc286f3SDominic Spill break;
20384cc286f3SDominic Spill case LMP_SCO_LINK_REQ:
20394cc286f3SDominic Spill dissect_sco_link_req(lmp_tree, tvb, offset, len);
20404cc286f3SDominic Spill break;
20414cc286f3SDominic Spill case LMP_REMOVE_SCO_LINK_REQ:
20424cc286f3SDominic Spill dissect_remove_sco_link_req(lmp_tree, tvb, offset, len);
20434cc286f3SDominic Spill break;
20444cc286f3SDominic Spill case LMP_MAX_SLOT:
20454cc286f3SDominic Spill dissect_max_slot(lmp_tree, tvb, offset, len);
20464cc286f3SDominic Spill break;
20474cc286f3SDominic Spill case LMP_MAX_SLOT_REQ:
20484cc286f3SDominic Spill dissect_max_slot_req(lmp_tree, tvb, offset, len);
20494cc286f3SDominic Spill break;
20504cc286f3SDominic Spill case LMP_TIMING_ACCURACY_REQ:
20514cc286f3SDominic Spill dissect_timing_accuracy_req(lmp_tree, tvb, offset, len);
20524cc286f3SDominic Spill break;
20534cc286f3SDominic Spill case LMP_TIMING_ACCURACY_RES:
20544cc286f3SDominic Spill dissect_timing_accuracy_res(lmp_tree, tvb, offset, len);
20554cc286f3SDominic Spill break;
20564cc286f3SDominic Spill case LMP_SETUP_COMPLETE:
20574cc286f3SDominic Spill dissect_setup_complete(lmp_tree, tvb, offset, len);
20584cc286f3SDominic Spill break;
20594cc286f3SDominic Spill case LMP_USE_SEMI_PERMANENT_KEY:
20604cc286f3SDominic Spill dissect_use_semi_permanent_key(lmp_tree, tvb, offset, len);
20614cc286f3SDominic Spill break;
20624cc286f3SDominic Spill case LMP_HOST_CONNECTION_REQ:
20634cc286f3SDominic Spill dissect_host_connection_req(lmp_tree, tvb, offset, len);
20644cc286f3SDominic Spill break;
20654cc286f3SDominic Spill case LMP_SLOT_OFFSET:
20664cc286f3SDominic Spill dissect_slot_offset(lmp_tree, tvb, offset, len);
20674cc286f3SDominic Spill break;
20684cc286f3SDominic Spill case LMP_PAGE_MODE_REQ:
20694cc286f3SDominic Spill dissect_page_mode_req(lmp_tree, tvb, offset, len);
20704cc286f3SDominic Spill break;
20714cc286f3SDominic Spill case LMP_PAGE_SCAN_MODE_REQ:
20724cc286f3SDominic Spill dissect_page_scan_mode_req(lmp_tree, tvb, offset, len);
20734cc286f3SDominic Spill break;
20744cc286f3SDominic Spill case LMP_SUPERVISION_TIMEOUT:
20754cc286f3SDominic Spill dissect_supervision_timeout(lmp_tree, tvb, offset, len);
20764cc286f3SDominic Spill break;
20774cc286f3SDominic Spill case LMP_TEST_ACTIVATE:
20784cc286f3SDominic Spill dissect_test_activate(lmp_tree, tvb, offset, len);
20794cc286f3SDominic Spill break;
20804cc286f3SDominic Spill case LMP_TEST_CONTROL:
20814cc286f3SDominic Spill dissect_test_control(lmp_tree, tvb, offset, len);
20824cc286f3SDominic Spill break;
20834cc286f3SDominic Spill case LMP_ENCRYPTION_KEY_SIZE_MASK_REQ:
20844cc286f3SDominic Spill dissect_encryption_key_size_mask_req(lmp_tree, tvb, offset, len);
20854cc286f3SDominic Spill break;
20864cc286f3SDominic Spill case LMP_ENCRYPTION_KEY_SIZE_MASK_RES:
20874cc286f3SDominic Spill dissect_encryption_key_size_mask_res(lmp_tree, tvb, offset, len);
20884cc286f3SDominic Spill break;
20894cc286f3SDominic Spill case LMP_SET_AFH:
20904cc286f3SDominic Spill dissect_set_afh(lmp_tree, tvb, offset, len);
20914cc286f3SDominic Spill break;
20924cc286f3SDominic Spill case LMP_ENCAPSULATED_HEADER:
20934cc286f3SDominic Spill dissect_encapsulated_header(lmp_tree, tvb, offset, len);
20944cc286f3SDominic Spill break;
20954cc286f3SDominic Spill case LMP_ENCAPSULATED_PAYLOAD:
20964cc286f3SDominic Spill dissect_encapsulated_payload(lmp_tree, tvb, offset, len);
20974cc286f3SDominic Spill break;
20984cc286f3SDominic Spill case LMP_SIMPLE_PAIRING_CONFIRM:
20994cc286f3SDominic Spill dissect_simple_pairing_confirm(lmp_tree, tvb, offset, len);
21004cc286f3SDominic Spill break;
21014cc286f3SDominic Spill case LMP_SIMPLE_PAIRING_NUMBER:
21024cc286f3SDominic Spill dissect_simple_pairing_number(lmp_tree, tvb, offset, len);
21034cc286f3SDominic Spill break;
21044cc286f3SDominic Spill case LMP_DHKEY_CHECK:
21054cc286f3SDominic Spill dissect_dhkey_check(lmp_tree, tvb, offset, len);
21064cc286f3SDominic Spill break;
21074cc286f3SDominic Spill case LMP_ESCAPE_1:
21084cc286f3SDominic Spill break;
21094cc286f3SDominic Spill case LMP_ESCAPE_2:
21104cc286f3SDominic Spill break;
21114cc286f3SDominic Spill case LMP_ESCAPE_3:
21124cc286f3SDominic Spill break;
21134cc286f3SDominic Spill case LMP_ESCAPE_4:
21144cc286f3SDominic Spill /* extended opcode */
21154cc286f3SDominic Spill DISSECTOR_ASSERT(len >= 2);
21164cc286f3SDominic Spill proto_tree_add_item(lmp_tree, hf_lmp_eop, tvb, offset, 1, ENC_NA);
21174cc286f3SDominic Spill offset += 1;
21184cc286f3SDominic Spill
21194cc286f3SDominic Spill switch (eop) {
21204cc286f3SDominic Spill case LMP_ACCEPTED_EXT:
21214cc286f3SDominic Spill dissect_accepted_ext(lmp_tree, tvb, offset, len);
21224cc286f3SDominic Spill break;
21234cc286f3SDominic Spill case LMP_NOT_ACCEPTED_EXT:
21244cc286f3SDominic Spill dissect_not_accepted_ext(lmp_tree, tvb, offset, len);
21254cc286f3SDominic Spill break;
21264cc286f3SDominic Spill case LMP_FEATURES_REQ_EXT:
21274cc286f3SDominic Spill dissect_features_req_ext(lmp_tree, tvb, offset, len);
21284cc286f3SDominic Spill break;
21294cc286f3SDominic Spill case LMP_FEATURES_RES_EXT:
21304cc286f3SDominic Spill dissect_features_res_ext(lmp_tree, tvb, offset, len);
21314cc286f3SDominic Spill break;
21324cc286f3SDominic Spill case LMP_PACKET_TYPE_TABLE_REQ:
21334cc286f3SDominic Spill dissect_packet_type_table_req(lmp_tree, tvb, offset, len);
21344cc286f3SDominic Spill break;
21354cc286f3SDominic Spill case LMP_ESCO_LINK_REQ:
21364cc286f3SDominic Spill dissect_esco_link_req(lmp_tree, tvb, offset, len);
21374cc286f3SDominic Spill break;
21384cc286f3SDominic Spill case LMP_REMOVE_ESCO_LINK_REQ:
21394cc286f3SDominic Spill dissect_remove_esco_link_req(lmp_tree, tvb, offset, len);
21404cc286f3SDominic Spill break;
21414cc286f3SDominic Spill case LMP_CHANNEL_CLASSIFICATION_REQ:
21424cc286f3SDominic Spill dissect_channel_classification_req(lmp_tree, tvb, offset, len);
21434cc286f3SDominic Spill break;
21444cc286f3SDominic Spill case LMP_CHANNEL_CLASSIFICATION:
21454cc286f3SDominic Spill dissect_channel_classification(lmp_tree, tvb, offset, len);
21464cc286f3SDominic Spill break;
21474cc286f3SDominic Spill case LMP_SNIFF_SUBRATING_REQ:
21484cc286f3SDominic Spill dissect_sniff_subrating_req(lmp_tree, tvb, offset, len);
21494cc286f3SDominic Spill break;
21504cc286f3SDominic Spill case LMP_SNIFF_SUBRATING_RES:
21514cc286f3SDominic Spill dissect_sniff_subrating_res(lmp_tree, tvb, offset, len);
21524cc286f3SDominic Spill break;
21534cc286f3SDominic Spill case LMP_PAUSE_ENCRYPTION_REQ:
21544cc286f3SDominic Spill dissect_pause_encryption_req(lmp_tree, tvb, offset, len);
21554cc286f3SDominic Spill break;
21564cc286f3SDominic Spill case LMP_RESUME_ENCRYPTION_REQ:
21574cc286f3SDominic Spill dissect_resume_encryption_req(lmp_tree, tvb, offset, len);
21584cc286f3SDominic Spill break;
21594cc286f3SDominic Spill case LMP_IO_CAPABILITY_REQ:
21604cc286f3SDominic Spill dissect_io_capability_req(lmp_tree, tvb, offset, len);
21614cc286f3SDominic Spill break;
21624cc286f3SDominic Spill case LMP_IO_CAPABILITY_RES:
21634cc286f3SDominic Spill dissect_io_capability_res(lmp_tree, tvb, offset, len);
21644cc286f3SDominic Spill break;
21654cc286f3SDominic Spill case LMP_NUMERIC_COMPARISON_FAILED:
21664cc286f3SDominic Spill dissect_numeric_comparison_failed(lmp_tree, tvb, offset, len);
21674cc286f3SDominic Spill break;
21684cc286f3SDominic Spill case LMP_PASSKEY_FAILED:
21694cc286f3SDominic Spill dissect_passkey_failed(lmp_tree, tvb, offset, len);
21704cc286f3SDominic Spill break;
21714cc286f3SDominic Spill case LMP_OOB_FAILED:
21724cc286f3SDominic Spill dissect_oob_failed(lmp_tree, tvb, offset, len);
21734cc286f3SDominic Spill break;
21744cc286f3SDominic Spill case LMP_KEYPRESS_NOTIFICATION:
21754cc286f3SDominic Spill dissect_keypress_notification(lmp_tree, tvb, offset, len);
21764cc286f3SDominic Spill break;
21774cc286f3SDominic Spill case LMP_POWER_CONTROL_REQ:
21784cc286f3SDominic Spill dissect_power_control_req(lmp_tree, tvb, offset, len);
21794cc286f3SDominic Spill break;
21804cc286f3SDominic Spill case LMP_POWER_CONTROL_RES:
21814cc286f3SDominic Spill dissect_power_control_res(lmp_tree, tvb, offset, len);
21824cc286f3SDominic Spill break;
21834cc286f3SDominic Spill default:
21844cc286f3SDominic Spill break;
21854cc286f3SDominic Spill }
21864cc286f3SDominic Spill default:
21874cc286f3SDominic Spill break;
21884cc286f3SDominic Spill }
21894cc286f3SDominic Spill };
21904cc286f3SDominic Spill
21914cc286f3SDominic Spill /* register the protocol with Wireshark */
21924cc286f3SDominic Spill void
proto_register_btbrlmp(void)21934cc286f3SDominic Spill proto_register_btbrlmp(void)
21944cc286f3SDominic Spill {
21954cc286f3SDominic Spill
21964cc286f3SDominic Spill /* list of fields */
21974cc286f3SDominic Spill static hf_register_info hf[] = {
21984cc286f3SDominic Spill { &hf_lmp_accscheme,
21994cc286f3SDominic Spill { "Access Scheme", "btbrlmp.accscheme",
22004cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(access_scheme), 0xf0,
22014cc286f3SDominic Spill NULL, HFILL }
22024cc286f3SDominic Spill },
22034cc286f3SDominic Spill { &hf_lmp_afhchmap,
22044cc286f3SDominic Spill { "AFH Channel Map", "btbrlmp.afhchmap",
22054cc286f3SDominic Spill /* could break out individual channels but long */
22064cc286f3SDominic Spill FT_BYTES, BASE_NONE, NULL, 0x0,
22074cc286f3SDominic Spill "Adaptive Frequency Hopping Channel Map", HFILL }
22084cc286f3SDominic Spill },
22094cc286f3SDominic Spill { &hf_lmp_afhclass,
22104cc286f3SDominic Spill { "AFH Channel Classification", "btbrlmp.afhclass",
22114cc286f3SDominic Spill /* could break out individual channels but long */
22124cc286f3SDominic Spill FT_BYTES, BASE_NONE, NULL, 0x0,
22134cc286f3SDominic Spill "Adaptive Frequency Hopping Channel Classification", HFILL }
22144cc286f3SDominic Spill },
22154cc286f3SDominic Spill { &hf_lmp_afhinst,
22164cc286f3SDominic Spill { "AFH Instant", "btbrlmp.afhinst",
22174cc286f3SDominic Spill FT_UINT32, BASE_HEX, NULL, 0x0,
22184cc286f3SDominic Spill "Adaptive Frequency Hopping Instant (slot)", HFILL }
22194cc286f3SDominic Spill },
22204cc286f3SDominic Spill { &hf_lmp_afhmaxintvl,
22214cc286f3SDominic Spill { "AFH Max Interval", "btbrlmp.maxintvl",
22224cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0,
22234cc286f3SDominic Spill "Adaptive Maximum Interval in slots", HFILL }
22244cc286f3SDominic Spill },
22254cc286f3SDominic Spill { &hf_lmp_afhminintvl,
22264cc286f3SDominic Spill { "AFH Min Interval", "btbrlmp.minintvl",
22274cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0,
22284cc286f3SDominic Spill "Adaptive Minimum Interval in slots", HFILL }
22294cc286f3SDominic Spill },
22304cc286f3SDominic Spill { &hf_lmp_afhmode,
22314cc286f3SDominic Spill { "AFH Mode", "btbrlmp.afhmode",
22324cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(afh_mode), 0x0,
22334cc286f3SDominic Spill "Adaptive Frequency Hopping Mode", HFILL }
22344cc286f3SDominic Spill },
22354cc286f3SDominic Spill { &hf_lmp_afhrptmode,
22364cc286f3SDominic Spill { "AFH Reporting Mode", "btbrlmp.afhrptmode",
22374cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(afh_reporting_mode), 0x0,
22384cc286f3SDominic Spill "Adaptive Frequency Hopping Reporting Mode", HFILL }
22394cc286f3SDominic Spill },
22404cc286f3SDominic Spill { &hf_lmp_airmode,
22414cc286f3SDominic Spill { "Air Mode", "btbrlmp.airmode",
22424cc286f3SDominic Spill FT_UINT8, BASE_HEX, VALS(air_mode), 0x0,
22434cc286f3SDominic Spill NULL, HFILL }
22444cc286f3SDominic Spill },
22454cc286f3SDominic Spill { &hf_lmp_araddr,
22464cc286f3SDominic Spill { "AR_ADDR", "btbrlmp.araddr",
22474cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0xfe,
22484cc286f3SDominic Spill NULL, HFILL }
22494cc286f3SDominic Spill },
22504cc286f3SDominic Spill { &hf_lmp_authreqs,
22514cc286f3SDominic Spill { "Authentication Requirements", "btbrlmp.authreqs",
22524cc286f3SDominic Spill FT_UINT8, BASE_HEX, VALS(auth_requirements), 0xf0,
22534cc286f3SDominic Spill NULL, HFILL }
22544cc286f3SDominic Spill },
22554cc286f3SDominic Spill { &hf_lmp_authres,
22564cc286f3SDominic Spill { "Authentication Response", "btbrlmp.authres",
22574cc286f3SDominic Spill FT_BYTES, BASE_NONE, NULL, 0x0,
22584cc286f3SDominic Spill NULL, HFILL }
22594cc286f3SDominic Spill },
22604cc286f3SDominic Spill { &hf_lmp_bdaddr,
22614cc286f3SDominic Spill { "BD_ADDR", "btbrlmp.bdaddr",
22624cc286f3SDominic Spill FT_UINT64, BASE_HEX, NULL, 0x0000ffffffffffff,
22634cc286f3SDominic Spill NULL, HFILL }
22644cc286f3SDominic Spill },
22654cc286f3SDominic Spill { &hf_lmp_bdaddr1,
22664cc286f3SDominic Spill { "BD_ADDR 1", "btbrlmp.bdaddr",
22674cc286f3SDominic Spill FT_UINT64, BASE_HEX, NULL, 0x0000ffffffffffff,
22684cc286f3SDominic Spill NULL, HFILL }
22694cc286f3SDominic Spill },
22704cc286f3SDominic Spill { &hf_lmp_bdaddr2,
22714cc286f3SDominic Spill { "BD_ADDR2", "btbrlmp.bdaddr",
22724cc286f3SDominic Spill FT_UINT64, BASE_HEX, NULL, 0x0000ffffffffffff,
22734cc286f3SDominic Spill "BD_ADDR 2", HFILL }
22744cc286f3SDominic Spill },
22754cc286f3SDominic Spill { &hf_lmp_bsw,
22764cc286f3SDominic Spill { "Broadcast Scan Window", "btbrlmp.bsw",
22774cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0,
22784cc286f3SDominic Spill "Broadcast Scan Window in slots", HFILL }
22794cc286f3SDominic Spill },
22804cc286f3SDominic Spill { &hf_lmp_clkoffset,
22814cc286f3SDominic Spill { "Clock Offset", "btbrlmp.clkoffset",
22824cc286f3SDominic Spill FT_UINT16, BASE_DEC, NULL, 0x0,
22834cc286f3SDominic Spill "Clock Offset in units of 1.25 ms", HFILL }
22844cc286f3SDominic Spill },
22854cc286f3SDominic Spill { &hf_lmp_commit,
22864cc286f3SDominic Spill { "Commitment Value", "btbrlmp.commit",
22874cc286f3SDominic Spill FT_BYTES, BASE_NONE, NULL, 0x0,
22884cc286f3SDominic Spill NULL, HFILL }
22894cc286f3SDominic Spill },
22904cc286f3SDominic Spill { &hf_lmp_confirm,
22914cc286f3SDominic Spill { "Confirmation Value", "btbrlmp.confirm",
22924cc286f3SDominic Spill FT_BYTES, BASE_NONE, NULL, 0x0,
22934cc286f3SDominic Spill NULL, HFILL }
22944cc286f3SDominic Spill },
22954cc286f3SDominic Spill { &hf_lmp_compid,
22964cc286f3SDominic Spill { "Company ID", "btbrlmp.compid",
22974cc286f3SDominic Spill FT_UINT16, BASE_DEC, VALS(compid), 0x0,
22984cc286f3SDominic Spill NULL, HFILL }
22994cc286f3SDominic Spill },
23004cc286f3SDominic Spill { &hf_lmp_cryptmode,
23014cc286f3SDominic Spill { "Encryption Mode", "btbrlmp.cryptmode",
23024cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(encryption_mode), 0x0,
23034cc286f3SDominic Spill NULL, HFILL }
23044cc286f3SDominic Spill },
23054cc286f3SDominic Spill { &hf_lmp_daccess,
23064cc286f3SDominic Spill { "Daccess", "btbrlmp.daccess",
23074cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
23084cc286f3SDominic Spill "Daccess in slots", HFILL }
23094cc286f3SDominic Spill },
23104cc286f3SDominic Spill { &hf_lmp_db,
23114cc286f3SDominic Spill { "Db", "btbrlmp.db",
23124cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0,
23134cc286f3SDominic Spill "Db in slots", HFILL }
23144cc286f3SDominic Spill },
23154cc286f3SDominic Spill { &hf_lmp_dbsleep,
23164cc286f3SDominic Spill { "Dbsleep", "btbrlmp.dbsleep",
23174cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
23184cc286f3SDominic Spill NULL, HFILL }
23194cc286f3SDominic Spill },
23204cc286f3SDominic Spill { &hf_lmp_deltab,
23214cc286f3SDominic Spill { "Deltab", "btbrlmp.deltab",
23224cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
23234cc286f3SDominic Spill "Deltab in slots", HFILL }
23244cc286f3SDominic Spill },
23254cc286f3SDominic Spill { &hf_lmp_desco,
23264cc286f3SDominic Spill { "Desco", "btbrlmp.desco",
23274cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
23284cc286f3SDominic Spill "Desco in slots", HFILL }
23294cc286f3SDominic Spill },
23304cc286f3SDominic Spill { &hf_lmp_drift,
23314cc286f3SDominic Spill { "Drift", "btbrlmp.drift",
23324cc286f3SDominic Spill FT_UINT8, BASE_DEC, NULL, 0x0,
23334cc286f3SDominic Spill "Drift in ppm", HFILL }
23344cc286f3SDominic Spill },
23354cc286f3SDominic Spill { &hf_lmp_dsco,
23364cc286f3SDominic Spill { "Dsco", "btbrlmp.dsco",
23374cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
23384cc286f3SDominic Spill "Dsco in slots", HFILL }
23394cc286f3SDominic Spill },
23404cc286f3SDominic Spill { &hf_lmp_dsniff,
23414cc286f3SDominic Spill { "Dsniff", "btbrlmp.dsniff",
23424cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0,
23434cc286f3SDominic Spill "Dsniff in slots", HFILL }
23444cc286f3SDominic Spill },
23454cc286f3SDominic Spill { &hf_lmp_encdata,
23464cc286f3SDominic Spill { "Encapsulated Data", "btbrlmp.encdata",
23474cc286f3SDominic Spill FT_BYTES, BASE_NONE, NULL, 0x0,
23484cc286f3SDominic Spill NULL, HFILL }
23494cc286f3SDominic Spill },
23504cc286f3SDominic Spill { &hf_lmp_enclen,
23514cc286f3SDominic Spill { "Encapsulated Length", "btbrlmp.enclen",
23524cc286f3SDominic Spill FT_UINT8, BASE_DEC, NULL, 0x0,
23534cc286f3SDominic Spill NULL, HFILL }
23544cc286f3SDominic Spill },
23554cc286f3SDominic Spill { &hf_lmp_encmaj,
23564cc286f3SDominic Spill { "Encapsulated Major Type", "btbrlmp.encmaj",
23574cc286f3SDominic Spill FT_UINT8, BASE_DEC, NULL, 0x0,
23584cc286f3SDominic Spill NULL, HFILL }
23594cc286f3SDominic Spill },
23604cc286f3SDominic Spill { &hf_lmp_encmin,
23614cc286f3SDominic Spill { "Encapsulated Minor Type", "btbrlmp.encmin",
23624cc286f3SDominic Spill FT_UINT8, BASE_DEC, NULL, 0x0,
23634cc286f3SDominic Spill NULL, HFILL }
23644cc286f3SDominic Spill },
23654cc286f3SDominic Spill { &hf_lmp_eop,
23664cc286f3SDominic Spill { "Extended Opcode", "btbrlmp.eop",
23674cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(ext_opcode), 0x0,
23684cc286f3SDominic Spill NULL, HFILL }
23694cc286f3SDominic Spill },
23704cc286f3SDominic Spill { &hf_lmp_eopinre,
23714cc286f3SDominic Spill { "In Response To", "btbrlmp.eopinre",
23724cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(ext_opcode), 0x0,
23734cc286f3SDominic Spill "Extended Opcode this is in response to", HFILL }
23744cc286f3SDominic Spill },
23754cc286f3SDominic Spill { &hf_lmp_escolenms,
23764cc286f3SDominic Spill { "Packet Length M -> S", "btbrlmp.escolenms",
23774cc286f3SDominic Spill FT_UINT16, BASE_DEC, NULL, 0x0,
23784cc286f3SDominic Spill "Packet Length in bytes Master to Slave", HFILL }
23794cc286f3SDominic Spill },
23804cc286f3SDominic Spill { &hf_lmp_escolensm,
23814cc286f3SDominic Spill { "Packet Length S -> M", "btbrlmp.escolensm",
23824cc286f3SDominic Spill FT_UINT16, BASE_DEC, NULL, 0x0,
23834cc286f3SDominic Spill "Packet Length in bytes Slave to Master", HFILL }
23844cc286f3SDominic Spill },
23854cc286f3SDominic Spill { &hf_lmp_escotypems,
23864cc286f3SDominic Spill { "eSCO Packet Type M -> S", "btbrlmp.escotypems",
23874cc286f3SDominic Spill FT_UINT8, BASE_HEX, VALS(esco_packet_type), 0x0,
23884cc286f3SDominic Spill "eSCO Packet Type Master to Slave", HFILL }
23894cc286f3SDominic Spill },
23904cc286f3SDominic Spill { &hf_lmp_escotypesm,
23914cc286f3SDominic Spill { "eSCO Packet Type S -> M", "btbrlmp.escotypesm",
23924cc286f3SDominic Spill FT_UINT8, BASE_HEX, VALS(esco_packet_type), 0x0,
23934cc286f3SDominic Spill "eSCO Packet Type Slave to Master", HFILL }
23944cc286f3SDominic Spill },
23954cc286f3SDominic Spill { &hf_lmp_err,
23964cc286f3SDominic Spill { "Error Code", "btbrlmp.err",
23974cc286f3SDominic Spill FT_UINT8, BASE_HEX, VALS(error_code), 0x0,
23984cc286f3SDominic Spill NULL, HFILL }
23994cc286f3SDominic Spill },
24004cc286f3SDominic Spill { &hf_lmp_escohdl,
24014cc286f3SDominic Spill { "eSCO Handle", "btbrlmp.escohdl",
24024cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
24034cc286f3SDominic Spill NULL, HFILL }
24044cc286f3SDominic Spill },
24054cc286f3SDominic Spill { &hf_lmp_escoltaddr,
24064cc286f3SDominic Spill { "eSCO LT_ADDR", "btbrlmp.escoltaddr",
24074cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
24084cc286f3SDominic Spill "eSCO Logical Transport Address", HFILL }
24094cc286f3SDominic Spill },
24104cc286f3SDominic Spill { &hf_lmp_features,
24114cc286f3SDominic Spill { "Features", "btbrlmp.features",
24124cc286f3SDominic Spill /* could break out individual features but long */
24134cc286f3SDominic Spill FT_BYTES, BASE_NONE, NULL, 0x0,
24144cc286f3SDominic Spill "Feature Mask", HFILL }
24154cc286f3SDominic Spill },
24164cc286f3SDominic Spill { &hf_lmp_fpage,
24174cc286f3SDominic Spill { "Features Page", "btbrlmp.fpage",
24184cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(features_page), 0x0,
24194cc286f3SDominic Spill NULL, HFILL }
24204cc286f3SDominic Spill },
24214cc286f3SDominic Spill { &hf_lmp_htime,
24224cc286f3SDominic Spill { "Hold Time", "btbrlmp.htime",
24234cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0,
24244cc286f3SDominic Spill "Hold Time in slots", HFILL }
24254cc286f3SDominic Spill },
24264cc286f3SDominic Spill { &hf_lmp_hinst,
24274cc286f3SDominic Spill { "Hold Instant", "btbrlmp.hinst",
24284cc286f3SDominic Spill FT_UINT32, BASE_HEX, NULL, 0x0,
24294cc286f3SDominic Spill "Hold Instant (slot)", HFILL }
24304cc286f3SDominic Spill },
24314cc286f3SDominic Spill { &hf_lmp_hopmode,
24324cc286f3SDominic Spill { "Hopping Mode", "btbrlmp.hopmode",
24334cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(hopping_mode), 0x0,
24344cc286f3SDominic Spill NULL, HFILL }
24354cc286f3SDominic Spill },
24364cc286f3SDominic Spill { &hf_lmp_iocaps,
24374cc286f3SDominic Spill { "IO Capabilities", "btbrlmp.iocaps",
24384cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(io_capabilities), 0x0,
24394cc286f3SDominic Spill "Input/Output Capabilities", HFILL }
24404cc286f3SDominic Spill },
24414cc286f3SDominic Spill { &hf_lmp_jitter,
24424cc286f3SDominic Spill { "Jitter", "btbrlmp.jitter",
24434cc286f3SDominic Spill FT_UINT8, BASE_DEC, NULL, 0x0,
24444cc286f3SDominic Spill "Jitter in microseconds", HFILL }
24454cc286f3SDominic Spill },
24464cc286f3SDominic Spill { &hf_lmp_key,
24474cc286f3SDominic Spill { "Key", "btbrlmp.key",
24484cc286f3SDominic Spill FT_BYTES, BASE_NONE, NULL, 0x0,
24494cc286f3SDominic Spill NULL, HFILL }
24504cc286f3SDominic Spill },
24514cc286f3SDominic Spill { &hf_lmp_keysz,
24524cc286f3SDominic Spill { "Key Size", "btbrlmp.keysz",
24534cc286f3SDominic Spill FT_UINT8, BASE_DEC, NULL, 0x0,
24544cc286f3SDominic Spill "Key Size in bytes", HFILL }
24554cc286f3SDominic Spill },
24564cc286f3SDominic Spill { &hf_lmp_ksmask,
24574cc286f3SDominic Spill { "Key Size Mask", "btbrlmp.ksmask",
24584cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0,
24594cc286f3SDominic Spill NULL, HFILL }
24604cc286f3SDominic Spill },
24614cc286f3SDominic Spill { &hf_lmp_ltaddr1,
24624cc286f3SDominic Spill { "LT_ADDR 1", "btbrlmp.ltaddr",
24634cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0f,
24644cc286f3SDominic Spill "Logical Transport Address 1", HFILL }
24654cc286f3SDominic Spill },
24664cc286f3SDominic Spill { &hf_lmp_ltaddr2,
24674cc286f3SDominic Spill { "LT_ADDR 2", "btbrlmp.ltaddr",
24684cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0xf0,
24694cc286f3SDominic Spill "Logical Transport Address 2", HFILL }
24704cc286f3SDominic Spill },
24714cc286f3SDominic Spill { &hf_lmp_ltaddr3,
24724cc286f3SDominic Spill { "LT_ADDR 3", "btbrlmp.ltaddr",
24734cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0f,
24744cc286f3SDominic Spill "Logical Transport Address 3", HFILL }
24754cc286f3SDominic Spill },
24764cc286f3SDominic Spill { &hf_lmp_ltaddr4,
24774cc286f3SDominic Spill { "LT_ADDR 4", "btbrlmp.ltaddr",
24784cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0xf0,
24794cc286f3SDominic Spill "Logical Transport Address 4", HFILL }
24804cc286f3SDominic Spill },
24814cc286f3SDominic Spill { &hf_lmp_ltaddr5,
24824cc286f3SDominic Spill { "LT_ADDR 5", "btbrlmp.ltaddr",
24834cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0f,
24844cc286f3SDominic Spill "Logical Transport Address 5", HFILL }
24854cc286f3SDominic Spill },
24864cc286f3SDominic Spill { &hf_lmp_ltaddr6,
24874cc286f3SDominic Spill { "LT_ADDR 6", "btbrlmp.ltaddr",
24884cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0xf0,
24894cc286f3SDominic Spill "Logical Transport Address 6", HFILL }
24904cc286f3SDominic Spill },
24914cc286f3SDominic Spill { &hf_lmp_ltaddr7,
24924cc286f3SDominic Spill { "LT_ADDR 7", "btbrlmp.ltaddr",
24934cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0f,
24944cc286f3SDominic Spill "Logical Transport Address 7", HFILL }
24954cc286f3SDominic Spill },
24964cc286f3SDominic Spill { &hf_lmp_maccess,
24974cc286f3SDominic Spill { "Maccess", "btbrlmp.maccess",
24984cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0f,
24994cc286f3SDominic Spill "Number of access windows", HFILL }
25004cc286f3SDominic Spill },
25014cc286f3SDominic Spill { &hf_lmp_maxslots,
25024cc286f3SDominic Spill { "Max Slots", "btbrlmp.maxslots",
25034cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
25044cc286f3SDominic Spill NULL, HFILL }
25054cc286f3SDominic Spill },
25064cc286f3SDominic Spill { &hf_lmp_maxsp,
25074cc286f3SDominic Spill { "Max Supported Page", "btbrlmp.maxsp",
25084cc286f3SDominic Spill FT_UINT8, BASE_DEC, NULL, 0x0,
25094cc286f3SDominic Spill "Highest extended features page with non-zero bit", HFILL }
25104cc286f3SDominic Spill },
25114cc286f3SDominic Spill { &hf_lmp_maxss,
25124cc286f3SDominic Spill { "Max Sniff Subrate", "btbrlmp.maxss",
25134cc286f3SDominic Spill FT_UINT8, BASE_DEC, NULL, 0x0,
25144cc286f3SDominic Spill NULL, HFILL }
25154cc286f3SDominic Spill },
25164cc286f3SDominic Spill { &hf_lmp_minsmt,
25174cc286f3SDominic Spill { "Min Sniff Mode Timeout", "btbrlmp.minsmt",
25184cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0,
25194cc286f3SDominic Spill "Min Sniff Mode Timeout in slots", HFILL }
25204cc286f3SDominic Spill },
25214cc286f3SDominic Spill { &hf_lmp_naccslots,
25224cc286f3SDominic Spill { "Nacc-slots", "btbrlmp.naccslots",
25234cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
25244cc286f3SDominic Spill NULL, HFILL }
25254cc286f3SDominic Spill },
25264cc286f3SDominic Spill { &hf_lmp_namefrag,
25274cc286f3SDominic Spill { "Name Fragment", "btbrlmp.namefrag",
25284cc286f3SDominic Spill FT_STRING, BASE_NONE, NULL, 0x0,
25294cc286f3SDominic Spill NULL, HFILL }
25304cc286f3SDominic Spill },
25314cc286f3SDominic Spill { &hf_lmp_namelen,
25324cc286f3SDominic Spill { "Name Length", "btbrlmp.namelen",
25334cc286f3SDominic Spill FT_UINT8, BASE_DEC, NULL, 0x0,
25344cc286f3SDominic Spill "Name Length in bytes", HFILL }
25354cc286f3SDominic Spill },
25364cc286f3SDominic Spill { &hf_lmp_nameoffset,
25374cc286f3SDominic Spill { "Name Offset", "btbrlmp.nameoffset",
25384cc286f3SDominic Spill FT_UINT8, BASE_DEC, NULL, 0x0,
25394cc286f3SDominic Spill "Name Offset in bytes", HFILL }
25404cc286f3SDominic Spill },
25414cc286f3SDominic Spill { &hf_lmp_nb,
25424cc286f3SDominic Spill { "Nb", "btbrlmp.nb",
25434cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
25444cc286f3SDominic Spill NULL, HFILL }
25454cc286f3SDominic Spill },
25464cc286f3SDominic Spill { &hf_lmp_nbc,
25474cc286f3SDominic Spill { "Nbc", "btbrlmp.nbc",
25484cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
25494cc286f3SDominic Spill NULL, HFILL }
25504cc286f3SDominic Spill },
25514cc286f3SDominic Spill { &hf_lmp_nbsleep,
25524cc286f3SDominic Spill { "Nbsleep", "btbrlmp.nbsleep",
25534cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
25544cc286f3SDominic Spill NULL, HFILL }
25554cc286f3SDominic Spill },
25564cc286f3SDominic Spill { &hf_lmp_negstate,
25574cc286f3SDominic Spill { "Negotiation State", "btbrlmp.negstate",
25584cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(negotiation_state), 0x0,
25594cc286f3SDominic Spill NULL, HFILL }
25604cc286f3SDominic Spill },
25614cc286f3SDominic Spill { &hf_lmp_nonce,
25624cc286f3SDominic Spill { "Nonce Value", "btbrlmp.nonce",
25634cc286f3SDominic Spill FT_BYTES, BASE_NONE, NULL, 0x0,
25644cc286f3SDominic Spill NULL, HFILL }
25654cc286f3SDominic Spill },
25664cc286f3SDominic Spill { &hf_lmp_nottype,
25674cc286f3SDominic Spill { "Notification Type", "btbrlmp.nottype",
25684cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(notification_value), 0x0,
25694cc286f3SDominic Spill NULL, HFILL }
25704cc286f3SDominic Spill },
25714cc286f3SDominic Spill { &hf_lmp_npoll,
25724cc286f3SDominic Spill { "Npoll", "btbrlmp.npoll",
25734cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
25744cc286f3SDominic Spill NULL, HFILL }
25754cc286f3SDominic Spill },
25764cc286f3SDominic Spill { &hf_lmp_oobauthdata,
25774cc286f3SDominic Spill { "OOB Authentication Data", "btbrlmp.oobauthdata",
25784cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(oob_auth_data), 0xfe,
25794cc286f3SDominic Spill NULL, HFILL }
25804cc286f3SDominic Spill },
25814cc286f3SDominic Spill { &hf_lmp_op,
25824cc286f3SDominic Spill { "Opcode", "btbrlmp.op",
25834cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(opcode), 0xfe,
25844cc286f3SDominic Spill NULL, HFILL }
25854cc286f3SDominic Spill },
25864cc286f3SDominic Spill { &hf_lmp_opinre,
25874cc286f3SDominic Spill { "In Response To", "btbrlmp.opinre",
25884cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(opcode), 0x7f,
25894cc286f3SDominic Spill "Opcode this is in response to", HFILL }
25904cc286f3SDominic Spill },
25914cc286f3SDominic Spill { &hf_lmp_pagesch,
25924cc286f3SDominic Spill { "Paging Scheme", "btbrlmp.pagesch",
25934cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(paging_scheme), 0x0,
25944cc286f3SDominic Spill NULL, HFILL }
25954cc286f3SDominic Spill },
25964cc286f3SDominic Spill { &hf_lmp_pcmode,
25974cc286f3SDominic Spill { "Power Control Mode", "btbrlmp.pcmode",
25984cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(power_control_mode), 0x0,
25994cc286f3SDominic Spill NULL, HFILL }
26004cc286f3SDominic Spill },
26014cc286f3SDominic Spill { &hf_lmp_pkttype,
26024cc286f3SDominic Spill { "Packet Type", "btbrlmp.pkttype",
26034cc286f3SDominic Spill /* FIXME break out further */
26044cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
26054cc286f3SDominic Spill "Packet Type", HFILL }
26064cc286f3SDominic Spill },
26074cc286f3SDominic Spill { &hf_lmp_pkttypetbl,
26084cc286f3SDominic Spill { "Packet Type Table", "btbrlmp.pkttypetbl",
26094cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(packet_type_table), 0x0,
26104cc286f3SDominic Spill NULL, HFILL }
26114cc286f3SDominic Spill },
26124cc286f3SDominic Spill { &hf_lmp_pmaddr,
26134cc286f3SDominic Spill { "PM_ADDR", "btbrlmp.pmaddr",
26144cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
26154cc286f3SDominic Spill NULL, HFILL }
26164cc286f3SDominic Spill },
26174cc286f3SDominic Spill { &hf_lmp_pmaddr1,
26184cc286f3SDominic Spill { "PM_ADDR 1", "btbrlmp.pmaddr1",
26194cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
26204cc286f3SDominic Spill NULL, HFILL }
26214cc286f3SDominic Spill },
26224cc286f3SDominic Spill { &hf_lmp_pmaddr2,
26234cc286f3SDominic Spill { "PM_ADDR 2", "btbrlmp.pmaddr2",
26244cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
26254cc286f3SDominic Spill NULL, HFILL }
26264cc286f3SDominic Spill },
26274cc286f3SDominic Spill { &hf_lmp_pmaddr3,
26284cc286f3SDominic Spill { "PM_ADDR 3", "btbrlmp.pmaddr3",
26294cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
26304cc286f3SDominic Spill NULL, HFILL }
26314cc286f3SDominic Spill },
26324cc286f3SDominic Spill { &hf_lmp_pmaddr4,
26334cc286f3SDominic Spill { "PM_ADDR 4", "btbrlmp.pmaddr4",
26344cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
26354cc286f3SDominic Spill NULL, HFILL }
26364cc286f3SDominic Spill },
26374cc286f3SDominic Spill { &hf_lmp_pmaddr5,
26384cc286f3SDominic Spill { "PM_ADDR 5", "btbrlmp.pmaddr5",
26394cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
26404cc286f3SDominic Spill NULL, HFILL }
26414cc286f3SDominic Spill },
26424cc286f3SDominic Spill { &hf_lmp_pmaddr6,
26434cc286f3SDominic Spill { "PM_ADDR 6", "btbrlmp.pmaddr6",
26444cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
26454cc286f3SDominic Spill NULL, HFILL }
26464cc286f3SDominic Spill },
26474cc286f3SDominic Spill { &hf_lmp_pmaddr7,
26484cc286f3SDominic Spill { "PM_ADDR 7", "btbrlmp.pmaddr7",
26494cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
26504cc286f3SDominic Spill NULL, HFILL }
26514cc286f3SDominic Spill },
26524cc286f3SDominic Spill { &hf_lmp_pollintvl,
26534cc286f3SDominic Spill { "Poll Interval", "btbrlmp.pollintvl",
26544cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0,
26554cc286f3SDominic Spill "Poll Interval in slots", HFILL }
26564cc286f3SDominic Spill },
26574cc286f3SDominic Spill { &hf_lmp_pollper,
26584cc286f3SDominic Spill { "Poll Period", "btbrlmp.pollper",
26594cc286f3SDominic Spill FT_UINT8, BASE_DEC, NULL, 0x0,
26604cc286f3SDominic Spill "Poll Period in units of 1.25 ms", HFILL }
26614cc286f3SDominic Spill },
26624cc286f3SDominic Spill { &hf_lmp_pssettings,
26634cc286f3SDominic Spill { "Paging Scheme Settings", "btbrlmp.pssettings",
26644cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(paging_scheme_settings), 0x0,
26654cc286f3SDominic Spill NULL, HFILL }
26664cc286f3SDominic Spill },
26674cc286f3SDominic Spill { &hf_lmp_pwradjreq,
26684cc286f3SDominic Spill { "Power Adjustment Request", "btbrlmp.pwradjreq",
26694cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(power_adjust_req), 0x0,
26704cc286f3SDominic Spill NULL, HFILL }
26714cc286f3SDominic Spill },
26724cc286f3SDominic Spill { &hf_lmp_pwradjres,
26734cc286f3SDominic Spill { "Power Adjustment Response", "btbrlmp.pwradjres",
26744cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
26754cc286f3SDominic Spill NULL, HFILL }
26764cc286f3SDominic Spill },
26774cc286f3SDominic Spill { &hf_lmp_pwradj_8dpsk,
26784cc286f3SDominic Spill { "8DPSK", "btbrlmp.pwradj_8dpsk",
26794cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(power_adjust_res), 0x30,
26804cc286f3SDominic Spill "8DPSK Power Adjustment Response", HFILL }
26814cc286f3SDominic Spill },
26824cc286f3SDominic Spill { &hf_lmp_pwradj_dqpsk,
26834cc286f3SDominic Spill { "DQPSK", "btbrlmp.pwradj_dqpsk",
26844cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(power_adjust_res), 0x0C,
26854cc286f3SDominic Spill "DQPSK Power Adjustment Response", HFILL }
26864cc286f3SDominic Spill },
26874cc286f3SDominic Spill { &hf_lmp_pwradj_gfsk,
26884cc286f3SDominic Spill { "GFSK", "btbrlmp.pwradj_gfsk",
26894cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(power_adjust_res), 0x03,
26904cc286f3SDominic Spill "GFSK Power Adjustment Response", HFILL }
26914cc286f3SDominic Spill },
26924cc286f3SDominic Spill { &hf_lmp_rand,
26934cc286f3SDominic Spill { "Random Number", "btbrlmp.rand",
26944cc286f3SDominic Spill FT_BYTES, BASE_NONE, NULL, 0x0,
26954cc286f3SDominic Spill NULL, HFILL }
26964cc286f3SDominic Spill },
26974cc286f3SDominic Spill { &hf_lmp_rate,
26984cc286f3SDominic Spill { "Data Rate", "btbrlmp.rate",
26994cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
27004cc286f3SDominic Spill NULL, HFILL }
27014cc286f3SDominic Spill },
27024cc286f3SDominic Spill { &hf_lmp_rate_fec,
27034cc286f3SDominic Spill { "FEC", "btbrlmp.rate.fec",
27044cc286f3SDominic Spill FT_BOOLEAN, BASE_DEC, TFS(&fec), 0x01,
27054cc286f3SDominic Spill "Forward Error Correction", HFILL }
27064cc286f3SDominic Spill },
27074cc286f3SDominic Spill { &hf_lmp_rate_size,
27084cc286f3SDominic Spill { "Packet Size", "btbrlmp.rate.size",
27094cc286f3SDominic Spill FT_UINT8, BASE_HEX, VALS(packet_size), 0x06,
27104cc286f3SDominic Spill "Basic Rate Packet Size", HFILL }
27114cc286f3SDominic Spill },
27124cc286f3SDominic Spill { &hf_lmp_rate_type,
27134cc286f3SDominic Spill { "EDR Type", "btbrlmp.rate.type",
27144cc286f3SDominic Spill FT_UINT8, BASE_HEX, VALS(edr_type), 0x18,
27154cc286f3SDominic Spill "Enhanced Data Rate type", HFILL }
27164cc286f3SDominic Spill },
27174cc286f3SDominic Spill { &hf_lmp_rate_edrsize,
27184cc286f3SDominic Spill { "EDR Size", "btbrlmp.rate.edrsize",
27194cc286f3SDominic Spill FT_UINT8, BASE_HEX, VALS(packet_size), 0x60,
27204cc286f3SDominic Spill "Enhanced Data Rate packet size", HFILL }
27214cc286f3SDominic Spill },
27224cc286f3SDominic Spill { &hf_lmp_rxfreq,
27234cc286f3SDominic Spill { "RX Frequency", "btbrlmp.rxfreq",
27244cc286f3SDominic Spill FT_UINT8, BASE_DEC, NULL, 0x0,
27254cc286f3SDominic Spill "Receive Frequency in MHz above 2402", HFILL }
27264cc286f3SDominic Spill },
27274cc286f3SDominic Spill { &hf_lmp_scohdl,
27284cc286f3SDominic Spill { "SCO Handle", "btbrlmp.scohdl",
27294cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
27304cc286f3SDominic Spill NULL, HFILL }
27314cc286f3SDominic Spill },
27324cc286f3SDominic Spill { &hf_lmp_scopkt,
27334cc286f3SDominic Spill { "SCO Packet", "btbrlmp.scopkt",
27344cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(sco_packet), 0x0,
27354cc286f3SDominic Spill NULL, HFILL }
27364cc286f3SDominic Spill },
27374cc286f3SDominic Spill { &hf_lmp_slotoffset,
27384cc286f3SDominic Spill { "Slot Offset", "btbrlmp.slotoffset",
27394cc286f3SDominic Spill FT_UINT16, BASE_DEC, NULL, 0x0,
27404cc286f3SDominic Spill "Slot Offset in microseconds", HFILL }
27414cc286f3SDominic Spill },
27424cc286f3SDominic Spill { &hf_lmp_sniffatt,
27434cc286f3SDominic Spill { "Sniff Attempt", "btbrlmp.sniffatt",
27444cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0,
27454cc286f3SDominic Spill "Number of receive slots", HFILL }
27464cc286f3SDominic Spill },
27474cc286f3SDominic Spill { &hf_lmp_sniffsi,
27484cc286f3SDominic Spill { "Sniff Subrating Instant", "btbrlmp.sniffsi",
27494cc286f3SDominic Spill FT_UINT32, BASE_HEX, NULL, 0x0,
27504cc286f3SDominic Spill "Sniff Subrating Instant (slot)", HFILL }
27514cc286f3SDominic Spill },
27524cc286f3SDominic Spill { &hf_lmp_sniffto,
27534cc286f3SDominic Spill { "Sniff Timeout", "btbrlmp.sniffto",
27544cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0,
27554cc286f3SDominic Spill "Number of receive slots", HFILL }
27564cc286f3SDominic Spill },
27574cc286f3SDominic Spill { &hf_lmp_subversnr,
27584cc286f3SDominic Spill { "SubVersNr", "btbrlmp.subversnr",
27594cc286f3SDominic Spill FT_UINT16, BASE_DEC, NULL, 0x0,
27604cc286f3SDominic Spill "SubVersion", HFILL }
27614cc286f3SDominic Spill },
27624cc286f3SDominic Spill { &hf_lmp_suptimeout,
27634cc286f3SDominic Spill { "Supervision Timeout", "btbrlmp.suptimeout",
27644cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0,
27654cc286f3SDominic Spill "Supervision Timeout in slots", HFILL }
27664cc286f3SDominic Spill },
27674cc286f3SDominic Spill { &hf_lmp_swinst,
27684cc286f3SDominic Spill { "Switch Instant", "btbrlmp.swinst",
27694cc286f3SDominic Spill FT_UINT32, BASE_HEX, NULL, 0x0,
27704cc286f3SDominic Spill "Switch Instant (slot)", HFILL }
27714cc286f3SDominic Spill },
27724cc286f3SDominic Spill { &hf_lmp_taccess,
27734cc286f3SDominic Spill { "Taccess", "btbrlmp.taccess",
27744cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
27754cc286f3SDominic Spill "Taccess in slots", HFILL }
27764cc286f3SDominic Spill },
27774cc286f3SDominic Spill { &hf_lmp_tb,
27784cc286f3SDominic Spill { "Tb", "btbrlmp.tb",
27794cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0,
27804cc286f3SDominic Spill "Tb in slots", HFILL }
27814cc286f3SDominic Spill },
27824cc286f3SDominic Spill { &hf_lmp_tesco,
27834cc286f3SDominic Spill { "Tesco", "btbrlmp.tesco",
27844cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
27854cc286f3SDominic Spill "Tesco in slots", HFILL }
27864cc286f3SDominic Spill },
27874cc286f3SDominic Spill { &hf_lmp_testlen,
27884cc286f3SDominic Spill { "Test Length", "btbrlmp.testlen",
27894cc286f3SDominic Spill FT_UINT16, BASE_DEC, NULL, 0x0,
27904cc286f3SDominic Spill "Length of test sequence in bytes", HFILL }
27914cc286f3SDominic Spill },
27924cc286f3SDominic Spill { &hf_lmp_testscen,
27934cc286f3SDominic Spill { "Test Scenario", "btbrlmp.testscen",
27944cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(test_scenario), 0x0,
27954cc286f3SDominic Spill NULL, HFILL }
27964cc286f3SDominic Spill },
27974cc286f3SDominic Spill { &hf_lmp_tid,
27984cc286f3SDominic Spill { "TID", "btbrlmp.tid",
27994cc286f3SDominic Spill FT_BOOLEAN, BASE_DEC, TFS(&tid), 0x01,
28004cc286f3SDominic Spill "Transaction ID", HFILL }
28014cc286f3SDominic Spill },
28024cc286f3SDominic Spill { &hf_lmp_timectrl,
28034cc286f3SDominic Spill { "Timing Control Flags", "btbrlmp.timectrl",
28044cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
28054cc286f3SDominic Spill NULL, HFILL }
28064cc286f3SDominic Spill },
28074cc286f3SDominic Spill { &hf_lmp_time_change,
28084cc286f3SDominic Spill { "Timing Change", "btbrlmp.time.change",
28094cc286f3SDominic Spill FT_BOOLEAN, 8, TFS(&time_change), 0x01,
28104cc286f3SDominic Spill NULL, HFILL }
28114cc286f3SDominic Spill },
28124cc286f3SDominic Spill { &hf_lmp_time_init,
28134cc286f3SDominic Spill { "Initialization", "btbrlmp.time.init",
28144cc286f3SDominic Spill FT_BOOLEAN, 8, TFS(&time_init), 0x02,
28154cc286f3SDominic Spill NULL, HFILL }
28164cc286f3SDominic Spill },
28174cc286f3SDominic Spill { &hf_lmp_time_accwin,
28184cc286f3SDominic Spill { "Access Window", "btbrlmp.time.accwin",
28194cc286f3SDominic Spill FT_BOOLEAN, 8, TFS(&time_accwin), 0x04,
28204cc286f3SDominic Spill NULL, HFILL }
28214cc286f3SDominic Spill },
28224cc286f3SDominic Spill { &hf_lmp_tsco,
28234cc286f3SDominic Spill { "Tsco", "btbrlmp.tsco",
28244cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
28254cc286f3SDominic Spill "Tsco in slots", HFILL }
28264cc286f3SDominic Spill },
28274cc286f3SDominic Spill { &hf_lmp_tsniff,
28284cc286f3SDominic Spill { "Tsniff", "btbrlmp.tsniff",
28294cc286f3SDominic Spill FT_UINT16, BASE_HEX, NULL, 0x0,
28304cc286f3SDominic Spill "Tsniff in slots", HFILL }
28314cc286f3SDominic Spill },
28324cc286f3SDominic Spill { &hf_lmp_txfreq,
28334cc286f3SDominic Spill { "TX Frequency", "btbrlmp.txfreq",
28344cc286f3SDominic Spill FT_UINT8, BASE_DEC, NULL, 0x0,
28354cc286f3SDominic Spill "Transmit Frequency in MHz above 2402", HFILL }
28364cc286f3SDominic Spill },
28374cc286f3SDominic Spill { &hf_lmp_versnr,
28384cc286f3SDominic Spill { "VersNr", "btbrlmp.versnr",
28394cc286f3SDominic Spill FT_UINT8, BASE_DEC, VALS(versnr), 0x0,
28404cc286f3SDominic Spill "Version", HFILL }
28414cc286f3SDominic Spill },
28424cc286f3SDominic Spill { &hf_lmp_wesco,
28434cc286f3SDominic Spill { "Wesco", "btbrlmp.wesco",
28444cc286f3SDominic Spill FT_UINT8, BASE_HEX, NULL, 0x0,
28454cc286f3SDominic Spill "Number of slots in retransmission window", HFILL }
28464cc286f3SDominic Spill },
28474cc286f3SDominic Spill };
28484cc286f3SDominic Spill
28494cc286f3SDominic Spill /* protocol subtree arrays */
28504cc286f3SDominic Spill static gint *ett[] = {
28514cc286f3SDominic Spill &ett_lmp,
28524cc286f3SDominic Spill &ett_lmp_pwradjres,
28534cc286f3SDominic Spill &ett_lmp_rate,
28544cc286f3SDominic Spill &ett_lmp_timectrl,
28554cc286f3SDominic Spill };
28564cc286f3SDominic Spill
28574cc286f3SDominic Spill /* register the protocol name and description */
28584cc286f3SDominic Spill proto_btbrlmp = proto_register_protocol(
28594cc286f3SDominic Spill "Bluetooth BR Link Manager Protocol", /* full name */
28604cc286f3SDominic Spill "btbrlmp", /* short name */
28614cc286f3SDominic Spill "btbrlmp" /* abbreviation (e.g. for filters) */
28624cc286f3SDominic Spill );
28634cc286f3SDominic Spill
28644cc286f3SDominic Spill register_dissector("btbrlmp", dissect_btbrlmp, proto_btbrlmp);
28654cc286f3SDominic Spill
28664cc286f3SDominic Spill /* register the header fields and subtrees used */
28674cc286f3SDominic Spill proto_register_field_array(proto_btbrlmp, hf, array_length(hf));
28684cc286f3SDominic Spill proto_register_subtree_array(ett, array_length(ett));
28694cc286f3SDominic Spill }
28704cc286f3SDominic Spill
28714cc286f3SDominic Spill void
proto_reg_handoff_btbrlmp(void)28724cc286f3SDominic Spill proto_reg_handoff_btbrlmp(void)
28734cc286f3SDominic Spill {
28744cc286f3SDominic Spill }
28754cc286f3SDominic Spill
28764cc286f3SDominic Spill /*
28774cc286f3SDominic Spill * Editor modelines - http://www.wireshark.org/tools/modelines.html
28784cc286f3SDominic Spill *
28794cc286f3SDominic Spill * Local variables:
28804cc286f3SDominic Spill * c-basic-offset: 4
28814cc286f3SDominic Spill * tab-width: 8
28824cc286f3SDominic Spill * indent-tabs-mode: nil
28834cc286f3SDominic Spill * End:
28844cc286f3SDominic Spill *
28854cc286f3SDominic Spill * vi: set shiftwidth=4 tabstop=8 expandtab:
28864cc286f3SDominic Spill * :indentSize=4:tabSize=8:noTabs=true:
28874cc286f3SDominic Spill */
2888