Coverage Report

Created: 2026-08-14 06:45

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
6
{
453
6
  uint32_t offset = 0;
454
6
  uint32_t option = 0;
455
456
6
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Authorization Reply");
457
6
  proto_tree_add_item(tree, proto_extrememesh_ps_arep, tvb, offset, -1, ENC_NA);
458
6
  proto_tree_add_item(tree, hf_extrememesh_ps_arep_version, tvb, offset, 1, ENC_BIG_ENDIAN);
459
6
  offset++;
460
6
  proto_tree_add_item(tree, hf_extrememesh_ps_arep_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
461
6
  offset++;
462
6
  proto_tree_add_item(tree, hf_extrememesh_ps_arep_mpr_addr, tvb, offset, 6, ENC_NA);
463
6
  offset+=6;
464
6
  proto_tree_add_item(tree, hf_extrememesh_ps_arep_orig_addr, tvb, offset, 6, ENC_NA);
465
6
  offset+=6;
466
6
  proto_tree_add_item(tree, hf_extrememesh_ps_arep_opt_tot_len, tvb, offset, 2, ENC_BIG_ENDIAN);
467
6
  offset+=2;
468
28
  while(tvb_captured_length(tvb) > offset)
469
28
  {
470
28
    proto_tree_add_item_ret_uint(tree, hf_extrememesh_ps_arep_option, tvb, offset, 1, ENC_BIG_ENDIAN, &option);
471
28
    offset++;
472
28
    if (option == 0) continue;
473
7
    proto_tree_add_item(tree, hf_extrememesh_ps_arep_option_len, tvb, offset, 1, ENC_BIG_ENDIAN);
474
7
    offset++;
475
7
    switch(option)
476
7
    {
477
1
    case 4:
478
1
      proto_tree_add_item(tree, hf_extrememesh_ps_arep_result, tvb, offset, 1, ENC_BIG_ENDIAN);
479
1
      offset++;
480
1
      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
6
    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
6
      return;
490
7
    }
491
7
  }
492
6
}
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
22
{
507
22
  uint32_t offset = 0;
508
22
  uint32_t option = 0;
509
22
  uint8_t option_len = 0;
510
511
22
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Bind Request");
512
22
  proto_tree_add_item(tree, proto_extrememesh_ps_breq, tvb, offset, -1, ENC_NA);
513
22
  proto_tree_add_item(tree, hf_extrememesh_ps_breq_version, tvb, offset, 1, ENC_BIG_ENDIAN);
514
22
  offset++;
515
22
  proto_tree_add_item(tree, hf_extrememesh_ps_breq_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
516
22
  offset++;
517
22
  proto_tree_add_item(tree, hf_extrememesh_ps_breq_mpr_addr, tvb, offset, 6, ENC_NA);
518
22
  offset+=6;
519
22
  proto_tree_add_item(tree, hf_extrememesh_ps_breq_orig_addr, tvb, offset, 6, ENC_NA);
520
22
  offset+=6;
521
22
  proto_tree_add_item(tree, hf_extrememesh_ps_breq_opt_tot_len, tvb, offset, 2, ENC_BIG_ENDIAN);
522
22
  offset+=2;
523
477
  while(tvb_captured_length(tvb) > offset)
524
477
  {
525
477
    proto_tree_add_item_ret_uint(tree, hf_extrememesh_ps_breq_option, tvb, offset, 1, ENC_BIG_ENDIAN, &option);
526
477
    offset++;
527
477
    if (option == 0) continue;
528
52
    proto_tree_add_item_ret_uint8(tree, hf_extrememesh_ps_breq_option_len, tvb, offset, 1, ENC_BIG_ENDIAN, &option_len);
529
52
    offset++;
530
52
    switch(option)
531
52
    {
532
8
    case 1:
533
70
      while(option_len > 0)
534
64
      {
535
64
        proto_tree_add_item(tree, hf_extrememesh_ps_breq_proxy_addr, tvb, offset, 6, ENC_NA);
536
64
        option_len-=6;
537
64
        offset+=6;
538
64
        if (option_len < 6) break;
539
64
      }
540
8
      break;
541
1
    case 2:
542
1
      proto_tree_add_item(tree, hf_extrememesh_ps_breq_old_mpr, tvb, offset, 6, ENC_NA);
543
1
      offset+=6;
544
1
      break;
545
1
    case 5:
546
1
      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
21
    case 8:
552
556
      while(option_len > 0)
553
535
      {
554
535
        proto_tree_add_item(tree, hf_extrememesh_ps_breq_proxy_pri, tvb, offset, 1, ENC_BIG_ENDIAN);
555
535
        option_len--;
556
535
        offset++;
557
535
      }
558
21
      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
4
    case 12:
573
4
      proto_tree_add_item(tree, hf_extrememesh_ps_breq_seq, tvb, offset, 4, ENC_BIG_ENDIAN);
574
4
      offset+=4;
575
4
      break;
576
15
    default:
577
      /*proto_tree_add_text(tree, tvb, offset, -1, */
578
      /*"Unsupported bind request option (%d)", option);*/
579
15
      return;
580
52
    }
581
52
  }
582
22
}
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
4
{
597
4
  uint32_t offset = 0;
598
4
  uint32_t option = 0;
599
600
4
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Bind Reply");
601
4
  proto_tree_add_item(tree, proto_extrememesh_ps_brep, tvb, offset, -1, ENC_NA);
602
4
  proto_tree_add_item(tree, hf_extrememesh_ps_brep_version, tvb, offset, 1, ENC_BIG_ENDIAN);
603
4
  offset++;
604
4
  proto_tree_add_item(tree, hf_extrememesh_ps_brep_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
605
4
  offset++;
606
4
  proto_tree_add_item(tree, hf_extrememesh_ps_brep_mpr_addr, tvb, offset, 6, ENC_NA);
607
4
  offset+=6;
608
4
  proto_tree_add_item(tree, hf_extrememesh_ps_brep_orig_addr, tvb, offset, 6, ENC_NA);
609
4
  offset+=6;
610
4
  proto_tree_add_item(tree, hf_extrememesh_ps_brep_opt_tot_len, tvb, offset, 2, ENC_BIG_ENDIAN);
611
4
  offset+=2;
612
613
39
  while(tvb_captured_length(tvb) > offset)
614
39
  {
615
39
    proto_tree_add_item_ret_uint(tree, hf_extrememesh_ps_brep_option, tvb, offset, 1, ENC_BIG_ENDIAN, &option);
616
39
    offset++;
617
39
    if (option == 0) continue;
618
4
    switch(option)
619
4
    {
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
4
    default:
627
      /*proto_tree_add_text(tree, tvb, offset, -1, */
628
      /*"Unsupported bind reply option (%d)", option);*/
629
4
      return;
630
4
    }
631
4
  }
632
4
}
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
4
{
647
4
  uint32_t offset = 0;
648
4
  uint32_t option = 0;
649
4
  uint8_t option_len = 0;
650
651
4
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Bind Announcement");
652
4
  proto_tree_add_item(tree, proto_extrememesh_ps_bann, tvb, offset, -1, ENC_NA);
653
4
  proto_tree_add_item(tree, hf_extrememesh_ps_bann_version, tvb, offset, 1, ENC_BIG_ENDIAN);
654
4
  offset++;
655
4
  proto_tree_add_item(tree, hf_extrememesh_ps_bann_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
656
4
  offset++;
657
4
  proto_tree_add_item(tree, hf_extrememesh_ps_bann_mpr_addr, tvb, offset, 6, ENC_NA);
658
4
  offset+=6;
659
4
  proto_tree_add_item(tree, hf_extrememesh_ps_bann_orig_addr, tvb, offset, 6, ENC_NA);
660
4
  offset+=6;
661
4
  proto_tree_add_item(tree, hf_extrememesh_ps_bann_opt_tot_len, tvb, offset, 2, ENC_BIG_ENDIAN);
662
4
  offset+=2;
663
12
  while(tvb_captured_length(tvb) > offset)
664
12
  {
665
12
    proto_tree_add_item_ret_uint(tree, hf_extrememesh_ps_bann_option, tvb, offset, 1, ENC_BIG_ENDIAN, &option);
666
12
    offset++;
667
12
    if(option == 0) continue; // Option 0 is a single padding byte, no length byte
668
6
    option_len = tvb_get_uint8(tvb, offset);
669
6
    proto_tree_add_item(tree, hf_extrememesh_ps_bann_option_len, tvb, offset, 1, ENC_BIG_ENDIAN);
670
6
    offset++;
671
6
    switch(option)
672
6
    {
673
6
    case 1:
674
18
      while(option_len > 0)
675
12
      {
676
12
        proto_tree_add_item(tree, hf_extrememesh_ps_bann_proxy_addr, tvb, offset, 6, ENC_NA);
677
12
        option_len-=6;
678
12
        offset+=6;
679
12
        if (option_len < 6) break;
680
12
      }
681
6
      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
6
    }
699
6
  }
700
4
}
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
1
{
715
1
  uint32_t offset = 0;
716
1
  uint32_t option = 0;
717
718
1
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Bind Removed");
719
1
  proto_tree_add_item(tree, proto_extrememesh_ps_bred, tvb, offset, -1, ENC_NA);
720
1
  proto_tree_add_item(tree, hf_extrememesh_ps_bred_version, tvb, offset, 1, ENC_BIG_ENDIAN);
721
1
  offset++;
722
1
  proto_tree_add_item(tree, hf_extrememesh_ps_bred_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
723
1
  offset++;
724
1
  proto_tree_add_item(tree, hf_extrememesh_ps_bred_mpr_addr, tvb, offset, 6, ENC_NA);
725
1
  offset+=6;
726
1
  proto_tree_add_item(tree, hf_extrememesh_ps_bred_orig_addr, tvb, offset, 6, ENC_NA);
727
1
  offset+=6;
728
1
  proto_tree_add_item(tree, hf_extrememesh_ps_bred_opt_tot_len, tvb, offset, 2, ENC_BIG_ENDIAN);
729
1
  offset+=2;
730
731
1
  while(tvb_captured_length(tvb) > offset)
732
1
  {
733
1
    proto_tree_add_item_ret_uint(tree, hf_extrememesh_ps_bred_option, tvb, offset, 1, ENC_BIG_ENDIAN, &option);
734
1
    offset++;
735
1
    if(option == 0) continue; // Option 0 is a single padding byte, no length byte
736
1
    proto_tree_add_item(tree, hf_extrememesh_ps_bred_option_len, tvb, offset, 1, ENC_BIG_ENDIAN);
737
1
    offset++;
738
1
    switch(option)
739
1
    {
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
1
    default:
745
      /*proto_tree_add_text(tree, tvb, offset, -1, */
746
      /*"Unsupported bind removed option (%d)", option);*/
747
1
      return;
748
1
    }
749
1
  }
750
1
}
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
1
{
765
1
  uint32_t offset = 0;
766
1
  uint32_t option = 0;
767
768
1
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Status Request");
769
1
  proto_tree_add_item(tree, proto_extrememesh_ps_sreq, tvb, offset, -1, ENC_NA);
770
1
  proto_tree_add_item(tree, hf_extrememesh_ps_sreq_version, tvb, offset, 1, ENC_BIG_ENDIAN);
771
1
  offset++;
772
1
  proto_tree_add_item(tree, hf_extrememesh_ps_sreq_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
773
1
  offset++;
774
1
  proto_tree_add_item(tree, hf_extrememesh_ps_sreq_reserved, tvb, offset, 2, ENC_BIG_ENDIAN);
775
1
  offset+=2;
776
1
  proto_tree_add_item(tree, hf_extrememesh_ps_sreq_orig_addr, tvb, offset, 6, ENC_NA);
777
1
  offset+=6;
778
1
  proto_tree_add_item(tree, hf_extrememesh_ps_sreq_term_addr, tvb, offset, 6, ENC_NA);
779
1
  offset+=6;
780
1
  proto_tree_add_item(tree, hf_extrememesh_ps_sreq_opt_tot_len, tvb, offset, 2, ENC_BIG_ENDIAN);
781
1
  offset+=2;
782
783
1
  while(tvb_captured_length(tvb) > offset)
784
1
  {
785
1
    proto_tree_add_item_ret_uint(tree, hf_extrememesh_ps_sreq_option, tvb, offset, 2, ENC_BIG_ENDIAN, &option);
786
1
    offset+=2;
787
1
    if(option == 0) continue; // Option 0 is a single padding byte, no length byte
788
1
    proto_tree_add_item(tree, hf_extrememesh_ps_sreq_option_len, tvb, offset, 2, ENC_BIG_ENDIAN);
789
1
    offset+=2;
790
1
    switch(option)
791
1
    {
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
1
    default:
797
      /*proto_tree_add_text(tree, tvb, offset, -1, */
798
      /*"Unsupported status request option (%d)", option);*/
799
1
      return;
800
1
    }
801
1
  }
802
1
}
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
4
{
817
4
  uint32_t offset = 0;
818
4
  uint32_t option = 0;
819
820
4
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Status Reply");
821
4
  proto_tree_add_item(tree, proto_extrememesh_ps_srep, tvb, offset, -1, ENC_NA);
822
4
  proto_tree_add_item(tree, hf_extrememesh_ps_srep_version, tvb, offset, 1, ENC_BIG_ENDIAN);
823
4
  offset++;
824
4
  proto_tree_add_item(tree, hf_extrememesh_ps_srep_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
825
4
  offset++;
826
4
  proto_tree_add_item(tree, hf_extrememesh_ps_srep_flags, tvb, offset, 1, ENC_BIG_ENDIAN);
827
4
  proto_tree_add_item(tree, hf_extrememesh_ps_srep_flags_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
828
4
  proto_tree_add_item(tree, hf_extrememesh_ps_srep_flags_status, tvb, offset, 1, ENC_BIG_ENDIAN);
829
4
  offset++;
830
4
  proto_tree_add_item(tree, hf_extrememesh_ps_srep_hop_count, tvb, offset, 1, ENC_BIG_ENDIAN);
831
4
  offset++;
832
4
  proto_tree_add_item(tree, hf_extrememesh_ps_srep_orig_addr, tvb, offset, 6, ENC_NA);
833
4
  offset+=6;
834
4
  proto_tree_add_item(tree, hf_extrememesh_ps_srep_dest_addr, tvb, offset, 6, ENC_NA);
835
4
  offset+=6;
836
4
  proto_tree_add_item(tree, hf_extrememesh_ps_srep_term_addr, tvb, offset, 6, ENC_NA);
837
4
  offset+=6;
838
4
  proto_tree_add_item(tree, hf_extrememesh_ps_srep_opt_tot_len, tvb, offset, 2, ENC_BIG_ENDIAN);
839
4
  offset+=2;
840
841
22
  while(tvb_captured_length(tvb) > offset)
842
22
  {
843
22
    proto_tree_add_item_ret_uint(tree, hf_extrememesh_ps_srep_option, tvb, offset, 2, ENC_BIG_ENDIAN, &option);
844
22
    offset+=2;
845
22
    if(option == 0) continue; // Option 0 is a single padding byte, no length byte
846
4
    proto_tree_add_item(tree, hf_extrememesh_ps_srep_option_len, tvb, offset, 2, ENC_BIG_ENDIAN);
847
4
    offset+=2;
848
4
    switch(option)
849
4
    {
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
4
    default:
855
      /*proto_tree_add_text(tree, tvb, offset, -1, */
856
      /*"Unsupported status reply option (%d)", option);*/
857
4
      return;
858
4
    }
859
4
  }
860
4
}
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
1
{
875
1
  uint32_t offset = 0;
876
1
  uint32_t option = 0;
877
1
  uint16_t option_len = 0;
878
879
1
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Path Request");
880
1
  proto_tree_add_item(tree, proto_extrememesh_ps_preq, tvb, offset, -1, ENC_NA);
881
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_version, tvb, offset, 1, ENC_BIG_ENDIAN);
882
1
  offset++;
883
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
884
1
  offset++;
885
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_flags, tvb, offset, 1, ENC_BIG_ENDIAN);
886
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_flags_broadcast, tvb, offset, 1, ENC_BIG_ENDIAN);
887
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_flags_periodic, tvb, offset, 1, ENC_BIG_ENDIAN);
888
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_flags_state, tvb, offset, 1, ENC_BIG_ENDIAN);
889
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_flags_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
890
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_flags_gratuitous, tvb, offset, 1, ENC_BIG_ENDIAN);
891
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_flags_destination, tvb, offset, 1, ENC_BIG_ENDIAN);
892
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_flags_unknown, tvb, offset, 1, ENC_BIG_ENDIAN);
893
1
  offset++;
894
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_hop_count, tvb, offset, 1, ENC_BIG_ENDIAN);
895
1
  offset++;
