Coverage Report

Created: 2026-06-30 07:22

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/wireshark/epan/dissectors/packet-extrememesh.c
Line
Count
Source
1
/* packet-extrememesh.c
2
 * Routines for Motorola Mesh ethernet header disassembly
3
 *
4
 * Wireshark - Network traffic analyzer
5
 * By Gerald Combs <gerald@wireshark.org>
6
 * Copyright 1998 Gerald Combs
7
 *
8
 * SPDX-License-Identifier: GPL-2.0-or-later
9
 */
10
11
#include "config.h"
12
#include <epan/packet.h>
13
#include <epan/addr_resolv.h>
14
#include <epan/etypes.h>
15
16
typedef enum _MeshNextProtocol
17
{
18
  MESH_NEXT_PROTOCOL_INVALID                      = -1,
19
20
  MESH_NEXT_PROTOCOL_MESH                         = 0,    // Extension
21
  MESH_NEXT_PROTOCOL_MCH                          = 1,    // Extension
22
  MESH_NEXT_PROTOCOL_ENCAPSULATED_ETH             = 2,    // Terminating
23
  MESH_NEXT_PROTOCOL_PS                           = 3,    // Terminating
24
  MESH_NEXT_PROTOCOL_HELLO                        = 4,    // Terminating
25
  MESH_NEXT_PROTOCOL_LOCATION                     = 5,    // Terminating
26
  MESH_NEXT_PROTOCOL_SECURITY                     = 6,    // Terminating
27
  MESH_NEXT_PROTOCOL_SECURED_PAYLOAD              = 7,    // Extension
28
  MESH_NEXT_PROTOCOL_TEST                         = 8,    // Terminating
29
  MESH_NEXT_PROTOCOL_FRAGMENT                     = 9,    // Terminating
30
  MESH_NEXT_PROTOCOL_CFPU                         = 10,   // Terminating
31
  MESH_NEXT_PROTOCOL_EAPOM                        = 11,   // Terminating
32
  MESH_NEXT_PROTOCOL_NULL                         = 12,   // Terminating
33
  MESH_NEXT_PROTOCOL_ENCAPSULATED_ETH_NO_ADDR     = 13,   // Terminating
34
  MESH_NEXT_PROTOCOL_L2_UPDATE                    = 14,   // Terminating
35
  MESH_NEXT_PROTOCOL_PROBE_MESSAGE                = 15,   // Terminating
36
37
  MESH_NEXT_PROTOCOL_EOL
38
} MeshNextProtocol;
39
40
typedef enum _MeshPathSelectionFrameType
41
{
42
  MESH_PS_FRAME_INVALID = -1,
43
44
  MESH_PS_FRAME_AREQ    =  1,    // Authorization Request
45
  MESH_PS_FRAME_AREP    =  2,    // Authorization Reply
46
  MESH_PS_FRAME_BREQ    =  3,    // Bind Request
47
  MESH_PS_FRAME_BREP    =  4,    // Bind Reply
48
  MESH_PS_FRAME_BANN    =  5,    // Bind Announcement
49
  MESH_PS_FRAME_BRED    =  6,    // Bind Removed
50
  MESH_PS_FRAME_SREQ    =  7,    // Status Request
51
  MESH_PS_FRAME_SREP    =  8,    // Status Reply
52
  MESH_PS_FRAME_PREQ    =  9,    // Path Request
53
  MESH_PS_FRAME_PREP    =  10,   // Path Reply
54
  MESH_PS_FRAME_PERR    =  11,   // Path Error
55
  MESH_PS_FRAME_PRST    =  12,   // Path Reset
56
  MESH_PS_FRAME_PREM    =  13,   // Proxy Remove
57
  MESH_PS_FRAME_TRACE   =  14,   // Trace Path
58
  MESH_PS_FRAME_PRER    =  15,   // Proxy Error
59
60
  MESH_PS_FRAME_EOL
61
} MeshPathSelectionFrameType;
62
63
void proto_register_extrememesh(void);
64
void proto_reg_handoff_extrememesh(void);
65
66
static dissector_handle_t extrememesh_handle;
67
68
/* Mesh pkt types */
69
static int proto_extrememesh;
70
static int proto_extrememesh_mch;
71
static int proto_extrememesh_ps_areq;
72
static int proto_extrememesh_ps_arep;
73
static int proto_extrememesh_ps_breq;
74
static int proto_extrememesh_ps_brep;
75
static int proto_extrememesh_ps_bann;
76
static int proto_extrememesh_ps_bred;
77
static int proto_extrememesh_ps_sreq;
78
static int proto_extrememesh_ps_srep;
79
static int proto_extrememesh_ps_preq;
80
static int proto_extrememesh_ps_prep;
81
static int proto_extrememesh_ps_perr;
82
static int proto_extrememesh_ps_prst;
83
static int proto_extrememesh_ps_prem;
84
static int proto_extrememesh_ps_trace;
85
static int proto_extrememesh_ps_prer;
86
//static int proto_extrememesh_hello;
87
//static int proto_extrememesh_security;
88
//static int proto_extrememesh_cfpu;
89
//static int proto_extrememesh_eapom;
90
static int proto_extrememesh_l2upd;
91
static int proto_extrememesh_probe;
92
93
94
/*MESH fields*/
95
static int hf_extrememesh_version;
96
static int hf_extrememesh_nextproto;
97
98
/*MCH fields*/
99
static int hf_extrememesh_mch_version;
100
static int hf_extrememesh_mch_next_proto;
101
static int hf_extrememesh_mch_lq;
102
static int hf_extrememesh_mch_htl;
103
static int hf_extrememesh_mch_priority;
104
static int hf_extrememesh_mch_usr_pri_flags;
105
static int hf_extrememesh_mch_usr_pri_flags_user_priority;
106
static int hf_extrememesh_mch_usr_pri_flags_reserved;
107
static int hf_extrememesh_mch_usr_pri_flags_from_wan;
108
static int hf_extrememesh_mch_usr_pri_flags_to_wan;
109
static int hf_extrememesh_mch_usr_pri_flags_forward;
110
static int hf_extrememesh_mch_sequence;
111
static int hf_extrememesh_mch_dest;
112
static int hf_extrememesh_mch_src;
113
114
#if 0
115
/*ENCAP_ETH fields*/
116
/*Hello fields*/
117
static int hf_extrememesh_hello_services;
118
static int hf_extrememesh_hello_HTR;
119
static int hf_extrememesh_hello_MTR;
120
static int hf_extrememesh_hello_root_id;
121
static int hf_extrememesh_hello_next_hop_id;
122
123
/*Security fields*/
124
static int hf_extrememesh_security_version;
125
static int hf_extrememesh_security_nextproto;
126
static int hf_extrememesh_security_flags;
127
static int hf_extrememesh_security_packet_num;
128
static int hf_extrememesh_security_mic;
129
130
/*Cfpu fields*/
131
static int hf_extrememesh_cfpu_version;
132
static int hf_extrememesh_cfpu_window;
133
static int hf_extrememesh_cfpu_cycle;
134
135
/*EAPOM fields*/
136
static int hf_extrememesh_eapom_version;
137
static int hf_extrememesh_eapom_header_type;
138
static int hf_extrememesh_eapom_supplicant_addr;
139
static int hf_extrememesh_eapom_meshid_len;
140
static int hf_extrememesh_eapom_meshid;
141
static int hf_extrememesh_eapom_body_len;
142
#endif
143
144
/*Mesh L2 Update fields*/
145
static int hf_extrememesh_l2upd_proxy_owner;
146
static int hf_extrememesh_l2upd_ballast;
147
148
/*Probe fields*/
149
static int hf_extrememesh_probe_version;
150
static int hf_extrememesh_probe_op_code;
151
static int hf_extrememesh_probe_flags;
152
static int hf_extrememesh_probe_flags_reserved;
153
static int hf_extrememesh_probe_flags_reply;
154
static int hf_extrememesh_probe_priority;
155
static int hf_extrememesh_probe_job_id;
156
static int hf_extrememesh_probe_sequence;
157
static int hf_extrememesh_probe_ballast_len;
158
static int hf_extrememesh_probe_ballast;
159
160
/*Path Selection fields*/
161
/*PS AREQ fields*/
162
static int hf_extrememesh_ps_areq_version;
163
static int hf_extrememesh_ps_areq_frame_type;
164
static int hf_extrememesh_ps_areq_mpr_addr;
165
static int hf_extrememesh_ps_areq_orig_addr;
166
static int hf_extrememesh_ps_areq_opt_tot_len;
167
static int hf_extrememesh_ps_areq_option;
168
static int hf_extrememesh_ps_areq_option_len;
169
static int hf_extrememesh_ps_areq_old_mpr;
170
static int hf_extrememesh_ps_areq_proxies;
171
172
/*PS AREP fields*/
173
static int hf_extrememesh_ps_arep_version;
174
static int hf_extrememesh_ps_arep_frame_type;
175
static int hf_extrememesh_ps_arep_mpr_addr;
176
static int hf_extrememesh_ps_arep_orig_addr;
177
static int hf_extrememesh_ps_arep_opt_tot_len;
178
static int hf_extrememesh_ps_arep_option;
179
static int hf_extrememesh_ps_arep_option_len;
180
static int hf_extrememesh_ps_arep_result;
181
static int hf_extrememesh_ps_arep_timeout;
182
183
/*PS BREQ fields*/
184
static int hf_extrememesh_ps_breq_version;
185
static int hf_extrememesh_ps_breq_frame_type;
186
static int hf_extrememesh_ps_breq_mpr_addr;
187
static int hf_extrememesh_ps_breq_orig_addr;
188
static int hf_extrememesh_ps_breq_opt_tot_len;
189
static int hf_extrememesh_ps_breq_option;
190
static int hf_extrememesh_ps_breq_option_len;
191
static int hf_extrememesh_ps_breq_proxy_addr;
192
static int hf_extrememesh_ps_breq_old_mpr;
193
static int hf_extrememesh_ps_breq_orig_pri;
194
static int hf_extrememesh_ps_breq_proxy_pri;
195
static int hf_extrememesh_ps_breq_vlan_id;
196
static int hf_extrememesh_ps_breq_proxy_vlan_id;
197
static int hf_extrememesh_ps_breq_seq;
198
199
/*PS BREP fields*/
200
static int hf_extrememesh_ps_brep_version;
201
static int hf_extrememesh_ps_brep_frame_type;
202
static int hf_extrememesh_ps_brep_mpr_addr;
203
static int hf_extrememesh_ps_brep_orig_addr;
204
static int hf_extrememesh_ps_brep_opt_tot_len;
205
static int hf_extrememesh_ps_brep_option;
206
static int hf_extrememesh_ps_brep_option_len;
207
static int hf_extrememesh_ps_brep_seq;
208
209
/*PS BANN fields*/
210
static int hf_extrememesh_ps_bann_version;
211
static int hf_extrememesh_ps_bann_frame_type;
212
static int hf_extrememesh_ps_bann_mpr_addr;
213
static int hf_extrememesh_ps_bann_orig_addr;
214
static int hf_extrememesh_ps_bann_opt_tot_len;
215
static int hf_extrememesh_ps_bann_option;
216
static int hf_extrememesh_ps_bann_option_len;
217
static int hf_extrememesh_ps_bann_proxy_addr;
218
static int hf_extrememesh_ps_bann_old_root;
219
static int hf_extrememesh_ps_bann_vlan_id;
220
static int hf_extrememesh_ps_bann_seq;
221
222
/*PS BRED fields*/
223
static int hf_extrememesh_ps_bred_version;
224
static int hf_extrememesh_ps_bred_frame_type;
225
static int hf_extrememesh_ps_bred_mpr_addr;
226
static int hf_extrememesh_ps_bred_orig_addr;
227
static int hf_extrememesh_ps_bred_opt_tot_len;
228
static int hf_extrememesh_ps_bred_option;
229
static int hf_extrememesh_ps_bred_option_len;
230
static int hf_extrememesh_ps_bred_seq;
231
232
/*PS SREQ fields*/
233
static int hf_extrememesh_ps_sreq_version;
234
static int hf_extrememesh_ps_sreq_frame_type;
235
static int hf_extrememesh_ps_sreq_reserved;
236
static int hf_extrememesh_ps_sreq_orig_addr;
237
static int hf_extrememesh_ps_sreq_term_addr;
238
static int hf_extrememesh_ps_sreq_opt_tot_len;
239
static int hf_extrememesh_ps_sreq_option;
240
static int hf_extrememesh_ps_sreq_option_len;
241
static int hf_extrememesh_ps_sreq_vlan_id;
242
243
/*PS SREP fields*/
244
static int hf_extrememesh_ps_srep_version;
245
static int hf_extrememesh_ps_srep_frame_type;
246
static int hf_extrememesh_ps_srep_flags;
247
static int hf_extrememesh_ps_srep_flags_reserved;
248
static int hf_extrememesh_ps_srep_flags_status;
249
static int hf_extrememesh_ps_srep_hop_count;
250
static int hf_extrememesh_ps_srep_orig_addr;
251
static int hf_extrememesh_ps_srep_dest_addr;
252
static int hf_extrememesh_ps_srep_term_addr;
253
static int hf_extrememesh_ps_srep_opt_tot_len;
254
static int hf_extrememesh_ps_srep_option;
255
static int hf_extrememesh_ps_srep_option_len;
256
static int hf_extrememesh_ps_srep_vlan_id;
257
258
/*PS PREQ fields*/
259
static int hf_extrememesh_ps_preq_version;
260
static int hf_extrememesh_ps_preq_frame_type;
261
static int hf_extrememesh_ps_preq_flags;
262
static int hf_extrememesh_ps_preq_flags_broadcast;
263
static int hf_extrememesh_ps_preq_flags_periodic;
264
static int hf_extrememesh_ps_preq_flags_state;
265
static int hf_extrememesh_ps_preq_flags_reserved;
266
static int hf_extrememesh_ps_preq_flags_gratuitous;
267
static int hf_extrememesh_ps_preq_flags_destination;
268
static int hf_extrememesh_ps_preq_flags_unknown;
269
static int hf_extrememesh_ps_preq_hop_count;
270
static int hf_extrememesh_ps_preq_ttl;
271
static int hf_extrememesh_ps_preq_path_metrics;
272
static int hf_extrememesh_ps_preq_services;
273
static int hf_extrememesh_ps_preq_services_reserved;
274
static int hf_extrememesh_ps_preq_services_mobile;
275
static int hf_extrememesh_ps_preq_services_path_pref;
276
static int hf_extrememesh_ps_preq_services_geo;
277
static int hf_extrememesh_ps_preq_services_proxy;
278
static int hf_extrememesh_ps_preq_services_root;
279
static int hf_extrememesh_ps_preq_reserved;
280
static int hf_extrememesh_ps_preq_id;
281
static int hf_extrememesh_ps_preq_term_addr;
282
static int hf_extrememesh_ps_preq_dest_addr;
283
static int hf_extrememesh_ps_preq_dest_seq;
284
static int hf_extrememesh_ps_preq_orig_addr;
285
static int hf_extrememesh_ps_preq_orig_seq;
286
static int hf_extrememesh_ps_preq_opt_tot_len;
287
static int hf_extrememesh_ps_preq_option;
288
static int hf_extrememesh_ps_preq_option_len;
289
static int hf_extrememesh_ps_preq_mcast_sub;
290
static int hf_extrememesh_ps_preq_vlan_id;
291
static int hf_extrememesh_ps_preq_mint_id;
292
293
/*PS PREP fields*/
294
static int hf_extrememesh_ps_prep_version;
295
static int hf_extrememesh_ps_prep_frame_type;
296
static int hf_extrememesh_ps_prep_flags;
297
static int hf_extrememesh_ps_prep_flags_reserved;
298
static int hf_extrememesh_ps_prep_flags_new_route;
299
static int hf_extrememesh_ps_prep_flags_repair;
300
static int hf_extrememesh_ps_prep_flags_ack;
301
static int hf_extrememesh_ps_prep_hop_count;
302
static int hf_extrememesh_ps_prep_path_metrics;
303
static int hf_extrememesh_ps_prep_services;
304
static int hf_extrememesh_ps_prep_services_reserved;
305
static int hf_extrememesh_ps_prep_services_mobile;
306
static int hf_extrememesh_ps_prep_services_path_pref;
307
static int hf_extrememesh_ps_prep_services_geo;
308
static int hf_extrememesh_ps_prep_services_proxy;
309
static int hf_extrememesh_ps_prep_services_root;
310
static int hf_extrememesh_ps_prep_reserved;
311
static int hf_extrememesh_ps_prep_term_addr;
312
static int hf_extrememesh_ps_prep_dest_addr;
313
static int hf_extrememesh_ps_prep_dest_seq;
314
static int hf_extrememesh_ps_prep_orig_addr;
315
static int hf_extrememesh_ps_prep_orig_seq;
316
static int hf_extrememesh_ps_prep_lifetime;
317
static int hf_extrememesh_ps_prep_opt_tot_len;
318
static int hf_extrememesh_ps_prep_option;
319
static int hf_extrememesh_ps_prep_option_len;
320
static int hf_extrememesh_ps_prep_mcast_sub;
321
static int hf_extrememesh_ps_prep_vlan_id;
322
static int hf_extrememesh_ps_prep_mint_id;
323
324
/*PS PERR fields*/
325
static int hf_extrememesh_ps_perr_version;
326
static int hf_extrememesh_ps_perr_frame_type;
327
static int hf_extrememesh_ps_perr_flags;
328
static int hf_extrememesh_ps_perr_flags_reserved;
329
static int hf_extrememesh_ps_perr_flags_warning;
330
static int hf_extrememesh_ps_perr_flags_no_delete;
331
static int hf_extrememesh_ps_perr_dest_count;
332
static int hf_extrememesh_ps_perr_unrch_dest;
333
static int hf_extrememesh_ps_perr_unrch_dest_seq;
334
335
/*PS PRST fields*/
336
static int hf_extrememesh_ps_prst_version;
337
static int hf_extrememesh_ps_prst_frame_type;
338
static int hf_extrememesh_ps_prst_hops_to_live;
339
static int hf_extrememesh_ps_prst_reserved;
340
static int hf_extrememesh_ps_prst_id;
341
static int hf_extrememesh_ps_prst_orig_addr;
342
static int hf_extrememesh_ps_prst_dest_addr;
343
344
/*PS PREM fields*/
345
static int hf_extrememesh_ps_prem_version;
346
static int hf_extrememesh_ps_prem_frame_type;
347
static int hf_extrememesh_ps_prem_mpr_addr;
348
static int hf_extrememesh_ps_prem_orig_addr;
349
static int hf_extrememesh_ps_prem_opt_tot_len;
350
static int hf_extrememesh_ps_prem_option;
351
static int hf_extrememesh_ps_prem_option_len;
352
static int hf_extrememesh_ps_prem_proxy_addr;
353
static int hf_extrememesh_ps_prem_proxy_vlan_id;
354
355
/*PS TRACE fields*/
356
static int hf_extrememesh_ps_trace_version;
357
static int hf_extrememesh_ps_trace_frame_type;
358
static int hf_extrememesh_ps_trace_flags;
359
static int hf_extrememesh_ps_trace_flags_reserved;
360
static int hf_extrememesh_ps_trace_flags_reply;
361
static int hf_extrememesh_ps_trace_flags_no_path;
362
static int hf_extrememesh_ps_trace_dest_addr;
363
static int hf_extrememesh_ps_trace_orig_addr;
364
static int hf_extrememesh_ps_trace_hop_count;
365
static int hf_extrememesh_ps_trace_addl_path;
366
367
/*PS PRER fields*/
368
static int hf_extrememesh_ps_prer_version;
369
static int hf_extrememesh_ps_prer_frame_type;
370
static int hf_extrememesh_ps_prer_dest_count;
371
static int hf_extrememesh_ps_prer_reserved;
372
static int hf_extrememesh_ps_prer_orig_addr;
373
static int hf_extrememesh_ps_prer_dest_addr;
374
static int hf_extrememesh_ps_prer_unrch_addr;
375
static int hf_extrememesh_ps_prer_opt_tot_len;
376
static int hf_extrememesh_ps_prer_option;
377
static int hf_extrememesh_ps_prer_option_len;
378
static int hf_extrememesh_ps_prer_vlan_id;
379
380
/*ETT for above fields...*/
381
static int ett_extrememesh;
382
383
/*MCH fields*/
384
static int ett_extrememesh_mch;
385
386
/*Hello fields*/
387
static int ett_extrememesh_hello;
388
389
/*Security fields*/
390
static int ett_extrememesh_security;
391
392
/*Cfpu fields*/
393
static int ett_extrememesh_cfpu;
394
395
/*EAPOM fields*/
396
static int ett_extrememesh_eapom;
397
398
/*PS fields*/
399
static int ett_extrememesh_ps;
400
401
/*Ethernet without FCS Dissector handle*/
402
static dissector_handle_t eth_withoutfcs_handle;
403
404
static const value_string mot_mesh_packet_types[] = {
405
  {0, "Mesh"},
406
  {1, "MCH"},
407
  {2, "Encapsulated Ethernet"},
408
  {3, "PS"},
409
  {4, "Hello"},
410
  {5, "Loc"},
411
  {6, "Sec"},
412
  {7, "MSH"},
413
  {8, "Test"},
414
  {9, "Frag"},
415
  {10,"CFPU"},
416
  {11,"EAPOM"},
417
  {12,"NULL"},
418
  {13,"Encapsulated Ethernet, no address"},
419
  {14,"L2Up"},
420
  {15,"Probe"},
421
  {0, NULL}
422
};
423
424
static const value_string mot_ps_packet_types[] = {
425
  {0, "(Invalid)"},
426
  {1, "AREQ" },
427
  {2, "AREP" },
428
  {3, "BREQ" },
429
  {4, "BREP" },
430
  {5, "BANN" },
431
  {6, "BRED" },
432
  {7, "SREQ" },
433
  {8, "SREP" },
434
  {9, "PREQ" },
435
  {10,"PREP" },
436
  {11,"PERR" },
437
  {12,"PRST" },
438
  {13,"PREM" },
439
  {14,"TRACE"},
440
  {15,"PRER" },
441
  {0, NULL}
442
};
443
444
static const value_string mot_ps_auth_replies[] = {
445
  {0, "Authorization Rejected"},
446
  {1, "Authorization Granted"},
447
  {2, "Authorization Pending"},
448
  {0, NULL}
449
};
450
451
static void dissect_extrememesh_ps_arep(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
452
0
{
453
0
  uint32_t offset = 0;
454
0
  uint32_t option = 0;
455
456
0
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Authorization Reply");
457
0
  proto_tree_add_item(tree, proto_extrememesh_ps_arep, tvb, offset, -1, ENC_NA);
458
0
  proto_tree_add_item(tree, hf_extrememesh_ps_arep_version, tvb, offset, 1, ENC_BIG_ENDIAN);
459
0
  offset++;
460
0
  proto_tree_add_item(tree, hf_extrememesh_ps_arep_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
461
0
  offset++;
462
0
  proto_tree_add_item(tree, hf_extrememesh_ps_arep_mpr_addr, tvb, offset, 6, ENC_NA);
463
0
  offset+=6;
464
0
  proto_tree_add_item(tree, hf_extrememesh_ps_arep_orig_addr, tvb, offset, 6, ENC_NA);
465
0
  offset+=6;
466
0
  proto_tree_add_item(tree, hf_extrememesh_ps_arep_opt_tot_len, tvb, offset, 2, ENC_BIG_ENDIAN);
467
0
  offset+=2;
468
0
  while(tvb_captured_length(tvb) > offset)
469
0
  {
470
0
    proto_tree_add_item_ret_uint(tree, hf_extrememesh_ps_arep_option, tvb, offset, 1, ENC_BIG_ENDIAN, &option);
471
0
    offset++;
472
0
    if (option == 0) continue;
473
0
    proto_tree_add_item(tree, hf_extrememesh_ps_arep_option_len, tvb, offset, 1, ENC_BIG_ENDIAN);
474
0
    offset++;
475
0
    switch(option)
476
0
    {
477
0
    case 4:
478
0
      proto_tree_add_item(tree, hf_extrememesh_ps_arep_result, tvb, offset, 1, ENC_BIG_ENDIAN);
479
0
      offset++;
480
0
      break;
481
0
    case 6:
482
0
      proto_tree_add_item(tree, hf_extrememesh_ps_arep_timeout, tvb, offset, 1, ENC_BIG_ENDIAN);
483
0
      offset++;
484
0
      break;
485
0
    default:
486
      /*proto_tree_add_subtree_format(tree, tvb, offset, -1, */
487
      /*proto_tree_add_text(tree, tvb, offset, -1, */
488
      /*"Unsupported authorization reply option (%d)", option);*/
489
0
      return;
490
0
    }
491
0
  }
492
0
}
493
494
/*****************************************************************************/
495
/*
496
497
Dissect Path Selection Bind Request
498
499
Description:
500
501
Dissects the path selection bind request.
502
503
*/
504
/*****************************************************************************/
505
static void dissect_extrememesh_ps_breq(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
506
7
{
507
7
  uint32_t offset = 0;
508
7
  uint32_t option = 0;
509
7
  uint8_t option_len = 0;
510
511
7
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Bind Request");
512
7
  proto_tree_add_item(tree, proto_extrememesh_ps_breq, tvb, offset, -1, ENC_NA);
513
7
  proto_tree_add_item(tree, hf_extrememesh_ps_breq_version, tvb, offset, 1, ENC_BIG_ENDIAN);
514
7
  offset++;
515
7
  proto_tree_add_item(tree, hf_extrememesh_ps_breq_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
516
7
  offset++;
517
7
  proto_tree_add_item(tree, hf_extrememesh_ps_breq_mpr_addr, tvb, offset, 6, ENC_NA);
518
7
  offset+=6;
519
7
  proto_tree_add_item(tree, hf_extrememesh_ps_breq_orig_addr, tvb, offset, 6, ENC_NA);
520
7
  offset+=6;
521
7
  proto_tree_add_item(tree, hf_extrememesh_ps_breq_opt_tot_len, tvb, offset, 2, ENC_BIG_ENDIAN);
522
7
  offset+=2;
523
346
  while(tvb_captured_length(tvb) > offset)
524
346
  {
525
346
    proto_tree_add_item_ret_uint(tree, hf_extrememesh_ps_breq_option, tvb, offset, 1, ENC_BIG_ENDIAN, &option);
526
346
    offset++;
527
346
    if (option == 0) continue;
528
18
    proto_tree_add_item_ret_uint8(tree, hf_extrememesh_ps_breq_option_len, tvb, offset, 1, ENC_BIG_ENDIAN, &option_len);
529
18
    offset++;
530
18
    switch(option)
531
18
    {
532
0
    case 1:
533
0
      while(option_len > 0)
534
0
      {
535
0
        proto_tree_add_item(tree, hf_extrememesh_ps_breq_proxy_addr, tvb, offset, 6, ENC_NA);
536
0
        option_len-=6;
537
0
        offset+=6;
538
0
        if (option_len < 6) break;
539
0
      }
540
0
      break;
541
0
    case 2:
542
0
      proto_tree_add_item(tree, hf_extrememesh_ps_breq_old_mpr, tvb, offset, 6, ENC_NA);
543
0
      offset+=6;
544
0
      break;
545
0
    case 5:
546
0
      break;
547
0
    case 7:
548
0
      proto_tree_add_item(tree, hf_extrememesh_ps_breq_orig_pri, tvb, offset, 1, ENC_BIG_ENDIAN);
549
0
      offset++;
550
0
      break;
551
7
    case 8:
552
680
      while(option_len > 0)
553
673
      {
554
673
        proto_tree_add_item(tree, hf_extrememesh_ps_breq_proxy_pri, tvb, offset, 1, ENC_BIG_ENDIAN);
555
673
        option_len--;
556
673
        offset++;
557
673
      }
558
7
      break;
559
2
    case 10:
560
2
      proto_tree_add_item(tree, hf_extrememesh_ps_breq_vlan_id, tvb, offset, 2, ENC_BIG_ENDIAN);
561
2
      offset+=2;
562
2
      break;
563
0
    case 11:
564
0
      while(option_len > 0)
565
0
      {
566
0
        proto_tree_add_item(tree, hf_extrememesh_ps_breq_proxy_vlan_id, tvb, offset, 2, ENC_BIG_ENDIAN);
567
0
        option_len-=2;
568
0
        offset+=2;
569
0
        if (option_len < 2) break;
570
0
      }
571
0
      break;
572
3
    case 12:
573
3
      proto_tree_add_item(tree, hf_extrememesh_ps_breq_seq, tvb, offset, 4, ENC_BIG_ENDIAN);
574
3
      offset+=4;
575
3
      break;
576
6
    default:
577
      /*proto_tree_add_text(tree, tvb, offset, -1, */
578
      /*"Unsupported bind request option (%d)", option);*/
579
6
      return;
580
18
    }
581
18
  }
582
7
}
583
584
/*****************************************************************************/
585
/*
586
587
Dissect Path Selection Bind Reply
588
589
Description:
590
591
Dissects the path selection bind reply.
592
593
*/
594
/*****************************************************************************/
595
static void dissect_extrememesh_ps_brep(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
596
0
{
597
0
  uint32_t offset = 0;
598
0
  uint32_t option = 0;
599
600
0
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Bind Reply");
601
0
  proto_tree_add_item(tree, proto_extrememesh_ps_brep, tvb, offset, -1, ENC_NA);
602
0
  proto_tree_add_item(tree, hf_extrememesh_ps_brep_version, tvb, offset, 1, ENC_BIG_ENDIAN);
603
0
  offset++;
604
0
  proto_tree_add_item(tree, hf_extrememesh_ps_brep_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
605
0
  offset++;
606
0
  proto_tree_add_item(tree, hf_extrememesh_ps_brep_mpr_addr, tvb, offset, 6, ENC_NA);
607
0
  offset+=6;
608
0
  proto_tree_add_item(tree, hf_extrememesh_ps_brep_orig_addr, tvb, offset, 6, ENC_NA);
609
0
  offset+=6;
610
0
  proto_tree_add_item(tree, hf_extrememesh_ps_brep_opt_tot_len, tvb, offset, 2, ENC_BIG_ENDIAN);
611
0
  offset+=2;
612
613
0
  while(tvb_captured_length(tvb) > offset)
614
0
  {
615
0
    proto_tree_add_item_ret_uint(tree, hf_extrememesh_ps_brep_option, tvb, offset, 1, ENC_BIG_ENDIAN, &option);
616
0
    offset++;
617
0
    if (option == 0) continue;
618
0
    switch(option)
619
0
    {
620
0
    case 12:
621
0
      proto_tree_add_item(tree, hf_extrememesh_ps_brep_option_len, tvb, offset, 1, ENC_BIG_ENDIAN);
622
0
      offset++;
623
0
      proto_tree_add_item(tree, hf_extrememesh_ps_brep_seq, tvb, offset, 4, ENC_BIG_ENDIAN);
624
0
      offset+=4;
625
0
      break;
626
0
    default:
627
      /*proto_tree_add_text(tree, tvb, offset, -1, */
628
      /*"Unsupported bind reply option (%d)", option);*/
629
0
      return;
630
0
    }
631
0
  }
632
0
}
633
634
/*****************************************************************************/
635
/*
636
637
Dissect Path Selection Bind Announcement
638
639
Description:
640
641
Dissects the path selection bind announcement (BANN) packet.
642
643
*/
644
/*****************************************************************************/
645
static void dissect_extrememesh_ps_bann(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
646
0
{
647
0
  uint32_t offset = 0;
648
0
  uint32_t option = 0;
649
0
  uint8_t option_len = 0;
650
651
0
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Bind Announcement");
652
0
  proto_tree_add_item(tree, proto_extrememesh_ps_bann, tvb, offset, -1, ENC_NA);
653
0
  proto_tree_add_item(tree, hf_extrememesh_ps_bann_version, tvb, offset, 1, ENC_BIG_ENDIAN);
654
0
  offset++;
655
0
  proto_tree_add_item(tree, hf_extrememesh_ps_bann_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
656
0
  offset++;
657
0
  proto_tree_add_item(tree, hf_extrememesh_ps_bann_mpr_addr, tvb, offset, 6, ENC_NA);
658
0
  offset+=6;
659
0
  proto_tree_add_item(tree, hf_extrememesh_ps_bann_orig_addr, tvb, offset, 6, ENC_NA);
660
0
  offset+=6;
661
0
  proto_tree_add_item(tree, hf_extrememesh_ps_bann_opt_tot_len, tvb, offset, 2, ENC_BIG_ENDIAN);
662
0
  offset+=2;
663
0
  while(tvb_captured_length(tvb) > offset)
664
0
  {
665
0
    proto_tree_add_item_ret_uint(tree, hf_extrememesh_ps_bann_option, tvb, offset, 1, ENC_BIG_ENDIAN, &option);
666
0
    offset++;
667
0
    if(option == 0) continue; // Option 0 is a single padding byte, no length byte
668
0
    option_len = tvb_get_uint8(tvb, offset);
669
0
    proto_tree_add_item(tree, hf_extrememesh_ps_bann_option_len, tvb, offset, 1, ENC_BIG_ENDIAN);
670
0
    offset++;
671
0
    switch(option)
672
0
    {
673
0
    case 1:
674
0
      while(option_len > 0)
675
0
      {
676
0
        proto_tree_add_item(tree, hf_extrememesh_ps_bann_proxy_addr, tvb, offset, 6, ENC_NA);
677
0
        option_len-=6;
678
0
        offset+=6;
679
0
        if (option_len < 6) break;
680
0
      }
681
0
      break;
682
0
    case 2:
683
0
      proto_tree_add_item(tree, hf_extrememesh_ps_bann_old_root, tvb, offset, 6, ENC_NA);
684
0
      offset+=6;
685
0
      break;
686
0
    case 10:
687
0
      proto_tree_add_item(tree, hf_extrememesh_ps_bann_vlan_id, tvb, offset, 2, ENC_BIG_ENDIAN);
688
0
      offset+=2;
689
0
      break;
690
0
    case 12:
691
0
      proto_tree_add_item(tree, hf_extrememesh_ps_bann_seq, tvb, offset, 4, ENC_BIG_ENDIAN);
692
0
      offset+=4;
693
0
      break;
694
0
    default:
695
      /*proto_tree_add_text(tree, tvb, offset, -1, */
696
      /*"Unsupported bind announcement option (%d)", option);*/
697
0
      return;
698
0
    }
699
0
  }
700
0
}
701
702
/*****************************************************************************/
703
/*
704
705
Dissect Path Selection Bind Removed
706
707
Description:
708
709
Dissects the path selection bind removed packet.
710
711
*/
712
/*****************************************************************************/
713
static void dissect_extrememesh_ps_bred(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
714
0
{
715
0
  uint32_t offset = 0;
716
0
  uint32_t option = 0;
717
718
0
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Bind Removed");
719
0
  proto_tree_add_item(tree, proto_extrememesh_ps_bred, tvb, offset, -1, ENC_NA);
720
0
  proto_tree_add_item(tree, hf_extrememesh_ps_bred_version, tvb, offset, 1, ENC_BIG_ENDIAN);
721
0
  offset++;
722
0
  proto_tree_add_item(tree, hf_extrememesh_ps_bred_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
723
0
  offset++;
724
0
  proto_tree_add_item(tree, hf_extrememesh_ps_bred_mpr_addr, tvb, offset, 6, ENC_NA);
725
0
  offset+=6;
726
0
  proto_tree_add_item(tree, hf_extrememesh_ps_bred_orig_addr, tvb, offset, 6, ENC_NA);
727
0
  offset+=6;
728
0
  proto_tree_add_item(tree, hf_extrememesh_ps_bred_opt_tot_len, tvb, offset, 2, ENC_BIG_ENDIAN);
729
0
  offset+=2;
730
731
0
  while(tvb_captured_length(tvb) > offset)
732
0
  {
733
0
    proto_tree_add_item_ret_uint(tree, hf_extrememesh_ps_bred_option, tvb, offset, 1, ENC_BIG_ENDIAN, &option);
734
0
    offset++;
735
0
    if(option == 0) continue; // Option 0 is a single padding byte, no length byte
736
0
    proto_tree_add_item(tree, hf_extrememesh_ps_bred_option_len, tvb, offset, 1, ENC_BIG_ENDIAN);
737
0
    offset++;
738
0
    switch(option)
739
0
    {
740
0
    case 12:
741
0
      proto_tree_add_item(tree, hf_extrememesh_ps_bred_seq, tvb, offset, 4, ENC_BIG_ENDIAN);
742
0
      offset+=4;
743
0
      break;
744
0
    default:
745
      /*proto_tree_add_text(tree, tvb, offset, -1, */
746
      /*"Unsupported bind removed option (%d)", option);*/
747
0
      return;
748
0
    }
749
0
  }
750
0
}
751
752
/*****************************************************************************/
753
/*
754
755
Dissect Path Selection Status Request
756
757
Description:
758
759
Dissects the path selection status request.
760
761
*/
762
/*****************************************************************************/
763
static void dissect_extrememesh_ps_sreq(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
764
0
{
765
0
  uint32_t offset = 0;
766
0
  uint32_t option = 0;
767
768
0
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Status Request");
769
0
  proto_tree_add_item(tree, proto_extrememesh_ps_sreq, tvb, offset, -1, ENC_NA);
770
0
  proto_tree_add_item(tree, hf_extrememesh_ps_sreq_version, tvb, offset, 1, ENC_BIG_ENDIAN);
771
0
  offset++;
772
0
  proto_tree_add_item(tree, hf_extrememesh_ps_sreq_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
773
0
  offset++;
774
0
  proto_tree_add_item(tree, hf_extrememesh_ps_sreq_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
775
0
  offset+=2;
776
0
  proto_tree_add_item(tree, hf_extrememesh_ps_sreq_orig_addr, tvb, offset, 6, ENC_NA);
777
0
  offset+=6;
778
0
  proto_tree_add_item(tree, hf_extrememesh_ps_sreq_term_addr, tvb, offset, 6, ENC_NA);
779
0
  offset+=6;
780
0
  proto_tree_add_item(tree, hf_extrememesh_ps_sreq_opt_tot_len, tvb, offset, 2, ENC_BIG_ENDIAN);
781
0
  offset+=2;
782
783
0
  while(tvb_captured_length(tvb) > offset)
784
0
  {
785
0
    proto_tree_add_item_ret_uint(tree, hf_extrememesh_ps_sreq_option, tvb, offset, 2, ENC_BIG_ENDIAN, &option);
786
0
    offset+=2;
787
0
    if(option == 0) continue; // Option 0 is a single padding byte, no length byte
788
0
    proto_tree_add_item(tree, hf_extrememesh_ps_sreq_option_len, tvb, offset, 2, ENC_BIG_ENDIAN);
789
0
    offset+=2;
790
0
    switch(option)
791
0
    {
792
0
    case 10:
793
0
      proto_tree_add_item(tree, hf_extrememesh_ps_sreq_vlan_id, tvb, offset, 2, ENC_BIG_ENDIAN);
794
0
      offset+=2;
795
0
      break;
796
0
    default:
797
      /*proto_tree_add_text(tree, tvb, offset, -1, */
798
      /*"Unsupported status request option (%d)", option);*/
799
0
      return;
800
0
    }
801
0
  }
802
0
}
803
804
/*****************************************************************************/
805
/*
806
807
Dissect Path Selection Status Reply
808
809
Description:
810
811
Dissects the path selection status reply.
812
813
*/
814
/*****************************************************************************/
815
static void dissect_extrememesh_ps_srep(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
816
1
{
817
1
  uint32_t offset = 0;
818
1
  uint32_t option = 0;
819
820
1
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Status Reply");
821
1
  proto_tree_add_item(tree, proto_extrememesh_ps_srep, tvb, offset, -1, ENC_NA);
822
1
  proto_tree_add_item(tree, hf_extrememesh_ps_srep_version, tvb, offset, 1, ENC_BIG_ENDIAN);
823
1
  offset++;
824
1
  proto_tree_add_item(tree, hf_extrememesh_ps_srep_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
825
1
  offset++;
826
1
  proto_tree_add_item(tree, hf_extrememesh_ps_srep_flags, tvb, offset, 1, ENC_BIG_ENDIAN);
827
1
  proto_tree_add_item(tree, hf_extrememesh_ps_srep_flags_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
828
1
  proto_tree_add_item(tree, hf_extrememesh_ps_srep_flags_status, tvb, offset, 1, ENC_BIG_ENDIAN);
829
1
  offset++;
830
1
  proto_tree_add_item(tree, hf_extrememesh_ps_srep_hop_count, tvb, offset, 1, ENC_BIG_ENDIAN);
831
1
  offset++;
832
1
  proto_tree_add_item(tree, hf_extrememesh_ps_srep_orig_addr, tvb, offset, 6, ENC_NA);
833
1
  offset+=6;
834
1
  proto_tree_add_item(tree, hf_extrememesh_ps_srep_dest_addr, tvb, offset, 6, ENC_NA);
835
1
  offset+=6;
836
1
  proto_tree_add_item(tree, hf_extrememesh_ps_srep_term_addr, tvb, offset, 6, ENC_NA);
837
1
  offset+=6;
838
1
  proto_tree_add_item(tree, hf_extrememesh_ps_srep_opt_tot_len, tvb, offset, 2, ENC_BIG_ENDIAN);
839
1
  offset+=2;
840
841
8
  while(tvb_captured_length(tvb) > offset)
842
8
  {
843
8
    proto_tree_add_item_ret_uint(tree, hf_extrememesh_ps_srep_option, tvb, offset, 2, ENC_BIG_ENDIAN, &option);
844
8
    offset+=2;
845
8
    if(option == 0) continue; // Option 0 is a single padding byte, no length byte
846
1
    proto_tree_add_item(tree, hf_extrememesh_ps_srep_option_len, tvb, offset, 2, ENC_BIG_ENDIAN);
847
1
    offset+=2;
848
1
    switch(option)
849
1
    {
850
0
    case 10:
851
0
      proto_tree_add_item(tree, hf_extrememesh_ps_srep_vlan_id, tvb, offset, 2, ENC_BIG_ENDIAN);
852
0
      offset+=2;
853
0
      break;
854
1
    default:
855
      /*proto_tree_add_text(tree, tvb, offset, -1, */
856
      /*"Unsupported status reply option (%d)", option);*/
857
1
      return;
858
1
    }
859
1
  }
860
1
}
861
862
/*****************************************************************************/
863
/*
864
865
Dissect Path Selection Path Request
866
867
Description:
868
869
Dissects the path selection path request.
870
871
*/
872
/*****************************************************************************/
873
static void dissect_extrememesh_ps_preq(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
874
0
{
875
0
  uint32_t offset = 0;
876
0
  uint32_t option = 0;
877
0
  uint16_t option_len = 0;
878
879
0
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Path Request");
880
0
  proto_tree_add_item(tree, proto_extrememesh_ps_preq, tvb, offset, -1, ENC_NA);
881
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_version, tvb, offset, 1, ENC_BIG_ENDIAN);
882
0
  offset++;
883
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
884
0
  offset++;
885
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_flags, tvb, offset, 1, ENC_BIG_ENDIAN);
886
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_flags_broadcast, tvb, offset, 1, ENC_BIG_ENDIAN);
887
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_flags_periodic, tvb, offset, 1, ENC_BIG_ENDIAN);
888
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_flags_state, tvb, offset, 1, ENC_BIG_ENDIAN);
889
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_flags_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
890
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_flags_gratuitous, tvb, offset, 1, ENC_BIG_ENDIAN);
891
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_flags_destination, tvb, offset, 1, ENC_BIG_ENDIAN);
892
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_flags_unknown, tvb, offset, 1, ENC_BIG_ENDIAN);
893
0
  offset++;
894
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_hop_count, tvb, offset, 1, ENC_BIG_ENDIAN);
895
0
  offset++;
896
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_ttl, tvb, offset, 4, ENC_BIG_ENDIAN);
897
0
  offset+=4;
898
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_path_metrics, tvb, offset, 2, ENC_BIG_ENDIAN);
899
0
  offset+=2;
900
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_services, tvb, offset, 1, ENC_BIG_ENDIAN);
901
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_services_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
902
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_services_mobile, tvb, offset, 1, ENC_BIG_ENDIAN);
903
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_services_path_pref, tvb, offset, 1, ENC_BIG_ENDIAN);
904
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_services_geo, tvb, offset, 1, ENC_BIG_ENDIAN);
905
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_services_proxy, tvb, offset, 1, ENC_BIG_ENDIAN);
906
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_services_root, tvb, offset, 1, ENC_BIG_ENDIAN);
907
0
  offset++;
908
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
909
0
  offset++;
910
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_id, tvb, offset, 4, ENC_BIG_ENDIAN);
911
0
  offset+=4;
