3 * Dissector for the Digital Enhanced Cordless Telecommunications
9 * - Andreas Schuler <krater (A) badterrorist.com>
10 * - Matthias Wenzel <dect (A) mazzoo.de>
12 * Wireshark - Network traffic analyzer
13 * By Gerald Combs <gerald@wireshark.org>
14 * Copyright 1998 Gerald Combs
16 * This program is free software; you can redistribute it and/or
17 * modify it under the terms of the GNU General Public License
18 * as published by the Free Software Foundation; either version 2
19 * of the License, or (at your option) any later version.
21 * This program is distributed in the hope that it will be useful,
22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 * GNU General Public License for more details.
26 * You should have received a copy of the GNU General Public License
27 * along with this program; if not, write to the Free Software
28 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
32 TODO (roughly in that order)
33 - Don't use structs to access the elements in the datastream.
34 - Use tvb_..._item wherever possible
35 - Add references to documentation (ETSI EN 300 175 parts 1-8)
36 - Make things stateful
37 - Once the capture format has stabilized, get rid of the Ethernet
38 hack and use a proper capture type.
45 #include <epan/packet.h>
46 #include <epan/etypes.h>
49 #define ETHERTYPE_DECT 0x2323 /* move to epan/etypes.h */
51 #define DECT_PACKET_PP 0
52 #define DECT_PACKET_FP 1
54 /* scramble table with corrections by Jakub Hruska */
55 static guint8 scrt[8][31]=
57 {0x3B, 0xCD, 0x21, 0x5D, 0x88, 0x65, 0xBD, 0x44, 0xEF, 0x34, 0x85, 0x76, 0x21, 0x96, 0xF5, 0x13, 0xBC, 0xD2, 0x15, 0xD8, 0x86, 0x5B, 0xD4, 0x4E, 0xF3, 0x48, 0x57, 0x62, 0x19, 0x6F, 0x51},
58 {0x32, 0xDE, 0xA2, 0x77, 0x9A, 0x42, 0xBB, 0x10, 0xCB, 0x7A, 0x89, 0xDE, 0x69, 0x0A, 0xEC, 0x43, 0x2D, 0xEA, 0x27, 0x79, 0xA4, 0x2B, 0xB1, 0x0C, 0xB7, 0xA8, 0x9D, 0xE6, 0x90, 0xAE, 0xC4},
59 {0x2D, 0xEA, 0x27, 0x79, 0xA4, 0x2B, 0xB1, 0x0C, 0xB7, 0xA8, 0x9D, 0xE6, 0x90, 0xAE, 0xC4, 0x32, 0xDE, 0xA2, 0x77, 0x9A, 0x42, 0xBB, 0x10, 0xCB, 0x7A, 0x89, 0xDE, 0x69, 0x0A, 0xEC, 0x43},
60 {0x27, 0x79, 0xA4, 0x2B, 0xB1, 0x0C, 0xB7, 0xA8, 0x9D, 0xE6, 0x90, 0xAE, 0xC4, 0x32, 0xDE, 0xA2, 0x77, 0x9A, 0x42, 0xBB, 0x10, 0xCB, 0x7A, 0x89, 0xDE, 0x69, 0x0A, 0xEC, 0x43, 0x2D, 0xEA},
61 {0x19, 0x6F, 0x51, 0x3B, 0xCD, 0x21, 0x5D, 0x88, 0x65, 0xBD, 0x44, 0xEF, 0x34, 0x85, 0x76, 0x21, 0x96, 0xF5, 0x13, 0xBC, 0xD2, 0x15, 0xD8, 0x86, 0x5B, 0xD4, 0x4E, 0xF3, 0x48, 0x57, 0x62},
62 {0x13, 0xBC, 0xD2, 0x15, 0xD8, 0x86, 0x5B, 0xD4, 0x4E, 0xF3, 0x48, 0x57, 0x62, 0x19, 0x6F, 0x51, 0x3B, 0xCD, 0x21, 0x5D, 0x88, 0x65, 0xBD, 0x44, 0xEF, 0x34, 0x85, 0x76, 0x21, 0x96, 0xF5},
63 {0x0C, 0xB7, 0xA8, 0x9D, 0xE6, 0x90, 0xAE, 0xC4, 0x32, 0xDE, 0xA2, 0x77, 0x9A, 0x42, 0xBB, 0x10, 0xCB, 0x7A, 0x89, 0xDE, 0x69, 0x0A, 0xEC, 0x43, 0x2D, 0xEA, 0x27, 0x79, 0xA4, 0x2B, 0xB1},
64 {0x79, 0xA4, 0x2B, 0xB1, 0x0C, 0xB7, 0xA8, 0x9D, 0xE6, 0x90, 0xAE, 0xC4, 0x32, 0xDE, 0xA2, 0x77, 0x9A, 0x42, 0xBB, 0x10, 0xCB, 0x7A, 0x89, 0xDE, 0x69, 0x0A, 0xEC, 0x43, 0x2D, 0xEA, 0x27}
80 static int proto_dect = -1;
83 static int proto_dect2 = -1;
87 static gint ett_dect = -1;
88 static gint ett_afield = -1;
89 static gint ett_ahead = -1;
90 static gint ett_atail = -1;
91 static gint ett_aqt = -1;
92 static gint ett_bfield = -1;
94 static int hf_dect_transceivermode = -1;
95 static int hf_dect_preamble = -1;
96 static int hf_dect_type = -1;
97 static int hf_dect_channel = -1;
98 static int hf_dect_framenumber = -1;
99 static int hf_dect_rssi = -1;
100 static int hf_dect_slot = -1;
101 static int hf_dect_A = -1;
102 static int hf_dect_A_Head = -1;
103 static int hf_dect_A_Head_TA_FP = -1;
104 static int hf_dect_A_Head_TA_PP = -1;
105 static int hf_dect_A_Head_Q1 = -1;
106 static int hf_dect_A_Head_BA = -1;
107 static int hf_dect_A_Head_Q2 = -1;
108 static int hf_dect_A_Tail = -1;
109 static int hf_dect_A_Tail_Nt = -1;
110 static int hf_dect_A_Tail_Qt_Qh = -1;
111 static int hf_dect_A_Tail_Qt_0_Sn = -1;
112 static int hf_dect_A_Tail_Qt_0_Nr = -1;
113 static int hf_dect_A_Tail_Qt_0_Sp = -1;
114 static int hf_dect_A_Tail_Qt_0_Esc = -1;
115 static int hf_dect_A_Tail_Qt_0_Txs = -1;
116 static int hf_dect_A_Tail_Qt_0_Mc = -1;
117 static int hf_dect_A_Tail_Qt_0_Spr1 = -1;
118 static int hf_dect_A_Tail_Qt_0_Cn = -1;
119 static int hf_dect_A_Tail_Qt_0_Spr2 = -1;
120 static int hf_dect_A_Tail_Qt_0_PSCN = -1;
121 static int hf_dect_A_Tail_Qt_3_A12 = -1;
122 static int hf_dect_A_Tail_Qt_3_A13 = -1;
123 static int hf_dect_A_Tail_Qt_3_A14 = -1;
124 static int hf_dect_A_Tail_Qt_3_A15 = -1;
125 static int hf_dect_A_Tail_Qt_3_A16 = -1;
126 static int hf_dect_A_Tail_Qt_3_A17 = -1;
127 static int hf_dect_A_Tail_Qt_3_A18 = -1;
128 static int hf_dect_A_Tail_Qt_3_A19 = -1;
129 static int hf_dect_A_Tail_Qt_3_A20 = -1;
130 static int hf_dect_A_Tail_Qt_3_A21 = -1;
131 static int hf_dect_A_Tail_Qt_3_A22 = -1;
132 static int hf_dect_A_Tail_Qt_3_A23 = -1;
133 static int hf_dect_A_Tail_Qt_3_A24 = -1;
134 static int hf_dect_A_Tail_Qt_3_A25 = -1;
135 static int hf_dect_A_Tail_Qt_3_A26 = -1;
136 static int hf_dect_A_Tail_Qt_3_A27 = -1;
137 static int hf_dect_A_Tail_Qt_3_A28 = -1;
138 static int hf_dect_A_Tail_Qt_3_A29 = -1;
139 static int hf_dect_A_Tail_Qt_3_A30 = -1;
140 static int hf_dect_A_Tail_Qt_3_A31 = -1;
141 static int hf_dect_A_Tail_Qt_3_A32 = -1;
142 static int hf_dect_A_Tail_Qt_3_A33 = -1;
143 static int hf_dect_A_Tail_Qt_3_A34 = -1;
144 static int hf_dect_A_Tail_Qt_3_A35 = -1;
145 static int hf_dect_A_Tail_Qt_3_A36 = -1;
146 static int hf_dect_A_Tail_Qt_3_A37 = -1;
147 static int hf_dect_A_Tail_Qt_3_A38 = -1;
148 static int hf_dect_A_Tail_Qt_3_A39 = -1;
149 static int hf_dect_A_Tail_Qt_3_A40 = -1;
150 static int hf_dect_A_Tail_Qt_3_A41 = -1;
151 static int hf_dect_A_Tail_Qt_3_A42 = -1;
152 static int hf_dect_A_Tail_Qt_3_A43 = -1;
153 static int hf_dect_A_Tail_Qt_3_A44 = -1;
154 static int hf_dect_A_Tail_Qt_3_A45 = -1;
155 static int hf_dect_A_Tail_Qt_3_A46 = -1;
156 static int hf_dect_A_Tail_Qt_3_A47 = -1;
157 static int hf_dect_A_Tail_Qt_4_CRFPHops = -1;
158 static int hf_dect_A_Tail_Qt_4_CRFPEnc = -1;
159 static int hf_dect_A_Tail_Qt_4_REFHops = -1;
160 static int hf_dect_A_Tail_Qt_4_REPCap = -1;
161 static int hf_dect_A_Tail_Qt_4_Sync = -1;
162 static int hf_dect_A_Tail_Qt_4_A20 = -1;
163 static int hf_dect_A_Tail_Qt_4_MACSusp = -1;
164 static int hf_dect_A_Tail_Qt_4_MACIpq = -1;
165 static int hf_dect_A_Tail_Qt_4_A23 = -1;
166 static int hf_dect_A_Tail_Qt_4_A24 = -1;
167 static int hf_dect_A_Tail_Qt_4_A25 = -1;
168 static int hf_dect_A_Tail_Qt_4_A26 = -1;
169 static int hf_dect_A_Tail_Qt_4_A27 = -1;
170 static int hf_dect_A_Tail_Qt_4_A28 = -1;
171 static int hf_dect_A_Tail_Qt_4_A29 = -1;
172 static int hf_dect_A_Tail_Qt_4_A30 = -1;
173 static int hf_dect_A_Tail_Qt_4_A31 = -1;
174 static int hf_dect_A_Tail_Qt_4_A32 = -1;
175 static int hf_dect_A_Tail_Qt_4_A33 = -1;
176 static int hf_dect_A_Tail_Qt_4_A34 = -1;
177 static int hf_dect_A_Tail_Qt_4_A35 = -1;
178 static int hf_dect_A_Tail_Qt_4_A36 = -1;
179 static int hf_dect_A_Tail_Qt_4_A37 = -1;
180 static int hf_dect_A_Tail_Qt_4_A38 = -1;
181 static int hf_dect_A_Tail_Qt_4_A39 = -1;
182 static int hf_dect_A_Tail_Qt_4_A40 = -1;
183 static int hf_dect_A_Tail_Qt_4_A41 = -1;
184 static int hf_dect_A_Tail_Qt_4_A42 = -1;
185 static int hf_dect_A_Tail_Qt_4_A43 = -1;
186 static int hf_dect_A_Tail_Qt_4_A44 = -1;
187 static int hf_dect_A_Tail_Qt_4_A45 = -1;
188 static int hf_dect_A_Tail_Qt_4_A46 = -1;
189 static int hf_dect_A_Tail_Qt_4_A47 = -1;
190 static int hf_dect_A_Tail_Qt_6_Spare = -1;
191 static int hf_dect_A_Tail_Qt_6_Mfn = -1;
192 static int hf_dect_A_Tail_Mt_Mh = -1;
193 static int hf_dect_A_Tail_Mt_Mh_fmid = -1;
194 static int hf_dect_A_Tail_Mt_Mh_pmid = -1;
195 static int hf_dect_A_Tail_Mt_BasicConCtrl = -1;
196 static int hf_dect_A_Tail_Mt_Encr_Cmd1 = -1;
197 static int hf_dect_A_Tail_Mt_Encr_Cmd2 = -1;
198 static int hf_dect_A_Tail_Pt_ExtFlag = -1;
199 static int hf_dect_A_Tail_Pt_SDU = -1;
200 static int hf_dect_A_Tail_Pt_InfoType = -1;
201 static int hf_dect_A_Tail_Pt_Fill_Fillbits = -1;
202 static int hf_dect_A_Tail_Pt_Bearer_Sn = -1;
203 static int hf_dect_A_Tail_Pt_Bearer_Cn = -1;
204 static int hf_dect_A_Tail_Pt_Bearer_Sp = -1;
205 static int hf_dect_A_RCRC = -1;
206 static int hf_dect_B = -1;
207 static int hf_dect_B_Data = -1;
208 static int hf_dect_B_fn = -1;
209 static int hf_dect_B_XCRC = -1;
211 static const value_string tranceiver_mode[]=
218 static const value_string TA_vals_FP[]=
220 {0, "Ct Next Data Packet"},
221 {1, "Ct First Data Packet"},
222 {2, "Nt Identities Information on Connectionless Bearer"},
223 {3, "Nt Identities Information"},
224 {4, "Qt Multiframe Synchronisation and System Information"},
226 {6, "Mt MAC Layer Control"},
227 {7, "Pt Paging Tail"},
231 static const value_string TA_vals_PP[]=
233 {0, "Ct Next Data Packet"},
234 {1, "Ct First Data Packet"},
235 {2, "Nt Identities Information on Connectionless Bearer"},
236 {3, "Nt Identities Information"},
237 {4, "Qt Multiframe Synchronisation and System Information"},
239 {6, "Mt MAC Layer Control"},
240 {7, "Mt MAC Layer Control,first packet"},
244 static const value_string BA_vals[]=
246 {0, "U-Type, In, SIn or Ip Packet No. 0 or No Valid Ip_error_detect Channel Data"},
247 {1, "U-Type, Ip_error_detect or Ip Packet No. 1 or SIn or No Valid In Channel Data"},
248 {2, "Double-Slot Required / E-Type, all Cf or CLf, Packet No. 0"},
249 {3, "E-Type, All Cf, Packet No. 1"},
250 {4, "Half-Slot Required / E-Type, not all Cf or CLf, Cf Packet No. 0"},
251 {5, "E-Type, not all Cf, Cf Packet No. 1"},
252 {6, "E-Type, All MAC control (unnumbered)"},
257 static const value_string QTHead_vals[]=
259 {0, "Static System Info"},
260 {1, "Static System Info"},
261 {2, "Extended RF Carriers Part 1"},
262 {3, "Fixed Part Capabilities"},
263 {4, "Extended Fixed Part Capabilities"},
264 {5, "SARI List Contents"},
265 {6, "Multi-Frame No."},
268 {9, "Extended RF Carriers Part 2"},
270 {11, "Transmit Information(?)"},
278 static const value_string QTNormalReverse_vals[]=
280 {0, "Normal RFP Transmit Half-Frame"},
281 {1, "Normal PP Transmit Half-Frame"},
285 static const value_string QTSlotNumber_vals[]=
287 {0, "Slot Pair 0/12"},
288 {1, "Slot Pair 1/13"},
289 {2, "Slot Pair 2/14"},
290 {3, "Slot Pair 3/15"},
291 {4, "Slot Pair 4/16"},
292 {5, "Slot Pair 5/17"},
293 {6, "Slot Pair 6/18"},
294 {7, "Slot Pair 7/19"},
295 {8, "Slot Pair 8/20"},
296 {9, "Slot Pair 9/21"},
297 {10, "Slot Pair 10/22"},
298 {11, "Slot Pair 11/23"},
306 static const value_string QTStartPosition_vals[]=
308 {0, "S-Field starts at Bit F0"},
309 {1, "Reserved for Future Use"},
310 {2, "S-Field starts at Bit F240"},
311 {3, "Reserved for Future Use"},
315 static const value_string QTEscape_vals[]=
317 {0, "No QT Escape is broadcast"},
318 {1, "The QT Escape is broadcast"},
322 static const value_string QTTranceiver_vals[]=
324 {0, "RFP has 1 Transceiver"},
325 {1, "RFP has 2 Transceiver"},
326 {2, "RFP has 3 Transceiver"},
327 {3, "RFP has 4 or more Transceiver"},
331 static const value_string QTExtendedCarrier_vals[]=
333 {0, "No Extended RF Carrier Information Message"},
334 {1, "Extended RF Carrier Information Message shall be transmitted in the next Multiframe"},
338 static const value_string QTSpr_vals[]=
347 static const value_string QTCarrierNumber_vals[]=
359 {10, "RF Carrier 10"},
360 {11, "RF Carrier 11"},
361 {12, "RF Carrier 12"},
362 {13, "RF Carrier 13"},
363 {14, "RF Carrier 14"},
364 {15, "RF Carrier 15"},
365 {16, "RF Carrier 16"},
366 {17, "RF Carrier 17"},
367 {18, "RF Carrier 18"},
368 {19, "RF Carrier 19"},
369 {20, "RF Carrier 20"},
370 {21, "RF Carrier 21"},
371 {22, "RF Carrier 22"},
372 {23, "RF Carrier 23"},
373 {24, "RF Carrier 24"},
374 {25, "RF Carrier 25"},
375 {26, "RF Carrier 26"},
376 {27, "RF Carrier 27"},
377 {28, "RF Carrier 28"},
378 {29, "RF Carrier 29"},
379 {30, "RF Carrier 30"},
380 {31, "RF Carrier 31"},
381 {32, "RF Carrier 32"},
382 {33, "RF Carrier 33"},
383 {34, "RF Carrier 34"},
384 {35, "RF Carrier 35"},
385 {36, "RF Carrier 36"},
386 {37, "RF Carrier 37"},
387 {38, "RF Carrier 38"},
388 {39, "RF Carrier 39"},
389 {40, "RF Carrier 40"},
390 {41, "RF Carrier 41"},
391 {42, "RF Carrier 42"},
392 {43, "RF Carrier 43"},
393 {44, "RF Carrier 44"},
394 {45, "RF Carrier 45"},
395 {46, "RF Carrier 46"},
396 {47, "RF Carrier 47"},
397 {48, "RF Carrier 48"},
398 {49, "RF Carrier 49"},
399 {50, "RF Carrier 50"},
400 {51, "RF Carrier 51"},
401 {52, "RF Carrier 52"},
402 {53, "RF Carrier 53"},
403 {54, "RF Carrier 54"},
404 {55, "RF Carrier 55"},
405 {56, "RF Carrier 56"},
406 {57, "RF Carrier 57"},
407 {58, "RF Carrier 58"},
408 {59, "RF Carrier 59"},
409 {60, "RF Carrier 60"},
410 {61, "RF Carrier 61"},
411 {62, "RF Carrier 62"},
412 {63, "RF Carrier 63"},
416 static const value_string QTScanCarrierNum_vals[]=
418 {0, "Primary Scan next on RF Carrier 0"},
419 {1, "Primary Scan next on RF Carrier 1"},
420 {2, "Primary Scan next on RF Carrier 2"},
421 {3, "Primary Scan next on RF Carrier 3"},
422 {4, "Primary Scan next on RF Carrier 4"},
423 {5, "Primary Scan next on RF Carrier 5"},
424 {6, "Primary Scan next on RF Carrier 6"},
425 {7, "Primary Scan next on RF Carrier 7"},
426 {8, "Primary Scan next on RF Carrier 8"},
427 {9, "Primary Scan next on RF Carrier 9"},
428 {10, "Primary Scan next on RF Carrier 10"},
429 {11, "Primary Scan next on RF Carrier 11"},
430 {12, "Primary Scan next on RF Carrier 12"},
431 {13, "Primary Scan next on RF Carrier 13"},
432 {14, "Primary Scan next on RF Carrier 14"},
433 {15, "Primary Scan next on RF Carrier 15"},
434 {16, "Primary Scan next on RF Carrier 16"},
435 {17, "Primary Scan next on RF Carrier 17"},
436 {18, "Primary Scan next on RF Carrier 18"},
437 {19, "Primary Scan next on RF Carrier 19"},
438 {20, "Primary Scan next on RF Carrier 20"},
439 {21, "Primary Scan next on RF Carrier 21"},
440 {22, "Primary Scan next on RF Carrier 22"},
441 {23, "Primary Scan next on RF Carrier 23"},
442 {24, "Primary Scan next on RF Carrier 24"},
443 {25, "Primary Scan next on RF Carrier 25"},
444 {26, "Primary Scan next on RF Carrier 26"},
445 {27, "Primary Scan next on RF Carrier 27"},
446 {28, "Primary Scan next on RF Carrier 28"},
447 {29, "Primary Scan next on RF Carrier 29"},
448 {30, "Primary Scan next on RF Carrier 30"},
449 {31, "Primary Scan next on RF Carrier 31"},
450 {32, "Primary Scan next on RF Carrier 32"},
451 {33, "Primary Scan next on RF Carrier 33"},
452 {34, "Primary Scan next on RF Carrier 34"},
453 {35, "Primary Scan next on RF Carrier 35"},
454 {36, "Primary Scan next on RF Carrier 36"},
455 {37, "Primary Scan next on RF Carrier 37"},
456 {38, "Primary Scan next on RF Carrier 38"},
457 {39, "Primary Scan next on RF Carrier 39"},
458 {40, "Primary Scan next on RF Carrier 40"},
459 {41, "Primary Scan next on RF Carrier 41"},
460 {42, "Primary Scan next on RF Carrier 42"},
461 {43, "Primary Scan next on RF Carrier 43"},
462 {44, "Primary Scan next on RF Carrier 44"},
463 {45, "Primary Scan next on RF Carrier 45"},
464 {46, "Primary Scan next on RF Carrier 46"},
465 {47, "Primary Scan next on RF Carrier 47"},
466 {48, "Primary Scan next on RF Carrier 48"},
467 {49, "Primary Scan next on RF Carrier 49"},
468 {50, "Primary Scan next on RF Carrier 50"},
469 {51, "Primary Scan next on RF Carrier 51"},
470 {52, "Primary Scan next on RF Carrier 52"},
471 {53, "Primary Scan next on RF Carrier 53"},
472 {54, "Primary Scan next on RF Carrier 54"},
473 {55, "Primary Scan next on RF Carrier 55"},
474 {56, "Primary Scan next on RF Carrier 56"},
475 {57, "Primary Scan next on RF Carrier 57"},
476 {58, "Primary Scan next on RF Carrier 58"},
477 {59, "Primary Scan next on RF Carrier 59"},
478 {60, "Primary Scan next on RF Carrier 60"},
479 {61, "Primary Scan next on RF Carrier 61"},
480 {62, "Primary Scan next on RF Carrier 62"},
481 {63, "Primary Scan next on RF Carrier 63"},
485 static const value_string Qt_A12_vals[]=
487 {0, " Extended FP Info"},
488 {1, "Extended FP Info"},
492 static const value_string Qt_A13_vals[]=
494 {0, " Double Duplex Bearer Connections"},
495 {1, "Double Duplex Bearer Connections"},
499 static const value_string Qt_A14_vals[]=
506 static const value_string Qt_A15_vals[]=
513 static const value_string Qt_A16_vals[]=
520 static const value_string Qt_A17_vals[]=
527 static const value_string Qt_A18_vals[]=
529 {0, " Frequency Control"},
530 {1, "Frequency Control"},
534 static const value_string Qt_A19_vals[]=
536 {0, " Page Repetition"},
537 {1, "Page Repetition"},
541 static const value_string Qt_A20_vals[]=
543 {0, " C/O Setup on Dummy allowed"},
544 {1, "C/O Setup on Dummy allowed"},
548 static const value_string Qt_A21_vals[]=
555 static const value_string Qt_A22_vals[]=
557 {0, " C/L Downlink"},
562 static const value_string Qt_A23_vals[]=
564 {0, " Basic A-Field Set-Up"},
565 {1, "Basic A-Field Set-Up"},
569 static const value_string Qt_A24_vals[]=
571 {0, " Advanced A-Field Set-Up"},
572 {1, "Advanced A-Field Set-Up"},
576 static const value_string Qt_A25_vals[]=
578 {0, " B-field Set-Up"},
579 {1, "B-field Set-Up"},
583 static const value_string Qt_A26_vals[]=
590 static const value_string Qt_A27_vals[]=
592 {0, " In Minimum Delay"},
593 {1, "In Minimum Delay"},
597 static const value_string Qt_A28_vals[]=
599 {0, " In Normal Delay"},
600 {1, "In Normal Delay"},
604 static const value_string Qt_A29_vals[]=
606 {0, " Ip Error Detection"},
607 {1, "Ip Error Detection"},
611 static const value_string Qt_A30_vals[]=
613 {0, " Ip Error Correction"},
614 {1, "Ip Error Correction"},
618 static const value_string Qt_A31_vals[]=
620 {0, " Multibearer Connections"},
621 {1, "Multibearer Connections"},
625 static const value_string Qt_A32_vals[]=
627 {0, " ADPCM/G.726 Voice service"},
628 {1, "ADPCM/G.726 Voice service"},
632 static const value_string Qt_A33_vals[]=
634 {0, " GAP basic speech"},
635 {1, "GAP basic speech"},
639 static const value_string Qt_A34_vals[]=
641 {0, " Non-voice circuit switched service"},
642 {1, "Non-voice circuit switched service"},
646 static const value_string Qt_A35_vals[]=
648 {0, " Non-voice packet switched service"},
649 {1, "Non-voice packet switched service"},
653 static const value_string Qt_A36_vals[]=
655 {0, " Standard authentication required"},
656 {1, "Standard authentication required"},
660 static const value_string Qt_A37_vals[]=
662 {0, " Standard ciphering supported"},
663 {1, "Standard ciphering supported"},
667 static const value_string Qt_A38_vals[]=
669 {0, " Location registration supported"},
670 {1, "Location registration supported"},
674 static const value_string Qt_A39_vals[]=
676 {0, " SIM services available"},
677 {1, "SIM services available"},
681 static const value_string Qt_A40_vals[]=
683 {0, " Non-static Fixed Part (FP)"},
684 {1, "Non-static Fixed Part (FP)"},
688 static const value_string Qt_A41_vals[]=
690 {0, " CISS services available"},
691 {1, "CISS services available"},
695 static const value_string Qt_A42_vals[]=
697 {0, " CLMS service available"},
698 {1, "CLMS service available"},
702 static const value_string Qt_A43_vals[]=
704 {0, " COMS service available"},
705 {1, "COMS service available"},
709 static const value_string Qt_A44_vals[]=
711 {0, " Access rights requests supported"},
712 {1, "Access rights requests supported"},
716 static const value_string Qt_A45_vals[]=
718 {0, " External handover supported"},
719 {1, "External handover supported"},
723 static const value_string Qt_A46_vals[]=
725 {0, " Connection handover supported"},
726 {1, "Connection handover supported"},
730 static const value_string Qt_A47_vals[]=
738 static const value_string Qt_EA20_vals[]=
745 static const value_string Qt_CRFPHops_vals[]=
747 {0, "1 CRFP is allowed"},
748 {1, "2 CRFP allowed in cascade"},
749 {2, "3 CRFP allowed in cascade"},
750 {3, "No CRFP allowed"},
754 static const value_string Qt_CRFPEnc_vals[]=
756 {0, "CRFP encryption not supported"},
757 {1, "CRFP encryption supported"},
761 static const value_string Qt_REPHops_vals[]=
763 {0, "REP not supported"},
764 {1, "1 REP is allowed"},
765 {2, "2 REP are allowed in cascade"},
766 {3, "3 REP are allowed in cascade"},
770 static const value_string Qt_REPCap_vals[]=
772 {0, "REP interlacing not supported"},
773 {1, "REP interlacing supported"},
777 static const value_string Qt_Sync_vals[]=
779 {0, "standard, see EN 300 175-2 [2], clauses 4.6 and 5.2"},
780 {1, "prolonged preamble, see EN 300 175-2 [2], annex C (see note)"},
786 static const value_string Qt_MACSusp_vals[]=
788 {0, "Suspend and Resume not supported"},
789 {1, "Suspend and Resume supported"},
793 static const value_string Qt_MACIpq_vals[]=
795 {0, "Ipq not supported"},
796 {1, "Ipq supported"},
800 static const value_string Qt_EA23_vals[]=
802 {0, " Extended Fixed Part Info 2"},
803 {1, "Extended Fixed Part Info 2"},
807 static const value_string Qt_EA24_vals[]=
814 static const value_string Qt_EA25_vals[]=
816 {0, " F-MMS Interworking profile supported"},
817 {1, "F-MMS Interworking profile supported"},
821 static const value_string Qt_EA26_vals[]=
823 {0, " Basic ODAP supported"},
824 {1, "Basic ODAP supported"},
828 static const value_string Qt_EA27_vals[]=
830 {0, " Generic Media Encapsulation transport (DPRS) supported"},
831 {1, "Generic Media Encapsulation transport (DPRS) supported"},
835 static const value_string Qt_EA28_vals[]=
837 {0, " IP Roaming unrestricted supported"},
838 {1, "IP Roaming unrestricted supported"},
842 static const value_string Qt_EA29_vals[]=
849 static const value_string Qt_EA30_vals[]=
856 static const value_string Qt_EA31_vals[]=
863 static const value_string Qt_EA32_vals[]=
870 static const value_string Qt_EA33_vals[]=
877 static const value_string Qt_EA34_vals[]=
884 static const value_string Qt_EA35_vals[]=
891 static const value_string Qt_EA36_vals[]=
893 {0, " RAP Part 1 Profile"},
894 {1, "RAP Part 1 Profile"},
898 static const value_string Qt_EA37_vals[]=
900 {0, " ISDN intermediate system"},
901 {1, "ISDN intermediate system"},
905 static const value_string Qt_EA38_vals[]=
907 {0, " Synchronization to GPS achieved"},
908 {1, "Synchronization to GPS achieved"},
912 static const value_string Qt_EA39_vals[]=
914 {0, " Location registration with TPUI allowed"},
915 {1, "Location registration with TPUI allowed"},
919 static const value_string Qt_EA40_vals[]=
921 {0, " Emergency call supported"},
922 {1, "Emergency call supported"},
926 static const value_string Qt_EA41_vals[]=
928 {0, " Asymmetric bearers supported"},
929 {1, "Asymmetric bearers supported"},
933 static const value_string Qt_EA42_vals[]=
940 static const value_string Qt_EA43_vals[]=
947 static const value_string Qt_EA44_vals[]=
949 {0, " Data Service Profile D"},
950 {1, "Data Service Profile D"},
954 static const value_string Qt_EA45_vals[]=
961 static const value_string Qt_EA46_vals[]=
968 static const value_string Qt_EA47_vals[]=
970 {0, " ISDN Data Services"},
971 {1, "ISDN Data Services"},
978 static const value_string MTHead_vals[]=
980 {0, "Basic Connection Control"},
981 {1, "Advanced Connection Control"},
982 {2, "MAC Layer Test Messages"},
983 {3, "Quality Control"},
984 {4, "Broadcast and Connectionless Services"},
985 {5, "Encryption Control"},
986 {6, "Tail for use with the first Transmission of a B-Field \"bearer request\" Message"},
989 {9, "REP Connection Control"},
999 static const value_string MTBasicConCtrl_vals[]=
1001 {0, "Access Request"},
1002 {1, "Bearer Handover Request"},
1003 {2, "Connection Handover Request"},
1004 {3, "Unconfirmed Access Request"},
1005 {4, "Bearer Confirm"},
1007 {6, "Attributes T Request"},
1008 {7, "Attributes T Confirm"},
1020 static const value_string MTEncrCmd1_vals[]=
1022 {0, "Start Encryption"},
1023 {1, "Stop Encryption"},
1029 static const value_string MTEncrCmd2_vals[]=
1038 static const value_string PTExtFlag_vals[]=
1045 static const value_string PTSDU_vals[]=
1047 {0, "Zero Length Page"},
1050 {3, "MAC resume page"},
1051 {4, "Not the last 36 Bits of a Long Page"},
1052 {5, "The first 36 Bits of a Long Page"},
1053 {6, "The last 36 Bits of a Long Page"},
1054 {7, "All of a Long Page (first and last)"},
1058 static const value_string PTInfoType_vals[]=
1061 {1, "Blind Full Slot Information for Circuit Mode Service"},
1062 {2, "Other Bearer"},
1063 {3, "Recommended Other Bearer"},
1064 {4, "Good RFP Bearer"},
1065 {5, "Dummy or connectionless Bearer Position"},
1066 {6, "Extended Modulation Types"},
1068 {8, "Dummy or connectionless Bearer Marker"},
1069 {9, "Bearer Handover/Replacement Information"},
1070 {10, "RFP Status and Modulation Types"},
1071 {11, "Active Carriers"},
1072 {12, "Connectionless Bearer Position"},
1073 {13, "RFP Power Level"},
1074 {14, "Blind Double Slot/RFP-FP Interface Resource Information"},
1075 {15, "Blind Full Slot Information for Packet Mode Service"},
1079 static const value_string PTRFPPower_vals[]=
1100 static unsigned char
1101 getbit(guint8 *data, int bit)
1104 guint8 byte=data[bit/8];
1109 return (byte&c)>>bit%8;
1113 setbit(guint8 *data, int bit, guint8 value)
1116 data[bit/8]&=~(1<<(bit%8));
1118 data[bit/8]|=(1<<(bit%8));
1122 calc_xcrc(guint8* data, guint8 length)
1132 setbit(bits, y, getbit(data, y+48*(1+(int)(y/16))));
1170 calc_rcrc(guint8* data)
1172 guint16 gp=0x0589; /* 10000010110001001 without the leading 1 */
1178 crc=data[0]<<8|data[1];
1187 while(!(crc&0x8000))
1210 dissect_bfield(gboolean dect_packet_type _U_, guint8 a_header,
1211 struct dect_bfield *pkt_bfield, packet_info *pinfo, const guint8 *pkt_ptr _U_,
1212 tvbuff_t *tvb, proto_item *ti _U_, proto_tree *DectTree, gint offset)
1214 guint8 xcrc, xcrclen;
1217 proto_item *bfieldti =NULL;
1219 proto_item *bxcrc =NULL;
1221 proto_tree *BField =NULL;
1224 switch((a_header&0x0E)>>1)
1234 if(check_col(pinfo->cinfo, COL_INFO /*Type1*/))
1236 col_append_str(pinfo->cinfo, COL_INFO /*Type1*/, "Full Slot");
1243 if(check_col(pinfo->cinfo, COL_INFO /*Type1*/))
1245 col_append_str(pinfo->cinfo, COL_INFO /*Type1*/, "Double Slot");
1252 if(check_col(pinfo->cinfo, COL_INFO /*Type1*/))
1254 col_append_str(pinfo->cinfo, COL_INFO /*Type1*/, "Half Slot");
1262 if(check_col(pinfo->cinfo, COL_INFO /*Type1*/))
1264 col_append_str(pinfo->cinfo, COL_INFO /*Type1*/, "No B-Field");
1271 bfieldti = proto_tree_add_item(DectTree, hf_dect_B, tvb, offset, 40, FALSE);
1272 BField = proto_item_add_subtree(bfieldti, ett_bfield);
1277 if((blen+(xcrclen/8)+1)<=pkt_bfield->Length)
1280 for(x=0;x<blen;x+=16)
1283 * XXX - should this just be an FTYPE_BYTES field,
1284 * and possibly just displayed as "Data: N bytes"
1285 * rather than giving all the bytes of data?
1292 proto_tree_add_item(BField, hf_dect_B_Data, tvb, offset, y, FALSE);
1296 /* XXX: Why 16-y and not y??? */
1301 guint16 bytecount=0;
1305 proto_tree_add_none_format(BField, hf_dect_B_fn, tvb, offset, 0, "\nFramenumber %u/%u", fn, fn+8);
1306 for(x=0;x<blen;x+=16)
1309 * XXX - should this just be an FTYPE_BYTES
1310 * field, and possibly just displayed as
1311 * "Data: N bytes" rather than giving all
1312 * the bytes of data?
1314 emem_strbuf_t *string;
1315 string = ep_strbuf_new(NULL);
1321 ep_strbuf_append_printf(string,"%.2x ", pkt_bfield->Data[x+y]^scrt[fn][bytecount%31]);
1324 proto_tree_add_uint_format(BField, hf_dect_B_Data, tvb, offset, y, 0x2323, "Data: %s", string->str);
1331 xcrc=calc_xcrc(pkt_bfield->Data, 83);
1333 if(xcrc!=(pkt_bfield->Data[40]&0xf0))
1334 /* XXX: pkt_bfield->Data[40]&0xf0 isn't really the Recv value?? */
1335 proto_tree_add_uint_format(bfieldti, hf_dect_B_XCRC, tvb, offset, 1, 0, "X-CRC Error (Calc:%.2x, Recv:%.2x)", xcrc, pkt_bfield->Data[40]&0xf0);
1337 /* XXX: pkt_bfield->Data[40]&0xf0 isn't really the Recv value?? */
1338 proto_tree_add_uint_format(bfieldti, hf_dect_B_XCRC, tvb, offset, 1, 1, "X-CRC Match (Calc:%.2x, Recv:%.2x)", xcrc, pkt_bfield->Data[40]&0xf0);
1341 proto_tree_add_uint_format(BField, hf_dect_B_Data, tvb, offset, 0, 0x2323, "Data too Short");
1346 dissect_decttype(gboolean dect_packet_type, struct dect_afield *pkt_afield,
1347 struct dect_bfield *pkt_bfield, packet_info *pinfo, const guint8 *pkt_ptr,
1348 tvbuff_t *tvb, proto_item *ti, proto_tree *DectTree)
1354 proto_item *afieldti =NULL;
1355 proto_item *aheadti =NULL;
1356 proto_item *atailti =NULL;
1358 proto_item *arcrc =NULL;
1359 proto_item *aqtti =NULL;
1361 proto_tree *AField =NULL;
1362 proto_tree *AHead =NULL;
1363 proto_tree *ATail =NULL;
1365 guint8 header, tail_0, tail_1, tail_2, tail_3, tail_4;
1367 proto_tree *AQT =NULL;
1370 /************************** A-Field ***********************************/
1373 header=tvb_get_guint8(tvb, offset+0);
1374 tail_0=tvb_get_guint8(tvb, offset+1);
1375 tail_1=tvb_get_guint8(tvb, offset+2);
1376 tail_2=tvb_get_guint8(tvb, offset+3);
1377 tail_3=tvb_get_guint8(tvb, offset+4);
1378 tail_4=tvb_get_guint8(tvb, offset+5);
1379 tailtype = header >> 5;
1380 afieldti = proto_tree_add_item(DectTree, hf_dect_A, tvb, offset, 8, FALSE);
1381 AField = proto_item_add_subtree(afieldti, ett_afield);
1384 aheadti = proto_tree_add_item(afieldti, hf_dect_A_Head, tvb, offset, 1, FALSE);
1385 AHead = proto_item_add_subtree(aheadti, ett_ahead);
1387 if(dect_packet_type==DECT_PACKET_FP)
1388 proto_tree_add_item(AHead, hf_dect_A_Head_TA_FP, tvb, offset, 1, FALSE);
1390 proto_tree_add_item(AHead, hf_dect_A_Head_TA_PP, tvb, offset, 1, FALSE);
1392 proto_tree_add_item(AHead, hf_dect_A_Head_Q1, tvb, offset, 1, FALSE);
1393 proto_tree_add_item(AHead, hf_dect_A_Head_BA, tvb, offset, 1, FALSE);
1394 proto_tree_add_item(AHead, hf_dect_A_Head_Q2, tvb, offset, 1, FALSE);
1398 if(dect_packet_type==DECT_PACKET_FP)
1400 atailti = proto_tree_add_uint_format(afieldti, hf_dect_A_Tail, tvb, offset, 5, 0x2323, "FP-Tail: %s", val_to_str(tailtype, TA_vals_FP, "Error, please report: %d"));
1404 atailti = proto_tree_add_uint_format(afieldti, hf_dect_A_Tail, tvb, offset, 5, 0x2323, "PP-Tail: %s", val_to_str(tailtype, TA_vals_PP, "Error, please report: %d"));
1407 ATail = proto_item_add_subtree(atailti, ett_atail);
1409 if((tailtype==0)||(tailtype==1)) /* Ct */
1411 if(check_col(pinfo->cinfo, COL_INFO))
1412 col_set_str(pinfo->cinfo, COL_INFO, "[Ct]");
1414 else if((tailtype==2)||(tailtype==3)) /* Nt, Nt connectionless bearer */
1416 if(check_col(pinfo->cinfo, COL_INFO))
1417 col_set_str(pinfo->cinfo, COL_INFO, "[Nt]");
1418 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1419 col_append_fstr(pinfo->cinfo, COL_INFO /*Type2*/, "RFPI: %s",
1420 tvb_bytes_to_str(tvb, offset, 5));
1422 proto_tree_add_item(atailti, hf_dect_A_Tail_Nt, tvb, offset, 5, FALSE);
1424 else if(tailtype==4) /* Qt */
1426 if(check_col(pinfo->cinfo, COL_INFO))
1427 col_set_str(pinfo->cinfo, COL_INFO, "[Qt]");
1429 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_Qh, tvb, offset, 1, FALSE);
1433 case 0: /* Static System Info */
1435 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1436 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "Static System Info");
1438 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_0_Nr, tvb, offset, 1, FALSE);
1439 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_0_Sn, tvb, offset, 1, FALSE);
1442 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_0_Sp, tvb, offset, 1, FALSE);
1443 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_0_Esc, tvb, offset, 1, FALSE);
1444 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_0_Txs, tvb, offset, 1, FALSE);
1445 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_0_Mc, tvb, offset, 1, FALSE);
1448 proto_tree_add_uint_format(ATail, hf_dect_A_Tail_Mt_Mh, tvb, offset, 2, 0x2323, " Carrier%s%s%s%s%s%s%s%s%s%s available",
1449 (tail_1&0x02)?" 0":"", (tail_1&0x01)?" 1":"", (tail_2&0x80)?" 2":"",
1450 (tail_2&0x40)?" 3":"", (tail_2&0x20)?" 4":"", (tail_2&0x10)?" 5":"",
1451 (tail_2&0x08)?" 6":"", (tail_2&0x04)?" 7":"", (tail_2&0x02)?" 8":"",
1452 (tail_2&0x01)?" 9":"");
1455 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_0_Spr1, tvb, offset, 1, FALSE);
1456 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_0_Cn, tvb, offset, 1, FALSE);
1459 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_0_Spr2, tvb, offset, 1, FALSE);
1460 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_0_PSCN, tvb, offset, 1, FALSE);
1462 /* due to addition further down */
1465 case 2: /* Extended RF Carriers Part 1 */
1466 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1467 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "Extended RF Carriers Part 1");
1469 case 3: /* Fixed Part Capabilities */
1470 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1471 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "Fixed Part Capabilities");
1473 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A12, tvb, offset, 1, FALSE);
1474 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A13, tvb, offset, 1, FALSE);
1475 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A14, tvb, offset, 1, FALSE);
1476 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A15, tvb, offset, 1, FALSE);
1479 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A16, tvb, offset, 1, FALSE);
1480 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A17, tvb, offset, 1, FALSE);
1481 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A18, tvb, offset, 1, FALSE);
1482 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A19, tvb, offset, 1, FALSE);
1483 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A20, tvb, offset, 1, FALSE);
1484 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A21, tvb, offset, 1, FALSE);
1485 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A22, tvb, offset, 1, FALSE);
1486 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A23, tvb, offset, 1, FALSE);
1489 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A24, tvb, offset, 1, FALSE);
1490 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A25, tvb, offset, 1, FALSE);
1491 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A26, tvb, offset, 1, FALSE);
1492 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A27, tvb, offset, 1, FALSE);
1493 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A28, tvb, offset, 1, FALSE);
1494 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A29, tvb, offset, 1, FALSE);
1495 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A30, tvb, offset, 1, FALSE);
1496 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A31, tvb, offset, 1, FALSE);
1500 /* higher layer capabilities */
1501 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A32, tvb, offset, 1, FALSE);
1502 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A33, tvb, offset, 1, FALSE);
1503 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A34, tvb, offset, 1, FALSE);
1504 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A35, tvb, offset, 1, FALSE);
1505 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A36, tvb, offset, 1, FALSE);
1506 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A37, tvb, offset, 1, FALSE);
1507 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A38, tvb, offset, 1, FALSE);
1508 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A39, tvb, offset, 1, FALSE);
1511 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A40, tvb, offset, 1, FALSE);
1512 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A41, tvb, offset, 1, FALSE);
1513 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A42, tvb, offset, 1, FALSE);
1514 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A43, tvb, offset, 1, FALSE);
1515 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A44, tvb, offset, 1, FALSE);
1516 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A45, tvb, offset, 1, FALSE);
1517 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A46, tvb, offset, 1, FALSE);
1518 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_3_A47, tvb, offset, 1, FALSE);
1521 /* due to addition further down */
1524 case 4: /* Extended Fixed Part Capabilities */
1525 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1526 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "Extended Fixed Part Capabilities");
1528 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_CRFPHops, tvb, offset, 1, FALSE);
1529 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_CRFPEnc, tvb, offset, 1, FALSE);
1530 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_REFHops, tvb, offset, 2, FALSE);
1533 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_REPCap, tvb, offset, 1, FALSE);
1534 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_Sync, tvb, offset, 1, FALSE);
1535 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A20, tvb, offset, 1, FALSE);
1536 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_MACSusp, tvb, offset, 1, FALSE);
1537 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_MACIpq, tvb, offset, 1, FALSE);
1538 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A23, tvb, offset, 1, FALSE);
1542 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A24, tvb, offset, 1, FALSE);
1544 /* higher layer capabilities */
1545 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A25, tvb, offset, 1, FALSE);
1546 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A26, tvb, offset, 1, FALSE);
1547 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A27, tvb, offset, 1, FALSE);
1548 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A28, tvb, offset, 1, FALSE);
1549 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A29, tvb, offset, 1, FALSE);
1550 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A30, tvb, offset, 1, FALSE);
1551 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A31, tvb, offset, 1, FALSE);
1555 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A32, tvb, offset, 1, FALSE);
1556 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A33, tvb, offset, 1, FALSE);
1557 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A34, tvb, offset, 1, FALSE);
1558 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A35, tvb, offset, 1, FALSE);
1559 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A36, tvb, offset, 1, FALSE);
1560 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A37, tvb, offset, 1, FALSE);
1561 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A38, tvb, offset, 1, FALSE);
1562 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A39, tvb, offset, 1, FALSE);
1565 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A40, tvb, offset, 1, FALSE);
1566 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A41, tvb, offset, 1, FALSE);
1567 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A42, tvb, offset, 1, FALSE);
1568 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A43, tvb, offset, 1, FALSE);
1569 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A44, tvb, offset, 1, FALSE);
1570 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A45, tvb, offset, 1, FALSE);
1571 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A46, tvb, offset, 1, FALSE);
1572 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_4_A47, tvb, offset, 1, FALSE);
1575 /* due to addition further down */
1578 case 5: /* SARI List Contents */
1579 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1580 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "SARI List Contents");
1582 case 6: /* Multi-Frame No. */
1583 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1584 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "Multi-Frame No.");
1586 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_6_Spare, tvb, offset, 2, FALSE);
1589 proto_tree_add_item(ATail, hf_dect_A_Tail_Qt_6_Mfn, tvb, offset, 3, FALSE);
1592 /* due to addition further down */
1595 case 7: /* Escape */
1596 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1597 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "Escape");
1599 case 8: /* Obsolete */
1600 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1601 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "Obsolete");
1603 case 9: /* Extended RF Carriers Part 2 */
1604 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1605 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "Extended RF Carriers Part 2");
1607 case 10: /* Reserved(?) */
1608 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1609 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "Reserved(?)");
1611 case 11: /* Transmit Information(?) */
1612 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1613 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "Transmit Information(?)");
1615 case 12: /* Extended Fixed Part Capabilities 2 */
1616 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1617 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "Extended Fixed Part Capabilities 2");
1622 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1623 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "Reserved");
1627 else if(tailtype==5) /* Escape */
1630 else if((tailtype==6)||((tailtype==7)&&(dect_packet_type==DECT_PACKET_PP))) /* Mt */
1632 if(check_col(pinfo->cinfo, COL_INFO))
1633 col_set_str(pinfo->cinfo, COL_INFO, "[Mt]");
1635 proto_tree_add_uint(ATail, hf_dect_A_Tail_Mt_Mh, tvb, offset, 1, tail_0);
1639 case 0: /* Basic Connection Control */
1640 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1641 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "Basic Connection Control");
1642 proto_tree_add_item(ATail, hf_dect_A_Tail_Mt_BasicConCtrl, tvb, offset, 1, FALSE);
1645 if(((tail_0 & 0x0f)==6)||((tail_0 & 0x0f)==7))
1647 proto_tree_add_uint_format(ATail, hf_dect_A_Tail_Mt_Mh, tvb, offset, 4, 0x2323, "here should be attributes...");
1652 proto_tree_add_item(ATail, hf_dect_A_Tail_Mt_Mh_fmid, tvb, offset, 2, FALSE);
1655 proto_tree_add_item(ATail, hf_dect_A_Tail_Mt_Mh_pmid, tvb, offset, 3, FALSE);
1659 /* due to addition further down */
1662 case 1: /* Advanced Connection Control */
1663 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1664 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "Advanced Connection Control");
1666 case 2: /* MAC Layer Test Messages */
1667 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1668 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "MAC Layer Test Messages");
1670 case 3: /* Quality Control */
1671 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1672 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "Quality Control");
1674 case 4: /* Broadcast and Connectionless Services */
1675 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1676 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "Broadcast and Connectionless Services");
1678 case 5: /* Encryption Control */
1679 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1680 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "Encryption Control");
1682 proto_tree_add_item(ATail, hf_dect_A_Tail_Mt_Encr_Cmd1, tvb, offset, 1, FALSE);
1683 proto_tree_add_item(ATail, hf_dect_A_Tail_Mt_Encr_Cmd2, tvb, offset, 1, FALSE);
1686 proto_tree_add_item(ATail, hf_dect_A_Tail_Mt_Mh_fmid, tvb, offset, 2, FALSE);
1689 proto_tree_add_item(ATail, hf_dect_A_Tail_Mt_Mh_pmid, tvb, offset, 3, FALSE);
1692 /* wegen addition weiter unten */
1695 case 6: /* Tail for use with the first Transmission of a B-Field \"bearer request\" Message */
1696 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1697 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "Tail for use with the first Transmission of a B-Field \"bearer request\" Message");
1699 case 7: /* Escape */
1700 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1701 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "Escape");
1703 case 8: /* TARI Message */
1704 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1705 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "TARI Message");
1707 case 9: /* REP Connection Control */
1708 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1709 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "REP Connection Control");
1711 case 10: /* Reserved */
1717 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1718 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "Reserved");
1722 else if((tailtype==7)&&(dect_packet_type==DECT_PACKET_FP)) /* Pt */
1724 if(check_col(pinfo->cinfo, COL_INFO))
1725 col_set_str(pinfo->cinfo, COL_INFO, "[Pt]");
1727 proto_tree_add_item(ATail, hf_dect_A_Tail_Pt_ExtFlag, tvb, offset, 1, FALSE);
1728 proto_tree_add_item(ATail, hf_dect_A_Tail_Pt_SDU, tvb, offset, 1, FALSE);
1729 switch((tail_0&0x70)>>4)
1731 case 0: /* Zero Length Page */
1732 case 1: /* Short Page */
1733 if(((tail_0&0x70)>>4)==0)
1735 XXX: Hier weitermachen
1738 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1739 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "Zero Length Page: ");
1740 proto_tree_add_uint_format(atailti, hf_dect_A_Tail_Pt_InfoType, tvb, offset, 3, 0x2323, "RFPI:xxxxx%.1x%.2x%.2x", (pkt_afield->Tail[0]&0x0f), pkt_afield->Tail[1], pkt_afield->Tail[2]);
1743 proto_tree_add_item(ATail, hf_dect_A_Tail_Pt_InfoType, tvb, offset, 1, FALSE);
1747 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1748 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "Short Page: ");
1749 proto_tree_add_uint_format(atailti, hf_dect_A_Tail_Pt_InfoType, tvb, offset, 3, 0x2323, "Bs Data:%.1x%.2x%.2x", (pkt_afield->Tail[0]&0x0f), pkt_afield->Tail[1], pkt_afield->Tail[2]);
1752 proto_tree_add_item(ATail, hf_dect_A_Tail_Pt_InfoType, tvb, offset, 1, FALSE);
1754 switch(pkt_afield->Tail[3]>>4)
1756 case 0: /* Fill Bits */
1757 proto_tree_add_uint_format(ATail, hf_dect_A_Tail_Pt_Fill_Fillbits, tvb, offset, 2, 0x2323, "Fillbits:%.1x%.2x", pkt_afield->Tail[3]&0x0f, pkt_afield->Tail[4]);
1760 case 1: /* Blind Full Slot Information for Circuit Mode Service */
1761 case 7: /* Escape */
1762 case 8: /* Dummy or connectionless Bearer Marker */
1763 proto_tree_add_uint_format(ATail, hf_dect_A_Tail_Pt_InfoType, tvb, offset, 2, 0x2323, " Slot-Pairs:%s%s%s%s%s%s%s%s%s%s%s%s available",
1764 (pkt_afield->Tail[3]&0x08)?" 0/12":"", (pkt_afield->Tail[3]&0x04)?" 1/13":"", (pkt_afield->Tail[3]&0x02)?" 2/14":"",
1765 (pkt_afield->Tail[3]&0x01)?" 3/15":"", (pkt_afield->Tail[4]&0x80)?" 4/16":"", (pkt_afield->Tail[4]&0x40)?" 5/17":"",
1766 (pkt_afield->Tail[4]&0x20)?" 6/18":"", (pkt_afield->Tail[4]&0x10)?" 7/19":"", (pkt_afield->Tail[4]&0x08)?" 8/20":"",
1767 (pkt_afield->Tail[4]&0x04)?" 9/21":"", (pkt_afield->Tail[4]&0x02)?" 10/22":"", (pkt_afield->Tail[4]&0x01)?" 11/23":"");
1771 case 2: /* Other Bearer */
1772 case 3: /* Recommended Other Bearer */
1773 case 4: /* Good RFP Bearer */
1774 case 5: /* Dummy or connectionless Bearer Position */
1775 case 12: /* Connectionless Bearer Position */
1776 proto_tree_add_item(ATail, hf_dect_A_Tail_Pt_Bearer_Sn, tvb, offset, 1, FALSE);
1779 proto_tree_add_item(ATail, hf_dect_A_Tail_Pt_Bearer_Sp, tvb, offset, 1, FALSE);
1780 proto_tree_add_item(ATail, hf_dect_A_Tail_Pt_Bearer_Cn, tvb, offset, 1, FALSE);
1783 case 6: /* Extended Modulation Types */
1787 case 9: /* Bearer Handover/Replacement Information */
1790 case 10: /* RFP Status and Modulation Types */
1793 case 11: /* Active Carriers */
1796 case 13: /* RFP Power Level */
1799 case 14: /* Blind Double Slot/RFP-FP Interface Resource Information */
1802 case 15: /* Blind Full Slot Information for Packet Mode Service */
1806 /* due to addition further down */
1809 case 2: /* Full Page */
1810 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1811 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "Full Page: ");
1813 case 3: /* MAC Resume Page */
1814 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1815 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "MAC Resume Page: ");
1817 case 4: /* Not the Last 36 Bits of a Long Page */
1818 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1819 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "Not the Last 36 Bits: ");
1821 case 5: /* The First 36 Bits of a Long Page */
1822 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1823 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "The First 36 Bits: ");
1825 case 6: /* The Last 36 Bits of a Long Page */
1826 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1827 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "The Last 36 Bits: ");
1829 case 7: /* All of a Long Page */
1830 if(check_col(pinfo->cinfo, COL_INFO /*Type2*/))
1831 col_append_str(pinfo->cinfo, COL_INFO /*Type2*/, "All of a Long Page: ");
1840 memcpy(rcrcdat, pkt_ptr, 6);
1843 rcrc=calc_rcrc(rcrcdat);
1844 if(rcrc!=pkt_afield->RCRC)
1845 proto_tree_add_uint_format(afieldti, hf_dect_A_RCRC, tvb, offset, 2, 0, "R-CRC Error (Calc:%.4x, Recv:%.4x)", rcrc, pkt_afield->RCRC);
1847 proto_tree_add_uint_format(afieldti, hf_dect_A_RCRC, tvb, offset, 2, 1, "R-CRC Match (Calc:%.4x, Recv:%.4x)", rcrc, pkt_afield->RCRC);
1851 /* **************** B-Field ************************************/
1852 offset=dissect_bfield(dect_packet_type, header, pkt_bfield, pinfo, pkt_ptr, tvb, ti, DectTree, offset);
1856 dissect_dect(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
1860 const guint8 *pkt_ptr;
1861 struct dect_afield pkt_afield;
1862 struct dect_bfield pkt_bfield;
1865 pkt_len=tvb_length(tvb);
1872 if(check_col(pinfo->cinfo, COL_PROTOCOL))
1874 col_set_str(pinfo->cinfo, COL_PROTOCOL, "No Data");
1879 pkt_ptr=tvb_get_ptr(tvb, 11, pkt_len-11);
1882 pkt_afield.Header=pkt_ptr[0];
1883 memcpy((char*)(&(pkt_afield.Tail)), (char*)(pkt_ptr+1), 5);
1884 pkt_afield.RCRC=(((guint16)pkt_ptr[6])<<8)|pkt_ptr[7];
1889 memcpy((char*)(&(pkt_bfield.Data)), (char*)(pkt_ptr+8), pkt_len-5-8);
1891 memset((char*)(&(pkt_bfield.Data)), 0, 128);
1892 pkt_bfield.Length=pkt_len-13;
1894 col_set_str(pinfo->cinfo, COL_PROTOCOL, "DECT");
1896 /* Clear out stuff in the info column */
1897 if(check_col(pinfo->cinfo, COL_INFO))
1899 col_clear(pinfo->cinfo, COL_INFO);
1903 proto_item *ti =NULL;
1904 proto_item *typeti =NULL;
1905 proto_tree *DectTree =NULL;
1908 ti=proto_tree_add_item(tree, proto_dect, tvb, 0, -1, FALSE);
1910 DectTree=proto_item_add_subtree(ti, ett_dect);
1911 proto_tree_add_item(DectTree, hf_dect_transceivermode, tvb, offset, 1, FALSE);
1914 proto_tree_add_item(DectTree, hf_dect_channel, tvb, offset, 1, FALSE);
1917 proto_tree_add_item(DectTree, hf_dect_slot, tvb, offset, 2, FALSE);
1920 proto_tree_add_item(DectTree, hf_dect_framenumber, tvb, offset, 1, FALSE);
1923 proto_tree_add_item(DectTree, hf_dect_rssi, tvb, offset, 1, FALSE);
1926 proto_tree_add_item(DectTree, hf_dect_preamble, tvb, offset, 3, FALSE);
1929 typeti=proto_tree_add_item(DectTree, hf_dect_type, tvb, offset, 2, FALSE);
1931 type=tvb_get_ntohs(tvb, offset);
1936 if(check_col(pinfo->cinfo, COL_PROTOCOL))
1938 col_set_str(pinfo->cinfo, COL_PROTOCOL, "DECT PP");
1940 proto_item_append_text(typeti, " Phone Packet");
1941 dissect_decttype(DECT_PACKET_PP, &pkt_afield, &pkt_bfield, pinfo, pkt_ptr, tvb, ti, DectTree);
1944 if(check_col(pinfo->cinfo, COL_PROTOCOL))
1946 col_set_str(pinfo->cinfo, COL_PROTOCOL, "DECT RFP");
1948 proto_item_append_text(typeti, " Station Packet");
1949 dissect_decttype(DECT_PACKET_FP, &pkt_afield, &pkt_bfield, pinfo, pkt_ptr, tvb, ti, DectTree);
1952 if(check_col(pinfo->cinfo, COL_PROTOCOL))
1954 col_set_str(pinfo->cinfo, COL_PROTOCOL, "DECT Unk");
1956 proto_item_append_text(typeti, " Unknown Packet");
1963 proto_register_dect(void)
1965 static hf_register_info hf[]=
1967 { &hf_dect_transceivermode,
1968 {"Tranceiver-Mode", "dect.tranceivermode", FT_UINT8, BASE_HEX, VALS(tranceiver_mode),
1972 {"Channel", "dect.channel", FT_UINT8, BASE_DEC, NULL,
1975 { &hf_dect_framenumber,
1976 {"Frame#", "dect.framenumber", FT_UINT16, BASE_DEC, NULL,
1980 {"RSSI", "dect.rssi", FT_UINT8, BASE_DEC, NULL,
1984 {"Slot", "dect.slot", FT_UINT16, BASE_DEC, NULL,
1987 { &hf_dect_preamble,
1988 {"Preamble", "dect.preamble", FT_BYTES, BASE_NONE, NULL,
1992 {"Packet-Type", "dect.type", FT_BYTES, BASE_NONE, NULL,
1995 /* **************** A-Field ******************************/
1996 /* ***** Header ***** */
1998 {"A-Field", "dect.afield", FT_BYTES, BASE_NONE, NULL,
2002 {"A-Field Header", "dect.afield.head", FT_UINT8, BASE_HEX, NULL,
2005 { &hf_dect_A_Head_TA_FP,
2006 {"TA", "dect.afield.head.TA", FT_UINT8, BASE_DEC, VALS(TA_vals_FP),
2007 0xE0, NULL, HFILL}},
2009 { &hf_dect_A_Head_TA_PP,
2010 {"TA", "dect.afield.head.TA", FT_UINT8, BASE_DEC, VALS(TA_vals_PP),
2011 0xE0, NULL, HFILL}},
2013 { &hf_dect_A_Head_Q1,
2014 {"Q1", "dect.afield.head.Q1", FT_UINT8, BASE_DEC, NULL,
2015 0x10, NULL, HFILL}},
2017 { &hf_dect_A_Head_BA,
2018 {"BA", "dect.afield.head.BA", FT_UINT8, BASE_DEC, VALS(BA_vals),
2019 0x0E, NULL, HFILL}},
2021 { &hf_dect_A_Head_Q2,
2022 {"Q2", "dect.afield.head.Q2", FT_UINT8, BASE_DEC, NULL,
2023 0x01, NULL, HFILL}},
2025 /* ***** Tail ***** */
2027 {"A-Field Tail", "dect.afield.tail", FT_UINT8, BASE_DEC, NULL,
2028 0xE0, NULL, HFILL}},
2031 { &hf_dect_A_Tail_Nt,
2032 {"Nt/RFPI", "dect.afield.tail.Nt", FT_BYTES, BASE_NONE, NULL,
2033 0x0, "A-Field Tail: Nt/RFPI", HFILL}},
2036 { &hf_dect_A_Tail_Qt_Qh,
2037 {"Qh", "dect.afield.tail.Qt.Qh", FT_UINT8, BASE_DEC, VALS(QTHead_vals),
2038 0xF0, NULL, HFILL}},
2040 /* Qt Static System Information */
2042 { &hf_dect_A_Tail_Qt_0_Nr,
2043 {"NR", "dect.afield.tail.Qt.NR", FT_UINT8, BASE_DEC, VALS(QTNormalReverse_vals),
2044 0x10, NULL, HFILL}},
2046 { &hf_dect_A_Tail_Qt_0_Sn,
2047 {"SN", "dect.afield.tail.Qt.SN", FT_UINT8, BASE_DEC, VALS(QTSlotNumber_vals),
2048 0x0F, NULL, HFILL}},
2051 { &hf_dect_A_Tail_Qt_0_Sp,
2052 {"SP", "dect.afield.tail.Qt.SP", FT_UINT8, BASE_DEC, VALS(QTStartPosition_vals),
2053 0xC0, NULL, HFILL}},
2055 { &hf_dect_A_Tail_Qt_0_Esc,
2056 {"Esc", "dect.afield.tail.Qt.Esc", FT_UINT8, BASE_DEC, VALS(QTEscape_vals),
2057 0x20, NULL, HFILL}},
2059 { &hf_dect_A_Tail_Qt_0_Txs,
2060 {"Txs", "dect.afield.tail.Qt.Txs", FT_UINT8, BASE_DEC, VALS(QTTranceiver_vals),
2061 0x18, NULL, HFILL}},
2063 { &hf_dect_A_Tail_Qt_0_Mc,
2064 {"Mc", "dect.afield.tail.Qt.Mc", FT_UINT8, BASE_DEC, VALS(QTExtendedCarrier_vals),
2065 0x04, NULL, HFILL}},
2068 { &hf_dect_A_Tail_Qt_0_Spr1,
2069 {"Spr", "dect.afield.tail.Qt.Spr1", FT_UINT8, BASE_DEC, VALS(QTSpr_vals),
2070 0xC0, NULL, HFILL}},
2072 { &hf_dect_A_Tail_Qt_0_Cn,
2073 {"CN", "dect.afield.tail.Qt.CN", FT_UINT8, BASE_DEC, VALS(QTCarrierNumber_vals),
2074 0x3F, NULL, HFILL}},
2077 { &hf_dect_A_Tail_Qt_0_Spr2,
2078 {"Spr", "dect.afield.tail.Qt.Spr2", FT_UINT8, BASE_DEC, VALS(QTSpr_vals),
2079 0xC0, NULL, HFILL}},
2081 { &hf_dect_A_Tail_Qt_0_PSCN,
2082 {"PSCN", "dect.afield.tail.Qt.PSCN", FT_UINT8, BASE_DEC, VALS(QTScanCarrierNum_vals),
2083 0x3F, NULL, HFILL}},
2085 /* Qt Fixed Part Capabilities */
2086 { &hf_dect_A_Tail_Qt_3_A12,
2087 {"A12", "dect.afield.tail.Qt.Fp.A12", FT_UINT8, BASE_DEC, VALS(Qt_A12_vals),
2088 0x08, NULL, HFILL}},
2090 { &hf_dect_A_Tail_Qt_3_A13,
2091 {"A13", "dect.afield.tail.Qt.Fp.A13", FT_UINT8, BASE_DEC, VALS(Qt_A13_vals),
2092 0x04, NULL, HFILL}},
2094 { &hf_dect_A_Tail_Qt_3_A14,
2095 {"A14", "dect.afield.tail.Qt.Fp.A14", FT_UINT8, BASE_DEC, VALS(Qt_A14_vals),
2096 0x02, NULL, HFILL}},
2098 { &hf_dect_A_Tail_Qt_3_A15,
2099 {"A15", "dect.afield.tail.Qt.Fp.A15", FT_UINT8, BASE_DEC, VALS(Qt_A15_vals),
2100 0x01, NULL, HFILL}},
2102 { &hf_dect_A_Tail_Qt_3_A16,
2103 {"A16", "dect.afield.tail.Qt.Fp.A16", FT_UINT8, BASE_DEC, VALS(Qt_A16_vals),
2104 0x80, NULL, HFILL}},
2106 { &hf_dect_A_Tail_Qt_3_A17,
2107 {"A17", "dect.afield.tail.Qt.Fp.A17", FT_UINT8, BASE_DEC, VALS(Qt_A17_vals),
2108 0x40, NULL, HFILL}},
2110 { &hf_dect_A_Tail_Qt_3_A18,
2111 {"A18", "dect.afield.tail.Qt.Fp.A18", FT_UINT8, BASE_DEC, VALS(Qt_A18_vals),
2112 0x20, NULL, HFILL}},
2114 { &hf_dect_A_Tail_Qt_3_A19,
2115 {"A19", "dect.afield.tail.Qt.Fp.A19", FT_UINT8, BASE_DEC, VALS(Qt_A19_vals),
2116 0x10, NULL, HFILL}},
2118 { &hf_dect_A_Tail_Qt_3_A20,
2119 {"A20", "dect.afield.tail.Qt.Fp.A20", FT_UINT8, BASE_DEC, VALS(Qt_A20_vals),
2120 0x08, NULL, HFILL}},
2122 { &hf_dect_A_Tail_Qt_3_A21,
2123 {"A21", "dect.afield.tail.Qt.Fp.A21", FT_UINT8, BASE_DEC, VALS(Qt_A21_vals),
2124 0x04, NULL, HFILL}},
2126 { &hf_dect_A_Tail_Qt_3_A22,
2127 {"A22", "dect.afield.tail.Qt.Fp.A22", FT_UINT8, BASE_DEC, VALS(Qt_A22_vals),
2128 0x02, NULL, HFILL}},
2130 { &hf_dect_A_Tail_Qt_3_A23,
2131 {"A23", "dect.afield.tail.Qt.Fp.A23", FT_UINT8, BASE_DEC, VALS(Qt_A23_vals),
2132 0x01, NULL, HFILL}},
2134 { &hf_dect_A_Tail_Qt_3_A24,
2135 {"A24", "dect.afield.tail.Qt.Fp.A24", FT_UINT8, BASE_DEC, VALS(Qt_A24_vals),
2136 0x80, NULL, HFILL}},
2138 { &hf_dect_A_Tail_Qt_3_A25,
2139 {"A25", "dect.afield.tail.Qt.Fp.A25", FT_UINT8, BASE_DEC, VALS(Qt_A25_vals),
2140 0x40, NULL, HFILL}},
2142 { &hf_dect_A_Tail_Qt_3_A26,
2143 {"A26", "dect.afield.tail.Qt.Fp.A26", FT_UINT8, BASE_DEC, VALS(Qt_A26_vals),
2144 0x20, NULL, HFILL}},
2146 { &hf_dect_A_Tail_Qt_3_A27,
2147 {"A27", "dect.afield.tail.Qt.Fp.A27", FT_UINT8, BASE_DEC, VALS(Qt_A27_vals),
2148 0x10, NULL, HFILL}},
2150 { &hf_dect_A_Tail_Qt_3_A28,
2151 {"A28", "dect.afield.tail.Qt.Fp.A28", FT_UINT8, BASE_DEC, VALS(Qt_A28_vals),
2152 0x08, NULL, HFILL}},
2154 { &hf_dect_A_Tail_Qt_3_A29,
2155 {"A29", "dect.afield.tail.Qt.Fp.A29", FT_UINT8, BASE_DEC, VALS(Qt_A29_vals),
2156 0x04, NULL, HFILL}},
2158 { &hf_dect_A_Tail_Qt_3_A30,
2159 {"A30", "dect.afield.tail.Qt.Fp.A30", FT_UINT8, BASE_DEC, VALS(Qt_A30_vals),
2160 0x02, NULL, HFILL}},
2162 { &hf_dect_A_Tail_Qt_3_A31,
2163 {"A31", "dect.afield.tail.Qt.Fp.A31", FT_UINT8, BASE_DEC, VALS(Qt_A31_vals),
2164 0x01, NULL, HFILL}},
2167 /* higher layer capabilities */
2168 { &hf_dect_A_Tail_Qt_3_A32,
2169 {"A32", "dect.afield.tail.Qt.Fp.A32", FT_UINT8, BASE_DEC, VALS(Qt_A32_vals),
2170 0x80, NULL, HFILL}},
2172 { &hf_dect_A_Tail_Qt_3_A33,
2173 {"A33", "dect.afield.tail.Qt.Fp.A33", FT_UINT8, BASE_DEC, VALS(Qt_A33_vals),
2174 0x40, NULL, HFILL}},
2176 { &hf_dect_A_Tail_Qt_3_A34,
2177 {"A34", "dect.afield.tail.Qt.Fp.A34", FT_UINT8, BASE_DEC, VALS(Qt_A34_vals),
2178 0x20, NULL, HFILL}},
2180 { &hf_dect_A_Tail_Qt_3_A35,
2181 {"A35", "dect.afield.tail.Qt.Fp.A35", FT_UINT8, BASE_DEC, VALS(Qt_A35_vals),
2182 0x10, NULL, HFILL}},
2184 { &hf_dect_A_Tail_Qt_3_A36,
2185 {"A36", "dect.afield.tail.Qt.Fp.A36", FT_UINT8, BASE_DEC, VALS(Qt_A36_vals),
2186 0x08, NULL, HFILL}},
2188 { &hf_dect_A_Tail_Qt_3_A37,
2189 {"A37", "dect.afield.tail.Qt.Fp.A37", FT_UINT8, BASE_DEC, VALS(Qt_A37_vals),
2190 0x04, NULL, HFILL}},
2192 { &hf_dect_A_Tail_Qt_3_A38,
2193 {"A38", "dect.afield.tail.Qt.Fp.A38", FT_UINT8, BASE_DEC, VALS(Qt_A38_vals),
2194 0x02, NULL, HFILL}},
2196 { &hf_dect_A_Tail_Qt_3_A39,
2197 {"A39", "dect.afield.tail.Qt.Fp.A39", FT_UINT8, BASE_DEC, VALS(Qt_A39_vals),
2198 0x01, NULL, HFILL}},
2200 { &hf_dect_A_Tail_Qt_3_A40,
2201 {"A40", "dect.afield.tail.Qt.Fp.A40", FT_UINT8, BASE_DEC, VALS(Qt_A40_vals),
2202 0x80, NULL, HFILL}},
2204 { &hf_dect_A_Tail_Qt_3_A41,
2205 {"A41", "dect.afield.tail.Qt.Fp.A41", FT_UINT8, BASE_DEC, VALS(Qt_A41_vals),
2206 0x40, NULL, HFILL}},
2208 { &hf_dect_A_Tail_Qt_3_A42,
2209 {"A42", "dect.afield.tail.Qt.Fp.A42", FT_UINT8, BASE_DEC, VALS(Qt_A42_vals),
2210 0x20, NULL, HFILL}},
2212 { &hf_dect_A_Tail_Qt_3_A43,
2213 {"A43", "dect.afield.tail.Qt.Fp.A43", FT_UINT8, BASE_DEC, VALS(Qt_A43_vals),
2214 0x10, NULL, HFILL}},
2216 { &hf_dect_A_Tail_Qt_3_A44,
2217 {"A44", "dect.afield.tail.Qt.Fp.A44", FT_UINT8, BASE_DEC, VALS(Qt_A44_vals),
2218 0x08, NULL, HFILL}},
2220 { &hf_dect_A_Tail_Qt_3_A45,
2221 {"A45", "dect.afield.tail.Qt.Fp.A45", FT_UINT8, BASE_DEC, VALS(Qt_A45_vals),
2222 0x04, NULL, HFILL}},
2224 { &hf_dect_A_Tail_Qt_3_A46,
2225 {"A46", "dect.afield.tail.Qt.Fp.A46", FT_UINT8, BASE_DEC, VALS(Qt_A46_vals),
2226 0x02, NULL, HFILL}},
2228 { &hf_dect_A_Tail_Qt_3_A47,
2229 {"A47", "dect.afield.tail.Qt.Fp.A47", FT_UINT8, BASE_DEC, VALS(Qt_A47_vals),
2230 0x01, NULL, HFILL}},
2232 /* Qt Extended Fixed Part Capabilities */
2234 { &hf_dect_A_Tail_Qt_4_CRFPHops,
2235 {"CRFP Hops", "dect.afield.tail.Qt.Efp.CRFPHops", FT_UINT8, BASE_DEC, VALS(Qt_CRFPHops_vals),
2236 0x0C, NULL, HFILL}},
2238 { &hf_dect_A_Tail_Qt_4_CRFPEnc,
2239 {"CRFP Enc", "dect.afield.tail.Qt.Efp.CRFPEnc", FT_UINT8, BASE_DEC, VALS(Qt_CRFPEnc_vals),
2240 0x02, NULL, HFILL}},
2242 { &hf_dect_A_Tail_Qt_4_REFHops,
2243 {"REP Hops", "dect.afield.tail.Qt.Efp.REPHops", FT_UINT16, BASE_DEC, VALS(Qt_REPHops_vals),
2244 0x0180, NULL, HFILL}},
2246 { &hf_dect_A_Tail_Qt_4_REPCap,
2247 {"REP Cap.", "dect.afield.tail.Qt.Efp.REPCap", FT_UINT8, BASE_DEC, VALS(Qt_REPCap_vals),
2248 0x40, NULL, HFILL}},
2250 { &hf_dect_A_Tail_Qt_4_Sync,
2251 {"Sync", "dect.afield.tail.Qt.Efp.Sync", FT_UINT8, BASE_DEC, VALS(Qt_Sync_vals),
2252 0x30, NULL, HFILL}},
2254 { &hf_dect_A_Tail_Qt_4_A20,
2255 {"A20", "dect.afield.tail.Qt.Efp.A20", FT_UINT8, BASE_DEC, VALS(Qt_EA20_vals),
2256 0x08, NULL, HFILL}},
2258 { &hf_dect_A_Tail_Qt_4_MACSusp,
2259 {"MAC Suspend", "dect.afield.tail.Qt.Efp.MACSusp", FT_UINT8, BASE_DEC, VALS(Qt_MACSusp_vals),
2260 0x04, NULL, HFILL}},
2262 { &hf_dect_A_Tail_Qt_4_MACIpq,
2263 {"MAC Ipq", "dect.afield.tail.Qt.Efp.MACIpq", FT_UINT8, BASE_DEC, VALS(Qt_MACIpq_vals),
2264 0x02, NULL, HFILL}},
2266 { &hf_dect_A_Tail_Qt_4_A23,
2267 {"A23", "dect.afield.tail.Qt.Efp.A23", FT_UINT8, BASE_DEC, VALS(Qt_EA23_vals),
2268 0x01, NULL, HFILL}},
2270 { &hf_dect_A_Tail_Qt_4_A24,
2271 {"A24", "dect.afield.tail.Qt.Efp.A24", FT_UINT8, BASE_DEC, VALS(Qt_EA24_vals),
2272 0x80, NULL, HFILL}},
2275 /* Higher Layer Capabilities */
2277 { &hf_dect_A_Tail_Qt_4_A25,
2278 {"A25", "dect.afield.tail.Qt.Efp.A25", FT_UINT8, BASE_DEC, VALS(Qt_EA25_vals),
2279 0x40, NULL, HFILL}},
2281 { &hf_dect_A_Tail_Qt_4_A26,
2282 {"A26", "dect.afield.tail.Qt.Efp.A26", FT_UINT8, BASE_DEC, VALS(Qt_EA26_vals),
2283 0x20, NULL, HFILL}},
2285 { &hf_dect_A_Tail_Qt_4_A27,
2286 {"A27", "dect.afield.tail.Qt.Efp.A27", FT_UINT8, BASE_DEC, VALS(Qt_EA27_vals),
2287 0x10, NULL, HFILL}},
2289 { &hf_dect_A_Tail_Qt_4_A28,
2290 {"A28", "dect.afield.tail.Qt.Efp.A28", FT_UINT8, BASE_DEC, VALS(Qt_EA28_vals),
2291 0x08, NULL, HFILL}},
2293 { &hf_dect_A_Tail_Qt_4_A29,
2294 {"A29", "dect.afield.tail.Qt.Efp.A29", FT_UINT8, BASE_DEC, VALS(Qt_EA29_vals),
2295 0x04, NULL, HFILL}},
2297 { &hf_dect_A_Tail_Qt_4_A30,
2298 {"A30", "dect.afield.tail.Qt.Efp.A30", FT_UINT8, BASE_DEC, VALS(Qt_EA30_vals),
2299 0x02, NULL, HFILL}},
2301 { &hf_dect_A_Tail_Qt_4_A31,
2302 {"A31", "dect.afield.tail.Qt.Efp.A31", FT_UINT8, BASE_DEC, VALS(Qt_EA31_vals),
2303 0x01, NULL, HFILL}},
2305 { &hf_dect_A_Tail_Qt_4_A32,
2306 {"A32", "dect.afield.tail.Qt.Efp.A32", FT_UINT8, BASE_DEC, VALS(Qt_EA32_vals),
2307 0x80, NULL, HFILL}},
2309 { &hf_dect_A_Tail_Qt_4_A33,
2310 {"A33", "dect.afield.tail.Qt.Efp.A33", FT_UINT8, BASE_DEC, VALS(Qt_EA33_vals),
2311 0x40, NULL, HFILL}},
2313 { &hf_dect_A_Tail_Qt_4_A34,
2314 {"A34", "dect.afield.tail.Qt.Efp.A34", FT_UINT8, BASE_DEC, VALS(Qt_EA34_vals),
2315 0x20, NULL, HFILL}},
2317 { &hf_dect_A_Tail_Qt_4_A35,
2318 {"A35", "dect.afield.tail.Qt.Efp.A35", FT_UINT8, BASE_DEC, VALS(Qt_EA35_vals),
2319 0x10, NULL, HFILL}},
2321 { &hf_dect_A_Tail_Qt_4_A36,
2322 {"A36", "dect.afield.tail.Qt.Efp.A36", FT_UINT8, BASE_DEC, VALS(Qt_EA36_vals),
2323 0x08, NULL, HFILL}},
2325 { &hf_dect_A_Tail_Qt_4_A37,
2326 {"A37", "dect.afield.tail.Qt.Efp.A37", FT_UINT8, BASE_DEC, VALS(Qt_EA37_vals),
2327 0x04, NULL, HFILL}},
2329 { &hf_dect_A_Tail_Qt_4_A38,
2330 {"A38", "dect.afield.tail.Qt.Efp.A38", FT_UINT8, BASE_DEC, VALS(Qt_EA38_vals),
2331 0x02, NULL, HFILL}},
2333 { &hf_dect_A_Tail_Qt_4_A39,
2334 {"A39", "dect.afield.tail.Qt.Efp.A39", FT_UINT8, BASE_DEC, VALS(Qt_EA39_vals),
2335 0x01, NULL, HFILL}},
2337 { &hf_dect_A_Tail_Qt_4_A40,
2338 {"A40", "dect.afield.tail.Qt.Efp.A40", FT_UINT8, BASE_DEC, VALS(Qt_EA40_vals),
2339 0x80, NULL, HFILL}},
2341 { &hf_dect_A_Tail_Qt_4_A41,
2342 {"A41", "dect.afield.tail.Qt.Efp.A41", FT_UINT8, BASE_DEC, VALS(Qt_EA41_vals),
2343 0x40, NULL, HFILL}},
2345 { &hf_dect_A_Tail_Qt_4_A42,
2346 {"A42", "dect.afield.tail.Qt.Efp.A42", FT_UINT8, BASE_DEC, VALS(Qt_EA42_vals),
2347 0x20, NULL, HFILL}},
2349 { &hf_dect_A_Tail_Qt_4_A43,
2350 {"A43", "dect.afield.tail.Qt.Efp.A43", FT_UINT8, BASE_DEC, VALS(Qt_EA43_vals),
2351 0x10, NULL, HFILL}},
2353 { &hf_dect_A_Tail_Qt_4_A44,
2354 {"A44", "dect.afield.tail.Qt.Efp.A44", FT_UINT8, BASE_DEC, VALS(Qt_EA44_vals),
2355 0x08, NULL, HFILL}},
2357 { &hf_dect_A_Tail_Qt_4_A45,
2358 {"A45", "dect.afield.tail.Qt.Efp.A45", FT_UINT8, BASE_DEC, VALS(Qt_EA45_vals),
2359 0x04, NULL, HFILL}},
2361 { &hf_dect_A_Tail_Qt_4_A46,
2362 {"A46", "dect.afield.tail.Qt.Efp.A46", FT_UINT8, BASE_DEC, VALS(Qt_EA46_vals),
2363 0x02, NULL, HFILL}},
2365 { &hf_dect_A_Tail_Qt_4_A47,
2366 {"A47", "dect.afield.tail.Qt.Efp.A47", FT_UINT8, BASE_DEC, VALS(Qt_EA47_vals),
2367 0x01, NULL, HFILL}},
2370 /* Qt Multiframe Number */
2371 { &hf_dect_A_Tail_Qt_6_Spare,
2372 {"Spare Bits", "dect.afield.tail.Qt.Mfn.Spare", FT_UINT16, BASE_HEX, NULL,
2373 0x0FFF, NULL, HFILL}},
2375 { &hf_dect_A_Tail_Qt_6_Mfn,
2376 {"Multiframe Number", "dect.afield.tail.Qt.Mfn.Mfn", FT_BYTES, BASE_NONE, NULL,
2381 { &hf_dect_A_Tail_Mt_Mh,
2382 {"Mh", "dect.afield.tail.Mt.Mh", FT_UINT8, BASE_DEC, VALS(MTHead_vals),
2383 0xF0, NULL, HFILL}},
2385 { &hf_dect_A_Tail_Mt_Mh_fmid,
2386 {"Mh/FMID", "dect.afield.tail.Mt.Mh.fmid", FT_UINT16, BASE_HEX, NULL,
2387 0x0FF0, NULL, HFILL}},
2389 { &hf_dect_A_Tail_Mt_Mh_pmid,
2390 {"Mh/PMID", "dect.afield.tail.Mt.Mh.pmid", FT_UINT24, BASE_HEX, NULL,
2391 0x0FFFFF, NULL, HFILL}},
2393 /* Mt Basic Connection Control */
2394 { &hf_dect_A_Tail_Mt_BasicConCtrl,
2395 {"Cmd", "dect.afield.tail.Mt.BasicConCtrl", FT_UINT8, BASE_DEC, VALS(MTBasicConCtrl_vals),
2396 0x0F, NULL, HFILL}},
2398 /* Mt Encryption Control */
2399 { &hf_dect_A_Tail_Mt_Encr_Cmd1,
2400 {"Cmd1", "dect.afield.tail.Mt.Encr.Cmd1", FT_UINT8, BASE_DEC, VALS(MTEncrCmd1_vals),
2401 0x0C, NULL, HFILL}},
2403 { &hf_dect_A_Tail_Mt_Encr_Cmd2,
2404 {"Cmd2", "dect.afield.tail.Mt.Encr.Cmd2", FT_UINT8, BASE_DEC, VALS(MTEncrCmd2_vals),
2405 0x03, NULL, HFILL}},
2408 { &hf_dect_A_Tail_Pt_ExtFlag,
2409 {"ExtFlag", "dect.afield.tail.Pt.ExtFlag", FT_UINT8, BASE_DEC, VALS(PTExtFlag_vals),
2410 0x80, NULL, HFILL}},
2412 { &hf_dect_A_Tail_Pt_SDU,
2413 {"SDU", "dect.afield.tail.Pt.SDU", FT_UINT8, BASE_DEC, VALS(PTSDU_vals),
2414 0x70, NULL, HFILL}},
2416 { &hf_dect_A_Tail_Pt_InfoType,
2417 {"InfoType", "dect.afield.tail.Pt.InfoType", FT_UINT8, BASE_DEC, VALS(PTInfoType_vals),
2418 0xF0, NULL, HFILL}},
2420 { &hf_dect_A_Tail_Pt_Fill_Fillbits,
2421 {"FillBits", "dect.afield.tail.Pt.InfoType.FillBits", FT_UINT8, BASE_DEC, NULL,
2424 { &hf_dect_A_Tail_Pt_Bearer_Sn,
2425 {"SN", "dect.afield.tail.Pt.SN", FT_UINT8, BASE_DEC, VALS(QTSlotNumber_vals),
2426 0x0F, NULL, HFILL}},
2428 { &hf_dect_A_Tail_Pt_Bearer_Sp,
2429 {"SP", "dect.afield.tail.Pt.SP", FT_UINT8, BASE_DEC, VALS(QTStartPosition_vals),
2430 0xC0, NULL, HFILL}},
2432 { &hf_dect_A_Tail_Pt_Bearer_Cn,
2433 {"CN", "dect.afield.tail.Pt.CN", FT_UINT8, BASE_DEC, VALS(QTCarrierNumber_vals),
2434 0x3F, NULL, HFILL}},
2436 /* ***** R-CRC ***** */
2438 {"A-Field R-CRC", "dect.afield.rcrc", FT_UINT8, BASE_DEC, NULL,
2441 /* ***************** B-Field *************************** */
2443 {"B-Field", "dect.bfield", FT_BYTES, BASE_NONE,
2444 NULL, 0x0, NULL, HFILL}},
2447 {"B-Field", "dect.bfield.data", FT_BYTES, BASE_NONE, NULL,
2451 {"B-Field", "dect.bfield.framenumber", FT_NONE, BASE_NONE, NULL,
2454 /* ***** X-CRC ***** */
2456 {"B-Field X-CRC", "dect.bfield.xcrc", FT_UINT8, BASE_DEC, NULL,
2461 /* Setup protocol subtree array */
2472 proto_dect=proto_register_protocol("DECT Protocol", "DECT", "dect");
2473 proto_register_field_array(proto_dect, hf, array_length(hf));
2474 proto_register_subtree_array(ett, array_length(ett));
2478 proto_reg_handoff_dect(void)
2480 dissector_handle_t dect_handle;
2482 dect_handle = create_dissector_handle(dissect_dect, proto_dect);
2483 dissector_add("ethertype", ETHERTYPE_DECT , dect_handle);