896
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_ttl, tvb, offset, 4, ENC_BIG_ENDIAN);
897
1
  offset+=4;
898
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_path_metrics, tvb, offset, 2, ENC_BIG_ENDIAN);
899
1
  offset+=2;
900
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_services, tvb, offset, 1, ENC_BIG_ENDIAN);
901
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_services_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
902
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_services_mobile, tvb, offset, 1, ENC_BIG_ENDIAN);
903
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_services_path_pref, tvb, offset, 1, ENC_BIG_ENDIAN);
904
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_services_geo, tvb, offset, 1, ENC_BIG_ENDIAN);
905
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_services_proxy, tvb, offset, 1, ENC_BIG_ENDIAN);
906
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_services_root, tvb, offset, 1, ENC_BIG_ENDIAN);
907
1
  offset++;
908
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
909
1
  offset++;
910
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_id, tvb, offset, 4, ENC_BIG_ENDIAN);
911
1
  offset+=4;
912
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_term_addr, tvb, offset, 6, ENC_NA);
913
1
  offset+=6;
914
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_dest_addr, tvb, offset, 6, ENC_NA);
915
1
  offset+=6;
916
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_dest_seq, tvb, offset, 4, ENC_BIG_ENDIAN);
917
1
  offset+=4;
918
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_orig_addr, tvb, offset, 6, ENC_NA);
919
1
  offset+=6;
920
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_orig_seq, tvb, offset, 4, ENC_BIG_ENDIAN);
921
1
  offset+=4;
922
1
  proto_tree_add_item(tree, hf_extrememesh_ps_preq_opt_tot_len, tvb, offset, 2, ENC_BIG_ENDIAN);
923
1
  offset+=2;
924
925
1
  while(tvb_captured_length(tvb) > offset)
926
1
  {
927
1
    proto_tree_add_item_ret_uint(tree, hf_extrememesh_ps_preq_option, tvb, offset, 2, ENC_BIG_ENDIAN, &option);
928
1
    offset+=2;
929
1
    if(option == 0) continue; // Option 0 is a single padding byte, no length byte
930
1
    option_len = tvb_get_ntohs(tvb, offset);
931
1
    proto_tree_add_item(tree, hf_extrememesh_ps_preq_option_len, tvb, offset, 2, ENC_BIG_ENDIAN);
932
1
    offset+=2;
933
1
    switch(option)
934
1
    {
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
1
    default:
953
      /*proto_tree_add_text(tree, tvb, offset, -1, */
954
      /*"Unsupported path request option (%d)", option);*/
955
1
      return;
956
1
    }
957
1
  }
958
1
}
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
5
{
973
5
  uint32_t offset = 0;
974
5
  uint32_t option = 0;
975
5
  uint16_t option_len = 0;
976
977
5
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Path Reply");
978
5
  proto_tree_add_item(tree, proto_extrememesh_ps_prep, tvb, offset, -1, ENC_NA);
979
5
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_version, tvb, offset, 1, ENC_BIG_ENDIAN);
980
5
  offset++;
981
5
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
982
5
  offset++;
983
5
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_flags, tvb, offset, 1, ENC_BIG_ENDIAN);
984
5
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_flags_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
985
5
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_flags_new_route, tvb, offset, 1, ENC_BIG_ENDIAN);
986
5
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_flags_repair, tvb, offset, 1, ENC_BIG_ENDIAN);
987
5
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_flags_ack, tvb, offset, 1, ENC_BIG_ENDIAN);
988
5
  offset++;
989
5
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_hop_count, tvb, offset, 1, ENC_BIG_ENDIAN);
990
5
  offset++;
991
5
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_path_metrics, tvb, offset, 2, ENC_BIG_ENDIAN);
992
5
  offset+=2;
993
5
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_services, tvb, offset, 1, ENC_BIG_ENDIAN);
994
5
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_services_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
995
5
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_services_mobile, tvb, offset, 1, ENC_BIG_ENDIAN);
996
5
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_services_path_pref, tvb, offset, 1, ENC_BIG_ENDIAN);
997
5
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_services_geo, tvb, offset, 1, ENC_BIG_ENDIAN);
998
5
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_services_proxy, tvb, offset, 1, ENC_BIG_ENDIAN);
999
5
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_services_root, tvb, offset, 1, ENC_BIG_ENDIAN);
1000
5
  offset++;
1001
5
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
1002
5
  offset++;
1003
5
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_term_addr, tvb, offset, 6, ENC_NA);
1004
5
  offset+=6;
1005
5
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_dest_addr, tvb, offset, 6, ENC_NA);
1006
5
  offset+=6;
1007
5
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_dest_seq, tvb, offset, 4, ENC_BIG_ENDIAN);
1008
5
  offset+=4;
1009
5
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_orig_addr, tvb, offset, 6, ENC_NA);
1010
5
  offset+=6;
1011
5
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_orig_seq, tvb, offset, 4, ENC_BIG_ENDIAN);
1012
5
  offset+=4;
1013
5
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_lifetime, tvb, offset, 4, ENC_BIG_ENDIAN);
1014
5
  offset+=4;
1015
5
  proto_tree_add_item(tree, hf_extrememesh_ps_prep_opt_tot_len, tvb, offset, 2, ENC_BIG_ENDIAN);
1016
5
  offset+=2;
1017
28
  while(tvb_captured_length(tvb) > offset)
1018
28
  {
1019
28
    proto_tree_add_item_ret_uint(tree, hf_extrememesh_ps_prep_option, tvb, offset, 2, ENC_BIG_ENDIAN, &option);
1020
28
    offset+=2;
1021
28
    if(option == 0) continue; // Option 0 is a single padding byte, no length byte
1022
5
    option_len = tvb_get_ntohs(tvb, offset);
1023
5
    proto_tree_add_item(tree, hf_extrememesh_ps_prep_option_len, tvb, offset, 2, ENC_BIG_ENDIAN);
1024
5
    offset+=2;
1025
5
    switch(option)
1026
5
    {
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
5
    default:
1045
      /*proto_tree_add_text(tree, tvb, offset, -1, */
1046
      /*"Unsupported path reply option (%d)", option);*/
1047
5
      return;
1048
5
    }
1049
5
  }