912
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_term_addr, tvb, offset, 6, ENC_NA);
913
0
  offset+=6;
914
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_dest_addr, tvb, offset, 6, ENC_NA);
915
0
  offset+=6;
916
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_dest_seq, tvb, offset, 4, ENC_BIG_ENDIAN);
917
0
  offset+=4;
918
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_orig_addr, tvb, offset, 6, ENC_NA);
919
0
  offset+=6;
920
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_orig_seq, tvb, offset, 4, ENC_BIG_ENDIAN);
921
0
  offset+=4;
922
0
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_opt_tot_len, tvb, offset, 2, ENC_BIG_ENDIAN);
923
0
  offset+=2;
924
925
0
  while(tvb_captured_length(tvb) > offset)
926
0
  {
927
0
    proto_tree_add_item_ret_uint(tree, hf_extrememesh_ps_preq_option, tvb, offset, 2, ENC_BIG_ENDIAN, &option);
928
0
    offset+=2;
929
0
    if(option == 0) continue; // Option 0 is a single padding byte, no length byte
930
0
    option_len = tvb_get_ntohs(tvb, offset);
931
0
    proto_tree_add_item(tree, hf_extrememesh_ps_preq_option_len, tvb, offset, 2, ENC_BIG_ENDIAN);
932
0
    offset+=2;
933
0
    switch(option)
934
0
    {
935
0
    case 1:
936
0
      while(option_len > 0)
937
0
      {
938
0
        proto_tree_add_item(tree, hf_extrememesh_ps_preq_mcast_sub, tvb, offset, 6, ENC_NA);
939
0
        option_len-=6;
940
0
        offset+=6;
941
0
        if (option_len < 6) break;
942
0
      }
943
0
      break;
944
0
    case 10:
945
0
      proto_tree_add_item(tree, hf_extrememesh_ps_preq_vlan_id, tvb, offset, 2, ENC_BIG_ENDIAN);
946
0
      offset+=2;
947
0
      break;
948
0
    case 14:
949
0
      proto_tree_add_item(tree, hf_extrememesh_ps_preq_mint_id, tvb, offset, 4, ENC_BIG_ENDIAN);
950
0
      offset+=4;
951
0
      break;
952
0
    default:
953
      /*proto_tree_add_text(tree, tvb, offset, -1, */
954
      /*"Unsupported path request option (%d)", option);*/
955
0
      return;
956
0
    }
957
0
  }
958
0
}
959
960
/*****************************************************************************/
961
/*
962
963
Dissect Path Selection Path Reply
964
965
Description:
966
967
Dissects the path selection path reply.
968
969
*/
970
/*****************************************************************************/
971
static void dissect_extrememesh_ps_prep(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
972
0
{
973
0
  uint32_t offset = 0;
974
0
  uint32_t option = 0;
975
0
  uint16_t option_len = 0;
976
977
0
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Path Reply");
978
0
  proto_tree_add_item(tree, proto_extrememesh_ps_prep, tvb, offset, -1, ENC_NA);
979
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_version, tvb, offset, 1, ENC_BIG_ENDIAN);
980
0
  offset++;
981
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
982
0
  offset++;
983
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_flags, tvb, offset, 1, ENC_BIG_ENDIAN);
984
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_flags_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
985
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_flags_new_route, tvb, offset, 1, ENC_BIG_ENDIAN);
986
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_flags_repair, tvb, offset, 1, ENC_BIG_ENDIAN);
987
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_flags_ack, tvb, offset, 1, ENC_BIG_ENDIAN);
988
0
  offset++;
989
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_hop_count, tvb, offset, 1, ENC_BIG_ENDIAN);
990
0
  offset++;
991
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_path_metrics, tvb, offset, 2, ENC_BIG_ENDIAN);
992
0
  offset+=2;
993
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_services, tvb, offset, 1, ENC_BIG_ENDIAN);
994
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_services_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
995
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_services_mobile, tvb, offset, 1, ENC_BIG_ENDIAN);
996
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_services_path_pref, tvb, offset, 1, ENC_BIG_ENDIAN);
997
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_services_geo, tvb, offset, 1, ENC_BIG_ENDIAN);
998
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_services_proxy, tvb, offset, 1, ENC_BIG_ENDIAN);
999
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_services_root, tvb, offset, 1, ENC_BIG_ENDIAN);
1000
0
  offset++;
1001
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
1002
0
  offset++;
1003
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_term_addr, tvb, offset, 6, ENC_NA);
1004
0
  offset+=6;
1005
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_dest_addr, tvb, offset, 6, ENC_NA);
1006
0
  offset+=6;
1007
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_dest_seq, tvb, offset, 4, ENC_BIG_ENDIAN);
1008
0
  offset+=4;
1009
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_orig_addr, tvb, offset, 6, ENC_NA);
1010
0
  offset+=6;
1011
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_orig_seq, tvb, offset, 4, ENC_BIG_ENDIAN);
1012
0
  offset+=4;
1013
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_lifetime, tvb, offset, 4, ENC_BIG_ENDIAN);
1014
0
  offset+=4;
1015
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_opt_tot_len, tvb, offset, 2, ENC_BIG_ENDIAN);
1016
0
  offset+=2;
1017
0
  while(tvb_captured_length(tvb) > offset)
1018
0
  {
1019
0
    proto_tree_add_item_ret_uint(tree, hf_extrememesh_ps_prep_option, tvb, offset, 2, ENC_BIG_ENDIAN, &option);
1020
0
    offset+=2;
1021
0
    if(option == 0) continue; // Option 0 is a single padding byte, no length byte
1022
0
    option_len = tvb_get_ntohs(tvb, offset);
1023
0
    proto_tree_add_item(tree, hf_extrememesh_ps_prep_option_len, tvb, offset, 2, ENC_BIG_ENDIAN);
1024
0
    offset+=2;
1025
0
    switch(option)
1026
0
    {
1027
0
    case 1:
1028
0
      while(option_len > 0)
1029
0
      {
1030
0
        proto_tree_add_item(tree, hf_extrememesh_ps_prep_mcast_sub, tvb, offset, 6, ENC_NA);
1031
0
        option_len-=6;
1032
0
        offset+=6;
1033
0
        if (option_len < 6) break;
1034
0
      }
1035
0
      break;
1036
0
    case 10:
1037
0
      proto_tree_add_item(tree, hf_extrememesh_ps_prep_vlan_id, tvb, offset, 2, ENC_BIG_ENDIAN);
1038
0
      offset+=2;
1039
0
      break;
1040
0
    case 14:
1041
0
      proto_tree_add_item(tree, hf_extrememesh_ps_prep_mint_id, tvb, offset, 4, ENC_BIG_ENDIAN);
1042
0
      offset+=4;
1043
0
      break;
1044
0
    default:
1045
      /*proto_tree_add_text(tree, tvb, offset, -1, */
1046
      /*"Unsupported path reply option (%d)", option);*/
1047
0
      return;
1048
0
    }
1049
0
  }
1050
0
}
1051
1052
/*****************************************************************************/
1053
/*
1054
1055
Dissect Path Selection Path Error
1056
1057
Description:
1058
1059
Dissects the path selection path error (PERR) packet.
1060
1061
*/
1062
/*****************************************************************************/
1063
static void dissect_extrememesh_ps_perr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
1064
1
{
1065
1
  uint32_t offset = 0;
1066
1
  uint8_t dst_cnt = 0;
1067
1068
1
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Path Error");
1069
1
  dst_cnt = tvb_get_uint8(tvb, 3);
1070
1
  proto_tree_add_item(tree, proto_extrememesh_ps_perr, tvb, offset, -1, ENC_NA);
1071
1
  proto_tree_add_item(tree, hf_extrememesh_ps_perr_version, tvb, offset, 1, ENC_BIG_ENDIAN);
1072
1
  offset++;
1073
1
  proto_tree_add_item(tree, hf_extrememesh_ps_perr_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1074
1
  offset++;
1075
1
  proto_tree_add_item(tree, hf_extrememesh_ps_perr_flags, tvb, offset, 1, ENC_BIG_ENDIAN);
1076
1
  proto_tree_add_item(tree, hf_extrememesh_ps_perr_flags_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
1077
1
  proto_tree_add_item(tree, hf_extrememesh_ps_perr_flags_warning, tvb, offset, 1, ENC_BIG_ENDIAN);
1078
1
  proto_tree_add_item(tree, hf_extrememesh_ps_perr_flags_no_delete, tvb, offset, 1, ENC_BIG_ENDIAN);
1079
1
  offset++;
1080
1
  proto_tree_add_item(tree, hf_extrememesh_ps_perr_dest_count, tvb, offset, 1, ENC_BIG_ENDIAN);
1081
1
  offset++;
1082
4
  while (dst_cnt-- > 0)
1083
3
  {
1084
3
    proto_tree_add_item(tree, hf_extrememesh_ps_perr_unrch_dest, tvb, offset, 6, ENC_NA);
1085
3
    offset+=6;
1086
3
    proto_tree_add_item(tree, hf_extrememesh_ps_perr_unrch_dest_seq, tvb, offset, 4, ENC_BIG_ENDIAN);
1087
3
    offset+=4;
1088
3
  }
1089
1
}
1090
1091
/*****************************************************************************/
1092
/*
1093
1094
Dissect Path Selection Path Reset
1095
1096
Description:
1097
1098
Dissects the path selection path reset (PRST).
1099
1100
*/
1101
/*****************************************************************************/
1102
static void dissect_extrememesh_ps_prst(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
1103
0
{
1104
0
  unsigned offset = 0;
1105
1106
0
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Path Reset");
1107
0
  proto_tree_add_item(tree, proto_extrememesh_ps_prst, tvb, offset, -1, ENC_NA);
1108
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prst_version, tvb, offset, 1, ENC_BIG_ENDIAN);
1109
0
  offset++;
1110
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prst_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1111
0
  offset++;
1112
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prst_hops_to_live, tvb, offset, 1, ENC_BIG_ENDIAN);
1113
0
  offset++;
1114
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prst_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
1115
0
  offset++;
1116
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prst_id, tvb, offset, 4, ENC_BIG_ENDIAN);
1117
0
  offset+=4;
1118
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prst_orig_addr, tvb, offset, 6, ENC_NA);
1119
0
  offset+=6;