1050
5
}
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
6
{
1065
6
  uint32_t offset = 0;
1066
6
  uint8_t dst_cnt = 0;
1067
1068
6
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Path Error");
1069
6
  dst_cnt = tvb_get_uint8(tvb, 3);
1070
6
  proto_tree_add_item(tree, proto_extrememesh_ps_perr, tvb, offset, -1, ENC_NA);
1071
6
  proto_tree_add_item(tree, hf_extrememesh_ps_perr_version, tvb, offset, 1, ENC_BIG_ENDIAN);
1072
6
  offset++;
1073
6
  proto_tree_add_item(tree, hf_extrememesh_ps_perr_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1074
6
  offset++;
1075
6
  proto_tree_add_item(tree, hf_extrememesh_ps_perr_flags, tvb, offset, 1, ENC_BIG_ENDIAN);
1076
6
  proto_tree_add_item(tree, hf_extrememesh_ps_perr_flags_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
1077
6
  proto_tree_add_item(tree, hf_extrememesh_ps_perr_flags_warning, tvb, offset, 1, ENC_BIG_ENDIAN);
1078
6
  proto_tree_add_item(tree, hf_extrememesh_ps_perr_flags_no_delete, tvb, offset, 1, ENC_BIG_ENDIAN);
1079
6
  offset++;
1080
6
  proto_tree_add_item(tree, hf_extrememesh_ps_perr_dest_count, tvb, offset, 1, ENC_BIG_ENDIAN);
1081
6
  offset++;
1082
43
  while (dst_cnt-- > 0)
1083
37
  {
1084
37
    proto_tree_add_item(tree, hf_extrememesh_ps_perr_unrch_dest, tvb, offset, 6, ENC_NA);
1085
37
    offset+=6;
1086
37
    proto_tree_add_item(tree, hf_extrememesh_ps_perr_unrch_dest_seq, tvb, offset, 4, ENC_BIG_ENDIAN);
1087
37
    offset+=4;
1088
37
  }
1089
6
}
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
1
{
1104
1
  unsigned offset = 0;
1105
1106
1
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Path Reset");
1107
1
  proto_tree_add_item(tree, proto_extrememesh_ps_prst, tvb, offset, -1, ENC_NA);
1108
1
  proto_tree_add_item(tree, hf_extrememesh_ps_prst_version, tvb, offset, 1, ENC_BIG_ENDIAN);
1109
1
  offset++;
1110
1
  proto_tree_add_item(tree, hf_extrememesh_ps_prst_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1111
1
  offset++;
1112
1
  proto_tree_add_item(tree, hf_extrememesh_ps_prst_hops_to_live, tvb, offset, 1, ENC_BIG_ENDIAN);
1113
1
  offset++;
1114
1
  proto_tree_add_item(tree, hf_extrememesh_ps_prst_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
1115
1
  offset++;
1116
1
  proto_tree_add_item(tree, hf_extrememesh_ps_prst_id, tvb, offset, 4, ENC_BIG_ENDIAN);
1117
1
  offset+=4;
1118
1
  proto_tree_add_item(tree, hf_extrememesh_ps_prst_orig_addr, tvb, offset, 6, ENC_NA);
1119
1
  offset+=6;
1120
1
  proto_tree_add_item(tree, hf_extrememesh_ps_prst_dest_addr, tvb, offset, 6, ENC_NA);
1121
1
}
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
12
{
1136
12
  uint32_t offset = 0;
1137
12
  uint32_t option = 0;
1138
12
  uint8_t option_len = 0;
1139
1140
12
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Proxy Remove");
1141
12
  proto_tree_add_item(tree, proto_extrememesh_ps_prem, tvb, offset, -1, ENC_NA);
1142
12
  proto_tree_add_item(tree, hf_extrememesh_ps_prem_version, tvb, offset, 1, ENC_BIG_ENDIAN);
1143
12
  offset++;
1144
12
  proto_tree_add_item(tree, hf_extrememesh_ps_prem_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1145
12
  offset++;
1146
12
  proto_tree_add_item(tree, hf_extrememesh_ps_prem_mpr_addr, tvb, offset, 6, ENC_NA);
1147
12
  offset+=6;
1148
12
  proto_tree_add_item(tree, hf_extrememesh_ps_prem_orig_addr, tvb, offset, 6, ENC_NA);
1149
12
  offset+=6;
1150
12
  proto_tree_add_item(tree, hf_extrememesh_ps_prem_opt_tot_len, tvb, offset, 2, ENC_BIG_ENDIAN);
1151
12
  offset+=2;
1152
55
  while(tvb_captured_length(tvb) > offset)
1153
55
  {
1154
55
    proto_tree_add_item_ret_uint(tree, hf_extrememesh_ps_prem_option, tvb, offset, 1, ENC_BIG_ENDIAN, &option);
1155
55
    offset++;
1156
55
    if(option == 0) continue; // Option 0 is a single padding byte, no length byte
1157
14
    option_len = tvb_get_int8(tvb, offset);
1158
14
    proto_tree_add_item(tree, hf_extrememesh_ps_prem_option_len, tvb, offset, 1, ENC_BIG_ENDIAN);
1159
14
    offset++;
1160
14
    switch(option)
1161
14
    {
1162
7
    case 1:
1163
28
      while(option_len > 0)
1164
22
      {
1165
22
        proto_tree_add_item(tree, hf_extrememesh_ps_prem_proxy_addr, tvb, offset, 6, ENC_NA);
1166
22
        option_len-=6;
1167
22
        offset+=6;
1168
22
        if (option_len < 6) break;
1169
22
      }
1170
7
      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
7
    default:
1181
      /*proto_tree_add_text(tree, tvb, offset, -1, */
1182
      /*"Unsupported proxy remove option (%d)", option);*/
1183
7
      return;
1184
14
    }
1185
14
  }
1186
12
}
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
2
{
1201
2
  uint32_t offset = 0;
1202
2
  uint8_t hop_cnt = 0;
1203
1204
2
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Trace Path");
1205
2
  hop_cnt = tvb_get_uint8(tvb, 15);
1206
2
  proto_tree_add_item(tree, proto_extrememesh_ps_trace, tvb, offset, -1, ENC_NA);
1207
2
  proto_tree_add_item(tree, hf_extrememesh_ps_trace_version, tvb, offset, 1, ENC_BIG_ENDIAN);
1208
2
  offset++;
1209
2
  proto_tree_add_item(tree, hf_extrememesh_ps_trace_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1210
2
  offset++;
1211
2
  proto_tree_add_item(tree, hf_extrememesh_ps_trace_flags, tvb, offset, 1, ENC_BIG_ENDIAN);
1212
2
  proto_tree_add_item(tree, hf_extrememesh_ps_trace_flags_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
1213
2
  proto_tree_add_item(tree, hf_extrememesh_ps_trace_flags_reply, tvb, offset, 1, ENC_BIG_ENDIAN);
1214
2
  proto_tree_add_item(tree, hf_extrememesh_ps_trace_flags_no_path, tvb, offset, 1, ENC_BIG_ENDIAN);
1215
2
  offset++;
1216
2
  proto_tree_add_item(tree, hf_extrememesh_ps_trace_dest_addr, tvb, offset, 6, ENC_NA);
1217
2
  offset+=6;
1218
2
  proto_tree_add_item(tree, hf_extrememesh_ps_trace_orig_addr, tvb, offset, 6, ENC_NA);
1219
2
  offset+=6;
1220
2
  proto_tree_add_item(tree, hf_extrememesh_ps_trace_hop_count, tvb, offset, 1, ENC_BIG_ENDIAN);
1221
2
  offset++;
1222
51
  while(hop_cnt-- > 0)
1223
49
  {
1224
49
    proto_tree_add_item(tree, hf_extrememesh_ps_trace_addl_path, tvb, offset, 6, ENC_NA);
1225
49
    offset+=6;
1226
49
  }
1227
2
}
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
9
{
1286
9
  uint32_t offset = 0;
1287
9
  uint32_t option = 0;
1288
1289
  /*if((pinfo != NULL) && check_col(pinfo->cinfo,COL_INFO))*/
1290
9
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh Path Selection Authorization Request");
1291
9
  proto_tree_add_item(tree, proto_extrememesh_ps_areq, tvb, offset, -1, ENC_NA);
1292
9
  proto_tree_add_item(tree, hf_extrememesh_ps_areq_version, tvb, offset, 1, ENC_BIG_ENDIAN);
1293
9
  offset++;
1294
9
  proto_tree_add_item(tree, hf_extrememesh_ps_areq_frame_type, tvb, offset, 1, ENC_BIG_ENDIAN);
1295
9
  offset++;
1296
9
  proto_tree_add_item(tree, hf_extrememesh_ps_areq_mpr_addr, tvb, offset, 6, ENC_NA);
1297
9
  offset+=6;
1298
9
  proto_tree_add_item(tree, hf_extrememesh_ps_areq_orig_addr, tvb, offset, 6, ENC_NA);
1299
9
  offset+=6;
1300
9
  proto_tree_add_item(tree, hf_extrememesh_ps_areq_opt_tot_len, tvb, offset, 2, ENC_BIG_ENDIAN);
1301
9
  offset+=2;
1302
103
  while(tvb_captured_length(tvb) > offset)
1303
103
  {
1304
103
    proto_tree_add_item_ret_uint(tree, hf_extrememesh_ps_areq_option, tvb, offset, 1, ENC_BIG_ENDIAN, &option);
1305
103
    offset++;
1306
103
    if(option == 0) continue; // Option 0 is a single padding byte, no length byte
1307
14
    proto_tree_add_item(tree, hf_extrememesh_ps_areq_option_len, tvb, offset, 1, ENC_BIG_ENDIAN);
1308
14
    offset++;
1309
14
    switch(option)
1310
14
    {
1311
4
    case 2:
1312
4
      proto_tree_add_item(tree, hf_extrememesh_ps_areq_old_mpr, tvb, offset, 6, ENC_NA);
1313
4
      offset+=6;
1314
4
      break;
1315
1
    case 3:
1316
1
      proto_tree_add_item(tree, hf_extrememesh_ps_areq_proxies, tvb, offset, 1, ENC_BIG_ENDIAN);
1317
1
      offset++;
1318
1
      break;
1319
9
    default:
1320
9
      return;
1321
14
    }
1322
14
  }
1323
9
}
1324
1325
static int dissect_extrememesh_ps(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
1326
80
{
1327
80
  int frame_type_offset = 1;
1328
80
  int frame_type = MESH_PS_FRAME_INVALID;
1329
1330
80
  frame_type = tvb_get_uint8(tvb, frame_type_offset);
1331
80
  switch(frame_type)
1332
80
  {
1333
9
  case MESH_PS_FRAME_AREQ:
1334
9
    dissect_extrememesh_ps_areq(tvb, pinfo, tree);
1335
9
    break;
1336
6
  case MESH_PS_FRAME_AREP:
1337
6
    dissect_extrememesh_ps_arep(tvb, pinfo, tree);
1338
6
    break;
1339
22
  case MESH_PS_FRAME_BREQ:
1340
22
    dissect_extrememesh_ps_breq(tvb, pinfo, tree);
1341
22
    break;
1342
4
  case MESH_PS_FRAME_BREP:
1343
4
    dissect_extrememesh_ps_brep(tvb, pinfo, tree);
1344
4
    break;
1345
4
  case MESH_PS_FRAME_BANN:
1346
4
    dissect_extrememesh_ps_bann(tvb, pinfo, tree);
1347
4
    break;
1348
1
  case MESH_PS_FRAME_BRED:
1349
1
    dissect_extrememesh_ps_bred(tvb, pinfo, tree);
1350
1
    break;
1351
1
  case MESH_PS_FRAME_SREQ:
1352
1
    dissect_extrememesh_ps_sreq(tvb, pinfo, tree);
1353
1
    break;
1354
4
  case MESH_PS_FRAME_SREP:
1355
4
    dissect_extrememesh_ps_srep(tvb, pinfo, tree);
1356
4
    break;
1357
1
  case MESH_PS_FRAME_PREQ:
1358
1
    dissect_extrememesh_ps_preq(tvb, pinfo, tree);
1359
1
    break;
1360
5
  case MESH_PS_FRAME_PREP:
1361
5
    dissect_extrememesh_ps_prep(tvb, pinfo, tree);
1362
5
    break;
1363
6
  case MESH_PS_FRAME_PERR:
1364
6
    dissect_extrememesh_ps_perr(tvb, pinfo, tree);
1365
6
    break;
1366
1
  case MESH_PS_FRAME_PRST:
1367
1
    dissect_extrememesh_ps_prst(tvb, pinfo, tree);
1368
1
    break;
1369
12
  case MESH_PS_FRAME_PREM:
1370
12
    dissect_extrememesh_ps_prem(tvb, pinfo, tree);
1371
12
    break;
1372
2
  case MESH_PS_FRAME_TRACE:
1373
2
    dissect_extrememesh_ps_trace(tvb, pinfo, tree);
1374
2
    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
80
  }
1383
59
  return MESH_NEXT_PROTOCOL_INVALID;
1384
80
}
1385
1386
static int dissect_extrememesh_eth_noaddr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
1387
14
{
1388
14
  tvbuff_t *nextTvb;
1389
14
  unsigned char *ethBuffer;
1390
14
  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
14
  if (pinfo->src.data && pinfo->dst.data) {
1396
    //Get the length of the current buffer
1397
4
    unsigned tvbLen = tvb_captured_length(tvb);
1398
    //Add space for the src/dst
1399
4
    bufferLen = tvbLen + pinfo->src.len + pinfo->dst.len;
1400
    //Allocate a new ethernet buffer
1401
4
    ethBuffer = (unsigned char*)wmem_alloc(pinfo->pool, bufferLen);
1402
1403
4
    memcpy(ethBuffer, pinfo->dst.data, pinfo->dst.len);
1404
4
    memcpy(ethBuffer + pinfo->dst.len, pinfo->src.data, pinfo->src.len);
1405
1406
    //Copy in the rest of the packet
1407
4
    tvb_memcpy(tvb, ethBuffer, pinfo->src.len + pinfo->dst.len, tvbLen);
1408
4
    nextTvb = tvb_new_real_data(ethBuffer, bufferLen, bufferLen);
1409
4
    tvb_set_child_real_data_tvbuff(tvb, nextTvb);
1410
4
    add_new_data_source(pinfo, nextTvb, "Encapsulated Ethernet, no addr");
1411
1412
4
    if (eth_withoutfcs_handle)
1413
0
    {
1414
0
      call_dissector(eth_withoutfcs_handle, nextTvb, pinfo, tree);
1415
0
    }
1416
4
  }
1417
1418
  //This is a terminal type
1419
14
  return MESH_NEXT_PROTOCOL_INVALID;
1420
14
}
1421
1422
static int dissect_extrememesh_l2upd(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
1423
1
{
1424
1
  unsigned offset = 0;
1425
1426
1
  col_set_str(pinfo->cinfo, COL_INFO, "Extreme Mesh L2 Update");
1427
1
  proto_tree_add_item(tree, proto_extrememesh_l2upd, tvb, offset, -1, ENC_NA);
1428
1
  proto_tree_add_item(tree, hf_extrememesh_l2upd_proxy_owner, tvb, offset, 6, ENC_NA);
1429
1
  offset+=6;
1430
1
  proto_tree_add_item(tree, hf_extrememesh_l2upd_ballast, tvb, offset, tvb_captured_length(tvb)-6, ENC_NA);
1431
1432
1
  return MESH_NEXT_PROTOCOL_INVALID;
1433
1
}
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
93
{
1467
93
  proto_tree *meshTree = tree;
1468
93
  unsigned offset = 0;
1469
93
  int next_proto;
1470
93
  tvbuff_t *nextTvb;
1471
1472
93
  proto_tree_add_item(meshTree, proto_extrememesh_mch, tvb, offset, -1, ENC_NA);
1473
93
  proto_tree_add_item(meshTree, hf_extrememesh_mch_version, tvb, offset, 1, ENC_BIG_ENDIAN);
1474
93
  offset++;
1475
93
  next_proto = tvb_get_uint8(tvb, offset);
1476
93
  proto_tree_add_item(meshTree, hf_extrememesh_mch_next_proto, tvb, offset, 1, ENC_BIG_ENDIAN);
1477
93
  offset++;
1478
93
  proto_tree_add_item(meshTree, hf_extrememesh_mch_lq, tvb, offset, 1, ENC_BIG_ENDIAN);
1479
93
  offset++;
1480
93
  proto_tree_add_item(meshTree, hf_extrememesh_mch_htl, tvb, offset, 1, ENC_BIG_ENDIAN);
1481
93
  offset++;
1482
93
  proto_tree_add_item(meshTree, hf_extrememesh_mch_priority, tvb, offset, 1, ENC_BIG_ENDIAN);
1483
93
  offset++;
1484
93
  proto_tree_add_item(meshTree, hf_extrememesh_mch_usr_pri_flags, tvb, offset, 1, ENC_BIG_ENDIAN);
1485
93
  proto_tree_add_item(meshTree, hf_extrememesh_mch_usr_pri_flags_user_priority, tvb, offset, 1, ENC_BIG_ENDIAN);
1486
93
  proto_tree_add_item(meshTree, hf_extrememesh_mch_usr_pri_flags_reserved, tvb, offset, 1, ENC_BIG_ENDIAN);
1487
93
  proto_tree_add_item(meshTree, hf_extrememesh_mch_usr_pri_flags_from_wan, tvb, offset, 1, ENC_BIG_ENDIAN);
1488
93
  proto_tree_add_item(meshTree, hf_extrememesh_mch_usr_pri_flags_to_wan, tvb, offset, 1, ENC_BIG_ENDIAN);
1489
93
  proto_tree_add_item(meshTree, hf_extrememesh_mch_usr_pri_flags_forward, tvb, offset, 1, ENC_BIG_ENDIAN);
1490
93
  offset++;
1491
93
  proto_tree_add_item(meshTree, hf_extrememesh_mch_sequence, tvb, offset, 2, ENC_BIG_ENDIAN);
1492
93
  offset+=2;
1493
93
  proto_tree_add_item(meshTree, hf_extrememesh_mch_dest, tvb, offset, 6, ENC_NA);
1494
93
  offset+=6;
1495
93
  proto_tree_add_item(meshTree, hf_extrememesh_mch_src, tvb, offset, 6, ENC_NA);
1496
93
  offset+=6;
1497
1498
93
  nextTvb = tvb_new_subset_remaining(tvb, offset);
1499
1500
166
  while(next_proto != (int)MESH_NEXT_PROTOCOL_INVALID)
1501
93
  {
1502
93
    switch(next_proto)
1503
93
    {
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
2
    case MESH_NEXT_PROTOCOL_MESH:
1513
      // Should never encounter this inside of a MESH packet
1514
2
      next_proto = MESH_NEXT_PROTOCOL_INVALID;
1515
2
      break;
1516
9
    case MESH_NEXT_PROTOCOL_MCH:
1517
      // We recurse here, but we'll run out of packet before we run out of stack.
1518
9
      next_proto = dissect_extrememesh_mch(nextTvb, pinfo, meshTree);
1519
9
      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
76
    case MESH_NEXT_PROTOCOL_PS:
1528
76
      next_proto = dissect_extrememesh_ps(nextTvb, pinfo, meshTree);
1529
76
      break;
1530
1
    case MESH_NEXT_PROTOCOL_HELLO:
1531
1
    case MESH_NEXT_PROTOCOL_SECURITY: // MEA only
1532
1
    case MESH_NEXT_PROTOCOL_SECURED_PAYLOAD: // MEA only
1533
2
    case MESH_NEXT_PROTOCOL_CFPU: // Quattro only
1534
3
    case MESH_NEXT_PROTOCOL_EAPOM:
1535
4
    case MESH_NEXT_PROTOCOL_ENCAPSULATED_ETH_NO_ADDR:
1536
4
      next_proto = dissect_extrememesh_eth_noaddr(nextTvb, pinfo, meshTree);
1537
4
      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
93
    }
1550
93
  }
1551
73
  return next_proto;
1552
93
}
1553
1554
static int dissect_extrememesh(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
1555
103
{
1556
103
  unsigned offset = 0;
1557
  /*uint8_t packet_type = 0;*/
1558
103
  tvbuff_t *next_tvb = NULL;
1559
1560
103
  col_set_str(pinfo->cinfo, COL_PROTOCOL, "MCX");
1561
103
  proto_item *ti = NULL;
1562
103
  proto_tree *meshTree = NULL;
1563
103
  int next_proto = MESH_NEXT_PROTOCOL_INVALID;
1564
1565
103
  ti = proto_tree_add_item(tree, proto_extrememesh, tvb, offset, -1, ENC_NA);
1566
103
  meshTree = proto_item_add_subtree(ti, ett_extrememesh);
1567
103
  proto_tree_add_item(meshTree, hf_extrememesh_version, tvb, offset, 1, ENC_BIG_ENDIAN);
1568
103
  offset++;
1569
103
  next_proto = tvb_get_uint8(tvb, offset);
1570
103
  proto_tree_add_item(meshTree, hf_extrememesh_nextproto, tvb, offset, 1, ENC_BIG_ENDIAN);
1571
103
  offset++;
1572
1573
103
  next_tvb = tvb_new_subset_remaining(tvb, offset);
1574
1575
180
  while(next_proto != (int)MESH_NEXT_PROTOCOL_INVALID)
1576
102
  {
1577
102
    switch(next_proto)
1578
102
    {
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
84
      case MESH_NEXT_PROTOCOL_MCH:
1592
84
        next_proto = dissect_extrememesh_mch(next_tvb, pinfo, meshTree);
1593
84
        break;
1594
1
      case MESH_NEXT_PROTOCOL_ENCAPSULATED_ETH:
1595
1
        if (eth_withoutfcs_handle)
1596
1
        {
1597
1
          call_dissector(eth_withoutfcs_handle, next_tvb, pinfo, meshTree);
1598
1
        }
1599
1
        next_proto = MESH_NEXT_PROTOCOL_INVALID;
1600
1
        break;
1601
4
      case MESH_NEXT_PROTOCOL_PS:
1602
4
        next_proto = dissect_extrememesh_ps(next_tvb, pinfo, meshTree);
1603
4
        break;
1604
5
      case MESH_NEXT_PROTOCOL_HELLO:
1605
5
      case MESH_NEXT_PROTOCOL_SECURITY: // MEA only
1606
7
      case MESH_NEXT_PROTOCOL_SECURED_PAYLOAD: // MEA only
1607
8
      case MESH_NEXT_PROTOCOL_CFPU: // Quattro only
1608
9
      case MESH_NEXT_PROTOCOL_EAPOM:
1609
10
      case MESH_NEXT_PROTOCOL_ENCAPSULATED_ETH_NO_ADDR:
1610
10
        next_proto = dissect_extrememesh_eth_noaddr(next_tvb, pinfo, meshTree);
1611
10
        break;
1612
1
      case MESH_NEXT_PROTOCOL_L2_UPDATE:
1613
1
        next_proto = dissect_extrememesh_l2upd(next_tvb, pinfo, meshTree);
1614
1
        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
102
      }
1622
102
    }
1623
78
    return 0;
1624
103
}
1625
1626
void proto_register_extrememesh(void)
1627
16
{
1628
  /*register the fields for the various structs*/
1629
  /* extrememesh mesh */
1630
16
  static hf_register_info hf_extrememesh[] = {
1631
16
  { &hf_extrememesh_version, {
1632
16
    "Version", "extrememesh.version", FT_UINT8, BASE_HEX_DEC,
1633
16
    NULL, 0x0, NULL, HFILL }},
1634
16
  { &hf_extrememesh_nextproto, {
1635
16
    "Next protocol", "extrememesh.nextproto", FT_UINT8, BASE_DEC,
1636
16
    VALS(mot_mesh_packet_types), 0x0, NULL, HFILL }}
1637
16
  };
1638
1639
  /* extrememesh mesh control header */
1640
16
  static hf_register_info hf_extrememesh_mch[] = {
1641
16
  { &hf_extrememesh_mch_version, {
1642
16
    "Version", "extrememesh.mch.version", FT_UINT8, BASE_HEX_DEC,
1643
16
    NULL, 0x0, NULL, HFILL }},
1644
16
  { &hf_extrememesh_mch_next_proto, {
1645
16
    "Next protocol", "extrememesh.mch.nextproto", FT_UINT8, BASE_DEC,
1646
16
    VALS(mot_mesh_packet_types), 0x0, NULL, HFILL }},
1647
16
  { &hf_extrememesh_mch_lq, {
1648
16
    "Link Quality Metric", "extrememesh.mch.lq", FT_UINT8, BASE_HEX_DEC,
1649
16
    NULL, 0x0, NULL, HFILL }},
1650
16
  { &hf_extrememesh_mch_htl, {
1651
16
    "Hop To Live counter", "extrememesh.mch.htl", FT_UINT8, BASE_HEX_DEC,
1652
16
    NULL, 0x0, NULL, HFILL }},
1653
16
  { &hf_extrememesh_mch_priority, {
1654
16
    "Packet Priority", "extrememesh.mch.priority", FT_UINT8, BASE_HEX_DEC,
1655
16
    NULL, 0x0, NULL, HFILL }},
1656
16
  { &hf_extrememesh_mch_usr_pri_flags, {
1657
16
    "Priority/Flags", "extrememesh.mch.flags", FT_UINT8, BASE_HEX,
1658
16
    NULL, 0x0, NULL, HFILL }},
1659
16
  { &hf_extrememesh_mch_usr_pri_flags_user_priority, {
1660
16
    "User Priority", "extrememesh.mch.flags.user_priority", FT_UINT8, BASE_DEC,
1661
16
    NULL, 0xF0, NULL, HFILL }},
1662
16
  { &hf_extrememesh_mch_usr_pri_flags_reserved, {
1663
16
    "Reserved", "extrememesh.mch.flags.reserved", FT_UINT8, BASE_DEC,
1664
16
    NULL, 0x08, NULL, HFILL }},
1665
16
  { &hf_extrememesh_mch_usr_pri_flags_from_wan, {
1666
16
    "From WAN", "extrememesh.mch.flags.from_wan", FT_UINT8, BASE_DEC,
1667
16
    NULL, 0x04, NULL, HFILL }},
1668
16
  { &hf_extrememesh_mch_usr_pri_flags_to_wan, {
1669
16
    "To WAN", "extrememesh.mch.flags.to_wan", FT_UINT8, BASE_DEC,
1670
16
    NULL, 0x02, NULL, HFILL }},
1671
16
  { &hf_extrememesh_mch_usr_pri_flags_forward, {
1672
16
    "Forward Flag", "extrememesh.mch.flags.forward", FT_UINT8, BASE_DEC,
1673
16
    NULL, 0x01, NULL, HFILL }},
1674
16
  { &hf_extrememesh_mch_sequence, {
1675
16
    "Sequence", "extrememesh.mch.sequence", FT_UINT16, BASE_HEX_DEC,
1676
16
    NULL, 0x0, NULL, HFILL }},
1677
16
  { &hf_extrememesh_mch_dest, {
1678
16
    "Dst", "extrememesh.mch.dst", FT_ETHER, BASE_NONE,
1679
16
    NULL, 0x0, NULL, HFILL }},
1680
16
  { &hf_extrememesh_mch_src, {
1681
16
    "Src", "extrememesh.mch.src", FT_ETHER, BASE_NONE,
1682
16
    NULL, 0x0, NULL, HFILL }}
1683
16
  };
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
16
  static hf_register_info hf_extrememesh_ps_areq[] = {
1762
16
  { &hf_extrememesh_ps_areq_version, {
1763
16
    "Version", "extrememesh.ps.areq.version", FT_UINT8, BASE_HEX_DEC,
1764
16
    NULL, 0x0, NULL, HFILL }},
1765
16
  { &hf_extrememesh_ps_areq_frame_type, {
1766
16
    "Frame Type", "extrememesh.ps.areq.type", FT_UINT8, BASE_HEX_DEC,
1767
16
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
1768
16
  { &hf_extrememesh_ps_areq_mpr_addr, {
1769
16
    "MPR Addr", "extrememesh.ps.areq.mpr_addr", FT_ETHER, BASE_NONE,
1770
16
    NULL, 0x0, NULL, HFILL }},
1771
16
  { &hf_extrememesh_ps_areq_orig_addr, {
1772
16
    "Orig Addr", "extrememesh.ps.areq.orig_addr", FT_ETHER, BASE_NONE,
1773
16
    NULL, 0x0, NULL, HFILL }},
1774
16
  { &hf_extrememesh_ps_areq_opt_tot_len, {
1775
16
    "Options Total Length", "extrememesh.ps.areq.opt_tot_len", FT_UINT16,
1776
16
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
1777
16
  { &hf_extrememesh_ps_areq_option, {
1778
16
    "Option", "extrememesh.ps.areq.option", FT_UINT8, BASE_HEX_DEC,
1779
16
    NULL, 0x0, NULL, HFILL }},
1780
16
  { &hf_extrememesh_ps_areq_option_len, {
1781
16
    "Length", "extrememesh.ps.areq.option_len", FT_UINT8, BASE_HEX_DEC,
1782
16
    NULL, 0x0, NULL, HFILL }},
1783
16
  { &hf_extrememesh_ps_areq_old_mpr, {
1784
16
    "Old MPR Addr", "extrememesh.ps.areq.old_mpr", FT_ETHER, BASE_NONE,
1785
16
    NULL, 0x0, NULL, HFILL }},
1786
16
  { &hf_extrememesh_ps_areq_proxies, {
1787
16
    "Number of Proxies", "extrememesh.ps.areq.proxies", FT_UINT8,
1788
16
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }}
1789
16
  };
1790
1791
  /* extrememesh mesh path selection authorization reply */
1792
16
  static hf_register_info hf_extrememesh_ps_arep[] = {
1793
16
  { &hf_extrememesh_ps_arep_version, {
1794
16
    "Version", "extrememesh.ps.arep.version", FT_UINT8, BASE_HEX_DEC,
1795
16
    NULL, 0x0, NULL, HFILL }},
1796
16
  { &hf_extrememesh_ps_arep_frame_type, {
1797
16
    "Frame Type", "extrememesh.ps.arep.type", FT_UINT8, BASE_HEX_DEC,
1798
16
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
1799
16
  { &hf_extrememesh_ps_arep_mpr_addr, {
1800
16
    "MPR Addr", "extrememesh.ps.arep.mpr_addr", FT_ETHER, BASE_NONE,
1801
16
    NULL, 0x0, NULL, HFILL }},
1802
16
  { &hf_extrememesh_ps_arep_orig_addr, {
1803
16
    "Orig Addr", "extrememesh.ps.arep.orig_addr", FT_ETHER, BASE_NONE,
1804
16
    NULL, 0x0, NULL, HFILL }},
1805
16
  { &hf_extrememesh_ps_arep_opt_tot_len, {
1806
16
    "Options Total Length", "extrememesh.ps.arep.opt_tot_len", FT_UINT16,
1807
16
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
1808
16
  { &hf_extrememesh_ps_arep_option, {
1809
16
    "Option", "extrememesh.ps.arep.option", FT_UINT8, BASE_HEX_DEC,
1810
16
    NULL, 0x0, NULL, HFILL }},
1811
16
  { &hf_extrememesh_ps_arep_option_len, {
1812
16
    "Length", "extrememesh.ps.arep.option_len", FT_UINT8, BASE_HEX_DEC,
1813
16
    NULL, 0x0, NULL, HFILL }},
1814
16
  { &hf_extrememesh_ps_arep_result, {
1815
16
    "Result", "extrememesh.ps.arep.result", FT_UINT8, BASE_HEX_DEC,
1816
16
    VALS(mot_ps_auth_replies), 0x0, NULL, HFILL }},
1817
16
  { &hf_extrememesh_ps_arep_timeout, {
1818
16
    "Timeout", "extrememesh.ps.arep.timeout", FT_UINT8, BASE_HEX_DEC,
1819
16
    NULL, 0x0, NULL, HFILL }}
1820
16
  };
1821
1822
  /* extrememesh mesh path selection bind request */
1823
16
  static hf_register_info hf_extrememesh_ps_breq[] = {
1824
16
  { &hf_extrememesh_ps_breq_version, {
1825
16
    "Version", "extrememesh.ps.breq.version", FT_UINT8, BASE_HEX_DEC,
1826
16
    NULL, 0x0, NULL, HFILL }},
1827
16
  { &hf_extrememesh_ps_breq_frame_type, {
1828
16
    "Frame Type", "extrememesh.ps.breq.type", FT_UINT8, BASE_HEX_DEC,
1829
16
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
1830
16
  { &hf_extrememesh_ps_breq_mpr_addr, {
1831
16
    "MPR Addr", "extrememesh.ps.breq.mpr_addr", FT_ETHER, BASE_NONE,
1832
16
    NULL, 0x0, NULL, HFILL }},
1833
16
  { &hf_extrememesh_ps_breq_orig_addr, {
1834
16
    "Orig Addr", "extrememesh.ps.breq.orig_addr", FT_ETHER, BASE_NONE,
1835
16
    NULL, 0x0, NULL, HFILL }},
1836
16
  { &hf_extrememesh_ps_breq_opt_tot_len, {
1837
16
    "Options Total Length", "extrememesh.ps.breq.opt_tot_len", FT_UINT16,
1838
16
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
1839
16
  { &hf_extrememesh_ps_breq_option, {
1840
16
    "Option", "extrememesh.ps.breq.option", FT_UINT8, BASE_HEX_DEC,
1841
16
    NULL, 0x0, NULL, HFILL }},
1842
16
  { &hf_extrememesh_ps_breq_option_len, {
1843
16
    "Length", "extrememesh.ps.breq.option_len", FT_UINT8, BASE_HEX_DEC,
1844
16
    NULL, 0x0, NULL, HFILL }},
1845
16
  { &hf_extrememesh_ps_breq_proxy_addr, {
1846
16
    "Proxy Address", "extrememesh.ps.breq.proxy_addr", FT_ETHER, BASE_NONE,
1847
16
    NULL, 0x0, NULL, HFILL }},
1848
16
  { &hf_extrememesh_ps_breq_old_mpr, {
1849
16
    "Old MPR Addr", "extrememesh.ps.breq.old_mpr", FT_ETHER, BASE_NONE,
1850
16
    NULL, 0x0, NULL, HFILL }},
1851
16
  { &hf_extrememesh_ps_breq_orig_pri, {
1852
16
    "Orig Priority", "extrememesh.ps.breq.orig_pri", FT_UINT8, BASE_HEX_DEC,
1853
16
    NULL, 0x0, NULL, HFILL }},
1854
16
  { &hf_extrememesh_ps_breq_proxy_pri, {
1855
16
    "Proxy Priority", "extrememesh.ps.breq.proxy_pri", FT_UINT8, BASE_HEX_DEC,
1856
16
    NULL, 0x0, NULL, HFILL }},
1857
16
  { &hf_extrememesh_ps_breq_vlan_id, {
1858
16
    "VLAN ID", "extrememesh.ps.breq.vlan_id", FT_UINT16, BASE_HEX_DEC,
1859
16
    NULL, 0x0, NULL, HFILL }},
1860
16
  { &hf_extrememesh_ps_breq_proxy_vlan_id, {
1861
16
    "Proxy VLAN ID", "extrememesh.ps.breq.proxy_vlan_id", FT_UINT16,
1862
16
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
1863
16
  { &hf_extrememesh_ps_breq_seq, {
1864
16
    "Sequence", "extrememesh.ps.breq.seq", FT_UINT32, BASE_HEX_DEC,
1865
16
    NULL, 0x0, NULL, HFILL }}
1866
16
  };
1867
1868
  /* extrememesh mesh path selection bind reply */
1869
16
  static hf_register_info hf_extrememesh_ps_brep[] = {
1870
16
  { &hf_extrememesh_ps_brep_version, {
1871
16
    "Version", "extrememesh.ps.brep.version", FT_UINT8, BASE_HEX_DEC,
1872
16
    NULL, 0x0, NULL, HFILL }},
1873
16
  { &hf_extrememesh_ps_brep_frame_type, {
1874
16
    "Frame Type", "extrememesh.ps.brep.type", FT_UINT8, BASE_HEX_DEC,
1875
16
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
1876
16
  { &hf_extrememesh_ps_brep_mpr_addr, {
1877
16
    "MPR Addr", "extrememesh.ps.brep.mpr_addr", FT_ETHER, BASE_NONE,
1878
16
    NULL, 0x0, NULL, HFILL }},
1879
16
  { &hf_extrememesh_ps_brep_orig_addr, {
1880
16
    "Orig Addr", "extrememesh.ps.brep.orig_addr", FT_ETHER, BASE_NONE,
1881
16
    NULL, 0x0, NULL, HFILL }},
1882
16
  { &hf_extrememesh_ps_brep_opt_tot_len, {
1883
16
    "Options Total Length", "extrememesh.ps.brep.opt_tot_len", FT_UINT16,
1884
16
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
1885
16
  { &hf_extrememesh_ps_brep_option, {
1886
16
    "Option", "extrememesh.ps.brep.option", FT_UINT8, BASE_HEX_DEC,
1887
16
    NULL, 0x0, NULL, HFILL }},
1888
16
  { &hf_extrememesh_ps_brep_option_len, {
1889
16
    "Length", "extrememesh.ps.brep.option_len", FT_UINT8, BASE_HEX_DEC,
1890
16
    NULL, 0x0, NULL, HFILL }},
1891
16
  { &hf_extrememesh_ps_brep_seq, {
1892
16
    "Sequence", "extrememesh.ps.brep.seq", FT_UINT32, BASE_HEX_DEC,
1893
16
    NULL, 0x0, NULL, HFILL }}
1894
16
  };
1895
1896
  /* extrememesh mesh path selection bind announcement */
1897
16
  static hf_register_info hf_extrememesh_ps_bann[] = {
1898
16
  { &hf_extrememesh_ps_bann_version, {
1899
16
    "Version", "extrememesh.ps.bann.version", FT_UINT8, BASE_HEX_DEC,
1900
16
    NULL, 0x0, NULL, HFILL }},
1901
16
  { &hf_extrememesh_ps_bann_frame_type, {
1902
16
    "Frame Type", "extrememesh.ps.bann.type", FT_UINT8, BASE_HEX_DEC,
1903
16
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
1904
16
  { &hf_extrememesh_ps_bann_mpr_addr, {
1905
16
    "MPR Addr", "extrememesh.ps.bann.mpr_addr", FT_ETHER, BASE_NONE,
1906
16
    NULL, 0x0, NULL, HFILL }},
1907
16
  { &hf_extrememesh_ps_bann_orig_addr, {
1908
16
    "Orig Addr", "extrememesh.ps.bann.orig_addr", FT_ETHER, BASE_NONE,
1909
16
    NULL, 0x0, NULL, HFILL }},
1910
16
  { &hf_extrememesh_ps_bann_opt_tot_len, {
1911
16
    "Options Total Length", "extrememesh.ps.bann.opt_tot_len", FT_UINT16,
1912
16
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
1913
16
  { &hf_extrememesh_ps_bann_option, {
1914
16
    "Option", "extrememesh.ps.bann.option", FT_UINT8, BASE_HEX_DEC,
1915
16
    NULL, 0x0, NULL, HFILL }},
1916
16
  { &hf_extrememesh_ps_bann_option_len, {
1917
16
    "Length", "extrememesh.ps.bann.option_len", FT_UINT8, BASE_HEX_DEC,
1918
16
    NULL, 0x0, NULL, HFILL }},
1919
16
  { &hf_extrememesh_ps_bann_proxy_addr, {
1920
16
    "Proxy Addr", "extrememesh.ps.bann.proxy_addr", FT_ETHER, BASE_NONE,
1921
16
    NULL, 0x0, NULL, HFILL }},
1922
16
  { &hf_extrememesh_ps_bann_old_root, {
1923
16
    "Old Root", "extrememesh.ps.bann.old_root", FT_ETHER, BASE_NONE,
1924
16
    NULL, 0x0, NULL, HFILL }},
1925
16
  { &hf_extrememesh_ps_bann_vlan_id, {
1926
16
    "Old Root Addr", "extrememesh.ps.bann.vlan_id", FT_UINT16, BASE_HEX_DEC,
1927
16
    NULL, 0x0, NULL, HFILL }},
1928
16
  { &hf_extrememesh_ps_bann_seq, {
1929
16
    "Sequence", "extrememesh.ps.bann.seq", FT_UINT32, BASE_HEX_DEC,
1930
16
    NULL, 0x0, NULL, HFILL }}
1931
16
  };
1932
1933
  /* extrememesh mesh path selection bind removed */
1934
16
  static hf_register_info hf_extrememesh_ps_bred[] = {
1935
16
  { &hf_extrememesh_ps_bred_version, {
1936
16
    "Version", "extrememesh.ps.bred.version", FT_UINT8, BASE_HEX_DEC,
1937
16
    NULL, 0x0, NULL, HFILL }},
1938
16
  { &hf_extrememesh_ps_bred_frame_type, {
1939
16
    "Frame Type", "extrememesh.ps.bred.type", FT_UINT8, BASE_HEX_DEC,
1940
16
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
1941
16
  { &hf_extrememesh_ps_bred_mpr_addr, {
1942
16
    "MPR Addr", "extrememesh.ps.bred.mpr_addr", FT_ETHER, BASE_NONE,
1943
16
    NULL, 0x0, NULL, HFILL }},
1944
16
  { &hf_extrememesh_ps_bred_orig_addr, {
1945
16
    "Orig Addr", "extrememesh.ps.bred.orig_addr", FT_ETHER, BASE_NONE,
1946
16
    NULL, 0x0, NULL, HFILL }},
1947
16
  { &hf_extrememesh_ps_bred_opt_tot_len, {
1948
16
    "Options Total Length", "extrememesh.ps.bred.opt_tot_len", FT_UINT16,
1949
16
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
1950
16
  { &hf_extrememesh_ps_bred_option, {
1951
16
    "Option", "extrememesh.ps.bred.option", FT_UINT8, BASE_HEX_DEC,
1952
16
    NULL, 0x0, NULL, HFILL }},
1953
16
  { &hf_extrememesh_ps_bred_option_len, {
1954
16
    "Length", "extrememesh.ps.bred.option_len", FT_UINT8, BASE_HEX_DEC,
1955
16
    NULL, 0x0, NULL, HFILL }},
1956
16
  { &hf_extrememesh_ps_bred_seq, {
1957
16
    "Sequence", "extrememesh.ps.bred.seq", FT_UINT32, BASE_HEX_DEC,
1958
16
    NULL, 0x0, NULL, HFILL }}
1959
16
  };
1960
1961
  /* extrememesh mesh path selection status request */
1962
16
  static hf_register_info hf_extrememesh_ps_sreq[] = {
1963
16
  { &hf_extrememesh_ps_sreq_version, {
1964
16
    "Version", "extrememesh.ps.sreq.version", FT_UINT8, BASE_HEX_DEC,
1965
16
    NULL, 0x0, NULL, HFILL }},
1966
16
  { &hf_extrememesh_ps_sreq_frame_type, {
1967
16
    "Frame Type", "extrememesh.ps.sreq.type", FT_UINT8, BASE_HEX_DEC,
1968
16
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
1969
16
  { &hf_extrememesh_ps_sreq_reserved, {
1970
16
    "Reserved", "extrememesh.ps.sreq.reserved", FT_UINT16, BASE_HEX_DEC,
1971
16
    NULL, 0x0, NULL, HFILL }},
1972
16
  { &hf_extrememesh_ps_sreq_orig_addr, {
1973
16
    "Orig Addr", "extrememesh.ps.sreq.orig_addr", FT_ETHER, BASE_NONE,
1974
16
    NULL, 0x0, NULL, HFILL }},
1975
16
  { &hf_extrememesh_ps_sreq_term_addr, {
1976
16
    "Term", "extrememesh.ps.sreq.term_addr", FT_ETHER, BASE_NONE,
1977
16
    NULL, 0x0, NULL, HFILL }},
1978
16
  { &hf_extrememesh_ps_sreq_opt_tot_len, {
1979
16
    "Options Total Length", "extrememesh.ps.sreq.opt_tot_len", FT_UINT16,
1980
16
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
1981
16
  { &hf_extrememesh_ps_sreq_option, {
1982
16
    "Option", "extrememesh.ps.sreq.option", FT_UINT16, BASE_HEX_DEC,
1983
16
    NULL, 0x0, NULL, HFILL }},
1984
16
  { &hf_extrememesh_ps_sreq_option_len, {
1985
16
    "Length", "extrememesh.ps.sreq.option_len", FT_UINT16, BASE_HEX_DEC,
1986
16
    NULL, 0x0, NULL, HFILL }},
1987
16
  { &hf_extrememesh_ps_sreq_vlan_id, {
1988
16
    "VLAN ID", "extrememesh.ps.sreq.vlan_id", FT_UINT16, BASE_HEX_DEC,
1989
16
    NULL, 0x0, NULL, HFILL }}
1990
16
  };
1991
1992
  /* extrememesh mesh path selection status reply */
1993
16
  static hf_register_info hf_extrememesh_ps_srep[] = {
1994
16
  { &hf_extrememesh_ps_srep_version, {
1995
16
    "Version", "extrememesh.ps.srep.version", FT_UINT8, BASE_HEX_DEC,
1996
16
    NULL, 0x0, NULL, HFILL }},
1997
16
  { &hf_extrememesh_ps_srep_frame_type, {
1998
16
    "Frame Type", "extrememesh.ps.srep.type", FT_UINT8, BASE_HEX_DEC,
1999
16
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
2000
16
  { &hf_extrememesh_ps_srep_flags, {
2001
16
    "Flags", "extrememesh.ps.srep.flags", FT_UINT8, BASE_HEX,
2002
16
    NULL, 0x0, NULL, HFILL }},
2003
16
  { &hf_extrememesh_ps_srep_flags_reserved, {
2004
16
    "Reserved", "extrememesh.ps.srep.flags.reserved", FT_UINT8, BASE_DEC,
2005
16
    NULL, 0xFE, NULL, HFILL }},
2006
16
  { &hf_extrememesh_ps_srep_flags_status, {
2007
16
    "Status Bit", "extrememesh.ps.srep.flags.status", FT_UINT8, BASE_DEC,
2008
16
    NULL, 0x01, NULL, HFILL }},
2009
16
  { &hf_extrememesh_ps_srep_hop_count, {
2010
16
    "Hop Count", "extrememesh.ps.srep.hop_count", FT_UINT8, BASE_HEX_DEC,
2011
16
    NULL, 0x0, NULL, HFILL }},
2012
16
  { &hf_extrememesh_ps_srep_orig_addr, {
2013
16
    "Orig Addr", "extrememesh.ps.srep.orig_addr", FT_ETHER, BASE_NONE,
2014
16
    NULL, 0x0, NULL, HFILL }},
2015
16
  { &hf_extrememesh_ps_srep_dest_addr, {
2016
16
    "Dest Addr", "extrememesh.ps.srep.dest_addr", FT_ETHER, BASE_NONE,
2017
16
    NULL, 0x0, NULL, HFILL }},
2018
16
  { &hf_extrememesh_ps_srep_term_addr, {
2019
16
    "Term Addr", "extrememesh.ps.srep.term_addr", FT_ETHER, BASE_NONE,
2020
16
    NULL, 0x0, NULL, HFILL }},
2021
16
  { &hf_extrememesh_ps_srep_opt_tot_len, {
2022
16
    "Options Total Length", "extrememesh.ps.srep.opt_tot_len", FT_UINT16,
2023
16
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2024
16
  { &hf_extrememesh_ps_srep_option, {
2025
16
    "Option", "extrememesh.ps.srep.option", FT_UINT16, BASE_HEX_DEC,
2026
16
    NULL, 0x0, NULL, HFILL }},
2027
16
  { &hf_extrememesh_ps_srep_option_len, {
2028
16
    "Length", "extrememesh.ps.srep.option_len", FT_UINT16, BASE_HEX_DEC,
2029
16
    NULL, 0x0, NULL, HFILL }},
2030
16
  { &hf_extrememesh_ps_srep_vlan_id, {
2031
16
    "VLAN ID", "extrememesh.ps.srep.vlan_id", FT_UINT16, BASE_HEX_DEC,
2032
16
    NULL, 0x0, NULL, HFILL }}
2033
16
  };
2034
2035
  /* extrememesh mesh path selection path request */
2036
16
  static hf_register_info hf_extrememesh_ps_preq[] = {
2037
16
  { &hf_extrememesh_ps_preq_version, {
2038
16
    "Version", "extrememesh.ps.preq.version", FT_UINT8, BASE_HEX_DEC,
2039
16
    NULL, 0x0, NULL, HFILL }},
2040
16
  { &hf_extrememesh_ps_preq_frame_type, {
2041
16
    "Frame Type", "extrememesh.ps.preq.type", FT_UINT8, BASE_DEC,
2042
16
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
2043
16
  { &hf_extrememesh_ps_preq_flags, {
2044
16
    "Flags", "extrememesh.ps.preq.flags", FT_UINT8, BASE_HEX,
2045
16
    NULL, 0x0, NULL, HFILL }},
2046
16
  { &hf_extrememesh_ps_preq_flags_broadcast, {
2047
16
    "Broadcast", "extrememesh.ps.preq.flags.broadcast", FT_UINT8, BASE_DEC,
2048
16
    NULL, 0x80, NULL, HFILL }},
2049
16
  { &hf_extrememesh_ps_preq_flags_periodic, {
2050
16
    "Periodic", "extrememesh.ps.preq.flags.periodic", FT_UINT8, BASE_DEC,
2051
16
    NULL, 0x40, NULL, HFILL }},
2052
16
  { &hf_extrememesh_ps_preq_flags_state, {
2053
16
    "State of the source node", "extrememesh.ps.preq.flags.state", FT_UINT8,
2054
16
    BASE_DEC, NULL, 0x20, NULL, HFILL }},
2055
16
  { &hf_extrememesh_ps_preq_flags_reserved, {
2056
16
    "Reserved", "extrememesh.ps.preq.flags.reserved", FT_UINT8, BASE_DEC,
2057
16
    NULL, 0x18, NULL, HFILL }},
2058
16
  { &hf_extrememesh_ps_preq_flags_gratuitous, {
2059
16
                "Gratuitous PREP Flag", "extrememesh.ps.preq.flags.gratuitous",
2060
16
    FT_UINT8, BASE_DEC, NULL, 0x04, NULL, HFILL }},
2061
16
  { &hf_extrememesh_ps_preq_flags_destination, {
2062
16
    "Destination only flag", "extrememesh.ps.preq.flags.destination",
2063
16
    FT_UINT8, BASE_DEC, NULL, 0x02, NULL, HFILL }},
2064
16
  { &hf_extrememesh_ps_preq_flags_unknown, {
2065
16
    "Unknown sequence number", "extrememesh.ps.preq.flags.unknown", FT_UINT8,
2066
16
    BASE_DEC, NULL, 0x01, NULL, HFILL }},
2067
16
  { &hf_extrememesh_ps_preq_hop_count, {
2068
16
    "Hop Count", "extrememesh.ps.preq.hop_count", FT_UINT8, BASE_HEX_DEC,
2069
16
    NULL, 0x0, NULL, HFILL }},
2070
16
  { &hf_extrememesh_ps_preq_ttl, {
2071
16
    "TTL", "extrememesh.ps.preq.ttl", FT_UINT32, BASE_HEX_DEC,
2072
16
    NULL, 0x0, NULL, HFILL }},
2073
16
  { &hf_extrememesh_ps_preq_path_metrics, {
2074
16
    "Path Metrics", "extrememesh.ps.preq.metrics", FT_UINT16, BASE_HEX_DEC,
2075
16
    NULL, 0x0, NULL, HFILL }},
2076
16
  { &hf_extrememesh_ps_preq_services, {
2077
16
    "Services", "extrememesh.ps.preq.services", FT_UINT8, BASE_HEX,
2078
16
    NULL, 0x0, NULL, HFILL }},
2079
16
  { &hf_extrememesh_ps_preq_services_reserved, {
2080
16
    "Reserved", "extrememesh.ps.preq.services.reserved", FT_UINT8, BASE_DEC,
2081
16
    NULL, 0xC0, NULL, HFILL }},
2082
16
  { &hf_extrememesh_ps_preq_services_mobile, {
2083
16
    "Mobile", "extrememesh.ps.preq.services.mobile", FT_UINT8, BASE_DEC,
2084
16
    NULL, 0x20, NULL, HFILL }},
2085
16
  { &hf_extrememesh_ps_preq_services_path_pref, {
2086
16
    "Path Preference", "extrememesh.ps.preq.services.path_pref", FT_UINT8,
2087
16
    BASE_DEC, NULL, 0x18, NULL, HFILL }},
2088
16
  { &hf_extrememesh_ps_preq_services_geo, {
2089
16
    "Geo", "extrememesh.ps.preq.services.geo", FT_UINT8, BASE_DEC,
2090
16
    NULL, 0x04, NULL, HFILL }},
2091
16
  { &hf_extrememesh_ps_preq_services_proxy, {
2092
16
    "Proxy", "extrememesh.ps.preq.services.proxy", FT_UINT8, BASE_DEC,
2093
16
    NULL, 0x02, NULL, HFILL }},
2094
16
  { &hf_extrememesh_ps_preq_services_root, {
2095
16
    "Root", "extrememesh.ps.preq.services.root", FT_UINT8, BASE_DEC,
2096
16
    NULL, 0x01, NULL, HFILL }},
2097
16
  { &hf_extrememesh_ps_preq_reserved, {
2098
16
    "Reserved", "extrememesh.ps.preq.reserved", FT_UINT8, BASE_HEX_DEC,
2099
16
    NULL, 0x0, NULL, HFILL }},
2100
16
  { &hf_extrememesh_ps_preq_id, {
2101
16
    "PREQ ID", "extrememesh.ps.preq.id", FT_UINT32, BASE_HEX_DEC,
2102
16
    NULL, 0x0, NULL, HFILL }},
2103
16
  { &hf_extrememesh_ps_preq_term_addr, {
2104
16
    "Term Addr", "extrememesh.ps.preq.term_addr", FT_ETHER, BASE_NONE,
2105
16
    NULL, 0x0, NULL, HFILL }},
2106
16
  { &hf_extrememesh_ps_preq_dest_addr, {
2107
16
    "Dest Addr", "extrememesh.ps.preq.dest_addr", FT_ETHER, BASE_NONE,
2108
16
    NULL, 0x0, NULL, HFILL }},
2109
16
  { &hf_extrememesh_ps_preq_dest_seq, {
2110
16
    "Dest Seq", "extrememesh.ps.preq.dest_seq", FT_UINT32, BASE_HEX_DEC,
2111
16
    NULL, 0x0, NULL, HFILL }},
2112
16
  { &hf_extrememesh_ps_preq_orig_addr, {
2113
16
    "Orig Addr", "extrememesh.ps.preq.orig_addr", FT_ETHER, BASE_NONE,
2114
16
    NULL, 0x0, NULL, HFILL }},
2115
16
  { &hf_extrememesh_ps_preq_orig_seq, {
2116
16
    "Orig Seq", "extrememesh.ps.preq.orig_seq", FT_UINT32, BASE_HEX_DEC,
2117
16
    NULL, 0x0, NULL, HFILL }},
2118
16
  { &hf_extrememesh_ps_preq_opt_tot_len, {
2119
16
    "Options Total Length", "extrememesh.ps.preq.opt_tot_len", FT_UINT16,
2120
16
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2121
16
  { &hf_extrememesh_ps_preq_option, {
2122
16
    "Option", "extrememesh.ps.preq.option", FT_UINT16, BASE_HEX_DEC,
2123
16
    NULL, 0x0, NULL, HFILL }},
2124
16
  { &hf_extrememesh_ps_preq_option_len, {
2125
16
    "Length", "extrememesh.ps.preq.option_len", FT_UINT16, BASE_HEX_DEC,
2126
16
    NULL, 0x0, NULL, HFILL }},
2127
16
  { &hf_extrememesh_ps_preq_mcast_sub, {
2128
16
    "MCAST Sub", "extrememesh.ps.preq.mcast_sub", FT_ETHER, BASE_NONE,
2129
16
    NULL, 0x0, NULL, HFILL }},
2130
16
  { &hf_extrememesh_ps_preq_vlan_id, {
2131
16
    "VLAN ID", "extrememesh.ps.preq.vlan_id", FT_UINT16, BASE_HEX_DEC,
2132
16
    NULL, 0x0, NULL, HFILL }},
2133
16
  { &hf_extrememesh_ps_preq_mint_id, {
2134
16
    "Mint ID", "extrememesh.ps.preq.mint_id", FT_UINT32, BASE_HEX,
2135
16
    NULL, 0x0, NULL, HFILL }}
2136
16
  };
2137
2138
  /* extrememesh mesh path selection path reply */
2139
16
  static hf_register_info hf_extrememesh_ps_prep[] = {
2140
16
  { &hf_extrememesh_ps_prep_version, {
2141
16
    "Version", "extrememesh.ps.prep.version", FT_UINT8, BASE_HEX_DEC,
2142
16
    NULL, 0x0, NULL, HFILL }},
2143
16
  { &hf_extrememesh_ps_prep_frame_type, {
2144
16
    "Frame Type", "extrememesh.ps.prep.type", FT_UINT8, BASE_DEC,
2145
16
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
2146
16
  { &hf_extrememesh_ps_prep_flags, {
2147
16
    "Flags", "extrememesh.ps.prep.flags", FT_UINT8, BASE_HEX,
2148
16
    NULL, 0x0, NULL, HFILL }},
2149
16
  { &hf_extrememesh_ps_prep_flags_reserved, {
2150
16
    "Reserved", "extrememesh.ps.prep.flags.reserved", FT_UINT8, BASE_DEC,
2151
16
    NULL, 0xF8, NULL, HFILL }},
2152
16
  { &hf_extrememesh_ps_prep_flags_new_route, {
2153
16
    "New Route", "extrememesh.ps.prep.flags.new_route", FT_UINT8, BASE_DEC,
2154
16
    NULL, 0x04, NULL, HFILL }},
2155
16
  { &hf_extrememesh_ps_prep_flags_repair, {
2156
16
    "Repair Flag", "extrememesh.ps.prep.flags.repair", FT_UINT8, BASE_DEC,
2157
16
    NULL, 0x02, NULL, HFILL }},
2158
16
  { &hf_extrememesh_ps_prep_flags_ack, {
2159
16
    "Acknowledgement Required", "extrememesh.ps.prep.flags.ack", FT_UINT8,
2160
16
    BASE_DEC, NULL, 0x01, NULL, HFILL }},
2161
16
  { &hf_extrememesh_ps_prep_hop_count, {
2162
16
    "Hop Count", "extrememesh.ps.prep.hop_count", FT_UINT8, BASE_HEX_DEC,
2163
16
    NULL, 0x0, NULL, HFILL }},
2164
16
  { &hf_extrememesh_ps_prep_path_metrics, {
2165
16
    "Path Metrics", "extrememesh.ps.prep.metrics", FT_UINT16, BASE_HEX_DEC,
2166
16
    NULL, 0x0, NULL, HFILL }},
2167
16
  { &hf_extrememesh_ps_prep_services, {
2168
16
    "Services", "extrememesh.ps.prep.services", FT_UINT8, BASE_HEX,
2169
16
    NULL, 0x0, NULL, HFILL }},
2170
16
  { &hf_extrememesh_ps_prep_services_reserved, {
2171
16
    "Reserved", "extrememesh.ps.prep.services.reserved", FT_UINT8, BASE_DEC,
2172
16
    NULL, 0xC0, NULL, HFILL }},
2173
16
  { &hf_extrememesh_ps_prep_services_mobile, {
2174
16
    "Mobile", "extrememesh.ps.prep.services.mobile", FT_UINT8, BASE_DEC,
2175
16
    NULL, 0x20, NULL, HFILL }},
2176
16
  { &hf_extrememesh_ps_prep_services_path_pref, {
2177
16
    "Path Preference", "extrememesh.ps.prep.services.path_pref", FT_UINT8,
2178
16
    BASE_DEC, NULL, 0x18, NULL, HFILL }},
2179
16
  { &hf_extrememesh_ps_prep_services_geo, {
2180
16
    "Geo", "extrememesh.ps.prep.services.geo", FT_UINT8, BASE_DEC,
2181
16
    NULL, 0x04, NULL, HFILL }},
2182
16
  { &hf_extrememesh_ps_prep_services_proxy, {
2183
16
    "Proxy", "extrememesh.ps.prep.services.proxy", FT_UINT8, BASE_DEC,
2184
16
    NULL, 0x02, NULL, HFILL }},
2185
16
  { &hf_extrememesh_ps_prep_services_root, {
2186
16
    "Root", "extrememesh.ps.prep.services.root", FT_UINT8, BASE_DEC,
2187
16
    NULL, 0x01, NULL, HFILL }},
2188
16
  { &hf_extrememesh_ps_prep_reserved, {
2189
16
    "Reserved", "extrememesh.ps.prep.reserved", FT_UINT8, BASE_HEX_DEC,
2190
16
    NULL, 0x0, NULL, HFILL }},
2191
16
  { &hf_extrememesh_ps_prep_term_addr, {
2192
16
    "Term Addr", "extrememesh.ps.prep.term_addr", FT_ETHER, BASE_NONE,
2193
16
    NULL, 0x0, NULL, HFILL }},
2194
16
  { &hf_extrememesh_ps_prep_dest_addr, {
2195
16
    "Dest Addr", "extrememesh.ps.prep.dest_addr", FT_ETHER, BASE_NONE,
2196
16
    NULL, 0x0, NULL, HFILL }},
2197
16
  { &hf_extrememesh_ps_prep_dest_seq, {
2198
16
    "Dest Seq", "extrememesh.ps.prep.dest_seq", FT_UINT32, BASE_HEX_DEC,
2199
16
    NULL, 0x0, NULL, HFILL }},
2200
16
  { &hf_extrememesh_ps_prep_orig_addr, {
2201
16
    "Orig Addr", "extrememesh.ps.prep.orig_addr", FT_ETHER, BASE_NONE,
2202
16
    NULL, 0x0, NULL, HFILL }},
2203
16
  { &hf_extrememesh_ps_prep_orig_seq, {
2204
16
    "Orig Seq", "extrememesh.ps.prep.orig_seq", FT_UINT32, BASE_HEX_DEC,
2205
16
    NULL, 0x0, NULL, HFILL }},
2206
16
  { &hf_extrememesh_ps_prep_lifetime, {
2207
16
    "Lifetime", "extrememesh.ps.prep.lifetime", FT_UINT32, BASE_HEX_DEC,
2208
16
    NULL, 0x0, NULL, HFILL }},
2209
16
  { &hf_extrememesh_ps_prep_opt_tot_len, {
2210
16
    "Options Total Length", "extrememesh.ps.prep.opt_tot_len", FT_UINT16,
2211
16
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2212
16
  { &hf_extrememesh_ps_prep_option, {
2213
16
    "Option", "extrememesh.ps.prep.option", FT_UINT16, BASE_HEX_DEC,
2214
16
    NULL, 0x0, NULL, HFILL }},
2215
16
  { &hf_extrememesh_ps_prep_option_len, {
2216
16
    "Length", "extrememesh.ps.prep.option_len", FT_UINT16, BASE_HEX_DEC,
2217
16
    NULL, 0x0, NULL, HFILL }},
2218
16
  { &hf_extrememesh_ps_prep_mcast_sub, {
2219
16
    "MCAST Sub", "extrememesh.ps.prep.mcast_sub", FT_ETHER, BASE_NONE,
2220
16
    NULL, 0x0, NULL, HFILL }},
2221
16
  { &hf_extrememesh_ps_prep_vlan_id, {
2222
16
    "VLAN ID", "extrememesh.ps.prep.vlan_id", FT_UINT16, BASE_HEX_DEC,
2223
16
    NULL, 0x0, NULL, HFILL }},
2224
16
  { &hf_extrememesh_ps_prep_mint_id, {
2225
16
    "Mint ID", "extrememesh.ps.prep.mint_id", FT_UINT32, BASE_HEX,
2226
16
    NULL, 0x0, NULL, HFILL }}
2227
16
  };
2228
2229
  /* extrememesh mesh path selection path error */
2230
16
  static hf_register_info hf_extrememesh_ps_perr[] = {
2231
16
  { &hf_extrememesh_ps_perr_version, {
2232
16
    "Version", "extrememesh.ps.perr.version", FT_UINT8, BASE_HEX_DEC,
2233
16
    NULL, 0x0, NULL, HFILL }},
2234
16
  { &hf_extrememesh_ps_perr_frame_type, {
2235
16
    "Frame Type", "extrememesh.ps.perr.type", FT_UINT8, BASE_DEC,
2236
16
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
2237
16
  { &hf_extrememesh_ps_perr_flags, {
2238
16
    "Flags", "extrememesh.ps.perr.flags", FT_UINT8, BASE_HEX,
2239
16
    NULL, 0x0, NULL, HFILL }},
2240
16
  { &hf_extrememesh_ps_perr_flags_reserved, {
2241
16
    "Reserved", "extrememesh.ps.perr.flags.reserved", FT_UINT8, BASE_DEC,
2242
16
    NULL, 0xFC, NULL, HFILL }},
2243
16
  { &hf_extrememesh_ps_perr_flags_warning, {
2244
16
    "Warning", "extrememesh.ps.perr.flags.warning", FT_UINT8, BASE_DEC,
2245
16
    NULL, 0x02, NULL, HFILL }},
2246
16
  { &hf_extrememesh_ps_perr_flags_no_delete, {
2247
16
    "No Delete", "extrememesh.ps.perr.flags.no_delete", FT_UINT8, BASE_DEC,
2248
16
    NULL, 0x01, NULL, HFILL }},
2249
16
  { &hf_extrememesh_ps_perr_dest_count, {
2250
16
    "Dest Count", "extrememesh.ps.perr.dest_count", FT_UINT8, BASE_HEX_DEC,
2251
16
    NULL, 0x0, NULL, HFILL }},
2252
16
  { &hf_extrememesh_ps_perr_unrch_dest, {
2253
16
    "Unrch Dest", "extrememesh.ps.perr.unrch_dest", FT_ETHER, BASE_NONE,
2254
16
    NULL, 0x0, NULL, HFILL }},
2255
16
  { &hf_extrememesh_ps_perr_unrch_dest_seq, {
2256
16
    "Unrch Dest Seq", "extrememesh.ps.perr.unrch_dest_seq", FT_UINT32,
2257
16
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2258
16
  };
2259
2260
  /* extrememesh mesh path selection path reset */
2261
16
  static hf_register_info hf_extrememesh_ps_prst[] = {
2262
16
  { &hf_extrememesh_ps_prst_version, {
2263
16
    "Version", "extrememesh.ps.prst.version", FT_UINT8, BASE_HEX_DEC,
2264
16
    NULL, 0x0, NULL, HFILL }},
2265
16
  { &hf_extrememesh_ps_prst_frame_type, {
2266
16
    "Frame Type", "extrememesh.ps.prst.type", FT_UINT8, BASE_HEX_DEC,
2267
16
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
2268
16
  { &hf_extrememesh_ps_prst_hops_to_live, {
2269
16
    "Hops To Live", "extrememesh.ps.prst.hops_to_live", FT_UINT8,
2270
16
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2271
16
  { &hf_extrememesh_ps_prst_reserved, {
2272
16
    "Reserved", "extrememesh.ps.prst.reserved", FT_UINT8, BASE_HEX_DEC,
2273
16
    NULL, 0x0, NULL, HFILL }},
2274
16
  { &hf_extrememesh_ps_prst_id, {
2275
16
    "PRST ID", "extrememesh.ps.prst.id", FT_UINT32, BASE_HEX_DEC,
2276
16
    NULL, 0x0, NULL, HFILL }},
2277
16
  { &hf_extrememesh_ps_prst_orig_addr, {
2278
16
    "Orig Addr", "extrememesh.ps.prst.orig_addr", FT_ETHER, BASE_NONE,
2279
16
    NULL, 0x0, NULL, HFILL }},
2280
16
  { &hf_extrememesh_ps_prst_dest_addr, {
2281
16
    "Dest Addr", "extrememesh.ps.prst.dest_addr", FT_ETHER, BASE_NONE,
2282
16
    NULL, 0x0, NULL, HFILL }},
2283
16
  };
2284
2285
  /* extrememesh mesh path selection proxy remove */
2286
16
  static hf_register_info hf_extrememesh_ps_prem[] = {
2287
16
  { &hf_extrememesh_ps_prem_version, {
2288
16
    "Version", "extrememesh.ps.prem.version", FT_UINT8, BASE_HEX_DEC,
2289
16
    NULL, 0x0, NULL, HFILL }},
2290
16
  { &hf_extrememesh_ps_prem_frame_type, {
2291
16
    "Frame Type", "extrememesh.ps.prem.type", FT_UINT8, BASE_HEX_DEC,
2292
16
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
2293
16
  { &hf_extrememesh_ps_prem_mpr_addr, {
2294
16
    "MPR Addr", "extrememesh.ps.prem.mpr_addr", FT_ETHER, BASE_NONE,
2295
16
    NULL, 0x0, NULL, HFILL }},
2296
16
  { &hf_extrememesh_ps_prem_orig_addr, {
2297
16
    "Orig Addr", "extrememesh.ps.prem.orig_addr", FT_ETHER, BASE_NONE,
2298
16
    NULL, 0x0, NULL, HFILL }},
2299
16
  { &hf_extrememesh_ps_prem_opt_tot_len, {
2300
16
    "Options Total Length", "extrememesh.ps.prem.opt_tot_len", FT_UINT16,
2301
16
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2302
16
  { &hf_extrememesh_ps_prem_option, {
2303
16
    "Option", "extrememesh.ps.prem.option", FT_UINT8,
2304
16
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2305
16
  { &hf_extrememesh_ps_prem_option_len, {
2306
16
    "Length", "extrememesh.ps.prem.option_len", FT_UINT8,
2307
16
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2308
16
  { &hf_extrememesh_ps_prem_proxy_addr, {
2309
16
    "Proxy Addr", "extrememesh.ps.prem.proxy_addr", FT_ETHER, BASE_NONE,
2310
16
    NULL, 0x0, NULL, HFILL }},
2311
16
  { &hf_extrememesh_ps_prem_proxy_vlan_id, {
2312
16
    "VLAN ID", "extrememesh.ps.prem.vlan_id", FT_UINT16, BASE_HEX_DEC,
2313
16
    NULL, 0x0, NULL, HFILL }}
2314
16
  };
2315
2316
  /* extrememesh mesh path selection trace path */
2317
16
  static hf_register_info hf_extrememesh_ps_trace[] = {
2318
16
  { &hf_extrememesh_ps_trace_version, {
2319
16
    "Version", "extrememesh.ps.trace.version", FT_UINT8, BASE_HEX_DEC,
2320
16
    NULL, 0x0, NULL, HFILL }},
2321
16
  { &hf_extrememesh_ps_trace_frame_type, {
2322
16
    "Frame Type", "extrememesh.ps.trace.type", FT_UINT8, BASE_HEX_DEC,
2323
16
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
2324
16
  { &hf_extrememesh_ps_trace_flags, {
2325
16
    "Flags", "extrememesh.ps.trace.flags", FT_UINT8, BASE_HEX,
2326
16
    NULL, 0x0, NULL, HFILL }},
2327
16
  { &hf_extrememesh_ps_trace_flags_reserved, {
2328
16
    "Reserved", "extrememesh.ps.trace.flags.reserved", FT_UINT8, BASE_DEC,
2329
16
    NULL, 0xFC, NULL, HFILL }},
2330
16
  { &hf_extrememesh_ps_trace_flags_reply, {
2331
16
    "Reply Flag", "extrememesh.ps.trace.flags.reply", FT_UINT8, BASE_DEC,
2332
16
    NULL, 0x02, NULL, HFILL }},
2333
16
  { &hf_extrememesh_ps_trace_flags_no_path, {
2334
16
    "No Path Flag", "extrememesh.ps.trace.flags.no_path", FT_UINT8, BASE_DEC,
2335
16
    NULL, 0x01, NULL, HFILL }},
2336
16
  { &hf_extrememesh_ps_trace_dest_addr, {
2337
16
    "Dest Addr", "extrememesh.ps.trace.dest_addr", FT_ETHER, BASE_NONE,
2338
16
    NULL, 0x0, NULL, HFILL }},
2339
16
  { &hf_extrememesh_ps_trace_orig_addr, {
2340
16
    "Orig Addr", "extrememesh.ps.trace.orig_addr", FT_ETHER, BASE_NONE,
2341
16
    NULL, 0x0, NULL, HFILL }},
2342
16
  { &hf_extrememesh_ps_trace_hop_count, {
2343
16
    "Hop Count", "extrememesh.ps.trace.hop_count", FT_UINT8, BASE_HEX_DEC,
2344
16
    NULL, 0x0, NULL, HFILL }},
2345
16
  { &hf_extrememesh_ps_trace_addl_path, {
2346
16
    "Addl Path", "extrememesh.ps.trace.addl_path", FT_ETHER, BASE_NONE,
2347
16
    NULL, 0x0, NULL, HFILL }},
2348
16
  };
2349
2350
  /* extrememesh mesh path selection proxy error */
2351
16
  static hf_register_info hf_extrememesh_ps_prer[] = {
2352
16
  { &hf_extrememesh_ps_prer_version, {
2353
16
    "Version", "extrememesh.ps.prer.version", FT_UINT8, BASE_HEX_DEC,
2354
16
    NULL, 0x0, NULL, HFILL }},
2355
16
  { &hf_extrememesh_ps_prer_frame_type, {
2356
16
    "Frame Type", "extrememesh.ps.prer.type", FT_UINT8, BASE_HEX_DEC,
2357
16
    VALS(mot_ps_packet_types), 0x0, NULL, HFILL }},
2358
16
  { &hf_extrememesh_ps_prer_dest_count, {
2359
16
    "Dest Count", "extrememesh.ps.prer.dest_count", FT_UINT8, BASE_HEX_DEC,
2360
16
    NULL, 0x0, NULL, HFILL }},
2361
16
  { &hf_extrememesh_ps_prer_reserved, {
2362
16
    "Reserved", "extrememesh.ps.prer.reserved", FT_UINT8, BASE_HEX_DEC,
2363
16
    NULL, 0x0, NULL, HFILL }},
2364
16
  { &hf_extrememesh_ps_prer_orig_addr, {
2365
16
    "Orig Addr", "extrememesh.ps.prer.orig_addr", FT_ETHER, BASE_NONE,
2366
16
    NULL, 0x0, NULL, HFILL }},
2367
16
  { &hf_extrememesh_ps_prer_dest_addr, {
2368
16
    "Dest Addr", "extrememesh.ps.prer.dest_addr", FT_ETHER, BASE_NONE,
2369
16
    NULL, 0x0, NULL, HFILL }},
2370
16
  { &hf_extrememesh_ps_prer_unrch_addr, {
2371
16
    "Unrch Proxy", "extrememesh.ps.prer.unrch_addr", FT_ETHER, BASE_NONE,
2372
16
    NULL, 0x0, NULL, HFILL }},
2373
16
  { &hf_extrememesh_ps_prer_opt_tot_len, {
2374
16
    "Options Total Length", "extrememesh.ps.prer.opt_tot_len", FT_UINT16,
2375
16
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2376
16
  { &hf_extrememesh_ps_prer_option, {
2377
16
    "Option", "extrememesh.ps.prer.option", FT_UINT16, BASE_HEX_DEC,
2378
16
    NULL, 0x0, NULL, HFILL }},
2379
16
  { &hf_extrememesh_ps_prer_option_len, {
2380
16
    "Length", "extrememesh.ps.prer.option_len", FT_UINT16, BASE_HEX_DEC,
2381
16
    NULL, 0x0, NULL, HFILL }},
2382
16
  { &hf_extrememesh_ps_prer_vlan_id, {
2383
16
    "VLAN ID", "extrememesh.ps.prer.vlan_id", FT_UINT16, BASE_HEX_DEC,
2384
16
    NULL, 0x0, NULL, HFILL }}
2385
16
  };
2386
2387
  /* extrememesh mesh L2 update */
2388
16
  static hf_register_info hf_extrememesh_l2upd[] = {
2389
16
  { &hf_extrememesh_l2upd_proxy_owner, {
2390
16
    "Proxy Owner Addr", "extrememesh.l2upd.proxy_owner", FT_ETHER,
2391
16
    BASE_NONE, NULL, 0x0, NULL, HFILL }},
2392
16
  { &hf_extrememesh_l2upd_ballast, {
2393
16
    "Ballast", "extrememesh.l2upd.ballast", FT_BYTES, BASE_NONE,
2394
16
    NULL, 0x0, NULL, HFILL }}
2395
16
  };
2396
2397
  /* extrememesh mesh probe message */
2398
16
  static hf_register_info hf_extrememesh_probe[] = {
2399
16
  { &hf_extrememesh_probe_version, {
2400
16
    "Version", "extrememesh.probe.version", FT_UINT8, BASE_HEX_DEC,
2401
16
    NULL, 0x0, NULL, HFILL }},
2402
16
  { &hf_extrememesh_probe_op_code, {
2403
16
    "Op-code", "extrememesh.probe.op_code", FT_UINT8, BASE_HEX_DEC,
2404
16
    NULL, 0x0, NULL, HFILL }},
2405
16
  { &hf_extrememesh_probe_flags, {
2406
16
    "Flags", "extrememesh.probe.flags", FT_UINT8, BASE_HEX_DEC,
2407
16
    NULL, 0x0, NULL, HFILL }},
2408
16
  { &hf_extrememesh_probe_flags_reserved, {
2409
16
    "Reserved", "extrememesh.probe.flags.reserved", FT_UINT8, BASE_DEC,
2410
16
    NULL, 0xFE, NULL, HFILL }},
2411
16
   { &hf_extrememesh_probe_flags_reply, {
2412
16
    "Reply", "extrememesh.probe.flags.reply", FT_UINT8, BASE_DEC,
2413
16
    NULL, 0x01, NULL, HFILL }},
2414
16
  { &hf_extrememesh_probe_priority, {
2415
16
    "Priority", "extrememesh.probe.priority", FT_UINT8, BASE_HEX_DEC,
2416
16
    NULL, 0x0, NULL, HFILL }},
2417
16
  { &hf_extrememesh_probe_job_id, {
2418
16
    "Job ID", "extrememesh.probe.job_id", FT_UINT16, BASE_HEX_DEC,
2419
16
    NULL, 0x0, NULL, HFILL }},
2420
16
  { &hf_extrememesh_probe_sequence, {
2421
16
    "Sequence Number", "extrememesh.probe.sequence", FT_UINT32, BASE_HEX_DEC,
2422
16
    NULL, 0x0, NULL, HFILL }},
2423
16
  { &hf_extrememesh_probe_ballast_len, {
2424
16
    "Ballast Length", "extrememesh.probe.ballast_len", FT_UINT16,
2425
16
    BASE_HEX_DEC, NULL, 0x0, NULL, HFILL }},
2426
16
  { &hf_extrememesh_probe_ballast, {
2427
16
    "Ballast", "extrememesh.probe.ballast", FT_BYTES, BASE_NONE,
2428
16
    NULL, 0x0, NULL, HFILL }}
2429
16
  };
2430
2431
16
  static int *ett[] = {
2432
16
    &ett_extrememesh,
2433
16
    &ett_extrememesh_mch,
2434
16
    &ett_extrememesh_hello,
2435
16
    &ett_extrememesh_security,
2436
16
    &ett_extrememesh_cfpu,
2437
16
    &ett_extrememesh_eapom,
2438
16
    &ett_extrememesh_ps
2439
16
  };
2440
2441
  /* registration */
2442
  /* extrememesh mesh */
2443
16
  proto_extrememesh = proto_register_protocol("Extreme Mesh", "EXTREME MESH", "extrememesh");
2444
16
  proto_register_field_array(proto_extrememesh, hf_extrememesh, array_length(hf_extrememesh));
2445
16
  proto_register_subtree_array(ett, array_length(ett));
2446
2447
16
  extrememesh_handle = register_dissector("extrememesh", dissect_extrememesh, proto_extrememesh);
2448
2449
  /* extrememesh mesh control header */
2450
16
  proto_extrememesh_mch = proto_register_protocol("Extreme Mesh Control Header", "EXTREME MCH", "extrememesh_mch");
2451
16
  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
16
  proto_extrememesh_l2upd = proto_register_protocol("Extreme Mesh L2 Update", "EXTREME L2UPD", "extrememesh_l2upd");
2474
16
  proto_register_field_array(proto_extrememesh_l2upd, hf_extrememesh_l2upd, array_length(hf_extrememesh_l2upd));
2475
2476
  /* extrememesh mesh probe message */
2477
16
  proto_extrememesh_probe = proto_register_protocol("Extreme Mesh Probe Message", "EXTREME PROBE", "extrememesh_probe");
2478
16
  proto_register_field_array(proto_extrememesh_probe, hf_extrememesh_probe, array_length(hf_extrememesh_probe));
2479
2480
  /* extrememesh mesh path selection authorization request */
2481
16
  proto_extrememesh_ps_areq = proto_register_protocol("Extreme Mesh Path Selection Authorization Request", "EXTREME PS AREQ", "extrememesh_ps_areq");
2482
16
  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
16
  proto_extrememesh_ps_arep = proto_register_protocol("Extreme Mesh Path Selection Authorization Reply", "EXTREME PS AREP", "extrememesh_ps_arep");
2486
16
  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
16
  proto_extrememesh_ps_breq = proto_register_protocol("Extreme Mesh Path Selection Bind Request", "EXTREME PS BREQ", "extrememesh_ps_breq");
2490
16
  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
16
  proto_extrememesh_ps_brep = proto_register_protocol("Extreme Mesh Path Selection Bind Reply", "EXTREME PS BREP", "extrememesh_ps_brep");
2494
16
  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
16
  proto_extrememesh_ps_bann = proto_register_protocol("Extreme Mesh Path Selection Bind Announcement", "EXTREME PS BANN", "extrememesh_ps_bann");
2498
16
  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
16
  proto_extrememesh_ps_bred = proto_register_protocol("Extreme Mesh Path Selection Bind Removed", "EXTREME PS BRED", "extrememesh_ps_bred");
2502
16
  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
16
  proto_extrememesh_ps_sreq = proto_register_protocol("Extreme Mesh Path Selection Status Request", "EXTREME PS SREQ", "extrememesh_ps_sreq");
2506
16
  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
16
  proto_extrememesh_ps_srep = proto_register_protocol("Extreme Mesh Path Selection Status Reply", "EXTREME PS SREP", "extrememesh_ps_srep");
2510
16
  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
16
  proto_extrememesh_ps_preq = proto_register_protocol("Extreme Mesh Path Selection Path Request", "EXTREME PS PREQ", "extrememesh_ps_preq");
2514
16
  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
16
  proto_extrememesh_ps_prep = proto_register_protocol("Extreme Mesh Path Selection Path Reply", "EXTREME PS PREP", "extrememesh_ps_prep");
2518
16
  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
16
  proto_extrememesh_ps_perr = proto_register_protocol("Extreme Mesh Path Selection Path Error", "EXTREME PS PERR", "extrememesh_ps_perr");
2522
16
  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
16
  proto_extrememesh_ps_prst = proto_register_protocol("Extreme Mesh Path Selection Path Reset", "EXTREME PS PRST", "extrememesh_ps_prst");
2526
16
  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
16
  proto_extrememesh_ps_prem = proto_register_protocol("Extreme Mesh Path Selection Proxy Remove", "EXTREME PS PREM", "extrememesh_ps_prem");
2530
16
  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
16
  proto_extrememesh_ps_trace = proto_register_protocol("Extreme Mesh Path Selection Trace Path", "EXTREME PS TRACE", "extrememesh_ps_trace");
2534
16
  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
16
  proto_extrememesh_ps_prer = proto_register_protocol("Extreme Mesh Path Selection Proxy Error", "EXTREME PS PRER", "extrememesh_ps_prer");
2538
16
  proto_register_field_array(proto_extrememesh_ps_prer, hf_extrememesh_ps_prer, array_length(hf_extrememesh_ps_prer));
2539
16
}
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
16
{
2555
16
  eth_withoutfcs_handle = find_dissector("eth_withoutfcs");
2556
2557
16
  dissector_add_uint("ethertype", ETHERTYPE_IEEE_EXTREME_MESH, extrememesh_handle);
2558
16
}