1120
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prst_dest_addr, tvb, offset, 6, ENC_NA);
1121
0
}
1122
1123
/*****************************************************************************/
1124
/*
1125
1126
Dissect Path Selection Proxy Remove
1127
1128
Description:
1129
1130
Dissects the path selection proxy remove (PREM) packet.
1131
1132
*/
1133
/*****************************************************************************/
1134
static void dissect_extrememesh_ps_prem(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
1135
1
{
1136
1
  uint32_t offset = 0;
1137
1
  uint32_t option = 0;
1138
1
  uint8_t option_len = 0;
1139
1140
1
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Proxy Remove");
1141
1
  proto_tree_add_item(tree, proto_extrememesh_ps_prem, tvb, offset, -1, ENC_NA);
1142
1
  proto_tree_add_item(tree, hf_extrememesh_ps_prem_version, tvb, offset, 1, ENC_BIG_ENDIAN);
1143
1
  offset++;
1144
1
  proto_tree_add_item(tree, hf_extrememesh_ps_prem_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1145
1
  offset++;
1146
1
  proto_tree_add_item(tree, hf_extrememesh_ps_prem_mpr_addr, tvb, offset, 6, ENC_NA);
1147
1
  offset+=6;
1148
1
  proto_tree_add_item(tree, hf_extrememesh_ps_prem_orig_addr, tvb, offset, 6, ENC_NA);
1149
1
  offset+=6;
1150
1
  proto_tree_add_item(tree, hf_extrememesh_ps_prem_opt_tot_len, tvb, offset, 2, ENC_BIG_ENDIAN);
1151
1
  offset+=2;
1152
1
  while(tvb_captured_length(tvb) > offset)
1153
1
  {
1154
1
    proto_tree_add_item_ret_uint(tree, hf_extrememesh_ps_prem_option, tvb, offset, 1, ENC_BIG_ENDIAN, &option);
1155
1
    offset++;
1156
1
    if(option == 0) continue; // Option 0 is a single padding byte, no length byte
1157
1
    option_len = tvb_get_int8(tvb, offset);
1158
1
    proto_tree_add_item(tree, hf_extrememesh_ps_prem_option_len, tvb, offset, 1, ENC_BIG_ENDIAN);
1159
1
    offset++;
1160
1
    switch(option)
1161
1
    {
1162
0
    case 1:
1163
0
      while(option_len > 0)
1164
0
      {
1165
0
        proto_tree_add_item(tree, hf_extrememesh_ps_prem_proxy_addr, tvb, offset, 6, ENC_NA);
1166
0
        option_len-=6;
1167
0
        offset+=6;
1168
0
        if (option_len < 6) break;
1169
0
      }
1170
0
      break;
1171
0
    case 11:
1172
0
      while(option_len > 0)
1173
0
      {
1174
0
        proto_tree_add_item(tree, hf_extrememesh_ps_prem_proxy_vlan_id, tvb, offset, 2, ENC_BIG_ENDIAN);
1175
0
        option_len-=2;
1176
0
        offset+=2;
1177
0
        if (option_len < 2) break;
1178
0
      }
1179
0
      break;
1180
1
    default:
1181
      /*proto_tree_add_text(tree, tvb, offset, -1, */
1182
      /*"Unsupported proxy remove option (%d)", option);*/
1183
1
      return;
1184
1
    }
1185
1
  }
1186
1
}
1187
1188
/*****************************************************************************/
1189
/*
1190
1191
Dissect Path Selection Trace Path
1192
1193
Description:
1194
1195
Dissects the path selection trace path (TRACE) packet.
1196
1197
*/
1198
/*****************************************************************************/
1199
static void dissect_extrememesh_ps_trace(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
1200
0
{
1201
0
  uint32_t offset = 0;
1202
0
  uint8_t hop_cnt = 0;
1203
1204
0
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Trace Path");
1205
0
  hop_cnt = tvb_get_uint8(tvb, 15);
1206
0
  proto_tree_add_item(tree, proto_extrememesh_ps_trace, tvb, offset, -1, ENC_NA);
1207
0
  proto_tree_add_item(tree, hf_extrememesh_ps_trace_version, tvb, offset, 1, ENC_BIG_ENDIAN);
1208
0
  offset++;
1209
0
  proto_tree_add_item(tree, hf_extrememesh_ps_trace_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1210
0
  offset++;
1211
0
  proto_tree_add_item(tree, hf_extrememesh_ps_trace_flags, tvb, offset, 1, ENC_BIG_ENDIAN);
1212
0
  proto_tree_add_item(tree, hf_extrememesh_ps_trace_flags_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
1213
0
  proto_tree_add_item(tree, hf_extrememesh_ps_trace_flags_reply, tvb, offset, 1, ENC_BIG_ENDIAN);
1214
0
  proto_tree_add_item(tree, hf_extrememesh_ps_trace_flags_no_path, tvb, offset, 1, ENC_BIG_ENDIAN);
1215
0
  offset++;
1216
0
  proto_tree_add_item(tree, hf_extrememesh_ps_trace_dest_addr, tvb, offset, 6, ENC_NA);
1217
0
  offset+=6;
1218
0
  proto_tree_add_item(tree, hf_extrememesh_ps_trace_orig_addr, tvb, offset, 6, ENC_NA);
1219
0
  offset+=6;
1220
0
  proto_tree_add_item(tree, hf_extrememesh_ps_trace_hop_count, tvb, offset, 1, ENC_BIG_ENDIAN);
1221
0
  offset++;
1222
0
  while(hop_cnt-- > 0)
1223
0
  {
1224
0
    proto_tree_add_item(tree, hf_extrememesh_ps_trace_addl_path, tvb, offset, 6, ENC_NA);
1225
0
    offset+=6;
1226
0
  }
1227
0
}
1228
1229
/*****************************************************************************/
1230
/*
1231
1232
Dissect Path Selection Proxy Error
1233
1234
Description:
1235
1236
Dissects the path selection proxy error.
1237
1238
*/
1239
/*****************************************************************************/
1240
static void dissect_extrememesh_ps_prer(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
1241
0
{
1242
0
  uint32_t offset = 0;
1243
0
  uint32_t option = 0;
1244
1245
0
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Proxy Error");
1246
0
  proto_tree_add_item(tree, proto_extrememesh_ps_prer, tvb, offset, -1, ENC_NA);
1247
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prer_version, tvb, offset, 1, ENC_BIG_ENDIAN);
1248
0
  offset++;
1249
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prer_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1250
0
  offset++;
1251
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prer_dest_count, tvb, offset, 1, ENC_BIG_ENDIAN);
1252
0
  offset++;
1253
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prer_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
1254
0
  offset++;
1255
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prer_orig_addr, tvb, offset, 6, ENC_NA);
1256
0
  offset+=6;
1257
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prer_dest_addr, tvb, offset, 6, ENC_NA);
1258
0
  offset+=6;
1259
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prer_unrch_addr, tvb, offset, 6, ENC_NA);
1260
0
  offset+=6;
1261
0
  proto_tree_add_item(tree, hf_extrememesh_ps_prer_opt_tot_len, tvb, offset, 2, ENC_BIG_ENDIAN);
1262
0
  offset+=2;
1263
0
  while(tvb_captured_length(tvb) > offset)
1264
0
  {
1265
0
    proto_tree_add_item_ret_uint(tree, hf_extrememesh_ps_prer_option, tvb, offset, 2, ENC_BIG_ENDIAN, &option);
1266
0
    offset+=2;
1267
0
    if(option == 0) continue; // Option 0 is a single padding byte, no length byte
1268
0
    proto_tree_add_item(tree, hf_extrememesh_ps_prer_option_len, tvb, offset, 2, ENC_BIG_ENDIAN);
1269
0
    offset+=2;
1270
0
    switch(option)
1271
0
    {
1272
0
    case 11:
1273
0
      proto_tree_add_item(tree, hf_extrememesh_ps_prer_vlan_id, tvb, offset, 2, ENC_BIG_ENDIAN);
1274
0
      offset+=2;
1275
0
      break;
1276
0
    default:
1277
      /*proto_tree_add_text(tree, tvb, offset, -1, */
1278
      /*"Unsupported status reply option (%d)", option);*/
1279
0
      return;
1280
0
    }
1281
0
  }
1282
0
}
1283
1284
static void dissect_extrememesh_ps_areq(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
1285
4
{
1286
4
  uint32_t offset = 0;
1287
4
  uint32_t option = 0;
1288
1289
  /*if((pinfo != NULL) && check_col(pinfo->cinfo,COL_INFO))*/
1290
4
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Authorization Request");
1291
4
  proto_tree_add_item(tree, proto_extrememesh_ps_areq, tvb, offset, -1, ENC_NA);
1292
4
  proto_tree_add_item(tree, hf_extrememesh_ps_areq_version, tvb, offset, 1, ENC_BIG_ENDIAN);
1293
4
  offset++;
1294
4
  proto_tree_add_item(tree, hf_extrememesh_ps_areq_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1295
4
  offset++;
1296
4
  proto_tree_add_item(tree, hf_extrememesh_ps_areq_mpr_addr, tvb, offset, 6, ENC_NA);
1297
4
  offset+=6;
1298
4
  proto_tree_add_item(tree, hf_extrememesh_ps_areq_orig_addr, tvb, offset, 6, ENC_NA);
1299
4
  offset+=6;
1300
4
  proto_tree_add_item(tree, hf_extrememesh_ps_areq_opt_tot_len, tvb, offset, 2, ENC_BIG_ENDIAN);
1301
4
  offset+=2;
1302
47
  while(tvb_captured_length(tvb) > offset)
1303
47
  {
1304
47
    proto_tree_add_item_ret_uint(tree, hf_extrememesh_ps_areq_option, tvb, offset, 1, ENC_BIG_ENDIAN, &option);
1305
47
    offset++;
1306
47
    if(option == 0) continue; // Option 0 is a single padding byte, no length byte
1307
5
    proto_tree_add_item(tree, hf_extrememesh_ps_areq_option_len, tvb, offset, 1, ENC_BIG_ENDIAN);
1308
5
    offset++;
1309
5
    switch(option)
1310
5
    {
1311
1
    case 2:
1312
1
      proto_tree_add_item(tree, hf_extrememesh_ps_areq_old_mpr, tvb, offset, 6, ENC_NA);
1313
1
      offset+=6;
1314
1
      break;
1315
0
    case 3:
1316
0
      proto_tree_add_item(tree, hf_extrememesh_ps_areq_proxies, tvb, offset, 1, ENC_BIG_ENDIAN);
1317
0
      offset++;
1318
0
      break;
1319
4
    default:
1320
4
      return;
1321
5
    }
1322
5
  }
1323
4
}
1324
1325
static int dissect_extrememesh_ps(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
1326
16
{
1327
16
  int frame_type_offset = 1;
1328
16
  int frame_type = MESH_PS_FRAME_INVALID;
1329
1330
16
  frame_type = tvb_get_uint8(tvb, frame_type_offset);
1331
16
  switch(frame_type)
1332
16
  {
1333
4
  case MESH_PS_FRAME_AREQ:
1334
4
    dissect_extrememesh_ps_areq(tvb, pinfo, tree);
1335
4
    break;
1336
0
  case MESH_PS_FRAME_AREP:
1337
0
    dissect_extrememesh_ps_arep(tvb, pinfo, tree);
1338
0
    break;
1339
7
  case MESH_PS_FRAME_BREQ:
1340
7
    dissect_extrememesh_ps_breq(tvb, pinfo, tree);
1341
7
    break;
1342
0
  case MESH_PS_FRAME_BREP:
1343
0
    dissect_extrememesh_ps_brep(tvb, pinfo, tree);
1344
0
    break;
1345
0
  case MESH_PS_FRAME_BANN:
1346
0
    dissect_extrememesh_ps_bann(tvb, pinfo, tree);
1347
0
    break;
1348
0
  case MESH_PS_FRAME_BRED:
1349
0
    dissect_extrememesh_ps_bred(tvb, pinfo, tree);
1350
0
    break;
1351
0
  case MESH_PS_FRAME_SREQ:
1352
0
    dissect_extrememesh_ps_sreq(tvb, pinfo, tree);
1353
0
    break;
1354
1
  case MESH_PS_FRAME_SREP:
1355
1
    dissect_extrememesh_ps_srep(tvb, pinfo, tree);
1356
1
    break;
1357
0
  case MESH_PS_FRAME_PREQ:
1358
0
    dissect_extrememesh_ps_preq(tvb, pinfo, tree);
1359
0
    break;
1360
0
  case MESH_PS_FRAME_PREP:
1361
0
    dissect_extrememesh_ps_prep(tvb, pinfo, tree);
1362
0
    break;
1363
1
  case MESH_PS_FRAME_PERR:
1364
1
    dissect_extrememesh_ps_perr(tvb, pinfo, tree);
1365
1
    break;
1366
0
  case MESH_PS_FRAME_PRST:
1367
0
    dissect_extrememesh_ps_prst(tvb, pinfo, tree);
1368
0
    break;
1369
1
  case MESH_PS_FRAME_PREM:
1370
1
    dissect_extrememesh_ps_prem(tvb, pinfo, tree);
1371
1
    break;
1372
0
  case MESH_PS_FRAME_TRACE:
1373
0
    dissect_extrememesh_ps_trace(tvb, pinfo, tree);
1374
0
    break;
1375
0
  case MESH_PS_FRAME_PRER:
1376
0
    dissect_extrememesh_ps_prer(tvb, pinfo, tree);
1377
0
    break;
1378
2
  default:
1379
    /*proto_tree_add_text(tree, tvb, 0, -1, */
1380
    /*"Undefined path selection frame type (%d)", frame_type);*/
1381
2
    break;
1382
16
  }
1383
14
  return MESH_NEXT_PROTOCOL_INVALID;
1384
16
}
1385
1386
static int dissect_extrememesh_eth_noaddr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
1387
7
{
1388
7
  tvbuff_t *nextTvb;
1389
7
  unsigned char *ethBuffer;
1390
7
  int bufferLen;
1391
  //These are encapsulated ethernet frames that have had their
1392
  //src and dest stripped off
1393
1394
  //Copy in the src/dst
1395
7
  if (pinfo->src.data && pinfo->dst.data) {
1396
    //Get the length of the current buffer
1397
1
    unsigned tvbLen = tvb_captured_length(tvb);
1398
    //Add space for the src/dst
1399
1
    bufferLen = tvbLen + pinfo->src.len + pinfo->dst.len;
1400
    //Allocate a new ethernet buffer
1401
1
    ethBuffer = (unsigned char*)wmem_alloc(pinfo->pool, bufferLen);
1402
1403
1
    memcpy(ethBuffer, pinfo->dst.data, pinfo->dst.len);
1404
1
    memcpy(ethBuffer + pinfo->dst.len, pinfo->src.data, pinfo->src.len);
1405
1406
    //Copy in the rest of the packet
1407
1
    tvb_memcpy(tvb, ethBuffer, pinfo->src.len + pinfo->dst.len, tvbLen);
1408
1
    nextTvb = tvb_new_real_data(ethBuffer, bufferLen, bufferLen);
1409
1
    tvb_set_child_real_data_tvbuff(tvb, nextTvb);
1410
1
    add_new_data_source(pinfo, nextTvb, "Encapsulated Ethernet, no addr");
1411
1412
1
    if (eth_withoutfcs_handle)
1413
0
    {
1414
0
      call_dissector(eth_withoutfcs_handle, nextTvb, pinfo, tree);
1415
0
    }
1416
1
  }
1417
1418
  //This is a terminal type
1419
7
  return MESH_NEXT_PROTOCOL_INVALID;
1420
7
}
1421
1422
static int dissect_extrememesh_l2upd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
1423
0
{
1424
0
  unsigned offset = 0;
1425
1426
0
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh L2 Update");
1427
0
  proto_tree_add_item(tree, proto_extrememesh_l2upd, tvb, offset, -1, ENC_NA);
1428
0
  proto_tree_add_item(tree, hf_extrememesh_l2upd_proxy_owner, tvb, offset, 6, ENC_NA);
1429
0
  offset+=6;
1430
0
  proto_tree_add_item(tree, hf_extrememesh_l2upd_ballast, tvb, offset, tvb_captured_length(tvb)-6, ENC_NA);
1431
1432
0
  return MESH_NEXT_PROTOCOL_INVALID;
1433
0
}
1434
1435
static int dissect_extrememesh_probe(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
1436
0
{
1437
0
  unsigned offset = 0;
1438
0
  uint16_t ballast_len;
1439
1440
0
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Probe Message");
1441
0
  ballast_len = tvb_get_ntohs(tvb, 10);
1442
0
  proto_tree_add_item(tree, proto_extrememesh_probe, tvb, offset, 12+ballast_len, ENC_NA);
1443
0
  proto_tree_add_item(tree, hf_extrememesh_probe_version, tvb, offset, 1, ENC_BIG_ENDIAN);
1444
0
  offset++;
1445
0
  proto_tree_add_item(tree, hf_extrememesh_probe_op_code, tvb, offset, 1, ENC_BIG_ENDIAN);
1446
0
  offset++;
1447
0
  proto_tree_add_item(tree, hf_extrememesh_probe_flags, tvb, offset, 1, ENC_BIG_ENDIAN);
1448
0
  proto_tree_add_item(tree, hf_extrememesh_probe_flags_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
1449
0
  proto_tree_add_item(tree, hf_extrememesh_probe_flags_reply, tvb, offset, 1, ENC_BIG_ENDIAN);
1450
0
  offset++;
1451
0
  proto_tree_add_item(tree, hf_extrememesh_probe_priority, tvb, offset, 1, ENC_BIG_ENDIAN);
1452
0
  offset++;
1453
0
  proto_tree_add_item(tree, hf_extrememesh_probe_job_id, tvb, offset, 2, ENC_BIG_ENDIAN);
1454
0
  offset+=2;
1455
0
  proto_tree_add_item(tree, hf_extrememesh_probe_sequence, tvb, offset, 4, ENC_BIG_ENDIAN);
1456
0
  offset+=4;
1457
0
  proto_tree_add_item(tree, hf_extrememesh_probe_ballast_len, tvb, offset, 2, ENC_BIG_ENDIAN);
1458
0
  offset+=2;
1459
0
  proto_tree_add_item(tree, hf_extrememesh_probe_ballast, tvb, offset, ballast_len, ENC_NA);
1460
1461
0
  return MESH_NEXT_PROTOCOL_INVALID;
1462
0
}
1463
1464
// NOLINTNEXTLINE(misc-no-recursion)
1465
static int dissect_extrememesh_mch(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
1466
28
{
1467
28
  proto_tree *meshTree = tree;
1468
28
  unsigned offset = 0;
1469
28
  int next_proto;
1470
28
  tvbuff_t *nextTvb;
1471
1472
28
  proto_tree_add_item(meshTree, proto_extrememesh_mch, tvb, offset, -1, ENC_NA);
1473
28
  proto_tree_add_item(meshTree, hf_extrememesh_mch_version, tvb, offset, 1, ENC_BIG_ENDIAN);
1474
28
  offset++;
1475
28
  next_proto = tvb_get_uint8(tvb, offset);
1476
28
  proto_tree_add_item(meshTree, hf_extrememesh_mch_next_proto, tvb, offset, 1, ENC_BIG_ENDIAN);
1477
28
  offset++;
1478
28
  proto_tree_add_item(meshTree, hf_extrememesh_mch_lq, tvb, offset, 1, ENC_BIG_ENDIAN);
1479
28
  offset++;
1480
28
  proto_tree_add_item(meshTree, hf_extrememesh_mch_htl, tvb, offset, 1, ENC_BIG_ENDIAN);
1481
28
  offset++;
1482
28
  proto_tree_add_item(meshTree, hf_extrememesh_mch_priority, tvb, offset, 1, ENC_BIG_ENDIAN);
1483
28
  offset++;
1484
28
  proto_tree_add_item(meshTree, hf_extrememesh_mch_usr_pri_flags, tvb, offset, 1, ENC_BIG_ENDIAN);
1485
28
  proto_tree_add_item(meshTree, hf_extrememesh_mch_usr_pri_flags_user_priority, tvb, offset, 1, ENC_BIG_ENDIAN);
1486
28
  proto_tree_add_item(meshTree, hf_extrememesh_mch_usr_pri_flags_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
1487
28
  proto_tree_add_item(meshTree, hf_extrememesh_mch_usr_pri_flags_from_wan, tvb, offset, 1, ENC_BIG_ENDIAN);
1488
28
  proto_tree_add_item(meshTree, hf_extrememesh_mch_usr_pri_flags_to_wan, tvb, offset, 1, ENC_BIG_ENDIAN);
1489
28
  proto_tree_add_item(meshTree, hf_extrememesh_mch_usr_pri_flags_forward, tvb, offset, 1, ENC_BIG_ENDIAN);
1490
28
  offset++;
1491
28
  proto_tree_add_item(meshTree, hf_extrememesh_mch_sequence, tvb, offset, 2, ENC_BIG_ENDIAN);
1492
28
  offset+=2;
1493
28
  proto_tree_add_item(meshTree, hf_extrememesh_mch_dest, tvb, offset, 6, ENC_NA);
1494
28
  offset+=6;
1495
28
  proto_tree_add_item(meshTree, hf_extrememesh_mch_src, tvb, offset, 6, ENC_NA);
1496
28
  offset+=6;
1497
1498
28
  nextTvb = tvb_new_subset_remaining(tvb, offset);
1499
1500
53
  while(next_proto != (int)MESH_NEXT_PROTOCOL_INVALID)
1501
27
  {
1502
27
    switch(next_proto)
1503
27
    {
1504
0
    case MESH_NEXT_PROTOCOL_NULL: // Obsolete
1505
1
    case MESH_NEXT_PROTOCOL_TEST: // Multi-service Enterprise Access (MEA)
1506
                    // Platform only
1507
1
    case MESH_NEXT_PROTOCOL_FRAGMENT: // MEA only
1508
1
    case MESH_NEXT_PROTOCOL_LOCATION: // MEA only
1509
1
    case MESH_NEXT_PROTOCOL_INVALID:
1510
1
      next_proto = MESH_NEXT_PROTOCOL_INVALID;
1511
1
      break;
1512
1
    case MESH_NEXT_PROTOCOL_MESH:
1513
      // Should never encounter this inside of a MESH packet
1514
1
      next_proto = MESH_NEXT_PROTOCOL_INVALID;
1515
1
      break;
1516
7
    case MESH_NEXT_PROTOCOL_MCH:
1517
      // We recurse here, but we'll run out of packet before we run out of stack.
1518
7
      next_proto = dissect_extrememesh_mch(nextTvb, pinfo, meshTree);
1519
7
      break;
1520
1
    case MESH_NEXT_PROTOCOL_ENCAPSULATED_ETH:
1521
1
      if (eth_withoutfcs_handle)
1522
1
      {
1523
1
        call_dissector(eth_withoutfcs_handle, nextTvb, pinfo, meshTree);
1524
1
      }
1525
1
      next_proto = MESH_NEXT_PROTOCOL_INVALID;
1526
1
      break;
1527
14
    case MESH_NEXT_PROTOCOL_PS:
1528
14
      next_proto = dissect_extrememesh_ps(nextTvb, pinfo, meshTree);
1529
14
      break;
1530
0
    case MESH_NEXT_PROTOCOL_HELLO:
1531
0
    case MESH_NEXT_PROTOCOL_SECURITY: // MEA only
1532
0
    case MESH_NEXT_PROTOCOL_SECURED_PAYLOAD: // MEA only
1533
1
    case MESH_NEXT_PROTOCOL_CFPU: // Quattro only
1534
2
    case MESH_NEXT_PROTOCOL_EAPOM:
1535
3
    case MESH_NEXT_PROTOCOL_ENCAPSULATED_ETH_NO_ADDR:
1536
3
      next_proto = dissect_extrememesh_eth_noaddr(nextTvb, pinfo, meshTree);
1537
3
      break;
1538
0
    case MESH_NEXT_PROTOCOL_L2_UPDATE:
1539
0
      next_proto = dissect_extrememesh_l2upd(nextTvb, pinfo, meshTree);
1540
0
      break;
1541
0
    case MESH_NEXT_PROTOCOL_PROBE_MESSAGE:
1542
0
      next_proto = dissect_extrememesh_probe(nextTvb, pinfo, meshTree);
1543
0
      break;
1544
0
    default:
1545
      /*proto_tree_add_text(tree, tvb, offset, -1, */
1546
      /*"dissect_extrememesh_mch: Unsupported protocol (%d)", next_proto);*/
1547
0
      next_proto = MESH_NEXT_PROTOCOL_INVALID;
1548
0
      break;
1549
27
    }
1550
27
  }
1551
26
  return next_proto;
1552
28
}
1553
1554
static int dissect_extrememesh(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
1555
29
{
1556
29
  unsigned offset = 0;
1557
  /*uint8_t packet_type = 0;*/
1558
29
  tvbuff_t *next_tvb = NULL;
1559
1560
29
  col_set_str(pinfo->cinfo, COL_PROTOCOL, "MCX");
1561
29
  proto_item *ti = NULL;
1562
29
  proto_tree *meshTree = NULL;
1563
29
  int next_proto = MESH_NEXT_PROTOCOL_INVALID;
1564
1565
29
  ti = proto_tree_add_item(tree, proto_extrememesh, tvb, offset, -1, ENC_NA);
1566
29
  meshTree = proto_item_add_subtree(ti, ett_extrememesh);
1567
29
  proto_tree_add_item(meshTree, hf_extrememesh_version, tvb, offset, 1, ENC_BIG_ENDIAN);
1568
29
  offset++;
1569
29
  next_proto = tvb_get_uint8(tvb, offset);
1570
29
  proto_tree_add_item(meshTree, hf_extrememesh_nextproto, tvb, offset, 1, ENC_BIG_ENDIAN);
1571
29
  offset++;
1572
1573
29
  next_tvb = tvb_new_subset_remaining(tvb, offset);
1574
1575
54
  while(next_proto != (int)MESH_NEXT_PROTOCOL_INVALID)
1576
29
  {
1577
29
    switch(next_proto)
1578
29
    {
1579
0
      case MESH_NEXT_PROTOCOL_NULL: // Obsolete
1580
0
      case MESH_NEXT_PROTOCOL_TEST: // Multi-service Enterprise Access
1581
                    // (MEA) Platform only
1582
0
      case MESH_NEXT_PROTOCOL_FRAGMENT: // MEA only
1583
1
      case MESH_NEXT_PROTOCOL_LOCATION: // MEA only
1584
1
      case MESH_NEXT_PROTOCOL_INVALID:
1585
1
        next_proto = MESH_NEXT_PROTOCOL_INVALID;
1586
1
        break;
1587
0
      case MESH_NEXT_PROTOCOL_MESH:
1588
        // Should never encounter this inside of a MESH packet
1589
0
        next_proto = MESH_NEXT_PROTOCOL_INVALID;
1590
0
        break;
1591
21
      case MESH_NEXT_PROTOCOL_MCH:
1592
21
        next_proto = dissect_extrememesh_mch(next_tvb, pinfo, meshTree);
1593
21
        break;
1594
0
      case MESH_NEXT_PROTOCOL_ENCAPSULATED_ETH:
1595
0
        if (eth_withoutfcs_handle)
1596
0
        {
1597
0
          call_dissector(eth_withoutfcs_handle, next_tvb, pinfo, meshTree);
1598
0
        }
1599
0
        next_proto = MESH_NEXT_PROTOCOL_INVALID;
1600
0
        break;
1601
2
      case MESH_NEXT_PROTOCOL_PS:
1602
2
        next_proto = dissect_extrememesh_ps(next_tvb, pinfo, meshTree);
1603
2
        break;
1604
2
      case MESH_NEXT_PROTOCOL_HELLO:
1605
2
      case MESH_NEXT_PROTOCOL_SECURITY: // MEA only
1606
3
      case MESH_NEXT_PROTOCOL_SECURED_PAYLOAD: // MEA only
1607
4
      case MESH_NEXT_PROTOCOL_CFPU: // Quattro only
1608
4
      case MESH_NEXT_PROTOCOL_EAPOM:
1609
4
      case MESH_NEXT_PROTOCOL_ENCAPSULATED_ETH_NO_ADDR:
1610
4
        next_proto = dissect_extrememesh_eth_noaddr(next_tvb, pinfo, meshTree);
1611
4
        break;
1612
0
      case MESH_NEXT_PROTOCOL_L2_UPDATE:
1613
0
        next_proto = dissect_extrememesh_l2upd(next_tvb, pinfo, meshTree);
1614
0
        break;
1615
0
      case MESH_NEXT_PROTOCOL_PROBE_MESSAGE:
1616
0
        next_proto = dissect_extrememesh_probe(next_tvb, pinfo, meshTree);
1617
0
        break;
1618
1
      default:
1619
1
        next_proto = MESH_NEXT_PROTOCOL_INVALID;
1620
1
        break;
1621
29
      }
1622
29
    }
1623
25
    return 0;
1624
29
}
1625
1626
void proto_register_extrememesh(void)
1627
14
{
1628
  /*register the fields for the various structs*/
1629
  /* extrememesh mesh */
1630
14
  static hf_register_info hf_extrememesh[] = {
1631
14
  { &hf_extrememesh_version, {
1632
14
    "Version", "extrememesh.version", FT_UINT8, BASE_HEX_DEC,
1633
14
    NULL, 0x0, NULL, HFILL }},
1634
14
  { &hf_extrememesh_nextproto, {
1635
14
    "Next protocol", "extrememesh.nextproto", FT_UINT8, BASE_DEC,
1636
14
    VALS(mot_mesh_packet_types), 0x0, NULL, HFILL }}
1637
14
  };
1638
1639
  /* extrememesh mesh control header */
1640
14
  static hf_register_info hf_extrememesh_mch[] = {
1641
14
  { &hf_extrememesh_mch_version, {
1642
14
    "Version", "extrememesh.mch.version", FT_UINT8, BASE_HEX_DEC,
1643
14
    NULL, 0x0, NULL, HFILL }},
1644
14
  { &hf_extrememesh_mch_next_proto, {
1645
14
    "Next protocol", "extrememesh.mch.nextproto", FT_UINT8, BASE_DEC,
1646
14
    VALS(mot_mesh_packet_types), 0x0, NULL, HFILL }},
1647
14
  { &hf_extrememesh_mch_lq, {
1648
14
    "Link Quality Metric", "extrememesh.mch.lq", FT_UINT8, BASE_HEX_DEC,
1649
14
    NULL, 0x0, NULL, HFILL }},
1650
14
  { &hf_extrememesh_mch_htl, {
1651
14
    "Hop To Live counter", "extrememesh.mch.htl", FT_UINT8, BASE_HEX_DEC,
1652
14
    NULL, 0x0, NULL, HFILL }},
1653
14
  { &hf_extrememesh_mch_priority, {
1654
14
    "Packet Priority", "extrememesh.mch.priority", FT_UINT8, BASE_HEX_DEC,
1655
14
    NULL, 0x0, NULL, HFILL }},
1656
14
  { &hf_extrememesh_mch_usr_pri_flags, {
1657
14
    "Priority/Flags", "extrememesh.mch.flags", FT_UINT8, BASE_HEX,
1658
14
    NULL, 0x0, NULL, HFILL }},
1659
14
  { &hf_extrememesh_mch_usr_pri_flags_user_priority, {
1660
14
    "User Priority", "extrememesh.mch.flags.user_priority", FT_UINT8, BASE_DEC,
1661
14
    NULL, 0xF0, NULL, HFILL }},
1662
14
  { &hf_extrememesh_mch_usr_pri_flags_reserved, {
1663
14
    "Reserved", "extrememesh.mch.flags.reserved", FT_UINT8, BASE_DEC,
1664
14
    NULL, 0x08, NULL, HFILL }},
1665
14
  { &hf_extrememesh_mch_usr_pri_flags_from_wan, {
1666
14
    "From WAN", "extrememesh.mch.flags.from_wan", FT_UINT8, BASE_DEC,
1667
14
    NULL, 0x04, NULL, HFILL }},
1668
14
  { &hf_extrememesh_mch_usr_pri_flags_to_wan, {
1669
14
    "To WAN", "extrememesh.mch.flags.to_wan", FT_UINT8, BASE_DEC,
1670
14
    NULL, 0x02, NULL, HFILL }},
1671
14
  { &hf_extrememesh_mch_usr_pri_flags_forward, {
1672
14
    "Forward Flag", "extrememesh.mch.flags.forward", FT_UINT8, BASE_DEC,
1673
14
    NULL, 0x01, NULL, HFILL }},
1674
14
  { &hf_extrememesh_mch_sequence, {
1675
14
    "Sequence", "extrememesh.mch.sequence", FT_UINT16, BASE_HEX_DEC,
1676
14
    NULL, 0x0, NULL, HFILL }},
1677
14
  { &hf_extrememesh_mch_dest, {
1678
14
    "Dst", "extrememesh.mch.dst", FT_ETHER, BASE_NONE,
1679
14
    NULL, 0x0, NULL, HFILL }},
1680
14
  { &hf_extrememesh_mch_src, {
1681
14
    "Src", "extrememesh.mch.src", FT_ETHER, BASE_NONE,
1682
14
    NULL, 0x0, NULL, HFILL }}
1683
14
  };
1684
1685
#if 0
1686
  /* extrememesh hello */
1687
  static hf_register_info hf_extrememesh_hello[] = {
1688
  { &hf_extrememesh_hello_services, {
1689
    "Services", "extrememesh.hello.services", FT_UINT32, BASE_DEC,
1690
    NULL, 0xE0000000, NULL, HFILL }},
1691
  { &hf_extrememesh_hello_HTR, {
1692
    "Hops to root", "extrememesh.hello.hr", FT_UINT32, BASE_DEC,
1693
    NULL, 0x10000000, "Drop", HFILL }},
1694
  { &hf_extrememesh_hello_MTR, {
1695
    "Metric to root", "extrememesh.hello.mtr", FT_UINT32, BASE_DEC,
1696
    NULL, 0xE0000000, NULL, HFILL }},
1697
  { &hf_extrememesh_hello_root_id, {
1698
    "Root", "extrememesh.hello.rootid", FT_UINT32, BASE_DEC,
1699
    NULL, 0x10000000, "Drop", HFILL }},
1700
  { &hf_extrememesh_hello_next_hop_id, {
1701
    "Next Hop", "extrememesh.hello.nhid", FT_UINT32, BASE_DEC,
1702
    NULL, 0xE0000000, NULL, HFILL }}
1703
  };
1704
1705
  /* extrememesh security */
1706
  static hf_register_info hf_extrememesh_security[] = {
1707
  { &hf_extrememesh_security_version, {
1708
    "Version", "extrememesh.security.version", FT_UINT32, BASE_DEC,
1709
    NULL, 0xE0000000, NULL, HFILL }},
1710
  { &hf_extrememesh_security_nextproto, {
1711
    "Next proto", "extrememesh.security.nextproto", FT_UINT32, BASE_DEC,
1712
    NULL, 0x10000000, "Drop", HFILL }},
1713
  { &hf_extrememesh_security_flags, {
1714
    "Flags", "extrememesh.security.flags", FT_UINT32, BASE_DEC,
1715
    NULL, 0xE0000000, NULL, HFILL }},
1716
  { &hf_extrememesh_security_packet_num, {
1717
    "Packet Number", "extrememesh.security.pktnum", FT_UINT32, BASE_DEC,
1718
    NULL, 0x10000000, "Drop", HFILL }},
1719
  { &hf_extrememesh_security_mic, {
1720
    "MIC", "extrememesh.security.mic", FT_UINT32, BASE_DEC,
1721
    NULL, 0xE0000000, NULL, HFILL }}
1722
  };
1723
1724
  /* extrememesh contention free period (CFP) update */
1725
  static hf_register_info hf_extrememesh_cfpu[] = {
1726
  { &hf_extrememesh_cfpu_version, {
1727
    "Version", "extrememesh.cfpu.version", FT_UINT32, BASE_DEC,
1728
    NULL, 0xE0000000, NULL, HFILL }},
1729
  { &hf_extrememesh_cfpu_window, {
1730
    "Window", "extrememesh.cfpu.window", FT_UINT32, BASE_DEC,
1731
    NULL, 0x10000000, "Drop", HFILL }},
1732
  { &hf_extrememesh_cfpu_cycle, {
1733
    "Cycle", "extrememesh.cfpu.cycle", FT_UINT32, BASE_DEC,
1734
    NULL, 0xE0000000, NULL, HFILL }}
1735
  };
1736
1737
  /* extrememesh EAP over mesh */
1738
  static hf_register_info hf_extrememesh_eapom[] = {
1739
  { &hf_extrememesh_eapom_version, {
1740
    "Services", "extrememesh.hello.services", FT_UINT32, BASE_DEC,
1741
    NULL, 0xE0000000, NULL, HFILL }},
1742
  { &hf_extrememesh_eapom_header_type, {
1743
    "Hops to root", "extrememesh.hello.hr", FT_UINT32, BASE_DEC,
1744
    NULL, 0x10000000, "Drop", HFILL }},
1745
  { &hf_extrememesh_eapom_supplicant_addr, {
1746
    "Metric to root", "extrememesh.hello.mtr", FT_UINT32, BASE_DEC,
1747
    NULL, 0xE0000000, NULL, HFILL }},
1748
  { &hf_extrememesh_eapom_meshid_len, {
1749
    "Root", "extrememesh.hello.rootid", FT_UINT32, BASE_DEC,
1750
    NULL, 0x10000000, "Drop", HFILL }},
1751
  { &hf_extrememesh_eapom_meshid, {
1752
    "Next Hop", "extrememesh.hello.nhid", FT_UINT32, BASE_DEC,
1753
    NULL, 0xE0000000, NULL, HFILL }},
1754
  { &hf_extrememesh_eapom_body_len, {
1755
    "Next Hop", "extrememesh.hello.nhid", FT_UINT32, BASE_DEC,
1756
    NULL, 0xE0000000, NULL, HFILL }}
1757
  };
1758
#endif
1759
1760
  /* extrememesh mesh path selection authorization request */
1761
14
  static hf_register_info hf_extrememesh_ps_areq[] = {
1762
14
  { &hf_extrememesh_ps_areq_version, {
1763
14
    "Version", "extrememesh.ps.areq.version", FT_UINT8, BASE_HEX_DEC,
1764
14
    NULL, 0x0, NULL, HFILL }},
1765
14
  { &hf_extrememesh_ps_areq_frame_type, {
1766
14
    "Frame Type", "extrememesh.ps.areq.type", FT_UINT8, BASE_HEX_DEC,
1767
14
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
1768
14
  { &hf_extrememesh_ps_areq_mpr_addr, {
1769
14
    "MPR Addr", "extrememesh.ps.areq.mpr_addr", FT_ETHER, BASE_NONE,
1770
14
    NULL, 0x0, NULL, HFILL }},
1771
14
  { &hf_extrememesh_ps_areq_orig_addr, {
1772
14
    "Orig Addr", "extrememesh.ps.areq.orig_addr", FT_ETHER, BASE_NONE,
1773
14
    NULL, 0x0, NULL, HFILL }},
1774
14
  { &hf_extrememesh_ps_areq_opt_tot_len, {
1775
14
    "Options Total Length", "extrememesh.ps.areq.opt_tot_len", FT_UINT16,
1776
14
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
1777
14
  { &hf_extrememesh_ps_areq_option, {
1778
14
    "Option", "extrememesh.ps.areq.option", FT_UINT8, BASE_HEX_DEC,
1779
14
    NULL, 0x0, NULL, HFILL }},
1780
14
  { &hf_extrememesh_ps_areq_option_len, {
1781
14
    "Length", "extrememesh.ps.areq.option_len", FT_UINT8, BASE_HEX_DEC,
1782
14
    NULL, 0x0, NULL, HFILL }},
1783
14
  { &hf_extrememesh_ps_areq_old_mpr, {
1784
14
    "Old MPR Addr", "extrememesh.ps.areq.old_mpr", FT_ETHER, BASE_NONE,
1785
14
    NULL, 0x0, NULL, HFILL }},
1786
14
  { &hf_extrememesh_ps_areq_proxies, {
1787
14
    "Number of Proxies", "extrememesh.ps.areq.proxies", FT_UINT8,
1788
14
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }}
1789
14
  };
1790
1791
  /* extrememesh mesh path selection authorization reply */
1792
14
  static hf_register_info hf_extrememesh_ps_arep[] = {
1793
14
  { &hf_extrememesh_ps_arep_version, {
1794
14
    "Version", "extrememesh.ps.arep.version", FT_UINT8, BASE_HEX_DEC,
1795
14
    NULL, 0x0, NULL, HFILL }},
1796
14
  { &hf_extrememesh_ps_arep_frame_type, {
1797
14
    "Frame Type", "extrememesh.ps.arep.type", FT_UINT8, BASE_HEX_DEC,
1798
14
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
1799
14
  { &hf_extrememesh_ps_arep_mpr_addr, {
1800
14
    "MPR Addr", "extrememesh.ps.arep.mpr_addr", FT_ETHER, BASE_NONE,
1801
14
    NULL, 0x0, NULL, HFILL }},
1802
14
  { &hf_extrememesh_ps_arep_orig_addr, {
1803
14
    "Orig Addr", "extrememesh.ps.arep.orig_addr", FT_ETHER, BASE_NONE,
1804
14
    NULL, 0x0, NULL, HFILL }},
1805
14
  { &hf_extrememesh_ps_arep_opt_tot_len, {
1806
14
    "Options Total Length", "extrememesh.ps.arep.opt_tot_len", FT_UINT16,
1807
14
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
1808
14
  { &hf_extrememesh_ps_arep_option, {
1809
14
    "Option", "extrememesh.ps.arep.option", FT_UINT8, BASE_HEX_DEC,
1810
14
    NULL, 0x0, NULL, HFILL }},
1811
14
  { &hf_extrememesh_ps_arep_option_len, {
1812
14
    "Length", "extrememesh.ps.arep.option_len", FT_UINT8, BASE_HEX_DEC,
1813
14
    NULL, 0x0, NULL, HFILL }},
1814
14
  { &hf_extrememesh_ps_arep_result, {
1815
14
    "Result", "extrememesh.ps.arep.result", FT_UINT8, BASE_HEX_DEC,
1816
14
    VALS(mot_ps_auth_replies), 0x0, NULL, HFILL }},
1817
14
  { &hf_extrememesh_ps_arep_timeout, {
1818
14
    "Timeout", "extrememesh.ps.arep.timeout", FT_UINT8, BASE_HEX_DEC,
1819
14
    NULL, 0x0, NULL, HFILL }}
1820
14
  };
1821
1822
  /* extrememesh mesh path selection bind request */
1823
14
  static hf_register_info hf_extrememesh_ps_breq[] = {
1824
14
  { &hf_extrememesh_ps_breq_version, {
1825
14
    "Version", "extrememesh.ps.breq.version", FT_UINT8, BASE_HEX_DEC,
1826
14
    NULL, 0x0, NULL, HFILL }},
1827
14
  { &hf_extrememesh_ps_breq_frame_type, {
1828
14
    "Frame Type", "extrememesh.ps.breq.type", FT_UINT8, BASE_HEX_DEC,
1829
14
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
1830
14
  { &hf_extrememesh_ps_breq_mpr_addr, {
1831
14
    "MPR Addr", "extrememesh.ps.breq.mpr_addr", FT_ETHER, BASE_NONE,
1832
14
    NULL, 0x0, NULL, HFILL }},
1833
14
  { &hf_extrememesh_ps_breq_orig_addr, {
1834
14
    "Orig Addr", "extrememesh.ps.breq.orig_addr", FT_ETHER, BASE_NONE,
1835
14
    NULL, 0x0, NULL, HFILL }},
1836
14
  { &hf_extrememesh_ps_breq_opt_tot_len, {
1837
14
    "Options Total Length", "extrememesh.ps.breq.opt_tot_len", FT_UINT16,
1838
14
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
1839
14
  { &hf_extrememesh_ps_breq_option, {
1840
14
    "Option", "extrememesh.ps.breq.option", FT_UINT8, BASE_HEX_DEC,
1841
14
    NULL, 0x0, NULL, HFILL }},
1842
14
  { &hf_extrememesh_ps_breq_option_len, {
1843
14
    "Length", "extrememesh.ps.breq.option_len", FT_UINT8, BASE_HEX_DEC,
1844
14
    NULL, 0x0, NULL, HFILL }},
1845
14
  { &hf_extrememesh_ps_breq_proxy_addr, {
1846
14
    "Proxy Address", "extrememesh.ps.breq.proxy_addr", FT_ETHER, BASE_NONE,
1847
14
    NULL, 0x0, NULL, HFILL }},
1848
14
  { &hf_extrememesh_ps_breq_old_mpr, {
1849
14
    "Old MPR Addr", "extrememesh.ps.breq.old_mpr", FT_ETHER, BASE_NONE,
1850
14
    NULL, 0x0, NULL, HFILL }},
1851
14
  { &hf_extrememesh_ps_breq_orig_pri, {
1852
14
    "Orig Priority", "extrememesh.ps.breq.orig_pri", FT_UINT8, BASE_HEX_DEC,
1853
14
    NULL, 0x0, NULL, HFILL }},
1854
14
  { &hf_extrememesh_ps_breq_proxy_pri, {
1855
14
    "Proxy Priority", "extrememesh.ps.breq.proxy_pri", FT_UINT8, BASE_HEX_DEC,
1856
14
    NULL, 0x0, NULL, HFILL }},
1857
14
  { &hf_extrememesh_ps_breq_vlan_id, {
1858
14
    "VLAN ID", "extrememesh.ps.breq.vlan_id", FT_UINT16, BASE_HEX_DEC,
1859
14
    NULL, 0x0, NULL, HFILL }},
1860
14
  { &hf_extrememesh_ps_breq_proxy_vlan_id, {
1861
14
    "Proxy VLAN ID", "extrememesh.ps.breq.proxy_vlan_id", FT_UINT16,
1862
14
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
1863
14
  { &hf_extrememesh_ps_breq_seq, {
1864
14
    "Sequence", "extrememesh.ps.breq.seq", FT_UINT32, BASE_HEX_DEC,
1865
14
    NULL, 0x0, NULL, HFILL }}
1866
14
  };
1867
1868
  /* extrememesh mesh path selection bind reply */
1869
14
  static hf_register_info hf_extrememesh_ps_brep[] = {
1870
14
  { &hf_extrememesh_ps_brep_version, {
1871
14
    "Version", "extrememesh.ps.brep.version", FT_UINT8, BASE_HEX_DEC,
1872
14
    NULL, 0x0, NULL, HFILL }},
1873
14
  { &hf_extrememesh_ps_brep_frame_type, {
1874
14
    "Frame Type", "extrememesh.ps.brep.type", FT_UINT8, BASE_HEX_DEC,
1875
14
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
1876
14
  { &hf_extrememesh_ps_brep_mpr_addr, {
1877
14
    "MPR Addr", "extrememesh.ps.brep.mpr_addr", FT_ETHER, BASE_NONE,
1878
14
    NULL, 0x0, NULL, HFILL }},
1879
14
  { &hf_extrememesh_ps_brep_orig_addr, {
1880
14
    "Orig Addr", "extrememesh.ps.brep.orig_addr", FT_ETHER, BASE_NONE,
1881
14
    NULL, 0x0, NULL, HFILL }},
1882
14
  { &hf_extrememesh_ps_brep_opt_tot_len, {
1883
14
    "Options Total Length", "extrememesh.ps.brep.opt_tot_len", FT_UINT16,
1884
14
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
1885
14
  { &hf_extrememesh_ps_brep_option, {
1886
14
    "Option", "extrememesh.ps.brep.option", FT_UINT8, BASE_HEX_DEC,
1887
14
    NULL, 0x0, NULL, HFILL }},
1888
14
  { &hf_extrememesh_ps_brep_option_len, {
1889
14
    "Length", "extrememesh.ps.brep.option_len", FT_UINT8, BASE_HEX_DEC,
1890
14
    NULL, 0x0, NULL, HFILL }},
1891
14
  { &hf_extrememesh_ps_brep_seq, {
1892
14
    "Sequence", "extrememesh.ps.brep.seq", FT_UINT32, BASE_HEX_DEC,
1893
14
    NULL, 0x0, NULL, HFILL }}
1894
14
  };
1895
1896
  /* extrememesh mesh path selection bind announcement */
1897
14
  static hf_register_info hf_extrememesh_ps_bann[] = {
1898
14
  { &hf_extrememesh_ps_bann_version, {
1899
14
    "Version", "extrememesh.ps.bann.version", FT_UINT8, BASE_HEX_DEC,
1900
14
    NULL, 0x0, NULL, HFILL }},
1901
14
  { &hf_extrememesh_ps_bann_frame_type, {
1902
14
    "Frame Type", "extrememesh.ps.bann.type", FT_UINT8, BASE_HEX_DEC,
1903
14
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
1904
14
  { &hf_extrememesh_ps_bann_mpr_addr, {
1905
14
    "MPR Addr", "extrememesh.ps.bann.mpr_addr", FT_ETHER, BASE_NONE,
1906
14
    NULL, 0x0, NULL, HFILL }},
1907
14
  { &hf_extrememesh_ps_bann_orig_addr, {
1908
14
    "Orig Addr", "extrememesh.ps.bann.orig_addr", FT_ETHER, BASE_NONE,
1909
14
    NULL, 0x0, NULL, HFILL }},
1910
14
  { &hf_extrememesh_ps_bann_opt_tot_len, {
1911
14
    "Options Total Length", "extrememesh.ps.bann.opt_tot_len", FT_UINT16,
1912
14
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
1913
14
  { &hf_extrememesh_ps_bann_option, {
1914
14
    "Option", "extrememesh.ps.bann.option", FT_UINT8, BASE_HEX_DEC,
1915
14
    NULL, 0x0, NULL, HFILL }},
1916
14
  { &hf_extrememesh_ps_bann_option_len, {
1917
14
    "Length", "extrememesh.ps.bann.option_len", FT_UINT8, BASE_HEX_DEC,
1918
14
    NULL, 0x0, NULL, HFILL }},
1919
14
  { &hf_extrememesh_ps_bann_proxy_addr, {
1920
14
    "Proxy Addr", "extrememesh.ps.bann.proxy_addr", FT_ETHER, BASE_NONE,
1921
14
    NULL, 0x0, NULL, HFILL }},
1922
14
  { &hf_extrememesh_ps_bann_old_root, {
1923
14
    "Old Root", "extrememesh.ps.bann.old_root", FT_ETHER, BASE_NONE,
1924
14
    NULL, 0x0, NULL, HFILL }},
1925
14
  { &hf_extrememesh_ps_bann_vlan_id, {
1926
14
    "Old Root Addr", "extrememesh.ps.bann.vlan_id", FT_UINT16, BASE_HEX_DEC,
1927
14
    NULL, 0x0, NULL, HFILL }},
1928
14
  { &hf_extrememesh_ps_bann_seq, {
1929
14
    "Sequence", "extrememesh.ps.bann.seq", FT_UINT32, BASE_HEX_DEC,
1930
14
    NULL, 0x0, NULL, HFILL }}
1931
14
  };
1932
1933
  /* extrememesh mesh path selection bind removed */
1934
14
  static hf_register_info hf_extrememesh_ps_bred[] = {
1935
14
  { &hf_extrememesh_ps_bred_version, {
1936
14
    "Version", "extrememesh.ps.bred.version", FT_UINT8, BASE_HEX_DEC,
1937
14
    NULL, 0x0, NULL, HFILL }},
1938
14
  { &hf_extrememesh_ps_bred_frame_type, {
1939
14
    "Frame Type", "extrememesh.ps.bred.type", FT_UINT8, BASE_HEX_DEC,
1940
14
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
1941
14
  { &hf_extrememesh_ps_bred_mpr_addr, {
1942
14
    "MPR Addr", "extrememesh.ps.bred.mpr_addr", FT_ETHER, BASE_NONE,
1943
14
    NULL, 0x0, NULL, HFILL }},
1944
14
  { &hf_extrememesh_ps_bred_orig_addr, {
1945
14
    "Orig Addr", "extrememesh.ps.bred.orig_addr", FT_ETHER, BASE_NONE,
1946
14
    NULL, 0x0, NULL, HFILL }},
1947
14
  { &hf_extrememesh_ps_bred_opt_tot_len, {
1948
14
    "Options Total Length", "extrememesh.ps.bred.opt_tot_len", FT_UINT16,
1949
14
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
1950
14
  { &hf_extrememesh_ps_bred_option, {
1951
14
    "Option", "extrememesh.ps.bred.option", FT_UINT8, BASE_HEX_DEC,
1952
14
    NULL, 0x0, NULL, HFILL }},
1953
14
  { &hf_extrememesh_ps_bred_option_len, {
1954
14
    "Length", "extrememesh.ps.bred.option_len", FT_UINT8, BASE_HEX_DEC,
1955
14
    NULL, 0x0, NULL, HFILL }},
1956
14
  { &hf_extrememesh_ps_bred_seq, {
1957
14
    "Sequence", "extrememesh.ps.bred.seq", FT_UINT32, BASE_HEX_DEC,
1958
14
    NULL, 0x0, NULL, HFILL }}
1959
14
  };
1960
1961
  /* extrememesh mesh path selection status request */
1962
14
  static hf_register_info hf_extrememesh_ps_sreq[] = {
1963
14
  { &hf_extrememesh_ps_sreq_version, {
1964
14
    "Version", "extrememesh.ps.sreq.version", FT_UINT8, BASE_HEX_DEC,
1965
14
    NULL, 0x0, NULL, HFILL }},
1966
14
  { &hf_extrememesh_ps_sreq_frame_type, {
1967
14
    "Frame Type", "extrememesh.ps.sreq.type", FT_UINT8, BASE_HEX_DEC,
1968
14
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
1969
14
  { &hf_extrememesh_ps_sreq_reserved, {
1970
14
    "Reserved", "extrememesh.ps.sreq.reserved", FT_UINT16, BASE_HEX_DEC,
1971
14
    NULL, 0x0, NULL, HFILL }},
1972
14
  { &hf_extrememesh_ps_sreq_orig_addr, {
1973
14
    "Orig Addr", "extrememesh.ps.sreq.orig_addr", FT_ETHER, BASE_NONE,
1974
14
    NULL, 0x0, NULL, HFILL }},
1975
14
  { &hf_extrememesh_ps_sreq_term_addr, {
1976
14
    "Term", "extrememesh.ps.sreq.term_addr", FT_ETHER, BASE_NONE,
1977
14
    NULL, 0x0, NULL, HFILL }},
1978
14
  { &hf_extrememesh_ps_sreq_opt_tot_len, {
1979
14
    "Options Total Length", "extrememesh.ps.sreq.opt_tot_len", FT_UINT16,
1980
14
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
1981
14
  { &hf_extrememesh_ps_sreq_option, {
1982
14
    "Option", "extrememesh.ps.sreq.option", FT_UINT16, BASE_HEX_DEC,
1983
14
    NULL, 0x0, NULL, HFILL }},
1984
14
  { &hf_extrememesh_ps_sreq_option_len, {
1985
14
    "Length", "extrememesh.ps.sreq.option_len", FT_UINT16, BASE_HEX_DEC,
1986
14
    NULL, 0x0, NULL, HFILL }},
1987
14
  { &hf_extrememesh_ps_sreq_vlan_id, {
1988
14
    "VLAN ID", "extrememesh.ps.sreq.vlan_id", FT_UINT16, BASE_HEX_DEC,
1989
14
    NULL, 0x0, NULL, HFILL }}
1990
14
  };
1991
1992
  /* extrememesh mesh path selection status reply */
1993
14
  static hf_register_info hf_extrememesh_ps_srep[] = {
1994
14
  { &hf_extrememesh_ps_srep_version, {
1995
14
    "Version", "extrememesh.ps.srep.version", FT_UINT8, BASE_HEX_DEC,
1996
14
    NULL, 0x0, NULL, HFILL }},
1997
14
  { &hf_extrememesh_ps_srep_frame_type, {
1998
14
    "Frame Type", "extrememesh.ps.srep.type", FT_UINT8, BASE_HEX_DEC,
1999
14
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
2000
14
  { &hf_extrememesh_ps_srep_flags, {
2001
14
    "Flags", "extrememesh.ps.srep.flags", FT_UINT8, BASE_HEX,
2002
14
    NULL, 0x0, NULL, HFILL }},
2003
14
  { &hf_extrememesh_ps_srep_flags_reserved, {
2004
14
    "Reserved", "extrememesh.ps.srep.flags.reserved", FT_UINT8, BASE_DEC,
2005
14
    NULL, 0xFE, NULL, HFILL }},
2006
14
  { &hf_extrememesh_ps_srep_flags_status, {
2007
14
    "Status Bit", "extrememesh.ps.srep.flags.status", FT_UINT8, BASE_DEC,
2008
14
    NULL, 0x01, NULL, HFILL }},
2009
14
  { &hf_extrememesh_ps_srep_hop_count, {
2010
14
    "Hop Count", "extrememesh.ps.srep.hop_count", FT_UINT8, BASE_HEX_DEC,
2011
14
    NULL, 0x0, NULL, HFILL }},
2012
14
  { &hf_extrememesh_ps_srep_orig_addr, {
2013
14
    "Orig Addr", "extrememesh.ps.srep.orig_addr", FT_ETHER, BASE_NONE,
2014
14
    NULL, 0x0, NULL, HFILL }},
2015
14
  { &hf_extrememesh_ps_srep_dest_addr, {
2016
14
    "Dest Addr", "extrememesh.ps.srep.dest_addr", FT_ETHER, BASE_NONE,
2017
14
    NULL, 0x0, NULL, HFILL }},
2018
14
  { &hf_extrememesh_ps_srep_term_addr, {
2019
14
    "Term Addr", "extrememesh.ps.srep.term_addr", FT_ETHER, BASE_NONE,
2020
14
    NULL, 0x0, NULL, HFILL }},
2021
14
  { &hf_extrememesh_ps_srep_opt_tot_len, {
2022
14
    "Options Total Length", "extrememesh.ps.srep.opt_tot_len", FT_UINT16,
2023
14
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2024
14
  { &hf_extrememesh_ps_srep_option, {
2025
14
    "Option", "extrememesh.ps.srep.option", FT_UINT16, BASE_HEX_DEC,
2026
14
    NULL, 0x0, NULL, HFILL }},
2027
14
  { &hf_extrememesh_ps_srep_option_len, {
2028
14
    "Length", "extrememesh.ps.srep.option_len", FT_UINT16, BASE_HEX_DEC,
2029
14
    NULL, 0x0, NULL, HFILL }},
2030
14
  { &hf_extrememesh_ps_srep_vlan_id, {
2031
14
    "VLAN ID", "extrememesh.ps.srep.vlan_id", FT_UINT16, BASE_HEX_DEC,
2032
14
    NULL, 0x0, NULL, HFILL }}
2033
14
  };
2034
2035
  /* extrememesh mesh path selection path request */
2036
14
  static hf_register_info hf_extrememesh_ps_preq[] = {
2037
14
  { &hf_extrememesh_ps_preq_version, {
2038
14
    "Version", "extrememesh.ps.preq.version", FT_UINT8, BASE_HEX_DEC,
2039
14
    NULL, 0x0, NULL, HFILL }},
2040
14
  { &hf_extrememesh_ps_preq_frame_type, {
2041
14
    "Frame Type", "extrememesh.ps.preq.type", FT_UINT8, BASE_DEC,
2042
14
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
2043
14
  { &hf_extrememesh_ps_preq_flags, {
2044
14
    "Flags", "extrememesh.ps.preq.flags", FT_UINT8, BASE_HEX,
2045
14
    NULL, 0x0, NULL, HFILL }},
2046
14
  { &hf_extrememesh_ps_preq_flags_broadcast, {
2047
14
    "Broadcast", "extrememesh.ps.preq.flags.broadcast", FT_UINT8, BASE_DEC,
2048
14
    NULL, 0x80, NULL, HFILL }},
2049
14
  { &hf_extrememesh_ps_preq_flags_periodic, {
2050
14
    "Periodic", "extrememesh.ps.preq.flags.periodic", FT_UINT8, BASE_DEC,
2051
14
    NULL, 0x40, NULL, HFILL }},
2052
14
  { &hf_extrememesh_ps_preq_flags_state, {
2053
14
    "State of the source node", "extrememesh.ps.preq.flags.state", FT_UINT8,
2054
14
    BASE_DEC, NULL, 0x20, NULL, HFILL }},
2055
14
  { &hf_extrememesh_ps_preq_flags_reserved, {
2056
14
    "Reserved", "extrememesh.ps.preq.flags.reserved", FT_UINT8, BASE_DEC,
2057
14
    NULL, 0x18, NULL, HFILL }},
2058
14
  { &hf_extrememesh_ps_preq_flags_gratuitous, {
2059
14
                "Gratuitous PREP Flag", "extrememesh.ps.preq.flags.gratuitous",
2060
14
    FT_UINT8, BASE_DEC, NULL, 0x04, NULL, HFILL }},
2061
14
  { &hf_extrememesh_ps_preq_flags_destination, {
2062
14
    "Destination only flag", "extrememesh.ps.preq.flags.destination",
2063
14
    FT_UINT8, BASE_DEC, NULL, 0x02, NULL, HFILL }},
2064
14
  { &hf_extrememesh_ps_preq_flags_unknown, {
2065
14
    "Unknown sequence number", "extrememesh.ps.preq.flags.unknown", FT_UINT8,
2066
14
    BASE_DEC, NULL, 0x01, NULL, HFILL }},
2067
14
  { &hf_extrememesh_ps_preq_hop_count, {
2068
14
    "Hop Count", "extrememesh.ps.preq.hop_count", FT_UINT8, BASE_HEX_DEC,
2069
14
    NULL, 0x0, NULL, HFILL }},
2070
14
  { &hf_extrememesh_ps_preq_ttl, {
2071
14
    "TTL", "extrememesh.ps.preq.ttl", FT_UINT32, BASE_HEX_DEC,
2072
14
    NULL, 0x0, NULL, HFILL }},
2073
14
  { &hf_extrememesh_ps_preq_path_metrics, {
2074
14
    "Path Metrics", "extrememesh.ps.preq.metrics", FT_UINT16, BASE_HEX_DEC,
2075
14
    NULL, 0x0, NULL, HFILL }},
2076
14
  { &hf_extrememesh_ps_preq_services, {
2077
14
    "Services", "extrememesh.ps.preq.services", FT_UINT8, BASE_HEX,
2078
14
    NULL, 0x0, NULL, HFILL }},
2079
14
  { &hf_extrememesh_ps_preq_services_reserved, {
2080
14
    "Reserved", "extrememesh.ps.preq.services.reserved", FT_UINT8, BASE_DEC,
2081
14
    NULL, 0xC0, NULL, HFILL }},
2082
14
  { &hf_extrememesh_ps_preq_services_mobile, {
2083
14
    "Mobile", "extrememesh.ps.preq.services.mobile", FT_UINT8, BASE_DEC,
2084
14
    NULL, 0x20, NULL, HFILL }},
2085
14
  { &hf_extrememesh_ps_preq_services_path_pref, {
2086
14
    "Path Preference", "extrememesh.ps.preq.services.path_pref", FT_UINT8,
2087
14
    BASE_DEC, NULL, 0x18, NULL, HFILL }},
2088
14
  { &hf_extrememesh_ps_preq_services_geo, {
2089
14
    "Geo", "extrememesh.ps.preq.services.geo", FT_UINT8, BASE_DEC,
2090
14
    NULL, 0x04, NULL, HFILL }},
2091
14
  { &hf_extrememesh_ps_preq_services_proxy, {
2092
14
    "Proxy", "extrememesh.ps.preq.services.proxy", FT_UINT8, BASE_DEC,
2093
14
    NULL, 0x02, NULL, HFILL }},
2094
14
  { &hf_extrememesh_ps_preq_services_root, {
2095
14
    "Root", "extrememesh.ps.preq.services.root", FT_UINT8, BASE_DEC,
2096
14
    NULL, 0x01, NULL, HFILL }},
2097
14
  { &hf_extrememesh_ps_preq_reserved, {
2098
14
    "Reserved", "extrememesh.ps.preq.reserved", FT_UINT8, BASE_HEX_DEC,
2099
14
    NULL, 0x0, NULL, HFILL }},
2100
14
  { &hf_extrememesh_ps_preq_id, {
2101
14
    "PREQ ID", "extrememesh.ps.preq.id", FT_UINT32, BASE_HEX_DEC,
2102
14
    NULL, 0x0, NULL, HFILL }},
2103
14
  { &hf_extrememesh_ps_preq_term_addr, {
2104
14
    "Term Addr", "extrememesh.ps.preq.term_addr", FT_ETHER, BASE_NONE,
2105
14
    NULL, 0x0, NULL, HFILL }},
2106
14
  { &hf_extrememesh_ps_preq_dest_addr, {
2107
14
    "Dest Addr", "extrememesh.ps.preq.dest_addr", FT_ETHER, BASE_NONE,
2108
14
    NULL, 0x0, NULL, HFILL }},
2109
14
  { &hf_extrememesh_ps_preq_dest_seq, {
2110
14
    "Dest Seq", "extrememesh.ps.preq.dest_seq", FT_UINT32, BASE_HEX_DEC,
2111
14
    NULL, 0x0, NULL, HFILL }},
2112
14
  { &hf_extrememesh_ps_preq_orig_addr, {
2113
14
    "Orig Addr", "extrememesh.ps.preq.orig_addr", FT_ETHER, BASE_NONE,
2114
14
    NULL, 0x0, NULL, HFILL }},
2115
14
  { &hf_extrememesh_ps_preq_orig_seq, {
2116
14
    "Orig Seq", "extrememesh.ps.preq.orig_seq", FT_UINT32, BASE_HEX_DEC,
2117
14
    NULL, 0x0, NULL, HFILL }},
2118
14
  { &hf_extrememesh_ps_preq_opt_tot_len, {
2119
14
    "Options Total Length", "extrememesh.ps.preq.opt_tot_len", FT_UINT16,
2120
14
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2121
14
  { &hf_extrememesh_ps_preq_option, {
2122
14
    "Option", "extrememesh.ps.preq.option", FT_UINT16, BASE_HEX_DEC,
2123
14
    NULL, 0x0, NULL, HFILL }},
2124
14
  { &hf_extrememesh_ps_preq_option_len, {
2125
14
    "Length", "extrememesh.ps.preq.option_len", FT_UINT16, BASE_HEX_DEC,
2126
14
    NULL, 0x0, NULL, HFILL }},
2127
14
  { &hf_extrememesh_ps_preq_mcast_sub, {
2128
14
    "MCAST Sub", "extrememesh.ps.preq.mcast_sub", FT_ETHER, BASE_NONE,
2129
14
    NULL, 0x0, NULL, HFILL }},
2130
14
  { &hf_extrememesh_ps_preq_vlan_id, {
2131
14
    "VLAN ID", "extrememesh.ps.preq.vlan_id", FT_UINT16, BASE_HEX_DEC,
2132
14
    NULL, 0x0, NULL, HFILL }},
2133
14
  { &hf_extrememesh_ps_preq_mint_id, {
2134
14
    "Mint ID", "extrememesh.ps.preq.mint_id", FT_UINT32, BASE_HEX,
2135
14
    NULL, 0x0, NULL, HFILL }}
2136
14
  };
2137
2138
  /* extrememesh mesh path selection path reply */
2139
14
  static hf_register_info hf_extrememesh_ps_prep[] = {
2140
14
  { &hf_extrememesh_ps_prep_version, {
2141
14
    "Version", "extrememesh.ps.prep.version", FT_UINT8, BASE_HEX_DEC,
2142
14
    NULL, 0x0, NULL, HFILL }},
2143
14
  { &hf_extrememesh_ps_prep_frame_type, {
2144
14
    "Frame Type", "extrememesh.ps.prep.type", FT_UINT8, BASE_DEC,
2145
14
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
2146
14
  { &hf_extrememesh_ps_prep_flags, {
2147
14
    "Flags", "extrememesh.ps.prep.flags", FT_UINT8, BASE_HEX,
2148
14
    NULL, 0x0, NULL, HFILL }},
2149
14
  { &hf_extrememesh_ps_prep_flags_reserved, {
2150
14
    "Reserved", "extrememesh.ps.prep.flags.reserved", FT_UINT8, BASE_DEC,
2151
14
    NULL, 0xF8, NULL, HFILL }},
2152
14
  { &hf_extrememesh_ps_prep_flags_new_route, {
2153
14
    "New Route", "extrememesh.ps.prep.flags.new_route", FT_UINT8, BASE_DEC,
2154
14
    NULL, 0x04, NULL, HFILL }},
2155
14
  { &hf_extrememesh_ps_prep_flags_repair, {
2156
14
    "Repair Flag", "extrememesh.ps.prep.flags.repair", FT_UINT8, BASE_DEC,
2157
14
    NULL, 0x02, NULL, HFILL }},
2158
14
  { &hf_extrememesh_ps_prep_flags_ack, {
2159
14
    "Acknowledgement Required", "extrememesh.ps.prep.flags.ack", FT_UINT8,
2160
14
    BASE_DEC, NULL, 0x01, NULL, HFILL }},
2161
14
  { &hf_extrememesh_ps_prep_hop_count, {
2162
14
    "Hop Count", "extrememesh.ps.prep.hop_count", FT_UINT8, BASE_HEX_DEC,
2163
14
    NULL, 0x0, NULL, HFILL }},
2164
14
  { &hf_extrememesh_ps_prep_path_metrics, {
2165
14
    "Path Metrics", "extrememesh.ps.prep.metrics", FT_UINT16, BASE_HEX_DEC,
2166
14
    NULL, 0x0, NULL, HFILL }},
2167
14
  { &hf_extrememesh_ps_prep_services, {
2168
14
    "Services", "extrememesh.ps.prep.services", FT_UINT8, BASE_HEX,
2169
14
    NULL, 0x0, NULL, HFILL }},
2170
14
  { &hf_extrememesh_ps_prep_services_reserved, {
2171
14
    "Reserved", "extrememesh.ps.prep.services.reserved", FT_UINT8, BASE_DEC,
2172
14
    NULL, 0xC0, NULL, HFILL }},
2173
14
  { &hf_extrememesh_ps_prep_services_mobile, {
2174
14
    "Mobile", "extrememesh.ps.prep.services.mobile", FT_UINT8, BASE_DEC,
2175
14
    NULL, 0x20, NULL, HFILL }},
2176
14
  { &hf_extrememesh_ps_prep_services_path_pref, {
2177
14
    "Path Preference", "extrememesh.ps.prep.services.path_pref", FT_UINT8,
2178
14
    BASE_DEC, NULL, 0x18, NULL, HFILL }},
2179
14
  { &hf_extrememesh_ps_prep_services_geo, {
2180
14
    "Geo", "extrememesh.ps.prep.services.geo", FT_UINT8, BASE_DEC,
2181
14
    NULL, 0x04, NULL, HFILL }},
2182
14
  { &hf_extrememesh_ps_prep_services_proxy, {
2183
14
    "Proxy", "extrememesh.ps.prep.services.proxy", FT_UINT8, BASE_DEC,
2184
14
    NULL, 0x02, NULL, HFILL }},
2185
14
  { &hf_extrememesh_ps_prep_services_root, {
2186
14
    "Root", "extrememesh.ps.prep.services.root", FT_UINT8, BASE_DEC,
2187
14
    NULL, 0x01, NULL, HFILL }},
2188
14
  { &hf_extrememesh_ps_prep_reserved, {
2189
14
    "Reserved", "extrememesh.ps.prep.reserved", FT_UINT8, BASE_HEX_DEC,
2190
14
    NULL, 0x0, NULL, HFILL }},
2191
14
  { &hf_extrememesh_ps_prep_term_addr, {
2192
14
    "Term Addr", "extrememesh.ps.prep.term_addr", FT_ETHER, BASE_NONE,
2193
14
    NULL, 0x0, NULL, HFILL }},
2194
14
  { &hf_extrememesh_ps_prep_dest_addr, {
2195
14
    "Dest Addr", "extrememesh.ps.prep.dest_addr", FT_ETHER, BASE_NONE,
2196
14
    NULL, 0x0, NULL, HFILL }},
2197
14
  { &hf_extrememesh_ps_prep_dest_seq, {
2198
14
    "Dest Seq", "extrememesh.ps.prep.dest_seq", FT_UINT32, BASE_HEX_DEC,
2199
14
    NULL, 0x0, NULL, HFILL }},
2200
14
  { &hf_extrememesh_ps_prep_orig_addr, {
2201
14
    "Orig Addr", "extrememesh.ps.prep.orig_addr", FT_ETHER, BASE_NONE,
2202
14
    NULL, 0x0, NULL, HFILL }},
2203
14
  { &hf_extrememesh_ps_prep_orig_seq, {
2204
14
    "Orig Seq", "extrememesh.ps.prep.orig_seq", FT_UINT32, BASE_HEX_DEC,
2205
14
    NULL, 0x0, NULL, HFILL }},
2206
14
  { &hf_extrememesh_ps_prep_lifetime, {
2207
14
    "Lifetime", "extrememesh.ps.prep.lifetime", FT_UINT32, BASE_HEX_DEC,
2208
14
    NULL, 0x0, NULL, HFILL }},
2209
14
  { &hf_extrememesh_ps_prep_opt_tot_len, {
2210
14
    "Options Total Length", "extrememesh.ps.prep.opt_tot_len", FT_UINT16,
2211
14
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2212
14
  { &hf_extrememesh_ps_prep_option, {
2213
14
    "Option", "extrememesh.ps.prep.option", FT_UINT16, BASE_HEX_DEC,
2214
14
    NULL, 0x0, NULL, HFILL }},
2215
14
  { &hf_extrememesh_ps_prep_option_len, {
2216
14
    "Length", "extrememesh.ps.prep.option_len", FT_UINT16, BASE_HEX_DEC,
2217
14
    NULL, 0x0, NULL, HFILL }},
2218
14
  { &hf_extrememesh_ps_prep_mcast_sub, {
2219
14
    "MCAST Sub", "extrememesh.ps.prep.mcast_sub", FT_ETHER, BASE_NONE,
2220
14
    NULL, 0x0, NULL, HFILL }},
2221
14
  { &hf_extrememesh_ps_prep_vlan_id, {
2222
14
    "VLAN ID", "extrememesh.ps.prep.vlan_id", FT_UINT16, BASE_HEX_DEC,
2223
14
    NULL, 0x0, NULL, HFILL }},
2224
14
  { &hf_extrememesh_ps_prep_mint_id, {
2225
14
    "Mint ID", "extrememesh.ps.prep.mint_id", FT_UINT32, BASE_HEX,
2226
14
    NULL, 0x0, NULL, HFILL }}
2227
14
  };
2228
2229
  /* extrememesh mesh path selection path error */
2230
14
  static hf_register_info hf_extrememesh_ps_perr[] = {
2231
14
  { &hf_extrememesh_ps_perr_version, {
2232
14
    "Version", "extrememesh.ps.perr.version", FT_UINT8, BASE_HEX_DEC,
2233
14
    NULL, 0x0, NULL, HFILL }},
2234
14
  { &hf_extrememesh_ps_perr_frame_type, {
2235
14
    "Frame Type", "extrememesh.ps.perr.type", FT_UINT8, BASE_DEC,
2236
14
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
2237
14
  { &hf_extrememesh_ps_perr_flags, {
2238
14
    "Flags", "extrememesh.ps.perr.flags", FT_UINT8, BASE_HEX,
2239
14
    NULL, 0x0, NULL, HFILL }},
2240
14
  { &hf_extrememesh_ps_perr_flags_reserved, {
2241
14
    "Reserved", "extrememesh.ps.perr.flags.reserved", FT_UINT8, BASE_DEC,
2242
14
    NULL, 0xFC, NULL, HFILL }},
2243
14
  { &hf_extrememesh_ps_perr_flags_warning, {
2244
14
    "Warning", "extrememesh.ps.perr.flags.warning", FT_UINT8, BASE_DEC,
2245
14
    NULL, 0x02, NULL, HFILL }},
2246
14
  { &hf_extrememesh_ps_perr_flags_no_delete, {
2247
14
    "No Delete", "extrememesh.ps.perr.flags.no_delete", FT_UINT8, BASE_DEC,
2248
14
    NULL, 0x01, NULL, HFILL }},
2249
14
  { &hf_extrememesh_ps_perr_dest_count, {
2250
14
    "Dest Count", "extrememesh.ps.perr.dest_count", FT_UINT8, BASE_HEX_DEC,
2251
14
    NULL, 0x0, NULL, HFILL }},
2252
14
  { &hf_extrememesh_ps_perr_unrch_dest, {
2253
14
    "Unrch Dest", "extrememesh.ps.perr.unrch_dest", FT_ETHER, BASE_NONE,
2254
14
    NULL, 0x0, NULL, HFILL }},
2255
14
  { &hf_extrememesh_ps_perr_unrch_dest_seq, {
2256
14
    "Unrch Dest Seq", "extrememesh.ps.perr.unrch_dest_seq", FT_UINT32,
2257
14
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2258
14
  };
2259
2260
  /* extrememesh mesh path selection path reset */
2261
14
  static hf_register_info hf_extrememesh_ps_prst[] = {
2262
14
  { &hf_extrememesh_ps_prst_version, {
2263
14
    "Version", "extrememesh.ps.prst.version", FT_UINT8, BASE_HEX_DEC,
2264
14
    NULL, 0x0, NULL, HFILL }},
2265
14
  { &hf_extrememesh_ps_prst_frame_type, {
2266
14
    "Frame Type", "extrememesh.ps.prst.type", FT_UINT8, BASE_HEX_DEC,
2267
14
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
2268
14
  { &hf_extrememesh_ps_prst_hops_to_live, {
2269
14
    "Hops To Live", "extrememesh.ps.prst.hops_to_live", FT_UINT8,
2270
14
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2271
14
  { &hf_extrememesh_ps_prst_reserved, {
2272
14
    "Reserved", "extrememesh.ps.prst.reserved", FT_UINT8, BASE_HEX_DEC,
2273
14
    NULL, 0x0, NULL, HFILL }},
2274
14
  { &hf_extrememesh_ps_prst_id, {
2275
14
    "PRST ID", "extrememesh.ps.prst.id", FT_UINT32, BASE_HEX_DEC,
2276
14
    NULL, 0x0, NULL, HFILL }},
2277
14
  { &hf_extrememesh_ps_prst_orig_addr, {
2278
14
    "Orig Addr", "extrememesh.ps.prst.orig_addr", FT_ETHER, BASE_NONE,
2279
14
    NULL, 0x0, NULL, HFILL }},
2280
14
  { &hf_extrememesh_ps_prst_dest_addr, {
2281
14
    "Dest Addr", "extrememesh.ps.prst.dest_addr", FT_ETHER, BASE_NONE,
2282
14
    NULL, 0x0, NULL, HFILL }},
2283
14
  };
2284
2285
  /* extrememesh mesh path selection proxy remove */
2286
14
  static hf_register_info hf_extrememesh_ps_prem[] = {
2287
14
  { &hf_extrememesh_ps_prem_version, {
2288
14
    "Version", "extrememesh.ps.prem.version", FT_UINT8, BASE_HEX_DEC,
2289
14
    NULL, 0x0, NULL, HFILL }},
2290
14
  { &hf_extrememesh_ps_prem_frame_type, {
2291
14
    "Frame Type", "extrememesh.ps.prem.type", FT_UINT8, BASE_HEX_DEC,
2292
14
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
2293
14
  { &hf_extrememesh_ps_prem_mpr_addr, {
2294
14
    "MPR Addr", "extrememesh.ps.prem.mpr_addr", FT_ETHER, BASE_NONE,
2295
14
    NULL, 0x0, NULL, HFILL }},
2296
14
  { &hf_extrememesh_ps_prem_orig_addr, {
2297
14
    "Orig Addr", "extrememesh.ps.prem.orig_addr", FT_ETHER, BASE_NONE,
2298
14
    NULL, 0x0, NULL, HFILL }},
2299
14
  { &hf_extrememesh_ps_prem_opt_tot_len, {
2300
14
    "Options Total Length", "extrememesh.ps.prem.opt_tot_len", FT_UINT16,
2301
14
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2302
14
  { &hf_extrememesh_ps_prem_option, {
2303
14
    "Option", "extrememesh.ps.prem.option", FT_UINT8,
2304
14
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2305
14
  { &hf_extrememesh_ps_prem_option_len, {
2306
14
    "Length", "extrememesh.ps.prem.option_len", FT_UINT8,
2307
14
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2308
14
  { &hf_extrememesh_ps_prem_proxy_addr, {
2309
14
    "Proxy Addr", "extrememesh.ps.prem.proxy_addr", FT_ETHER, BASE_NONE,
2310
14
    NULL, 0x0, NULL, HFILL }},
2311
14
  { &hf_extrememesh_ps_prem_proxy_vlan_id, {
2312
14
    "VLAN ID", "extrememesh.ps.prem.vlan_id", FT_UINT16, BASE_HEX_DEC,
2313
14
    NULL, 0x0, NULL, HFILL }}
2314
14
  };
2315
2316
  /* extrememesh mesh path selection trace path */
2317
14
  static hf_register_info hf_extrememesh_ps_trace[] = {
2318
14
  { &hf_extrememesh_ps_trace_version, {
2319
14
    "Version", "extrememesh.ps.trace.version", FT_UINT8, BASE_HEX_DEC,
2320
14
    NULL, 0x0, NULL, HFILL }},
2321
14
  { &hf_extrememesh_ps_trace_frame_type, {
2322
14
    "Frame Type", "extrememesh.ps.trace.type", FT_UINT8, BASE_HEX_DEC,
2323
14
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
2324
14
  { &hf_extrememesh_ps_trace_flags, {
2325
14
    "Flags", "extrememesh.ps.trace.flags", FT_UINT8, BASE_HEX,
2326
14
    NULL, 0x0, NULL, HFILL }},
2327
14
  { &hf_extrememesh_ps_trace_flags_reserved, {
2328
14
    "Reserved", "extrememesh.ps.trace.flags.reserved", FT_UINT8, BASE_DEC,
2329
14
    NULL, 0xFC, NULL, HFILL }},
2330
14
  { &hf_extrememesh_ps_trace_flags_reply, {
2331
14
    "Reply Flag", "extrememesh.ps.trace.flags.reply", FT_UINT8, BASE_DEC,
2332
14
    NULL, 0x02, NULL, HFILL }},
2333
14
  { &hf_extrememesh_ps_trace_flags_no_path, {
2334
14
    "No Path Flag", "extrememesh.ps.trace.flags.no_path", FT_UINT8, BASE_DEC,
2335
14
    NULL, 0x01, NULL, HFILL }},
2336
14
  { &hf_extrememesh_ps_trace_dest_addr, {
2337
14
    "Dest Addr", "extrememesh.ps.trace.dest_addr", FT_ETHER, BASE_NONE,
2338
14
    NULL, 0x0, NULL, HFILL }},
2339
14
  { &hf_extrememesh_ps_trace_orig_addr, {
2340
14
    "Orig Addr", "extrememesh.ps.trace.orig_addr", FT_ETHER, BASE_NONE,
2341
14
    NULL, 0x0, NULL, HFILL }},
2342
14
  { &hf_extrememesh_ps_trace_hop_count, {
2343
14
    "Hop Count", "extrememesh.ps.trace.hop_count", FT_UINT8, BASE_HEX_DEC,
2344
14
    NULL, 0x0, NULL, HFILL }},
2345
14
  { &hf_extrememesh_ps_trace_addl_path, {
2346
14
    "Addl Path", "extrememesh.ps.trace.addl_path", FT_ETHER, BASE_NONE,
2347
14
    NULL, 0x0, NULL, HFILL }},
2348
14
  };
2349
2350
  /* extrememesh mesh path selection proxy error */
2351
14
  static hf_register_info hf_extrememesh_ps_prer[] = {
2352
14
  { &hf_extrememesh_ps_prer_version, {
2353
14
    "Version", "extrememesh.ps.prer.version", FT_UINT8, BASE_HEX_DEC,
2354
14
    NULL, 0x0, NULL, HFILL }},
2355
14
  { &hf_extrememesh_ps_prer_frame_type, {
2356
14
    "Frame Type", "extrememesh.ps.prer.type", FT_UINT8, BASE_HEX_DEC,
2357
14
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
2358
14
  { &hf_extrememesh_ps_prer_dest_count, {
2359
14
    "Dest Count", "extrememesh.ps.prer.dest_count", FT_UINT8, BASE_HEX_DEC,
2360
14
    NULL, 0x0, NULL, HFILL }},
2361
14
  { &hf_extrememesh_ps_prer_reserved, {
2362
14
    "Reserved", "extrememesh.ps.prer.reserved", FT_UINT8, BASE_HEX_DEC,
2363
14
    NULL, 0x0, NULL, HFILL }},
2364
14
  { &hf_extrememesh_ps_prer_orig_addr, {
2365
14
    "Orig Addr", "extrememesh.ps.prer.orig_addr", FT_ETHER, BASE_NONE,
2366
14
    NULL, 0x0, NULL, HFILL }},
2367
14
  { &hf_extrememesh_ps_prer_dest_addr, {
2368
14
    "Dest Addr", "extrememesh.ps.prer.dest_addr", FT_ETHER, BASE_NONE,
2369
14
    NULL, 0x0, NULL, HFILL }},
2370
14
  { &hf_extrememesh_ps_prer_unrch_addr, {
2371
14
    "Unrch Proxy", "extrememesh.ps.prer.unrch_addr", FT_ETHER, BASE_NONE,
2372
14
    NULL, 0x0, NULL, HFILL }},
2373
14
  { &hf_extrememesh_ps_prer_opt_tot_len, {
2374
14
    "Options Total Length", "extrememesh.ps.prer.opt_tot_len", FT_UINT16,
2375
14
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2376
14
  { &hf_extrememesh_ps_prer_option, {
2377
14
    "Option", "extrememesh.ps.prer.option", FT_UINT16, BASE_HEX_DEC,
2378
14
    NULL, 0x0, NULL, HFILL }},
2379
14
  { &hf_extrememesh_ps_prer_option_len, {
2380
14
    "Length", "extrememesh.ps.prer.option_len", FT_UINT16, BASE_HEX_DEC,
2381
14
    NULL, 0x0, NULL, HFILL }},
2382
14
  { &hf_extrememesh_ps_prer_vlan_id, {
2383
14
    "VLAN ID", "extrememesh.ps.prer.vlan_id", FT_UINT16, BASE_HEX_DEC,
2384
14
    NULL, 0x0, NULL, HFILL }}
2385
14
  };
2386
2387
  /* extrememesh mesh L2 update */
2388
14
  static hf_register_info hf_extrememesh_l2upd[] = {
2389
14
  { &hf_extrememesh_l2upd_proxy_owner, {
2390
14
    "Proxy Owner Addr", "extrememesh.l2upd.proxy_owner", FT_ETHER,
2391
14
    BASE_NONE, NULL, 0x0, NULL, HFILL }},
2392
14
  { &hf_extrememesh_l2upd_ballast, {
2393
14
    "Ballast", "extrememesh.l2upd.ballast", FT_BYTES, BASE_NONE,
2394
14
    NULL, 0x0, NULL, HFILL }}
2395
14
  };
2396
2397
  /* extrememesh mesh probe message */
2398
14
  static hf_register_info hf_extrememesh_probe[] = {
2399
14
  { &hf_extrememesh_probe_version, {
2400
14
    "Version", "extrememesh.probe.version", FT_UINT8, BASE_HEX_DEC,
2401
14
    NULL, 0x0, NULL, HFILL }},
2402
14
  { &hf_extrememesh_probe_op_code, {
2403
14
    "Op-code", "extrememesh.probe.op_code", FT_UINT8, BASE_HEX_DEC,
2404
14
    NULL, 0x0, NULL, HFILL }},
2405
14
  { &hf_extrememesh_probe_flags, {
2406
14
    "Flags", "extrememesh.probe.flags", FT_UINT8, BASE_HEX_DEC,
2407
14
    NULL, 0x0, NULL, HFILL }},
2408
14
  { &hf_extrememesh_probe_flags_reserved, {
2409
14
    "Reserved", "extrememesh.probe.flags.reserved", FT_UINT8, BASE_DEC,
2410
14
    NULL, 0xFE, NULL, HFILL }},
2411
14
   { &hf_extrememesh_probe_flags_reply, {
2412
14
    "Reply", "extrememesh.probe.flags.reply", FT_UINT8, BASE_DEC,
2413
14
    NULL, 0x01, NULL, HFILL }},
2414
14
  { &hf_extrememesh_probe_priority, {
2415
14
    "Priority", "extrememesh.probe.priority", FT_UINT8, BASE_HEX_DEC,
2416
14
    NULL, 0x0, NULL, HFILL }},
2417
14
  { &hf_extrememesh_probe_job_id, {
2418
14
    "Job ID", "extrememesh.probe.job_id", FT_UINT16, BASE_HEX_DEC,
2419
14
    NULL, 0x0, NULL, HFILL }},
2420
14
  { &hf_extrememesh_probe_sequence, {
2421
14
    "Sequence Number", "extrememesh.probe.sequence", FT_UINT32, BASE_HEX_DEC,
2422
14
    NULL, 0x0, NULL, HFILL }},
2423
14
  { &hf_extrememesh_probe_ballast_len, {
2424
14
    "Ballast Length", "extrememesh.probe.ballast_len", FT_UINT16,
2425
14
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2426
14
  { &hf_extrememesh_probe_ballast, {
2427
14
    "Ballast", "extrememesh.probe.ballast", FT_BYTES, BASE_NONE,
2428
14
    NULL, 0x0, NULL, HFILL }}
2429
14
  };
2430
2431
14
  static int *ett[] = {
2432
14
    &ett_extrememesh,
2433
14
    &ett_extrememesh_mch,
2434
14
    &ett_extrememesh_hello,
2435
14
    &ett_extrememesh_security,
2436
14
    &ett_extrememesh_cfpu,
2437
14
    &ett_extrememesh_eapom,
2438
14
    &ett_extrememesh_ps
2439
14
  };
2440
2441
  /* registration */
2442
  /* extrememesh mesh */
2443
14
  proto_extrememesh = proto_register_protocol("Extreme Mesh", "EXTREME MESH", "extrememesh");
2444
14
  proto_register_field_array(proto_extrememesh, hf_extrememesh, array_length(hf_extrememesh));
2445
14
  proto_register_subtree_array(ett, array_length(ett));
2446
2447
14
  extrememesh_handle = register_dissector("extrememesh", dissect_extrememesh, proto_extrememesh);
2448
2449
  /* extrememesh mesh control header */
2450
14
  proto_extrememesh_mch = proto_register_protocol("Extreme Mesh Control Header", "EXTREME MCH", "extrememesh_mch");
2451
14
  proto_register_field_array(proto_extrememesh_mch, hf_extrememesh_mch, array_length(hf_extrememesh_mch));
2452
2453
2454
#if 0
2455
  /* extrememesh hello */
2456
  proto_extrememesh_hello = proto_register_protocol("Extreme Hello", "EXTREME HELLO", "extrememesh_hello");
2457
  proto_register_field_array(proto_extrememesh_hello, hf_extrememesh_hello, array_length(hf_extrememesh_hello));
2458
2459
  /* extrememesh security */
2460
  proto_extrememesh_security = proto_register_protocol("Extreme Security", "EXTREME SECURITY", "extrememesh_security");
2461
  proto_register_field_array(proto_extrememesh_security, hf_extrememesh_security, array_length(hf_extrememesh_security));
2462
2463
  /* extrememesh contention free period (CFP) update */
2464
  proto_extrememesh_cfpu = proto_register_protocol("Extreme Cfpu", "EXTREME CFPU", "extrememesh_cfpu");
2465
  proto_register_field_array(proto_extrememesh_cfpu, hf_extrememesh_cfpu, array_length(hf_extrememesh_cfpu));
2466
2467
  /* extrememesh EAP over mesh */
2468
  proto_extrememesh_eapom = proto_register_protocol("Extreme EAPOM", "EXTREME EAPOM", "extrememesh_eapom");
2469
  proto_register_field_array(proto_extrememesh_eapom, hf_extrememesh_eapom, array_length(hf_extrememesh_eapom));
2470
#endif
2471
2472
  /* extrememesh mesh L2 update */
2473
14
  proto_extrememesh_l2upd = proto_register_protocol("Extreme Mesh L2 Update", "EXTREME L2UPD", "extrememesh_l2upd");
2474
14
  proto_register_field_array(proto_extrememesh_l2upd, hf_extrememesh_l2upd, array_length(hf_extrememesh_l2upd));
2475
2476
  /* extrememesh mesh probe message */
2477
14
  proto_extrememesh_probe = proto_register_protocol("Extreme Mesh Probe Message", "EXTREME PROBE", "extrememesh_probe");
2478
14
  proto_register_field_array(proto_extrememesh_probe, hf_extrememesh_probe, array_length(hf_extrememesh_probe));
2479
2480
  /* extrememesh mesh path selection authorization request */
2481
14
  proto_extrememesh_ps_areq = proto_register_protocol("Extreme Mesh Path Selection Authorization Request", "EXTREME PS AREQ", "extrememesh_ps_areq");
2482
14
  proto_register_field_array(proto_extrememesh_ps_areq, hf_extrememesh_ps_areq, array_length(hf_extrememesh_ps_areq));
2483
2484
  /* extrememesh mesh path selection authorization reply */
2485
14
  proto_extrememesh_ps_arep = proto_register_protocol("Extreme Mesh Path Selection Authorization Reply", "EXTREME PS AREP", "extrememesh_ps_arep");
2486
14
  proto_register_field_array(proto_extrememesh_ps_arep, hf_extrememesh_ps_arep, array_length(hf_extrememesh_ps_arep));
2487
2488
  /* extrememesh mesh path selection bind request */
2489
14
  proto_extrememesh_ps_breq = proto_register_protocol("Extreme Mesh Path Selection Bind Request", "EXTREME PS BREQ", "extrememesh_ps_breq");
2490
14
  proto_register_field_array(proto_extrememesh_ps_breq, hf_extrememesh_ps_breq, array_length(hf_extrememesh_ps_breq));
2491
2492
  /* extrememesh mesh path selection bind reply */
2493
14
  proto_extrememesh_ps_brep = proto_register_protocol("Extreme Mesh Path Selection Bind Reply", "EXTREME PS BREP", "extrememesh_ps_brep");
2494
14
  proto_register_field_array(proto_extrememesh_ps_brep, hf_extrememesh_ps_brep, array_length(hf_extrememesh_ps_brep));
2495
2496
  /* extrememesh mesh path selection bind announcement */
2497
14
  proto_extrememesh_ps_bann = proto_register_protocol("Extreme Mesh Path Selection Bind Announcement", "EXTREME PS BANN", "extrememesh_ps_bann");
2498
14
  proto_register_field_array(proto_extrememesh_ps_bann, hf_extrememesh_ps_bann, array_length(hf_extrememesh_ps_bann));
2499
2500
  /* extrememesh mesh path selection bind removed */
2501
14
  proto_extrememesh_ps_bred = proto_register_protocol("Extreme Mesh Path Selection Bind Removed", "EXTREME PS BRED", "extrememesh_ps_bred");
2502
14
  proto_register_field_array(proto_extrememesh_ps_bred, hf_extrememesh_ps_bred, array_length(hf_extrememesh_ps_bred));
2503
2504
  /* extrememesh mesh path selection status request */
2505
14
  proto_extrememesh_ps_sreq = proto_register_protocol("Extreme Mesh Path Selection Status Request", "EXTREME PS SREQ", "extrememesh_ps_sreq");
2506
14
  proto_register_field_array(proto_extrememesh_ps_sreq, hf_extrememesh_ps_sreq, array_length(hf_extrememesh_ps_sreq));
2507
2508
  /* extrememesh mesh path selection status reply */
2509
14
  proto_extrememesh_ps_srep = proto_register_protocol("Extreme Mesh Path Selection Status Reply", "EXTREME PS SREP", "extrememesh_ps_srep");
2510
14
  proto_register_field_array(proto_extrememesh_ps_srep, hf_extrememesh_ps_srep, array_length(hf_extrememesh_ps_srep));
2511
2512
  /* extrememesh mesh path selection path request */
2513
14
  proto_extrememesh_ps_preq = proto_register_protocol("Extreme Mesh Path Selection Path Request", "EXTREME PS PREQ", "extrememesh_ps_preq");
2514
14
  proto_register_field_array(proto_extrememesh_ps_preq, hf_extrememesh_ps_preq, array_length(hf_extrememesh_ps_preq));
2515
2516
  /* extrememesh mesh path selection path reply */
2517
14
  proto_extrememesh_ps_prep = proto_register_protocol("Extreme Mesh Path Selection Path Reply", "EXTREME PS PREP", "extrememesh_ps_prep");
2518
14
  proto_register_field_array(proto_extrememesh_ps_prep, hf_extrememesh_ps_prep, array_length(hf_extrememesh_ps_prep));
2519
2520
  /* extrememesh mesh path selection path error */
2521
14
  proto_extrememesh_ps_perr = proto_register_protocol("Extreme Mesh Path Selection Path Error", "EXTREME PS PERR", "extrememesh_ps_perr");
2522
14
  proto_register_field_array(proto_extrememesh_ps_perr, hf_extrememesh_ps_perr, array_length(hf_extrememesh_ps_perr));
2523
2524
  /* extrememesh mesh path selection path reset */
2525
14
  proto_extrememesh_ps_prst = proto_register_protocol("Extreme Mesh Path Selection Path Reset", "EXTREME PS PRST", "extrememesh_ps_prst");
2526
14
  proto_register_field_array(proto_extrememesh_ps_prst, hf_extrememesh_ps_prst, array_length(hf_extrememesh_ps_prst));
2527
2528
  /* extrememesh mesh path selection proxy remove */
2529
14
  proto_extrememesh_ps_prem = proto_register_protocol("Extreme Mesh Path Selection Proxy Remove", "EXTREME PS PREM", "extrememesh_ps_prem");
2530
14
  proto_register_field_array(proto_extrememesh_ps_prem, hf_extrememesh_ps_prem, array_length(hf_extrememesh_ps_prem));
2531
2532
  /* extrememesh mesh path selection trace path */
2533
14
  proto_extrememesh_ps_trace = proto_register_protocol("Extreme Mesh Path Selection Trace Path", "EXTREME PS TRACE", "extrememesh_ps_trace");
2534
14
  proto_register_field_array(proto_extrememesh_ps_trace, hf_extrememesh_ps_trace, array_length(hf_extrememesh_ps_trace));
2535
2536
  /* extrememesh mesh path selection proxy error */
2537
14
  proto_extrememesh_ps_prer = proto_register_protocol("Extreme Mesh Path Selection Proxy Error", "EXTREME PS PRER", "extrememesh_ps_prer");
2538
14
  proto_register_field_array(proto_extrememesh_ps_prer, hf_extrememesh_ps_prer, array_length(hf_extrememesh_ps_prer));
2539
14
}
2540
2541
/*****************************************************************************/
2542
/*
2543
2544
Register Extreme Mesh Handoff
2545
2546
Description:
2547
2548
Initializes the dissector by creating a handle and adding it to the
2549
dissector table.
2550
2551
*/
2552
/*****************************************************************************/
2553
void proto_reg_handoff_extrememesh(void)
2554
14
{
2555
14
  eth_withoutfcs_handle = find_dissector("eth_withoutfcs");
2556
2557
14
  dissector_add_uint("ethertype", ETHERTYPE_IEEE_EXTREME_MESH, extrememesh_handle);
2558
14
}