2 * Routines for LBM Topic Resolution Packet dissection
4 * Copyright (c) 2005-2014 Informatica Corporation. All Rights Reserved.
6 * Wireshark - Network traffic analyzer
7 * By Gerald Combs <gerald@wireshark.org>
8 * Copyright 1998 Gerald Combs
10 * SPDX-License-Identifier: GPL-2.0-or-later
15 #include <epan/packet.h>
16 #include <epan/address.h>
17 #include <epan/strutil.h>
18 #include <epan/prefs.h>
20 #include <epan/stats_tree.h>
21 #include <epan/expert.h>
23 #include <epan/to_str.h>
24 #include <wsutil/pint.h>
25 #include "packet-lbm.h"
26 #include "packet-lbtru.h"
27 #include "packet-lbtrm.h"
28 #include "packet-lbttcp.h"
30 #define LBMR_MAX_NAMELEN 256
32 void proto_register_lbmr(void);
33 void proto_reg_handoff_lbmr(void);
35 /*----------------------------------------------------------------------------*/
36 /* LBT-IPC transport management. */
37 /*----------------------------------------------------------------------------*/
47 static wmem_tree_t
* lbtipc_transport_table
;
49 #define LBTIPC_KEY_ELEMENT_COUNT 3
50 #define LBTIPC_KEY_ELEMENT_HOST_ID 0
51 #define LBTIPC_KEY_ELEMENT_SESSION_ID 1
52 #define LBTIPC_KEY_ELEMENT_XPORT_ID 2
54 static void lbtipc_transport_init(void)
56 lbtipc_transport_table
= wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
59 static lbtipc_transport_t
* lbtipc_transport_find(uint32_t host_id
, uint32_t session_id
, uint16_t xport_id
)
61 lbtipc_transport_t
* entry
= NULL
;
62 uint32_t keyval
[LBTIPC_KEY_ELEMENT_COUNT
];
63 wmem_tree_key_t tkey
[2];
65 keyval
[LBTIPC_KEY_ELEMENT_HOST_ID
] = host_id
;
66 keyval
[LBTIPC_KEY_ELEMENT_SESSION_ID
] = session_id
;
67 keyval
[LBTIPC_KEY_ELEMENT_XPORT_ID
] = (uint32_t) xport_id
;
68 tkey
[0].length
= LBTIPC_KEY_ELEMENT_COUNT
;
72 entry
= (lbtipc_transport_t
*) wmem_tree_lookup32_array(lbtipc_transport_table
, tkey
);
76 static lbtipc_transport_t
* lbtipc_transport_add(uint32_t host_id
, uint32_t session_id
, uint16_t xport_id
)
78 lbtipc_transport_t
* entry
;
79 uint32_t keyval
[LBTIPC_KEY_ELEMENT_COUNT
];
80 wmem_tree_key_t tkey
[2];
82 entry
= lbtipc_transport_find(host_id
, session_id
, xport_id
);
87 entry
= wmem_new(wmem_file_scope(), lbtipc_transport_t
);
88 entry
->host_id
= host_id
;
89 entry
->session_id
= session_id
;
90 entry
->xport_id
= xport_id
;
91 entry
->channel
= lbm_channel_assign(LBM_CHANNEL_TRANSPORT_LBTIPC
);
92 keyval
[LBTIPC_KEY_ELEMENT_HOST_ID
] = host_id
;
93 keyval
[LBTIPC_KEY_ELEMENT_SESSION_ID
] = session_id
;
94 keyval
[LBTIPC_KEY_ELEMENT_XPORT_ID
] = (uint32_t) xport_id
;
95 tkey
[0].length
= LBTIPC_KEY_ELEMENT_COUNT
;
99 wmem_tree_insert32_array(lbtipc_transport_table
, tkey
, (void *) entry
);
103 static char * lbtipc_transport_source_string(uint32_t host_id _U_
, uint32_t session_id
, uint16_t xport_id
)
105 return (wmem_strdup_printf(wmem_file_scope(), "LBT-IPC:%x:%" PRIu16
, session_id
, xport_id
));
108 /*----------------------------------------------------------------------------*/
109 /* LBT-SMX transport management. */
110 /*----------------------------------------------------------------------------*/
118 } lbtsmx_transport_t
;
120 static wmem_tree_t
* lbtsmx_transport_table
;
122 #define LBTSMX_KEY_ELEMENT_COUNT 3
123 #define LBTSMX_KEY_ELEMENT_HOST_ID 0
124 #define LBTSMX_KEY_ELEMENT_SESSION_ID 1
125 #define LBTSMX_KEY_ELEMENT_XPORT_ID 2
127 static void lbtsmx_transport_init(void)
129 lbtsmx_transport_table
= wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
132 static lbtsmx_transport_t
* lbtsmx_transport_find(uint32_t host_id
, uint32_t session_id
, uint16_t xport_id
)
134 lbtsmx_transport_t
* entry
= NULL
;
135 uint32_t keyval
[LBTSMX_KEY_ELEMENT_COUNT
];
136 wmem_tree_key_t tkey
[2];
138 keyval
[LBTSMX_KEY_ELEMENT_HOST_ID
] = host_id
;
139 keyval
[LBTSMX_KEY_ELEMENT_SESSION_ID
] = session_id
;
140 keyval
[LBTSMX_KEY_ELEMENT_XPORT_ID
] = (uint32_t) xport_id
;
141 tkey
[0].length
= LBTSMX_KEY_ELEMENT_COUNT
;
142 tkey
[0].key
= keyval
;
145 entry
= (lbtsmx_transport_t
*) wmem_tree_lookup32_array(lbtsmx_transport_table
, tkey
);
149 static lbtsmx_transport_t
* lbtsmx_transport_add(uint32_t host_id
, uint32_t session_id
, uint16_t xport_id
)
151 lbtsmx_transport_t
* entry
;
152 uint32_t keyval
[LBTSMX_KEY_ELEMENT_COUNT
];
153 wmem_tree_key_t tkey
[2];
155 entry
= lbtsmx_transport_find(host_id
, session_id
, xport_id
);
160 entry
= wmem_new(wmem_file_scope(), lbtsmx_transport_t
);
161 entry
->host_id
= host_id
;
162 entry
->session_id
= session_id
;
163 entry
->xport_id
= xport_id
;
164 entry
->channel
= lbm_channel_assign(LBM_CHANNEL_TRANSPORT_LBTSMX
);
165 keyval
[LBTSMX_KEY_ELEMENT_HOST_ID
] = host_id
;
166 keyval
[LBTSMX_KEY_ELEMENT_SESSION_ID
] = session_id
;
167 keyval
[LBTSMX_KEY_ELEMENT_XPORT_ID
] = (uint32_t) xport_id
;
168 tkey
[0].length
= LBTSMX_KEY_ELEMENT_COUNT
;
169 tkey
[0].key
= keyval
;
172 wmem_tree_insert32_array(lbtsmx_transport_table
, tkey
, (void *) entry
);
176 static char * lbtsmx_transport_source_string(uint32_t host_id _U_
, uint32_t session_id
, uint16_t xport_id
)
178 return (wmem_strdup_printf(wmem_file_scope(), "LBT-SMX:%x:%" PRIu16
, session_id
, xport_id
));
181 /*----------------------------------------------------------------------------*/
182 /* LBT-RDMA transport management. */
183 /*----------------------------------------------------------------------------*/
187 address source_address
;
191 } lbtrdma_transport_t
;
193 static wmem_tree_t
* lbtrdma_transport_table
;
195 #define LBTRDMA_KEY_ELEMENT_COUNT 3
196 #define LBTRDMA_KEY_ELEMENT_SOURCE_ADDRESS 0
197 #define LBTRDMA_KEY_ELEMENT_SESSION_ID 1
198 #define LBTRDMA_KEY_ELEMENT_PORT 2
200 static void lbtrdma_transport_init(void)
202 lbtrdma_transport_table
= wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
205 static void lbtrdma_transport_build_key(uint32_t * key_value
, wmem_tree_key_t
* key
, const lbtrdma_transport_t
* transport
)
209 memcpy(&val
, transport
->source_address
.data
, sizeof(uint32_t));
210 key_value
[LBTRDMA_KEY_ELEMENT_SOURCE_ADDRESS
] = val
;
211 key_value
[LBTRDMA_KEY_ELEMENT_SESSION_ID
] = transport
->session_id
;
212 key_value
[LBTRDMA_KEY_ELEMENT_PORT
] = (uint32_t) transport
->port
;
213 key
[0].length
= LBTRDMA_KEY_ELEMENT_COUNT
;
214 key
[0].key
= key_value
;
219 static lbtrdma_transport_t
* lbtrdma_transport_find(const address
* source_address
, uint32_t session_id
, uint16_t port
)
221 lbtrdma_transport_t key
;
222 lbtrdma_transport_t
* entry
= NULL
;
223 uint32_t keyval
[LBTRDMA_KEY_ELEMENT_COUNT
];
224 wmem_tree_key_t tkey
[2];
226 memset((void *)&key
, 0, sizeof(lbtrdma_transport_t
));
227 copy_address_shallow(&(key
.source_address
), source_address
);
228 key
.session_id
= session_id
;
230 lbtrdma_transport_build_key(keyval
, tkey
, &key
);
231 entry
= (lbtrdma_transport_t
*) wmem_tree_lookup32_array(lbtrdma_transport_table
, tkey
);
235 static lbtrdma_transport_t
* lbtrdma_transport_add(const address
* source_address
, uint32_t session_id
, uint16_t port
)
237 lbtrdma_transport_t
* entry
;
238 uint32_t keyval
[LBTRDMA_KEY_ELEMENT_COUNT
];
239 wmem_tree_key_t tkey
[2];
241 entry
= lbtrdma_transport_find(source_address
, session_id
, port
);
246 entry
= wmem_new(wmem_file_scope(), lbtrdma_transport_t
);
247 copy_address_wmem(wmem_file_scope(), &(entry
->source_address
), source_address
);
248 entry
->session_id
= session_id
;
250 entry
->channel
= lbm_channel_assign(LBM_CHANNEL_TRANSPORT_LBTRDMA
);
251 lbtrdma_transport_build_key(keyval
, tkey
, entry
);
252 wmem_tree_insert32_array(lbtrdma_transport_table
, tkey
, (void *) entry
);
256 static char * lbtrdma_transport_source_string(const address
* source_address _U_
, uint32_t session_id
, uint16_t port
)
258 return (wmem_strdup_printf(wmem_file_scope(), "LBT-RDMA:%x:%" PRIu16
, session_id
, port
));
261 /*----------------------------------------------------------------------------*/
262 /* Packet layouts. */
263 /*----------------------------------------------------------------------------*/
265 /* LBMR main header. */
268 lbm_uint8_t ver_type
;
272 #define O_LBMR_HDR_T_VER_TYPE OFFSETOF(lbmr_hdr_t, ver_type)
273 #define L_LBMR_HDR_T_VER_TYPE SIZEOF(lbmr_hdr_t, ver_type)
274 #define O_LBMR_HDR_T_TQRS OFFSETOF(lbmr_hdr_t, tqrs)
275 #define L_LBMR_HDR_T_TQRS SIZEOF(lbmr_hdr_t, tqrs)
276 #define O_LBMR_HDR_T_TIRS OFFSETOF(lbmr_hdr_t, tirs)
277 #define L_LBMR_HDR_T_TIRS SIZEOF(lbmr_hdr_t, tirs)
278 #define L_LBMR_HDR_T (int) sizeof(lbmr_hdr_t)
280 #define LBMR_HDR_VER_VER_MASK 0xf0
281 #define LBMR_HDR_VER_TYPE_MASK 0x07
282 #define LBMR_HDR_VER(x) (((x) & LBMR_HDR_VER_VER_MASK) >> 4)
283 #define LBMR_HDR_TYPE(x) ((x) & LBMR_HDR_VER_TYPE_MASK)
285 #define LBMR_HDR_TYPE_NORMAL 0x0
286 #define LBMR_HDR_TYPE_WC_TQRS 0x1
287 #define LBMR_HDR_TYPE_UCAST_RCV_ALIVE 0x2
288 #define LBMR_HDR_TYPE_UCAST_SRC_ALIVE 0x3
289 #define LBMR_HDR_TYPE_TOPIC_MGMT 0x4
290 #define LBMR_HDR_TYPE_QUEUE_RES 0x6
291 #define LBMR_HDR_TYPE_EXT 0x7
292 #define LBMR_HDR_TYPE_OPTS_MASK 0x8
294 /* LBMR extended header. */
297 lbm_uint8_t ver_type
;
298 lbm_uint8_t ext_type
;
300 } lbmr_hdr_ext_type_t
;
301 #define O_LBMR_HDR_EXT_TYPE_T_VER_TYPE OFFSETOF(lbmr_hdr_ext_type_t, ver_type)
302 #define L_LBMR_HDR_EXT_TYPE_T_VER_TYPE SIZEOF(lbmr_hdr_ext_type_t, ver_type)
303 #define O_LBMR_HDR_EXT_TYPE_T_EXT_TYPE OFFSETOF(lbmr_hdr_ext_type_t, ext_type)
304 #define L_LBMR_HDR_EXT_TYPE_T_EXT_TYPE SIZEOF(lbmr_hdr_ext_type_t, ext_type)
305 #define O_LBMR_HDR_EXT_TYPE_T_DEP OFFSETOF(lbmr_hdr_ext_type_t, dep)
306 #define L_LBMR_HDR_EXT_TYPE_T_DEP SIZEOF(lbmr_hdr_ext_type_t, dep)
307 #define L_LBMR_HDR_EXT_TYPE_T (int) sizeof(lbmr_hdr_ext_type_t)
309 #define LBMR_HDR_EXT_TYPE_UME_PROXY_SRC_ELECT 0x1
310 #define LBMR_HDR_EXT_TYPE_UMQ_QUEUE_MGMT 0x2
311 #define LBMR_HDR_EXT_TYPE_CONTEXT_INFO 0x3
312 #define LBMR_HDR_EXT_TYPE_TOPIC_RES_REQUEST 0x4
313 #define LBMR_HDR_EXT_TYPE_TNWG_MSG 0x5
314 #define LBMR_HDR_EXT_TYPE_REMOTE_DOMAIN_ROUTE 0x6
315 #define LBMR_HDR_EXT_TYPE_REMOTE_CONTEXT_INFO 0x7
317 /* LBMR topic information record */
320 lbm_uint8_t transport
;
325 #define O_LBMR_TIR_T_TRANSPORT OFFSETOF(lbmr_tir_t, transport)
326 #define L_LBMR_TIR_T_TRANSPORT SIZEOF(lbmr_tir_t, transport)
327 #define O_LBMR_TIR_T_TLEN OFFSETOF(lbmr_tir_t, tlen)
328 #define L_LBMR_TIR_T_TLEN SIZEOF(lbmr_tir_t, tlen)
329 #define O_LBMR_TIR_T_TTL OFFSETOF(lbmr_tir_t, ttl)
330 #define L_LBMR_TIR_T_TTL SIZEOF(lbmr_tir_t, ttl)
331 #define O_LBMR_TIR_T_INDEX OFFSETOF(lbmr_tir_t, idx)
332 #define L_LBMR_TIR_T_INDEX SIZEOF(lbmr_tir_t, idx)
333 #define L_LBMR_TIR_T (int) sizeof(lbmr_tir_t)
335 /* LBMR topic information record TCP option data */
341 #define O_LBMR_TIR_TCP_T_IP OFFSETOF(lbmr_tir_tcp_t, ip)
342 #define L_LBMR_TIR_TCP_T_IP SIZEOF(lbmr_tir_tcp_t, ip)
343 #define O_LBMR_TIR_TCP_T_PORT OFFSETOF(lbmr_tir_tcp_t, port)
344 #define L_LBMR_TIR_TCP_T_PORT SIZEOF(lbmr_tir_tcp_t, port)
345 #define L_LBMR_TIR_TCP_T 6
349 lbm_uint32_t session_id
;
351 } lbmr_tir_tcp_with_sid_t
;
352 #define O_LBMR_TIR_TCP_WITH_SID_T_IP OFFSETOF(lbmr_tir_tcp_with_sid_t, ip)
353 #define L_LBMR_TIR_TCP_WITH_SID_T_IP SIZEOF(lbmr_tir_tcp_with_sid_t, ip)
354 #define O_LBMR_TIR_TCP_WITH_SID_T_SESSION_ID OFFSETOF(lbmr_tir_tcp_with_sid_t, session_id)
355 #define L_LBMR_TIR_TCP_WITH_SID_T_SESSION_ID SIZEOF(lbmr_tir_tcp_with_sid_t, session_id)
356 #define O_LBMR_TIR_TCP_WITH_SID_T_PORT OFFSETOF(lbmr_tir_tcp_with_sid_t, port)
357 #define L_LBMR_TIR_TCP_WITH_SID_T_PORT SIZEOF(lbmr_tir_tcp_with_sid_t, port)
358 #define L_LBMR_TIR_TCP_WITH_SID_T 10
360 /* LBMR topic information record LBT-RM option data */
363 lbm_uint32_t src_addr
;
364 lbm_uint32_t mcast_addr
;
365 lbm_uint32_t session_id
;
366 lbm_uint16_t udp_dest_port
;
367 lbm_uint16_t src_ucast_port
;
369 #define O_LBMR_TIR_LBTRM_T_SRC_ADDR OFFSETOF(lbmr_tir_lbtrm_t, src_addr)
370 #define L_LBMR_TIR_LBTRM_T_SRC_ADDR SIZEOF(lbmr_tir_lbtrm_t, src_addr)
371 #define O_LBMR_TIR_LBTRM_T_MCAST_ADDR OFFSETOF(lbmr_tir_lbtrm_t, mcast_addr)
372 #define L_LBMR_TIR_LBTRM_T_MCAST_ADDR SIZEOF(lbmr_tir_lbtrm_t, mcast_addr)
373 #define O_LBMR_TIR_LBTRM_T_SESSION_ID OFFSETOF(lbmr_tir_lbtrm_t, session_id)
374 #define L_LBMR_TIR_LBTRM_T_SESSION_ID SIZEOF(lbmr_tir_lbtrm_t, session_id)
375 #define O_LBMR_TIR_LBTRM_T_UDP_DEST_PORT OFFSETOF(lbmr_tir_lbtrm_t, udp_dest_port)
376 #define L_LBMR_TIR_LBTRM_T_UDP_DEST_PORT SIZEOF(lbmr_tir_lbtrm_t, udp_dest_port)
377 #define O_LBMR_TIR_LBTRM_T_SRC_UCAST_PORT OFFSETOF(lbmr_tir_lbtrm_t, src_ucast_port)
378 #define L_LBMR_TIR_LBTRM_T_SRC_UCAST_PORT SIZEOF(lbmr_tir_lbtrm_t, src_ucast_port)
379 #define L_LBMR_TIR_LBTRM_T (int) sizeof(lbmr_tir_lbtrm_t)
381 /* LBMR topic information record LBT-RU option data */
387 #define O_LBMR_TIR_LBTRU_T_IP OFFSETOF(lbmr_tir_lbtru_t, ip)
388 #define L_LBMR_TIR_LBTRU_T_IP SIZEOF(lbmr_tir_lbtru_t, ip)
389 #define O_LBMR_TIR_LBTRU_T_PORT OFFSETOF(lbmr_tir_lbtru_t, port)
390 #define L_LBMR_TIR_LBTRU_T_PORT SIZEOF(lbmr_tir_lbtru_t, port)
391 #define L_LBMR_TIR_LBTRU_T 6
396 lbm_uint32_t session_id
;
398 } lbmr_tir_lbtru_with_sid_t
;
399 #define O_LBMR_TIR_LBTRU_WITH_SID_T_IP OFFSETOF(lbmr_tir_lbtru_with_sid_t, ip)
400 #define L_LBMR_TIR_LBTRU_WITH_SID_T_IP SIZEOF(lbmr_tir_lbtru_with_sid_t, ip)
401 #define O_LBMR_TIR_LBTRU_WITH_SID_T_SESSION_ID OFFSETOF(lbmr_tir_lbtru_with_sid_t, session_id)
402 #define L_LBMR_TIR_LBTRU_WITH_SID_T_SESSION_ID SIZEOF(lbmr_tir_lbtru_with_sid_t, session_id)
403 #define O_LBMR_TIR_LBTRU_WITH_SID_T_PORT OFFSETOF(lbmr_tir_lbtru_with_sid_t, port)
404 #define L_LBMR_TIR_LBTRU_WITH_SID_T_PORT SIZEOF(lbmr_tir_lbtru_with_sid_t, port)
405 #define L_LBMR_TIR_LBTRU_WITH_SID_T 10
407 /* LBMR topic information record LBT-IPC option data */
410 lbm_uint32_t host_id
;
411 lbm_uint32_t session_id
;
412 lbm_uint16_t xport_id
;
414 #define O_LBMR_TIR_LBTIPC_T_HOST_ID OFFSETOF(lbmr_tir_lbtipc_t, host_id)
415 #define L_LBMR_TIR_LBTIPC_T_HOST_ID SIZEOF(lbmr_tir_lbtipc_t, host_id)
416 #define O_LBMR_TIR_LBTIPC_T_SESSION_ID OFFSETOF(lbmr_tir_lbtipc_t, session_id)
417 #define L_LBMR_TIR_LBTIPC_T_SESSION_ID SIZEOF(lbmr_tir_lbtipc_t, session_id)
418 #define O_LBMR_TIR_LBTIPC_T_XPORT_ID OFFSETOF(lbmr_tir_lbtipc_t, xport_id)
419 #define L_LBMR_TIR_LBTIPC_T_XPORT_ID SIZEOF(lbmr_tir_lbtipc_t, xport_id)
420 #define L_LBMR_TIR_LBTIPC_T 10
422 /* LBMR topic information record LBT-RDMA option data */
426 lbm_uint32_t session_id
;
428 } lbmr_tir_lbtrdma_t
;
429 #define O_LBMR_TIR_LBTRDMA_T_IP OFFSETOF(lbmr_tir_lbtrdma_t, ip)
430 #define L_LBMR_TIR_LBTRDMA_T_IP SIZEOF(lbmr_tir_lbtrdma_t, ip)
431 #define O_LBMR_TIR_LBTRDMA_T_SESSION_ID OFFSETOF(lbmr_tir_lbtrdma_t, session_id)
432 #define L_LBMR_TIR_LBTRDMA_T_SESSION_ID SIZEOF(lbmr_tir_lbtrdma_t, session_id)
433 #define O_LBMR_TIR_LBTRDMA_T_PORT OFFSETOF(lbmr_tir_lbtrdma_t, port)
434 #define L_LBMR_TIR_LBTRDMA_T_PORT SIZEOF(lbmr_tir_lbtrdma_t, port)
435 #define L_LBMR_TIR_LBTRDMA_T 10
437 /* LBMR topic information record LBT-SMX option data */
440 lbm_uint32_t host_id
;
441 lbm_uint32_t session_id
;
442 lbm_uint16_t xport_id
;
444 #define O_LBMR_TIR_LBTSMX_T_HOST_ID OFFSETOF(lbmr_tir_lbtsmx_t, host_id)
445 #define L_LBMR_TIR_LBTSMX_T_HOST_ID SIZEOF(lbmr_tir_lbtsmx_t, host_id)
446 #define O_LBMR_TIR_LBTSMX_T_SESSION_ID OFFSETOF(lbmr_tir_lbtsmx_t, session_id)
447 #define L_LBMR_TIR_LBTSMX_T_SESSION_ID SIZEOF(lbmr_tir_lbtsmx_t, session_id)
448 #define O_LBMR_TIR_LBTSMX_T_XPORT_ID OFFSETOF(lbmr_tir_lbtsmx_t, xport_id)
449 #define L_LBMR_TIR_LBTSMX_T_XPORT_ID SIZEOF(lbmr_tir_lbtsmx_t, xport_id)
450 #define L_LBMR_TIR_LBTSMX_T 10
452 #define LBMR_TIR_TRANSPORT 0x7F
453 #define LBMR_TIR_OPTIONS 0x80
455 /* LBMR topic option */
462 #define O_LBMR_TOPIC_OPT_T_TYPE OFFSETOF(lbmr_topic_opt_t, type)
463 #define L_LBMR_TOPIC_OPT_T_TYPE SIZEOF(lbmr_topic_opt_t, type)
464 #define O_LBMR_TOPIC_OPT_T_LEN OFFSETOF(lbmr_topic_opt_t, len)
465 #define L_LBMR_TOPIC_OPT_T_LEN SIZEOF(lbmr_topic_opt_t, len)
466 #define O_LBMR_TOPIC_OPT_T_FLAGS OFFSETOF(lbmr_topic_opt_t, flags)
467 #define L_LBMR_TOPIC_OPT_T_FLAGS SIZEOF(lbmr_topic_opt_t, flags)
468 #define L_LBMR_TOPIC_OPT_T (int) sizeof(lbmr_topic_opt_t)
470 #define LBMR_TOPIC_OPT_FLAG_IGNORE 0x8000
472 /* LBMR topic option length */
477 lbm_uint16_t total_len
;
478 } lbmr_topic_opt_len_t
;
479 #define O_LBMR_TOPIC_OPT_LEN_T_TYPE OFFSETOF(lbmr_topic_opt_len_t, type)
480 #define L_LBMR_TOPIC_OPT_LEN_T_TYPE SIZEOF(lbmr_topic_opt_len_t, type)
481 #define O_LBMR_TOPIC_OPT_LEN_T_LEN OFFSETOF(lbmr_topic_opt_len_t, len)
482 #define L_LBMR_TOPIC_OPT_LEN_T_LEN SIZEOF(lbmr_topic_opt_len_t, len)
483 #define O_LBMR_TOPIC_OPT_LEN_T_TOTAL_LEN OFFSETOF(lbmr_topic_opt_len_t, total_len)
484 #define L_LBMR_TOPIC_OPT_LEN_T_TOTAL_LEN SIZEOF(lbmr_topic_opt_len_t, total_len)
485 #define L_LBMR_TOPIC_OPT_LEN_T (int) sizeof(lbmr_topic_opt_len_t)
487 #define LBMR_TOPIC_OPT_LEN_TYPE 0x00
488 #define LBMR_TOPIC_OPT_LEN_SZ 4
490 /* LBMR topic UME option */
496 lbm_uint16_t store_tcp_port
;
497 lbm_uint16_t src_tcp_port
;
498 lbm_uint32_t store_tcp_addr
;
499 lbm_uint32_t src_tcp_addr
;
500 lbm_uint32_t src_reg_id
;
501 lbm_uint32_t transport_idx
;
502 lbm_uint32_t high_seqnum
;
503 lbm_uint32_t low_seqnum
;
504 } lbmr_topic_opt_ume_t
;
505 #define O_LBMR_TOPIC_OPT_UME_T_TYPE OFFSETOF(lbmr_topic_opt_ume_t, type)
506 #define L_LBMR_TOPIC_OPT_UME_T_TYPE SIZEOF(lbmr_topic_opt_ume_t, type)
507 #define O_LBMR_TOPIC_OPT_UME_T_LEN OFFSETOF(lbmr_topic_opt_ume_t, len)
508 #define L_LBMR_TOPIC_OPT_UME_T_LEN SIZEOF(lbmr_topic_opt_ume_t, len)
509 #define O_LBMR_TOPIC_OPT_UME_T_FLAGS OFFSETOF(lbmr_topic_opt_ume_t, flags)
510 #define L_LBMR_TOPIC_OPT_UME_T_FLAGS SIZEOF(lbmr_topic_opt_ume_t, flags)
511 #define O_LBMR_TOPIC_OPT_UME_T_STORE_TCP_PORT OFFSETOF(lbmr_topic_opt_ume_t, store_tcp_port)
512 #define L_LBMR_TOPIC_OPT_UME_T_STORE_TCP_PORT SIZEOF(lbmr_topic_opt_ume_t, store_tcp_port)
513 #define O_LBMR_TOPIC_OPT_UME_T_SRC_TCP_PORT OFFSETOF(lbmr_topic_opt_ume_t, src_tcp_port)
514 #define L_LBMR_TOPIC_OPT_UME_T_SRC_TCP_PORT SIZEOF(lbmr_topic_opt_ume_t, src_tcp_port)
515 #define O_LBMR_TOPIC_OPT_UME_T_STORE_TCP_ADDR OFFSETOF(lbmr_topic_opt_ume_t, store_tcp_addr)
516 #define L_LBMR_TOPIC_OPT_UME_T_STORE_TCP_ADDR SIZEOF(lbmr_topic_opt_ume_t, store_tcp_addr)
517 #define O_LBMR_TOPIC_OPT_UME_T_SRC_TCP_ADDR OFFSETOF(lbmr_topic_opt_ume_t, src_tcp_addr)
518 #define L_LBMR_TOPIC_OPT_UME_T_SRC_TCP_ADDR SIZEOF(lbmr_topic_opt_ume_t, src_tcp_addr)
519 #define O_LBMR_TOPIC_OPT_UME_T_SRC_REG_ID OFFSETOF(lbmr_topic_opt_ume_t, src_reg_id)
520 #define L_LBMR_TOPIC_OPT_UME_T_SRC_REG_ID SIZEOF(lbmr_topic_opt_ume_t, src_reg_id)
521 #define O_LBMR_TOPIC_OPT_UME_T_TRANSPORT_IDX OFFSETOF(lbmr_topic_opt_ume_t, transport_idx)
522 #define L_LBMR_TOPIC_OPT_UME_T_TRANSPORT_IDX SIZEOF(lbmr_topic_opt_ume_t, transport_idx)
523 #define O_LBMR_TOPIC_OPT_UME_T_HIGH_SEQNUM OFFSETOF(lbmr_topic_opt_ume_t, high_seqnum)
524 #define L_LBMR_TOPIC_OPT_UME_T_HIGH_SEQNUM SIZEOF(lbmr_topic_opt_ume_t, high_seqnum)
525 #define O_LBMR_TOPIC_OPT_UME_T_LOW_SEQNUM OFFSETOF(lbmr_topic_opt_ume_t, low_seqnum)
526 #define L_LBMR_TOPIC_OPT_UME_T_LOW_SEQNUM SIZEOF(lbmr_topic_opt_ume_t, low_seqnum)
527 #define L_LBMR_TOPIC_OPT_UME_T (int) sizeof(lbmr_topic_opt_ume_t)
529 #define LBMR_TOPIC_OPT_UME_TYPE 0x01
530 #define LBMR_TOPIC_OPT_UME_FLAG_IGNORE 0x8000
531 #define LBMR_TOPIC_OPT_UME_FLAG_LATEJOIN 0x4000
532 #define LBMR_TOPIC_OPT_UME_FLAG_STORE 0x2000
533 #define LBMR_TOPIC_OPT_UME_FLAG_QCCAP 0x1000
534 #define LBMR_TOPIC_OPT_UME_FLAG_ACKTOSRC 0x800
535 #define LBMR_TOPIC_OPT_UME_SZ 32
537 /* LBMR topic UME store option */
544 lbm_uint16_t store_tcp_port
;
545 lbm_uint16_t store_idx
;
546 lbm_uint32_t store_ip_addr
;
547 lbm_uint32_t src_reg_id
;
548 } lbmr_topic_opt_ume_store_t
;
549 #define O_LBMR_TOPIC_OPT_UME_STORE_T_TYPE OFFSETOF(lbmr_topic_opt_ume_store_t, type)
550 #define L_LBMR_TOPIC_OPT_UME_STORE_T_TYPE SIZEOF(lbmr_topic_opt_ume_store_t, type)
551 #define O_LBMR_TOPIC_OPT_UME_STORE_T_LEN OFFSETOF(lbmr_topic_opt_ume_store_t, len)
552 #define L_LBMR_TOPIC_OPT_UME_STORE_T_LEN SIZEOF(lbmr_topic_opt_ume_store_t, len)
553 #define O_LBMR_TOPIC_OPT_UME_STORE_T_FLAGS OFFSETOF(lbmr_topic_opt_ume_store_t, flags)
554 #define L_LBMR_TOPIC_OPT_UME_STORE_T_FLAGS SIZEOF(lbmr_topic_opt_ume_store_t, flags)
555 #define O_LBMR_TOPIC_OPT_UME_STORE_T_GRP_IDX OFFSETOF(lbmr_topic_opt_ume_store_t, grp_idx)
556 #define L_LBMR_TOPIC_OPT_UME_STORE_T_GRP_IDX SIZEOF(lbmr_topic_opt_ume_store_t, grp_idx)
557 #define O_LBMR_TOPIC_OPT_UME_STORE_T_STORE_TCP_PORT OFFSETOF(lbmr_topic_opt_ume_store_t, store_tcp_port)
558 #define L_LBMR_TOPIC_OPT_UME_STORE_T_STORE_TCP_PORT SIZEOF(lbmr_topic_opt_ume_store_t, store_tcp_port)
559 #define O_LBMR_TOPIC_OPT_UME_STORE_T_STORE_IDX OFFSETOF(lbmr_topic_opt_ume_store_t, store_idx)
560 #define L_LBMR_TOPIC_OPT_UME_STORE_T_STORE_IDX SIZEOF(lbmr_topic_opt_ume_store_t, store_idx)
561 #define O_LBMR_TOPIC_OPT_UME_STORE_T_STORE_IP_ADDR OFFSETOF(lbmr_topic_opt_ume_store_t, store_ip_addr)
562 #define L_LBMR_TOPIC_OPT_UME_STORE_T_STORE_IP_ADDR SIZEOF(lbmr_topic_opt_ume_store_t, store_ip_addr)
563 #define O_LBMR_TOPIC_OPT_UME_STORE_T_SRC_REG_ID OFFSETOF(lbmr_topic_opt_ume_store_t, src_reg_id)
564 #define L_LBMR_TOPIC_OPT_UME_STORE_T_SRC_REG_ID SIZEOF(lbmr_topic_opt_ume_store_t, src_reg_id)
565 #define L_LBMR_TOPIC_OPT_UME_STORE_T (int) sizeof(lbmr_topic_opt_ume_store_t)
567 #define LBMR_TOPIC_OPT_UME_STORE_TYPE 0x02
568 #define LBMR_TOPIC_OPT_UME_STORE_FLAG_IGNORE 0x80
569 #define LBMR_TOPIC_OPT_UME_STORE_SZ 16
571 /* LBMR topic UME store group option */
579 lbm_uint16_t reserved
;
580 } lbmr_topic_opt_ume_store_group_t
;
581 #define O_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_TYPE OFFSETOF(lbmr_topic_opt_ume_store_group_t, type)
582 #define L_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_TYPE SIZEOF(lbmr_topic_opt_ume_store_group_t, type)
583 #define O_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_LEN OFFSETOF(lbmr_topic_opt_ume_store_group_t, len)
584 #define L_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_LEN SIZEOF(lbmr_topic_opt_ume_store_group_t, len)
585 #define O_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_FLAGS OFFSETOF(lbmr_topic_opt_ume_store_group_t, flags)
586 #define L_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_FLAGS SIZEOF(lbmr_topic_opt_ume_store_group_t, flags)
587 #define O_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_GRP_IDX OFFSETOF(lbmr_topic_opt_ume_store_group_t, grp_idx)
588 #define L_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_GRP_IDX SIZEOF(lbmr_topic_opt_ume_store_group_t, grp_idx)
589 #define O_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_GRP_SZ OFFSETOF(lbmr_topic_opt_ume_store_group_t, grp_sz)
590 #define L_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_GRP_SZ SIZEOF(lbmr_topic_opt_ume_store_group_t, grp_sz)
591 #define O_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_RESERVED OFFSETOF(lbmr_topic_opt_ume_store_group_t, reserved)
592 #define L_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_RESERVED SIZEOF(lbmr_topic_opt_ume_store_group_t, reserved)
593 #define L_LBMR_TOPIC_OPT_UME_STORE_GROUP_T (int) sizeof(lbmr_topic_opt_ume_store_group_t)
595 #define LBMR_TOPIC_OPT_UME_STORE_GROUP_TYPE 0x03
596 #define LBMR_TOPIC_OPT_UME_STORE_GROUP_FLAG_IGNORE 0x80
597 #define LBMR_TOPIC_OPT_UME_STORE_GROUP_SZ 8
599 /* LBMR topic latejoin option */
605 lbm_uint16_t src_tcp_port
;
606 lbm_uint16_t reserved
;
607 lbm_uint32_t src_ip_addr
;
608 lbm_uint32_t transport_idx
;
609 lbm_uint32_t high_seqnum
;
610 lbm_uint32_t low_seqnum
;
611 } lbmr_topic_opt_latejoin_t
;
612 #define O_LBMR_TOPIC_OPT_LATEJOIN_T_TYPE OFFSETOF(lbmr_topic_opt_latejoin_t, type)
613 #define L_LBMR_TOPIC_OPT_LATEJOIN_T_TYPE SIZEOF(lbmr_topic_opt_latejoin_t, type)
614 #define O_LBMR_TOPIC_OPT_LATEJOIN_T_LEN OFFSETOF(lbmr_topic_opt_latejoin_t, len)
615 #define L_LBMR_TOPIC_OPT_LATEJOIN_T_LEN SIZEOF(lbmr_topic_opt_latejoin_t, len)
616 #define O_LBMR_TOPIC_OPT_LATEJOIN_T_FLAGS OFFSETOF(lbmr_topic_opt_latejoin_t, flags)
617 #define L_LBMR_TOPIC_OPT_LATEJOIN_T_FLAGS SIZEOF(lbmr_topic_opt_latejoin_t, flags)
618 #define O_LBMR_TOPIC_OPT_LATEJOIN_T_SRC_TCP_PORT OFFSETOF(lbmr_topic_opt_latejoin_t, src_tcp_port)
619 #define L_LBMR_TOPIC_OPT_LATEJOIN_T_SRC_TCP_PORT SIZEOF(lbmr_topic_opt_latejoin_t, src_tcp_port)
620 #define O_LBMR_TOPIC_OPT_LATEJOIN_T_RESERVED OFFSETOF(lbmr_topic_opt_latejoin_t, reserved)
621 #define L_LBMR_TOPIC_OPT_LATEJOIN_T_RESERVED SIZEOF(lbmr_topic_opt_latejoin_t, reserved)
622 #define O_LBMR_TOPIC_OPT_LATEJOIN_T_SRC_IP_ADDR OFFSETOF(lbmr_topic_opt_latejoin_t, src_ip_addr)
623 #define L_LBMR_TOPIC_OPT_LATEJOIN_T_SRC_IP_ADDR SIZEOF(lbmr_topic_opt_latejoin_t, src_ip_addr)
624 #define O_LBMR_TOPIC_OPT_LATEJOIN_T_TRANSPORT_IDX OFFSETOF(lbmr_topic_opt_latejoin_t, transport_idx)
625 #define L_LBMR_TOPIC_OPT_LATEJOIN_T_TRANSPORT_IDX SIZEOF(lbmr_topic_opt_latejoin_t, transport_idx)
626 #define O_LBMR_TOPIC_OPT_LATEJOIN_T_HIGH_SEQNUM OFFSETOF(lbmr_topic_opt_latejoin_t, high_seqnum)
627 #define L_LBMR_TOPIC_OPT_LATEJOIN_T_HIGH_SEQNUM SIZEOF(lbmr_topic_opt_latejoin_t, high_seqnum)
628 #define O_LBMR_TOPIC_OPT_LATEJOIN_T_LOW_SEQNUM OFFSETOF(lbmr_topic_opt_latejoin_t, low_seqnum)
629 #define L_LBMR_TOPIC_OPT_LATEJOIN_T_LOW_SEQNUM SIZEOF(lbmr_topic_opt_latejoin_t, low_seqnum)
630 #define L_LBMR_TOPIC_OPT_LATEJOIN_T (int) sizeof(lbmr_topic_opt_latejoin_t)
632 #define LBMR_TOPIC_OPT_LATEJOIN_TYPE 0x04
633 #define LBMR_TOPIC_OPT_LATEJOIN_FLAG_IGNORE 0x8000
634 #define LBMR_TOPIC_OPT_LATEJOIN_FLAG_ACKTOSRC 0x4000
635 #define LBMR_TOPIC_OPT_LATEJOIN_SZ 24
637 /* LBMR topic queue control option */
643 lbm_uint32_t rcr_idx
;
644 } lbmr_topic_opt_umq_rcridx_t
;
645 #define O_LBMR_TOPIC_OPT_UMQ_RCRIDX_T_TYPE OFFSETOF(lbmr_topic_opt_umq_rcridx_t, type)
646 #define L_LBMR_TOPIC_OPT_UMQ_RCRIDX_T_TYPE SIZEOF(lbmr_topic_opt_umq_rcridx_t, type)
647 #define O_LBMR_TOPIC_OPT_UMQ_RCRIDX_T_LEN OFFSETOF(lbmr_topic_opt_umq_rcridx_t, len)
648 #define L_LBMR_TOPIC_OPT_UMQ_RCRIDX_T_LEN SIZEOF(lbmr_topic_opt_umq_rcridx_t, len)
649 #define O_LBMR_TOPIC_OPT_UMQ_RCRIDX_T_FLAGS OFFSETOF(lbmr_topic_opt_umq_rcridx_t, flags)
650 #define L_LBMR_TOPIC_OPT_UMQ_RCRIDX_T_FLAGS SIZEOF(lbmr_topic_opt_umq_rcridx_t, flags)
651 #define O_LBMR_TOPIC_OPT_UMQ_RCRIDX_T_RCR_IDX OFFSETOF(lbmr_topic_opt_umq_rcridx_t, rcr_idx)
652 #define L_LBMR_TOPIC_OPT_UMQ_RCRIDX_T_RCR_IDX SIZEOF(lbmr_topic_opt_umq_rcridx_t, rcr_idx)
653 #define L_LBMR_TOPIC_OPT_UMQ_RCRIDX_T (int) sizeof(lbmr_topic_opt_umq_rcridx_t)
655 #define LBMR_TOPIC_OPT_UMQ_RCRIDX_TYPE 0x05
656 #define LBMR_TOPIC_OPT_UMQ_RCRIDX_SZ 8
657 #define LBMR_TOPIC_OPT_UMQ_RCRIDX_FLAG_IGNORE 0x8000
659 #define LBMR_TOPIC_OPT_UMQ_QINFO_TYPE 0x06
660 #define LBMR_TOPIC_OPT_UMQ_FLAG_IGNORE 0x8000
661 #define LBMR_TOPIC_OPT_UMQ_FLAG_QUEUE 0x4000
662 #define LBMR_TOPIC_OPT_UMQ_FLAG_RCVLISTEN 0x2000
663 #define LBMR_TOPIC_OPT_UMQ_FLAG_CONTROL 0x1000
664 #define LBMR_TOPIC_OPT_UMQ_FLAG_SRCRCVLISTEN 0x0800
665 #define LBMR_TOPIC_OPT_UMQ_FLAG_PARTICIPANTS_ONLY 0x0400
666 #define LBMR_TOPIC_OPT_UMQ_MAX_QNAME_LEN 252
668 /* LBMR topic ULB option */
674 lbm_uint32_t queue_id
;
675 lbm_uint8_t regid
[8];
676 lbm_uint32_t ulb_src_id
;
677 lbm_uint32_t src_ip_addr
;
678 lbm_uint16_t src_tcp_port
;
679 lbm_uint16_t reserved
;
680 } lbmr_topic_opt_ulb_t
;
681 #define O_LBMR_TOPIC_OPT_ULB_T_TYPE OFFSETOF(lbmr_topic_opt_ulb_t, type)
682 #define L_LBMR_TOPIC_OPT_ULB_T_TYPE SIZEOF(lbmr_topic_opt_ulb_t, type)
683 #define O_LBMR_TOPIC_OPT_ULB_T_LEN OFFSETOF(lbmr_topic_opt_ulb_t, len)
684 #define L_LBMR_TOPIC_OPT_ULB_T_LEN SIZEOF(lbmr_topic_opt_ulb_t, len)
685 #define O_LBMR_TOPIC_OPT_ULB_T_FLAGS OFFSETOF(lbmr_topic_opt_ulb_t, flags)
686 #define L_LBMR_TOPIC_OPT_ULB_T_FLAGS SIZEOF(lbmr_topic_opt_ulb_t, flags)
687 #define O_LBMR_TOPIC_OPT_ULB_T_QUEUE_ID OFFSETOF(lbmr_topic_opt_ulb_t, queue_id)
688 #define L_LBMR_TOPIC_OPT_ULB_T_QUEUE_ID SIZEOF(lbmr_topic_opt_ulb_t, queue_id)
689 #define O_LBMR_TOPIC_OPT_ULB_T_REGID OFFSETOF(lbmr_topic_opt_ulb_t, regid)
690 #define L_LBMR_TOPIC_OPT_ULB_T_REGID SIZEOF(lbmr_topic_opt_ulb_t, regid)
691 #define O_LBMR_TOPIC_OPT_ULB_T_ULB_SRC_ID OFFSETOF(lbmr_topic_opt_ulb_t, ulb_src_id)
692 #define L_LBMR_TOPIC_OPT_ULB_T_ULB_SRC_ID SIZEOF(lbmr_topic_opt_ulb_t, ulb_src_id)
693 #define O_LBMR_TOPIC_OPT_ULB_T_SRC_IP_ADDR OFFSETOF(lbmr_topic_opt_ulb_t, src_ip_addr)
694 #define L_LBMR_TOPIC_OPT_ULB_T_SRC_IP_ADDR SIZEOF(lbmr_topic_opt_ulb_t, src_ip_addr)
695 #define O_LBMR_TOPIC_OPT_ULB_T_SRC_TCP_PORT OFFSETOF(lbmr_topic_opt_ulb_t, src_tcp_port)
696 #define L_LBMR_TOPIC_OPT_ULB_T_SRC_TCP_PORT SIZEOF(lbmr_topic_opt_ulb_t, src_tcp_port)
697 #define O_LBMR_TOPIC_OPT_ULB_T_RESERVED OFFSETOF(lbmr_topic_opt_ulb_t, reserved)
698 #define L_LBMR_TOPIC_OPT_ULB_T_RESERVED SIZEOF(lbmr_topic_opt_ulb_t, reserved)
699 #define L_LBMR_TOPIC_OPT_ULB_T (int) sizeof(lbmr_topic_opt_ulb_t)
701 #define LBMR_TOPIC_OPT_ULB_TYPE 0x0B
702 #define LBMR_TOPIC_OPT_ULB_FLAG_IGNORE 0x8000
703 #define LBMR_TOPIC_OPT_ULB_SZ 28
705 /* LBMR topic cost option */
711 lbm_uint8_t hop_count
;
713 } lbmr_topic_opt_cost_t
;
714 #define O_LBMR_TOPIC_OPT_COST_T_TYPE OFFSETOF(lbmr_topic_opt_cost_t, type)
715 #define L_LBMR_TOPIC_OPT_COST_T_TYPE SIZEOF(lbmr_topic_opt_cost_t, type)
716 #define O_LBMR_TOPIC_OPT_COST_T_LEN OFFSETOF(lbmr_topic_opt_cost_t, len)
717 #define L_LBMR_TOPIC_OPT_COST_T_LEN SIZEOF(lbmr_topic_opt_cost_t, len)
718 #define O_LBMR_TOPIC_OPT_COST_T_FLAGS OFFSETOF(lbmr_topic_opt_cost_t, flags)
719 #define L_LBMR_TOPIC_OPT_COST_T_FLAGS SIZEOF(lbmr_topic_opt_cost_t, flags)
720 #define O_LBMR_TOPIC_OPT_COST_T_HOP_COUNT OFFSETOF(lbmr_topic_opt_cost_t, hop_count)
721 #define L_LBMR_TOPIC_OPT_COST_T_HOP_COUNT SIZEOF(lbmr_topic_opt_cost_t, hop_count)
722 #define O_LBMR_TOPIC_OPT_COST_T_COST OFFSETOF(lbmr_topic_opt_cost_t, cost)
723 #define L_LBMR_TOPIC_OPT_COST_T_COST SIZEOF(lbmr_topic_opt_cost_t, cost)
724 #define L_LBMR_TOPIC_OPT_COST_T (int) sizeof(lbmr_topic_opt_cost_t)
726 #define LBMR_TOPIC_OPT_COST_TYPE 0x07
727 #define LBMR_TOPIC_OPT_COST_FLAG_IGNORE 0x80
728 #define LBMR_TOPIC_OPT_COST_SZ 8
730 /* LBMR topic originating transport ID option */
736 lbm_uint8_t originating_transport
[LBM_OTID_BLOCK_SZ
];
737 } lbmr_topic_opt_otid_t
;
738 #define O_LBMR_TOPIC_OPT_OTID_T_TYPE OFFSETOF(lbmr_topic_opt_otid_t, type)
739 #define L_LBMR_TOPIC_OPT_OTID_T_TYPE SIZEOF(lbmr_topic_opt_otid_t, type)
740 #define O_LBMR_TOPIC_OPT_OTID_T_LEN OFFSETOF(lbmr_topic_opt_otid_t, len)
741 #define L_LBMR_TOPIC_OPT_OTID_T_LEN SIZEOF(lbmr_topic_opt_otid_t, len)
742 #define O_LBMR_TOPIC_OPT_OTID_T_FLAGS OFFSETOF(lbmr_topic_opt_otid_t, flags)
743 #define L_LBMR_TOPIC_OPT_OTID_T_FLAGS SIZEOF(lbmr_topic_opt_otid_t, flags)
744 #define O_LBMR_TOPIC_OPT_OTID_T_ORIGINATING_TRANSPORT OFFSETOF(lbmr_topic_opt_otid_t, originating_transport)
745 #define L_LBMR_TOPIC_OPT_OTID_T_ORIGINATING_TRANSPORT SIZEOF(lbmr_topic_opt_otid_t, originating_transport)
746 #define L_LBMR_TOPIC_OPT_OTID_T (int) sizeof(lbmr_topic_opt_otid_t)
748 #define LBMR_TOPIC_OPT_OTID_TYPE 0x08
749 #define LBMR_TOPIC_OPT_OTID_FLAG_IGNORE 0x8000
750 #define LBMR_TOPIC_OPT_OTID_SZ 36
752 /* LBMR topic context instance transport option */
759 lbm_uint8_t ctxinst
[LBM_CONTEXT_INSTANCE_BLOCK_SZ
];
760 } lbmr_topic_opt_ctxinst_t
;
761 #define O_LBMR_TOPIC_OPT_CTXINST_T_TYPE OFFSETOF(lbmr_topic_opt_ctxinst_t, type)
762 #define L_LBMR_TOPIC_OPT_CTXINST_T_TYPE SIZEOF(lbmr_topic_opt_ctxinst_t, type)
763 #define O_LBMR_TOPIC_OPT_CTXINST_T_LEN OFFSETOF(lbmr_topic_opt_ctxinst_t, len)
764 #define L_LBMR_TOPIC_OPT_CTXINST_T_LEN SIZEOF(lbmr_topic_opt_ctxinst_t, len)
765 #define O_LBMR_TOPIC_OPT_CTXINST_T_FLAGS OFFSETOF(lbmr_topic_opt_ctxinst_t, flags)
766 #define L_LBMR_TOPIC_OPT_CTXINST_T_FLAGS SIZEOF(lbmr_topic_opt_ctxinst_t, flags)
767 #define O_LBMR_TOPIC_OPT_CTXINST_T_RES OFFSETOF(lbmr_topic_opt_ctxinst_t, res)
768 #define L_LBMR_TOPIC_OPT_CTXINST_T_RES SIZEOF(lbmr_topic_opt_ctxinst_t, res)
769 #define O_LBMR_TOPIC_OPT_CTXINST_T_CTXINST OFFSETOF(lbmr_topic_opt_ctxinst_t, ctxinst)
770 #define L_LBMR_TOPIC_OPT_CTXINST_T_CTXINST SIZEOF(lbmr_topic_opt_ctxinst_t, ctxinst)
771 #define L_LBMR_TOPIC_OPT_CTXINST_T (int) sizeof(lbmr_topic_opt_ctxinst_t)
773 #define LBMR_TOPIC_OPT_CTXINST_TYPE 0x09
774 #define LBMR_TOPIC_OPT_CTXINST_FLAG_IGNORE 0x80
775 #define LBMR_TOPIC_OPT_CTXINST_SZ 12
777 /* LBMR topic context instance store transport option */
784 lbm_uint8_t ctxinst
[LBM_CONTEXT_INSTANCE_BLOCK_SZ
];
785 } lbmr_topic_opt_ctxinsts_t
;
786 #define O_LBMR_TOPIC_OPT_CTXINSTS_T_TYPE OFFSETOF(lbmr_topic_opt_ctxinsts_t, type)
787 #define L_LBMR_TOPIC_OPT_CTXINSTS_T_TYPE SIZEOF(lbmr_topic_opt_ctxinsts_t, type)
788 #define O_LBMR_TOPIC_OPT_CTXINSTS_T_LEN OFFSETOF(lbmr_topic_opt_ctxinsts_t, len)
789 #define L_LBMR_TOPIC_OPT_CTXINSTS_T_LEN SIZEOF(lbmr_topic_opt_ctxinsts_t, len)
790 #define O_LBMR_TOPIC_OPT_CTXINSTS_T_FLAGS OFFSETOF(lbmr_topic_opt_ctxinsts_t, flags)
791 #define L_LBMR_TOPIC_OPT_CTXINSTS_T_FLAGS SIZEOF(lbmr_topic_opt_ctxinsts_t, flags)
792 #define O_LBMR_TOPIC_OPT_CTXINSTS_T_IDX OFFSETOF(lbmr_topic_opt_ctxinsts_t, idx)
793 #define L_LBMR_TOPIC_OPT_CTXINSTS_T_IDX SIZEOF(lbmr_topic_opt_ctxinsts_t, idx)
794 #define O_LBMR_TOPIC_OPT_CTXINSTS_T_CTXINST OFFSETOF(lbmr_topic_opt_ctxinsts_t, ctxinst)
795 #define L_LBMR_TOPIC_OPT_CTXINSTS_T_CTXINST SIZEOF(lbmr_topic_opt_ctxinsts_t, ctxinst)
796 #define L_LBMR_TOPIC_OPT_CTXINSTS_T (int) sizeof(lbmr_topic_opt_ctxinsts_t)
798 #define LBMR_TOPIC_OPT_CTXINSTS_TYPE 0x0A
799 #define LBMR_TOPIC_OPT_CTXINSTS_FLAG_IGNORE 0x80
800 #define LBMR_TOPIC_OPT_CTXINSTS_SZ 12
802 /* LBMR topic context instance queue transport option */
809 lbm_uint8_t ctxinst
[LBM_CONTEXT_INSTANCE_BLOCK_SZ
];
810 } lbmr_topic_opt_ctxinstq_t
;
811 #define O_LBMR_TOPIC_OPT_CTXINSTQ_T_TYPE OFFSETOF(lbmr_topic_opt_ctxinstq_t, type)
812 #define L_LBMR_TOPIC_OPT_CTXINSTQ_T_TYPE SIZEOF(lbmr_topic_opt_ctxinstq_t, type)
813 #define O_LBMR_TOPIC_OPT_CTXINSTQ_T_LEN OFFSETOF(lbmr_topic_opt_ctxinstq_t, len)
814 #define L_LBMR_TOPIC_OPT_CTXINSTQ_T_LEN SIZEOF(lbmr_topic_opt_ctxinstq_t, len)
815 #define O_LBMR_TOPIC_OPT_CTXINSTQ_T_FLAGS OFFSETOF(lbmr_topic_opt_ctxinstq_t, flags)
816 #define L_LBMR_TOPIC_OPT_CTXINSTQ_T_FLAGS SIZEOF(lbmr_topic_opt_ctxinstq_t, flags)
817 #define O_LBMR_TOPIC_OPT_CTXINSTQ_T_IDX OFFSETOF(lbmr_topic_opt_ctxinstq_t, idx)
818 #define L_LBMR_TOPIC_OPT_CTXINSTQ_T_IDX SIZEOF(lbmr_topic_opt_ctxinstq_t, idx)
819 #define O_LBMR_TOPIC_OPT_CTXINSTQ_T_CTXINST OFFSETOF(lbmr_topic_opt_ctxinstq_t, ctxinst)
820 #define L_LBMR_TOPIC_OPT_CTXINSTQ_T_CTXINST SIZEOF(lbmr_topic_opt_ctxinstq_t, ctxinst)
821 #define L_LBMR_TOPIC_OPT_CTXINSTQ_T (int) sizeof(lbmr_topic_opt_ctxinstq_t)
823 #define LBMR_TOPIC_OPT_CTXINSTQ_TYPE 0x0C
824 #define LBMR_TOPIC_OPT_CTXINSTQ_FLAG_IGNORE 0x80
825 #define LBMR_TOPIC_OPT_CTXINSTQ_SZ 12
827 /* LBMR topic domain ID option */
833 lbm_uint32_t domain_id
;
834 } lbmr_topic_opt_domain_id_t
;
835 #define O_LBMR_TOPIC_OPT_DOMAIN_ID_T_TYPE OFFSETOF(lbmr_topic_opt_domain_id_t, type)
836 #define L_LBMR_TOPIC_OPT_DOMAIN_ID_T_TYPE SIZEOF(lbmr_topic_opt_domain_id_t, type)
837 #define O_LBMR_TOPIC_OPT_DOMAIN_ID_T_LEN OFFSETOF(lbmr_topic_opt_domain_id_t, len)
838 #define L_LBMR_TOPIC_OPT_DOMAIN_ID_T_LEN SIZEOF(lbmr_topic_opt_domain_id_t, len)
839 #define O_LBMR_TOPIC_OPT_DOMAIN_ID_T_FLAGS OFFSETOF(lbmr_topic_opt_domain_id_t, flags)
840 #define L_LBMR_TOPIC_OPT_DOMAIN_ID_T_FLAGS SIZEOF(lbmr_topic_opt_domain_id_t, flags)
841 #define O_LBMR_TOPIC_OPT_DOMAIN_ID_T_DOMAIN_ID OFFSETOF(lbmr_topic_opt_domain_id_t, domain_id)
842 #define L_LBMR_TOPIC_OPT_DOMAIN_ID_T_DOMAIN_ID SIZEOF(lbmr_topic_opt_domain_id_t, domain_id)
843 #define L_LBMR_TOPIC_OPT_DOMAIN_ID_T (int) sizeof(lbmr_topic_opt_domain_id_t)
845 #define LBMR_TOPIC_OPT_DOMAIN_ID_TYPE 0x0D
846 #define LBMR_TOPIC_OPT_DOMAIN_ID_FLAG_IGNORE 0x8000
847 #define LBMR_TOPIC_OPT_DOMAIN_ID_SZ 8
849 /* LBMR topic extended functionality option */
855 lbm_uint16_t src_tcp_port
;
856 lbm_uint16_t reserved
;
857 lbm_uint32_t src_ip_addr
;
858 lbm_uint32_t functionality_flags
;
859 } lbmr_topic_opt_exfunc_t
;
860 #define O_LBMR_TOPIC_OPT_EXFUNC_T_TYPE OFFSETOF(lbmr_topic_opt_exfunc_t, type)
861 #define L_LBMR_TOPIC_OPT_EXFUNC_T_TYPE SIZEOF(lbmr_topic_opt_exfunc_t, type)
862 #define O_LBMR_TOPIC_OPT_EXFUNC_T_LEN OFFSETOF(lbmr_topic_opt_exfunc_t, len)
863 #define L_LBMR_TOPIC_OPT_EXFUNC_T_LEN SIZEOF(lbmr_topic_opt_exfunc_t, len)
864 #define O_LBMR_TOPIC_OPT_EXFUNC_T_FLAGS OFFSETOF(lbmr_topic_opt_exfunc_t, flags)
865 #define L_LBMR_TOPIC_OPT_EXFUNC_T_FLAGS SIZEOF(lbmr_topic_opt_exfunc_t, flags)
866 #define O_LBMR_TOPIC_OPT_EXFUNC_T_SRC_TCP_PORT OFFSETOF(lbmr_topic_opt_exfunc_t, src_tcp_port)
867 #define L_LBMR_TOPIC_OPT_EXFUNC_T_SRC_TCP_PORT SIZEOF(lbmr_topic_opt_exfunc_t, src_tcp_port)
868 #define O_LBMR_TOPIC_OPT_EXFUNC_T_RESERVED OFFSETOF(lbmr_topic_opt_exfunc_t, reserved)
869 #define L_LBMR_TOPIC_OPT_EXFUNC_T_RESERVED SIZEOF(lbmr_topic_opt_exfunc_t, reserved)
870 #define O_LBMR_TOPIC_OPT_EXFUNC_T_SRC_IP_ADDR OFFSETOF(lbmr_topic_opt_exfunc_t, src_ip_addr)
871 #define L_LBMR_TOPIC_OPT_EXFUNC_T_SRC_IP_ADDR SIZEOF(lbmr_topic_opt_exfunc_t, src_ip_addr)
872 #define O_LBMR_TOPIC_OPT_EXFUNC_T_FUNCTIONALITY_FLAGS OFFSETOF(lbmr_topic_opt_exfunc_t, functionality_flags)
873 #define L_LBMR_TOPIC_OPT_EXFUNC_T_FUNCTIONALITY_FLAGS SIZEOF(lbmr_topic_opt_exfunc_t, functionality_flags)
874 #define L_LBMR_TOPIC_OPT_EXFUNC_T (int) sizeof(lbmr_topic_opt_exfunc_t)
876 #define LBMR_TOPIC_OPT_EXFUNC_TYPE 0x0E
877 #define LBMR_TOPIC_OPT_EXFUNC_FLAG_IGNORE 0x8000
878 #define LBMR_TOPIC_OPT_EXFUNC_SZ 16
881 #define LBMR_TRANSPORT_TCP 0x00
882 #define LBMR_TRANSPORT_LBTRU 0x01
883 #define LBMR_TRANSPORT_TCP6 0x02
884 #define LBMR_TRANSPORT_LBTSMX 0x4
885 #define LBMR_TRANSPORT_LBTRM 0x10
886 #define LBMR_TRANSPORT_LBTIPC 0x40
887 #define LBMR_TRANSPORT_LBTRDMA 0x20
888 #define LBMR_TRANSPORT_PGM 0x11
890 #define LBMR_TRANSPORT_OPTION_MASK 0x80
892 /* LBMR context info */
895 lbm_uint8_t ver_type
;
896 lbm_uint8_t ext_type
;
898 lbm_uint8_t hop_count
;
902 lbm_uint8_t instance
[LBM_CONTEXT_INSTANCE_BLOCK_SZ
];
904 #define O_LBMR_CTXINFO_T_VER_TYPE OFFSETOF(lbmr_ctxinfo_t, ver_type)
905 #define L_LBMR_CTXINFO_T_VER_TYPE SIZEOF(lbmr_ctxinfo_t, ver_type)
906 #define O_LBMR_CTXINFO_T_EXT_TYPE OFFSETOF(lbmr_ctxinfo_t, ext_type)
907 #define L_LBMR_CTXINFO_T_EXT_TYPE SIZEOF(lbmr_ctxinfo_t, ext_type)
908 #define O_LBMR_CTXINFO_T_LEN OFFSETOF(lbmr_ctxinfo_t, len)
909 #define L_LBMR_CTXINFO_T_LEN SIZEOF(lbmr_ctxinfo_t, len)
910 #define O_LBMR_CTXINFO_T_HOP_COUNT OFFSETOF(lbmr_ctxinfo_t, hop_count)
911 #define L_LBMR_CTXINFO_T_HOP_COUNT SIZEOF(lbmr_ctxinfo_t, hop_count)
912 #define O_LBMR_CTXINFO_T_FLAGS OFFSETOF(lbmr_ctxinfo_t, flags)
913 #define L_LBMR_CTXINFO_T_FLAGS SIZEOF(lbmr_ctxinfo_t, flags)
914 #define O_LBMR_CTXINFO_T_PORT OFFSETOF(lbmr_ctxinfo_t, port)
915 #define L_LBMR_CTXINFO_T_PORT SIZEOF(lbmr_ctxinfo_t, port)
916 #define O_LBMR_CTXINFO_T_IP OFFSETOF(lbmr_ctxinfo_t, ip)
917 #define L_LBMR_CTXINFO_T_IP SIZEOF(lbmr_ctxinfo_t, ip)
918 #define O_LBMR_CTXINFO_T_INSTANCE OFFSETOF(lbmr_ctxinfo_t, instance)
919 #define L_LBMR_CTXINFO_T_INSTANCE SIZEOF(lbmr_ctxinfo_t, instance)
920 #define L_LBMR_CTXINFO_T (int) sizeof(lbmr_ctxinfo_t)
922 #define LBMR_CTXINFO_QUERY_FLAG 0x8000
923 #define LBMR_CTXINFO_IP_FLAG 0x4000
924 #define LBMR_CTXINFO_INSTANCE_FLAG 0x2000
925 #define LBMR_CTXINFO_TNWG_SRC_FLAG 0x1000
926 #define LBMR_CTXINFO_TNWG_RCV_FLAG 0x0800
927 #define LBMR_CTXINFO_PROXY_FLAG 0x0400
928 #define LBMR_CTXINFO_NAME_FLAG 0x0001
930 /* LBMR topic resolution request */
933 lbm_uint8_t ver_type
;
934 lbm_uint8_t ext_type
;
936 } lbmr_topic_res_request_t
;
937 #define O_LBMR_TOPIC_RES_REQUEST_T_VER_TYPE OFFSETOF(lbmr_topic_res_request_t, ver_type)
938 #define L_LBMR_TOPIC_RES_REQUEST_T_VER_TYPE SIZEOF(lbmr_topic_res_request_t, ver_type)
939 #define O_LBMR_TOPIC_RES_REQUEST_T_EXT_TYPE OFFSETOF(lbmr_topic_res_request_t, ext_type)
940 #define L_LBMR_TOPIC_RES_REQUEST_T_EXT_TYPE SIZEOF(lbmr_topic_res_request_t, ext_type)
941 #define O_LBMR_TOPIC_RES_REQUEST_T_FLAGS OFFSETOF(lbmr_topic_res_request_t, flags)
942 #define L_LBMR_TOPIC_RES_REQUEST_T_FLAGS SIZEOF(lbmr_topic_res_request_t, flags)
943 #define L_LBMR_TOPIC_RES_REQUEST_T (int) sizeof(lbmr_topic_res_request_t)
945 #define LBM_TOPIC_RES_REQUEST_GW_REMOTE_INTEREST 0x40
946 #define LBM_TOPIC_RES_REQUEST_CONTEXT_QUERY 0x20
947 #define LBM_TOPIC_RES_REQUEST_CONTEXT_ADVERTISEMENT 0x10
948 #define LBM_TOPIC_RES_REQUEST_RESERVED1 0x08
949 #define LBM_TOPIC_RES_REQUEST_ADVERTISEMENT 0x04
950 #define LBM_TOPIC_RES_REQUEST_QUERY 0x02
951 #define LBM_TOPIC_RES_REQUEST_WILDCARD_QUERY 0x01
953 /* LBMR topic management block */
959 #define O_LBMR_TMB_T_LEN OFFSETOF(lbmr_tmb_t, len)
960 #define L_LBMR_TMB_T_LEN SIZEOF(lbmr_tmb_t, len)
961 #define O_LBMR_TMB_T_TMRS OFFSETOF(lbmr_tmb_t, tmrs)
962 #define L_LBMR_TMB_T_TMRS SIZEOF(lbmr_tmb_t, tmrs)
963 #define L_LBMR_TMB_T (int) sizeof(lbmr_tmb_t)
965 /* LBMR topic management record */
972 #define O_LBMR_TMR_T_LEN OFFSETOF(lbmr_tmr_t, len)
973 #define L_LBMR_TMR_T_LEN SIZEOF(lbmr_tmr_t, len)
974 #define O_LBMR_TMR_T_TYPE OFFSETOF(lbmr_tmr_t, type)
975 #define L_LBMR_TMR_T_TYPE SIZEOF(lbmr_tmr_t, type)
976 #define O_LBMR_TMR_T_FLAGS OFFSETOF(lbmr_tmr_t, flags)
977 #define L_LBMR_TMR_T_FLAGS SIZEOF(lbmr_tmr_t, flags)
978 #define L_LBMR_TMR_T (int) sizeof(lbmr_tmr_t)
980 #define LBMR_TMR_LEAVE_TOPIC 0x00
981 #define LBMR_TMR_TOPIC_USE 0x01
983 #define LBMR_TMR_FLAG_RESPONSE 0x80
984 #define LBMR_TMR_FLAG_WILDCARD_PCRE 0x40
985 #define LBMR_TMR_FLAG_WILDCARD_REGEX 0x20
986 #define LBMR_TMR_FLAG_WILDCARD_MASK (LBMR_TMR_FLAG_WILDCARD_PCRE | LBMR_TMR_FLAG_WILDCARD_REGEX)
988 /* LBMR queue information record */
991 lbm_uint32_t queue_id
;
992 lbm_uint32_t queue_ver
;
993 lbm_uint32_t queue_prev_ver
;
994 lbm_uint16_t grp_blks
;
995 lbm_uint16_t queue_blks
;
997 #define O_LBMR_QIR_T_QUEUE_ID OFFSETOF(lbmr_qir_t, queue_id)
998 #define L_LBMR_QIR_T_QUEUE_ID SIZEOF(lbmr_qir_t, queue_id)
999 #define O_LBMR_QIR_T_QUEUE_VER OFFSETOF(lbmr_qir_t, queue_ver)
1000 #define L_LBMR_QIR_T_QUEUE_VER SIZEOF(lbmr_qir_t, queue_ver)
1001 #define O_LBMR_QIR_T_QUEUE_PREV_VER OFFSETOF(lbmr_qir_t, queue_prev_ver)
1002 #define L_LBMR_QIR_T_QUEUE_PREV_VER SIZEOF(lbmr_qir_t, queue_prev_ver)
1003 #define O_LBMR_QIR_T_GRP_BLKS OFFSETOF(lbmr_qir_t, grp_blks)
1004 #define L_LBMR_QIR_T_GRP_BLKS SIZEOF(lbmr_qir_t, grp_blks)
1005 #define O_LBMR_QIR_T_QUEUE_BLKS OFFSETOF(lbmr_qir_t, queue_blks)
1006 #define L_LBMR_QIR_T_QUEUE_BLKS SIZEOF(lbmr_qir_t, queue_blks)
1007 #define L_LBMR_QIR_T (int) sizeof(lbmr_qir_t)
1009 #define LBMR_QIR_OPTIONS 0x8000
1010 #define LBMR_QIR_GRP_BLOCKS_MASK 0x7fff
1012 /* LBMR queue group block record */
1015 lbm_uint16_t grp_idx
;
1016 lbm_uint16_t grp_sz
;
1017 } lbmr_qir_grp_blk_t
;
1018 #define O_LBMR_QIR_GRP_BLK_T_GRP_IDX OFFSETOF(lbmr_qir_grp_blk_t, grp_idx)
1019 #define L_LBMR_QIR_GRP_BLK_T_GRP_IDX SIZEOF(lbmr_qir_grp_blk_t, grp_idx)
1020 #define O_LBMR_QIR_GRP_BLK_T_GRP_SZ OFFSETOF(lbmr_qir_grp_blk_t, grp_sz)
1021 #define L_LBMR_QIR_GRP_BLK_T_GRP_SZ SIZEOF(lbmr_qir_grp_blk_t, grp_sz)
1022 #define L_LBMR_QIR_GRP_BLK_T (int) sizeof(lbmr_qir_grp_blk_t)
1024 /* LBMR queue block record */
1030 lbm_uint16_t grp_idx
;
1031 lbm_uint16_t reserved
;
1032 } lbmr_qir_queue_blk_t
;
1033 #define O_LBMR_QIR_QUEUE_BLK_T_IP OFFSETOF(lbmr_qir_queue_blk_t, ip)
1034 #define L_LBMR_QIR_QUEUE_BLK_T_IP SIZEOF(lbmr_qir_queue_blk_t, ip)
1035 #define O_LBMR_QIR_QUEUE_BLK_T_PORT OFFSETOF(lbmr_qir_queue_blk_t, port)
1036 #define L_LBMR_QIR_QUEUE_BLK_T_PORT SIZEOF(lbmr_qir_queue_blk_t, port)
1037 #define O_LBMR_QIR_QUEUE_BLK_T_IDX OFFSETOF(lbmr_qir_queue_blk_t, idx)
1038 #define L_LBMR_QIR_QUEUE_BLK_T_IDX SIZEOF(lbmr_qir_queue_blk_t, idx)
1039 #define O_LBMR_QIR_QUEUE_BLK_T_GRP_IDX OFFSETOF(lbmr_qir_queue_blk_t, grp_idx)
1040 #define L_LBMR_QIR_QUEUE_BLK_T_GRP_IDX SIZEOF(lbmr_qir_queue_blk_t, grp_idx)
1041 #define O_LBMR_QIR_QUEUE_BLK_T_RESERVED OFFSETOF(lbmr_qir_queue_blk_t, reserved)
1042 #define L_LBMR_QIR_QUEUE_BLK_T_RESERVED SIZEOF(lbmr_qir_queue_blk_t, reserved)
1043 #define L_LBMR_QIR_QUEUE_BLK_T (int) sizeof(lbmr_qir_queue_blk_t)
1045 #define LBMR_QIR_QUEUE_BLK_FLAG_MASTER 0x8000
1047 /* LBMR packet option header */
1053 } lbmr_lbmr_opt_hdr_t
;
1054 #define O_LBMR_LBMR_OPT_HDR_T_TYPE OFFSETOF(lbmr_lbmr_opt_hdr_t, type)
1055 #define L_LBMR_LBMR_OPT_HDR_T_TYPE SIZEOF(lbmr_lbmr_opt_hdr_t, type)
1056 #define O_LBMR_LBMR_OPT_HDR_T_LEN OFFSETOF(lbmr_lbmr_opt_hdr_t, len)
1057 #define L_LBMR_LBMR_OPT_HDR_T_LEN SIZEOF(lbmr_lbmr_opt_hdr_t, len)
1058 #define O_LBMR_LBMR_OPT_HDR_T_FLAGS OFFSETOF(lbmr_lbmr_opt_hdr_t, flags)
1059 #define L_LBMR_LBMR_OPT_HDR_T_FLAGS SIZEOF(lbmr_lbmr_opt_hdr_t, flags)
1060 #define L_LBMR_LBMR_OPT_HDR_T (int) sizeof(lbmr_lbmr_opt_hdr_t)
1062 #define LBMR_LBMR_OPT_HDR_FLAG_IGNORE 0x8000
1063 #define LBMR_LBMR_OPT_HDR_FLAG_VIRAL 0x0001
1065 /* LBMR packet option length header */
1070 lbm_uint16_t total_len
;
1071 } lbmr_lbmr_opt_len_t
;
1072 #define O_LBMR_LBMR_OPT_LEN_T_TYPE OFFSETOF(lbmr_lbmr_opt_len_t, type)
1073 #define L_LBMR_LBMR_OPT_LEN_T_TYPE SIZEOF(lbmr_lbmr_opt_len_t, type)
1074 #define O_LBMR_LBMR_OPT_LEN_T_LEN OFFSETOF(lbmr_lbmr_opt_len_t, len)
1075 #define L_LBMR_LBMR_OPT_LEN_T_LEN SIZEOF(lbmr_lbmr_opt_len_t, len)
1076 #define O_LBMR_LBMR_OPT_LEN_T_TOTAL_LEN OFFSETOF(lbmr_lbmr_opt_len_t, total_len)
1077 #define L_LBMR_LBMR_OPT_LEN_T_TOTAL_LEN SIZEOF(lbmr_lbmr_opt_len_t, total_len)
1078 #define L_LBMR_LBMR_OPT_LEN_T (int) sizeof(lbmr_lbmr_opt_len_t)
1080 #define LBMR_LBMR_OPT_LEN_TYPE 0x80
1082 /* LBMR packet option source ID header */
1088 lbm_uint8_t src_id
[LBM_CONTEXT_INSTANCE_BLOCK_SZ
];
1089 } lbmr_lbmr_opt_src_id_t
;
1090 #define O_LBMR_LBMR_OPT_SRC_ID_T_TYPE OFFSETOF(lbmr_lbmr_opt_src_id_t, type)
1091 #define L_LBMR_LBMR_OPT_SRC_ID_T_TYPE SIZEOF(lbmr_lbmr_opt_src_id_t, type)
1092 #define O_LBMR_LBMR_OPT_SRC_ID_T_LEN OFFSETOF(lbmr_lbmr_opt_src_id_t, len)
1093 #define L_LBMR_LBMR_OPT_SRC_ID_T_LEN SIZEOF(lbmr_lbmr_opt_src_id_t, len)
1094 #define O_LBMR_LBMR_OPT_SRC_ID_T_FLAGS OFFSETOF(lbmr_lbmr_opt_src_id_t, flags)
1095 #define L_LBMR_LBMR_OPT_SRC_ID_T_FLAGS SIZEOF(lbmr_lbmr_opt_src_id_t, flags)
1096 #define O_LBMR_LBMR_OPT_SRC_ID_T_SRC_ID OFFSETOF(lbmr_lbmr_opt_src_id_t, src_id)
1097 #define L_LBMR_LBMR_OPT_SRC_ID_T_SRC_ID SIZEOF(lbmr_lbmr_opt_src_id_t, src_id)
1098 #define L_LBMR_LBMR_OPT_SRC_ID_T (int) sizeof(lbmr_lbmr_opt_src_id_t)
1100 #define LBMR_LBMR_OPT_SRC_ID_TYPE 0x81
1101 #define LBMR_LBMR_OPT_SRC_ID_FLAG_IGNORE 0x8000
1103 /* LBMR packet option source type header */
1109 lbm_uint8_t src_type
;
1110 } lbmr_lbmr_opt_src_type_t
;
1111 #define O_LBMR_LBMR_OPT_SRC_TYPE_T_TYPE OFFSETOF(lbmr_lbmr_opt_src_type_t, type)
1112 #define L_LBMR_LBMR_OPT_SRC_TYPE_T_TYPE SIZEOF(lbmr_lbmr_opt_src_type_t, type)
1113 #define O_LBMR_LBMR_OPT_SRC_TYPE_T_LEN OFFSETOF(lbmr_lbmr_opt_src_type_t, len)
1114 #define L_LBMR_LBMR_OPT_SRC_TYPE_T_LEN SIZEOF(lbmr_lbmr_opt_src_type_t, len)
1115 #define O_LBMR_LBMR_OPT_SRC_TYPE_T_FLAGS OFFSETOF(lbmr_lbmr_opt_src_type_t, flags)
1116 #define L_LBMR_LBMR_OPT_SRC_TYPE_T_FLAGS SIZEOF(lbmr_lbmr_opt_src_type_t, flags)
1117 #define O_LBMR_LBMR_OPT_SRC_TYPE_T_SRC_TYPE OFFSETOF(lbmr_lbmr_opt_src_type_t, src_type)
1118 #define L_LBMR_LBMR_OPT_SRC_TYPE_T_SRC_TYPE SIZEOF(lbmr_lbmr_opt_src_type_t, src_type)
1119 #define L_LBMR_LBMR_OPT_SRC_TYPE_T (int) sizeof(lbmr_lbmr_opt_src_type_t)
1121 #define LBMR_LBMR_OPT_SRC_TYPE_TYPE 0x82
1122 #define LBMR_LBMR_OPT_SRC_TYPE_SZ 4
1123 #define LBMR_LBMR_OPT_SRC_TYPE_FLAG_IGNORE 0x80
1125 #define LBMR_LBMR_OPT_SRC_TYPE_SRC_TYPE_APPLICATION 0
1126 #define LBMR_LBMR_OPT_SRC_TYPE_SRC_TYPE_TNWGD 1
1127 #define LBMR_LBMR_OPT_SRC_TYPE_SRC_TYPE_STORE 2
1129 /* LBMR packet option version header */
1135 lbm_uint32_t version
;
1136 } lbmr_lbmr_opt_version_t
;
1137 #define O_LBMR_LBMR_OPT_VERSION_T_TYPE OFFSETOF(lbmr_lbmr_opt_version_t, type)
1138 #define L_LBMR_LBMR_OPT_VERSION_T_TYPE SIZEOF(lbmr_lbmr_opt_version_t, type)
1139 #define O_LBMR_LBMR_OPT_VERSION_T_LEN OFFSETOF(lbmr_lbmr_opt_version_t, len)
1140 #define L_LBMR_LBMR_OPT_VERSION_T_LEN SIZEOF(lbmr_lbmr_opt_version_t, len)
1141 #define O_LBMR_LBMR_OPT_VERSION_T_FLAGS OFFSETOF(lbmr_lbmr_opt_version_t, flags)
1142 #define L_LBMR_LBMR_OPT_VERSION_T_FLAGS SIZEOF(lbmr_lbmr_opt_version_t, flags)
1143 #define O_LBMR_LBMR_OPT_VERSION_T_VERSION OFFSETOF(lbmr_lbmr_opt_version_t, version)
1144 #define L_LBMR_LBMR_OPT_VERSION_T_VERSION SIZEOF(lbmr_lbmr_opt_version_t, version)
1145 #define L_LBMR_LBMR_OPT_VERSION_T (int) sizeof(lbmr_lbmr_opt_version_t)
1147 #define LBMR_LBMR_OPT_VERSION_TYPE 0x83
1148 #define LBMR_LBMR_OPT_VERSIION_SZ 8
1149 #define LBMR_LBMR_OPT_VERSION_FLAG_IGNORE 0x8000
1150 #define LBMR_LBMR_OPT_VERSION_FLAG_UME 0x0001
1151 #define LBMR_LBMR_OPT_VERSION_FLAG_UMQ 0x0002
1153 /* LBMR packet option domain header */
1159 lbm_uint32_t local_domain_id
;
1160 } lbmr_lbmr_opt_local_domain_t
;
1161 #define O_LBMR_LBMR_OPT_LOCAL_DOMAIN_T_TYPE OFFSETOF(lbmr_lbmr_opt_local_domain_t, type)
1162 #define L_LBMR_LBMR_OPT_LOCAL_DOMAIN_T_TYPE SIZEOF(lbmr_lbmr_opt_local_domain_t, type)
1163 #define O_LBMR_LBMR_OPT_LOCAL_DOMAIN_T_LEN OFFSETOF(lbmr_lbmr_opt_local_domain_t, len)
1164 #define L_LBMR_LBMR_OPT_LOCAL_DOMAIN_T_LEN SIZEOF(lbmr_lbmr_opt_local_domain_t, len)
1165 #define O_LBMR_LBMR_OPT_LOCAL_DOMAIN_T_FLAGS OFFSETOF(lbmr_lbmr_opt_local_domain_t, flags)
1166 #define L_LBMR_LBMR_OPT_LOCAL_DOMAIN_T_FLAGS SIZEOF(lbmr_lbmr_opt_local_domain_t, flags)
1167 #define O_LBMR_LBMR_OPT_LOCAL_DOMAIN_T_LOCAL_DOMAIN_ID OFFSETOF(lbmr_lbmr_opt_local_domain_t, local_domain_id)
1168 #define L_LBMR_LBMR_OPT_LOCAL_DOMAIN_T_LOCAL_DOMAIN_ID SIZEOF(lbmr_lbmr_opt_local_domain_t, local_domain_id)
1169 #define L_LBMR_LBMR_OPT_LOCAL_DOMAIN_T (int) sizeof(lbmr_lbmr_opt_local_domain_t)
1171 #define LBMR_LBMR_OPT_LOCAL_DOMAIN_TYPE 0x84
1172 #define LBMR_LBMR_OPT_LOCAL_DOMAIN_SZ 8
1173 #define LBMR_LBMR_OPT_LOCAL_DOMAIN_FLAG_IGNORE 0x8000
1175 /* LBMR (extended) proxy source election record */
1178 lbm_uint8_t ver_type
;
1179 lbm_uint8_t ext_type
;
1180 lbm_uint16_t dep_type
;
1183 lbm_uint32_t source_ip
;
1184 lbm_uint32_t store_ip
;
1185 lbm_uint32_t transport_idx
;
1186 lbm_uint32_t topic_idx
;
1187 lbm_uint16_t source_port
;
1188 lbm_uint16_t store_port
;
1190 #define O_LBMR_PSER_T_VER_TYPE OFFSETOF(lbmr_pser_t, ver_type)
1191 #define L_LBMR_PSER_T_VER_TYPE SIZEOF(lbmr_pser_t, ver_type)
1192 #define O_LBMR_PSER_T_EXT_TYPE OFFSETOF(lbmr_pser_t, ext_type)
1193 #define L_LBMR_PSER_T_EXT_TYPE SIZEOF(lbmr_pser_t, ext_type)
1194 #define O_LBMR_PSER_T_DEP_TYPE OFFSETOF(lbmr_pser_t, dep_type)
1195 #define L_LBMR_PSER_T_DEP_TYPE SIZEOF(lbmr_pser_t, dep_type)
1196 #define O_LBMR_PSER_T_LEN OFFSETOF(lbmr_pser_t, len)
1197 #define L_LBMR_PSER_T_LEN SIZEOF(lbmr_pser_t, len)
1198 #define O_LBMR_PSER_T_FLAGS OFFSETOF(lbmr_pser_t, flags)
1199 #define L_LBMR_PSER_T_FLAGS SIZEOF(lbmr_pser_t, flags)
1200 #define O_LBMR_PSER_T_SOURCE_IP OFFSETOF(lbmr_pser_t, source_ip)
1201 #define L_LBMR_PSER_T_SOURCE_IP SIZEOF(lbmr_pser_t, source_ip)
1202 #define O_LBMR_PSER_T_STORE_IP OFFSETOF(lbmr_pser_t, store_ip)
1203 #define L_LBMR_PSER_T_STORE_IP SIZEOF(lbmr_pser_t, store_ip)
1204 #define O_LBMR_PSER_T_TRANSPORT_IDX OFFSETOF(lbmr_pser_t, transport_idx)
1205 #define L_LBMR_PSER_T_TRANSPORT_IDX SIZEOF(lbmr_pser_t, transport_idx)
1206 #define O_LBMR_PSER_T_TOPIC_IDX OFFSETOF(lbmr_pser_t, topic_idx)
1207 #define L_LBMR_PSER_T_TOPIC_IDX SIZEOF(lbmr_pser_t, topic_idx)
1208 #define O_LBMR_PSER_T_SOURCE_PORT OFFSETOF(lbmr_pser_t, source_port)
1209 #define L_LBMR_PSER_T_SOURCE_PORT SIZEOF(lbmr_pser_t, source_port)
1210 #define O_LBMR_PSER_T_STORE_PORT OFFSETOF(lbmr_pser_t, store_port)
1211 #define L_LBMR_PSER_T_STORE_PORT SIZEOF(lbmr_pser_t, store_port)
1212 #define O_LBMR_PSER_T_TOPIC (O_LBMR_PSER_T_STORE_PORT + L_LBMR_PSER_T_STORE_PORT)
1213 #define L_LBMR_PSER_T (int) sizeof(lbmr_pser_t)
1215 #define LBMR_PSER_OPT_FLAG 0x8000
1216 #define LBMR_HDR_EXT_TYPE_UME_PROXY_SRC_ELECT_DEP_ELECT 0
1217 #define LBMR_HDR_EXT_TYPE_UME_PROXY_SRC_ELECT_DEP_REELECT 1
1222 lbm_uint16_t optlen
;
1223 } lbmr_pser_optlen_t
;
1224 #define O_LBMR_PSER_OPTLEN_T_TYPE OFFSETOF(lbmr_pser_optlen_t, type)
1225 #define L_LBMR_PSER_OPTLEN_T_TYPE SIZEOF(lbmr_pser_optlen_t, type)
1226 #define O_LBMR_PSER_OPTLEN_T_OPTLEN OFFSETOF(lbmr_pser_optlen_t, optlen)
1227 #define L_LBMR_PSER_OPTLEN_T_OPTLEN SIZEOF(lbmr_pser_optlen_t, optlen)
1228 #define L_LBMR_PSER_OPTLEN_T (int) sizeof(lbmr_pser_optlen_t)
1234 } lbmr_pser_opt_hdr_t
;
1235 #define O_LBMR_PSER_OPT_HDR_T_LEN OFFSETOF(lbmr_pser_opt_hdr_t, len)
1236 #define L_LBMR_PSER_OPT_HDR_T_LEN SIZEOF(lbmr_pser_opt_hdr_t, len)
1237 #define O_LBMR_PSER_OPT_HDR_T_TYPE OFFSETOF(lbmr_pser_opt_hdr_t, type)
1238 #define L_LBMR_PSER_OPT_HDR_T_TYPE SIZEOF(lbmr_pser_opt_hdr_t, type)
1239 #define L_LBMR_PSER_OPT_HDR_T (int) sizeof(lbmr_pser_opt_hdr_t)
1241 #define LBMR_PSER_OPT_SRC_CTXINST_TYPE 0x00
1242 #define LBMR_PSER_OPT_STORE_CTXINST_TYPE 0x01
1248 lbm_uint8_t ctxinst
[LBM_CONTEXT_INSTANCE_BLOCK_SZ
];
1249 } lbmr_pser_opt_ctxinst_t
;
1250 #define O_LBMR_PSER_OPT_CTXINST_T_LEN OFFSETOF(lbmr_pser_opt_ctxinst_t, len)
1251 #define L_LBMR_PSER_OPT_CTXINST_T_LEN SIZEOF(lbmr_pser_opt_ctxinst_t, len)
1252 #define O_LBMR_PSER_OPT_CTXINST_T_TYPE OFFSETOF(lbmr_pser_opt_ctxinst_t, type)
1253 #define L_LBMR_PSER_OPT_CTXINST_T_TYPE SIZEOF(lbmr_pser_opt_ctxinst_t, type)
1254 #define O_LBMR_PSER_OPT_CTXINST_T_CTXINST OFFSETOF(lbmr_pser_opt_ctxinst_t, ctxinst)
1255 #define L_LBMR_PSER_OPT_CTXINST_T_CTXINST SIZEOF(lbmr_pser_opt_ctxinst_t, ctxinst)
1256 #define L_LBMR_PSER_OPT_CTXINST_T (int) sizeof(lbmr_pser_opt_ctxinst_t)
1258 /* LBMR (extended) gateway message */
1261 lbm_uint8_t ver_type
;
1262 lbm_uint8_t ext_type
;
1265 lbm_uint16_t reserved
;
1267 #define O_LBMR_TNWG_T_VER_TYPE OFFSETOF(lbmr_tnwg_t, ver_type)
1268 #define L_LBMR_TNWG_T_VER_TYPE SIZEOF(lbmr_tnwg_t, ver_type)
1269 #define O_LBMR_TNWG_T_EXT_TYPE OFFSETOF(lbmr_tnwg_t, ext_type)
1270 #define L_LBMR_TNWG_T_EXT_TYPE SIZEOF(lbmr_tnwg_t, ext_type)
1271 #define O_LBMR_TNWG_T_LEN OFFSETOF(lbmr_tnwg_t, len)
1272 #define L_LBMR_TNWG_T_LEN SIZEOF(lbmr_tnwg_t, len)
1273 #define O_LBMR_TNWG_T_TYPE OFFSETOF(lbmr_tnwg_t, type)
1274 #define L_LBMR_TNWG_T_TYPE SIZEOF(lbmr_tnwg_t, type)
1275 #define O_LBMR_TNWG_T_RESERVED OFFSETOF(lbmr_tnwg_t, reserved)
1276 #define L_LBMR_TNWG_T_RESERVED SIZEOF(lbmr_tnwg_t, reserved)
1277 #define L_LBMR_TNWG_T (int) sizeof(lbmr_tnwg_t)
1279 #define LBMR_TNWG_TYPE_INTEREST 0x0000
1280 #define LBMR_TNWG_TYPE_CTXINFO 0x0001
1281 #define LBMR_TNWG_TYPE_TRREQ 0x0002
1283 /* LBMR (extended) gateway message - interest header */
1288 } lbmr_tnwg_interest_t
;
1289 #define O_LBMR_TNWG_INTEREST_T_LEN OFFSETOF(lbmr_tnwg_interest_t, len)
1290 #define L_LBMR_TNWG_INTEREST_T_LEN SIZEOF(lbmr_tnwg_interest_t, len)
1291 #define O_LBMR_TNWG_INTEREST_T_COUNT OFFSETOF(lbmr_tnwg_interest_t, count)
1292 #define L_LBMR_TNWG_INTEREST_T_COUNT SIZEOF(lbmr_tnwg_interest_t, count)
1293 #define L_LBMR_TNWG_INTEREST_T (int) sizeof(lbmr_tnwg_interest_t)
1295 /* LBMR (extended) gateway message - interest record */
1300 lbm_uint8_t pattype
;
1301 lbm_uint32_t domain_id
;
1302 } lbmr_tnwg_interest_rec_t
;
1303 #define O_LBMR_TNWG_INTEREST_REC_T_LEN OFFSETOF(lbmr_tnwg_interest_rec_t, len)
1304 #define L_LBMR_TNWG_INTEREST_REC_T_LEN SIZEOF(lbmr_tnwg_interest_rec_t, len)
1305 #define O_LBMR_TNWG_INTEREST_REC_T_FLAGS OFFSETOF(lbmr_tnwg_interest_rec_t, flags)
1306 #define L_LBMR_TNWG_INTEREST_REC_T_FLAGS SIZEOF(lbmr_tnwg_interest_rec_t, flags)
1307 #define O_LBMR_TNWG_INTEREST_REC_T_PATTYPE OFFSETOF(lbmr_tnwg_interest_rec_t, pattype)
1308 #define L_LBMR_TNWG_INTEREST_REC_T_PATTYPE SIZEOF(lbmr_tnwg_interest_rec_t, pattype)
1309 #define O_LBMR_TNWG_INTEREST_REC_T_DOMAIN_ID OFFSETOF(lbmr_tnwg_interest_rec_t, domain_id)
1310 #define L_LBMR_TNWG_INTEREST_REC_T_DOMAIN_ID SIZEOF(lbmr_tnwg_interest_rec_t, domain_id)
1311 #define L_LBMR_TNWG_INTEREST_REC_T (int) sizeof(lbmr_tnwg_interest_rec_t)
1313 #define LBMR_TNWG_INTEREST_REC_PATTERN_FLAG 0x80
1314 #define LBMR_TNWG_INTEREST_REC_CANCEL_FLAG 0x40
1315 #define LBMR_TNWG_INTEREST_REC_REFRESH_FLAG 0x20
1317 /* LBMR (extended) gateway message - ctxinfo header */
1321 lbm_uint8_t hop_count
;
1322 lbm_uint8_t reserved
;
1323 lbm_uint32_t flags1
;
1324 lbm_uint32_t flags2
;
1325 } lbmr_tnwg_ctxinfo_t
;
1326 #define O_LBMR_TNWG_CTXINFO_T_LEN OFFSETOF(lbmr_tnwg_ctxinfo_t, len)
1327 #define L_LBMR_TNWG_CTXINFO_T_LEN SIZEOF(lbmr_tnwg_ctxinfo_t, len)
1328 #define O_LBMR_TNWG_CTXINFO_T_HOP_COUNT OFFSETOF(lbmr_tnwg_ctxinfo_t, hop_count)
1329 #define L_LBMR_TNWG_CTXINFO_T_HOP_COUNT SIZEOF(lbmr_tnwg_ctxinfo_t, hop_count)
1330 #define O_LBMR_TNWG_CTXINFO_T_RESERVED OFFSETOF(lbmr_tnwg_ctxinfo_t, reserved)
1331 #define L_LBMR_TNWG_CTXINFO_T_RESERVED SIZEOF(lbmr_tnwg_ctxinfo_t, reserved)
1332 #define O_LBMR_TNWG_CTXINFO_T_FLAGS1 OFFSETOF(lbmr_tnwg_ctxinfo_t, flags1)
1333 #define L_LBMR_TNWG_CTXINFO_T_FLAGS1 SIZEOF(lbmr_tnwg_ctxinfo_t, flags1)
1334 #define O_LBMR_TNWG_CTXINFO_T_FLAGS2 OFFSETOF(lbmr_tnwg_ctxinfo_t, flags2)
1335 #define L_LBMR_TNWG_CTXINFO_T_FLAGS2 SIZEOF(lbmr_tnwg_ctxinfo_t, flags2)
1336 #define L_LBMR_TNWG_CTXINFO_T (int) sizeof(lbmr_tnwg_ctxinfo_t)
1338 #define LBMR_TNWG_CTXINFO_QUERY_FLAG 0x80000000
1339 #define LBMR_TNWG_CTXINFO_TNWG_SRC_FLAG 0x40000000
1340 #define LBMR_TNWG_CTXINFO_TNWG_RCV_FLAG 0x20000000
1341 #define LBMR_TNWG_CTXINFO_PROXY_FLAG 0x10000000
1343 /* LBMR (extended) gateway message - topic res request header */
1347 } lbmr_tnwg_trreq_t
;
1348 #define O_LBMR_TNWG_TRREQ_T_LEN OFFSETOF(lbmr_tnwg_trreq_t, len)
1349 #define L_LBMR_TNWG_TRREQ_T_LEN SIZEOF(lbmr_tnwg_trreq_t, len)
1350 #define L_LBMR_TNWG_TRREQ_T (int) sizeof(lbmr_tnwg_trreq_t)
1352 /* LBMR (extended) gateway message - basic option */
1359 #define O_LBMR_TNWG_OPT_T_TYPE OFFSETOF(lbmr_tnwg_opt_t, type)
1360 #define L_LBMR_TNWG_OPT_T_TYPE SIZEOF(lbmr_tnwg_opt_t, type)
1361 #define O_LBMR_TNWG_OPT_T_LEN OFFSETOF(lbmr_tnwg_opt_t, len)
1362 #define L_LBMR_TNWG_OPT_T_LEN SIZEOF(lbmr_tnwg_opt_t, len)
1363 #define O_LBMR_TNWG_OPT_T_FLAGS OFFSETOF(lbmr_tnwg_opt_t, flags)
1364 #define L_LBMR_TNWG_OPT_T_FLAGS SIZEOF(lbmr_tnwg_opt_t, flags)
1365 #define L_LBMR_TNWG_OPT_T (int) sizeof(lbmr_tnwg_opt_t)
1367 #define LBMR_TNWG_OPT_IGNORE_FLAG 0x8000
1369 /* LBMR (extended) gateway message - ctxinst option */
1375 lbm_uint8_t instance
[LBM_CONTEXT_INSTANCE_BLOCK_SZ
];
1376 } lbmr_tnwg_opt_ctxinst_t
;
1377 #define O_LBMR_TNWG_OPT_CTXINST_T_TYPE OFFSETOF(lbmr_tnwg_opt_ctxinst_t, type)
1378 #define L_LBMR_TNWG_OPT_CTXINST_T_TYPE SIZEOF(lbmr_tnwg_opt_ctxinst_t, type)
1379 #define O_LBMR_TNWG_OPT_CTXINST_T_LEN OFFSETOF(lbmr_tnwg_opt_ctxinst_t, len)
1380 #define L_LBMR_TNWG_OPT_CTXINST_T_LEN SIZEOF(lbmr_tnwg_opt_ctxinst_t, len)
1381 #define O_LBMR_TNWG_OPT_CTXINST_T_FLAGS OFFSETOF(lbmr_tnwg_opt_ctxinst_t, flags)
1382 #define L_LBMR_TNWG_OPT_CTXINST_T_FLAGS SIZEOF(lbmr_tnwg_opt_ctxinst_t, flags)
1383 #define O_LBMR_TNWG_OPT_CTXINST_T_INSTANCE OFFSETOF(lbmr_tnwg_opt_ctxinst_t, instance)
1384 #define L_LBMR_TNWG_OPT_CTXINST_T_INSTANCE SIZEOF(lbmr_tnwg_opt_ctxinst_t, instance)
1385 #define L_LBMR_TNWG_OPT_CTXINST_T (int) sizeof(lbmr_tnwg_opt_ctxinst_t)
1387 #define LBMR_TNWG_OPT_CTXINST_TYPE 0x00
1389 /* LBMR (extended) gateway message - address option */
1398 } lbmr_tnwg_opt_address_t
;
1399 #define O_LBMR_TNWG_OPT_ADDRESS_T_TYPE OFFSETOF(lbmr_tnwg_opt_address_t, type)
1400 #define L_LBMR_TNWG_OPT_ADDRESS_T_TYPE SIZEOF(lbmr_tnwg_opt_address_t, type)
1401 #define O_LBMR_TNWG_OPT_ADDRESS_T_LEN OFFSETOF(lbmr_tnwg_opt_address_t, len)
1402 #define L_LBMR_TNWG_OPT_ADDRESS_T_LEN SIZEOF(lbmr_tnwg_opt_address_t, len)
1403 #define O_LBMR_TNWG_OPT_ADDRESS_T_FLAGS OFFSETOF(lbmr_tnwg_opt_address_t, flags)
1404 #define L_LBMR_TNWG_OPT_ADDRESS_T_FLAGS SIZEOF(lbmr_tnwg_opt_address_t, flags)
1405 #define O_LBMR_TNWG_OPT_ADDRESS_T_PORT OFFSETOF(lbmr_tnwg_opt_address_t, port)
1406 #define L_LBMR_TNWG_OPT_ADDRESS_T_PORT SIZEOF(lbmr_tnwg_opt_address_t, port)
1407 #define O_LBMR_TNWG_OPT_ADDRESS_T_RES OFFSETOF(lbmr_tnwg_opt_address_t, res)
1408 #define L_LBMR_TNWG_OPT_ADDRESS_T_RES SIZEOF(lbmr_tnwg_opt_address_t, res)
1409 #define O_LBMR_TNWG_OPT_ADDRESS_T_IP OFFSETOF(lbmr_tnwg_opt_address_t, ip)
1410 #define L_LBMR_TNWG_OPT_ADDRESS_T_IP SIZEOF(lbmr_tnwg_opt_address_t, ip)
1411 #define L_LBMR_TNWG_OPT_ADDRESS_T (int) sizeof(lbmr_tnwg_opt_address_t)
1413 #define LBMR_TNWG_OPT_ADDRESS_TYPE 0x01
1415 /* LBMR (extended) gateway message - domain option */
1421 lbm_uint32_t domain_id
;
1422 } lbmr_tnwg_opt_domain_t
;
1423 #define O_LBMR_TNWG_OPT_DOMAIN_T_TYPE OFFSETOF(lbmr_tnwg_opt_domain_t, type)
1424 #define L_LBMR_TNWG_OPT_DOMAIN_T_TYPE SIZEOF(lbmr_tnwg_opt_domain_t, type)
1425 #define O_LBMR_TNWG_OPT_DOMAIN_T_LEN OFFSETOF(lbmr_tnwg_opt_domain_t, len)
1426 #define L_LBMR_TNWG_OPT_DOMAIN_T_LEN SIZEOF(lbmr_tnwg_opt_domain_t, len)
1427 #define O_LBMR_TNWG_OPT_DOMAIN_T_FLAGS OFFSETOF(lbmr_tnwg_opt_domain_t, flags)
1428 #define L_LBMR_TNWG_OPT_DOMAIN_T_FLAGS SIZEOF(lbmr_tnwg_opt_domain_t, flags)
1429 #define O_LBMR_TNWG_OPT_DOMAIN_T_DOMAIN_ID OFFSETOF(lbmr_tnwg_opt_domain_t, domain_id)
1430 #define L_LBMR_TNWG_OPT_DOMAIN_T_DOMAIN_ID SIZEOF(lbmr_tnwg_opt_domain_t, domain_id)
1431 #define L_LBMR_TNWG_OPT_DOMAIN_T (int) sizeof(lbmr_tnwg_opt_domain_t)
1433 #define LBMR_TNWG_OPT_DOMAIN_TYPE 0x02
1435 /* LBMR (extended) gateway message - name option (a base option) */
1436 #define LBMR_TNWG_OPT_NAME_TYPE 0x03
1438 /* LBMR (extended) remote domain route message */
1441 lbm_uint8_t ver_type
;
1442 lbm_uint8_t ext_type
;
1443 lbm_uint16_t num_domains
;
1446 lbm_uint16_t route_index
;
1447 lbm_uint32_t length
;
1448 /* lbm_uint32_t domains[num_domains]; */
1449 } lbmr_remote_domain_route_hdr_t
;
1450 #define O_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_VER_TYPE OFFSETOF(lbmr_remote_domain_route_hdr_t, ver_type)
1451 #define L_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_VER_TYPE SIZEOF(lbmr_remote_domain_route_hdr_t, ver_type)
1452 #define O_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_EXT_TYPE OFFSETOF(lbmr_remote_domain_route_hdr_t, ext_type)
1453 #define L_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_EXT_TYPE SIZEOF(lbmr_remote_domain_route_hdr_t, ext_type)
1454 #define O_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_NUM_DOMAINS OFFSETOF(lbmr_remote_domain_route_hdr_t, num_domains)
1455 #define L_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_NUM_DOMAINS SIZEOF(lbmr_remote_domain_route_hdr_t, num_domains)
1456 #define O_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_IP OFFSETOF(lbmr_remote_domain_route_hdr_t, ip)
1457 #define L_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_IP SIZEOF(lbmr_remote_domain_route_hdr_t, ip)
1458 #define O_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_PORT OFFSETOF(lbmr_remote_domain_route_hdr_t, port)
1459 #define L_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_PORT SIZEOF(lbmr_remote_domain_route_hdr_t, port)
1460 #define O_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_ROUTE_INDEX OFFSETOF(lbmr_remote_domain_route_hdr_t, route_index)
1461 #define L_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_ROUTE_INDEX SIZEOF(lbmr_remote_domain_route_hdr_t, route_index)
1462 #define O_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_LENGTH OFFSETOF(lbmr_remote_domain_route_hdr_t, length)
1463 #define L_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_LENGTH SIZEOF(lbmr_remote_domain_route_hdr_t, length)
1464 #define L_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T (int) sizeof(lbmr_remote_domain_route_hdr_t)
1466 /* LBMR (extended) remote context information message */
1469 lbm_uint8_t ver_type
;
1470 lbm_uint8_t ext_type
;
1472 lbm_uint16_t num_recs
;
1473 lbm_uint16_t reserved
;
1475 #define O_LBMR_RCTXINFO_T_VER_TYPE OFFSETOF(lbmr_rctxinfo_t, ver_type)
1476 #define L_LBMR_RCTXINFO_T_VER_TYPE SIZEOF(lbmr_rctxinfo_t, ver_type)
1477 #define O_LBMR_RCTXINFO_T_EXT_TYPE OFFSETOF(lbmr_rctxinfo_t, ext_type)
1478 #define L_LBMR_RCTXINFO_T_EXT_TYPE SIZEOF(lbmr_rctxinfo_t, ext_type)
1479 #define O_LBMR_RCTXINFO_T_LEN OFFSETOF(lbmr_rctxinfo_t, len)
1480 #define L_LBMR_RCTXINFO_T_LEN SIZEOF(lbmr_rctxinfo_t, len)
1481 #define O_LBMR_RCTXINFO_T_NUM_RECS OFFSETOF(lbmr_rctxinfo_t, num_recs)
1482 #define L_LBMR_RCTXINFO_T_NUM_RECS SIZEOF(lbmr_rctxinfo_t, num_recs)
1483 #define O_LBMR_RCTXINFO_T_RESERVED OFFSETOF(lbmr_rctxinfo_t, reserved)
1484 #define L_LBMR_RCTXINFO_T_RESERVED SIZEOF(lbmr_rctxinfo_t, reserved)
1485 #define L_LBMR_RCTXINFO_T (int) sizeof(lbmr_rctxinfo_t)
1487 /* LBMR (extended) remote context information record */
1492 } lbmr_rctxinfo_rec_t
;
1493 #define O_LBMR_RCTXINFO_REC_T_LEN OFFSETOF(lbmr_rctxinfo_rec_t, len)
1494 #define L_LBMR_RCTXINFO_REC_T_LEN SIZEOF(lbmr_rctxinfo_rec_t, len)
1495 #define O_LBMR_RCTXINFO_REC_T_FLAGS OFFSETOF(lbmr_rctxinfo_rec_t, flags)
1496 #define L_LBMR_RCTXINFO_REC_T_FLAGS SIZEOF(lbmr_rctxinfo_rec_t, flags)
1497 #define L_LBMR_RCTXINFO_REC_T (int) sizeof(lbmr_rctxinfo_rec_t)
1499 #define LBMR_RCTXINFO_REC_FLAG_QUERY 0x8000
1501 /* LBMR (extended) remote context information record option */
1507 } lbmr_rctxinfo_rec_opt_t
;
1508 #define O_LBMR_RCTXINFO_REC_OPT_T_TYPE OFFSETOF(lbmr_rctxinfo_rec_opt_t, type)
1509 #define L_LBMR_RCTXINFO_REC_OPT_T_TYPE SIZEOF(lbmr_rctxinfo_rec_opt_t, type)
1510 #define O_LBMR_RCTXINFO_REC_OPT_T_LEN OFFSETOF(lbmr_rctxinfo_rec_opt_t, len)
1511 #define L_LBMR_RCTXINFO_REC_OPT_T_LEN SIZEOF(lbmr_rctxinfo_rec_opt_t, len)
1512 #define O_LBMR_RCTXINFO_REC_OPT_T_FLAGS OFFSETOF(lbmr_rctxinfo_rec_opt_t, flags)
1513 #define L_LBMR_RCTXINFO_REC_OPT_T_FLAGS SIZEOF(lbmr_rctxinfo_rec_opt_t, flags)
1514 #define L_LBMR_RCTXINFO_REC_OPT_T (int) sizeof(lbmr_rctxinfo_rec_opt_t)
1516 /* LBMR (extended) remote context information record address option */
1522 lbm_uint32_t domain_id
;
1526 } lbmr_rctxinfo_rec_address_opt_t
;
1527 #define O_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_TYPE OFFSETOF(lbmr_rctxinfo_rec_address_opt_t, type)
1528 #define L_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_TYPE SIZEOF(lbmr_rctxinfo_rec_address_opt_t, type)
1529 #define O_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_LEN OFFSETOF(lbmr_rctxinfo_rec_address_opt_t, len)
1530 #define L_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_LEN SIZEOF(lbmr_rctxinfo_rec_address_opt_t, len)
1531 #define O_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_FLAGS OFFSETOF(lbmr_rctxinfo_rec_address_opt_t, flags)
1532 #define L_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_FLAGS SIZEOF(lbmr_rctxinfo_rec_address_opt_t, flags)
1533 #define O_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_DOMAIN_ID OFFSETOF(lbmr_rctxinfo_rec_address_opt_t, domain_id)
1534 #define L_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_DOMAIN_ID SIZEOF(lbmr_rctxinfo_rec_address_opt_t, domain_id)
1535 #define O_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_IP OFFSETOF(lbmr_rctxinfo_rec_address_opt_t, ip)
1536 #define L_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_IP SIZEOF(lbmr_rctxinfo_rec_address_opt_t, ip)
1537 #define O_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_PORT OFFSETOF(lbmr_rctxinfo_rec_address_opt_t, port)
1538 #define L_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_PORT SIZEOF(lbmr_rctxinfo_rec_address_opt_t, port)
1539 #define O_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_RES OFFSETOF(lbmr_rctxinfo_rec_address_opt_t, res)
1540 #define L_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_RES SIZEOF(lbmr_rctxinfo_rec_address_opt_t, res)
1541 #define L_LBMR_RCTXINFO_REC_ADDRESS_OPT_T (int) sizeof(lbmr_rctxinfo_rec_address_opt_t)
1543 #define LBMR_RCTXINFO_OPT_ADDRESS_TYPE 0x01
1545 /* LBMR (extended) remote context information record instance option */
1551 lbm_uint8_t instance
[LBM_CONTEXT_INSTANCE_BLOCK_SZ
];
1552 } lbmr_rctxinfo_rec_instance_opt_t
;
1553 #define O_LBMR_RCTXINFO_REC_INSTANCE_OPT_T_TYPE OFFSETOF(lbmr_rctxinfo_rec_instance_opt_t, type)
1554 #define L_LBMR_RCTXINFO_REC_INSTANCE_OPT_T_TYPE SIZEOF(lbmr_rctxinfo_rec_instance_opt_t, type)
1555 #define O_LBMR_RCTXINFO_REC_INSTANCE_OPT_T_LEN OFFSETOF(lbmr_rctxinfo_rec_instance_opt_t, len)
1556 #define L_LBMR_RCTXINFO_REC_INSTANCE_OPT_T_LEN SIZEOF(lbmr_rctxinfo_rec_instance_opt_t, len)
1557 #define O_LBMR_RCTXINFO_REC_INSTANCE_OPT_T_FLAGS OFFSETOF(lbmr_rctxinfo_rec_instance_opt_t, flags)
1558 #define L_LBMR_RCTXINFO_REC_INSTANCE_OPT_T_FLAGS SIZEOF(lbmr_rctxinfo_rec_instance_opt_t, flags)
1559 #define O_LBMR_RCTXINFO_REC_INSTANCE_OPT_T_INSTANCE OFFSETOF(lbmr_rctxinfo_rec_instance_opt_t, instance)
1560 #define L_LBMR_RCTXINFO_REC_INSTANCE_OPT_T_INSTANCE SIZEOF(lbmr_rctxinfo_rec_instance_opt_t, instance)
1561 #define L_LBMR_RCTXINFO_REC_INSTANCE_OPT_T (int) sizeof(lbmr_rctxinfo_rec_instance_opt_t)
1563 #define LBMR_RCTXINFO_OPT_INSTANCE_TYPE 0x02
1565 /* LBMR (extended) remote context information record odomain option */
1571 lbm_uint32_t domain_id
;
1572 } lbmr_rctxinfo_rec_odomain_opt_t
;
1573 #define O_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T_TYPE OFFSETOF(lbmr_rctxinfo_rec_odomain_opt_t, type)
1574 #define L_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T_TYPE SIZEOF(lbmr_rctxinfo_rec_odomain_opt_t, type)
1575 #define O_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T_LEN OFFSETOF(lbmr_rctxinfo_rec_odomain_opt_t, len)
1576 #define L_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T_LEN SIZEOF(lbmr_rctxinfo_rec_odomain_opt_t, len)
1577 #define O_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T_FLAGS OFFSETOF(lbmr_rctxinfo_rec_odomain_opt_t, flags)
1578 #define L_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T_FLAGS SIZEOF(lbmr_rctxinfo_rec_odomain_opt_t, flags)
1579 #define O_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T_DOMAIN_ID OFFSETOF(lbmr_rctxinfo_rec_odomain_opt_t, domain_id)
1580 #define L_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T_DOMAIN_ID SIZEOF(lbmr_rctxinfo_rec_odomain_opt_t, domain_id)
1581 #define L_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T (int) sizeof(lbmr_rctxinfo_rec_odomain_opt_t)
1583 #define LBMR_RCTXINFO_OPT_ODOMAIN_TYPE 0x03
1585 /* LBMR (extended) remote context information record name option */
1591 } lbmr_rctxinfo_rec_name_opt_t
;
1592 #define O_LBMR_RCTXINFO_REC_NAME_OPT_T_TYPE OFFSETOF(lbmr_rctxinfo_rec_name_opt_t, type)
1593 #define L_LBMR_RCTXINFO_REC_NAME_OPT_T_TYPE SIZEOF(lbmr_rctxinfo_rec_name_opt_t, type)
1594 #define O_LBMR_RCTXINFO_REC_NAME_OPT_T_LEN OFFSETOF(lbmr_rctxinfo_rec_name_opt_t, len)
1595 #define L_LBMR_RCTXINFO_REC_NAME_OPT_T_LEN SIZEOF(lbmr_rctxinfo_rec_name_opt_t, len)
1596 #define O_LBMR_RCTXINFO_REC_NAME_OPT_T_FLAGS OFFSETOF(lbmr_rctxinfo_rec_name_opt_t, flags)
1597 #define L_LBMR_RCTXINFO_REC_NAME_OPT_T_FLAGS SIZEOF(lbmr_rctxinfo_rec_name_opt_t, flags)
1598 #define L_LBMR_RCTXINFO_REC_NAME_OPT_T (int) sizeof(lbmr_rctxinfo_rec_name_opt_t)
1600 #define LBMR_RCTXINFO_OPT_NAME_TYPE 0x04
1602 /* Queue management headers (may appear in LBMR or LBMC packets) */
1605 lbm_uint8_t ver_type
;
1606 lbm_uint8_t ext_type
;
1607 } lbmr_umq_qmgmt_hdr_t
;
1608 #define O_LBMR_UMQ_QMGMT_HDR_T_VER_TYPE OFFSETOF(lbmr_umq_qmgmt_hdr_t, ver_type)
1609 #define L_LBMR_UMQ_QMGMT_HDR_T_VER_TYPE SIZEOF(lbmr_umq_qmgmt_hdr_t, ver_type)
1610 #define O_LBMR_UMQ_QMGMT_HDR_T_EXT_TYPE OFFSETOF(lbmr_umq_qmgmt_hdr_t, ext_type)
1611 #define L_LBMR_UMQ_QMGMT_HDR_T_EXT_TYPE SIZEOF(lbmr_umq_qmgmt_hdr_t, ext_type)
1612 #define L_LBMR_UMQ_QMGMT_HDR_T (int) sizeof(lbmr_umq_qmgmt_hdr_t)
1616 lbm_uint8_t filler1
;
1617 lbm_uint8_t filler2
;
1619 lbm_uint8_t pckt_type
;
1620 lbm_uint8_t cfgsig
[20];
1621 lbm_uint32_t queue_id
;
1622 lbm_uint32_t queue_ver
;
1625 lbm_uint16_t inst_idx
;
1626 lbm_uint16_t grp_idx
;
1627 lbm_uint16_t pckt_type_dep16
;
1629 #define O_UMQ_QMGMT_HDR_T_FLAGS OFFSETOF(umq_qmgmt_hdr_t, flags)
1630 #define L_UMQ_QMGMT_HDR_T_FLAGS SIZEOF(umq_qmgmt_hdr_t, flags)
1631 #define O_UMQ_QMGMT_HDR_T_PCKT_TYPE OFFSETOF(umq_qmgmt_hdr_t, pckt_type)
1632 #define L_UMQ_QMGMT_HDR_T_PCKT_TYPE SIZEOF(umq_qmgmt_hdr_t, pckt_type)
1633 #define O_UMQ_QMGMT_HDR_T_CFGSIG OFFSETOF(umq_qmgmt_hdr_t, cfgsig)
1634 #define L_UMQ_QMGMT_HDR_T_CFGSIG SIZEOF(umq_qmgmt_hdr_t, cfgsig)
1635 #define O_UMQ_QMGMT_HDR_T_QUEUE_ID OFFSETOF(umq_qmgmt_hdr_t, queue_id)
1636 #define L_UMQ_QMGMT_HDR_T_QUEUE_ID SIZEOF(umq_qmgmt_hdr_t, queue_id)
1637 #define O_UMQ_QMGMT_HDR_T_QUEUE_VER OFFSETOF(umq_qmgmt_hdr_t, queue_ver)
1638 #define L_UMQ_QMGMT_HDR_T_QUEUE_VER SIZEOF(umq_qmgmt_hdr_t, queue_ver)
1639 #define O_UMQ_QMGMT_HDR_T_IP OFFSETOF(umq_qmgmt_hdr_t, ip)
1640 #define L_UMQ_QMGMT_HDR_T_IP SIZEOF(umq_qmgmt_hdr_t, ip)
1641 #define O_UMQ_QMGMT_HDR_T_PORT OFFSETOF(umq_qmgmt_hdr_t, port)
1642 #define L_UMQ_QMGMT_HDR_T_PORT SIZEOF(umq_qmgmt_hdr_t, port)
1643 #define O_UMQ_QMGMT_HDR_T_INST_IDX OFFSETOF(umq_qmgmt_hdr_t, inst_idx)
1644 #define L_UMQ_QMGMT_HDR_T_INST_IDX SIZEOF(umq_qmgmt_hdr_t, inst_idx)
1645 #define O_UMQ_QMGMT_HDR_T_GRP_IDX OFFSETOF(umq_qmgmt_hdr_t, grp_idx)
1646 #define L_UMQ_QMGMT_HDR_T_GRP_IDX SIZEOF(umq_qmgmt_hdr_t, grp_idx)
1647 #define O_UMQ_QMGMT_HDR_T_PCKT_TYPE_DEP16 OFFSETOF(umq_qmgmt_hdr_t, pckt_type_dep16)
1648 #define L_UMQ_QMGMT_HDR_T_PCKT_TYPE_DEP16 SIZEOF(umq_qmgmt_hdr_t, pckt_type_dep16)
1649 #define L_UMQ_QMGMT_HDR_T (int) sizeof(umq_qmgmt_hdr_t)
1651 #define UMQ_QMGMT_HDR_I_FLAG 0x80
1652 #define UMQ_QMGMT_HDR_N_FLAG 0x40
1653 #define UMQ_QMGMT_HDR_IL_L_FLAG 0x20
1654 #define UMQ_QMGMT_HDR_IL_K_FLAG 0x10
1658 lbm_uint32_t highest_rcr_tsp
;
1659 } umq_qmgmt_il_hdr_t
;
1660 #define O_UMQ_QMGMT_IL_HDR_T_HIGHEST_RCR_TSP OFFSETOF(umq_qmgmt_il_hdr_t, highest_rcr_tsp)
1661 #define L_UMQ_QMGMT_IL_HDR_T_HIGHEST_RCR_TSP SIZEOF(umq_qmgmt_il_hdr_t, highest_rcr_tsp)
1662 #define L_UMQ_QMGMT_IL_HDR_T (int) sizeof(umq_qmgmt_il_hdr_t)
1668 lbm_uint16_t inst_idx
;
1669 lbm_uint16_t grp_idx
;
1671 } umq_qmgmt_il_inst_hdr_t
;
1672 #define O_UMQ_QMGMT_IL_INST_HDR_T_IP OFFSETOF(umq_qmgmt_il_inst_hdr_t, ip)
1673 #define L_UMQ_QMGMT_IL_INST_HDR_T_IP SIZEOF(umq_qmgmt_il_inst_hdr_t, ip)
1674 #define O_UMQ_QMGMT_IL_INST_HDR_T_PORT OFFSETOF(umq_qmgmt_il_inst_hdr_t, port)
1675 #define L_UMQ_QMGMT_IL_INST_HDR_T_PORT SIZEOF(umq_qmgmt_il_inst_hdr_t, port)
1676 #define O_UMQ_QMGMT_IL_INST_HDR_T_INST_IDX OFFSETOF(umq_qmgmt_il_inst_hdr_t, inst_idx)
1677 #define L_UMQ_QMGMT_IL_INST_HDR_T_INST_IDX SIZEOF(umq_qmgmt_il_inst_hdr_t, inst_idx)
1678 #define O_UMQ_QMGMT_IL_INST_HDR_T_GRP_IDX OFFSETOF(umq_qmgmt_il_inst_hdr_t, grp_idx)
1679 #define L_UMQ_QMGMT_IL_INST_HDR_T_GRP_IDX SIZEOF(umq_qmgmt_il_inst_hdr_t, grp_idx)
1680 #define O_UMQ_QMGMT_IL_INST_HDR_T_FLAGS OFFSETOF(umq_qmgmt_il_inst_hdr_t, flags)
1681 #define L_UMQ_QMGMT_IL_INST_HDR_T_FLAGS SIZEOF(umq_qmgmt_il_inst_hdr_t, flags)
1682 #define L_UMQ_QMGMT_IL_INST_HDR_T (int) sizeof(umq_qmgmt_il_inst_hdr_t)
1684 #define UMQ_QMGMT_HDR_IL_INST_M_FLAG 0x8000
1685 #define UMQ_QMGMT_HDR_IL_INST_Q_FLAG 0x4000
1686 #define UMQ_QMGMT_HDR_IL_INST_P_FLAG 0x2000
1690 lbm_uint32_t queue_new_ver
;
1691 } umq_qmgmt_ec_hdr_t
;
1692 #define O_UMQ_QMGMT_EC_HDR_T_QUEUE_NEW_VER OFFSETOF(umq_qmgmt_ec_hdr_t, queue_new_ver)
1693 #define L_UMQ_QMGMT_EC_HDR_T_QUEUE_NEW_VER SIZEOF(umq_qmgmt_ec_hdr_t, queue_new_ver)
1694 #define L_UMQ_QMGMT_EC_HDR_T (int) sizeof(umq_qmgmt_ec_hdr_t)
1698 lbm_uint32_t highest_rcr_tsp
;
1700 } umq_qmgmt_ev_hdr_t
;
1701 #define O_UMQ_QMGMT_EV_HDR_T_HIGHEST_RCR_TSP OFFSETOF(umq_qmgmt_ev_hdr_t, highest_rcr_tsp)
1702 #define L_UMQ_QMGMT_EV_HDR_T_HIGHEST_RCR_TSP SIZEOF(umq_qmgmt_ev_hdr_t, highest_rcr_tsp)
1703 #define O_UMQ_QMGMT_EV_HDR_T_AGE OFFSETOF(umq_qmgmt_ev_hdr_t, age)
1704 #define L_UMQ_QMGMT_EV_HDR_T_AGE SIZEOF(umq_qmgmt_ev_hdr_t, age)
1705 #define L_UMQ_QMGMT_EV_HDR_T (int) sizeof(umq_qmgmt_ev_hdr_t)
1709 lbm_uint32_t highest_rcr_tsp
;
1710 } umq_qmgmt_qro_hdr_t
;
1711 #define O_UMQ_QMGMT_QRO_HDR_T_HIGHEST_RCR_TSP OFFSETOF(umq_qmgmt_qro_hdr_t, highest_rcr_tsp)
1712 #define L_UMQ_QMGMT_QRO_HDR_T_HIGHEST_RCR_TSP SIZEOF(umq_qmgmt_qro_hdr_t, highest_rcr_tsp)
1713 #define L_UMQ_QMGMT_QRO_HDR_T (int) sizeof(umq_qmgmt_qro_hdr_t)
1715 #define UMQ_QMGMT_HDR_PCKT_TYPE_IL 0x1
1716 #define UMQ_QMGMT_HDR_PCKT_TYPE_JR 0x2
1717 #define UMQ_QMGMT_HDR_PCKT_TYPE_JREJ 0x3
1718 #define UMQ_QMGMT_HDR_PCKT_TYPE_IKA 0x4
1719 #define UMQ_QMGMT_HDR_PCKT_TYPE_EC 0x5
1720 #define UMQ_QMGMT_HDR_PCKT_TYPE_EV 0x6
1721 #define UMQ_QMGMT_HDR_PCKT_TYPE_CNIL 0x7
1722 #define UMQ_QMGMT_HDR_PCKT_TYPE_QRO 0x8
1724 #define LBMR_VERSION_0 0x00
1725 #define LBMR_VERSION_1 0x01
1726 #define LBMR_VERSION_GATEWAY LBMR_VERSION_1
1727 #define LBMR_VERSION LBMR_VERSION_0
1729 /*----------------------------------------------------------------------------*/
1730 /* Value translation tables. */
1731 /*----------------------------------------------------------------------------*/
1733 static const value_string lbmr_packet_type
[] =
1735 { LBMR_HDR_TYPE_NORMAL
, "NORMAL" },
1736 { LBMR_HDR_TYPE_WC_TQRS
, "WC-TQR" },
1737 { LBMR_HDR_TYPE_UCAST_RCV_ALIVE
, "Rcv Alive" },
1738 { LBMR_HDR_TYPE_UCAST_SRC_ALIVE
, "Src Alive" },
1739 { LBMR_HDR_TYPE_TOPIC_MGMT
, "Topic Mgmt" },
1740 { LBMR_HDR_TYPE_QUEUE_RES
, "UMQ" },
1741 { LBMR_HDR_TYPE_EXT
, "Extended" },
1745 static const value_string lbmr_ext_packet_type
[] =
1747 { LBMR_HDR_EXT_TYPE_UME_PROXY_SRC_ELECT
, "Proxy Source Election" },
1748 { LBMR_HDR_EXT_TYPE_UMQ_QUEUE_MGMT
, "Queue Management" },
1749 { LBMR_HDR_EXT_TYPE_CONTEXT_INFO
, "Context Information" },
1750 { LBMR_HDR_EXT_TYPE_TOPIC_RES_REQUEST
, "Topic Resolution Request" },
1751 { LBMR_HDR_EXT_TYPE_TNWG_MSG
, "Gateway Message" },
1752 { LBMR_HDR_EXT_TYPE_REMOTE_DOMAIN_ROUTE
, "Remote Domain Route" },
1753 { LBMR_HDR_EXT_TYPE_REMOTE_CONTEXT_INFO
, "Remote Context Information" },
1757 static const value_string lbmr_transport_type
[] =
1759 { LBMR_TRANSPORT_TCP
, "TCP" },
1760 { LBMR_TRANSPORT_LBTSMX
, "LBT-SMX" },
1761 { LBMR_TRANSPORT_LBTRU
, "LBT-RU" },
1762 { LBMR_TRANSPORT_LBTRM
, "LBT-RM" },
1763 { LBMR_TRANSPORT_LBTIPC
, "LBT-IPC" },
1764 { LBMR_TRANSPORT_LBTRDMA
, "LBT-RDMA" },
1768 static const value_string lbmr_tmr_type
[] =
1770 { LBMR_TMR_LEAVE_TOPIC
, "Leave Topic" },
1771 { LBMR_TMR_TOPIC_USE
, "Topic Use" },
1775 static const value_string lbmr_topic_option_type
[] =
1777 { LBMR_TOPIC_OPT_LEN_TYPE
, "Option Length" },
1778 { LBMR_TOPIC_OPT_UME_TYPE
, "UME" },
1779 { LBMR_TOPIC_OPT_UME_STORE_TYPE
, "UME Store" },
1780 { LBMR_TOPIC_OPT_UME_STORE_GROUP_TYPE
, "UME Store Group" },
1781 { LBMR_TOPIC_OPT_LATEJOIN_TYPE
, "Late Join" },
1782 { LBMR_TOPIC_OPT_UMQ_RCRIDX_TYPE
, "UMQ Receiver Control Record Index" },
1783 { LBMR_TOPIC_OPT_UMQ_QINFO_TYPE
, "UMQ Queue Info" },
1784 { LBMR_TOPIC_OPT_COST_TYPE
, "Cost" },
1785 { LBMR_TOPIC_OPT_OTID_TYPE
, "Originating Transport" },
1786 { LBMR_TOPIC_OPT_CTXINST_TYPE
, "Context Instance" },
1787 { LBMR_TOPIC_OPT_CTXINSTS_TYPE
, "Store Context Instance" },
1788 { LBMR_TOPIC_OPT_ULB_TYPE
, "UMQ ULB" },
1789 { LBMR_TOPIC_OPT_CTXINSTQ_TYPE
, "Queue Context Instance" },
1790 { LBMR_TOPIC_OPT_DOMAIN_ID_TYPE
, "Domain ID" },
1791 { LBMR_TOPIC_OPT_EXFUNC_TYPE
, "Extended Functionality" },
1795 static const value_string lbmr_pser_dependent_type
[] =
1797 { LBMR_HDR_EXT_TYPE_UME_PROXY_SRC_ELECT_DEP_ELECT
, "Election" },
1798 { LBMR_HDR_EXT_TYPE_UME_PROXY_SRC_ELECT_DEP_REELECT
, "Re-election" },
1802 static const value_string lbmr_option_type
[] =
1804 { LBMR_LBMR_OPT_LEN_TYPE
, "Option length" },
1805 { LBMR_LBMR_OPT_SRC_ID_TYPE
, "Source ID" },
1806 { LBMR_LBMR_OPT_SRC_TYPE_TYPE
, "Source type" },
1807 { LBMR_LBMR_OPT_VERSION_TYPE
, "Version" },
1808 { LBMR_LBMR_OPT_LOCAL_DOMAIN_TYPE
, "Local Domain" },
1812 static const value_string lbmr_pser_option_type
[] =
1814 { LBMR_PSER_OPT_SRC_CTXINST_TYPE
, "Source context instance" },
1815 { LBMR_PSER_OPT_STORE_CTXINST_TYPE
, "Store context instance" },
1819 static const value_string lbmr_option_source_type
[] =
1821 { LBMR_LBMR_OPT_SRC_TYPE_SRC_TYPE_APPLICATION
, "Application" },
1822 { LBMR_LBMR_OPT_SRC_TYPE_SRC_TYPE_TNWGD
, "Gateway" },
1823 { LBMR_LBMR_OPT_SRC_TYPE_SRC_TYPE_STORE
, "Store" },
1827 static const value_string lbmr_tnwg_function_type
[] =
1829 { LBMR_TNWG_TYPE_INTEREST
, "Interest" },
1830 { LBMR_TNWG_TYPE_CTXINFO
, "Context information" },
1831 { LBMR_TNWG_TYPE_TRREQ
, "Topic res request" },
1835 static const value_string lbmr_tnwg_option_type
[] =
1837 { LBMR_TNWG_OPT_CTXINST_TYPE
, "Context instance" },
1838 { LBMR_TNWG_OPT_ADDRESS_TYPE
, "Address" },
1839 { LBMR_TNWG_OPT_DOMAIN_TYPE
, "Domain" },
1840 { LBMR_TNWG_OPT_NAME_TYPE
, "Name" },
1844 static const value_string umq_qmgmt_packet_type
[] =
1846 { UMQ_QMGMT_HDR_PCKT_TYPE_IL
, "Instance List" },
1847 { UMQ_QMGMT_HDR_PCKT_TYPE_JR
, "Join Request" },
1848 { UMQ_QMGMT_HDR_PCKT_TYPE_JREJ
, "Join Request Rejection" },
1849 { UMQ_QMGMT_HDR_PCKT_TYPE_IKA
, "Instance Keepalive" },
1850 { UMQ_QMGMT_HDR_PCKT_TYPE_EC
, "Election Call" },
1851 { UMQ_QMGMT_HDR_PCKT_TYPE_EV
, "Election Vote" },
1852 { UMQ_QMGMT_HDR_PCKT_TYPE_CNIL
, "Confirm New Instance List" },
1853 { UMQ_QMGMT_HDR_PCKT_TYPE_QRO
, "Queue resume operation" },
1857 static const value_string lbmr_rctxinfo_option_type
[] =
1859 { LBMR_RCTXINFO_OPT_ADDRESS_TYPE
, "Address" },
1860 { LBMR_RCTXINFO_OPT_INSTANCE_TYPE
, "Instance" },
1861 { LBMR_RCTXINFO_OPT_ODOMAIN_TYPE
, "Originating Domain" },
1862 { LBMR_RCTXINFO_OPT_NAME_TYPE
, "Name" },
1866 /*----------------------------------------------------------------------------*/
1868 /*----------------------------------------------------------------------------*/
1870 /* Preferences default values. */
1871 #define LBMR_DEFAULT_MC_INCOMING_UDP_PORT 12965
1872 #define LBMR_DEFAULT_MC_INCOMING_UDP_PORT_STRING MAKESTRING(LBMR_DEFAULT_MC_INCOMING_UDP_PORT)
1873 #define LBMR_DEFAULT_MC_OUTGOING_UDP_PORT 12965
1874 #define LBMR_DEFAULT_MC_OUTGOING_UDP_PORT_STRING MAKESTRING(LBMR_DEFAULT_MC_OUTGOING_UDP_PORT)
1875 #define LBMR_DEFAULT_MC_INCOMING_ADDRESS "224.9.10.11"
1876 #define LBMR_DEFAULT_MC_OUTGOING_ADDRESS "224.9.10.11"
1877 #define LBMR_DEFAULT_UC_PORT_HIGH 14406
1878 #define LBMR_DEFAULT_UC_PORT_HIGH_STRING MAKESTRING(LBMR_DEFAULT_UC_PORT_HIGH)
1879 #define LBMR_DEFAULT_UC_PORT_LOW 14402
1880 #define LBMR_DEFAULT_UC_PORT_LOW_STRING MAKESTRING(LBMR_DEFAULT_UC_PORT_LOW)
1881 #define LBMR_DEFAULT_UC_DEST_PORT 15380
1882 #define LBMR_DEFAULT_UC_DEST_PORT_STRING MAKESTRING(LBMR_DEFAULT_UC_DEST_PORT)
1883 #define LBMR_DEFAULT_UC_ADDRESS "0.0.0.0"
1885 /* Global preferences variables (altered by the preferences dialog). */
1886 static uint32_t global_lbmr_mc_incoming_udp_port
= LBMR_DEFAULT_MC_INCOMING_UDP_PORT
;
1887 static uint32_t global_lbmr_mc_outgoing_udp_port
= LBMR_DEFAULT_MC_OUTGOING_UDP_PORT
;
1888 static const char * global_lbmr_mc_incoming_address
= LBMR_DEFAULT_MC_INCOMING_ADDRESS
;
1889 static const char * global_lbmr_mc_outgoing_address
= LBMR_DEFAULT_MC_OUTGOING_ADDRESS
;
1890 static uint32_t global_lbmr_uc_port_high
= LBMR_DEFAULT_UC_PORT_HIGH
;
1891 static uint32_t global_lbmr_uc_port_low
= LBMR_DEFAULT_UC_PORT_LOW
;
1892 static uint32_t global_lbmr_uc_dest_port
= LBMR_DEFAULT_UC_DEST_PORT
;
1893 static const char * global_lbmr_uc_address
= LBMR_DEFAULT_UC_ADDRESS
;
1894 static bool global_lbmr_use_tag
;
1896 /* Local preferences variables (used by the dissector). */
1897 static uint32_t lbmr_mc_incoming_udp_port
= LBMR_DEFAULT_MC_INCOMING_UDP_PORT
;
1898 static uint32_t lbmr_mc_outgoing_udp_port
= LBMR_DEFAULT_MC_OUTGOING_UDP_PORT
;
1899 static uint32_t lbmr_mc_incoming_address_host
;
1900 static uint32_t lbmr_mc_outgoing_address_host
;
1901 static uint32_t lbmr_uc_port_high
= LBMR_DEFAULT_UC_PORT_HIGH
;
1902 static uint32_t lbmr_uc_port_low
= LBMR_DEFAULT_UC_PORT_LOW
;
1903 static uint32_t lbmr_uc_dest_port
= LBMR_DEFAULT_UC_DEST_PORT
;
1904 static uint32_t lbmr_uc_address_host
;
1905 static bool lbmr_use_tag
;
1910 uint32_t mc_outgoing_udp_port
;
1911 uint32_t mc_incoming_udp_port
;
1912 char * mc_incoming_address
;
1913 uint32_t mc_incoming_address_val_h
;
1914 char * mc_outgoing_address
;
1915 uint32_t mc_outgoing_address_val_h
;
1916 uint32_t uc_port_high
;
1917 uint32_t uc_port_low
;
1918 uint32_t uc_dest_port
;
1920 uint32_t uc_address_val_h
;
1923 static lbmr_tag_entry_t
* lbmr_tag_entry
;
1924 static unsigned lbmr_tag_count
;
1926 UAT_CSTRING_CB_DEF(lbmr_tag
, name
, lbmr_tag_entry_t
)
1927 UAT_DEC_CB_DEF(lbmr_tag
, mc_outgoing_udp_port
, lbmr_tag_entry_t
)
1928 UAT_DEC_CB_DEF(lbmr_tag
, mc_incoming_udp_port
, lbmr_tag_entry_t
)
1929 UAT_IPV4_MC_CB_DEF(lbmr_tag
, mc_incoming_address
, lbmr_tag_entry_t
)
1930 UAT_IPV4_MC_CB_DEF(lbmr_tag
, mc_outgoing_address
, lbmr_tag_entry_t
)
1931 UAT_DEC_CB_DEF(lbmr_tag
, uc_port_high
, lbmr_tag_entry_t
)
1932 UAT_DEC_CB_DEF(lbmr_tag
, uc_port_low
, lbmr_tag_entry_t
)
1933 UAT_DEC_CB_DEF(lbmr_tag
, uc_dest_port
, lbmr_tag_entry_t
)
1934 UAT_IPV4_CB_DEF(lbmr_tag
, uc_address
, lbmr_tag_entry_t
)
1935 static uat_field_t lbmr_tag_array
[] =
1937 UAT_FLD_CSTRING(lbmr_tag
, name
, "Tag name", "Tag name"),
1938 UAT_FLD_DEC(lbmr_tag
, mc_incoming_udp_port
, "Incoming multicast UDP port", "Incoming UDP port"),
1939 UAT_FLD_IPV4_MC(lbmr_tag
, mc_incoming_address
, "Incoming multicast address", "Incoming multicast address"),
1940 UAT_FLD_DEC(lbmr_tag
, mc_outgoing_udp_port
, "Outgoing UDP port", "Outgoing UDP port"),
1941 UAT_FLD_IPV4_MC(lbmr_tag
, mc_outgoing_address
, "Outgoing multicast address", "Outgoing multicast address"),
1942 UAT_FLD_DEC(lbmr_tag
, uc_port_low
, "Unicast UDP port low", "Unicast UDP port low"),
1943 UAT_FLD_DEC(lbmr_tag
, uc_port_high
, "Unicast UDP port high", "Unicast UDP port high"),
1944 UAT_FLD_DEC(lbmr_tag
, uc_dest_port
, "Unicast UDP destination port", "Unicast UDP destination port"),
1945 UAT_FLD_IPV4(lbmr_tag
, uc_address
, "Unicast resolver address", "Unicast resolver address"),
1949 /*----------------------------------------------------------------------------*/
1950 /* UAT callback functions. */
1951 /*----------------------------------------------------------------------------*/
1952 static bool lbmr_tag_update_cb(void * record
, char * * error_string
)
1954 lbmr_tag_entry_t
* tag
= (lbmr_tag_entry_t
*)record
;
1956 if (tag
->name
== NULL
)
1958 *error_string
= g_strdup("Tag name can't be empty");
1963 g_strstrip(tag
->name
);
1964 if (tag
->name
[0] == 0)
1966 *error_string
= g_strdup("Tag name can't be empty");
1973 static void * lbmr_tag_copy_cb(void * destination
, const void * source
, size_t length _U_
)
1975 const lbmr_tag_entry_t
* src
= (const lbmr_tag_entry_t
*)source
;
1976 lbmr_tag_entry_t
* dest
= (lbmr_tag_entry_t
*)destination
;
1978 dest
->name
= g_strdup(src
->name
);
1979 dest
->mc_outgoing_udp_port
= src
->mc_outgoing_udp_port
;
1980 dest
->mc_incoming_udp_port
= src
->mc_incoming_udp_port
;
1981 dest
->mc_incoming_address
= g_strdup(src
->mc_incoming_address
);
1982 dest
->mc_incoming_address_val_h
= src
->mc_incoming_address_val_h
;
1983 dest
->mc_outgoing_address
= g_strdup(src
->mc_outgoing_address
);
1984 dest
->mc_outgoing_address_val_h
= src
->mc_outgoing_address_val_h
;
1985 dest
->uc_port_high
= src
->uc_port_high
;
1986 dest
->uc_port_low
= src
->uc_port_low
;
1987 dest
->uc_dest_port
= src
->uc_dest_port
;
1988 dest
->uc_address
= g_strdup(src
->uc_address
);
1989 dest
->uc_address_val_h
= src
->uc_address_val_h
;
1993 static void lbmr_tag_free_cb(void * record
)
1995 lbmr_tag_entry_t
* tag
= (lbmr_tag_entry_t
*)record
;
1997 if (tag
->name
!= NULL
)
2002 if (tag
->mc_incoming_address
!= NULL
)
2004 g_free(tag
->mc_incoming_address
);
2005 tag
->mc_incoming_address
= NULL
;
2007 if (tag
->mc_outgoing_address
!= NULL
)
2009 g_free(tag
->mc_outgoing_address
);
2010 tag
->mc_outgoing_address
= NULL
;
2012 if (tag
->uc_address
!= NULL
)
2014 g_free(tag
->uc_address
);
2015 tag
->uc_address
= NULL
;
2019 static tap_packet_status
lbmr_match_packet(packet_info
* pinfo
, const lbmr_tag_entry_t
* entry
)
2021 uint32_t dest_addr_h
;
2022 uint32_t src_addr_h
;
2024 if ((pinfo
->dst
.type
!= AT_IPv4
) || (pinfo
->dst
.len
!= 4) ||
2025 (pinfo
->src
.type
!= AT_IPv4
) || (pinfo
->src
.len
!= 4))
2026 return (TAP_PACKET_DONT_REDRAW
);
2027 dest_addr_h
= pntoh32(pinfo
->dst
.data
);
2028 src_addr_h
= pntoh32(pinfo
->src
.data
);
2030 if (IN_MULTICAST(dest_addr_h
))
2032 /* Check multicast topic resolution values. */
2033 if ((dest_addr_h
!= entry
->mc_incoming_address_val_h
) && (dest_addr_h
!= entry
->mc_outgoing_address_val_h
))
2036 return (TAP_PACKET_DONT_REDRAW
);
2038 /* Check for the correct port. */
2039 if ((dest_addr_h
== entry
->mc_incoming_address_val_h
) && (pinfo
->destport
!= entry
->mc_incoming_udp_port
))
2041 /* Wrong incoming port. */
2042 return (TAP_PACKET_DONT_REDRAW
);
2044 if ((dest_addr_h
== entry
->mc_outgoing_address_val_h
) && (pinfo
->destport
!= entry
->mc_outgoing_udp_port
))
2046 /* Wrong outgoing port. */
2047 return (TAP_PACKET_DONT_REDRAW
);
2049 /* Must be one of ours. */
2050 return (TAP_PACKET_REDRAW
);
2054 /* Check unicast topic resolution values. */
2055 /* Address should be either not specified, or match the src or dest address of the packet. */
2056 if ((entry
->uc_address_val_h
== 0) || (entry
->uc_address_val_h
== dest_addr_h
) || (entry
->uc_address_val_h
== src_addr_h
))
2058 if (((pinfo
->destport
== entry
->uc_dest_port
) || (pinfo
->srcport
== entry
->uc_dest_port
))
2059 && (((pinfo
->destport
<= entry
->uc_port_high
) && (pinfo
->destport
>= entry
->uc_port_low
))
2060 || ((pinfo
->srcport
<= entry
->uc_port_high
) && (pinfo
->srcport
>= entry
->uc_port_low
))))
2062 /* One of ours, so handle it. */
2063 return (TAP_PACKET_REDRAW
);
2067 return (TAP_PACKET_DONT_REDRAW
);
2070 static char * lbmr_tag_find(packet_info
* pinfo
)
2073 lbmr_tag_entry_t
* tag
= NULL
;
2079 for (idx
= 0; idx
< lbmr_tag_count
; ++idx
)
2081 tag
= &(lbmr_tag_entry
[idx
]);
2082 if (lbmr_match_packet(pinfo
, tag
))
2090 /*----------------------------------------------------------------------------*/
2091 /* Handles of all types. */
2092 /*----------------------------------------------------------------------------*/
2093 /* Protocol handle */
2094 static int proto_lbmr
;
2096 /* Dissector handle */
2097 static dissector_handle_t lbmr_dissector_handle
;
2099 /* Dissector tree handles */
2100 static int ett_lbmr
;
2101 static int ett_lbmr_hdr
;
2102 static int ett_lbmr_tqrs
;
2103 static int ett_lbmr_tqr
;
2104 static int ett_lbmr_tirs
;
2105 static int ett_lbmr_tir
;
2106 static int ett_lbmr_tir_tcp
;
2107 static int ett_lbmr_tir_lbtrm
;
2108 static int ett_lbmr_tir_lbtru
;
2109 static int ett_lbmr_tir_lbtipc
;
2110 static int ett_lbmr_tir_lbtrdma
;
2111 static int ett_lbmr_tir_lbtsmx
;
2112 static int ett_lbmr_topts
;
2113 static int ett_lbmr_topt_len
;
2114 static int ett_lbmr_topt_ume
;
2115 static int ett_lbmr_topt_ume_flags
;
2116 static int ett_lbmr_topt_ume_store
;
2117 static int ett_lbmr_topt_ume_store_flags
;
2118 static int ett_lbmr_topt_ume_store_group
;
2119 static int ett_lbmr_topt_ume_store_group_flags
;
2120 static int ett_lbmr_topt_latejoin
;
2121 static int ett_lbmr_topt_latejoin_flags
;
2122 static int ett_lbmr_topt_umq_rcridx
;
2123 static int ett_lbmr_topt_umq_rcridx_flags
;
2124 static int ett_lbmr_topt_umq_qinfo
;
2125 static int ett_lbmr_topt_umq_qinfo_flags
;
2126 static int ett_lbmr_topt_cost
;
2127 static int ett_lbmr_topt_cost_flags
;
2128 static int ett_lbmr_topt_otid
;
2129 static int ett_lbmr_topt_otid_flags
;
2130 static int ett_lbmr_topt_ctxinst
;
2131 static int ett_lbmr_topt_ctxinst_flags
;
2132 static int ett_lbmr_topt_ctxinsts
;
2133 static int ett_lbmr_topt_ctxinsts_flags
;
2134 static int ett_lbmr_topt_ulb
;
2135 static int ett_lbmr_topt_ulb_flags
;
2136 static int ett_lbmr_topt_ctxinstq
;
2137 static int ett_lbmr_topt_ctxinstq_flags
;
2138 static int ett_lbmr_topt_domain_id
;
2139 static int ett_lbmr_topt_domain_id_flags
;
2140 static int ett_lbmr_topt_exfunc
;
2141 static int ett_lbmr_topt_exfunc_flags
;
2142 static int ett_lbmr_topt_exfunc_functionality_flags
;
2143 static int ett_lbmr_topt_unknown
;
2144 static int ett_lbmr_tmb
;
2145 static int ett_lbmr_tmrs
;
2146 static int ett_lbmr_tmr
;
2147 static int ett_lbmr_tmr_flags
;
2148 static int ett_lbmr_pser_flags
;
2149 static int ett_lbmr_pser_opts
;
2150 static int ett_lbmr_pser_opt_len
;
2151 static int ett_lbmr_pser_opt_ctxinst
;
2152 static int ett_lbmr_qqrs
;
2153 static int ett_lbmr_qirs
;
2154 static int ett_lbmr_qir
;
2155 static int ett_lbmr_qir_options
;
2156 static int ett_lbmr_qir_grp_blk
;
2157 static int ett_lbmr_qir_queue_blk
;
2158 static int ett_lbmr_qir_grp
;
2159 static int ett_lbmr_qir_queue
;
2160 static int ett_lbmr_topic_res_request_flags
;
2161 static int ett_lbmr_ctxinfo_flags
;
2162 static int ett_lbmr_tnwg
;
2163 static int ett_lbmr_tnwg_interest
;
2164 static int ett_lbmr_tnwg_interest_rec
;
2165 static int ett_lbmr_tnwg_interest_rec_flags
;
2166 static int ett_lbmr_tnwg_ctxinfo
;
2167 static int ett_lbmr_tnwg_ctxinfo_flags1
;
2168 static int ett_lbmr_tnwg_trreq
;
2169 static int ett_lbmr_tnwg_ctxinst_opt
;
2170 static int ett_lbmr_tnwg_ctxinst_opt_flags
;
2171 static int ett_lbmr_tnwg_address_opt
;
2172 static int ett_lbmr_tnwg_address_opt_flags
;
2173 static int ett_lbmr_tnwg_domain_opt
;
2174 static int ett_lbmr_tnwg_domain_opt_flags
;
2175 static int ett_lbmr_tnwg_name_opt
;
2176 static int ett_lbmr_tnwg_name_opt_flags
;
2177 static int ett_lbmr_tnwg_unknown_opt
;
2178 static int ett_lbmr_tnwg_unknown_opt_flags
;
2179 static int ett_lbmr_remote_domain_route_hdr
;
2180 static int ett_lbmr_rctxinfo
;
2181 static int ett_lbmr_rctxinfo_rec
;
2182 static int ett_lbmr_rctxinfo_rec_flags
;
2183 static int ett_lbmr_rctxinfo_rec_address
;
2184 static int ett_lbmr_rctxinfo_rec_instance
;
2185 static int ett_lbmr_rctxinfo_rec_odomain
;
2186 static int ett_lbmr_rctxinfo_rec_name
;
2187 static int ett_lbmr_rctxinfo_rec_unknown
;
2188 static int ett_qmgmt_flags
;
2189 static int ett_qmgmt_il
;
2190 static int ett_qmgmt_il_inst
;
2191 static int ett_qmgmt_il_inst_flags
;
2192 static int ett_qmgmt_ec
;
2193 static int ett_qmgmt_ev
;
2194 static int ett_qmgmt_qro
;
2195 static int ett_lbmr_opts
;
2196 static int ett_lbmr_opt_src_id
;
2197 static int ett_lbmr_opt_src_id_flags
;
2198 static int ett_lbmr_opt_len
;
2199 static int ett_lbmr_opt_src_type
;
2200 static int ett_lbmr_opt_src_type_flags
;
2201 static int ett_lbmr_opt_version
;
2202 static int ett_lbmr_opt_version_flags
;
2203 static int ett_lbmr_opt_local_domain
;
2204 static int ett_lbmr_opt_local_domain_flags
;
2205 static int ett_lbmr_opt_unknown
;
2207 /* Dissector field handles */
2208 static int hf_lbmr_tag
;
2209 static int hf_lbmr_hdr
;
2210 static int hf_lbmr_hdr_ver
;
2211 static int hf_lbmr_hdr_opt
;
2212 static int hf_lbmr_hdr_type
;
2213 static int hf_lbmr_hdr_tqrs
;
2214 static int hf_lbmr_hdr_tirs
;
2215 static int hf_lbmr_hdr_qqrs
;
2216 static int hf_lbmr_hdr_qirs
;
2217 static int hf_lbmr_hdr_ext_type
;
2218 static int hf_lbmr_tqrs
;
2219 static int hf_lbmr_tqr
;
2220 static int hf_lbmr_tqr_pattern_type
;
2221 static int hf_lbmr_tqr_pattern
;
2222 static int hf_lbmr_tqr_name
;
2223 static int hf_lbmr_tirs
;
2224 static int hf_lbmr_tir
;
2225 static int hf_lbmr_tir_transport_opts
;
2226 static int hf_lbmr_tir_transport_type
;
2227 static int hf_lbmr_tir_tlen
;
2228 static int hf_lbmr_tir_ttl
;
2229 static int hf_lbmr_tir_index
;
2230 static int hf_lbmr_tir_name
;
2231 static int hf_lbmr_tir_tcp
;
2232 static int hf_lbmr_tir_tcp_ip
;
2233 static int hf_lbmr_tir_tcp_session_id
;
2234 static int hf_lbmr_tir_tcp_port
;
2235 static int hf_lbmr_tir_lbtrm
;
2236 static int hf_lbmr_tir_lbtrm_src_addr
;
2237 static int hf_lbmr_tir_lbtrm_mcast_addr
;
2238 static int hf_lbmr_tir_lbtrm_session_id
;
2239 static int hf_lbmr_tir_lbtrm_udp_dest_port
;
2240 static int hf_lbmr_tir_lbtrm_src_ucast_port
;
2241 static int hf_lbmr_tir_lbtru
;
2242 static int hf_lbmr_tir_lbtru_ip
;
2243 static int hf_lbmr_tir_lbtru_port
;
2244 static int hf_lbmr_tir_lbtru_session_id
;
2245 static int hf_lbmr_tir_lbtipc
;
2246 static int hf_lbmr_tir_lbtipc_host_id
;
2247 static int hf_lbmr_tir_lbtipc_session_id
;
2248 static int hf_lbmr_tir_lbtipc_xport_id
;
2249 static int hf_lbmr_tir_lbtrdma
;
2250 static int hf_lbmr_tir_lbtrdma_ip
;
2251 static int hf_lbmr_tir_lbtrdma_session_id
;
2252 static int hf_lbmr_tir_lbtrdma_port
;
2253 static int hf_lbmr_tir_lbtsmx
;
2254 static int hf_lbmr_tir_lbtsmx_host_id
;
2255 static int hf_lbmr_tir_lbtsmx_session_id
;
2256 static int hf_lbmr_tir_lbtsmx_xport_id
;
2257 static int hf_lbmr_tir_channel
;
2258 static int hf_lbmr_tir_unknown_transport
;
2259 static int hf_lbmr_topts
;
2260 static int hf_lbmr_topt_len
;
2261 static int hf_lbmr_topt_len_type
;
2262 static int hf_lbmr_topt_len_len
;
2263 static int hf_lbmr_topt_len_total_len
;
2264 static int hf_lbmr_topt_ume
;
2265 static int hf_lbmr_topt_ume_type
;
2266 static int hf_lbmr_topt_ume_len
;
2267 static int hf_lbmr_topt_ume_flags
;
2268 static int hf_lbmr_topt_ume_flags_ignore
;
2269 static int hf_lbmr_topt_ume_flags_latejoin
;
2270 static int hf_lbmr_topt_ume_flags_store
;
2271 static int hf_lbmr_topt_ume_flags_qccap
;
2272 static int hf_lbmr_topt_ume_flags_acktosrc
;
2273 static int hf_lbmr_topt_ume_store_tcp_port
;
2274 static int hf_lbmr_topt_ume_src_tcp_port
;
2275 static int hf_lbmr_topt_ume_store_tcp_addr
;
2276 static int hf_lbmr_topt_ume_src_tcp_addr
;
2277 static int hf_lbmr_topt_ume_src_reg_id
;
2278 static int hf_lbmr_topt_ume_transport_idx
;
2279 static int hf_lbmr_topt_ume_high_seqnum
;
2280 static int hf_lbmr_topt_ume_low_seqnum
;
2281 static int hf_lbmr_topt_ume_store
;
2282 static int hf_lbmr_topt_ume_store_type
;
2283 static int hf_lbmr_topt_ume_store_len
;
2284 static int hf_lbmr_topt_ume_store_flags
;
2285 static int hf_lbmr_topt_ume_store_flags_ignore
;
2286 static int hf_lbmr_topt_ume_store_grp_idx
;
2287 static int hf_lbmr_topt_ume_store_store_tcp_port
;
2288 static int hf_lbmr_topt_ume_store_store_idx
;
2289 static int hf_lbmr_topt_ume_store_store_ip_addr
;
2290 static int hf_lbmr_topt_ume_store_src_reg_id
;
2291 static int hf_lbmr_topt_ume_store_group
;
2292 static int hf_lbmr_topt_ume_store_group_type
;
2293 static int hf_lbmr_topt_ume_store_group_len
;
2294 static int hf_lbmr_topt_ume_store_group_flags
;
2295 static int hf_lbmr_topt_ume_store_group_flags_ignore
;
2296 static int hf_lbmr_topt_ume_store_group_grp_idx
;
2297 static int hf_lbmr_topt_ume_store_group_grp_sz
;
2298 static int hf_lbmr_topt_ume_store_group_reserved
;
2299 static int hf_lbmr_topt_latejoin
;
2300 static int hf_lbmr_topt_latejoin_type
;
2301 static int hf_lbmr_topt_latejoin_len
;
2302 static int hf_lbmr_topt_latejoin_flags
;
2303 static int hf_lbmr_topt_latejoin_flags_ignore
;
2304 static int hf_lbmr_topt_latejoin_flags_acktosrc
;
2305 static int hf_lbmr_topt_latejoin_src_tcp_port
;
2306 static int hf_lbmr_topt_latejoin_reserved
;
2307 static int hf_lbmr_topt_latejoin_src_ip_addr
;
2308 static int hf_lbmr_topt_latejoin_transport_idx
;
2309 static int hf_lbmr_topt_latejoin_high_seqnum
;
2310 static int hf_lbmr_topt_latejoin_low_seqnum
;
2311 static int hf_lbmr_topt_umq_rcridx
;
2312 static int hf_lbmr_topt_umq_rcridx_type
;
2313 static int hf_lbmr_topt_umq_rcridx_len
;
2314 static int hf_lbmr_topt_umq_rcridx_flags
;
2315 static int hf_lbmr_topt_umq_rcridx_flags_ignore
;
2316 static int hf_lbmr_topt_umq_rcridx_rcr_idx
;
2317 static int hf_lbmr_topt_umq_qinfo
;
2318 static int hf_lbmr_topt_umq_qinfo_type
;
2319 static int hf_lbmr_topt_umq_qinfo_len
;
2320 static int hf_lbmr_topt_umq_qinfo_flags
;
2321 static int hf_lbmr_topt_umq_qinfo_flags_ignore
;
2322 static int hf_lbmr_topt_umq_qinfo_flags_queue
;
2323 static int hf_lbmr_topt_umq_qinfo_flags_rcvlisten
;
2324 static int hf_lbmr_topt_umq_qinfo_flags_control
;
2325 static int hf_lbmr_topt_umq_qinfo_flags_srcrcvlisten
;
2326 static int hf_lbmr_topt_umq_qinfo_flags_participants_only
;
2327 static int hf_lbmr_topt_umq_qinfo_queue
;
2328 static int hf_lbmr_topt_cost
;
2329 static int hf_lbmr_topt_cost_type
;
2330 static int hf_lbmr_topt_cost_len
;
2331 static int hf_lbmr_topt_cost_flags
;
2332 static int hf_lbmr_topt_cost_flags_ignore
;
2333 static int hf_lbmr_topt_cost_hop_count
;
2334 static int hf_lbmr_topt_cost_cost
;
2335 static int hf_lbmr_topt_otid
;
2336 static int hf_lbmr_topt_otid_type
;
2337 static int hf_lbmr_topt_otid_len
;
2338 static int hf_lbmr_topt_otid_flags
;
2339 static int hf_lbmr_topt_otid_flags_ignore
;
2340 static int hf_lbmr_topt_otid_originating_transport
;
2341 static int hf_lbmr_topt_ctxinst
;
2342 static int hf_lbmr_topt_ctxinst_type
;
2343 static int hf_lbmr_topt_ctxinst_len
;
2344 static int hf_lbmr_topt_ctxinst_flags
;
2345 static int hf_lbmr_topt_ctxinst_flags_ignore
;
2346 static int hf_lbmr_topt_ctxinst_res
;
2347 static int hf_lbmr_topt_ctxinst_ctxinst
;
2348 static int hf_lbmr_topt_ctxinsts
;
2349 static int hf_lbmr_topt_ctxinsts_type
;
2350 static int hf_lbmr_topt_ctxinsts_len
;
2351 static int hf_lbmr_topt_ctxinsts_flags
;
2352 static int hf_lbmr_topt_ctxinsts_flags_ignore
;
2353 static int hf_lbmr_topt_ctxinsts_idx
;
2354 static int hf_lbmr_topt_ctxinsts_ctxinst
;
2355 static int hf_lbmr_topt_ulb
;
2356 static int hf_lbmr_topt_ulb_type
;
2357 static int hf_lbmr_topt_ulb_len
;
2358 static int hf_lbmr_topt_ulb_flags
;
2359 static int hf_lbmr_topt_ulb_flags_ignore
;
2360 static int hf_lbmr_topt_ulb_queue_id
;
2361 static int hf_lbmr_topt_ulb_regid
;
2362 static int hf_lbmr_topt_ulb_ulb_src_id
;
2363 static int hf_lbmr_topt_ulb_src_ip_addr
;
2364 static int hf_lbmr_topt_ulb_src_tcp_port
;
2365 static int hf_lbmr_topt_ulb_reserved
;
2366 static int hf_lbmr_topt_ctxinstq
;
2367 static int hf_lbmr_topt_ctxinstq_type
;
2368 static int hf_lbmr_topt_ctxinstq_len
;
2369 static int hf_lbmr_topt_ctxinstq_flags
;
2370 static int hf_lbmr_topt_ctxinstq_flags_ignore
;
2371 static int hf_lbmr_topt_ctxinstq_idx
;
2372 static int hf_lbmr_topt_ctxinstq_ctxinst
;
2373 static int hf_lbmr_topt_domain_id
;
2374 static int hf_lbmr_topt_domain_id_type
;
2375 static int hf_lbmr_topt_domain_id_len
;
2376 static int hf_lbmr_topt_domain_id_flags
;
2377 static int hf_lbmr_topt_domain_id_flags_ignore
;
2378 static int hf_lbmr_topt_domain_id_domain_id
;
2379 static int hf_lbmr_topt_exfunc
;
2380 static int hf_lbmr_topt_exfunc_type
;
2381 static int hf_lbmr_topt_exfunc_len
;
2382 static int hf_lbmr_topt_exfunc_flags
;
2383 static int hf_lbmr_topt_exfunc_flags_ignore
;
2384 static int hf_lbmr_topt_exfunc_src_tcp_port
;
2385 static int hf_lbmr_topt_exfunc_reserved
;
2386 static int hf_lbmr_topt_exfunc_src_ip_addr
;
2387 static int hf_lbmr_topt_exfunc_functionality_flags
;
2388 static int hf_lbmr_topt_exfunc_functionality_flags_lj
;
2389 static int hf_lbmr_topt_exfunc_functionality_flags_ume
;
2390 static int hf_lbmr_topt_exfunc_functionality_flags_umq
;
2391 static int hf_lbmr_topt_exfunc_functionality_flags_ulb
;
2392 static int hf_lbmr_topt_unknown
;
2393 static int hf_lbmr_topt_unknown_type
;
2394 static int hf_lbmr_topt_unknown_len
;
2395 static int hf_lbmr_topt_unknown_flags
;
2396 static int hf_lbmr_topt_unknown_data
;
2397 static int hf_lbmr_qqr
;
2398 static int hf_lbmr_qqr_name
;
2399 static int hf_lbmr_qirs
;
2400 static int hf_lbmr_qir
;
2401 static int hf_lbmr_qir_queue_name
;
2402 static int hf_lbmr_qir_topic_name
;
2403 static int hf_lbmr_qir_queue_id
;
2404 static int hf_lbmr_qir_queue_ver
;
2405 static int hf_lbmr_qir_queue_prev_ver
;
2406 static int hf_lbmr_qir_option_flag
;
2407 static int hf_lbmr_qir_grp_blks
;
2408 static int hf_lbmr_qir_queue_blks
;
2409 static int hf_lbmr_qir_grps
;
2410 static int hf_lbmr_qir_grp_blk
;
2411 static int hf_lbmr_qir_grp_blk_grp_idx
;
2412 static int hf_lbmr_qir_grp_blk_grp_sz
;
2413 static int hf_lbmr_qir_queues
;
2414 static int hf_lbmr_qir_queue_blk
;
2415 static int hf_lbmr_qir_queue_blk_ip
;
2416 static int hf_lbmr_qir_queue_blk_port
;
2417 static int hf_lbmr_qir_queue_blk_idx
;
2418 static int hf_lbmr_qir_queue_blk_grp_idx
;
2419 static int hf_lbmr_qir_queue_blk_reserved
;
2420 static int hf_lbmr_tmb
;
2421 static int hf_lbmr_tmb_len
;
2422 static int hf_lbmr_tmb_tmrs
;
2423 static int hf_lbmr_tmb_tmr_list
;
2424 static int hf_lbmr_tmr
;
2425 static int hf_lbmr_tmr_len
;
2426 static int hf_lbmr_tmr_type
;
2427 static int hf_lbmr_tmr_flags
;
2428 static int hf_lbmr_tmr_flags_response
;
2429 static int hf_lbmr_tmr_flags_wildcard_pcre
;
2430 static int hf_lbmr_tmr_flags_wildcard_regex
;
2431 static int hf_lbmr_tmr_name
;
2432 static int hf_lbmr_pser_dep_type
;
2433 static int hf_lbmr_pser_len
;
2434 static int hf_lbmr_pser_flags
;
2435 static int hf_lbmr_pser_flags_option
;
2436 static int hf_lbmr_pser_source_ip
;
2437 static int hf_lbmr_pser_store_ip
;
2438 static int hf_lbmr_pser_transport_idx
;
2439 static int hf_lbmr_pser_topic_idx
;
2440 static int hf_lbmr_pser_source_port
;
2441 static int hf_lbmr_pser_store_port
;
2442 static int hf_lbmr_pser_topic
;
2443 static int hf_lbmr_pser_opts
;
2444 static int hf_lbmr_pser_optlen
;
2445 static int hf_lbmr_pser_optlen_type
;
2446 static int hf_lbmr_pser_optlen_optlen
;
2447 static int hf_lbmr_pser_opt_ctxinst
;
2448 static int hf_lbmr_pser_opt_ctxinst_len
;
2449 static int hf_lbmr_pser_opt_ctxinst_type
;
2450 static int hf_lbmr_pser_opt_ctxinst_ctxinst
;
2451 static int hf_lbmr_opts
;
2452 static int hf_lbmr_opt_len
;
2453 static int hf_lbmr_opt_len_type
;
2454 static int hf_lbmr_opt_len_len
;
2455 static int hf_lbmr_opt_len_total_len
;
2456 static int hf_lbmr_opt_src_id
;
2457 static int hf_lbmr_opt_src_id_type
;
2458 static int hf_lbmr_opt_src_id_len
;
2459 static int hf_lbmr_opt_src_id_flags
;
2460 static int hf_lbmr_opt_src_id_flags_ignore
;
2461 static int hf_lbmr_opt_src_id_src_id
;
2462 static int hf_lbmr_opt_src_type
;
2463 static int hf_lbmr_opt_src_type_type
;
2464 static int hf_lbmr_opt_src_type_len
;
2465 static int hf_lbmr_opt_src_type_flags
;
2466 static int hf_lbmr_opt_src_type_flags_ignore
;
2467 static int hf_lbmr_opt_src_type_src_type
;
2468 static int hf_lbmr_opt_version
;
2469 static int hf_lbmr_opt_version_type
;
2470 static int hf_lbmr_opt_version_len
;
2471 static int hf_lbmr_opt_version_flags
;
2472 static int hf_lbmr_opt_version_flags_ignore
;
2473 static int hf_lbmr_opt_version_flags_ume
;
2474 static int hf_lbmr_opt_version_flags_umq
;
2475 static int hf_lbmr_opt_version_version
;
2476 static int hf_lbmr_opt_local_domain
;
2477 static int hf_lbmr_opt_local_domain_type
;
2478 static int hf_lbmr_opt_local_domain_len
;
2479 static int hf_lbmr_opt_local_domain_flags
;
2480 static int hf_lbmr_opt_local_domain_flags_ignore
;
2481 static int hf_lbmr_opt_local_domain_flags_viral
;
2482 static int hf_lbmr_opt_local_domain_local_domain_id
;
2483 static int hf_lbmr_opt_unknown
;
2484 static int hf_lbmr_opt_unknown_type
;
2485 static int hf_lbmr_opt_unknown_len
;
2486 static int hf_lbmr_opt_unknown_flags
;
2487 static int hf_lbmr_opt_unknown_data
;
2488 static int hf_lbmr_topic_res_request_flags
;
2489 static int hf_lbmr_topic_res_request_flags_gw_remote_interest
;
2490 static int hf_lbmr_topic_res_request_flags_context_query
;
2491 static int hf_lbmr_topic_res_request_flags_context_advertisement
;
2492 static int hf_lbmr_topic_res_request_flags_gateway_meta
;
2493 static int hf_lbmr_topic_res_request_flags_advertisement
;
2494 static int hf_lbmr_topic_res_request_flags_query
;
2495 static int hf_lbmr_topic_res_request_flags_wildcard_query
;
2496 static int hf_lbmr_ctxinfo_len
;
2497 static int hf_lbmr_ctxinfo_hop_count
;
2498 static int hf_lbmr_ctxinfo_flags
;
2499 static int hf_lbmr_ctxinfo_flags_query
;
2500 static int hf_lbmr_ctxinfo_flags_ip
;
2501 static int hf_lbmr_ctxinfo_flags_instance
;
2502 static int hf_lbmr_ctxinfo_flags_tnwg_src
;
2503 static int hf_lbmr_ctxinfo_flags_tnwg_rcv
;
2504 static int hf_lbmr_ctxinfo_flags_proxy
;
2505 static int hf_lbmr_ctxinfo_flags_name
;
2506 static int hf_lbmr_ctxinfo_port
;
2507 static int hf_lbmr_ctxinfo_ip
;
2508 static int hf_lbmr_ctxinfo_instance
;
2509 static int hf_lbmr_ctxinfo_name
;
2510 static int hf_lbmr_tnwg_len
;
2511 static int hf_lbmr_tnwg_type
;
2512 static int hf_lbmr_tnwg_reserved
;
2513 static int hf_lbmr_tnwg_interest
;
2514 static int hf_lbmr_tnwg_interest_len
;
2515 static int hf_lbmr_tnwg_interest_count
;
2516 static int hf_lbmr_tnwg_interest_rec
;
2517 static int hf_lbmr_tnwg_interest_rec_len
;
2518 static int hf_lbmr_tnwg_interest_rec_flags
;
2519 static int hf_lbmr_tnwg_interest_rec_flags_pattern
;
2520 static int hf_lbmr_tnwg_interest_rec_flags_cancel
;
2521 static int hf_lbmr_tnwg_interest_rec_flags_refresh
;
2522 static int hf_lbmr_tnwg_interest_rec_pattype
;
2523 static int hf_lbmr_tnwg_interest_rec_domain_id
;
2524 static int hf_lbmr_tnwg_interest_rec_symbol
;
2525 static int hf_lbmr_tnwg_ctxinfo
;
2526 static int hf_lbmr_tnwg_ctxinfo_len
;
2527 static int hf_lbmr_tnwg_ctxinfo_hop_count
;
2528 static int hf_lbmr_tnwg_ctxinfo_reserved
;
2529 static int hf_lbmr_tnwg_ctxinfo_flags1
;
2530 static int hf_lbmr_tnwg_ctxinfo_flags1_query
;
2531 static int hf_lbmr_tnwg_ctxinfo_flags1_tnwg_src
;
2532 static int hf_lbmr_tnwg_ctxinfo_flags1_tnwg_rcv
;
2533 static int hf_lbmr_tnwg_ctxinfo_flags1_proxy
;
2534 static int hf_lbmr_tnwg_ctxinfo_flags2
;
2535 static int hf_lbmr_tnwg_trreq
;
2536 static int hf_lbmr_tnwg_trreq_len
;
2537 static int hf_lbmr_tnwg_opt
;
2538 static int hf_lbmr_tnwg_opt_type
;
2539 static int hf_lbmr_tnwg_opt_len
;
2540 static int hf_lbmr_tnwg_opt_flags
;
2541 static int hf_lbmr_tnwg_opt_flags_ignore
;
2542 static int hf_lbmr_tnwg_opt_data
;
2543 static int hf_lbmr_tnwg_opt_ctxinst
;
2544 static int hf_lbmr_tnwg_opt_ctxinst_type
;
2545 static int hf_lbmr_tnwg_opt_ctxinst_len
;
2546 static int hf_lbmr_tnwg_opt_ctxinst_flags
;
2547 static int hf_lbmr_tnwg_opt_ctxinst_flags_ignore
;
2548 static int hf_lbmr_tnwg_opt_ctxinst_instance
;
2549 static int hf_lbmr_tnwg_opt_address
;
2550 static int hf_lbmr_tnwg_opt_address_type
;
2551 static int hf_lbmr_tnwg_opt_address_len
;
2552 static int hf_lbmr_tnwg_opt_address_flags
;
2553 static int hf_lbmr_tnwg_opt_address_flags_ignore
;
2554 static int hf_lbmr_tnwg_opt_address_port
;
2555 static int hf_lbmr_tnwg_opt_address_res
;
2556 static int hf_lbmr_tnwg_opt_address_ip
;
2557 static int hf_lbmr_tnwg_opt_domain
;
2558 static int hf_lbmr_tnwg_opt_domain_type
;
2559 static int hf_lbmr_tnwg_opt_domain_len
;
2560 static int hf_lbmr_tnwg_opt_domain_flags
;
2561 static int hf_lbmr_tnwg_opt_domain_flags_ignore
;
2562 static int hf_lbmr_tnwg_opt_domain_domain_id
;
2563 static int hf_lbmr_tnwg_opt_name
;
2564 static int hf_lbmr_tnwg_opt_name_type
;
2565 static int hf_lbmr_tnwg_opt_name_len
;
2566 static int hf_lbmr_tnwg_opt_name_flags
;
2567 static int hf_lbmr_tnwg_opt_name_flags_ignore
;
2568 static int hf_lbmr_tnwg_opt_name_name
;
2569 static int hf_lbmr_remote_domain_route_hdr_num_domains
;
2570 static int hf_lbmr_remote_domain_route_hdr_ip
;
2571 static int hf_lbmr_remote_domain_route_hdr_port
;
2572 static int hf_lbmr_remote_domain_route_hdr_route_index
;
2573 static int hf_lbmr_remote_domain_route_hdr_length
;
2574 static int hf_lbmr_remote_domain_route_hdr_domain
;
2575 static int hf_lbmr_rctxinfo_len
;
2576 static int hf_lbmr_rctxinfo_num_recs
;
2577 static int hf_lbmr_rctxinfo_reserved
;
2578 static int hf_lbmr_rctxinfo_rec
;
2579 static int hf_lbmr_rctxinfo_rec_len
;
2580 static int hf_lbmr_rctxinfo_rec_flags
;
2581 static int hf_lbmr_rctxinfo_rec_flags_query
;
2582 static int hf_lbmr_rctxinfo_rec_address
;
2583 static int hf_lbmr_rctxinfo_rec_address_type
;
2584 static int hf_lbmr_rctxinfo_rec_address_len
;
2585 static int hf_lbmr_rctxinfo_rec_address_flags
;
2586 static int hf_lbmr_rctxinfo_rec_address_domain_id
;
2587 static int hf_lbmr_rctxinfo_rec_address_ip
;
2588 static int hf_lbmr_rctxinfo_rec_address_port
;
2589 static int hf_lbmr_rctxinfo_rec_address_res
;
2590 static int hf_lbmr_rctxinfo_rec_instance
;
2591 static int hf_lbmr_rctxinfo_rec_instance_type
;
2592 static int hf_lbmr_rctxinfo_rec_instance_len
;
2593 static int hf_lbmr_rctxinfo_rec_instance_flags
;
2594 static int hf_lbmr_rctxinfo_rec_instance_instance
;
2595 static int hf_lbmr_rctxinfo_rec_odomain
;
2596 static int hf_lbmr_rctxinfo_rec_odomain_type
;
2597 static int hf_lbmr_rctxinfo_rec_odomain_len
;
2598 static int hf_lbmr_rctxinfo_rec_odomain_flags
;
2599 static int hf_lbmr_rctxinfo_rec_odomain_domain_id
;
2600 static int hf_lbmr_rctxinfo_rec_name
;
2601 static int hf_lbmr_rctxinfo_rec_name_type
;
2602 static int hf_lbmr_rctxinfo_rec_name_len
;
2603 static int hf_lbmr_rctxinfo_rec_name_flags
;
2604 static int hf_lbmr_rctxinfo_rec_name_name
;
2605 static int hf_lbmr_rctxinfo_rec_unknown
;
2606 static int hf_lbmr_rctxinfo_rec_unknown_type
;
2607 static int hf_lbmr_rctxinfo_rec_unknown_len
;
2608 static int hf_lbmr_rctxinfo_rec_unknown_flags
;
2609 static int hf_lbmr_rctxinfo_rec_unknown_data
;
2610 static int hf_qmgmt_flags
;
2611 static int hf_qmgmt_flags_i_flag
;
2612 static int hf_qmgmt_flags_n_flag
;
2613 static int hf_qmgmt_flags_il_l_flag
;
2614 static int hf_qmgmt_flags_il_k_flag
;
2615 static int hf_qmgmt_pckt_type
;
2616 static int hf_qmgmt_cfgsig
;
2617 static int hf_qmgmt_queue_id
;
2618 static int hf_qmgmt_queue_ver
;
2619 static int hf_qmgmt_ip
;
2620 static int hf_qmgmt_port
;
2621 static int hf_qmgmt_inst_idx
;
2622 static int hf_qmgmt_grp_idx
;
2623 static int hf_qmgmt_pckt_type_dep16
;
2624 static int hf_qmgmt_il_num_insts
;
2625 static int hf_qmgmt_jrej_code
;
2626 static int hf_qmgmt_ev_bias
;
2627 static int hf_qmgmt_il
;
2628 static int hf_qmgmt_il_highest_rcr_tsp
;
2629 static int hf_qmgmt_il_inst
;
2630 static int hf_qmgmt_il_inst_ip
;
2631 static int hf_qmgmt_il_inst_port
;
2632 static int hf_qmgmt_il_inst_inst_idx
;
2633 static int hf_qmgmt_il_inst_grp_idx
;
2634 static int hf_qmgmt_il_inst_flags
;
2635 static int hf_qmgmt_il_inst_flags_m_flag
;
2636 static int hf_qmgmt_il_inst_flags_q_flag
;
2637 static int hf_qmgmt_il_inst_flags_p_flag
;
2638 static int hf_qmgmt_ec
;
2639 static int hf_qmgmt_ec_queue_new_ver
;
2640 static int hf_qmgmt_ev
;
2641 static int hf_qmgmt_ev_highest_rcr_tsp
;
2642 static int hf_qmgmt_ev_age
;
2643 static int hf_qmgmt_qro
;
2644 static int hf_qmgmt_qro_highest_rcr_tsp
;
2645 static int hf_qmgmt_qname
;
2647 /* Expert info handles */
2648 static expert_field ei_lbmr_analysis_length_incorrect
;
2649 static expert_field ei_lbmr_analysis_invalid_value
;
2650 static expert_field ei_lbmr_analysis_zero_len_option
;
2654 static int lbmr_topic_advertisement_tap_handle
= -1;
2655 static int lbmr_topic_query_tap_handle
= -1;
2656 static int lbmr_pattern_query_tap_handle
= -1;
2657 static int lbmr_queue_advertisement_tap_handle
= -1;
2658 static int lbmr_queue_query_tap_handle
= -1;
2660 #define LBMR_TOPIC_ADVERTISEMENT_TAP_STRING "lbm_lbmr_topic_advertisement"
2661 #define LBMR_TOPIC_QUERY_TAP_STRING "lbm_lbmr_topic_query"
2662 #define LBMR_PATTERN_QUERY_TAP_STRING "lbm_lbmr_pattern_query"
2663 #define LBMR_QUEUE_ADVERTISEMENT_TAP_STRING "lbm_lbmr_queue_advertisement"
2664 #define LBMR_QUEUE_QUERY_TAP_STRING "lbm_lbmr_queue_query"
2666 /*----------------------------------------------------------------------------*/
2668 /*----------------------------------------------------------------------------*/
2669 /* Statistics structures */
2670 struct tqr_node_t_stct
;
2671 struct tqr_node_t_stct
2674 struct tqr_node_t_stct
* next
;
2676 typedef struct tqr_node_t_stct tqr_node_t
;
2678 struct wctqr_node_t_stct
;
2679 struct wctqr_node_t_stct
2683 struct wctqr_node_t_stct
* next
;
2685 typedef struct wctqr_node_t_stct wctqr_node_t
;
2687 struct tir_node_t_stct
;
2688 struct tir_node_t_stct
2691 char * source_string
;
2693 struct tir_node_t_stct
* next
;
2695 typedef struct tir_node_t_stct tir_node_t
;
2704 wctqr_node_t
* wctqr
;
2705 } lbmr_topic_contents_t
;
2707 struct qqr_node_t_stct
;
2708 struct qqr_node_t_stct
2711 struct qqr_node_t_stct
* next
;
2713 typedef struct qqr_node_t_stct qqr_node_t
;
2715 struct qir_node_t_stct
;
2716 struct qir_node_t_stct
2721 struct qir_node_t_stct
* next
;
2723 typedef struct qir_node_t_stct qir_node_t
;
2731 } lbmr_queue_contents_t
;
2738 lbmr_topic_contents_t topic
;
2739 lbmr_queue_contents_t queue
;
2743 #define LBMR_CONTENTS_TOPIC 0
2744 #define LBMR_CONTENTS_QUEUE 1
2746 /* Statistics titles */
2747 static const char * lbmr_stat_tree_name_topic_ads_topic
= "29West/Topics/Advertisements by Topic";
2748 static const char * lbmr_stat_tree_name_topic_ads_source
= "29West/Topics/Advertisements by Source";
2749 static const char * lbmr_stat_tree_name_topic_ads_transport
= "29West/Topics/Advertisements by Transport";
2750 static const char * lbmr_stat_tree_name_topic_queries_topic
= "29West/Topics/Queries by Topic";
2751 static const char * lbmr_stat_tree_name_topic_queries_receiver
= "29West/Topics/Queries by Receiver";
2752 static const char * lbmr_stat_tree_name_topic_queries_pattern
= "29West/Topics/Wildcard Queries by Pattern";
2753 static const char * lbmr_stat_tree_name_topic_queries_pattern_receiver
= "29West/Topics/Wildcard Queries by Receiver";
2754 static const char * lbmr_stat_tree_name_queue_ads_queue
= "29West/Queues/Advertisements by Queue";
2755 static const char * lbmr_stat_tree_name_queue_ads_source
= "29West/Queues/Advertisements by Source";
2756 static const char * lbmr_stat_tree_name_queue_queries_queue
= "29West/Queues/Queries by Queue";
2757 static const char * lbmr_stat_tree_name_queue_queries_receiver
= "29West/Queues/Queries by Receiver";
2759 /* Statistics handles */
2760 static int lbmr_stats_tree_handle_topic_ads_topic
= -1;
2761 static int lbmr_stats_tree_handle_topic_ads_source
= -1;
2762 static int lbmr_stats_tree_handle_topic_ads_transport
= -1;
2763 static int lbmr_stats_tree_handle_topic_queries_topic
= -1;
2764 static int lbmr_stats_tree_handle_topic_queries_receiver
= -1;
2765 static int lbmr_stats_tree_handle_topic_queries_pattern
= -1;
2766 static int lbmr_stats_tree_handle_topic_queries_pattern_receiver
= -1;
2767 static int lbmr_stats_tree_handle_queue_ads_queue
= -1;
2768 static int lbmr_stats_tree_handle_queue_ads_source
= -1;
2769 static int lbmr_stats_tree_handle_queue_queries_queue
= -1;
2770 static int lbmr_stats_tree_handle_queue_queries_receiver
= -1;
2772 /*----------------------------------------------------------------------------*/
2773 /* Statistics tree utility functions. */
2774 /*----------------------------------------------------------------------------*/
2776 static void add_contents_tqr(lbmr_contents_t
* contents
, const char * topic
)
2778 tqr_node_t
* node
= NULL
;
2780 node
= wmem_new(wmem_packet_scope(), tqr_node_t
);
2781 node
->topic
= wmem_strdup(wmem_packet_scope(), topic
);
2782 node
->next
= contents
->contents
.topic
.tqr
;
2783 contents
->contents
.topic
.tqr
= node
;
2784 contents
->contents
.topic
.tqr_count
++;
2787 static void add_contents_wctqr(lbmr_contents_t
* contents
, unsigned char type
, const char * pattern
)
2789 wctqr_node_t
* node
= NULL
;
2791 node
= wmem_new(wmem_packet_scope(), wctqr_node_t
);
2793 node
->pattern
= wmem_strdup(wmem_packet_scope(), pattern
);
2794 node
->next
= contents
->contents
.topic
.wctqr
;
2795 contents
->contents
.topic
.wctqr
= node
;
2796 contents
->contents
.topic
.wctqr_count
++;
2799 static void add_contents_tir(lbmr_contents_t
* contents
, const char * topic
, char * source
, uint32_t topic_index
)
2801 tir_node_t
* node
= NULL
;
2803 node
= wmem_new(wmem_packet_scope(), tir_node_t
);
2804 node
->topic
= wmem_strdup(wmem_packet_scope(), topic
);
2805 node
->source_string
= source
;
2806 node
->idx
= topic_index
;
2807 node
->next
= contents
->contents
.topic
.tir
;
2808 contents
->contents
.topic
.tir
= node
;
2809 contents
->contents
.topic
.tir_count
++;
2812 static void add_contents_qqr(lbmr_contents_t
* contents
, const char * queue
)
2814 qqr_node_t
* node
= NULL
;
2816 node
= wmem_new(wmem_packet_scope(), qqr_node_t
);
2817 node
->queue
= wmem_strdup(wmem_packet_scope(), queue
);
2818 node
->next
= contents
->contents
.queue
.qqr
;
2819 contents
->contents
.queue
.qqr
= node
;
2820 contents
->contents
.queue
.qqr_count
++;
2823 static void add_contents_qir(lbmr_contents_t
* contents
, const char * queue
, const char * topic
, uint16_t port
)
2825 qir_node_t
* node
= NULL
;
2827 node
= wmem_new(wmem_packet_scope(), qir_node_t
);
2828 node
->queue
= wmem_strdup(wmem_packet_scope(), queue
);
2829 node
->topic
= wmem_strdup(wmem_packet_scope(), topic
);
2831 node
->next
= contents
->contents
.queue
.qir
;
2832 contents
->contents
.queue
.qir
= node
;
2833 contents
->contents
.queue
.qir_count
++;
2836 /*----------------------------------------------------------------------------*/
2837 /* Topic advertisements by Topic: */
2839 /* - Source address */
2840 /* - Source string (including topic index) */
2841 /*----------------------------------------------------------------------------*/
2843 static void lbmr_topic_ads_topic_stats_tree_init(stats_tree
* tree
)
2845 lbmr_stats_tree_handle_topic_ads_topic
= stats_tree_create_node(tree
, lbmr_stat_tree_name_topic_ads_topic
, 0, STAT_DT_INT
, true);
2848 static tap_packet_status
lbmr_topic_ads_topic_stats_tree_packet(stats_tree
* tree
, packet_info
* pinfo
, epan_dissect_t
* edt _U_
, const void * data
, tap_flags_t flags _U_
)
2850 const lbm_lbmr_topic_advertisement_tap_info_t
* info
= (const lbm_lbmr_topic_advertisement_tap_info_t
*) data
;
2853 char * full_source_string
;
2855 tick_stat_node(tree
, lbmr_stat_tree_name_topic_ads_topic
, 0, false);
2856 topic_node
= tick_stat_node(tree
, info
->topic
, lbmr_stats_tree_handle_topic_ads_topic
, true);
2857 source_node
= tick_stat_node(tree
, address_to_str(wmem_packet_scope(), &pinfo
->net_src
), topic_node
, true);
2858 full_source_string
= wmem_strdup_printf(wmem_packet_scope(), "%s[%" PRIu32
"]", info
->source
, info
->topic_index
);
2859 tick_stat_node(tree
, full_source_string
, source_node
, true);
2860 return (TAP_PACKET_REDRAW
);
2863 /*----------------------------------------------------------------------------*/
2864 /* Topic advertisements by Source: */
2865 /* Source address */
2867 /* - Source string (including topic index) */
2868 /*----------------------------------------------------------------------------*/
2870 static void lbmr_topic_ads_source_stats_tree_init(stats_tree
* tree
)
2872 lbmr_stats_tree_handle_topic_ads_source
= stats_tree_create_node(tree
, lbmr_stat_tree_name_topic_ads_source
, 0, STAT_DT_INT
, true);
2875 static tap_packet_status
lbmr_topic_ads_source_stats_tree_packet(stats_tree
* tree
, packet_info
* pinfo
, epan_dissect_t
* edt _U_
, const void * data
, tap_flags_t flags _U_
)
2877 const lbm_lbmr_topic_advertisement_tap_info_t
* info
= (const lbm_lbmr_topic_advertisement_tap_info_t
*) data
;
2880 char * full_source_string
;
2882 tick_stat_node(tree
, lbmr_stat_tree_name_topic_ads_source
, 0, false);
2883 source_node
= tick_stat_node(tree
, address_to_str(wmem_packet_scope(), &pinfo
->net_src
), lbmr_stats_tree_handle_topic_ads_source
, true);
2884 topic_node
= tick_stat_node(tree
, info
->topic
, source_node
, true);
2885 full_source_string
= wmem_strdup_printf(wmem_packet_scope(), "%s[%" PRIu32
"]", info
->source
, info
->topic_index
);
2886 tick_stat_node(tree
, full_source_string
, topic_node
, true);
2887 return (TAP_PACKET_REDRAW
);
2890 /*----------------------------------------------------------------------------*/
2891 /* Topic advertisements by Transport: */
2893 /* - Topic name (including topic index) */
2894 /*----------------------------------------------------------------------------*/
2896 static void lbmr_topic_ads_transport_stats_tree_init(stats_tree
* tree
)
2898 lbmr_stats_tree_handle_topic_ads_transport
= stats_tree_create_node(tree
, lbmr_stat_tree_name_topic_ads_transport
, 0, STAT_DT_INT
, true);
2901 static tap_packet_status
lbmr_topic_ads_transport_stats_tree_packet(stats_tree
* tree
, packet_info
* pinfo _U_
, epan_dissect_t
* edt _U_
, const void * data
, tap_flags_t flags _U_
)
2903 const lbm_lbmr_topic_advertisement_tap_info_t
* info
= (const lbm_lbmr_topic_advertisement_tap_info_t
*) data
;
2905 char * full_source_string
;
2907 tick_stat_node(tree
, lbmr_stat_tree_name_topic_ads_transport
, 0, false);
2908 transport_node
= tick_stat_node(tree
, info
->source
, lbmr_stats_tree_handle_topic_ads_transport
, true);
2909 full_source_string
= wmem_strdup_printf(wmem_packet_scope(), "%s [%" PRIu32
"]", info
->topic
, info
->topic_index
);
2910 tick_stat_node(tree
, full_source_string
, transport_node
, true);
2911 return (TAP_PACKET_REDRAW
);
2914 /*----------------------------------------------------------------------------*/
2915 /* Topic queries by Topic: */
2917 /* - Receiver address */
2918 /*----------------------------------------------------------------------------*/
2920 static void lbmr_topic_queries_topic_stats_tree_init(stats_tree
* tree
)
2922 lbmr_stats_tree_handle_topic_queries_topic
= stats_tree_create_node(tree
, lbmr_stat_tree_name_topic_queries_topic
, 0, STAT_DT_INT
, true);
2925 static tap_packet_status
lbmr_topic_queries_topic_stats_tree_packet(stats_tree
* tree
, packet_info
* pinfo
, epan_dissect_t
* edt _U_
, const void * data
, tap_flags_t flags _U_
)
2927 const lbm_lbmr_topic_query_tap_info_t
* info
= (const lbm_lbmr_topic_query_tap_info_t
*) data
;
2930 tick_stat_node(tree
, lbmr_stat_tree_name_topic_queries_topic
, 0, false);
2931 topic_node
= tick_stat_node(tree
, info
->topic
, lbmr_stats_tree_handle_topic_queries_topic
, true);
2932 tick_stat_node(tree
, address_to_str(wmem_packet_scope(), &pinfo
->net_src
), topic_node
, true);
2933 return (TAP_PACKET_REDRAW
);
2936 /*----------------------------------------------------------------------------*/
2937 /* Topic queries by Receiver: */
2938 /* Receiver address */
2940 /*----------------------------------------------------------------------------*/
2942 static void lbmr_topic_queries_receiver_stats_tree_init(stats_tree
* tree
)
2944 lbmr_stats_tree_handle_topic_queries_receiver
= stats_tree_create_node(tree
, lbmr_stat_tree_name_topic_queries_receiver
, 0, STAT_DT_INT
, true);
2947 static tap_packet_status
lbmr_topic_queries_receiver_stats_tree_packet(stats_tree
* tree
, packet_info
* pinfo
, epan_dissect_t
* edt _U_
, const void * data
, tap_flags_t flags _U_
)
2949 const lbm_lbmr_topic_query_tap_info_t
* info
= (const lbm_lbmr_topic_query_tap_info_t
*) data
;
2952 tick_stat_node(tree
, lbmr_stat_tree_name_topic_queries_receiver
, 0, false);
2953 receiver_node
= tick_stat_node(tree
, address_to_str(wmem_packet_scope(), &pinfo
->net_src
), lbmr_stats_tree_handle_topic_queries_receiver
, true);
2954 tick_stat_node(tree
, info
->topic
, receiver_node
, true);
2955 return (TAP_PACKET_REDRAW
);
2958 /*----------------------------------------------------------------------------*/
2959 /* Topic queries by Pattern: */
2961 /* - Receiver address */
2962 /*----------------------------------------------------------------------------*/
2964 static void lbmr_topic_queries_pattern_stats_tree_init(stats_tree
* tree
)
2966 lbmr_stats_tree_handle_topic_queries_pattern
= stats_tree_create_node(tree
, lbmr_stat_tree_name_topic_queries_pattern
, 0, STAT_DT_INT
, true);
2969 static tap_packet_status
lbmr_topic_queries_pattern_stats_tree_packet(stats_tree
* tree
, packet_info
* pinfo
, epan_dissect_t
* edt _U_
, const void * data
, tap_flags_t flags _U_
)
2971 const lbm_lbmr_pattern_query_tap_info_t
* info
= (const lbm_lbmr_pattern_query_tap_info_t
*) data
;
2975 tick_stat_node(tree
, lbmr_stat_tree_name_topic_queries_pattern
, 0, false);
2976 pattern_str
= wmem_strdup_printf(wmem_packet_scope(), "%s (%s)",
2978 val_to_str(info
->type
, lbm_wildcard_pattern_type_short
, "UNKN[0x%02x]"));
2979 pattern_node
= tick_stat_node(tree
, pattern_str
, lbmr_stats_tree_handle_topic_queries_pattern
, true);
2980 tick_stat_node(tree
, address_to_str(wmem_packet_scope(), &pinfo
->net_src
), pattern_node
, true);
2981 return (TAP_PACKET_REDRAW
);
2984 /*----------------------------------------------------------------------------*/
2985 /* Topic queries by Pattern: */
2986 /* Receiver address */
2988 /*----------------------------------------------------------------------------*/
2990 static void lbmr_topic_queries_pattern_receiver_stats_tree_init(stats_tree
* tree
)
2992 lbmr_stats_tree_handle_topic_queries_pattern_receiver
= stats_tree_create_node(tree
, lbmr_stat_tree_name_topic_queries_pattern_receiver
, 0, STAT_DT_INT
, true);
2995 static tap_packet_status
lbmr_topic_queries_pattern_receiver_stats_tree_packet(stats_tree
* tree
, packet_info
* pinfo
, epan_dissect_t
* edt _U_
, const void * data
, tap_flags_t flags _U_
)
2997 const lbm_lbmr_pattern_query_tap_info_t
* info
= (const lbm_lbmr_pattern_query_tap_info_t
*) data
;
3001 tick_stat_node(tree
, lbmr_stat_tree_name_topic_queries_pattern_receiver
, 0, false);
3002 receiver_node
= tick_stat_node(tree
, address_to_str(wmem_packet_scope(), &pinfo
->net_src
), lbmr_stats_tree_handle_topic_queries_pattern_receiver
, true);
3003 pattern_str
= wmem_strdup_printf(wmem_packet_scope(), "%s (%s)",
3005 val_to_str(info
->type
, lbm_wildcard_pattern_type_short
, "UNKN[0x%02x]"));
3006 tick_stat_node(tree
, pattern_str
, receiver_node
, true);
3007 return (TAP_PACKET_REDRAW
);
3010 /*----------------------------------------------------------------------------*/
3011 /* Queue advertisements by Queue: */
3013 /* - Source address and port */
3014 /*----------------------------------------------------------------------------*/
3016 static void lbmr_queue_ads_queue_stats_tree_init(stats_tree
* tree
)
3018 lbmr_stats_tree_handle_queue_ads_queue
= stats_tree_create_node(tree
, lbmr_stat_tree_name_queue_ads_queue
, 0, STAT_DT_INT
, true);
3021 static tap_packet_status
lbmr_queue_ads_queue_stats_tree_packet(stats_tree
* tree
, packet_info
* pinfo
, epan_dissect_t
* edt _U_
, const void * data
, tap_flags_t flags _U_
)
3023 const lbm_lbmr_queue_advertisement_tap_info_t
* info
= (const lbm_lbmr_queue_advertisement_tap_info_t
*) data
;
3027 tick_stat_node(tree
, lbmr_stat_tree_name_queue_ads_queue
, 0, false);
3028 queue_node
= tick_stat_node(tree
, info
->queue
, lbmr_stats_tree_handle_queue_ads_queue
, true);
3029 str
= wmem_strdup_printf(wmem_packet_scope(), "%s:%" PRIu16
, address_to_str(wmem_packet_scope(), &pinfo
->net_src
), info
->port
);
3030 tick_stat_node(tree
, str
, queue_node
, true);
3031 return (TAP_PACKET_REDRAW
);
3034 /*----------------------------------------------------------------------------*/
3035 /* Queue advertisements by Source: */
3036 /* Source address */
3037 /* - Queue name and port */
3038 /*----------------------------------------------------------------------------*/
3040 static void lbmr_queue_ads_source_stats_tree_init(stats_tree
* tree
)
3042 lbmr_stats_tree_handle_queue_ads_source
= stats_tree_create_node(tree
, lbmr_stat_tree_name_queue_ads_source
, 0, STAT_DT_INT
, true);
3045 static tap_packet_status
lbmr_queue_ads_source_stats_tree_packet(stats_tree
* tree
, packet_info
* pinfo
, epan_dissect_t
* edt _U_
, const void * data
, tap_flags_t flags _U_
)
3047 const lbm_lbmr_queue_advertisement_tap_info_t
* info
= (const lbm_lbmr_queue_advertisement_tap_info_t
*) data
;
3051 tick_stat_node(tree
, lbmr_stat_tree_name_queue_ads_source
, 0, false);
3052 source_node
= tick_stat_node(tree
, address_to_str(wmem_packet_scope(), &pinfo
->net_src
), lbmr_stats_tree_handle_queue_ads_source
, true);
3053 str
= wmem_strdup_printf(wmem_packet_scope(), "%s:%" PRIu16
, info
->queue
, info
->port
);
3054 tick_stat_node(tree
, str
, source_node
, true);
3055 return (TAP_PACKET_REDRAW
);
3058 /*----------------------------------------------------------------------------*/
3059 /* Queue queries by Queue: */
3061 /* - Receiver address */
3062 /*----------------------------------------------------------------------------*/
3064 static void lbmr_queue_queries_queue_stats_tree_init(stats_tree
* tree
)
3066 lbmr_stats_tree_handle_queue_queries_queue
= stats_tree_create_node(tree
, lbmr_stat_tree_name_queue_queries_queue
, 0, STAT_DT_INT
, true);
3069 static tap_packet_status
lbmr_queue_queries_queue_stats_tree_packet(stats_tree
* tree
, packet_info
* pinfo
, epan_dissect_t
* edt _U_
, const void * data
, tap_flags_t flags _U_
)
3071 const lbm_lbmr_queue_query_tap_info_t
* info
= (const lbm_lbmr_queue_query_tap_info_t
*) data
;
3074 tick_stat_node(tree
, lbmr_stat_tree_name_queue_queries_queue
, 0, false);
3075 queue_node
= tick_stat_node(tree
, info
->queue
, lbmr_stats_tree_handle_queue_queries_queue
, true);
3076 tick_stat_node(tree
, address_to_str(wmem_packet_scope(), &pinfo
->net_src
), queue_node
, true);
3077 return (TAP_PACKET_REDRAW
);
3080 /*----------------------------------------------------------------------------*/
3081 /* Queue queries by Receiver: */
3082 /* Receiver address */
3084 /*----------------------------------------------------------------------------*/
3086 static void lbmr_queue_queries_receiver_stats_tree_init(stats_tree
* tree
)
3088 lbmr_stats_tree_handle_queue_queries_receiver
= stats_tree_create_node(tree
, lbmr_stat_tree_name_queue_queries_receiver
, 0, STAT_DT_INT
, true);
3091 static tap_packet_status
lbmr_queue_queries_receiver_stats_tree_packet(stats_tree
* tree
, packet_info
* pinfo
, epan_dissect_t
* edt _U_
, const void * data
, tap_flags_t flags _U_
)
3093 const lbm_lbmr_queue_query_tap_info_t
* info
= (const lbm_lbmr_queue_query_tap_info_t
*) data
;
3096 tick_stat_node(tree
, lbmr_stat_tree_name_queue_queries_receiver
, 0, false);
3097 receiver_node
= tick_stat_node(tree
, address_to_str(wmem_packet_scope(), &pinfo
->net_src
), lbmr_stats_tree_handle_queue_queries_receiver
, true);
3098 tick_stat_node(tree
, info
->queue
, receiver_node
, true);
3099 return (TAP_PACKET_REDRAW
);
3102 /*----------------------------------------------------------------------------*/
3103 /* Dissector functions. */
3104 /*----------------------------------------------------------------------------*/
3106 /*----------------------------------------------------------------------------*/
3107 /* LBMR TNWG option dissection functions. */
3108 /*----------------------------------------------------------------------------*/
3109 static int dissect_lbmr_tnwg_ctxinst_opt(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo _U_
, proto_tree
* tree
)
3111 proto_tree
* opt_tree
= NULL
;
3112 proto_item
* opt_item
= NULL
;
3113 uint8_t opt_len
= 0;
3114 static int * const flags
[] =
3116 &hf_lbmr_tnwg_opt_ctxinst_flags_ignore
,
3120 opt_len
= tvb_get_uint8(tvb
, offset
+ O_LBMR_TNWG_OPT_CTXINST_T_LEN
);
3121 opt_item
= proto_tree_add_item(tree
, hf_lbmr_tnwg_opt_ctxinst
, tvb
, offset
, opt_len
, ENC_NA
);
3122 opt_tree
= proto_item_add_subtree(opt_item
, ett_lbmr_tnwg_ctxinst_opt
);
3123 proto_tree_add_item(opt_tree
, hf_lbmr_tnwg_opt_ctxinst_type
, tvb
, offset
+ O_LBMR_TNWG_OPT_CTXINST_T_TYPE
, L_LBMR_TNWG_OPT_CTXINST_T_TYPE
, ENC_BIG_ENDIAN
);
3124 proto_tree_add_item(opt_tree
, hf_lbmr_tnwg_opt_ctxinst_len
, tvb
, offset
+ O_LBMR_TNWG_OPT_CTXINST_T_LEN
, L_LBMR_TNWG_OPT_CTXINST_T_LEN
, ENC_BIG_ENDIAN
);
3125 proto_tree_add_bitmask(opt_tree
, tvb
, offset
+ O_LBMR_TNWG_OPT_CTXINST_T_FLAGS
, hf_lbmr_tnwg_opt_ctxinst_flags
, ett_lbmr_tnwg_ctxinst_opt_flags
, flags
, ENC_BIG_ENDIAN
);
3126 proto_tree_add_item(opt_tree
, hf_lbmr_tnwg_opt_ctxinst_instance
, tvb
, offset
+ O_LBMR_TNWG_OPT_CTXINST_T_INSTANCE
, L_LBMR_TNWG_OPT_CTXINST_T_INSTANCE
, ENC_NA
);
3127 return ((int) opt_len
);
3130 static int dissect_lbmr_tnwg_address_opt(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo _U_
, proto_tree
* tree
)
3132 proto_tree
* opt_tree
= NULL
;
3133 proto_item
* opt_item
= NULL
;
3134 uint8_t opt_len
= 0;
3135 static int * const flags
[] =
3137 &hf_lbmr_tnwg_opt_address_flags_ignore
,
3141 opt_len
= tvb_get_uint8(tvb
, offset
+ O_LBMR_TNWG_OPT_ADDRESS_T_LEN
);
3142 opt_item
= proto_tree_add_item(tree
, hf_lbmr_tnwg_opt_address
, tvb
, offset
, opt_len
, ENC_NA
);
3143 opt_tree
= proto_item_add_subtree(opt_item
, ett_lbmr_tnwg_address_opt
);
3144 proto_tree_add_item(opt_tree
, hf_lbmr_tnwg_opt_address_type
, tvb
, offset
+ O_LBMR_TNWG_OPT_ADDRESS_T_TYPE
, L_LBMR_TNWG_OPT_ADDRESS_T_TYPE
, ENC_BIG_ENDIAN
);
3145 proto_tree_add_item(opt_tree
, hf_lbmr_tnwg_opt_address_len
, tvb
, offset
+ O_LBMR_TNWG_OPT_ADDRESS_T_LEN
, L_LBMR_TNWG_OPT_ADDRESS_T_LEN
, ENC_BIG_ENDIAN
);
3146 proto_tree_add_bitmask(opt_tree
, tvb
, offset
+ O_LBMR_TNWG_OPT_ADDRESS_T_FLAGS
, hf_lbmr_tnwg_opt_address_flags
, ett_lbmr_tnwg_address_opt_flags
, flags
, ENC_BIG_ENDIAN
);
3147 proto_tree_add_item(opt_tree
, hf_lbmr_tnwg_opt_address_port
, tvb
, offset
+ O_LBMR_TNWG_OPT_ADDRESS_T_PORT
, L_LBMR_TNWG_OPT_ADDRESS_T_PORT
, ENC_BIG_ENDIAN
);
3148 proto_tree_add_item(opt_tree
, hf_lbmr_tnwg_opt_address_res
, tvb
, offset
+ O_LBMR_TNWG_OPT_ADDRESS_T_RES
, L_LBMR_TNWG_OPT_ADDRESS_T_RES
, ENC_BIG_ENDIAN
);
3149 proto_tree_add_item(opt_tree
, hf_lbmr_tnwg_opt_address_ip
, tvb
, offset
+ O_LBMR_TNWG_OPT_ADDRESS_T_IP
, L_LBMR_TNWG_OPT_ADDRESS_T_IP
, ENC_BIG_ENDIAN
);
3150 return ((int)opt_len
);
3153 static int dissect_lbmr_tnwg_domain_opt(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo _U_
, proto_tree
* tree
)
3155 proto_tree
* opt_tree
= NULL
;
3156 proto_item
* opt_item
= NULL
;
3157 uint8_t opt_len
= 0;
3158 static int * const flags
[] =
3160 &hf_lbmr_tnwg_opt_domain_flags_ignore
,
3164 opt_len
= tvb_get_uint8(tvb
, offset
+ O_LBMR_TNWG_OPT_DOMAIN_T_LEN
);
3165 opt_item
= proto_tree_add_item(tree
, hf_lbmr_tnwg_opt_domain
, tvb
, offset
, opt_len
, ENC_NA
);
3166 opt_tree
= proto_item_add_subtree(opt_item
, ett_lbmr_tnwg_domain_opt
);
3167 proto_tree_add_item(opt_tree
, hf_lbmr_tnwg_opt_domain_type
, tvb
, offset
+ O_LBMR_TNWG_OPT_DOMAIN_T_TYPE
, L_LBMR_TNWG_OPT_DOMAIN_T_TYPE
, ENC_BIG_ENDIAN
);
3168 proto_tree_add_item(opt_tree
, hf_lbmr_tnwg_opt_domain_len
, tvb
, offset
+ O_LBMR_TNWG_OPT_DOMAIN_T_LEN
, L_LBMR_TNWG_OPT_DOMAIN_T_LEN
, ENC_BIG_ENDIAN
);
3169 proto_tree_add_bitmask(opt_tree
, tvb
, offset
+ O_LBMR_TNWG_OPT_DOMAIN_T_FLAGS
, hf_lbmr_tnwg_opt_domain_flags
, ett_lbmr_tnwg_domain_opt_flags
, flags
, ENC_BIG_ENDIAN
);
3170 proto_tree_add_item(opt_tree
, hf_lbmr_tnwg_opt_domain_domain_id
, tvb
, offset
+ O_LBMR_TNWG_OPT_DOMAIN_T_DOMAIN_ID
, L_LBMR_TNWG_OPT_DOMAIN_T_DOMAIN_ID
, ENC_BIG_ENDIAN
);
3171 return ((int)opt_len
);
3174 static int dissect_lbmr_tnwg_name_opt(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo _U_
, proto_tree
* tree
)
3176 proto_tree
* opt_tree
= NULL
;
3177 proto_item
* opt_item
= NULL
;
3178 uint8_t opt_len
= 0;
3179 static int * const flags
[] =
3181 &hf_lbmr_tnwg_opt_name_flags_ignore
,
3184 uint32_t name_len
= 0;
3186 opt_len
= tvb_get_uint8(tvb
, offset
+ O_LBMR_TNWG_OPT_T_LEN
);
3187 name_len
= opt_len
- L_LBMR_TNWG_OPT_T
;
3188 opt_item
= proto_tree_add_item(tree
, hf_lbmr_tnwg_opt_name
, tvb
, offset
, opt_len
, ENC_NA
);
3189 opt_tree
= proto_item_add_subtree(opt_item
, ett_lbmr_tnwg_name_opt
);
3190 proto_tree_add_item(opt_tree
, hf_lbmr_tnwg_opt_name_type
, tvb
, offset
+ O_LBMR_TNWG_OPT_T_TYPE
, L_LBMR_TNWG_OPT_T_TYPE
, ENC_BIG_ENDIAN
);
3191 proto_tree_add_item(opt_tree
, hf_lbmr_tnwg_opt_name_len
, tvb
, offset
+ O_LBMR_TNWG_OPT_T_LEN
, L_LBMR_TNWG_OPT_T_LEN
, ENC_BIG_ENDIAN
);
3192 proto_tree_add_bitmask(opt_tree
, tvb
, offset
+ O_LBMR_TNWG_OPT_T_FLAGS
, hf_lbmr_tnwg_opt_name_flags
, ett_lbmr_tnwg_name_opt_flags
, flags
, ENC_BIG_ENDIAN
);
3193 proto_tree_add_item(opt_tree
, hf_lbmr_tnwg_opt_name_name
, tvb
, offset
+ L_LBMR_TNWG_OPT_T
, name_len
, ENC_ASCII
);
3194 return ((int)opt_len
);
3197 static int dissect_lbmr_tnwg_unknown_opt(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo _U_
, proto_tree
* tree
)
3199 proto_tree
* opt_tree
= NULL
;
3200 proto_item
* opt_item
= NULL
;
3201 uint8_t opt_len
= 0;
3202 static int * const flags
[] =
3204 &hf_lbmr_tnwg_opt_flags_ignore
,
3207 uint32_t data_len
= 0;
3209 opt_len
= tvb_get_uint8(tvb
, offset
+ O_LBMR_TNWG_OPT_T_LEN
);
3210 data_len
= opt_len
- L_LBMR_TNWG_OPT_T
;
3211 opt_item
= proto_tree_add_item(tree
, hf_lbmr_tnwg_opt
, tvb
, offset
, opt_len
, ENC_NA
);
3212 opt_tree
= proto_item_add_subtree(opt_item
, ett_lbmr_tnwg_unknown_opt
);
3213 proto_tree_add_item(opt_tree
, hf_lbmr_tnwg_opt_type
, tvb
, offset
+ O_LBMR_TNWG_OPT_T_TYPE
, L_LBMR_TNWG_OPT_T_TYPE
, ENC_BIG_ENDIAN
);
3214 proto_tree_add_item(opt_tree
, hf_lbmr_tnwg_opt_len
, tvb
, offset
+ O_LBMR_TNWG_OPT_T_LEN
, L_LBMR_TNWG_OPT_T_LEN
, ENC_BIG_ENDIAN
);
3215 proto_tree_add_bitmask(opt_tree
, tvb
, offset
+ O_LBMR_TNWG_OPT_T_FLAGS
, hf_lbmr_tnwg_opt_flags
, ett_lbmr_tnwg_unknown_opt_flags
, flags
, ENC_BIG_ENDIAN
);
3216 proto_tree_add_item(opt_tree
, hf_lbmr_tnwg_opt_data
, tvb
, offset
+ L_LBMR_TNWG_OPT_T
, data_len
, ENC_NA
);
3217 return ((int)opt_len
);
3220 static int dissect_lbmr_tnwg_opts(tvbuff_t
* tvb
, int offset
, int length
, packet_info
* pinfo
, proto_tree
* tree
)
3222 int len_remaining
= length
;
3223 int curr_offset
= offset
;
3224 int dissected_len
= 0;
3228 while (len_remaining
>= L_LBMR_TNWG_OPT_T
)
3230 type
= tvb_get_uint8(tvb
, curr_offset
);
3233 case LBMR_TNWG_OPT_CTXINST_TYPE
:
3234 dissected_len
+= dissect_lbmr_tnwg_ctxinst_opt(tvb
, curr_offset
, pinfo
, tree
);
3236 case LBMR_TNWG_OPT_ADDRESS_TYPE
:
3237 dissected_len
+= dissect_lbmr_tnwg_address_opt(tvb
, curr_offset
, pinfo
, tree
);
3239 case LBMR_TNWG_OPT_DOMAIN_TYPE
:
3240 dissected_len
+= dissect_lbmr_tnwg_domain_opt(tvb
, curr_offset
, pinfo
, tree
);
3242 case LBMR_TNWG_OPT_NAME_TYPE
:
3243 dissected_len
+= dissect_lbmr_tnwg_name_opt(tvb
, curr_offset
, pinfo
, tree
);
3246 dissected_len
+= dissect_lbmr_tnwg_unknown_opt(tvb
, curr_offset
, pinfo
, tree
);
3249 len_remaining
-= dissected_len
;
3250 len_used
+= dissected_len
;
3251 curr_offset
+= dissected_len
;
3256 /*----------------------------------------------------------------------------*/
3257 /* LBMR TNWG Interest dissection functions. */
3258 /*----------------------------------------------------------------------------*/
3259 static int dissect_lbmr_tnwg_interest_rec(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo _U_
, proto_tree
* tree
)
3261 proto_tree
* rec_tree
= NULL
;
3262 proto_item
* rec_item
= NULL
;
3263 uint16_t rec_len
= 0;
3265 static int * const flags
[] =
3267 &hf_lbmr_tnwg_interest_rec_flags_pattern
,
3268 &hf_lbmr_tnwg_interest_rec_flags_cancel
,
3269 &hf_lbmr_tnwg_interest_rec_flags_refresh
,
3273 rec_len
= tvb_get_ntohs(tvb
, offset
+ O_LBMR_TNWG_INTEREST_REC_T_LEN
);
3275 rec_item
= proto_tree_add_item(tree
, hf_lbmr_tnwg_interest_rec
, tvb
, offset
, rec_len
, ENC_NA
);
3276 rec_tree
= proto_item_add_subtree(rec_item
, ett_lbmr_tnwg_interest_rec
);
3277 proto_tree_add_item(rec_tree
, hf_lbmr_tnwg_interest_rec_len
, tvb
, offset
+ O_LBMR_TNWG_INTEREST_REC_T_LEN
, L_LBMR_TNWG_INTEREST_REC_T_LEN
, ENC_BIG_ENDIAN
);
3278 if (rec_len
< L_LBMR_TNWG_INTEREST_REC_T
)
3280 /* XXX - report an error */
3281 return ((int)rec_len
);
3283 proto_tree_add_bitmask(rec_tree
, tvb
, offset
+ O_LBMR_TNWG_INTEREST_REC_T_FLAGS
, hf_lbmr_tnwg_interest_rec_flags
, ett_lbmr_tnwg_interest_rec_flags
, flags
, ENC_BIG_ENDIAN
);
3284 proto_tree_add_item(rec_tree
, hf_lbmr_tnwg_interest_rec_pattype
, tvb
, offset
+ O_LBMR_TNWG_INTEREST_REC_T_PATTYPE
, L_LBMR_TNWG_INTEREST_REC_T_PATTYPE
, ENC_BIG_ENDIAN
);
3285 proto_tree_add_item(rec_tree
, hf_lbmr_tnwg_interest_rec_domain_id
, tvb
, offset
+ O_LBMR_TNWG_INTEREST_REC_T_DOMAIN_ID
, L_LBMR_TNWG_INTEREST_REC_T_DOMAIN_ID
, ENC_BIG_ENDIAN
);
3286 string_len
= rec_len
- L_LBMR_TNWG_INTEREST_REC_T
;
3287 proto_tree_add_item(rec_tree
, hf_lbmr_tnwg_interest_rec_symbol
, tvb
, offset
+ L_LBMR_TNWG_INTEREST_REC_T
, string_len
, ENC_ASCII
);
3288 return ((int)rec_len
);
3291 static int dissect_lbmr_tnwg_interest(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo
, proto_tree
* tree
)
3293 proto_tree
* int_tree
= NULL
;
3294 proto_item
* int_item
= NULL
;
3295 uint16_t rec_count
= 0;
3296 int curr_offset
= 0;
3298 int len_remaining
= 0;
3299 int len_dissected
= 0;
3301 len_remaining
= tvb_get_ntohs(tvb
, offset
+ O_LBMR_TNWG_INTEREST_T_LEN
);
3302 rec_count
= tvb_get_ntohs(tvb
, offset
+ O_LBMR_TNWG_INTEREST_T_COUNT
);
3303 int_item
= proto_tree_add_item(tree
, hf_lbmr_tnwg_interest
, tvb
, offset
, len_remaining
, ENC_NA
);
3304 int_tree
= proto_item_add_subtree(int_item
, ett_lbmr_tnwg_interest
);
3305 proto_tree_add_item(int_tree
, hf_lbmr_tnwg_interest_len
, tvb
, offset
+ O_LBMR_TNWG_INTEREST_T_LEN
, L_LBMR_TNWG_INTEREST_T_LEN
, ENC_BIG_ENDIAN
);
3306 proto_tree_add_item(int_tree
, hf_lbmr_tnwg_interest_count
, tvb
, offset
+ O_LBMR_TNWG_INTEREST_T_COUNT
, L_LBMR_TNWG_INTEREST_T_COUNT
, ENC_BIG_ENDIAN
);
3308 curr_offset
= offset
+ L_LBMR_TNWG_INTEREST_T
;
3309 len
= L_LBMR_TNWG_INTEREST_T
;
3310 while (rec_count
> 0)
3312 len_dissected
= dissect_lbmr_tnwg_interest_rec(tvb
, curr_offset
, pinfo
, int_tree
);
3313 curr_offset
+= len_dissected
;
3314 len
+= len_dissected
;
3320 /*----------------------------------------------------------------------------*/
3321 /* LBMR TNWG ContextInfo dissection functions. */
3322 /*----------------------------------------------------------------------------*/
3323 static int dissect_lbmr_tnwg_ctxinfo(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo
, proto_tree
* tree
)
3325 proto_tree
* ctxinfo_tree
= NULL
;
3326 proto_item
* ctxinfo_item
= NULL
;
3327 static int * const flags1
[] =
3329 &hf_lbmr_tnwg_ctxinfo_flags1_query
,
3330 &hf_lbmr_tnwg_ctxinfo_flags1_tnwg_src
,
3331 &hf_lbmr_tnwg_ctxinfo_flags1_tnwg_rcv
,
3332 &hf_lbmr_tnwg_ctxinfo_flags1_proxy
,
3335 uint16_t reclen
= 0;
3336 uint16_t len_remaining
= 0;
3339 reclen
= tvb_get_ntohs(tvb
, offset
+ O_LBMR_TNWG_CTXINFO_T_LEN
);
3340 len_remaining
= reclen
;
3341 ctxinfo_item
= proto_tree_add_item(tree
, hf_lbmr_tnwg_ctxinfo
, tvb
, offset
, (int)reclen
, ENC_NA
);
3342 ctxinfo_tree
= proto_item_add_subtree(ctxinfo_item
, ett_lbmr_tnwg_ctxinfo
);
3343 proto_tree_add_item(ctxinfo_tree
, hf_lbmr_tnwg_ctxinfo_len
, tvb
, offset
+ O_LBMR_TNWG_CTXINFO_T_LEN
, L_LBMR_TNWG_CTXINFO_T_LEN
, ENC_BIG_ENDIAN
);
3344 proto_tree_add_item(ctxinfo_tree
, hf_lbmr_tnwg_ctxinfo_hop_count
, tvb
, offset
+ O_LBMR_TNWG_CTXINFO_T_HOP_COUNT
, L_LBMR_TNWG_CTXINFO_T_HOP_COUNT
, ENC_BIG_ENDIAN
);
3345 proto_tree_add_item(ctxinfo_tree
, hf_lbmr_tnwg_ctxinfo_reserved
, tvb
, offset
+ O_LBMR_TNWG_CTXINFO_T_RESERVED
, L_LBMR_TNWG_CTXINFO_T_RESERVED
, ENC_BIG_ENDIAN
);
3346 proto_tree_add_bitmask(ctxinfo_tree
, tvb
, offset
+ O_LBMR_TNWG_CTXINFO_T_FLAGS1
, hf_lbmr_tnwg_ctxinfo_flags1
, ett_lbmr_tnwg_ctxinfo_flags1
, flags1
, ENC_BIG_ENDIAN
);
3347 proto_tree_add_item(ctxinfo_tree
, hf_lbmr_tnwg_ctxinfo_flags2
, tvb
, offset
+ O_LBMR_TNWG_CTXINFO_T_FLAGS2
, L_LBMR_TNWG_CTXINFO_T_FLAGS2
, ENC_BIG_ENDIAN
);
3348 offset
+= L_LBMR_TNWG_CTXINFO_T
;
3349 len_remaining
-= L_LBMR_TNWG_CTXINFO_T
;
3350 len_used
= L_LBMR_TNWG_CTXINFO_T
;
3351 if (len_remaining
>= L_LBMR_TNWG_OPT_T
)
3353 len_used
+= dissect_lbmr_tnwg_opts(tvb
, offset
, len_remaining
, pinfo
, ctxinfo_tree
);
3358 /*----------------------------------------------------------------------------*/
3359 /* LBMR TNWG TopicRes Request dissection functions. */
3360 /*----------------------------------------------------------------------------*/
3361 static int dissect_lbmr_tnwg_trreq(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo
, proto_tree
* tree
)
3363 proto_tree
* trreq_tree
= NULL
;
3364 proto_item
* trreq_item
= NULL
;
3365 uint16_t reclen
= 0;
3366 uint16_t len_remaining
= 0;
3369 reclen
= tvb_get_ntohs(tvb
, offset
+ O_LBMR_TNWG_TRREQ_T_LEN
);
3370 len_remaining
= reclen
;
3372 trreq_item
= proto_tree_add_item(tree
, hf_lbmr_tnwg_trreq
, tvb
, offset
, (int)reclen
, ENC_NA
);
3373 trreq_tree
= proto_item_add_subtree(trreq_item
, ett_lbmr_tnwg_trreq
);
3374 proto_tree_add_item(trreq_tree
, hf_lbmr_tnwg_trreq_len
, tvb
, offset
+ O_LBMR_TNWG_TRREQ_T_LEN
, L_LBMR_TNWG_TRREQ_T_LEN
, ENC_BIG_ENDIAN
);
3376 offset
+= L_LBMR_TNWG_TRREQ_T
;
3377 len_remaining
-= L_LBMR_TNWG_TRREQ_T
;
3378 len_used
= L_LBMR_TNWG_TRREQ_T
;
3379 if (len_remaining
>= L_LBMR_TNWG_OPT_T
)
3381 len_used
+= dissect_lbmr_tnwg_opts(tvb
, offset
, len_remaining
, pinfo
, trreq_tree
);
3386 /*----------------------------------------------------------------------------*/
3387 /* LBMR TNWG dissection functions. */
3388 /*----------------------------------------------------------------------------*/
3389 static int dissect_lbmr_tnwg(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo
, proto_tree
* tree
)
3392 int curr_offset
= 0;
3393 int len_dissected
= 0;
3394 proto_item
* type_item
= NULL
;
3396 type
= tvb_get_ntohs(tvb
, offset
+ O_LBMR_TNWG_T_TYPE
);
3397 proto_tree_add_item(tree
, hf_lbmr_tnwg_len
, tvb
, offset
+ O_LBMR_TNWG_T_LEN
, L_LBMR_TNWG_T_LEN
, ENC_BIG_ENDIAN
);
3398 type_item
= proto_tree_add_item(tree
, hf_lbmr_tnwg_type
, tvb
, offset
+ O_LBMR_TNWG_T_TYPE
, L_LBMR_TNWG_T_TYPE
, ENC_BIG_ENDIAN
);
3399 proto_tree_add_item(tree
, hf_lbmr_tnwg_reserved
, tvb
, offset
+ O_LBMR_TNWG_T_RESERVED
, L_LBMR_TNWG_T_RESERVED
, ENC_BIG_ENDIAN
);
3400 len_dissected
= L_LBMR_TNWG_T
;
3401 curr_offset
= offset
+ L_LBMR_TNWG_T
;
3404 case LBMR_TNWG_TYPE_INTEREST
:
3405 len_dissected
+= dissect_lbmr_tnwg_interest(tvb
, curr_offset
, pinfo
, tree
);
3407 case LBMR_TNWG_TYPE_CTXINFO
:
3408 len_dissected
+= dissect_lbmr_tnwg_ctxinfo(tvb
, curr_offset
, pinfo
, tree
);
3410 case LBMR_TNWG_TYPE_TRREQ
:
3411 len_dissected
+= dissect_lbmr_tnwg_trreq(tvb
, curr_offset
, pinfo
, tree
);
3414 expert_add_info_format(pinfo
, type_item
, &ei_lbmr_analysis_invalid_value
, "Unknown LBMR TNWG type 0x%04x", type
);
3417 return ((int)len_dissected
);
3420 /*----------------------------------------------------------------------------*/
3421 /* LBMR Topic Management dissection functions. */
3422 /*----------------------------------------------------------------------------*/
3423 static int dissect_lbmr_tmr(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo _U_
, proto_tree
* tree
)
3426 int name_offset
= 0;
3428 proto_item
* ti
= NULL
;
3429 proto_tree
* tinfo_tree
= NULL
;
3430 static int * const flags
[] =
3432 &hf_lbmr_tmr_flags_response
,
3433 &hf_lbmr_tmr_flags_wildcard_pcre
,
3434 &hf_lbmr_tmr_flags_wildcard_regex
,
3440 const char * info_string
= "";
3442 tmr_len
= tvb_get_ntohs(tvb
, offset
+ O_LBMR_TMR_T_LEN
);
3443 tmr_type
= tvb_get_uint8(tvb
, offset
+ O_LBMR_TMR_T_TYPE
);
3444 tmr_flags
= tvb_get_uint8(tvb
, offset
+ O_LBMR_TMR_T_FLAGS
);
3445 name_offset
= offset
+ L_LBMR_TMR_T
;
3447 name
= tvb_get_stringz_enc(wmem_packet_scope(), tvb
, name_offset
, &namelen
, ENC_ASCII
);
3451 case LBMR_TMR_LEAVE_TOPIC
:
3454 case LBMR_TMR_TOPIC_USE
:
3455 if (tmr_flags
& LBMR_TMR_FLAG_RESPONSE
)
3457 info_string
= " Response";
3461 info_string
= " Query";
3465 ti
= proto_tree_add_none_format(tree
, hf_lbmr_tmr
, tvb
, offset
, tmr_len
, "%s: %s%s, Length %" PRIu16
,
3466 name
, val_to_str(tmr_type
, lbmr_tmr_type
, "Unknown (0x%02x)"), info_string
, tmr_len
);
3467 tinfo_tree
= proto_item_add_subtree(ti
, ett_lbmr_tmr
);
3468 proto_tree_add_item(tinfo_tree
, hf_lbmr_tmr_len
, tvb
, offset
+ O_LBMR_TMR_T_LEN
, L_LBMR_TMR_T_LEN
, ENC_BIG_ENDIAN
);
3469 proto_tree_add_item(tinfo_tree
, hf_lbmr_tmr_type
, tvb
, offset
+ O_LBMR_TMR_T_TYPE
, L_LBMR_TMR_T_TYPE
, ENC_BIG_ENDIAN
);
3470 proto_tree_add_bitmask(tinfo_tree
, tvb
, offset
+ O_LBMR_TMR_T_FLAGS
, hf_lbmr_tmr_flags
, ett_lbmr_tmr_flags
, flags
, ENC_BIG_ENDIAN
);
3471 proto_tree_add_item(tinfo_tree
, hf_lbmr_tmr_name
, tvb
, name_offset
, namelen
, ENC_ASCII
);
3472 return ((int) tmr_len
);
3475 static int dissect_lbmr_tmb(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo
, proto_tree
* tree
)
3478 proto_tree
* tmb_tree
= NULL
;
3479 proto_item
* ti
= NULL
;
3480 proto_tree
* tmr_tree
= NULL
;
3481 proto_item
* tmr_ti
= NULL
;
3486 tmrs
= tvb_get_ntohs(tvb
, offset
+ O_LBMR_TMB_T_TMRS
);
3487 ti
= proto_tree_add_item(tree
, hf_lbmr_tmb
, tvb
, offset
, -1, ENC_NA
);
3488 tmb_tree
= proto_item_add_subtree(ti
, ett_lbmr_tmb
);
3489 proto_tree_add_item(tmb_tree
, hf_lbmr_tmb_len
, tvb
, offset
+ O_LBMR_TMB_T_LEN
, L_LBMR_TMB_T_LEN
, ENC_BIG_ENDIAN
);
3490 proto_tree_add_item(tmb_tree
, hf_lbmr_tmb_tmrs
, tvb
, offset
+ O_LBMR_TMB_T_TMRS
, L_LBMR_TMB_T_TMRS
, ENC_BIG_ENDIAN
);
3491 tmr_ti
= proto_tree_add_item(tmb_tree
, hf_lbmr_tmb_tmr_list
, tvb
, offset
+ L_LBMR_TMB_T
, -1, ENC_NA
);
3492 tmr_tree
= proto_item_add_subtree(tmr_ti
, ett_lbmr_tmrs
);
3494 offset
+= L_LBMR_TMB_T
;
3495 len_dissected
= L_LBMR_TMB_T
;
3496 while (tmr_count
< tmrs
)
3498 tmr_len
= dissect_lbmr_tmr(tvb
, offset
, pinfo
, tmr_tree
);
3499 len_dissected
+= tmr_len
;
3503 return (len_dissected
);
3506 /*----------------------------------------------------------------------------*/
3507 /* LBMR Topic Query Record dissection functions. */
3508 /*----------------------------------------------------------------------------*/
3509 static int dissect_lbmr_tqr(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo _U_
, proto_tree
* tree
, bool wildcard_tqr
, lbmr_contents_t
* contents
)
3512 unsigned reclen
= 0;
3514 uint8_t pattern_type
;
3515 proto_item
* tqr_item
= NULL
;
3516 proto_tree
* tqr_tree
= NULL
;
3517 int name_offset
= offset
;
3521 pattern_type
= tvb_get_uint8(tvb
, offset
);
3525 name
= tvb_get_stringz_enc(wmem_packet_scope(), tvb
, name_offset
, &namelen
, ENC_ASCII
);
3530 tqr_item
= proto_tree_add_none_format(tree
, hf_lbmr_tqr
, tvb
, offset
, reclen
, "Wildcard TQR: %s", name
);
3534 tqr_item
= proto_tree_add_none_format(tree
, hf_lbmr_tqr
, tvb
, offset
, reclen
, "TQR: %s", name
);
3536 tqr_tree
= proto_item_add_subtree(tqr_item
, ett_lbmr_tqr
);
3539 proto_tree_add_item(tqr_tree
, hf_lbmr_tqr_pattern_type
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3540 proto_tree_add_item(tqr_tree
, hf_lbmr_tqr_pattern
, tvb
, offset
, namelen
, ENC_ASCII
);
3541 add_contents_wctqr(contents
, pattern_type
, name
);
3545 proto_tree_add_item(tqr_tree
, hf_lbmr_tqr_name
, tvb
, offset
, namelen
, ENC_ASCII
);
3546 add_contents_tqr(contents
, name
);
3551 static int dissect_lbmr_tqrs(tvbuff_t
* tvb
, int offset
, uint8_t tqr_count
, packet_info
* pinfo
, proto_tree
* tree
,
3552 bool wildcard_tqr
, lbmr_contents_t
* contents
)
3554 int start_offset
= 0;
3556 proto_tree
* tqrs_tree
= NULL
;
3557 proto_item
* ti
= NULL
;
3560 start_offset
= offset
;
3563 ti
= proto_tree_add_none_format(tree
, hf_lbmr_tqrs
, tvb
, start_offset
, -1, "Wildcard TQRs");
3567 ti
= proto_tree_add_none_format(tree
, hf_lbmr_tqrs
, tvb
, start_offset
, -1, "TQRs");
3569 tqrs_tree
= proto_item_add_subtree(ti
, ett_lbmr_tqrs
);
3570 while (tqr_count
-- > 0)
3572 tqr_len
= dissect_lbmr_tqr(tvb
, offset
, pinfo
, tqrs_tree
, wildcard_tqr
, contents
);
3576 proto_item_set_len(ti
, len
);
3580 /*----------------------------------------------------------------------------*/
3581 /* LBMR Topic Information Record dissection functions. */
3582 /*----------------------------------------------------------------------------*/
3583 static int dissect_lbmr_tir_options(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo
, proto_tree
* tree
)
3585 uint8_t opt_type
= 0;
3586 uint8_t opt_len
= 0;
3587 int opt_total_len
= 0;
3588 int opt_remaining_len
= 0;
3589 int curr_offset
= offset
;
3590 proto_item
* oi
= NULL
;
3591 proto_tree
* otree
= NULL
;
3592 proto_item
* optlen_item
= NULL
;
3593 proto_tree
* optlen_tree
= NULL
;
3594 static int * const opt_ume_flags
[] =
3596 &hf_lbmr_topt_ume_flags_ignore
,
3597 &hf_lbmr_topt_ume_flags_latejoin
,
3598 &hf_lbmr_topt_ume_flags_store
,
3599 &hf_lbmr_topt_ume_flags_qccap
,
3600 &hf_lbmr_topt_ume_flags_acktosrc
,
3603 static int * const opt_ume_store_flags
[] =
3605 &hf_lbmr_topt_ume_store_flags_ignore
,
3608 static int * const opt_ume_store_group_flags
[] =
3610 &hf_lbmr_topt_ume_store_group_flags_ignore
,
3613 static int * const opt_latejoin_flags
[] =
3615 &hf_lbmr_topt_latejoin_flags_ignore
,
3616 &hf_lbmr_topt_latejoin_flags_acktosrc
,
3619 static int * const opt_umq_rcridx_flags
[] =
3621 &hf_lbmr_topt_umq_rcridx_flags_ignore
,
3624 static int * const opt_umq_qinfo_flags
[] =
3626 &hf_lbmr_topt_umq_qinfo_flags_ignore
,
3627 &hf_lbmr_topt_umq_qinfo_flags_queue
,
3628 &hf_lbmr_topt_umq_qinfo_flags_rcvlisten
,
3629 &hf_lbmr_topt_umq_qinfo_flags_control
,
3630 &hf_lbmr_topt_umq_qinfo_flags_srcrcvlisten
,
3631 &hf_lbmr_topt_umq_qinfo_flags_participants_only
,
3634 static int * const opt_cost_flags
[] =
3636 &hf_lbmr_topt_cost_flags_ignore
,
3639 static int * const opt_otid_flags
[] =
3641 &hf_lbmr_topt_otid_flags_ignore
,
3644 static int * const opt_ctxinst_flags
[] =
3646 &hf_lbmr_topt_ctxinst_flags_ignore
,
3649 static int * const opt_ctxinsts_flags
[] =
3651 &hf_lbmr_topt_ctxinsts_flags_ignore
,
3654 static int * const opt_ulb_flags
[] =
3656 &hf_lbmr_topt_ulb_flags_ignore
,
3659 static int * const opt_ctxinstq_flags
[] =
3661 &hf_lbmr_topt_ctxinstq_flags_ignore
,
3664 static int * const opt_domain_id_flags
[] =
3666 &hf_lbmr_topt_domain_id_flags_ignore
,
3669 static int * const opt_exfunc_flags
[] =
3671 &hf_lbmr_topt_exfunc_flags_ignore
,
3674 static int * const opt_exfunc_functionality_flags
[] =
3676 &hf_lbmr_topt_exfunc_functionality_flags_ulb
,
3677 &hf_lbmr_topt_exfunc_functionality_flags_umq
,
3678 &hf_lbmr_topt_exfunc_functionality_flags_ume
,
3679 &hf_lbmr_topt_exfunc_functionality_flags_lj
,
3684 opt_total_len
= (int)tvb_get_ntohs(tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_LEN_T_TOTAL_LEN
);
3685 opt_remaining_len
= opt_total_len
;
3687 oi
= proto_tree_add_none_format(tree
, hf_lbmr_topts
, tvb
, curr_offset
, opt_total_len
, "Options: %d bytes", opt_total_len
);
3688 otree
= proto_item_add_subtree(oi
, ett_lbmr_topts
);
3689 optlen_item
= proto_tree_add_item(otree
, hf_lbmr_topt_len
, tvb
, curr_offset
, L_LBMR_TOPIC_OPT_LEN_T
, ENC_NA
);
3690 optlen_tree
= proto_item_add_subtree(optlen_item
, ett_lbmr_topt_len
);
3691 proto_tree_add_item(optlen_tree
, hf_lbmr_topt_len_type
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_LEN_T_TYPE
, L_LBMR_TOPIC_OPT_LEN_T_TYPE
, ENC_BIG_ENDIAN
);
3692 proto_tree_add_item(optlen_tree
, hf_lbmr_topt_len_len
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_LEN_T_LEN
, L_LBMR_TOPIC_OPT_LEN_T_LEN
, ENC_BIG_ENDIAN
);
3693 proto_tree_add_item(optlen_tree
, hf_lbmr_topt_len_total_len
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_LEN_T_TOTAL_LEN
, L_LBMR_TOPIC_OPT_LEN_T_TOTAL_LEN
, ENC_BIG_ENDIAN
);
3694 len
= L_LBMR_TOPIC_OPT_LEN_T
;
3695 curr_offset
+= L_LBMR_TOPIC_OPT_LEN_T
;
3696 opt_remaining_len
-= L_LBMR_TOPIC_OPT_LEN_T
;
3697 while (opt_remaining_len
> 0)
3699 proto_item
* opt_item
= NULL
;
3700 proto_tree
* opt_tree
= NULL
;
3701 proto_item
* ei_item
= NULL
;
3704 opt_type
= tvb_get_uint8(tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_T_TYPE
);
3705 opt_len
= tvb_get_uint8(tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_T_LEN
);
3708 opt_item
= proto_tree_add_item(otree
, hf_lbmr_topt_unknown
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_T_TYPE
, opt_len
, ENC_NA
);
3709 opt_tree
= proto_item_add_subtree(opt_item
, ett_lbmr_topt_unknown
);
3710 proto_tree_add_item(opt_tree
, hf_lbmr_topt_unknown_type
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_T_TYPE
, L_LBMR_TOPIC_OPT_T_TYPE
, ENC_BIG_ENDIAN
);
3711 ei_item
= proto_tree_add_item(opt_tree
, hf_lbmr_topt_unknown_len
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_T_LEN
, L_LBMR_TOPIC_OPT_T_LEN
, ENC_BIG_ENDIAN
);
3712 proto_tree_add_item(opt_tree
, hf_lbmr_topt_unknown_flags
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_T_FLAGS
, L_LBMR_TOPIC_OPT_T_FLAGS
, ENC_BIG_ENDIAN
);
3713 if (((int) opt_len
) > L_LBMR_TOPIC_OPT_T
)
3715 proto_tree_add_item(opt_tree
, hf_lbmr_topt_unknown_data
, tvb
, curr_offset
+ L_LBMR_TOPIC_OPT_T
, ((int) opt_len
) - L_LBMR_TOPIC_OPT_T
, ENC_NA
);
3717 expert_add_info_format(pinfo
, ei_item
, &ei_lbmr_analysis_zero_len_option
, "Zero-length LBMR option");
3722 case LBMR_TOPIC_OPT_UME_TYPE
:
3723 opt_item
= proto_tree_add_item(otree
, hf_lbmr_topt_ume
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_T_TYPE
, opt_len
, ENC_NA
);
3724 opt_tree
= proto_item_add_subtree(opt_item
, ett_lbmr_topt_ume
);
3725 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ume_type
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UME_T_TYPE
, L_LBMR_TOPIC_OPT_UME_T_TYPE
, ENC_BIG_ENDIAN
);
3726 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ume_len
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UME_T_LEN
, L_LBMR_TOPIC_OPT_UME_T_LEN
, ENC_BIG_ENDIAN
);
3727 proto_tree_add_bitmask(opt_tree
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UME_T_FLAGS
, hf_lbmr_topt_ume_flags
, ett_lbmr_topt_ume_flags
, opt_ume_flags
, ENC_BIG_ENDIAN
);
3728 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ume_store_tcp_port
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UME_T_STORE_TCP_PORT
, L_LBMR_TOPIC_OPT_UME_T_STORE_TCP_PORT
, ENC_BIG_ENDIAN
);
3729 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ume_src_tcp_port
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UME_T_SRC_TCP_PORT
, L_LBMR_TOPIC_OPT_UME_T_SRC_TCP_PORT
, ENC_BIG_ENDIAN
);
3730 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ume_store_tcp_addr
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UME_T_STORE_TCP_ADDR
, L_LBMR_TOPIC_OPT_UME_T_STORE_TCP_ADDR
, ENC_BIG_ENDIAN
);
3731 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ume_src_tcp_addr
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UME_T_SRC_TCP_ADDR
, L_LBMR_TOPIC_OPT_UME_T_SRC_TCP_ADDR
, ENC_BIG_ENDIAN
);
3732 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ume_src_reg_id
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UME_T_SRC_REG_ID
, L_LBMR_TOPIC_OPT_UME_T_SRC_REG_ID
, ENC_BIG_ENDIAN
);
3733 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ume_transport_idx
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UME_T_TRANSPORT_IDX
, L_LBMR_TOPIC_OPT_UME_T_TRANSPORT_IDX
, ENC_BIG_ENDIAN
);
3734 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ume_high_seqnum
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UME_T_HIGH_SEQNUM
, L_LBMR_TOPIC_OPT_UME_T_HIGH_SEQNUM
, ENC_BIG_ENDIAN
);
3735 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ume_low_seqnum
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UME_T_LOW_SEQNUM
, L_LBMR_TOPIC_OPT_UME_T_LOW_SEQNUM
, ENC_BIG_ENDIAN
);
3737 case LBMR_TOPIC_OPT_UME_STORE_TYPE
:
3738 opt_item
= proto_tree_add_item(otree
, hf_lbmr_topt_ume_store
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_T_TYPE
, opt_len
, ENC_NA
);
3739 opt_tree
= proto_item_add_subtree(opt_item
, ett_lbmr_topt_ume_store
);
3740 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ume_store_type
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UME_STORE_T_TYPE
, L_LBMR_TOPIC_OPT_UME_STORE_T_TYPE
, ENC_BIG_ENDIAN
);
3741 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ume_store_len
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UME_STORE_T_LEN
, L_LBMR_TOPIC_OPT_UME_STORE_T_LEN
, ENC_BIG_ENDIAN
);
3742 proto_tree_add_bitmask(opt_tree
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UME_STORE_T_FLAGS
, hf_lbmr_topt_ume_store_flags
, ett_lbmr_topt_ume_store_flags
, opt_ume_store_flags
, ENC_BIG_ENDIAN
);
3743 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ume_store_grp_idx
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UME_STORE_T_GRP_IDX
, L_LBMR_TOPIC_OPT_UME_STORE_T_GRP_IDX
, ENC_BIG_ENDIAN
);
3744 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ume_store_store_tcp_port
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UME_STORE_T_STORE_TCP_PORT
, L_LBMR_TOPIC_OPT_UME_STORE_T_STORE_TCP_PORT
, ENC_BIG_ENDIAN
);
3745 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ume_store_store_idx
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UME_STORE_T_STORE_IDX
, L_LBMR_TOPIC_OPT_UME_STORE_T_STORE_IDX
, ENC_BIG_ENDIAN
);
3746 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ume_store_store_ip_addr
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UME_STORE_T_STORE_IP_ADDR
, L_LBMR_TOPIC_OPT_UME_STORE_T_STORE_IP_ADDR
, ENC_BIG_ENDIAN
);
3747 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ume_store_src_reg_id
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UME_STORE_T_SRC_REG_ID
, L_LBMR_TOPIC_OPT_UME_STORE_T_SRC_REG_ID
, ENC_BIG_ENDIAN
);
3749 case LBMR_TOPIC_OPT_UME_STORE_GROUP_TYPE
:
3750 opt_item
= proto_tree_add_item(otree
, hf_lbmr_topt_ume_store_group
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_T_TYPE
, opt_len
, ENC_NA
);
3751 opt_tree
= proto_item_add_subtree(opt_item
, ett_lbmr_topt_ume_store_group
);
3752 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ume_store_group_type
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_TYPE
, L_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_TYPE
, ENC_BIG_ENDIAN
);
3753 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ume_store_group_len
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_LEN
, L_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_LEN
, ENC_BIG_ENDIAN
);
3754 proto_tree_add_bitmask(opt_tree
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_FLAGS
, hf_lbmr_topt_ume_store_group_flags
, ett_lbmr_topt_ume_store_group_flags
, opt_ume_store_group_flags
, ENC_BIG_ENDIAN
);
3755 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ume_store_group_grp_idx
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_GRP_IDX
, L_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_GRP_IDX
, ENC_BIG_ENDIAN
);
3756 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ume_store_group_grp_sz
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_GRP_SZ
, L_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_GRP_SZ
, ENC_BIG_ENDIAN
);
3757 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ume_store_group_reserved
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_RESERVED
, L_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_RESERVED
, ENC_BIG_ENDIAN
);
3759 case LBMR_TOPIC_OPT_LATEJOIN_TYPE
:
3760 opt_item
= proto_tree_add_item(otree
, hf_lbmr_topt_latejoin
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_T_TYPE
, opt_len
, ENC_NA
);
3761 opt_tree
= proto_item_add_subtree(opt_item
, ett_lbmr_topt_latejoin
);
3762 proto_tree_add_item(opt_tree
, hf_lbmr_topt_latejoin_type
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_LATEJOIN_T_TYPE
, L_LBMR_TOPIC_OPT_LATEJOIN_T_TYPE
, ENC_BIG_ENDIAN
);
3763 proto_tree_add_item(opt_tree
, hf_lbmr_topt_latejoin_len
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_LATEJOIN_T_LEN
, L_LBMR_TOPIC_OPT_LATEJOIN_T_LEN
, ENC_BIG_ENDIAN
);
3764 proto_tree_add_bitmask(opt_tree
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_LATEJOIN_T_FLAGS
, hf_lbmr_topt_latejoin_flags
, ett_lbmr_topt_latejoin_flags
, opt_latejoin_flags
, ENC_BIG_ENDIAN
);
3765 proto_tree_add_item(opt_tree
, hf_lbmr_topt_latejoin_src_tcp_port
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_LATEJOIN_T_SRC_TCP_PORT
, L_LBMR_TOPIC_OPT_LATEJOIN_T_SRC_TCP_PORT
, ENC_BIG_ENDIAN
);
3766 proto_tree_add_item(opt_tree
, hf_lbmr_topt_latejoin_reserved
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_LATEJOIN_T_RESERVED
, L_LBMR_TOPIC_OPT_LATEJOIN_T_RESERVED
, ENC_BIG_ENDIAN
);
3767 proto_tree_add_item(opt_tree
, hf_lbmr_topt_latejoin_src_ip_addr
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_LATEJOIN_T_SRC_IP_ADDR
, L_LBMR_TOPIC_OPT_LATEJOIN_T_SRC_IP_ADDR
, ENC_BIG_ENDIAN
);
3768 proto_tree_add_item(opt_tree
, hf_lbmr_topt_latejoin_transport_idx
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_LATEJOIN_T_TRANSPORT_IDX
, L_LBMR_TOPIC_OPT_LATEJOIN_T_TRANSPORT_IDX
, ENC_BIG_ENDIAN
);
3769 proto_tree_add_item(opt_tree
, hf_lbmr_topt_latejoin_high_seqnum
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_LATEJOIN_T_HIGH_SEQNUM
, L_LBMR_TOPIC_OPT_LATEJOIN_T_HIGH_SEQNUM
, ENC_BIG_ENDIAN
);
3770 proto_tree_add_item(opt_tree
, hf_lbmr_topt_latejoin_low_seqnum
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_LATEJOIN_T_LOW_SEQNUM
, L_LBMR_TOPIC_OPT_LATEJOIN_T_LOW_SEQNUM
, ENC_BIG_ENDIAN
);
3772 case LBMR_TOPIC_OPT_UMQ_RCRIDX_TYPE
:
3773 opt_item
= proto_tree_add_item(otree
, hf_lbmr_topt_umq_rcridx
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_T_TYPE
, opt_len
, ENC_NA
);
3774 opt_tree
= proto_item_add_subtree(opt_item
, ett_lbmr_topt_umq_rcridx
);
3775 proto_tree_add_item(opt_tree
, hf_lbmr_topt_umq_rcridx_type
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UMQ_RCRIDX_T_TYPE
, L_LBMR_TOPIC_OPT_UMQ_RCRIDX_T_TYPE
, ENC_BIG_ENDIAN
);
3776 proto_tree_add_item(opt_tree
, hf_lbmr_topt_umq_rcridx_len
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UMQ_RCRIDX_T_LEN
, L_LBMR_TOPIC_OPT_UMQ_RCRIDX_T_LEN
, ENC_BIG_ENDIAN
);
3777 proto_tree_add_bitmask(opt_tree
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UMQ_RCRIDX_T_FLAGS
, hf_lbmr_topt_umq_rcridx_flags
, ett_lbmr_topt_umq_rcridx_flags
, opt_umq_rcridx_flags
, ENC_BIG_ENDIAN
);
3778 proto_tree_add_item(opt_tree
, hf_lbmr_topt_umq_rcridx_rcr_idx
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_UMQ_RCRIDX_T_RCR_IDX
, L_LBMR_TOPIC_OPT_UMQ_RCRIDX_T_RCR_IDX
, ENC_BIG_ENDIAN
);
3780 case LBMR_TOPIC_OPT_UMQ_QINFO_TYPE
:
3781 opt_item
= proto_tree_add_item(otree
, hf_lbmr_topt_umq_qinfo
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_T_TYPE
, opt_len
, ENC_NA
);
3782 opt_tree
= proto_item_add_subtree(opt_item
, ett_lbmr_topt_umq_qinfo
);
3783 proto_tree_add_item(opt_tree
, hf_lbmr_topt_umq_qinfo_type
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_T_TYPE
, L_LBMR_TOPIC_OPT_T_TYPE
, ENC_BIG_ENDIAN
);
3784 proto_tree_add_item(opt_tree
, hf_lbmr_topt_umq_qinfo_len
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_T_LEN
, L_LBMR_TOPIC_OPT_T_LEN
, ENC_BIG_ENDIAN
);
3785 qname_len
= opt_len
- L_LBMR_TOPIC_OPT_T
;
3786 proto_tree_add_bitmask(opt_tree
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_T_FLAGS
, hf_lbmr_topt_umq_qinfo_flags
, ett_lbmr_topt_umq_qinfo_flags
, opt_umq_qinfo_flags
, ENC_BIG_ENDIAN
);
3787 proto_tree_add_item(opt_tree
, hf_lbmr_topt_umq_qinfo_queue
, tvb
, curr_offset
+ L_LBMR_TOPIC_OPT_T
, qname_len
, ENC_ASCII
);
3789 case LBMR_TOPIC_OPT_COST_TYPE
:
3790 opt_item
= proto_tree_add_item(otree
, hf_lbmr_topt_cost
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_T_TYPE
, opt_len
, ENC_NA
);
3791 opt_tree
= proto_item_add_subtree(opt_item
, ett_lbmr_topt_cost
);
3792 proto_tree_add_item(opt_tree
, hf_lbmr_topt_cost_type
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_COST_T_TYPE
, L_LBMR_TOPIC_OPT_COST_T_TYPE
, ENC_BIG_ENDIAN
);
3793 proto_tree_add_item(opt_tree
, hf_lbmr_topt_cost_len
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_COST_T_LEN
, L_LBMR_TOPIC_OPT_COST_T_LEN
, ENC_BIG_ENDIAN
);
3794 proto_tree_add_bitmask(opt_tree
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_COST_T_FLAGS
, hf_lbmr_topt_cost_flags
, ett_lbmr_topt_cost_flags
, opt_cost_flags
, ENC_BIG_ENDIAN
);
3795 proto_tree_add_item(opt_tree
, hf_lbmr_topt_cost_hop_count
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_COST_T_HOP_COUNT
, L_LBMR_TOPIC_OPT_COST_T_HOP_COUNT
, ENC_BIG_ENDIAN
);
3796 proto_tree_add_item(opt_tree
, hf_lbmr_topt_cost_cost
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_COST_T_COST
, L_LBMR_TOPIC_OPT_COST_T_COST
, ENC_BIG_ENDIAN
);
3798 case LBMR_TOPIC_OPT_OTID_TYPE
:
3799 opt_item
= proto_tree_add_item(otree
, hf_lbmr_topt_otid
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_T_TYPE
, opt_len
, ENC_NA
);
3800 opt_tree
= proto_item_add_subtree(opt_item
, ett_lbmr_topt_otid
);
3801 proto_tree_add_item(opt_tree
, hf_lbmr_topt_otid_type
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_OTID_T_TYPE
, L_LBMR_TOPIC_OPT_OTID_T_TYPE
, ENC_BIG_ENDIAN
);
3802 proto_tree_add_item(opt_tree
, hf_lbmr_topt_otid_len
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_OTID_T_LEN
, L_LBMR_TOPIC_OPT_OTID_T_LEN
, ENC_BIG_ENDIAN
);
3803 proto_tree_add_bitmask(opt_tree
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_OTID_T_FLAGS
, hf_lbmr_topt_otid_flags
, ett_lbmr_topt_otid_flags
, opt_otid_flags
, ENC_BIG_ENDIAN
);
3804 proto_tree_add_item(opt_tree
, hf_lbmr_topt_otid_originating_transport
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_OTID_T_ORIGINATING_TRANSPORT
, L_LBMR_TOPIC_OPT_OTID_T_ORIGINATING_TRANSPORT
, ENC_NA
);
3806 case LBMR_TOPIC_OPT_CTXINST_TYPE
:
3807 opt_item
= proto_tree_add_item(otree
, hf_lbmr_topt_ctxinst
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_T_TYPE
, opt_len
, ENC_NA
);
3808 opt_tree
= proto_item_add_subtree(opt_item
, ett_lbmr_topt_ctxinst
);
3809 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ctxinst_type
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_CTXINST_T_TYPE
, L_LBMR_TOPIC_OPT_CTXINST_T_TYPE
, ENC_BIG_ENDIAN
);
3810 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ctxinst_len
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_CTXINST_T_LEN
, L_LBMR_TOPIC_OPT_CTXINST_T_LEN
, ENC_BIG_ENDIAN
);
3811 proto_tree_add_bitmask(opt_tree
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_CTXINST_T_FLAGS
, hf_lbmr_topt_ctxinst_flags
, ett_lbmr_topt_ctxinst_flags
, opt_ctxinst_flags
, ENC_BIG_ENDIAN
);
3812 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ctxinst_res
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_CTXINST_T_RES
, L_LBMR_TOPIC_OPT_CTXINST_T_RES
, ENC_BIG_ENDIAN
);
3813 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ctxinst_ctxinst
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_CTXINST_T_CTXINST
, L_LBMR_TOPIC_OPT_CTXINST_T_CTXINST
, ENC_NA
);
3815 case LBMR_TOPIC_OPT_CTXINSTS_TYPE
:
3816 opt_item
= proto_tree_add_item(otree
, hf_lbmr_topt_ctxinsts
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_T_TYPE
, opt_len
, ENC_NA
);
3817 opt_tree
= proto_item_add_subtree(opt_item
, ett_lbmr_topt_ctxinsts
);
3818 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ctxinsts_type
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_CTXINSTS_T_TYPE
, L_LBMR_TOPIC_OPT_CTXINSTS_T_TYPE
, ENC_BIG_ENDIAN
);
3819 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ctxinsts_len
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_CTXINSTS_T_LEN
, L_LBMR_TOPIC_OPT_CTXINSTS_T_LEN
, ENC_BIG_ENDIAN
);
3820 proto_tree_add_bitmask(opt_tree
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_CTXINSTS_T_FLAGS
, hf_lbmr_topt_ctxinsts_flags
, ett_lbmr_topt_ctxinsts_flags
, opt_ctxinsts_flags
, ENC_BIG_ENDIAN
);
3821 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ctxinsts_idx
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_CTXINSTS_T_IDX
, L_LBMR_TOPIC_OPT_CTXINSTS_T_IDX
, ENC_BIG_ENDIAN
);
3822 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ctxinsts_ctxinst
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_CTXINSTS_T_CTXINST
, L_LBMR_TOPIC_OPT_CTXINSTS_T_CTXINST
, ENC_NA
);
3824 case LBMR_TOPIC_OPT_ULB_TYPE
:
3825 opt_item
= proto_tree_add_item(otree
, hf_lbmr_topt_ulb
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_T_TYPE
, opt_len
, ENC_NA
);
3826 opt_tree
= proto_item_add_subtree(opt_item
, ett_lbmr_topt_ulb
);
3827 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ulb_type
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_ULB_T_TYPE
, L_LBMR_TOPIC_OPT_ULB_T_TYPE
, ENC_BIG_ENDIAN
);
3828 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ulb_len
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_ULB_T_LEN
, L_LBMR_TOPIC_OPT_ULB_T_LEN
, ENC_BIG_ENDIAN
);
3829 proto_tree_add_bitmask(opt_tree
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_ULB_T_FLAGS
, hf_lbmr_topt_ulb_flags
, ett_lbmr_topt_ulb_flags
, opt_ulb_flags
, ENC_BIG_ENDIAN
);
3830 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ulb_queue_id
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_ULB_T_QUEUE_ID
, L_LBMR_TOPIC_OPT_ULB_T_QUEUE_ID
, ENC_BIG_ENDIAN
);
3831 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ulb_regid
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_ULB_T_REGID
, L_LBMR_TOPIC_OPT_ULB_T_REGID
, ENC_BIG_ENDIAN
);
3832 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ulb_ulb_src_id
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_ULB_T_ULB_SRC_ID
, L_LBMR_TOPIC_OPT_ULB_T_ULB_SRC_ID
, ENC_BIG_ENDIAN
);
3833 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ulb_src_ip_addr
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_ULB_T_SRC_IP_ADDR
, L_LBMR_TOPIC_OPT_ULB_T_SRC_IP_ADDR
, ENC_BIG_ENDIAN
);
3834 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ulb_src_tcp_port
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_ULB_T_SRC_TCP_PORT
, L_LBMR_TOPIC_OPT_ULB_T_SRC_TCP_PORT
, ENC_BIG_ENDIAN
);
3835 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ulb_reserved
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_ULB_T_RESERVED
, L_LBMR_TOPIC_OPT_ULB_T_RESERVED
, ENC_BIG_ENDIAN
);
3837 case LBMR_TOPIC_OPT_CTXINSTQ_TYPE
:
3838 opt_item
= proto_tree_add_item(otree
, hf_lbmr_topt_ctxinstq
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_T_TYPE
, opt_len
, ENC_NA
);
3839 opt_tree
= proto_item_add_subtree(opt_item
, ett_lbmr_topt_ctxinstq
);
3840 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ctxinstq_type
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_CTXINSTQ_T_TYPE
, L_LBMR_TOPIC_OPT_CTXINSTQ_T_TYPE
, ENC_BIG_ENDIAN
);
3841 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ctxinstq_len
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_CTXINSTQ_T_LEN
, L_LBMR_TOPIC_OPT_CTXINSTQ_T_LEN
, ENC_BIG_ENDIAN
);
3842 proto_tree_add_bitmask(opt_tree
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_CTXINSTQ_T_FLAGS
, hf_lbmr_topt_ctxinstq_flags
, ett_lbmr_topt_ctxinstq_flags
, opt_ctxinstq_flags
, ENC_BIG_ENDIAN
);
3843 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ctxinstq_idx
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_CTXINSTQ_T_IDX
, L_LBMR_TOPIC_OPT_CTXINSTQ_T_IDX
, ENC_BIG_ENDIAN
);
3844 proto_tree_add_item(opt_tree
, hf_lbmr_topt_ctxinstq_ctxinst
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_CTXINSTQ_T_CTXINST
, L_LBMR_TOPIC_OPT_CTXINSTQ_T_CTXINST
, ENC_NA
);
3846 case LBMR_TOPIC_OPT_DOMAIN_ID_TYPE
:
3847 opt_item
= proto_tree_add_item(otree
, hf_lbmr_topt_domain_id
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_T_TYPE
, opt_len
, ENC_NA
);
3848 opt_tree
= proto_item_add_subtree(opt_item
, ett_lbmr_topt_domain_id
);
3849 proto_tree_add_item(opt_tree
, hf_lbmr_topt_domain_id_type
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_DOMAIN_ID_T_TYPE
, L_LBMR_TOPIC_OPT_DOMAIN_ID_T_TYPE
, ENC_BIG_ENDIAN
);
3850 proto_tree_add_item(opt_tree
, hf_lbmr_topt_domain_id_len
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_DOMAIN_ID_T_LEN
, L_LBMR_TOPIC_OPT_DOMAIN_ID_T_LEN
, ENC_BIG_ENDIAN
);
3851 proto_tree_add_bitmask(opt_tree
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_DOMAIN_ID_T_FLAGS
, hf_lbmr_topt_domain_id_flags
, ett_lbmr_topt_domain_id_flags
, opt_domain_id_flags
, ENC_BIG_ENDIAN
);
3852 proto_tree_add_item(opt_tree
, hf_lbmr_topt_domain_id_domain_id
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_DOMAIN_ID_T_DOMAIN_ID
, L_LBMR_TOPIC_OPT_DOMAIN_ID_T_DOMAIN_ID
, ENC_BIG_ENDIAN
);
3854 case LBMR_TOPIC_OPT_EXFUNC_TYPE
:
3855 opt_item
= proto_tree_add_item(otree
, hf_lbmr_topt_exfunc
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_T_TYPE
, opt_len
, ENC_NA
);
3856 opt_tree
= proto_item_add_subtree(opt_item
, ett_lbmr_topt_exfunc
);
3857 proto_tree_add_item(opt_tree
, hf_lbmr_topt_exfunc_type
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_EXFUNC_T_TYPE
, L_LBMR_TOPIC_OPT_EXFUNC_T_TYPE
, ENC_BIG_ENDIAN
);
3858 proto_tree_add_item(opt_tree
, hf_lbmr_topt_exfunc_len
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_EXFUNC_T_LEN
, L_LBMR_TOPIC_OPT_EXFUNC_T_LEN
, ENC_BIG_ENDIAN
);
3859 proto_tree_add_bitmask(opt_tree
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_EXFUNC_T_FLAGS
, hf_lbmr_topt_exfunc_flags
, ett_lbmr_topt_exfunc_flags
, opt_exfunc_flags
, ENC_BIG_ENDIAN
);
3860 proto_tree_add_item(opt_tree
, hf_lbmr_topt_exfunc_src_tcp_port
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_EXFUNC_T_SRC_TCP_PORT
, L_LBMR_TOPIC_OPT_EXFUNC_T_SRC_TCP_PORT
, ENC_BIG_ENDIAN
);
3861 proto_tree_add_item(opt_tree
, hf_lbmr_topt_exfunc_reserved
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_EXFUNC_T_RESERVED
, L_LBMR_TOPIC_OPT_EXFUNC_T_RESERVED
, ENC_BIG_ENDIAN
);
3862 proto_tree_add_item(opt_tree
, hf_lbmr_topt_exfunc_src_ip_addr
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_EXFUNC_T_SRC_IP_ADDR
, L_LBMR_TOPIC_OPT_EXFUNC_T_SRC_IP_ADDR
, ENC_BIG_ENDIAN
);
3863 proto_tree_add_bitmask(opt_tree
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_EXFUNC_T_FUNCTIONALITY_FLAGS
, hf_lbmr_topt_exfunc_functionality_flags
, ett_lbmr_topt_exfunc_functionality_flags
, opt_exfunc_functionality_flags
, ENC_BIG_ENDIAN
);
3866 opt_item
= proto_tree_add_item(otree
, hf_lbmr_topt_unknown
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_T_TYPE
, opt_len
, ENC_NA
);
3867 opt_tree
= proto_item_add_subtree(opt_item
, ett_lbmr_topt_unknown
);
3868 ei_item
= proto_tree_add_item(opt_tree
, hf_lbmr_topt_unknown_type
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_T_TYPE
, L_LBMR_TOPIC_OPT_T_TYPE
, ENC_BIG_ENDIAN
);
3869 proto_tree_add_item(opt_tree
, hf_lbmr_topt_unknown_len
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_T_LEN
, L_LBMR_TOPIC_OPT_T_LEN
, ENC_BIG_ENDIAN
);
3870 proto_tree_add_item(opt_tree
, hf_lbmr_topt_unknown_flags
, tvb
, curr_offset
+ O_LBMR_TOPIC_OPT_T_FLAGS
, L_LBMR_TOPIC_OPT_T_FLAGS
, ENC_BIG_ENDIAN
);
3871 if (((int) opt_len
) > L_LBMR_TOPIC_OPT_T
)
3873 proto_tree_add_item(opt_tree
, hf_lbmr_topt_unknown_data
, tvb
, curr_offset
+ L_LBMR_TOPIC_OPT_T
, ((int) opt_len
) - L_LBMR_TOPIC_OPT_T
, ENC_NA
);
3875 expert_add_info_format(pinfo
, ei_item
, &ei_lbmr_analysis_invalid_value
, "Unknown option 0x%02x", opt_type
);
3879 curr_offset
+= opt_len
;
3880 opt_remaining_len
-= opt_len
;
3882 return (opt_total_len
);
3885 static int dissect_lbmr_tir_transport(tvbuff_t
* tvb
, int offset
, lbm_uint8_t transport
, lbm_uint8_t transport_len
, const char * topic_name
,
3886 uint32_t topic_index
, packet_info
* pinfo
, proto_tree
* tree
, lbmr_contents_t
* contents
, proto_item
* transport_len_item
)
3890 proto_item
* channel_item
= NULL
;
3891 proto_item
* ei_item
= NULL
;
3895 case LBMR_TRANSPORT_TCP
:
3898 uint32_t session_id
= 0;
3899 proto_item
* tcp_item
= NULL
;
3900 proto_tree
* tcp_tree
= NULL
;
3901 lbttcp_transport_t
* lbttcp_transport
= NULL
;
3903 tcp_item
= proto_tree_add_item(tree
, hf_lbmr_tir_tcp
, tvb
, offset
, (int) transport_len
, ENC_NA
);
3904 tcp_tree
= proto_item_add_subtree(tcp_item
, ett_lbmr_tir_tcp
);
3905 if ((transport_len
!= L_LBMR_TIR_TCP_T
) && (transport_len
!= L_LBMR_TIR_TCP_WITH_SID_T
))
3907 expert_add_info_format(pinfo
, transport_len_item
, &ei_lbmr_analysis_length_incorrect
, "Wrong transport length for LBMR TIR TCP info");
3910 if (transport_len
== L_LBMR_TIR_TCP_WITH_SID_T
)
3912 session_id
= tvb_get_ntohl(tvb
, offset
+ O_LBMR_TIR_TCP_WITH_SID_T_SESSION_ID
);
3913 port
= tvb_get_ntohs(tvb
, offset
+ O_LBMR_TIR_TCP_WITH_SID_T_PORT
);
3914 proto_tree_add_item(tcp_tree
, hf_lbmr_tir_tcp_ip
, tvb
, offset
+ O_LBMR_TIR_TCP_WITH_SID_T_IP
, L_LBMR_TIR_TCP_WITH_SID_T_IP
, ENC_BIG_ENDIAN
);
3915 proto_tree_add_item(tcp_tree
, hf_lbmr_tir_tcp_session_id
, tvb
, offset
+ O_LBMR_TIR_TCP_WITH_SID_T_SESSION_ID
, L_LBMR_TIR_TCP_WITH_SID_T_SESSION_ID
, ENC_BIG_ENDIAN
);
3916 proto_tree_add_item(tcp_tree
, hf_lbmr_tir_tcp_port
, tvb
, offset
+ O_LBMR_TIR_TCP_WITH_SID_T_PORT
, L_LBMR_TIR_TCP_WITH_SID_T_PORT
, ENC_BIG_ENDIAN
);
3917 len
+= L_LBMR_TIR_TCP_WITH_SID_T
;
3921 port
= tvb_get_ntohs(tvb
, offset
+ O_LBMR_TIR_TCP_T_PORT
);
3922 proto_tree_add_item(tcp_tree
, hf_lbmr_tir_tcp_ip
, tvb
, offset
+ O_LBMR_TIR_TCP_T_IP
, L_LBMR_TIR_TCP_T_IP
, ENC_BIG_ENDIAN
);
3923 proto_tree_add_item(tcp_tree
, hf_lbmr_tir_tcp_port
, tvb
, offset
+ O_LBMR_TIR_TCP_T_PORT
, L_LBMR_TIR_TCP_T_PORT
, ENC_BIG_ENDIAN
);
3925 len
+= L_LBMR_TIR_TCP_T
;
3927 lbttcp_transport
= lbttcp_transport_add(&(pinfo
->src
), port
, session_id
, pinfo
->num
);
3928 channel
= lbttcp_transport
->channel
;
3929 add_contents_tir(contents
, topic_name
, lbttcp_transport_source_string(&(pinfo
->src
), port
, session_id
), topic_index
);
3932 case LBMR_TRANSPORT_LBTRM
:
3934 uint16_t src_ucast_port
= 0;
3935 uint16_t udp_dest_port
= 0;
3936 uint32_t session_id
= 0;
3937 proto_item
* lbtrm_item
= NULL
;
3938 proto_tree
* lbtrm_tree
= NULL
;
3939 lbtrm_transport_t
* lbtrm_transport
= NULL
;
3940 address multicast_group
;
3942 lbtrm_item
= proto_tree_add_item(tree
, hf_lbmr_tir_lbtrm
, tvb
, offset
, (int)transport_len
, ENC_NA
);
3943 lbtrm_tree
= proto_item_add_subtree(lbtrm_item
, ett_lbmr_tir_lbtrm
);
3944 set_address_tvb(&multicast_group
, AT_IPv4
, L_LBMR_TIR_LBTRM_T_MCAST_ADDR
, tvb
, offset
+ O_LBMR_TIR_LBTRM_T_MCAST_ADDR
);
3945 session_id
= tvb_get_ntohl(tvb
, offset
+ O_LBMR_TIR_LBTRM_T_SESSION_ID
);
3946 udp_dest_port
= tvb_get_ntohs(tvb
, offset
+ O_LBMR_TIR_LBTRM_T_UDP_DEST_PORT
);
3947 src_ucast_port
= tvb_get_ntohs(tvb
, offset
+ O_LBMR_TIR_LBTRM_T_SRC_UCAST_PORT
);
3948 proto_tree_add_item(lbtrm_tree
, hf_lbmr_tir_lbtrm_src_addr
, tvb
, offset
+ O_LBMR_TIR_LBTRM_T_SRC_ADDR
, L_LBMR_TIR_LBTRM_T_SRC_ADDR
, ENC_BIG_ENDIAN
);
3949 proto_tree_add_item(lbtrm_tree
, hf_lbmr_tir_lbtrm_mcast_addr
, tvb
, offset
+ O_LBMR_TIR_LBTRM_T_MCAST_ADDR
, L_LBMR_TIR_LBTRM_T_MCAST_ADDR
, ENC_BIG_ENDIAN
);
3950 proto_tree_add_item(lbtrm_tree
, hf_lbmr_tir_lbtrm_session_id
, tvb
, offset
+ O_LBMR_TIR_LBTRM_T_SESSION_ID
, L_LBMR_TIR_LBTRM_T_SESSION_ID
, ENC_BIG_ENDIAN
);
3951 proto_tree_add_item(lbtrm_tree
, hf_lbmr_tir_lbtrm_udp_dest_port
, tvb
, offset
+ O_LBMR_TIR_LBTRM_T_UDP_DEST_PORT
, L_LBMR_TIR_LBTRM_T_UDP_DEST_PORT
, ENC_BIG_ENDIAN
);
3952 proto_tree_add_item(lbtrm_tree
, hf_lbmr_tir_lbtrm_src_ucast_port
, tvb
, offset
+ O_LBMR_TIR_LBTRM_T_SRC_UCAST_PORT
, L_LBMR_TIR_LBTRM_T_SRC_UCAST_PORT
, ENC_BIG_ENDIAN
);
3953 lbtrm_transport
= lbtrm_transport_add(&(pinfo
->src
), src_ucast_port
, session_id
, &multicast_group
, udp_dest_port
, pinfo
->num
);
3954 channel
= lbtrm_transport
->channel
;
3955 add_contents_tir(contents
, topic_name
, lbtrm_transport_source_string(&(pinfo
->src
), src_ucast_port
, session_id
, &multicast_group
, udp_dest_port
), topic_index
);
3956 len
+= L_LBMR_TIR_LBTRM_T
;
3957 if (transport_len
!= L_LBMR_TIR_LBTRM_T
)
3959 expert_add_info_format(pinfo
, transport_len_item
, &ei_lbmr_analysis_length_incorrect
, "Wrong transport length for LBMR TIR LBTRM info");
3963 case LBMR_TRANSPORT_LBTRU
:
3965 uint32_t session_id
;
3967 proto_item
* lbtru_item
= NULL
;
3968 proto_tree
* lbtru_tree
= NULL
;
3969 lbtru_transport_t
* lbtru_transport
= NULL
;
3971 lbtru_item
= proto_tree_add_item(tree
, hf_lbmr_tir_lbtru
, tvb
, offset
, (int)transport_len
, ENC_NA
);
3972 lbtru_tree
= proto_item_add_subtree(lbtru_item
, ett_lbmr_tir_lbtru
);
3973 if ((transport_len
!= L_LBMR_TIR_LBTRU_T
) && (transport_len
!= L_LBMR_TIR_LBTRU_WITH_SID_T
))
3975 expert_add_info_format(pinfo
, transport_len_item
, &ei_lbmr_analysis_length_incorrect
, "Wrong transport length for LBMR TIR LBTRU info");
3978 if (transport_len
== L_LBMR_TIR_LBTRU_WITH_SID_T
)
3980 session_id
= tvb_get_ntohl(tvb
, offset
+ O_LBMR_TIR_LBTRU_WITH_SID_T_SESSION_ID
);
3981 port
= tvb_get_ntohs(tvb
, offset
+ O_LBMR_TIR_LBTRU_WITH_SID_T_PORT
);
3982 proto_tree_add_item(lbtru_tree
, hf_lbmr_tir_lbtru_ip
, tvb
, offset
+ O_LBMR_TIR_LBTRU_WITH_SID_T_IP
, L_LBMR_TIR_LBTRU_WITH_SID_T_IP
, ENC_BIG_ENDIAN
);
3983 proto_tree_add_item(lbtru_tree
, hf_lbmr_tir_lbtru_session_id
, tvb
, offset
+ O_LBMR_TIR_LBTRU_WITH_SID_T_SESSION_ID
, L_LBMR_TIR_LBTRU_WITH_SID_T_SESSION_ID
, ENC_BIG_ENDIAN
);
3984 proto_tree_add_item(lbtru_tree
, hf_lbmr_tir_lbtru_port
, tvb
, offset
+ O_LBMR_TIR_LBTRU_WITH_SID_T_PORT
, L_LBMR_TIR_LBTRU_WITH_SID_T_PORT
, ENC_BIG_ENDIAN
);
3985 len
+= L_LBMR_TIR_LBTRU_WITH_SID_T
;
3990 port
= tvb_get_ntohs(tvb
, offset
+ O_LBMR_TIR_LBTRU_T_PORT
);
3991 proto_tree_add_item(lbtru_tree
, hf_lbmr_tir_lbtru_ip
, tvb
, offset
+ O_LBMR_TIR_LBTRU_T_IP
, L_LBMR_TIR_LBTRU_T_IP
, ENC_BIG_ENDIAN
);
3992 proto_tree_add_item(lbtru_tree
, hf_lbmr_tir_lbtru_port
, tvb
, offset
+ O_LBMR_TIR_LBTRU_T_PORT
, L_LBMR_TIR_LBTRU_T_PORT
, ENC_BIG_ENDIAN
);
3993 len
+= L_LBMR_TIR_LBTRU_T
;
3995 lbtru_transport
= lbtru_transport_add(&(pinfo
->src
), port
, session_id
, pinfo
->num
);
3996 channel
= lbtru_transport
->channel
;
3997 add_contents_tir(contents
, topic_name
, lbtru_transport_source_string(&(pinfo
->src
), port
, session_id
), topic_index
);
4000 case LBMR_TRANSPORT_LBTIPC
:
4003 uint32_t session_id
;
4005 proto_item
* lbtipc_item
= NULL
;
4006 proto_tree
* lbtipc_tree
= NULL
;
4007 lbtipc_transport_t
* lbtipc_transport
= NULL
;
4009 lbtipc_item
= proto_tree_add_item(tree
, hf_lbmr_tir_lbtipc
, tvb
, offset
, (int)transport_len
, ENC_NA
);
4010 lbtipc_tree
= proto_item_add_subtree(lbtipc_item
, ett_lbmr_tir_lbtipc
);
4011 if (transport_len
!= L_LBMR_TIR_LBTIPC_T
)
4013 expert_add_info_format(pinfo
, transport_len_item
, &ei_lbmr_analysis_length_incorrect
, "Wrong transport length for LBMR TIR LBTIPC info");
4016 host_id
= tvb_get_ntohl(tvb
, offset
+ O_LBMR_TIR_LBTIPC_T_HOST_ID
);
4017 session_id
= tvb_get_ntohl(tvb
, offset
+ O_LBMR_TIR_LBTIPC_T_SESSION_ID
);
4018 xport_id
= tvb_get_ntohs(tvb
, offset
+ O_LBMR_TIR_LBTIPC_T_XPORT_ID
);
4019 proto_tree_add_item(lbtipc_tree
, hf_lbmr_tir_lbtipc_host_id
, tvb
, offset
+ O_LBMR_TIR_LBTIPC_T_HOST_ID
, L_LBMR_TIR_LBTIPC_T_HOST_ID
, ENC_BIG_ENDIAN
);
4020 proto_tree_add_item(lbtipc_tree
, hf_lbmr_tir_lbtipc_session_id
, tvb
, offset
+ O_LBMR_TIR_LBTIPC_T_SESSION_ID
, L_LBMR_TIR_LBTIPC_T_SESSION_ID
, ENC_BIG_ENDIAN
);
4021 proto_tree_add_item(lbtipc_tree
, hf_lbmr_tir_lbtipc_xport_id
, tvb
, offset
+ O_LBMR_TIR_LBTIPC_T_XPORT_ID
, L_LBMR_TIR_LBTIPC_T_XPORT_ID
, ENC_BIG_ENDIAN
);
4022 lbtipc_transport
= lbtipc_transport_add(host_id
, session_id
, xport_id
);
4023 channel
= lbtipc_transport
->channel
;
4024 add_contents_tir(contents
, topic_name
, lbtipc_transport_source_string(host_id
, session_id
, xport_id
), topic_index
);
4025 len
+= L_LBMR_TIR_LBTIPC_T
;
4028 case LBMR_TRANSPORT_LBTRDMA
:
4030 uint32_t session_id
;
4032 proto_item
* lbtrdma_item
= NULL
;
4033 proto_tree
* lbtrdma_tree
= NULL
;
4034 lbtrdma_transport_t
* lbtrdma_transport
= NULL
;
4035 address source_addr
;
4037 lbtrdma_item
= proto_tree_add_item(tree
, hf_lbmr_tir_lbtrdma
, tvb
, offset
, (int)transport_len
, ENC_NA
);
4038 lbtrdma_tree
= proto_item_add_subtree(lbtrdma_item
, ett_lbmr_tir_lbtrdma
);
4039 if (transport_len
!= L_LBMR_TIR_LBTRDMA_T
)
4041 expert_add_info_format(pinfo
, transport_len_item
, &ei_lbmr_analysis_length_incorrect
, "Wrong transport length for LBMR TIR LBTRDMA info");
4044 set_address_tvb(&source_addr
, AT_IPv4
, L_LBMR_TIR_LBTRDMA_T_IP
, tvb
, offset
+ O_LBMR_TIR_LBTRDMA_T_IP
);
4045 session_id
= tvb_get_ntohl(tvb
, offset
+ O_LBMR_TIR_LBTRDMA_T_SESSION_ID
);
4046 port
= tvb_get_ntohs(tvb
, offset
+ O_LBMR_TIR_LBTRDMA_T_PORT
);
4047 proto_tree_add_item(lbtrdma_tree
, hf_lbmr_tir_lbtrdma_ip
, tvb
, offset
+ O_LBMR_TIR_LBTRDMA_T_IP
, L_LBMR_TIR_LBTRDMA_T_IP
, ENC_BIG_ENDIAN
);
4048 proto_tree_add_item(lbtrdma_tree
, hf_lbmr_tir_lbtrdma_session_id
, tvb
, offset
+ O_LBMR_TIR_LBTRDMA_T_SESSION_ID
, L_LBMR_TIR_LBTRDMA_T_SESSION_ID
, ENC_BIG_ENDIAN
);
4049 proto_tree_add_item(lbtrdma_tree
, hf_lbmr_tir_lbtrdma_port
, tvb
, offset
+ O_LBMR_TIR_LBTRDMA_T_PORT
, L_LBMR_TIR_LBTRDMA_T_PORT
, ENC_BIG_ENDIAN
);
4050 lbtrdma_transport
= lbtrdma_transport_add(&source_addr
, port
, session_id
);
4051 channel
= lbtrdma_transport
->channel
;
4052 add_contents_tir(contents
, topic_name
, lbtrdma_transport_source_string(&source_addr
, port
, session_id
), topic_index
);
4053 len
+= L_LBMR_TIR_LBTRDMA_T
;
4056 case LBMR_TRANSPORT_LBTSMX
:
4059 uint32_t session_id
;
4061 proto_item
* lbtsmx_item
= NULL
;
4062 proto_tree
* lbtsmx_tree
= NULL
;
4063 lbtsmx_transport_t
* lbtsmx_transport
= NULL
;
4065 lbtsmx_item
= proto_tree_add_item(tree
, hf_lbmr_tir_lbtsmx
, tvb
, offset
, (int)transport_len
, ENC_NA
);
4066 lbtsmx_tree
= proto_item_add_subtree(lbtsmx_item
, ett_lbmr_tir_lbtsmx
);
4067 if (transport_len
!= L_LBMR_TIR_LBTSMX_T
)
4069 expert_add_info_format(pinfo
, transport_len_item
, &ei_lbmr_analysis_length_incorrect
, "Wrong transport length for LBMR TIR LBTSMX info");
4071 host_id
= tvb_get_ntohl(tvb
, offset
+ O_LBMR_TIR_LBTSMX_T_HOST_ID
);
4072 session_id
= tvb_get_ntohl(tvb
, offset
+ O_LBMR_TIR_LBTSMX_T_SESSION_ID
);
4073 xport_id
= tvb_get_ntohs(tvb
, offset
+ O_LBMR_TIR_LBTSMX_T_XPORT_ID
);
4074 proto_tree_add_item(lbtsmx_tree
, hf_lbmr_tir_lbtsmx_host_id
, tvb
, offset
+ O_LBMR_TIR_LBTSMX_T_HOST_ID
, L_LBMR_TIR_LBTSMX_T_HOST_ID
, ENC_BIG_ENDIAN
);
4075 proto_tree_add_item(lbtsmx_tree
, hf_lbmr_tir_lbtsmx_session_id
, tvb
, offset
+ O_LBMR_TIR_LBTSMX_T_SESSION_ID
, L_LBMR_TIR_LBTSMX_T_SESSION_ID
, ENC_BIG_ENDIAN
);
4076 proto_tree_add_item(lbtsmx_tree
, hf_lbmr_tir_lbtsmx_xport_id
, tvb
, offset
+ O_LBMR_TIR_LBTSMX_T_XPORT_ID
, L_LBMR_TIR_LBTSMX_T_XPORT_ID
, ENC_BIG_ENDIAN
);
4077 lbtsmx_transport
= lbtsmx_transport_add(host_id
, session_id
, xport_id
);
4078 channel
= lbtsmx_transport
->channel
;
4079 add_contents_tir(contents
, topic_name
, lbtsmx_transport_source_string(host_id
, session_id
, xport_id
), topic_index
);
4080 len
+= L_LBMR_TIR_LBTSMX_T
;
4084 ei_item
= proto_tree_add_item(tree
, hf_lbmr_tir_unknown_transport
, tvb
, offset
, transport_len
, ENC_NA
);
4085 expert_add_info_format(pinfo
, ei_item
, &ei_lbmr_analysis_invalid_value
, "Unknown LBMR TIR transport 0x%02x", transport
);
4086 len
= transport_len
;
4087 channel
= LBM_CHANNEL_NO_CHANNEL
;
4090 if (channel
!= LBM_CHANNEL_NO_CHANNEL
)
4092 lbm_topic_add(channel
, topic_index
, topic_name
);
4093 channel_item
= proto_tree_add_uint64(tree
, hf_lbmr_tir_channel
, tvb
, 0, 0, channel
);
4094 proto_item_set_generated(channel_item
);
4099 static int dissect_lbmr_tir_entry(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo
, proto_tree
* tree
, lbmr_contents_t
* contents
)
4103 int dissect_len
= 0;
4104 int tinfo_offset
= 0;
4106 proto_item
* ti
= NULL
;
4107 proto_tree
* tinfo_tree
= NULL
;
4113 proto_item
* transport_len_item
= NULL
;
4115 name
= tvb_get_stringz_enc(wmem_packet_scope(), tvb
, offset
, &namelen
, ENC_ASCII
);
4117 curr_offset
= offset
+ namelen
;
4118 tinfo_offset
= curr_offset
;
4119 transport
= tvb_get_uint8(tvb
, curr_offset
+ O_LBMR_TIR_T_TRANSPORT
);
4120 tlen
= tvb_get_uint8(tvb
, curr_offset
+ O_LBMR_TIR_T_TLEN
);
4121 ttl
= tvb_get_ntohs(tvb
, curr_offset
+ O_LBMR_TIR_T_TTL
);
4122 idx
= tvb_get_ntohl(tvb
, curr_offset
+ O_LBMR_TIR_T_INDEX
);
4123 reclen
+= L_LBMR_TIR_T
;
4124 curr_offset
+= L_LBMR_TIR_T
;
4126 ti
= proto_tree_add_none_format(tree
, hf_lbmr_tir
, tvb
, offset
, reclen
, "%s: %s, Length %u, Index %" PRIu32
", TTL %" PRIu16
,
4127 name
, val_to_str((transport
& LBMR_TIR_TRANSPORT
), lbmr_transport_type
, "Unknown (0x%02x)"), tlen
, idx
, ttl
);
4128 tinfo_tree
= proto_item_add_subtree(ti
, ett_lbmr_tir
);
4129 proto_tree_add_item(tinfo_tree
, hf_lbmr_tir_name
, tvb
, offset
, namelen
, ENC_ASCII
);
4130 proto_tree_add_item(tinfo_tree
, hf_lbmr_tir_transport_opts
, tvb
, tinfo_offset
+ O_LBMR_TIR_T_TRANSPORT
, L_LBMR_TIR_T_TRANSPORT
, ENC_BIG_ENDIAN
);
4131 proto_tree_add_item(tinfo_tree
, hf_lbmr_tir_transport_type
, tvb
, tinfo_offset
+ O_LBMR_TIR_T_TRANSPORT
, L_LBMR_TIR_T_TRANSPORT
, ENC_BIG_ENDIAN
);
4132 transport_len_item
= proto_tree_add_item(tinfo_tree
, hf_lbmr_tir_tlen
, tvb
, tinfo_offset
+ O_LBMR_TIR_T_TLEN
, L_LBMR_TIR_T_TLEN
, ENC_BIG_ENDIAN
);
4133 proto_tree_add_item(tinfo_tree
, hf_lbmr_tir_ttl
, tvb
, tinfo_offset
+ O_LBMR_TIR_T_TTL
, L_LBMR_TIR_T_TTL
, ENC_BIG_ENDIAN
);
4134 proto_tree_add_item(tinfo_tree
, hf_lbmr_tir_index
, tvb
, tinfo_offset
+ O_LBMR_TIR_T_INDEX
, L_LBMR_TIR_T_INDEX
, ENC_BIG_ENDIAN
);
4135 if ((transport
& LBMR_TIR_OPTIONS
) != 0)
4137 dissect_len
= dissect_lbmr_tir_options(tvb
, curr_offset
, pinfo
, tinfo_tree
);
4138 reclen
+= dissect_len
;
4139 curr_offset
+= dissect_len
;
4141 reclen
+= dissect_lbmr_tir_transport(tvb
, curr_offset
, (lbm_uint8_t
)(transport
& LBMR_TIR_TRANSPORT
), tlen
, name
, idx
, pinfo
, tinfo_tree
, contents
, transport_len_item
);
4142 proto_item_set_len(ti
, reclen
);
4146 static int dissect_lbmr_tirs(tvbuff_t
* tvb
, int offset
, uint16_t tir_count
, packet_info
* pinfo
, proto_tree
* tree
,
4147 const char * name
, lbmr_contents_t
* contents
)
4151 proto_tree
* tirs_tree
= NULL
;
4152 proto_item
* ti
= NULL
;
4155 start_offset
= offset
;
4156 ti
= proto_tree_add_none_format(tree
, hf_lbmr_tirs
, tvb
, start_offset
, -1, "%s", name
);
4157 tirs_tree
= proto_item_add_subtree(ti
, ett_lbmr_tirs
);
4158 while (tir_count
-- > 0)
4160 tir_len
= dissect_lbmr_tir_entry(tvb
, offset
, pinfo
, tirs_tree
, contents
);
4164 proto_item_set_len(ti
, len
);
4168 /*----------------------------------------------------------------------------*/
4169 /* LBMR Queue Query Record dissection functions. */
4170 /*----------------------------------------------------------------------------*/
4171 static int dissect_lbmr_qqr(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo _U_
, proto_tree
* tree
, lbmr_contents_t
* contents
)
4174 unsigned reclen
= 0;
4177 name
= tvb_get_stringz_enc(wmem_packet_scope(), tvb
, offset
, &namelen
, ENC_ASCII
);
4179 add_contents_qqr(contents
, name
);
4180 proto_tree_add_item(tree
, hf_lbmr_qqr_name
, tvb
, offset
, namelen
, ENC_ASCII
);
4184 static int dissect_lbmr_qqrs(tvbuff_t
* tvb
, int offset
, uint8_t qqr_count
, packet_info
* pinfo
, proto_tree
* tree
, lbmr_contents_t
* contents
)
4188 proto_tree
* qqrs_tree
= NULL
;
4189 proto_item
* qqrs_ti
= NULL
;
4192 start_offset
= offset
;
4193 qqrs_ti
= proto_tree_add_item(tree
, hf_lbmr_qqr
, tvb
, start_offset
, -1, ENC_NA
);
4194 qqrs_tree
= proto_item_add_subtree(qqrs_ti
, ett_lbmr_qqrs
);
4195 while (qqr_count
-- > 0)
4197 qqr_len
= dissect_lbmr_qqr(tvb
, offset
, pinfo
, qqrs_tree
, contents
);
4198 total_len
+= qqr_len
;
4201 proto_item_set_len(qqrs_ti
, total_len
);
4205 /*----------------------------------------------------------------------------*/
4206 /* LBMR Queue Information Record dissection functions. */
4207 /*----------------------------------------------------------------------------*/
4208 static int dissect_lbmr_qir_queue_blk(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo _U_
, proto_tree
* tree
, const char * queue_name
,
4209 const char * topic_name
, lbmr_contents_t
* contents
)
4212 proto_item
* ti
= NULL
;
4213 proto_tree
* blk_tree
= NULL
;
4215 port
= tvb_get_ntohs(tvb
, offset
+ O_LBMR_QIR_QUEUE_BLK_T_PORT
);
4216 ti
= proto_tree_add_item(tree
, hf_lbmr_qir_queue_blk
, tvb
, offset
, L_LBMR_QIR_QUEUE_BLK_T
, ENC_NA
);
4217 blk_tree
= proto_item_add_subtree(ti
, ett_lbmr_qir_queue_blk
);
4218 proto_tree_add_item(blk_tree
, hf_lbmr_qir_queue_blk_ip
, tvb
, offset
+ O_LBMR_QIR_QUEUE_BLK_T_IP
, L_LBMR_QIR_QUEUE_BLK_T_IP
, ENC_BIG_ENDIAN
);
4219 proto_tree_add_item(blk_tree
, hf_lbmr_qir_queue_blk_port
, tvb
, offset
+ O_LBMR_QIR_QUEUE_BLK_T_PORT
, L_LBMR_QIR_QUEUE_BLK_T_PORT
, ENC_BIG_ENDIAN
);
4220 proto_tree_add_item(blk_tree
, hf_lbmr_qir_queue_blk_idx
, tvb
, offset
+ O_LBMR_QIR_QUEUE_BLK_T_IDX
, L_LBMR_QIR_QUEUE_BLK_T_IDX
, ENC_BIG_ENDIAN
);
4221 proto_tree_add_item(blk_tree
, hf_lbmr_qir_queue_blk_grp_idx
, tvb
, offset
+ O_LBMR_QIR_QUEUE_BLK_T_GRP_IDX
, L_LBMR_QIR_QUEUE_BLK_T_GRP_IDX
, ENC_BIG_ENDIAN
);
4222 proto_tree_add_item(blk_tree
, hf_lbmr_qir_queue_blk_reserved
, tvb
, offset
+ O_LBMR_QIR_QUEUE_BLK_T_RESERVED
, L_LBMR_QIR_QUEUE_BLK_T_RESERVED
, ENC_BIG_ENDIAN
);
4223 add_contents_qir(contents
, queue_name
, topic_name
, port
);
4224 return ((int)L_LBMR_QIR_QUEUE_BLK_T
);
4227 static int dissect_lbmr_qir_grp_blk(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo _U_
, proto_tree
* tree
, lbmr_contents_t
* contents _U_
)
4229 proto_item
* ti
= NULL
;
4230 proto_tree
* blk_tree
= NULL
;
4234 idx
= tvb_get_ntohs(tvb
, offset
+ O_LBMR_QIR_GRP_BLK_T_GRP_IDX
);
4235 sz
= tvb_get_ntohs(tvb
, offset
+ O_LBMR_QIR_GRP_BLK_T_GRP_SZ
);
4236 ti
= proto_tree_add_none_format(tree
, hf_lbmr_qir_grp_blk
, tvb
, offset
, L_LBMR_QIR_GRP_BLK_T
, "Group block, Index %" PRIu16
", Size %" PRIu16
, idx
, sz
);
4237 blk_tree
= proto_item_add_subtree(ti
, ett_lbmr_qir_grp_blk
);
4238 proto_tree_add_item(blk_tree
, hf_lbmr_qir_grp_blk_grp_idx
, tvb
, offset
+ O_LBMR_QIR_GRP_BLK_T_GRP_IDX
, L_LBMR_QIR_GRP_BLK_T_GRP_IDX
, ENC_BIG_ENDIAN
);
4239 proto_tree_add_item(blk_tree
, hf_lbmr_qir_grp_blk_grp_sz
, tvb
, offset
+ O_LBMR_QIR_GRP_BLK_T_GRP_SZ
, L_LBMR_QIR_GRP_BLK_T_GRP_SZ
, ENC_BIG_ENDIAN
);
4240 return ((int)L_LBMR_QIR_GRP_BLK_T
);
4243 static int dissect_lbmr_qir_entry(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo
, proto_tree
* tree
, lbmr_contents_t
* contents
)
4246 int qnameoffset
= 0;
4247 char * qname
= NULL
;
4249 int tnameoffset
= 0;
4250 char * tname
= NULL
;
4252 int curr_offset
= 0;
4253 proto_item
* qirti
= NULL
;
4254 proto_tree
* qirtree
= NULL
;
4255 proto_item
* grpti
= NULL
;
4256 proto_tree
* grptree
= NULL
;
4258 proto_item
* queueti
= NULL
;
4259 proto_item
* queuetree
= NULL
;
4261 uint32_t queue_id
= 0;
4262 uint16_t grp_blks
= 0;
4263 uint16_t queue_blks
= 0;
4264 uint16_t have_options
= 0;
4268 queue name (null-terminated)
4269 topic name (null-terminated)
4271 if qir.grp_blks & LBMR_QIR_OPTIONS
4272 parse options (normal topic options - though there shouldn't be any) can use dissect_lbmr_tir_options
4274 group blocks (lbmr_qir_grp_blk_t)
4275 queue blocks (lbmr_qir_queue_blk_t)
4277 curr_offset
= offset
;
4278 qnameoffset
= curr_offset
;
4279 qname
= tvb_get_stringz_enc(wmem_packet_scope(), tvb
, qnameoffset
, &qnamelen
, ENC_ASCII
);
4280 curr_offset
+= qnamelen
;
4282 tnameoffset
= curr_offset
;
4283 tname
= tvb_get_stringz_enc(wmem_packet_scope(), tvb
, tnameoffset
, &tnamelen
, ENC_ASCII
);
4284 curr_offset
+= tnamelen
;
4286 queue_id
= tvb_get_ntohl(tvb
, curr_offset
+ O_LBMR_QIR_T_QUEUE_ID
);
4287 have_options
= tvb_get_ntohs(tvb
, curr_offset
+ O_LBMR_QIR_T_GRP_BLKS
);
4288 grp_blks
= have_options
& LBMR_QIR_GRP_BLOCKS_MASK
;
4289 have_options
&= LBMR_QIR_OPTIONS
;
4290 queue_blks
= tvb_get_ntohs(tvb
, curr_offset
+ O_LBMR_QIR_T_QUEUE_BLKS
);
4291 qirti
= proto_tree_add_none_format(tree
, hf_lbmr_qir
, tvb
, offset
, reclen
, "%s: %s, ID %" PRIu32
, qname
, tname
, queue_id
);
4292 qirtree
= proto_item_add_subtree(qirti
, ett_lbmr_qir
);
4293 proto_tree_add_item(qirtree
, hf_lbmr_qir_queue_name
, tvb
, qnameoffset
, qnamelen
, ENC_ASCII
);
4294 proto_tree_add_item(qirtree
, hf_lbmr_qir_topic_name
, tvb
, tnameoffset
, tnamelen
, ENC_ASCII
);
4295 proto_tree_add_item(qirtree
, hf_lbmr_qir_queue_id
, tvb
, curr_offset
+ O_LBMR_QIR_T_QUEUE_ID
, L_LBMR_QIR_T_QUEUE_ID
, ENC_BIG_ENDIAN
);
4296 proto_tree_add_item(qirtree
, hf_lbmr_qir_queue_ver
, tvb
, curr_offset
+ O_LBMR_QIR_T_QUEUE_VER
, L_LBMR_QIR_T_QUEUE_VER
, ENC_BIG_ENDIAN
);
4297 proto_tree_add_item(qirtree
, hf_lbmr_qir_queue_prev_ver
, tvb
, curr_offset
+ O_LBMR_QIR_T_QUEUE_PREV_VER
, L_LBMR_QIR_T_QUEUE_PREV_VER
, ENC_BIG_ENDIAN
);
4298 proto_tree_add_item(qirtree
, hf_lbmr_qir_option_flag
, tvb
, curr_offset
+ O_LBMR_QIR_T_GRP_BLKS
, L_LBMR_QIR_T_GRP_BLKS
, ENC_BIG_ENDIAN
);
4299 proto_tree_add_item(qirtree
, hf_lbmr_qir_grp_blks
, tvb
, curr_offset
+ O_LBMR_QIR_T_GRP_BLKS
, L_LBMR_QIR_T_GRP_BLKS
, ENC_BIG_ENDIAN
);
4300 proto_tree_add_item(qirtree
, hf_lbmr_qir_queue_blks
, tvb
, curr_offset
+ O_LBMR_QIR_T_QUEUE_BLKS
, L_LBMR_QIR_T_QUEUE_BLKS
, ENC_BIG_ENDIAN
);
4301 curr_offset
+= L_LBMR_QIR_T
;
4302 reclen
+= L_LBMR_QIR_T
;
4305 optlen
= dissect_lbmr_tir_options(tvb
, curr_offset
, pinfo
, tree
);
4306 curr_offset
+= optlen
;
4311 grpti
= proto_tree_add_item(qirtree
, hf_lbmr_qir_grps
, tvb
, curr_offset
, 1, ENC_NA
);
4312 grptree
= proto_item_add_subtree(grpti
, ett_lbmr_qir_grp
);
4314 while (grp_blks
-- > 0)
4316 optlen
= dissect_lbmr_qir_grp_blk(tvb
, curr_offset
, pinfo
, grptree
, contents
);
4317 curr_offset
+= optlen
;
4321 proto_item_set_len(grpti
, grplen
);
4325 queueti
= proto_tree_add_item(qirtree
, hf_lbmr_qir_queues
, tvb
, curr_offset
, 1, ENC_NA
);
4326 queuetree
= proto_item_add_subtree(queueti
, ett_lbmr_qir_queue
);
4328 while (queue_blks
-- > 0)
4330 optlen
= dissect_lbmr_qir_queue_blk(tvb
, curr_offset
, pinfo
, queuetree
, qname
, tname
, contents
);
4331 curr_offset
+= optlen
;
4335 proto_item_set_len(queueti
, queuelen
);
4337 proto_item_set_len(qirti
, reclen
);
4341 static int dissect_lbmr_qirs(tvbuff_t
* tvb
, int offset
, uint16_t qirs
, packet_info
* pinfo
, proto_tree
* tree
, lbmr_contents_t
* contents
)
4345 proto_tree
* qirs_tree
= NULL
;
4346 proto_item
* qirs_ti
= NULL
;
4349 start_offset
= offset
;
4350 qirs_ti
= proto_tree_add_item(tree
, hf_lbmr_qirs
, tvb
, start_offset
, -1, ENC_NA
);
4351 qirs_tree
= proto_item_add_subtree(qirs_ti
, ett_lbmr_qirs
);
4354 qir_len
= dissect_lbmr_qir_entry(tvb
, offset
, pinfo
, qirs_tree
, contents
);
4358 proto_item_set_len(qirs_ti
, len
);
4362 /*----------------------------------------------------------------------------*/
4363 /* LBMR Proxy Source Election Record dissection functions. */
4364 /*----------------------------------------------------------------------------*/
4365 static int dissect_lbmr_pser(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo
, proto_tree
* tree
)
4370 static int * const flags
[] =
4372 &hf_lbmr_pser_flags_option
,
4375 int curr_offset
= offset
;
4376 uint16_t flags_val
= 0;
4378 hdr_len
= (int)tvb_get_ntohs(tvb
, curr_offset
+ O_LBMR_PSER_T_LEN
);
4379 flags_val
= tvb_get_ntohs(tvb
, curr_offset
+ O_LBMR_PSER_T_FLAGS
);
4380 topic_len
= hdr_len
- L_LBMR_PSER_T
;
4381 proto_tree_add_item(tree
, hf_lbmr_pser_dep_type
, tvb
, offset
+ O_LBMR_PSER_T_DEP_TYPE
, L_LBMR_PSER_T_DEP_TYPE
, ENC_BIG_ENDIAN
);
4382 proto_tree_add_item(tree
, hf_lbmr_pser_len
, tvb
, offset
+ O_LBMR_PSER_T_LEN
, L_LBMR_PSER_T_LEN
, ENC_BIG_ENDIAN
);
4383 proto_tree_add_bitmask(tree
, tvb
, offset
+ O_LBMR_PSER_T_FLAGS
, hf_lbmr_pser_flags
, ett_lbmr_pser_flags
, flags
, ENC_BIG_ENDIAN
);
4384 proto_tree_add_item(tree
, hf_lbmr_pser_source_ip
, tvb
, offset
+ O_LBMR_PSER_T_SOURCE_IP
, L_LBMR_PSER_T_SOURCE_IP
, ENC_BIG_ENDIAN
);
4385 proto_tree_add_item(tree
, hf_lbmr_pser_store_ip
, tvb
, offset
+ O_LBMR_PSER_T_STORE_IP
, L_LBMR_PSER_T_STORE_IP
, ENC_BIG_ENDIAN
);
4386 proto_tree_add_item(tree
, hf_lbmr_pser_transport_idx
, tvb
, offset
+ O_LBMR_PSER_T_TRANSPORT_IDX
, L_LBMR_PSER_T_TRANSPORT_IDX
, ENC_BIG_ENDIAN
);
4387 proto_tree_add_item(tree
, hf_lbmr_pser_topic_idx
, tvb
, offset
+ O_LBMR_PSER_T_TOPIC_IDX
, L_LBMR_PSER_T_TOPIC_IDX
, ENC_BIG_ENDIAN
);
4388 proto_tree_add_item(tree
, hf_lbmr_pser_source_port
, tvb
, offset
+ O_LBMR_PSER_T_SOURCE_PORT
, L_LBMR_PSER_T_SOURCE_PORT
, ENC_BIG_ENDIAN
);
4389 proto_tree_add_item(tree
, hf_lbmr_pser_store_port
, tvb
, offset
+ O_LBMR_PSER_T_STORE_PORT
, L_LBMR_PSER_T_STORE_PORT
, ENC_BIG_ENDIAN
);
4390 proto_tree_add_item(tree
, hf_lbmr_pser_topic
, tvb
, offset
+ O_LBMR_PSER_T_TOPIC
, topic_len
, ENC_ASCII
);
4391 curr_offset
+= hdr_len
;
4393 if ((flags_val
& LBMR_PSER_OPT_FLAG
) != 0)
4395 proto_tree
* opts_tree
= NULL
;
4396 proto_item
* opts_item
= NULL
;
4397 proto_tree
* optlen_tree
= NULL
;
4398 proto_tree
* optlen_item
= NULL
;
4399 uint16_t opt_len
= 0;
4401 opt_len
= tvb_get_ntohs(tvb
, curr_offset
+ O_LBMR_PSER_OPTLEN_T_OPTLEN
);
4402 opts_item
= proto_tree_add_item(tree
, hf_lbmr_pser_opts
, tvb
, curr_offset
, -1, ENC_NA
);
4403 opts_tree
= proto_item_add_subtree(opts_item
, ett_lbmr_pser_opts
);
4404 optlen_item
= proto_tree_add_item(opts_tree
, hf_lbmr_pser_optlen
, tvb
, curr_offset
, L_LBMR_PSER_OPTLEN_T
, ENC_NA
);
4405 optlen_tree
= proto_item_add_subtree(optlen_item
, ett_lbmr_pser_opt_len
);
4406 proto_tree_add_item(optlen_tree
, hf_lbmr_pser_optlen_type
, tvb
, curr_offset
+ O_LBMR_PSER_OPTLEN_T_TYPE
, L_LBMR_PSER_OPTLEN_T_TYPE
, ENC_BIG_ENDIAN
);
4407 proto_tree_add_item(optlen_tree
, hf_lbmr_pser_optlen_optlen
, tvb
, curr_offset
+ O_LBMR_PSER_OPTLEN_T_OPTLEN
, L_LBMR_PSER_OPTLEN_T_OPTLEN
, ENC_BIG_ENDIAN
);
4408 proto_item_set_len(opts_item
, opt_len
);
4409 len
+= L_LBMR_PSER_OPTLEN_T
;
4410 curr_offset
+= L_LBMR_PSER_OPTLEN_T
;
4411 opt_len
-= L_LBMR_PSER_OPTLEN_T
;
4414 proto_tree
* ctxinst_tree
= NULL
;
4415 proto_item
* ctxinst_item
= NULL
;
4416 uint8_t opt_type
= tvb_get_uint8(tvb
, curr_offset
+ O_LBMR_PSER_OPT_HDR_T_TYPE
);
4417 uint8_t option_len
= tvb_get_uint8(tvb
, curr_offset
+ O_LBMR_PSER_OPT_HDR_T_LEN
);
4421 case LBMR_PSER_OPT_SRC_CTXINST_TYPE
:
4422 case LBMR_PSER_OPT_STORE_CTXINST_TYPE
:
4423 ctxinst_item
= proto_tree_add_item(opts_tree
, hf_lbmr_pser_opt_ctxinst
, tvb
, curr_offset
, L_LBMR_PSER_OPT_CTXINST_T
, ENC_NA
);
4424 ctxinst_tree
= proto_item_add_subtree(ctxinst_item
, ett_lbmr_pser_opt_ctxinst
);
4425 proto_tree_add_item(ctxinst_tree
, hf_lbmr_pser_opt_ctxinst_len
, tvb
, curr_offset
+ O_LBMR_PSER_OPT_CTXINST_T_LEN
, L_LBMR_PSER_OPT_CTXINST_T_LEN
, ENC_BIG_ENDIAN
);
4426 proto_tree_add_item(ctxinst_tree
, hf_lbmr_pser_opt_ctxinst_type
, tvb
, curr_offset
+ O_LBMR_PSER_OPT_CTXINST_T_TYPE
, L_LBMR_PSER_OPT_CTXINST_T_TYPE
, ENC_BIG_ENDIAN
);
4427 proto_tree_add_item(ctxinst_tree
, hf_lbmr_pser_opt_ctxinst_ctxinst
, tvb
, curr_offset
+ O_LBMR_PSER_OPT_CTXINST_T_CTXINST
, L_LBMR_PSER_OPT_CTXINST_T_CTXINST
, ENC_NA
);
4428 len
+= L_LBMR_PSER_OPT_CTXINST_T
;
4429 curr_offset
+= L_LBMR_PSER_OPT_CTXINST_T
;
4430 opt_len
-= L_LBMR_PSER_OPT_CTXINST_T
;
4434 curr_offset
+= option_len
;
4435 opt_len
-= option_len
;
4436 expert_add_info_format(pinfo
, NULL
, &ei_lbmr_analysis_invalid_value
, "Unknown LBMR PSER option 0x%02x", opt_type
);
4437 if (option_len
== 0) {
4447 /*----------------------------------------------------------------------------*/
4448 /* LBMR Queue Management dissection functions. */
4449 /*----------------------------------------------------------------------------*/
4450 int lbmr_dissect_umq_qmgmt(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo
, proto_tree
* tree
)
4452 uint8_t pckt_type
= 0;
4453 int curr_offset
= 0;
4456 uint8_t flags_val
= 0;
4457 int len_dissected
= 0;
4458 static int * const flags
[] =
4460 &hf_qmgmt_flags_i_flag
,
4461 &hf_qmgmt_flags_n_flag
,
4464 static int * const il_flags
[] =
4466 &hf_qmgmt_flags_i_flag
,
4467 &hf_qmgmt_flags_n_flag
,
4468 &hf_qmgmt_flags_il_l_flag
,
4469 &hf_qmgmt_flags_il_k_flag
,
4473 flags_val
= tvb_get_uint8(tvb
, offset
+ O_UMQ_QMGMT_HDR_T_FLAGS
);
4474 pckt_type
= tvb_get_uint8(tvb
, offset
+ O_UMQ_QMGMT_HDR_T_PCKT_TYPE
);
4475 dep16
= tvb_get_ntohs(tvb
, offset
+ O_UMQ_QMGMT_HDR_T_PCKT_TYPE_DEP16
);
4476 if (pckt_type
== UMQ_QMGMT_HDR_PCKT_TYPE_IL
)
4478 proto_tree_add_bitmask(tree
, tvb
, offset
+ O_UMQ_QMGMT_HDR_T_FLAGS
, hf_qmgmt_flags
, ett_qmgmt_flags
, il_flags
, ENC_BIG_ENDIAN
);
4482 proto_tree_add_bitmask(tree
, tvb
, offset
+ O_UMQ_QMGMT_HDR_T_FLAGS
, hf_qmgmt_flags
, ett_qmgmt_flags
, flags
, ENC_BIG_ENDIAN
);
4484 proto_tree_add_item(tree
, hf_qmgmt_pckt_type
, tvb
, offset
+ O_UMQ_QMGMT_HDR_T_PCKT_TYPE
, L_UMQ_QMGMT_HDR_T_PCKT_TYPE
, ENC_BIG_ENDIAN
);
4485 proto_tree_add_item(tree
, hf_qmgmt_cfgsig
, tvb
, offset
+ O_UMQ_QMGMT_HDR_T_CFGSIG
, L_UMQ_QMGMT_HDR_T_CFGSIG
, ENC_NA
);
4486 proto_tree_add_item(tree
, hf_qmgmt_queue_id
, tvb
, offset
+ O_UMQ_QMGMT_HDR_T_QUEUE_ID
, L_UMQ_QMGMT_HDR_T_QUEUE_ID
, ENC_BIG_ENDIAN
);
4487 proto_tree_add_item(tree
, hf_qmgmt_queue_ver
, tvb
, offset
+ O_UMQ_QMGMT_HDR_T_QUEUE_VER
, L_UMQ_QMGMT_HDR_T_QUEUE_VER
, ENC_BIG_ENDIAN
);
4488 proto_tree_add_item(tree
, hf_qmgmt_ip
, tvb
, offset
+ O_UMQ_QMGMT_HDR_T_IP
, L_UMQ_QMGMT_HDR_T_IP
, ENC_BIG_ENDIAN
);
4489 proto_tree_add_item(tree
, hf_qmgmt_port
, tvb
, offset
+ O_UMQ_QMGMT_HDR_T_PORT
, L_UMQ_QMGMT_HDR_T_PORT
, ENC_BIG_ENDIAN
);
4490 proto_tree_add_item(tree
, hf_qmgmt_inst_idx
, tvb
, offset
+ O_UMQ_QMGMT_HDR_T_INST_IDX
, L_UMQ_QMGMT_HDR_T_INST_IDX
, ENC_BIG_ENDIAN
);
4491 proto_tree_add_item(tree
, hf_qmgmt_grp_idx
, tvb
, offset
+ O_UMQ_QMGMT_HDR_T_GRP_IDX
, L_UMQ_QMGMT_HDR_T_GRP_IDX
, ENC_BIG_ENDIAN
);
4494 case UMQ_QMGMT_HDR_PCKT_TYPE_IL
:
4495 proto_tree_add_item(tree
, hf_qmgmt_il_num_insts
, tvb
, offset
+ O_UMQ_QMGMT_HDR_T_PCKT_TYPE_DEP16
, L_UMQ_QMGMT_HDR_T_PCKT_TYPE_DEP16
, ENC_BIG_ENDIAN
);
4497 case UMQ_QMGMT_HDR_PCKT_TYPE_JREJ
:
4498 proto_tree_add_item(tree
, hf_qmgmt_jrej_code
, tvb
, offset
+ O_UMQ_QMGMT_HDR_T_PCKT_TYPE_DEP16
, L_UMQ_QMGMT_HDR_T_PCKT_TYPE_DEP16
, ENC_BIG_ENDIAN
);
4500 case UMQ_QMGMT_HDR_PCKT_TYPE_EV
:
4501 proto_tree_add_item(tree
, hf_qmgmt_ev_bias
, tvb
, offset
+ O_UMQ_QMGMT_HDR_T_PCKT_TYPE_DEP16
, L_UMQ_QMGMT_HDR_T_PCKT_TYPE_DEP16
, ENC_BIG_ENDIAN
);
4504 proto_tree_add_item(tree
, hf_qmgmt_pckt_type_dep16
, tvb
, offset
+ O_UMQ_QMGMT_HDR_T_PCKT_TYPE_DEP16
, L_UMQ_QMGMT_HDR_T_PCKT_TYPE_DEP16
, ENC_BIG_ENDIAN
);
4507 len_dissected
= L_UMQ_QMGMT_HDR_T
;
4508 curr_offset
= offset
+ L_UMQ_QMGMT_HDR_T
;
4511 case UMQ_QMGMT_HDR_PCKT_TYPE_IL
:
4513 proto_item
* il_subtree_item
= NULL
;
4514 proto_tree
* il_subtree
= NULL
;
4515 static int * const il_inst_flags
[] =
4517 &hf_qmgmt_il_inst_flags_m_flag
,
4518 &hf_qmgmt_il_inst_flags_q_flag
,
4519 &hf_qmgmt_il_inst_flags_p_flag
,
4523 il_subtree_item
= proto_tree_add_item(tree
, hf_qmgmt_il
, tvb
, curr_offset
, L_UMQ_QMGMT_IL_HDR_T
, ENC_NA
);
4524 il_subtree
= proto_item_add_subtree(il_subtree_item
, ett_qmgmt_il
);
4525 proto_tree_add_item(il_subtree
, hf_qmgmt_il_highest_rcr_tsp
, tvb
, curr_offset
+ O_UMQ_QMGMT_IL_HDR_T_HIGHEST_RCR_TSP
, L_UMQ_QMGMT_IL_HDR_T_HIGHEST_RCR_TSP
, ENC_BIG_ENDIAN
);
4526 len_dissected
+= L_UMQ_QMGMT_IL_HDR_T
;
4527 curr_offset
+= L_UMQ_QMGMT_IL_HDR_T
;
4528 for (idx
= 0; idx
< dep16
; ++idx
)
4530 proto_item
* il_inst_subtree_item
= NULL
;
4531 proto_tree
* il_inst_subtree
= NULL
;
4533 il_inst_subtree_item
= proto_tree_add_item(tree
, hf_qmgmt_il_inst
, tvb
, curr_offset
, L_UMQ_QMGMT_IL_INST_HDR_T
, ENC_NA
);
4534 il_inst_subtree
= proto_item_add_subtree(il_inst_subtree_item
, ett_qmgmt_il_inst
);
4535 proto_tree_add_item(il_inst_subtree
, hf_qmgmt_il_inst_ip
, tvb
, curr_offset
+ O_UMQ_QMGMT_IL_INST_HDR_T_IP
, L_UMQ_QMGMT_IL_INST_HDR_T_IP
, ENC_BIG_ENDIAN
);
4536 proto_tree_add_item(il_inst_subtree
, hf_qmgmt_il_inst_port
, tvb
, curr_offset
+ O_UMQ_QMGMT_IL_INST_HDR_T_PORT
, L_UMQ_QMGMT_IL_INST_HDR_T_PORT
, ENC_BIG_ENDIAN
);
4537 proto_tree_add_item(il_inst_subtree
, hf_qmgmt_il_inst_inst_idx
, tvb
, curr_offset
+ O_UMQ_QMGMT_IL_INST_HDR_T_INST_IDX
, L_UMQ_QMGMT_IL_INST_HDR_T_INST_IDX
, ENC_BIG_ENDIAN
);
4538 proto_tree_add_item(il_inst_subtree
, hf_qmgmt_il_inst_grp_idx
, tvb
, curr_offset
+ O_UMQ_QMGMT_IL_INST_HDR_T_GRP_IDX
, L_UMQ_QMGMT_IL_INST_HDR_T_GRP_IDX
, ENC_BIG_ENDIAN
);
4539 proto_tree_add_bitmask(il_inst_subtree
, tvb
, curr_offset
+ O_UMQ_QMGMT_IL_INST_HDR_T_FLAGS
, hf_qmgmt_il_inst_flags
, ett_qmgmt_il_inst_flags
, il_inst_flags
, ENC_BIG_ENDIAN
);
4540 len_dissected
+= L_UMQ_QMGMT_IL_INST_HDR_T
;
4541 curr_offset
+= L_UMQ_QMGMT_IL_INST_HDR_T
;
4545 case UMQ_QMGMT_HDR_PCKT_TYPE_JR
:
4548 case UMQ_QMGMT_HDR_PCKT_TYPE_JREJ
:
4551 case UMQ_QMGMT_HDR_PCKT_TYPE_IKA
:
4554 case UMQ_QMGMT_HDR_PCKT_TYPE_EC
:
4556 proto_item
* ec_subtree_item
= NULL
;
4557 proto_tree
* ec_subtree
= NULL
;
4559 ec_subtree_item
= proto_tree_add_item(tree
, hf_qmgmt_ec
, tvb
, curr_offset
, L_UMQ_QMGMT_EC_HDR_T
, ENC_NA
);
4560 ec_subtree
= proto_item_add_subtree(ec_subtree_item
, ett_qmgmt_ec
);
4561 proto_tree_add_item(ec_subtree
, hf_qmgmt_ec_queue_new_ver
, tvb
, curr_offset
+ O_UMQ_QMGMT_EC_HDR_T_QUEUE_NEW_VER
, L_UMQ_QMGMT_EC_HDR_T_QUEUE_NEW_VER
, ENC_BIG_ENDIAN
);
4562 len_dissected
+= L_UMQ_QMGMT_EC_HDR_T
;
4563 curr_offset
+= L_UMQ_QMGMT_EC_HDR_T
;
4566 case UMQ_QMGMT_HDR_PCKT_TYPE_EV
:
4568 proto_item
* ev_subtree_item
= NULL
;
4569 proto_tree
* ev_subtree
= NULL
;
4571 ev_subtree_item
= proto_tree_add_item(tree
, hf_qmgmt_ev
, tvb
, curr_offset
, L_UMQ_QMGMT_EV_HDR_T
, ENC_NA
);
4572 ev_subtree
= proto_item_add_subtree(ev_subtree_item
, ett_qmgmt_ev
);
4573 proto_tree_add_item(ev_subtree
, hf_qmgmt_ev_highest_rcr_tsp
, tvb
, curr_offset
+ O_UMQ_QMGMT_EV_HDR_T_HIGHEST_RCR_TSP
, L_UMQ_QMGMT_EV_HDR_T_HIGHEST_RCR_TSP
, ENC_BIG_ENDIAN
);
4574 proto_tree_add_item(ev_subtree
, hf_qmgmt_ev_age
, tvb
, curr_offset
+ O_UMQ_QMGMT_EV_HDR_T_AGE
, L_UMQ_QMGMT_EV_HDR_T_AGE
, ENC_BIG_ENDIAN
);
4575 len_dissected
+= L_UMQ_QMGMT_EV_HDR_T
;
4576 curr_offset
+= L_UMQ_QMGMT_EV_HDR_T
;
4579 case UMQ_QMGMT_HDR_PCKT_TYPE_CNIL
:
4582 case UMQ_QMGMT_HDR_PCKT_TYPE_QRO
:
4584 proto_item
* qro_subtree_item
= NULL
;
4585 proto_tree
* qro_subtree
= NULL
;
4587 qro_subtree_item
= proto_tree_add_item(tree
, hf_qmgmt_qro
, tvb
, curr_offset
, L_UMQ_QMGMT_QRO_HDR_T
, ENC_NA
);
4588 qro_subtree
= proto_item_add_subtree(qro_subtree_item
, ett_qmgmt_qro
);
4589 proto_tree_add_item(qro_subtree
, hf_qmgmt_qro_highest_rcr_tsp
, tvb
, curr_offset
+ O_UMQ_QMGMT_QRO_HDR_T_HIGHEST_RCR_TSP
, L_UMQ_QMGMT_QRO_HDR_T_HIGHEST_RCR_TSP
, ENC_BIG_ENDIAN
);
4590 len_dissected
+= L_UMQ_QMGMT_QRO_HDR_T
;
4591 curr_offset
+= L_UMQ_QMGMT_QRO_HDR_T
;
4595 expert_add_info_format(pinfo
, NULL
, &ei_lbmr_analysis_invalid_value
, "Unknown LBMR QMGMT packet type 0x%02x", pckt_type
);
4598 if ((flags_val
& UMQ_QMGMT_HDR_N_FLAG
) != 0)
4600 int qnamelen
= tvb_reported_length_remaining(tvb
, curr_offset
);
4603 proto_tree_add_item(tree
, hf_qmgmt_qname
, tvb
, curr_offset
, qnamelen
, ENC_ASCII
);
4605 len_dissected
+= qnamelen
;
4607 return (len_dissected
);
4610 /*----------------------------------------------------------------------------*/
4611 /* LBMR ContextInfo dissection functions. */
4612 /*----------------------------------------------------------------------------*/
4613 static int dissect_lbmr_ctxinfo(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo _U_
, proto_tree
* tree
)
4615 uint16_t flags16
= 0;
4617 static int * const flags
[] =
4619 &hf_lbmr_ctxinfo_flags_query
,
4620 &hf_lbmr_ctxinfo_flags_ip
,
4621 &hf_lbmr_ctxinfo_flags_instance
,
4622 &hf_lbmr_ctxinfo_flags_tnwg_src
,
4623 &hf_lbmr_ctxinfo_flags_tnwg_rcv
,
4624 &hf_lbmr_ctxinfo_flags_proxy
,
4625 &hf_lbmr_ctxinfo_flags_name
,
4629 flags16
= tvb_get_ntohs(tvb
, offset
+ O_LBMR_CTXINFO_T_FLAGS
);
4630 reclen
= tvb_get_uint8(tvb
, offset
+ O_LBMR_CTXINFO_T_LEN
);
4631 proto_tree_add_item(tree
, hf_lbmr_ctxinfo_len
, tvb
, offset
+ O_LBMR_CTXINFO_T_LEN
, L_LBMR_CTXINFO_T_LEN
, ENC_BIG_ENDIAN
);
4632 proto_tree_add_item(tree
, hf_lbmr_ctxinfo_hop_count
, tvb
, offset
+ O_LBMR_CTXINFO_T_HOP_COUNT
, L_LBMR_CTXINFO_T_HOP_COUNT
, ENC_BIG_ENDIAN
);
4633 proto_tree_add_bitmask(tree
, tvb
, offset
+ O_LBMR_CTXINFO_T_FLAGS
, hf_lbmr_ctxinfo_flags
, ett_lbmr_ctxinfo_flags
, flags
, ENC_BIG_ENDIAN
);
4634 proto_tree_add_item(tree
, hf_lbmr_ctxinfo_port
, tvb
, offset
+ O_LBMR_CTXINFO_T_PORT
, L_LBMR_CTXINFO_T_FLAGS
, ENC_BIG_ENDIAN
);
4635 proto_tree_add_item(tree
, hf_lbmr_ctxinfo_ip
, tvb
, offset
+ O_LBMR_CTXINFO_T_IP
, L_LBMR_CTXINFO_T_IP
, ENC_BIG_ENDIAN
);
4636 proto_tree_add_item(tree
, hf_lbmr_ctxinfo_instance
, tvb
, offset
+ O_LBMR_CTXINFO_T_INSTANCE
, L_LBMR_CTXINFO_T_INSTANCE
, ENC_NA
);
4637 if ((flags16
& LBMR_CTXINFO_NAME_FLAG
) != 0)
4639 proto_tree_add_item(tree
, hf_lbmr_ctxinfo_name
, tvb
, offset
+ L_LBMR_CTXINFO_T
, reclen
- L_LBMR_CTXINFO_T
, ENC_ASCII
);
4641 return ((int)reclen
);
4644 /*----------------------------------------------------------------------------*/
4645 /* LBMR Topic Res Request dissection functions. */
4646 /*----------------------------------------------------------------------------*/
4647 static int dissect_lbmr_topic_res_request(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo _U_
, proto_tree
* tree
)
4649 static int * const flags
[] =
4651 &hf_lbmr_topic_res_request_flags_gw_remote_interest
,
4652 &hf_lbmr_topic_res_request_flags_context_query
,
4653 &hf_lbmr_topic_res_request_flags_context_advertisement
,
4654 &hf_lbmr_topic_res_request_flags_gateway_meta
,
4655 &hf_lbmr_topic_res_request_flags_advertisement
,
4656 &hf_lbmr_topic_res_request_flags_query
,
4657 &hf_lbmr_topic_res_request_flags_wildcard_query
,
4661 proto_tree_add_bitmask(tree
, tvb
, offset
+ O_LBMR_TOPIC_RES_REQUEST_T_FLAGS
, hf_lbmr_topic_res_request_flags
, ett_lbmr_topic_res_request_flags
, flags
, ENC_BIG_ENDIAN
);
4662 return (L_LBMR_TOPIC_RES_REQUEST_T
);
4665 /*----------------------------------------------------------------------------*/
4666 /* LBMR Remote Domain Route dissection functions. */
4667 /*----------------------------------------------------------------------------*/
4668 static int dissect_lbmr_remote_domain_route(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo _U_
, proto_tree
* tree
)
4670 uint16_t num_domains
;
4671 int len_dissected
= 0;
4675 num_domains
= tvb_get_ntohs(tvb
, offset
+ O_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_NUM_DOMAINS
);
4676 proto_tree_add_item(tree
, hf_lbmr_remote_domain_route_hdr_num_domains
, tvb
, offset
+ O_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_NUM_DOMAINS
, L_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_NUM_DOMAINS
, ENC_BIG_ENDIAN
);
4677 proto_tree_add_item(tree
, hf_lbmr_remote_domain_route_hdr_ip
, tvb
, offset
+ O_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_IP
, L_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_IP
, ENC_BIG_ENDIAN
);
4678 proto_tree_add_item(tree
, hf_lbmr_remote_domain_route_hdr_port
, tvb
, offset
+ O_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_PORT
, L_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_PORT
, ENC_BIG_ENDIAN
);
4679 proto_tree_add_item(tree
, hf_lbmr_remote_domain_route_hdr_route_index
, tvb
, offset
+ O_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_ROUTE_INDEX
, L_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_ROUTE_INDEX
, ENC_BIG_ENDIAN
);
4680 proto_tree_add_item(tree
, hf_lbmr_remote_domain_route_hdr_length
, tvb
, offset
+ O_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_LENGTH
, L_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_LENGTH
, ENC_BIG_ENDIAN
);
4681 len_dissected
= L_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T
;
4682 ofs
= offset
+ L_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T
;
4683 for (idx
= 0; idx
< num_domains
; ++idx
)
4685 proto_tree_add_item(tree
, hf_lbmr_remote_domain_route_hdr_domain
, tvb
, ofs
, sizeof(lbm_uint32_t
), ENC_BIG_ENDIAN
);
4686 len_dissected
+= (int)sizeof(lbm_uint32_t
);
4687 ofs
+= (int)sizeof(lbm_uint32_t
);
4689 return (len_dissected
);
4692 /*----------------------------------------------------------------------------*/
4693 /* LBMR Remote ContextInfo option dissection functions. */
4694 /*----------------------------------------------------------------------------*/
4695 static int dissect_lbmr_rctxinfo_rec_address_opt(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo _U_
, proto_tree
* tree
)
4697 proto_tree
* subtree
= NULL
;
4698 proto_item
* subtree_item
= NULL
;
4700 subtree_item
= proto_tree_add_item(tree
, hf_lbmr_rctxinfo_rec_address
, tvb
, offset
, L_LBMR_RCTXINFO_REC_ADDRESS_OPT_T
, ENC_NA
);
4701 subtree
= proto_item_add_subtree(subtree_item
, ett_lbmr_rctxinfo_rec_address
);
4702 proto_tree_add_item(subtree
, hf_lbmr_rctxinfo_rec_address_type
, tvb
, offset
+ O_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_TYPE
, L_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_TYPE
, ENC_BIG_ENDIAN
);
4703 proto_tree_add_item(subtree
, hf_lbmr_rctxinfo_rec_address_len
, tvb
, offset
+ O_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_LEN
, L_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_LEN
, ENC_BIG_ENDIAN
);
4704 proto_tree_add_item(subtree
, hf_lbmr_rctxinfo_rec_address_flags
, tvb
, offset
+ O_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_FLAGS
, L_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_FLAGS
, ENC_BIG_ENDIAN
);
4705 proto_tree_add_item(subtree
, hf_lbmr_rctxinfo_rec_address_domain_id
, tvb
, offset
+ O_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_DOMAIN_ID
, L_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_DOMAIN_ID
, ENC_BIG_ENDIAN
);
4706 proto_tree_add_item(subtree
, hf_lbmr_rctxinfo_rec_address_ip
, tvb
, offset
+ O_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_IP
, L_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_IP
, ENC_BIG_ENDIAN
);
4707 proto_tree_add_item(subtree
, hf_lbmr_rctxinfo_rec_address_port
, tvb
, offset
+ O_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_PORT
, L_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_PORT
, ENC_BIG_ENDIAN
);
4708 proto_tree_add_item(subtree
, hf_lbmr_rctxinfo_rec_address_res
, tvb
, offset
+ O_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_RES
, L_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_RES
, ENC_BIG_ENDIAN
);
4709 return ((int)L_LBMR_RCTXINFO_REC_ADDRESS_OPT_T
);
4712 static int dissect_lbmr_rctxinfo_rec_instance_opt(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo _U_
, proto_tree
* tree
)
4714 proto_tree
* subtree
= NULL
;
4715 proto_item
* subtree_item
= NULL
;
4718 len
= tvb_get_uint8(tvb
, offset
+ O_LBMR_RCTXINFO_REC_INSTANCE_OPT_T_LEN
);
4719 subtree_item
= proto_tree_add_item(tree
, hf_lbmr_rctxinfo_rec_instance
, tvb
, offset
, (int)len
, ENC_NA
);
4720 subtree
= proto_item_add_subtree(subtree_item
, ett_lbmr_rctxinfo_rec_instance
);
4721 proto_tree_add_item(subtree
, hf_lbmr_rctxinfo_rec_instance_type
, tvb
, offset
+ O_LBMR_RCTXINFO_REC_INSTANCE_OPT_T_TYPE
, L_LBMR_RCTXINFO_REC_INSTANCE_OPT_T_TYPE
, ENC_BIG_ENDIAN
);
4722 proto_tree_add_item(subtree
, hf_lbmr_rctxinfo_rec_instance_len
, tvb
, offset
+ O_LBMR_RCTXINFO_REC_INSTANCE_OPT_T_LEN
, L_LBMR_RCTXINFO_REC_INSTANCE_OPT_T_LEN
, ENC_BIG_ENDIAN
);
4723 proto_tree_add_item(subtree
, hf_lbmr_rctxinfo_rec_instance_flags
, tvb
, offset
+ O_LBMR_RCTXINFO_REC_INSTANCE_OPT_T_FLAGS
, L_LBMR_RCTXINFO_REC_INSTANCE_OPT_T_FLAGS
, ENC_BIG_ENDIAN
);
4724 proto_tree_add_item(subtree
, hf_lbmr_rctxinfo_rec_instance_instance
, tvb
, offset
+ O_LBMR_RCTXINFO_REC_INSTANCE_OPT_T_INSTANCE
, L_LBMR_RCTXINFO_REC_INSTANCE_OPT_T_INSTANCE
, ENC_NA
);
4725 return ((int)L_LBMR_RCTXINFO_REC_INSTANCE_OPT_T
);
4728 static int dissect_lbmr_rctxinfo_rec_odomain_opt(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo _U_
, proto_tree
* tree
)
4730 proto_tree
* subtree
= NULL
;
4731 proto_item
* subtree_item
= NULL
;
4734 len
= tvb_get_uint8(tvb
, offset
+ O_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T_LEN
);
4735 subtree_item
= proto_tree_add_item(tree
, hf_lbmr_rctxinfo_rec_odomain
, tvb
, offset
, (int)len
, ENC_NA
);
4736 subtree
= proto_item_add_subtree(subtree_item
, ett_lbmr_rctxinfo_rec_odomain
);
4737 proto_tree_add_item(subtree
, hf_lbmr_rctxinfo_rec_odomain_type
, tvb
, offset
+ O_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T_TYPE
, L_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T_TYPE
, ENC_BIG_ENDIAN
);
4738 proto_tree_add_item(subtree
, hf_lbmr_rctxinfo_rec_odomain_len
, tvb
, offset
+ O_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T_LEN
, L_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T_LEN
, ENC_BIG_ENDIAN
);
4739 proto_tree_add_item(subtree
, hf_lbmr_rctxinfo_rec_odomain_flags
, tvb
, offset
+ O_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T_FLAGS
, L_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T_FLAGS
, ENC_BIG_ENDIAN
);
4740 proto_tree_add_item(subtree
, hf_lbmr_rctxinfo_rec_odomain_domain_id
, tvb
, offset
+ O_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T_DOMAIN_ID
, L_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T_DOMAIN_ID
, ENC_BIG_ENDIAN
);
4741 return ((int)L_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T
);
4744 static int dissect_lbmr_rctxinfo_rec_name_opt(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo _U_
, proto_tree
* tree
)
4746 proto_tree
* subtree
= NULL
;
4747 proto_item
* subtree_item
= NULL
;
4751 len
= tvb_get_uint8(tvb
, offset
+ O_LBMR_RCTXINFO_REC_NAME_OPT_T_LEN
);
4752 subtree_item
= proto_tree_add_item(tree
, hf_lbmr_rctxinfo_rec_name
, tvb
, offset
, (int)len
, ENC_NA
);
4753 subtree
= proto_item_add_subtree(subtree_item
, ett_lbmr_rctxinfo_rec_name
);
4754 proto_tree_add_item(subtree
, hf_lbmr_rctxinfo_rec_name_type
, tvb
, offset
+ O_LBMR_RCTXINFO_REC_NAME_OPT_T_TYPE
, L_LBMR_RCTXINFO_REC_NAME_OPT_T_TYPE
, ENC_BIG_ENDIAN
);
4755 proto_tree_add_item(subtree
, hf_lbmr_rctxinfo_rec_name_len
, tvb
, offset
+ O_LBMR_RCTXINFO_REC_NAME_OPT_T_LEN
, L_LBMR_RCTXINFO_REC_NAME_OPT_T_LEN
, ENC_BIG_ENDIAN
);
4756 proto_tree_add_item(subtree
, hf_lbmr_rctxinfo_rec_name_flags
, tvb
, offset
+ O_LBMR_RCTXINFO_REC_NAME_OPT_T_FLAGS
, L_LBMR_RCTXINFO_REC_NAME_OPT_T_FLAGS
, ENC_BIG_ENDIAN
);
4757 name_len
= ((int)len
) - L_LBMR_RCTXINFO_REC_NAME_OPT_T
;
4758 proto_tree_add_item(subtree
, hf_lbmr_rctxinfo_rec_name_name
, tvb
, offset
+ L_LBMR_RCTXINFO_REC_NAME_OPT_T
, name_len
, ENC_ASCII
);
4762 static int dissect_lbmr_rctxinfo_rec_unknown_opt(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo
, proto_tree
* tree
)
4764 proto_tree
* subtree
= NULL
;
4765 proto_item
* subtree_item
= NULL
;
4770 opt_type
= tvb_get_uint8(tvb
, offset
+ O_LBMR_RCTXINFO_REC_OPT_T_TYPE
);
4771 len
= tvb_get_uint8(tvb
, offset
+ O_LBMR_RCTXINFO_REC_OPT_T_LEN
);
4772 subtree_item
= proto_tree_add_item(tree
, hf_lbmr_rctxinfo_rec_unknown
, tvb
, offset
, (int)len
, ENC_NA
);
4773 subtree
= proto_item_add_subtree(subtree_item
, ett_lbmr_rctxinfo_rec_unknown
);
4774 proto_tree_add_item(subtree
, hf_lbmr_rctxinfo_rec_unknown_type
, tvb
, offset
+ O_LBMR_RCTXINFO_REC_OPT_T_TYPE
, L_LBMR_RCTXINFO_REC_OPT_T_TYPE
, ENC_BIG_ENDIAN
);
4775 proto_tree_add_item(subtree
, hf_lbmr_rctxinfo_rec_unknown_len
, tvb
, offset
+ O_LBMR_RCTXINFO_REC_OPT_T_LEN
, L_LBMR_RCTXINFO_REC_OPT_T_LEN
, ENC_BIG_ENDIAN
);
4776 proto_tree_add_item(subtree
, hf_lbmr_rctxinfo_rec_unknown_flags
, tvb
, offset
+ O_LBMR_RCTXINFO_REC_OPT_T_FLAGS
, L_LBMR_RCTXINFO_REC_OPT_T_FLAGS
, ENC_BIG_ENDIAN
);
4777 data_len
= ((int) len
) - L_LBMR_RCTXINFO_REC_OPT_T
;
4778 proto_tree_add_item(subtree
, hf_lbmr_rctxinfo_rec_unknown_data
, tvb
, offset
+ L_LBMR_RCTXINFO_REC_OPT_T
, data_len
, ENC_NA
);
4779 expert_add_info_format(pinfo
, subtree_item
, &ei_lbmr_analysis_invalid_value
, "Unknown LBMR RCTXINFO option 0x%02x", opt_type
);
4783 /*----------------------------------------------------------------------------*/
4784 /* LBMR Remote ContextInfo dissection functions. */
4785 /*----------------------------------------------------------------------------*/
4786 static int dissect_lbmr_rctxinfo_rec(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo
, proto_tree
* tree
)
4788 proto_tree
* subtree
= NULL
;
4789 proto_item
* subtree_item
= NULL
;
4790 uint8_t opt_type
= 0;
4791 static int * const flags
[] =
4793 &hf_lbmr_rctxinfo_rec_flags_query
,
4797 int rec_len_remaining
= 0;
4799 int opt_len_dissected
= 0;
4800 int len_dissected
= 0;
4802 len
= tvb_get_ntohs(tvb
, offset
+ O_LBMR_RCTXINFO_REC_T_LEN
);
4803 subtree_item
= proto_tree_add_item(tree
, hf_lbmr_rctxinfo_rec
, tvb
, offset
, -1, ENC_NA
);
4804 subtree
= proto_item_add_subtree(subtree_item
, ett_lbmr_rctxinfo_rec
);
4805 proto_tree_add_item(subtree
, hf_lbmr_rctxinfo_rec_len
, tvb
, offset
+ O_LBMR_RCTXINFO_REC_T_LEN
, L_LBMR_RCTXINFO_REC_T_LEN
, ENC_BIG_ENDIAN
);
4806 proto_tree_add_bitmask(subtree
, tvb
, offset
+ O_LBMR_RCTXINFO_REC_T_FLAGS
, hf_lbmr_rctxinfo_rec_flags
, ett_lbmr_rctxinfo_rec_flags
, flags
, ENC_BIG_ENDIAN
);
4807 ofs
= offset
+ L_LBMR_RCTXINFO_REC_T
;
4808 rec_len_remaining
= len
- L_LBMR_RCTXINFO_REC_T
;
4809 len_dissected
= L_LBMR_RCTXINFO_REC_T
;
4810 while (rec_len_remaining
> 0)
4812 opt_type
= tvb_get_uint8(tvb
, ofs
+ O_LBMR_RCTXINFO_REC_OPT_T_TYPE
);
4815 case LBMR_RCTXINFO_OPT_ADDRESS_TYPE
:
4816 opt_len_dissected
= dissect_lbmr_rctxinfo_rec_address_opt(tvb
, ofs
, pinfo
, subtree
);
4818 case LBMR_RCTXINFO_OPT_INSTANCE_TYPE
:
4819 opt_len_dissected
= dissect_lbmr_rctxinfo_rec_instance_opt(tvb
, ofs
, pinfo
, subtree
);
4821 case LBMR_RCTXINFO_OPT_ODOMAIN_TYPE
:
4822 opt_len_dissected
= dissect_lbmr_rctxinfo_rec_odomain_opt(tvb
, ofs
, pinfo
, subtree
);
4824 case LBMR_RCTXINFO_OPT_NAME_TYPE
:
4825 opt_len_dissected
= dissect_lbmr_rctxinfo_rec_name_opt(tvb
, ofs
, pinfo
, subtree
);
4828 opt_len_dissected
= dissect_lbmr_rctxinfo_rec_unknown_opt(tvb
, ofs
, pinfo
, subtree
);
4831 len_dissected
+= opt_len_dissected
;
4832 rec_len_remaining
-= opt_len_dissected
;
4833 ofs
+= opt_len_dissected
;
4835 proto_item_set_len(subtree_item
, len_dissected
);
4836 return (len_dissected
);
4839 static int dissect_lbmr_rctxinfo(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo
, proto_tree
* tree
)
4841 uint16_t num_recs
= 0;
4843 int len_dissected
= 0;
4844 int rec_len_dissected
= 0;
4846 num_recs
= tvb_get_ntohs(tvb
, offset
+ O_LBMR_RCTXINFO_T_NUM_RECS
);
4847 proto_tree_add_item(tree
, hf_lbmr_rctxinfo_len
, tvb
, offset
+ O_LBMR_RCTXINFO_T_LEN
, L_LBMR_RCTXINFO_T_LEN
, ENC_BIG_ENDIAN
);
4848 proto_tree_add_item(tree
, hf_lbmr_rctxinfo_num_recs
, tvb
, offset
+ O_LBMR_RCTXINFO_T_NUM_RECS
, L_LBMR_RCTXINFO_T_NUM_RECS
, ENC_BIG_ENDIAN
);
4849 proto_tree_add_item(tree
, hf_lbmr_rctxinfo_reserved
, tvb
, offset
+ O_LBMR_RCTXINFO_T_RESERVED
, L_LBMR_RCTXINFO_T_RESERVED
, ENC_BIG_ENDIAN
);
4850 len_dissected
= L_LBMR_RCTXINFO_T
;
4851 ofs
= offset
+ L_LBMR_RCTXINFO_T
;
4852 while (num_recs
> 0)
4854 rec_len_dissected
= dissect_lbmr_rctxinfo_rec(tvb
, ofs
, pinfo
, tree
);
4855 ofs
+= rec_len_dissected
;
4856 len_dissected
+= rec_len_dissected
;
4859 return (len_dissected
);
4862 static proto_item
* format_ver_type(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo _U_
, proto_tree
* tree
)
4864 proto_item
* type_item
= NULL
;
4866 proto_tree_add_item(tree
, hf_lbmr_hdr_ver
, tvb
, offset
+ O_LBMR_HDR_T_VER_TYPE
, L_LBMR_HDR_T_VER_TYPE
, ENC_BIG_ENDIAN
);
4867 proto_tree_add_item(tree
, hf_lbmr_hdr_opt
, tvb
, offset
+ O_LBMR_HDR_T_VER_TYPE
, L_LBMR_HDR_T_VER_TYPE
, ENC_BIG_ENDIAN
);
4868 type_item
= proto_tree_add_item(tree
, hf_lbmr_hdr_type
, tvb
, offset
+ O_LBMR_HDR_T_VER_TYPE
, L_LBMR_HDR_T_VER_TYPE
, ENC_BIG_ENDIAN
);
4872 /*----------------------------------------------------------------------------*/
4873 /* LBMR Option dissection functions. */
4874 /*----------------------------------------------------------------------------*/
4875 static int dissect_lbmr_opt_len(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo _U_
, proto_tree
* tree
)
4877 proto_tree
* subtree
= NULL
;
4878 proto_item
* subtree_item
= NULL
;
4881 subtree_item
= proto_tree_add_item(tree
, hf_lbmr_opt_len
, tvb
, offset
, L_LBMR_LBMR_OPT_SRC_ID_T
, ENC_NA
);
4882 subtree
= proto_item_add_subtree(subtree_item
, ett_lbmr_opt_len
);
4883 proto_tree_add_item(subtree
, hf_lbmr_opt_len_type
, tvb
, offset
+ O_LBMR_LBMR_OPT_LEN_T_TYPE
, L_LBMR_LBMR_OPT_LEN_T_TYPE
, ENC_BIG_ENDIAN
);
4884 proto_tree_add_item(subtree
, hf_lbmr_opt_len_len
, tvb
, offset
+ O_LBMR_LBMR_OPT_LEN_T_LEN
, L_LBMR_LBMR_OPT_LEN_T_LEN
, ENC_BIG_ENDIAN
);
4885 proto_tree_add_item(subtree
, hf_lbmr_opt_len_total_len
, tvb
, offset
+ O_LBMR_LBMR_OPT_LEN_T_TOTAL_LEN
, L_LBMR_LBMR_OPT_LEN_T_TOTAL_LEN
, ENC_BIG_ENDIAN
);
4886 len
= L_LBMR_LBMR_OPT_LEN_T
;
4890 static int dissect_lbmr_opt_src_id(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo _U_
, proto_tree
* tree
)
4892 proto_tree
* subtree
= NULL
;
4893 proto_item
* subtree_item
= NULL
;
4894 static int * const flags
[] =
4896 &hf_lbmr_opt_src_id_flags_ignore
,
4900 subtree_item
= proto_tree_add_item(tree
, hf_lbmr_opt_src_id
, tvb
, offset
, L_LBMR_LBMR_OPT_SRC_ID_T
, ENC_NA
);
4901 subtree
= proto_item_add_subtree(subtree_item
, ett_lbmr_opt_src_id
);
4902 proto_tree_add_item(subtree
, hf_lbmr_opt_src_id_type
, tvb
, offset
+ O_LBMR_LBMR_OPT_SRC_ID_T_TYPE
, L_LBMR_LBMR_OPT_SRC_ID_T_TYPE
, ENC_BIG_ENDIAN
);
4903 proto_tree_add_item(subtree
, hf_lbmr_opt_src_id_len
, tvb
, offset
+ O_LBMR_LBMR_OPT_SRC_ID_T_LEN
, L_LBMR_LBMR_OPT_SRC_ID_T_LEN
, ENC_BIG_ENDIAN
);
4904 proto_tree_add_bitmask(subtree
, tvb
, offset
+ O_LBMR_LBMR_OPT_SRC_ID_T_FLAGS
, hf_lbmr_opt_src_id_flags
, ett_lbmr_opt_src_id_flags
, flags
, ENC_BIG_ENDIAN
);
4905 proto_tree_add_item(subtree
, hf_lbmr_opt_src_id_src_id
, tvb
, offset
+ O_LBMR_LBMR_OPT_SRC_ID_T_SRC_ID
, L_LBMR_LBMR_OPT_SRC_ID_T_SRC_ID
, ENC_NA
);
4906 return (L_LBMR_LBMR_OPT_SRC_ID_T
);
4909 static int dissect_lbmr_opt_src_type(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo _U_
, proto_tree
* tree
)
4911 proto_tree
* subtree
= NULL
;
4912 proto_item
* subtree_item
= NULL
;
4913 static int * const flags
[] =
4915 &hf_lbmr_opt_src_type_flags_ignore
,
4919 subtree_item
= proto_tree_add_item(tree
, hf_lbmr_opt_src_type
, tvb
, offset
, L_LBMR_LBMR_OPT_SRC_TYPE_T
, ENC_NA
);
4920 subtree
= proto_item_add_subtree(subtree_item
, ett_lbmr_opt_src_type
);
4921 proto_tree_add_item(subtree
, hf_lbmr_opt_src_type_type
, tvb
, offset
+ O_LBMR_LBMR_OPT_SRC_TYPE_T_TYPE
, L_LBMR_LBMR_OPT_SRC_TYPE_T_TYPE
, ENC_BIG_ENDIAN
);
4922 proto_tree_add_item(subtree
, hf_lbmr_opt_src_type_len
, tvb
, offset
+ O_LBMR_LBMR_OPT_SRC_TYPE_T_LEN
, L_LBMR_LBMR_OPT_SRC_TYPE_T_LEN
, ENC_BIG_ENDIAN
);
4923 proto_tree_add_bitmask(subtree
, tvb
, offset
+ O_LBMR_LBMR_OPT_SRC_TYPE_T_FLAGS
, hf_lbmr_opt_src_type_flags
, ett_lbmr_opt_src_type_flags
, flags
, ENC_BIG_ENDIAN
);
4924 proto_tree_add_item(subtree
, hf_lbmr_opt_src_type_src_type
, tvb
, offset
+ O_LBMR_LBMR_OPT_SRC_TYPE_T_SRC_TYPE
, L_LBMR_LBMR_OPT_SRC_TYPE_T_SRC_TYPE
, ENC_BIG_ENDIAN
);
4925 return (L_LBMR_LBMR_OPT_SRC_TYPE_T
);
4928 static int dissect_lbmr_opt_version(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo _U_
, proto_tree
* tree
)
4930 proto_tree
* subtree
= NULL
;
4931 proto_item
* subtree_item
= NULL
;
4932 static int * const flags
[] =
4934 &hf_lbmr_opt_version_flags_ignore
,
4935 &hf_lbmr_opt_version_flags_ume
,
4936 &hf_lbmr_opt_version_flags_umq
,
4940 subtree_item
= proto_tree_add_item(tree
, hf_lbmr_opt_version
, tvb
, offset
, L_LBMR_LBMR_OPT_VERSION_T
, ENC_NA
);
4941 subtree
= proto_item_add_subtree(subtree_item
, ett_lbmr_opt_version
);
4942 proto_tree_add_item(subtree
, hf_lbmr_opt_version_type
, tvb
, offset
+ O_LBMR_LBMR_OPT_VERSION_T_TYPE
, L_LBMR_LBMR_OPT_VERSION_T_TYPE
, ENC_BIG_ENDIAN
);
4943 proto_tree_add_item(subtree
, hf_lbmr_opt_version_len
, tvb
, offset
+ O_LBMR_LBMR_OPT_VERSION_T_LEN
, L_LBMR_LBMR_OPT_VERSION_T_LEN
, ENC_BIG_ENDIAN
);
4944 proto_tree_add_bitmask(subtree
, tvb
, offset
+ O_LBMR_LBMR_OPT_VERSION_T_FLAGS
, hf_lbmr_opt_version_flags
, ett_lbmr_opt_version_flags
, flags
, ENC_BIG_ENDIAN
);
4945 proto_tree_add_item(subtree
, hf_lbmr_opt_version_version
, tvb
, offset
+ O_LBMR_LBMR_OPT_VERSION_T_VERSION
, L_LBMR_LBMR_OPT_VERSION_T_VERSION
, ENC_BIG_ENDIAN
);
4946 return (L_LBMR_LBMR_OPT_VERSION_T
);
4949 static int dissect_lbmr_opt_local_domain(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo _U_
, proto_tree
* tree
)
4951 proto_tree
* subtree
= NULL
;
4952 proto_item
* subtree_item
= NULL
;
4953 static int * const flags
[] =
4955 &hf_lbmr_opt_local_domain_flags_ignore
,
4956 &hf_lbmr_opt_local_domain_flags_viral
,
4960 subtree_item
= proto_tree_add_item(tree
, hf_lbmr_opt_local_domain
, tvb
, offset
, L_LBMR_LBMR_OPT_LOCAL_DOMAIN_T
, ENC_NA
);
4961 subtree
= proto_item_add_subtree(subtree_item
, ett_lbmr_opt_local_domain
);
4962 proto_tree_add_item(subtree
, hf_lbmr_opt_local_domain_type
, tvb
, offset
+ O_LBMR_LBMR_OPT_LOCAL_DOMAIN_T_TYPE
, L_LBMR_LBMR_OPT_LOCAL_DOMAIN_T_TYPE
, ENC_BIG_ENDIAN
);
4963 proto_tree_add_item(subtree
, hf_lbmr_opt_local_domain_len
, tvb
, offset
+ O_LBMR_LBMR_OPT_LOCAL_DOMAIN_T_LEN
, L_LBMR_LBMR_OPT_LOCAL_DOMAIN_T_LEN
, ENC_BIG_ENDIAN
);
4964 proto_tree_add_bitmask(subtree
, tvb
, offset
+ O_LBMR_LBMR_OPT_LOCAL_DOMAIN_T_FLAGS
, hf_lbmr_opt_local_domain_flags
, ett_lbmr_opt_local_domain_flags
, flags
, ENC_BIG_ENDIAN
);
4965 proto_tree_add_item(subtree
, hf_lbmr_opt_local_domain_local_domain_id
, tvb
, offset
+ O_LBMR_LBMR_OPT_LOCAL_DOMAIN_T_LOCAL_DOMAIN_ID
, L_LBMR_LBMR_OPT_LOCAL_DOMAIN_T_LOCAL_DOMAIN_ID
, ENC_BIG_ENDIAN
);
4966 return (L_LBMR_LBMR_OPT_LOCAL_DOMAIN_T
);
4969 static int dissect_lbmr_opt_unknown(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo
, proto_tree
* tree
)
4971 proto_tree
* subtree
= NULL
;
4972 proto_item
* subtree_item
= NULL
;
4974 proto_item
* type_item
= NULL
;
4975 uint8_t opt_type
= 0;
4977 subtree_item
= proto_tree_add_item(tree
, hf_lbmr_opt_unknown
, tvb
, offset
, -1, ENC_NA
);
4978 subtree
= proto_item_add_subtree(subtree_item
, ett_lbmr_opt_unknown
);
4979 opt_type
= tvb_get_uint8(tvb
, offset
+ O_LBMR_LBMR_OPT_HDR_T_TYPE
);
4980 type_item
= proto_tree_add_item(subtree
, hf_lbmr_opt_unknown_type
, tvb
, offset
+ O_LBMR_LBMR_OPT_HDR_T_TYPE
, L_LBMR_LBMR_OPT_HDR_T_TYPE
, ENC_BIG_ENDIAN
);
4981 len
= tvb_get_uint8(tvb
, offset
+ O_LBMR_LBMR_OPT_HDR_T_LEN
);
4982 proto_tree_add_item(subtree
, hf_lbmr_opt_unknown_len
, tvb
, offset
+ O_LBMR_LBMR_OPT_HDR_T_LEN
, L_LBMR_LBMR_OPT_HDR_T_LEN
, ENC_BIG_ENDIAN
);
4983 proto_tree_add_item(subtree
, hf_lbmr_opt_unknown_flags
, tvb
, offset
+ O_LBMR_LBMR_OPT_HDR_T_FLAGS
, L_LBMR_LBMR_OPT_HDR_T_FLAGS
, ENC_NA
);
4984 proto_tree_add_item(subtree
, hf_lbmr_opt_unknown_data
, tvb
, offset
+ L_LBMR_LBMR_OPT_HDR_T
, (int) len
- L_LBMR_LBMR_OPT_HDR_T
, ENC_NA
);
4985 proto_item_set_len(subtree_item
, (int) len
);
4986 expert_add_info_format(pinfo
, type_item
, &ei_lbmr_analysis_invalid_value
, "Unknown LBMR option type 0x%02x", opt_type
);
4990 static int dissect_lbmr_options(tvbuff_t
* tvb
, int offset
, packet_info
* pinfo
, proto_tree
* tree
)
4992 proto_tree
* opt_tree
= NULL
;
4993 proto_item
* ti
= NULL
;
4994 int curr_offset
= offset
;
4997 ti
= proto_tree_add_item(tree
, hf_lbmr_opts
, tvb
, curr_offset
, -1, ENC_NA
);
4998 opt_tree
= proto_item_add_subtree(ti
, ett_lbmr_opts
);
4999 while (tvb_reported_length_remaining(tvb
, curr_offset
) > 0)
5004 opt_type
= tvb_get_uint8(tvb
, curr_offset
+ O_LBMR_LBMR_OPT_HDR_T_TYPE
);
5007 case LBMR_LBMR_OPT_LEN_TYPE
:
5008 opt_len
= dissect_lbmr_opt_len(tvb
, curr_offset
, pinfo
, opt_tree
);
5010 case LBMR_LBMR_OPT_SRC_ID_TYPE
:
5011 opt_len
= dissect_lbmr_opt_src_id(tvb
, curr_offset
, pinfo
, opt_tree
);
5013 case LBMR_LBMR_OPT_SRC_TYPE_TYPE
:
5014 opt_len
= dissect_lbmr_opt_src_type(tvb
, curr_offset
, pinfo
, opt_tree
);
5016 case LBMR_LBMR_OPT_VERSION_TYPE
:
5017 opt_len
= dissect_lbmr_opt_version(tvb
, curr_offset
, pinfo
, opt_tree
);
5019 case LBMR_LBMR_OPT_LOCAL_DOMAIN_TYPE
:
5020 opt_len
= dissect_lbmr_opt_local_domain(tvb
, curr_offset
, pinfo
, opt_tree
);
5023 opt_len
= dissect_lbmr_opt_unknown(tvb
, curr_offset
, pinfo
, opt_tree
);
5027 curr_offset
+= opt_len
;
5032 static void lbmr_tap_queue_packet(packet_info
* pinfo
, const lbmr_contents_t
* contents
)
5034 const lbmr_topic_contents_t
* topic
;
5035 const lbmr_queue_contents_t
* queue
;
5037 switch (contents
->type
)
5039 case LBMR_CONTENTS_TOPIC
:
5040 topic
= &(contents
->contents
.topic
);
5041 if (topic
->tqr_count
> 0)
5043 tqr_node_t
* tqr
= topic
->tqr
;
5046 lbm_lbmr_topic_query_tap_info_t
* tqr_tap
= wmem_new0(wmem_packet_scope(), lbm_lbmr_topic_query_tap_info_t
);
5047 tqr_tap
->size
= (uint16_t) sizeof(lbm_lbmr_topic_query_tap_info_t
);
5048 tqr_tap
->topic_length
= (uint8_t)strlen(tqr
->topic
);
5049 memcpy(tqr_tap
->topic
, tqr
->topic
, tqr_tap
->topic_length
);
5050 tap_queue_packet(lbmr_topic_query_tap_handle
, pinfo
, (void *) tqr_tap
);
5054 if (topic
->tir_count
> 0)
5056 tir_node_t
* tir
= topic
->tir
;
5059 lbm_lbmr_topic_advertisement_tap_info_t
* tir_tap
= wmem_new0(wmem_packet_scope(), lbm_lbmr_topic_advertisement_tap_info_t
);
5060 tir_tap
->size
= (uint16_t) sizeof(lbm_lbmr_topic_advertisement_tap_info_t
);
5061 tir_tap
->topic_length
= (uint8_t)strlen(tir
->topic
);
5062 tir_tap
->source_length
= (uint8_t)strlen(tir
->source_string
);
5063 tir_tap
->topic_index
= tir
->idx
;
5064 memcpy(tir_tap
->topic
, tir
->topic
, tir_tap
->topic_length
);
5065 memcpy(tir_tap
->source
, tir
->source_string
, tir_tap
->source_length
);
5066 tap_queue_packet(lbmr_topic_advertisement_tap_handle
, pinfo
, (void *) tir_tap
);
5070 if (topic
->wctqr_count
> 0)
5072 wctqr_node_t
* wctqr
= topic
->wctqr
;
5073 while (wctqr
!= NULL
)
5075 lbm_lbmr_pattern_query_tap_info_t
* wctqr_tap
= wmem_new0(wmem_packet_scope(), lbm_lbmr_pattern_query_tap_info_t
);
5076 wctqr_tap
->size
= (uint16_t) sizeof(lbm_lbmr_pattern_query_tap_info_t
);
5077 wctqr_tap
->type
= wctqr
->type
;
5078 wctqr_tap
->pattern_length
= (uint8_t)strlen(wctqr
->pattern
);
5079 memcpy(wctqr_tap
->pattern
, wctqr
->pattern
, wctqr_tap
->pattern_length
);
5080 tap_queue_packet(lbmr_pattern_query_tap_handle
, pinfo
, (void *) wctqr_tap
);
5081 wctqr
= wctqr
->next
;
5085 case LBMR_CONTENTS_QUEUE
:
5086 queue
= &(contents
->contents
.queue
);
5087 if (queue
->qqr_count
> 0)
5089 qqr_node_t
* qqr
= queue
->qqr
;
5092 lbm_lbmr_queue_query_tap_info_t
* qqr_tap
= wmem_new0(wmem_packet_scope(), lbm_lbmr_queue_query_tap_info_t
);
5093 qqr_tap
->size
= (uint16_t) sizeof(lbm_lbmr_queue_query_tap_info_t
);
5094 qqr_tap
->queue_length
= (uint8_t)strlen(qqr
->queue
);
5095 memcpy(qqr_tap
->queue
, qqr
->queue
, qqr_tap
->queue_length
);
5096 tap_queue_packet(lbmr_queue_advertisement_tap_handle
, pinfo
, (void *) qqr_tap
);
5100 if (queue
->qir_count
> 0)
5102 qir_node_t
* qir
= queue
->qir
;
5105 lbm_lbmr_queue_advertisement_tap_info_t
* qir_tap
= wmem_new0(wmem_packet_scope(), lbm_lbmr_queue_advertisement_tap_info_t
);
5106 qir_tap
->size
= (uint16_t) sizeof(lbm_lbmr_queue_advertisement_tap_info_t
);
5107 qir_tap
->port
= qir
->port
;
5108 qir_tap
->queue_length
= (uint8_t)strlen(qir
->queue
);
5109 qir_tap
->topic_length
= (uint8_t)strlen(qir
->topic
);
5110 memcpy(qir_tap
->queue
, qir
->queue
, qir_tap
->queue_length
);
5111 memcpy(qir_tap
->topic
, qir
->topic
, qir_tap
->topic_length
);
5112 tap_queue_packet(lbmr_queue_query_tap_handle
, pinfo
, (void *) qir_tap
);
5122 /*----------------------------------------------------------------------------*/
5123 /* dissect_lbmr - The dissector for LBM Topic Resolution protocol. */
5124 /*----------------------------------------------------------------------------*/
5125 static int dissect_lbmr(tvbuff_t
* tvb
, packet_info
* pinfo
, proto_tree
* tree
, void * user_data _U_
)
5127 proto_tree
* lbmr_tree
= NULL
;
5128 proto_item
* ti
= NULL
;
5133 lbmr_contents_t
* contents
= NULL
;
5134 char * tag_name
= NULL
;
5135 int total_len_dissected
= 0;
5136 int len_dissected
= 0;
5137 tvbuff_t
* packet_tvb
= NULL
;
5138 proto_item
* lbmr_hdr_item
= NULL
;
5139 proto_tree
* lbmr_hdr_tree
= NULL
;
5141 col_set_str(pinfo
->cinfo
, COL_PROTOCOL
, "LBMR");
5144 tag_name
= lbmr_tag_find(pinfo
);
5146 col_clear(pinfo
->cinfo
, COL_INFO
);
5147 if (tag_name
!= NULL
)
5149 col_add_fstr(pinfo
->cinfo
, COL_INFO
, "[Tag: %s]", tag_name
);
5151 col_set_fence(pinfo
->cinfo
, COL_INFO
);
5153 ver_type
= tvb_get_uint8(tvb
, O_LBMR_HDR_T_VER_TYPE
);
5154 ver
= LBMR_HDR_VER(ver_type
);
5155 type
= LBMR_HDR_TYPE(ver_type
);
5157 total_len_dissected
= 0;
5160 if ((ver_type
& LBMR_HDR_TYPE_OPTS_MASK
) != 0)
5165 opt_type
= tvb_get_uint8(tvb
, -L_LBMR_LBMR_OPT_LEN_T
+ O_LBMR_LBMR_OPT_LEN_T_TYPE
);
5166 opt_len
= tvb_get_uint8(tvb
, -L_LBMR_LBMR_OPT_LEN_T
+ O_LBMR_LBMR_OPT_LEN_T_LEN
);
5167 if ((opt_type
== LBMR_LBMR_OPT_LEN_TYPE
) && (((int)opt_len
) == L_LBMR_LBMR_OPT_LEN_T
))
5169 int opt_total_len
= 0;
5172 packet_len
= tvb_reported_length_remaining(tvb
, 0);
5173 opt_total_len
= tvb_get_ntohis(tvb
, -L_LBMR_LBMR_OPT_LEN_T
+ O_LBMR_LBMR_OPT_LEN_T_TOTAL_LEN
);
5174 if (packet_len
> opt_total_len
)
5176 int tvb_len
= packet_len
- opt_total_len
;
5178 packet_tvb
= tvb_new_subset_length(tvb
, 0, tvb_len
);
5183 if (type
== LBMR_HDR_TYPE_EXT
)
5185 uint8_t ext_type
= 0;
5186 const char * ext_string
;
5187 proto_item
* ext_type_item
= NULL
;
5189 ext_type
= tvb_get_uint8(tvb
, O_LBMR_HDR_EXT_TYPE_T_EXT_TYPE
);
5190 ext_string
= val_to_str(ext_type
, lbmr_ext_packet_type
, "Unknown(0x%02x)");
5191 col_append_sep_fstr(pinfo
->cinfo
, COL_INFO
, " ", "ExtType %s", ext_string
);
5192 if (tag_name
!= NULL
)
5194 ti
= proto_tree_add_protocol_format(tree
, proto_lbmr
, tvb
, O_LBMR_HDR_EXT_TYPE_T_VER_TYPE
, -1, "LBM Topic Resolution Protocol (Tag: %s): Version %u, Type 0x%x (%s), ExtType %s",
5195 tag_name
, ver
, type
, val_to_str(type
, lbmr_packet_type
, "Unknown(0x%02x)"), ext_string
);
5199 ti
= proto_tree_add_protocol_format(tree
, proto_lbmr
, tvb
, O_LBMR_HDR_EXT_TYPE_T_VER_TYPE
, -1, "LBM Topic Resolution Protocol: Version %u, Type 0x%x (%s), ExtType %s",
5200 ver
, type
, val_to_str(type
, lbmr_packet_type
, "Unknown(0x%02x)"), ext_string
);
5202 lbmr_tree
= proto_item_add_subtree(ti
, ett_lbmr
);
5203 if (tag_name
!= NULL
)
5205 proto_item
* item
= NULL
;
5207 item
= proto_tree_add_string(lbmr_tree
, hf_lbmr_tag
, tvb
, 0, 0, tag_name
);
5208 proto_item_set_generated(item
);
5210 lbmr_hdr_item
= proto_tree_add_item(lbmr_tree
, hf_lbmr_hdr
, tvb
, 0, -1, ENC_NA
);
5211 lbmr_hdr_tree
= proto_item_add_subtree(lbmr_hdr_item
, ett_lbmr_hdr
);
5212 (void) format_ver_type(tvb
, 0, pinfo
, lbmr_hdr_tree
);
5213 ext_type_item
= proto_tree_add_item(lbmr_hdr_tree
, hf_lbmr_hdr_ext_type
, tvb
, O_LBMR_HDR_EXT_TYPE_T_EXT_TYPE
, L_LBMR_HDR_EXT_TYPE_T_EXT_TYPE
, ENC_BIG_ENDIAN
);
5215 /* ver_type and ext_type have already been processed. But their dissected length is included in the individual type dissections below. */
5218 case LBMR_HDR_EXT_TYPE_UME_PROXY_SRC_ELECT
:
5219 len_dissected
= dissect_lbmr_pser(packet_tvb
, offset
, pinfo
, lbmr_tree
);
5221 case LBMR_HDR_EXT_TYPE_UMQ_QUEUE_MGMT
:
5222 offset
+= L_LBMR_UMQ_QMGMT_HDR_T_VER_TYPE
+ L_LBMR_UMQ_QMGMT_HDR_T_EXT_TYPE
;
5223 total_len_dissected
+= L_LBMR_UMQ_QMGMT_HDR_T_VER_TYPE
+ L_LBMR_UMQ_QMGMT_HDR_T_EXT_TYPE
;
5224 len_dissected
= lbmr_dissect_umq_qmgmt(packet_tvb
, offset
- 2, pinfo
, lbmr_tree
);
5226 case LBMR_HDR_EXT_TYPE_CONTEXT_INFO
:
5227 len_dissected
= dissect_lbmr_ctxinfo(packet_tvb
, offset
, pinfo
, lbmr_tree
);
5229 case LBMR_HDR_EXT_TYPE_TOPIC_RES_REQUEST
:
5230 len_dissected
= dissect_lbmr_topic_res_request(packet_tvb
, offset
, pinfo
, lbmr_tree
);
5232 case LBMR_HDR_EXT_TYPE_TNWG_MSG
:
5233 len_dissected
= dissect_lbmr_tnwg(packet_tvb
, offset
, pinfo
, lbmr_tree
);
5235 case LBMR_HDR_EXT_TYPE_REMOTE_DOMAIN_ROUTE
:
5236 len_dissected
= dissect_lbmr_remote_domain_route(packet_tvb
, offset
, pinfo
, lbmr_tree
);
5238 case LBMR_HDR_EXT_TYPE_REMOTE_CONTEXT_INFO
:
5239 len_dissected
= dissect_lbmr_rctxinfo(packet_tvb
, offset
, pinfo
, lbmr_tree
);
5242 len_dissected
= L_LBMR_HDR_EXT_TYPE_T_VER_TYPE
+ L_LBMR_HDR_EXT_TYPE_T_EXT_TYPE
;
5243 expert_add_info_format(pinfo
, ext_type_item
, &ei_lbmr_analysis_invalid_value
, "Unknown LBMR extended type 0x%02x", ext_type
);
5246 offset
+= len_dissected
;
5247 total_len_dissected
+= len_dissected
;
5253 bool rd_keepalive
= false;
5254 bool topic_mgmt
= false;
5255 bool client_rd_keepalive
= false;
5256 bool zero_tirs_tqrs
= false;
5257 proto_item
* type_item
= NULL
;
5259 tqrs
= tvb_get_uint8(tvb
, O_LBMR_HDR_T_TQRS
);
5260 tirs
= tvb_get_ntohs(tvb
, O_LBMR_HDR_T_TIRS
);
5261 if ((tqrs
== 0) && (tirs
== 0))
5263 zero_tirs_tqrs
= true;
5265 if ((type
== LBMR_HDR_TYPE_NORMAL
) && zero_tirs_tqrs
)
5267 rd_keepalive
= true;
5269 else if (zero_tirs_tqrs
&& ((type
== LBMR_HDR_TYPE_UCAST_RCV_ALIVE
) || (type
== LBMR_HDR_TYPE_UCAST_SRC_ALIVE
)))
5271 client_rd_keepalive
= true;
5273 else if (type
== LBMR_HDR_TYPE_TOPIC_MGMT
)
5279 case LBMR_HDR_TYPE_QUEUE_RES
:
5280 col_append_sep_fstr(pinfo
->cinfo
, COL_INFO
, " ", "QQRs %u QIRs %" PRIu16
, tqrs
, tirs
);
5285 col_append_sep_str(pinfo
->cinfo
, COL_INFO
, " ", "Unicast Resolver Keepalive");
5287 else if (client_rd_keepalive
)
5289 if (type
== LBMR_HDR_TYPE_UCAST_RCV_ALIVE
)
5291 col_append_sep_str(pinfo
->cinfo
, COL_INFO
, " ", "Receiver Alive");
5295 col_append_sep_str(pinfo
->cinfo
, COL_INFO
, " ", "Source Alive");
5298 else if (topic_mgmt
)
5300 col_append_sep_str(pinfo
->cinfo
, COL_INFO
, " ", "Topic Management");
5304 col_append_sep_fstr(pinfo
->cinfo
, COL_INFO
, " ", "TQRs %u TIRs %" PRIu16
, tqrs
, tirs
);
5311 case LBMR_HDR_TYPE_QUEUE_RES
:
5312 if (tag_name
!= NULL
)
5314 ti
= proto_tree_add_protocol_format(tree
, proto_lbmr
, tvb
, O_LBMR_HDR_T_VER_TYPE
, -1, "LBM Topic Resolution Protocol (Tag: %s): Version %u, Type 0x%x (%s) QQRs %u, QIRs %" PRIu16
,
5315 tag_name
, ver
, type
, val_to_str(type
, lbmr_packet_type
, "Unknown(0x%02x)"), tqrs
, tirs
);
5319 ti
= proto_tree_add_protocol_format(tree
, proto_lbmr
, tvb
, O_LBMR_HDR_T_VER_TYPE
, -1, "LBM Topic Resolution Protocol: Version %u, Type 0x%x (%s) QQRs %u, QIRs %" PRIu16
,
5320 ver
, type
, val_to_str(type
, lbmr_packet_type
, "Unknown(0x%02x)"), tqrs
, tirs
);
5324 if (tag_name
!= NULL
)
5328 ti
= proto_tree_add_protocol_format(tree
, proto_lbmr
, tvb
, O_LBMR_HDR_T_VER_TYPE
, -1, "LBM Topic Resolution Protocol (Tag: %s): Version %u, Type 0x%x (%s) Unicast Resolver Keepalive",
5329 tag_name
, ver
, type
, val_to_str(type
, lbmr_packet_type
, "Unknown(0x%02x)"));
5331 else if (topic_mgmt
)
5333 ti
= proto_tree_add_protocol_format(tree
, proto_lbmr
, tvb
, O_LBMR_HDR_T_VER_TYPE
, -1, "LBM Topic Resolution Protocol (Tag: %s): Version %u, Type 0x%x (%s) Topic Management",
5334 tag_name
, ver
, type
, val_to_str(type
, lbmr_packet_type
, "Unknown(0x%02x)"));
5338 ti
= proto_tree_add_protocol_format(tree
, proto_lbmr
, tvb
, O_LBMR_HDR_T_VER_TYPE
, -1, "LBM Topic Resolution Protocol (Tag: %s): Version %u, Type 0x%x (%s) TQRs %u, TIRs %" PRIu16
,
5339 tag_name
, ver
, type
, val_to_str(type
, lbmr_packet_type
, "Unknown(0x%02x)"), tqrs
, tirs
);
5346 ti
= proto_tree_add_protocol_format(tree
, proto_lbmr
, tvb
, O_LBMR_HDR_T_VER_TYPE
, -1, "LBM Topic Resolution Protocol: Version %u, Type 0x%x (%s) Unicast Resolver Keepalive",
5347 ver
, type
, val_to_str(type
, lbmr_packet_type
, "Unknown(0x%02x)"));
5349 else if (topic_mgmt
)
5351 ti
= proto_tree_add_protocol_format(tree
, proto_lbmr
, tvb
, O_LBMR_HDR_T_VER_TYPE
, -1, "LBM Topic Resolution Protocol: Version %u, Type 0x%x (%s) Topic Management",
5352 ver
, type
, val_to_str(type
, lbmr_packet_type
, "Unknown(0x%02x)"));
5356 ti
= proto_tree_add_protocol_format(tree
, proto_lbmr
, tvb
, O_LBMR_HDR_T_VER_TYPE
, -1, "LBM Topic Resolution Protocol: Version %u, Type 0x%x (%s) TQRs %u, TIRs %" PRIu16
,
5357 ver
, type
, val_to_str(type
, lbmr_packet_type
, "Unknown(0x%02x)"), tqrs
, tirs
);
5362 lbmr_tree
= proto_item_add_subtree(ti
, ett_lbmr
);
5363 if (tag_name
!= NULL
)
5366 item
= proto_tree_add_string(lbmr_tree
, hf_lbmr_tag
, tvb
, 0, 0, tag_name
);
5367 proto_item_set_generated(item
);
5369 lbmr_hdr_item
= proto_tree_add_item(lbmr_tree
, hf_lbmr_hdr
, tvb
, 0, -1, ENC_NA
);
5370 lbmr_hdr_tree
= proto_item_add_subtree(lbmr_hdr_item
, ett_lbmr_hdr
);
5371 type_item
= format_ver_type(tvb
, 0, pinfo
, lbmr_hdr_tree
);
5374 case LBMR_HDR_TYPE_QUEUE_RES
:
5375 proto_tree_add_item(lbmr_hdr_tree
, hf_lbmr_hdr_qqrs
, tvb
, O_LBMR_HDR_T_TQRS
, L_LBMR_HDR_T_TQRS
, ENC_BIG_ENDIAN
);
5376 proto_tree_add_item(lbmr_hdr_tree
, hf_lbmr_hdr_qirs
, tvb
, O_LBMR_HDR_T_TIRS
, L_LBMR_HDR_T_TIRS
, ENC_BIG_ENDIAN
);
5379 proto_tree_add_item(lbmr_hdr_tree
, hf_lbmr_hdr_tqrs
, tvb
, O_LBMR_HDR_T_TQRS
, L_LBMR_HDR_T_TQRS
, ENC_BIG_ENDIAN
);
5380 proto_tree_add_item(lbmr_hdr_tree
, hf_lbmr_hdr_tirs
, tvb
, O_LBMR_HDR_T_TIRS
, L_LBMR_HDR_T_TIRS
, ENC_BIG_ENDIAN
);
5384 offset
= L_LBMR_HDR_T
;
5385 total_len_dissected
= L_LBMR_HDR_T
;
5386 contents
= wmem_new0(wmem_packet_scope(), lbmr_contents_t
);
5389 case LBMR_HDR_TYPE_QUEUE_RES
:
5390 contents
->type
= LBMR_CONTENTS_QUEUE
;
5393 len_dissected
= dissect_lbmr_qqrs(packet_tvb
, offset
, tqrs
, pinfo
, lbmr_tree
, contents
);
5394 total_len_dissected
+= len_dissected
;
5395 offset
+= len_dissected
;
5399 len_dissected
= dissect_lbmr_qirs(packet_tvb
, offset
, tirs
, pinfo
, lbmr_tree
, contents
);
5400 total_len_dissected
+= len_dissected
;
5401 offset
+= len_dissected
;
5403 lbmr_tap_queue_packet(pinfo
, contents
);
5405 case LBMR_HDR_TYPE_NORMAL
:
5406 case LBMR_HDR_TYPE_WC_TQRS
:
5409 contents
->type
= LBMR_CONTENTS_TOPIC
;
5412 bool wc_tqrs
= false;
5414 if (type
== LBMR_HDR_TYPE_WC_TQRS
)
5418 len_dissected
= dissect_lbmr_tqrs(packet_tvb
, offset
, tqrs
, pinfo
, lbmr_tree
, wc_tqrs
, contents
);
5419 total_len_dissected
+= len_dissected
;
5420 offset
+= len_dissected
;
5424 len_dissected
= dissect_lbmr_tirs(packet_tvb
, offset
, tirs
, pinfo
, lbmr_tree
, "TIRs", contents
);
5425 total_len_dissected
+= len_dissected
;
5426 offset
+= len_dissected
;
5428 lbmr_tap_queue_packet(pinfo
, contents
);
5431 case LBMR_HDR_TYPE_TOPIC_MGMT
:
5432 len_dissected
= dissect_lbmr_tmb(packet_tvb
, offset
, pinfo
, lbmr_tree
);
5433 total_len_dissected
+= len_dissected
;
5434 offset
+= len_dissected
;
5436 case LBMR_HDR_TYPE_UCAST_RCV_ALIVE
:
5437 case LBMR_HDR_TYPE_UCAST_SRC_ALIVE
:
5440 expert_add_info_format(pinfo
, type_item
, &ei_lbmr_analysis_invalid_value
, "Unknown LBMR type 0x%02x", type
);
5444 if ((tvb_reported_length_remaining(tvb
, offset
) > 0) && ((ver_type
& LBMR_HDR_TYPE_OPTS_MASK
) != 0))
5446 /* Process LBMR packet options. */
5447 len_dissected
= dissect_lbmr_options(tvb
, offset
, pinfo
, lbmr_tree
);
5448 total_len_dissected
+= len_dissected
;
5450 return (total_len_dissected
);
5453 static bool test_lbmr_packet(tvbuff_t
* tvb
, packet_info
* pinfo
, proto_tree
* tree
, void * user_data _U_
)
5455 lbmr_tag_entry_t entry
;
5456 bool valid_packet
= false;
5458 /* Must be a UDP packet. */
5459 if (pinfo
->ptype
!= PT_UDP
)
5463 /* Destination address must be IPV4 and 4 bytes in length. */
5464 if ((pinfo
->dst
.type
!= AT_IPv4
) || (pinfo
->dst
.len
!= 4))
5471 if (lbmr_tag_find(pinfo
) != NULL
)
5473 valid_packet
= true;
5479 entry
.mc_outgoing_udp_port
= lbmr_mc_outgoing_udp_port
;
5480 entry
.mc_incoming_udp_port
= lbmr_mc_incoming_udp_port
;
5481 entry
.mc_incoming_address
= NULL
;
5482 entry
.mc_incoming_address_val_h
= lbmr_mc_incoming_address_host
;
5483 entry
.mc_outgoing_address
= NULL
;
5484 entry
.mc_outgoing_address_val_h
= lbmr_mc_outgoing_address_host
;
5485 entry
.uc_port_high
= lbmr_uc_port_high
;
5486 entry
.uc_port_low
= lbmr_uc_port_low
;
5487 entry
.uc_dest_port
= lbmr_uc_dest_port
;
5488 entry
.uc_address
= NULL
;
5489 entry
.uc_address_val_h
= lbmr_uc_address_host
;
5490 valid_packet
= lbmr_match_packet(pinfo
, &entry
);
5494 dissect_lbmr(tvb
, pinfo
, tree
, NULL
);
5500 /* Register all the bits needed with the filtering engine */
5501 void proto_register_lbmr(void)
5503 static hf_register_info hf
[] =
5506 { "Tag", "lbmr.tag", FT_STRING
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5508 { "Header", "lbmr.hdr", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5510 { "Version", "lbmr.hdr.ver", FT_UINT8
, BASE_DEC
, NULL
, LBMR_HDR_VER_VER_MASK
, NULL
, HFILL
} },
5512 { "Options", "lbmr.hdr.opts", FT_BOOLEAN
, 8, TFS(&tfs_present_not_present
), LBMR_HDR_TYPE_OPTS_MASK
, "Set if LBMR options are present", HFILL
} },
5513 { &hf_lbmr_hdr_type
,
5514 { "Type", "lbmr.hdr.type", FT_UINT8
, BASE_HEX
, VALS(lbmr_packet_type
), LBMR_HDR_VER_TYPE_MASK
, NULL
, HFILL
} },
5515 { &hf_lbmr_hdr_tqrs
,
5516 { "Topic Query Records", "lbmr.hdr.tqrs", FT_UINT8
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5517 { &hf_lbmr_hdr_tirs
,
5518 { "Topic Information Records", "lbmr.hdr.tirs", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5519 { &hf_lbmr_hdr_qqrs
,
5520 { "Queue Query Records", "lbmr.hdr.qqrs", FT_UINT8
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5521 { &hf_lbmr_hdr_qirs
,
5522 { "Queue Information Records", "lbmr.hdr.qirs", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5523 { &hf_lbmr_hdr_ext_type
,
5524 { "Extended Type", "lbmr.hdr.ext_type", FT_UINT8
, BASE_HEX
, VALS(lbmr_ext_packet_type
), 0x0, NULL
, HFILL
} },
5526 { "TQRs", "lbmr.tqrs", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5528 { "TQR", "lbmr.tqr", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5529 { &hf_lbmr_tqr_pattern_type
,
5530 { "Pattern Type", "lbmr.tqr.pattern_type", FT_UINT8
, BASE_DEC
, VALS(lbm_wildcard_pattern_type
), 0x0, NULL
, HFILL
} },
5531 { &hf_lbmr_tqr_pattern
,
5532 { "Pattern", "lbmr.tqr.pattern", FT_STRING
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5533 { &hf_lbmr_tqr_name
,
5534 { "Topic Name", "lbmr.tqr.name", FT_STRING
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5536 { "TIRs", "lbmr.tirs", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5538 { "TIR", "lbmr.tir", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5539 { &hf_lbmr_tir_name
,
5540 { "Topic Name", "lbmr.tir.name", FT_STRING
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5541 { &hf_lbmr_tir_transport_opts
,
5542 { "Transport Options Present", "lbmr.tir.transport_opts", FT_BOOLEAN
, L_LBMR_TIR_T_TRANSPORT
* 8, TFS(&tfs_set_notset
), LBMR_TIR_OPTIONS
, "Set if transport options are present", HFILL
} },
5543 { &hf_lbmr_tir_transport_type
,
5544 { "Transport Type", "lbmr.tir.transport_type", FT_UINT8
, BASE_HEX
, VALS(lbmr_transport_type
), LBMR_TIR_TRANSPORT
, NULL
, HFILL
} },
5545 { &hf_lbmr_tir_tlen
,
5546 { "Transport Info Length", "lbmr.tir.tlen", FT_UINT8
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5548 { "TTL", "lbmr.tir.ttl", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5549 { &hf_lbmr_tir_index
,
5550 { "Index", "lbmr.tir.index", FT_UINT32
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5552 { "TCP Transport", "lbmr.tir.tcp", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5553 { &hf_lbmr_tir_tcp_ip
,
5554 { "Source IP", "lbmr.tir.tcp.ip", FT_IPv4
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5555 { &hf_lbmr_tir_tcp_session_id
,
5556 { "Session ID", "lbmr.tir.tcp.session_id", FT_UINT32
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5557 { &hf_lbmr_tir_tcp_port
,
5558 { "Source Port", "lbmr.tir.tcp.port", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5559 { &hf_lbmr_tir_lbtrm
,
5560 { "LBTRM Transport", "lbmr.tir.lbtrm", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5561 { &hf_lbmr_tir_lbtrm_src_addr
,
5562 { "Source IP", "lbmr.tir.lbtrm.srcip", FT_IPv4
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5563 { &hf_lbmr_tir_lbtrm_mcast_addr
,
5564 { "Multicast IP", "lbmr.tir.lbtrm.mcastip", FT_IPv4
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5565 { &hf_lbmr_tir_lbtrm_session_id
,
5566 { "Session ID", "lbmr.tir.lbtrm.sessid", FT_UINT32
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5567 { &hf_lbmr_tir_lbtrm_udp_dest_port
,
5568 { "Destination Port", "lbmr.tir.lbtrm.dport", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5569 { &hf_lbmr_tir_lbtrm_src_ucast_port
,
5570 { "Source Port", "lbmr.tir.lbtrm.sport", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5571 { &hf_lbmr_tir_lbtru
,
5572 { "LBTRU Transport", "lbmr.tir.lbtru", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5573 { &hf_lbmr_tir_lbtru_ip
,
5574 { "Source IP", "lbmr.tir.lbtru.ip", FT_IPv4
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5575 { &hf_lbmr_tir_lbtru_port
,
5576 { "Source Port", "lbmr.tir.lbtru.port", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5577 { &hf_lbmr_tir_lbtru_session_id
,
5578 { "Session ID", "lbmr.tir.lbtru.session_id", FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5579 { &hf_lbmr_tir_lbtipc
,
5580 { "LBTIPC Transport", "lbmr.tir.lbtipc", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5581 { &hf_lbmr_tir_lbtipc_host_id
,
5582 { "Host ID", "lbmr.tir.lbtipc.host_id", FT_UINT32
, BASE_HEX_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5583 { &hf_lbmr_tir_lbtipc_session_id
,
5584 { "Session ID", "lbmr.tir.lbtipc.session_id", FT_UINT32
, BASE_HEX_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5585 { &hf_lbmr_tir_lbtipc_xport_id
,
5586 { "Transport ID", "lbmr.tir.lbtipc.xport_id", FT_UINT16
, BASE_HEX_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5587 { &hf_lbmr_tir_lbtrdma
,
5588 { "LBTRDMA Transport", "lbmr.tir.lbtrdma", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5589 { &hf_lbmr_tir_lbtrdma_ip
,
5590 { "Source IP", "lbmr.tir.lbtrdma.ip", FT_IPv4
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5591 { &hf_lbmr_tir_lbtrdma_session_id
,
5592 { "Session ID", "lbmr.tir.lbtrdma.session_id", FT_UINT32
, BASE_HEX_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5593 { &hf_lbmr_tir_lbtrdma_port
,
5594 { "Port", "lbmr.tir.lbtrdma.port", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5595 { &hf_lbmr_tir_lbtsmx
,
5596 { "LBTSMX Transport", "lbmr.tir.lbtsmx", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5597 { &hf_lbmr_tir_lbtsmx_host_id
,
5598 { "Host ID", "lbmr.tir.lbtsmx.host_id", FT_UINT32
, BASE_HEX_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5599 { &hf_lbmr_tir_lbtsmx_session_id
,
5600 { "Session ID", "lbmr.tir.lbtsmx.session_id", FT_UINT32
, BASE_HEX_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5601 { &hf_lbmr_tir_lbtsmx_xport_id
,
5602 { "Transport ID", "lbmr.tir.lbtsmx.xport_id", FT_UINT16
, BASE_HEX_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5603 { &hf_lbmr_tir_channel
,
5604 { "Channel", "lbmr.tir.channel", FT_UINT64
, BASE_HEX_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5605 { &hf_lbmr_tir_unknown_transport
,
5606 { "Unknown Transport", "lbmr.tir.unknown_transport", FT_BYTES
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5608 { "Options", "lbmr.topts", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5609 { &hf_lbmr_topt_len
,
5610 { "Length Option", "lbmr.topt.len", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5611 { &hf_lbmr_topt_len_type
,
5612 { "Type", "lbmr.topt.len.type", FT_UINT8
, BASE_DEC
, VALS(lbmr_topic_option_type
), 0x0, NULL
, HFILL
} },
5613 { &hf_lbmr_topt_len_len
,
5614 { "Length", "lbmr.topt.len.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5615 { &hf_lbmr_topt_len_total_len
,
5616 { "Total Length", "lbmr.topt.len.total_len", FT_UINT16
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5617 { &hf_lbmr_topt_ume
,
5618 { "UME Option", "lbmr.topt.ume", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5619 { &hf_lbmr_topt_ume_type
,
5620 { "Type", "lbmr.topt.ume.type", FT_UINT8
, BASE_DEC
, VALS(lbmr_topic_option_type
), 0x0, NULL
, HFILL
} },
5621 { &hf_lbmr_topt_ume_len
,
5622 { "Length", "lbmr.topt.ume.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5623 { &hf_lbmr_topt_ume_flags
,
5624 { "Flags", "lbmr.topt.ume.flags", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5625 { &hf_lbmr_topt_ume_flags_ignore
,
5626 { "Ignore", "lbmr.topt.ume.flags.ignore", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_UME_T_FLAGS
* 8, TFS(&lbm_ignore_flag
), LBMR_TOPIC_OPT_UME_FLAG_IGNORE
, NULL
, HFILL
} },
5627 { &hf_lbmr_topt_ume_flags_latejoin
,
5628 { "Late Join", "lbmr.topt.ume.flags.latejoin", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_UME_T_FLAGS
* 8, TFS(&tfs_set_notset
), LBMR_TOPIC_OPT_UME_FLAG_LATEJOIN
, "If set, the source provides late join", HFILL
} },
5629 { &hf_lbmr_topt_ume_flags_store
,
5630 { "Store", "lbmr.topt.ume.flags.store", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_UME_T_FLAGS
* 8, TFS(&tfs_set_notset
), LBMR_TOPIC_OPT_UME_FLAG_STORE
, "If set, one or more stores are specified", HFILL
} },
5631 { &hf_lbmr_topt_ume_flags_qccap
,
5632 { "Q/C Capable", "lbmr.topt.ume.flags.qccap", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_UME_T_FLAGS
* 8, TFS(&tfs_set_notset
), LBMR_TOPIC_OPT_UME_FLAG_QCCAP
, "If set, the source supports quorun/consensus", HFILL
} },
5633 { &hf_lbmr_topt_ume_flags_acktosrc
,
5634 { "Send ACKs to Source", "lbmr.topt.ume.flags.acktosrc", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_UME_T_FLAGS
* 8, TFS(&tfs_set_notset
), LBMR_TOPIC_OPT_UME_FLAG_ACKTOSRC
, "If set, receivers send ACKs to the source", HFILL
} },
5635 { &hf_lbmr_topt_ume_store_tcp_port
,
5636 { "Store TCP Port", "lbmr.topt.ume.store_tcp_port", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5637 { &hf_lbmr_topt_ume_src_tcp_port
,
5638 { "Source TCP Port", "lbmr.topt.ume.src_tcp_port", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5639 { &hf_lbmr_topt_ume_store_tcp_addr
,
5640 { "Store TCP Address", "lbmr.topt.ume.store_tcp_addr", FT_IPv4
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5641 { &hf_lbmr_topt_ume_src_tcp_addr
,
5642 { "Source TCP Address", "lbmr.topt.ume.src_tcp_addr", FT_IPv4
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5643 { &hf_lbmr_topt_ume_src_reg_id
,
5644 { "Source Registration ID", "lbmr.topt.ume.src_reg_id", FT_UINT32
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5645 { &hf_lbmr_topt_ume_transport_idx
,
5646 { "Transport Index", "lbmr.topt.ume.transport_idx", FT_UINT32
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5647 { &hf_lbmr_topt_ume_high_seqnum
,
5648 { "High Sequence Number", "lbmr.topt.ume.high_seqnum", FT_UINT32
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5649 { &hf_lbmr_topt_ume_low_seqnum
,
5650 { "Low Sequence Number", "lbmr.topt.ume.low_seqnum", FT_UINT32
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5651 { &hf_lbmr_topt_ume_store
,
5652 { "UME Store Option", "lbmr.topt.ume_store", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5653 { &hf_lbmr_topt_ume_store_type
,
5654 { "Type", "lbmr.topt.ume_store.type", FT_UINT8
, BASE_DEC_HEX
, VALS(lbmr_topic_option_type
), 0x0, NULL
, HFILL
} },
5655 { &hf_lbmr_topt_ume_store_len
,
5656 { "Length", "lbmr.topt.ume_store.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5657 { &hf_lbmr_topt_ume_store_flags
,
5658 { "Flags", "lbmr.topt.ume_store.flags", FT_UINT8
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5659 { &hf_lbmr_topt_ume_store_flags_ignore
,
5660 { "Ignore", "lbmr.topt.ume_store.flags.ignore", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_UME_STORE_T_FLAGS
* 8, TFS(&lbm_ignore_flag
), LBMR_TOPIC_OPT_UME_STORE_FLAG_IGNORE
, NULL
, HFILL
} },
5661 { &hf_lbmr_topt_ume_store_grp_idx
,
5662 { "Group Index", "lbmr.topt.ume_store.grp_idx", FT_UINT8
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5663 { &hf_lbmr_topt_ume_store_store_tcp_port
,
5664 { "Store TCP Port", "lbmr.topt.ume_store.store_tcp_port", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5665 { &hf_lbmr_topt_ume_store_store_idx
,
5666 { "Store Index", "lbmr.topt.ume_store.store_idx", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5667 { &hf_lbmr_topt_ume_store_store_ip_addr
,
5668 { "Store IP Address", "lbmr.topt.ume_store.store_ip_addr", FT_IPv4
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5669 { &hf_lbmr_topt_ume_store_src_reg_id
,
5670 { "Source Registration ID", "lbmr.topt.ume_store.src_reg_id", FT_UINT32
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5671 { &hf_lbmr_topt_ume_store_group
,
5672 { "UME Store Group Option", "lbmr.topt.ume_store_group", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5673 { &hf_lbmr_topt_ume_store_group_type
,
5674 { "Type", "lbmr.topt.ume_store_group.type", FT_UINT8
, BASE_DEC_HEX
, VALS(lbmr_topic_option_type
), 0x0, NULL
, HFILL
} },
5675 { &hf_lbmr_topt_ume_store_group_len
,
5676 { "Length", "lbmr.topt.ume_store_group.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5677 { &hf_lbmr_topt_ume_store_group_flags
,
5678 { "Flags", "lbmr.topt.ume_store_group.flags", FT_UINT8
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5679 { &hf_lbmr_topt_ume_store_group_flags_ignore
,
5680 { "Ignore", "lbmr.topt.ume_store_group.flags.ignore", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_FLAGS
* 8, TFS(&lbm_ignore_flag
), LBMR_TOPIC_OPT_UME_STORE_GROUP_FLAG_IGNORE
, NULL
, HFILL
} },
5681 { &hf_lbmr_topt_ume_store_group_grp_idx
,
5682 { "Group Index", "lbmr.topt.ume_store_group.grp_idx", FT_UINT8
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5683 { &hf_lbmr_topt_ume_store_group_grp_sz
,
5684 { "Group Size", "lbmr.topt.ume_store_group.grp_sz", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5685 { &hf_lbmr_topt_ume_store_group_reserved
,
5686 { "Reserved", "lbmr.topt.ume_store_group.reserved", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5687 { &hf_lbmr_topt_latejoin
,
5688 { "Late Join Option", "lbmr.topt.latejoin", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5689 { &hf_lbmr_topt_latejoin_type
,
5690 { "Type", "lbmr.topt.latejoin.type", FT_UINT8
, BASE_DEC_HEX
, VALS(lbmr_topic_option_type
), 0x0, NULL
, HFILL
} },
5691 { &hf_lbmr_topt_latejoin_len
,
5692 { "Length", "lbmr.topt.latejoin.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5693 { &hf_lbmr_topt_latejoin_flags
,
5694 { "Flags", "lbmr.topt.latejoin.flags", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5695 { &hf_lbmr_topt_latejoin_flags_ignore
,
5696 { "Ignore", "lbmr.topt.latejoin.flags.ignore", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_LATEJOIN_T_FLAGS
* 8, TFS(&lbm_ignore_flag
), LBMR_TOPIC_OPT_LATEJOIN_FLAG_IGNORE
, NULL
, HFILL
} },
5697 { &hf_lbmr_topt_latejoin_flags_acktosrc
,
5698 { "Send ACKs to Source", "lbmr.topt.latejoin.flags.acktosrc", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_LATEJOIN_T_FLAGS
* 8, TFS(&tfs_set_notset
), LBMR_TOPIC_OPT_LATEJOIN_FLAG_ACKTOSRC
, "If set, ACKs are sent to source", HFILL
} },
5699 { &hf_lbmr_topt_latejoin_src_tcp_port
,
5700 { "Source TCP Port", "lbmr.topt.latejoin.src_tcp_port", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5701 { &hf_lbmr_topt_latejoin_reserved
,
5702 { "Reserved", "lbmr.topt.latejoin.reserved", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5703 { &hf_lbmr_topt_latejoin_src_ip_addr
,
5704 { "Source IP Address", "lbmr.topt.latejoin.src_ip_addr", FT_IPv4
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5705 { &hf_lbmr_topt_latejoin_transport_idx
,
5706 { "Transport Index", "lbmr.topt.latejoin.transport_idx", FT_UINT32
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5707 { &hf_lbmr_topt_latejoin_high_seqnum
,
5708 { "High Sequence Number", "lbmr.topt.latejoin.high_seqnum", FT_UINT32
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5709 { &hf_lbmr_topt_latejoin_low_seqnum
,
5710 { "Low Sequence Number", "lbmr.topt.latejoin.low_seqnum", FT_UINT32
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5711 { &hf_lbmr_topt_umq_rcridx
,
5712 { "Receiver Control Record Index Option", "lbmr.topt.umq_rcridx", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5713 { &hf_lbmr_topt_umq_rcridx_type
,
5714 { "Type", "lbmr.topt.umq_rcridx.type", FT_UINT8
, BASE_DEC_HEX
, VALS(lbmr_topic_option_type
), 0x0, NULL
, HFILL
} },
5715 { &hf_lbmr_topt_umq_rcridx_len
,
5716 { "Length", "lbmr.topt.umq_rcridx.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5717 { &hf_lbmr_topt_umq_rcridx_flags
,
5718 { "Flags", "lbmr.topt.umq_rcridx.flags", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5719 { &hf_lbmr_topt_umq_rcridx_flags_ignore
,
5720 { "Ignore", "lbmr.topt.umq_rcridx.flags.ignore", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_UMQ_RCRIDX_T_FLAGS
* 8, TFS(&lbm_ignore_flag
), LBMR_TOPIC_OPT_UMQ_RCRIDX_FLAG_IGNORE
, NULL
, HFILL
} },
5721 { &hf_lbmr_topt_umq_rcridx_rcr_idx
,
5722 { "Receiver Control Record Index", "lbmr.topt.umq_rcridx.rcr_idx", FT_UINT32
, BASE_HEX_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5723 { &hf_lbmr_topt_umq_qinfo
,
5724 { "Queue Info Option", "lbmr.topt.umq_qinfo", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5725 { &hf_lbmr_topt_umq_qinfo_type
,
5726 { "Type", "lbmr.topt.umq_qinfo.type", FT_UINT8
, BASE_DEC_HEX
, VALS(lbmr_topic_option_type
), 0x0, NULL
, HFILL
} },
5727 { &hf_lbmr_topt_umq_qinfo_len
,
5728 { "Length", "lbmr.topt.umq_qinfo.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5729 { &hf_lbmr_topt_umq_qinfo_flags
,
5730 { "Flags", "lbmr.topt.umq_qinfo.flags", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5731 { &hf_lbmr_topt_umq_qinfo_flags_ignore
,
5732 { "Ignore", "lbmr.topt.umq_qinfo.flags.ignore", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_T_FLAGS
* 8, TFS(&lbm_ignore_flag
), LBMR_TOPIC_OPT_UMQ_FLAG_IGNORE
, NULL
, HFILL
} },
5733 { &hf_lbmr_topt_umq_qinfo_flags_queue
,
5734 { "Queue", "lbmr.topt.umq_qinfo.flags.queue", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_T_FLAGS
* 8, TFS(&tfs_set_notset
), LBMR_TOPIC_OPT_UMQ_FLAG_QUEUE
, NULL
, HFILL
} },
5735 { &hf_lbmr_topt_umq_qinfo_flags_rcvlisten
,
5736 { "Receiver Listen", "lbmr.topt.umq_qinfo.flags.rcvlisten", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_T_FLAGS
* 8, TFS(&tfs_set_notset
), LBMR_TOPIC_OPT_UMQ_FLAG_RCVLISTEN
, NULL
, HFILL
} },
5737 { &hf_lbmr_topt_umq_qinfo_flags_control
,
5738 { "Control", "lbmr.topt.umq_qinfo.flags.control", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_T_FLAGS
* 8, TFS(&tfs_set_notset
), LBMR_TOPIC_OPT_UMQ_FLAG_CONTROL
, NULL
, HFILL
} },
5739 { &hf_lbmr_topt_umq_qinfo_flags_srcrcvlisten
,
5740 { "Source Receiver Listen", "lbmr.topt.umq_qinfo.flags.srcrcvlisten", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_T_FLAGS
* 8, TFS(&tfs_set_notset
), LBMR_TOPIC_OPT_UMQ_FLAG_SRCRCVLISTEN
, NULL
, HFILL
} },
5741 { &hf_lbmr_topt_umq_qinfo_flags_participants_only
,
5742 { "Participants Only", "lbmr.topt.umq_qinfo.flags.participants_only", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_T_FLAGS
* 8, TFS(&tfs_set_notset
), LBMR_TOPIC_OPT_UMQ_FLAG_PARTICIPANTS_ONLY
, NULL
, HFILL
} },
5743 { &hf_lbmr_topt_umq_qinfo_queue
,
5744 { "Queue", "lbmr.topt.ume_qinfo.queue", FT_STRING
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5745 { &hf_lbmr_topt_cost
,
5746 { "Cost Option", "lbmr.topt.cost", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5747 { &hf_lbmr_topt_cost_type
,
5748 { "Type", "lbmr.topt.cost.type", FT_UINT8
, BASE_DEC_HEX
, VALS(lbmr_topic_option_type
), 0x0, NULL
, HFILL
} },
5749 { &hf_lbmr_topt_cost_len
,
5750 { "Length", "lbmr.topt.cost.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5751 { &hf_lbmr_topt_cost_flags
,
5752 { "Flags", "lbmr.topt.cost.flags", FT_UINT8
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5753 { &hf_lbmr_topt_cost_flags_ignore
,
5754 { "Ignore", "lbmr.topt.cost.flags.ignore", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_COST_T_FLAGS
* 8, TFS(&lbm_ignore_flag
), LBMR_TOPIC_OPT_COST_FLAG_IGNORE
, NULL
, HFILL
} },
5755 { &hf_lbmr_topt_cost_hop_count
,
5756 { "Hop count", "lbmr.topt.cost.hop_count", FT_UINT8
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5757 { &hf_lbmr_topt_cost_cost
,
5758 { "Cost", "lbmr.topt.cost.cost", FT_INT32
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5759 { &hf_lbmr_topt_otid
,
5760 { "Originating Transport ID Option", "lbmr.topt.otid", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5761 { &hf_lbmr_topt_otid_type
,
5762 { "Type", "lbmr.topt.otid.type", FT_UINT8
, BASE_DEC_HEX
, VALS(lbmr_topic_option_type
), 0x0, NULL
, HFILL
} },
5763 { &hf_lbmr_topt_otid_len
,
5764 { "Length", "lbmr.topt.otid.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5765 { &hf_lbmr_topt_otid_flags
,
5766 { "Flags", "lbmr.topt.otid.flags", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5767 { &hf_lbmr_topt_otid_flags_ignore
,
5768 { "Ignore", "lbmr.topt.otid.flags.ignore", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_OTID_T_FLAGS
* 8, TFS(&lbm_ignore_flag
), LBMR_TOPIC_OPT_OTID_FLAG_IGNORE
, NULL
, HFILL
} },
5769 { &hf_lbmr_topt_otid_originating_transport
,
5770 { "Originating Transport ID", "lbmr.topt.otid.originating_transport", FT_BYTES
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5771 { &hf_lbmr_topt_ctxinst
,
5772 { "Context Instance Option", "lbmr.topt.ctxinst", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5773 { &hf_lbmr_topt_ctxinst_type
,
5774 { "Type", "lbmr.topt.ctxinst.type", FT_UINT8
, BASE_DEC_HEX
, VALS(lbmr_topic_option_type
), 0x0, NULL
, HFILL
} },
5775 { &hf_lbmr_topt_ctxinst_len
,
5776 { "Length", "lbmr.topt.ctxinst.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5777 { &hf_lbmr_topt_ctxinst_flags
,
5778 { "Flags", "lbmr.topt.ctxinst.flags", FT_UINT8
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5779 { &hf_lbmr_topt_ctxinst_flags_ignore
,
5780 { "Ignore", "lbmr.topt.ctxinst.flags.ignore", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_CTXINST_T_FLAGS
* 8, TFS(&lbm_ignore_flag
), LBMR_TOPIC_OPT_CTXINST_FLAG_IGNORE
, NULL
, HFILL
} },
5781 { &hf_lbmr_topt_ctxinst_res
,
5782 { "Reserved", "lbmr.topt.ctxinst.res", FT_UINT8
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5783 { &hf_lbmr_topt_ctxinst_ctxinst
,
5784 { "Context Instance", "lbmr.topt.ctxinst.ctxinst", FT_BYTES
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5785 { &hf_lbmr_topt_ctxinsts
,
5786 { "Store Context Instance Option", "lbmr.topt.ctxinsts", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5787 { &hf_lbmr_topt_ctxinsts_type
,
5788 { "Type", "lbmr.topt.ctxinsts.type", FT_UINT8
, BASE_DEC_HEX
, VALS(lbmr_topic_option_type
), 0x0, NULL
, HFILL
} },
5789 { &hf_lbmr_topt_ctxinsts_len
,
5790 { "Length", "lbmr.topt.ctxinsts.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5791 { &hf_lbmr_topt_ctxinsts_flags
,
5792 { "Flags", "lbmr.topt.ctxinsts.flags", FT_UINT8
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5793 { &hf_lbmr_topt_ctxinsts_flags_ignore
,
5794 { "Ignore", "lbmr.topt.ctxinsts.flags.ignore", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_CTXINSTS_T_FLAGS
* 8, TFS(&lbm_ignore_flag
), LBMR_TOPIC_OPT_CTXINSTS_FLAG_IGNORE
, NULL
, HFILL
} },
5795 { &hf_lbmr_topt_ctxinsts_idx
,
5796 { "Index", "lbmr.topt.ctxinsts.idx", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5797 { &hf_lbmr_topt_ctxinsts_ctxinst
,
5798 { "Store Context Instance", "lbmr.topt.ctxinsts.ctxinsts", FT_BYTES
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5799 { &hf_lbmr_topt_ulb
,
5800 { "ULB Option", "lbmr.topt.ulb", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5801 { &hf_lbmr_topt_ulb_type
,
5802 { "Type", "lbmr.topt.ulb.type", FT_UINT8
, BASE_DEC_HEX
, VALS(lbmr_topic_option_type
), 0x0, NULL
, HFILL
} },
5803 { &hf_lbmr_topt_ulb_len
,
5804 { "Length", "lbmr.topt.ulb.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5805 { &hf_lbmr_topt_ulb_flags
,
5806 { "Flags", "lbmr.topt.ulb.flags", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5807 { &hf_lbmr_topt_ulb_flags_ignore
,
5808 { "Ignore", "lbmr.topt.ulb.flags.ignore", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_ULB_T_FLAGS
* 8, TFS(&lbm_ignore_flag
), LBMR_TOPIC_OPT_ULB_FLAG_IGNORE
, NULL
, HFILL
} },
5809 { &hf_lbmr_topt_ulb_queue_id
,
5810 { "Queue ID", "lbmr.topt.ulb.queue_id", FT_UINT32
, BASE_HEX_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5811 { &hf_lbmr_topt_ulb_regid
,
5812 { "Registration ID", "lbmr.topt.ulb.regid", FT_UINT64
, BASE_HEX_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5813 { &hf_lbmr_topt_ulb_ulb_src_id
,
5814 { "ULB Source ID", "lbmr.topt.ulb.ulb_src_id", FT_UINT32
, BASE_HEX_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5815 { &hf_lbmr_topt_ulb_src_ip_addr
,
5816 { "Source IP Address", "lbmr.topt.ulb.src_ip_addr", FT_IPv4
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5817 { &hf_lbmr_topt_ulb_src_tcp_port
,
5818 { "Source TCP Port", "lbmr.topt.ulb.src_tcp_port", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5819 { &hf_lbmr_topt_ulb_reserved
,
5820 { "Reserved", "lbmr.topt.ulb.reserved", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5821 { &hf_lbmr_topt_ctxinstq
,
5822 { "Queue Context Instance Option", "lbmr.topt.ctxinstq", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5823 { &hf_lbmr_topt_ctxinstq_type
,
5824 { "Type", "lbmr.topt.ctxinstq.type", FT_UINT8
, BASE_DEC_HEX
, VALS(lbmr_topic_option_type
), 0x0, NULL
, HFILL
} },
5825 { &hf_lbmr_topt_ctxinstq_len
,
5826 { "Length", "lbmr.topt.ctxinstq.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5827 { &hf_lbmr_topt_ctxinstq_flags
,
5828 { "Flags", "lbmr.topt.ctxinstq.flags", FT_UINT8
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5829 { &hf_lbmr_topt_ctxinstq_flags_ignore
,
5830 { "Ignore", "lbmr.topt.ctxinstq.flags.ignore", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_CTXINSTQ_T_FLAGS
* 8, TFS(&lbm_ignore_flag
), LBMR_TOPIC_OPT_CTXINSTQ_FLAG_IGNORE
, NULL
, HFILL
} },
5831 { &hf_lbmr_topt_ctxinstq_idx
,
5832 { "Index", "lbmr.topt.ctxinstq.idx", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5833 { &hf_lbmr_topt_ctxinstq_ctxinst
,
5834 { "Store Context Instance", "lbmr.topt.ctxinstq.ctxinstq", FT_BYTES
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5835 { &hf_lbmr_topt_domain_id
,
5836 { "Domain ID Option", "lbmr.topt.domain_id", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5837 { &hf_lbmr_topt_domain_id_type
,
5838 { "Type", "lbmr.topt.domain_id.type", FT_UINT8
, BASE_DEC_HEX
, VALS(lbmr_topic_option_type
), 0x0, NULL
, HFILL
} },
5839 { &hf_lbmr_topt_domain_id_len
,
5840 { "Length", "lbmr.topt.domain_id.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5841 { &hf_lbmr_topt_domain_id_flags
,
5842 { "Flags", "lbmr.topt.domain_id.flags", FT_UINT8
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5843 { &hf_lbmr_topt_domain_id_flags_ignore
,
5844 { "Ignore", "lbmr.topt.domain_id.flags.ignore", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_DOMAIN_ID_T_FLAGS
* 8, TFS(&lbm_ignore_flag
), LBMR_TOPIC_OPT_DOMAIN_ID_FLAG_IGNORE
, NULL
, HFILL
} },
5845 { &hf_lbmr_topt_domain_id_domain_id
,
5846 { "Domain ID", "lbmr.topt.domain_id.domain_id", FT_UINT32
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5847 { &hf_lbmr_topt_exfunc
,
5848 { "Extended Functionality Option", "lbmr.topt.exfunc", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5849 { &hf_lbmr_topt_exfunc_type
,
5850 { "Type", "lbmr.topt.exfunc.type", FT_UINT8
, BASE_DEC_HEX
, VALS(lbmr_topic_option_type
), 0x0, NULL
, HFILL
} },
5851 { &hf_lbmr_topt_exfunc_len
,
5852 { "Length", "lbmr.topt.exfunc.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5853 { &hf_lbmr_topt_exfunc_flags
,
5854 { "Flags", "lbmr.topt.exfunc.flags", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5855 { &hf_lbmr_topt_exfunc_flags_ignore
,
5856 { "Ignore", "lbmr.topt.exfunc.flags.ignore", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_EXFUNC_T_FLAGS
* 8, TFS(&lbm_ignore_flag
), LBMR_TOPIC_OPT_EXFUNC_FLAG_IGNORE
, NULL
, HFILL
} },
5857 { &hf_lbmr_topt_exfunc_src_tcp_port
,
5858 { "Source TCP Port", "lbmr.topt.exfunc.src_tcp_port", FT_UINT16
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5859 { &hf_lbmr_topt_exfunc_reserved
,
5860 { "Reserved", "lbmr.topt.exfunc.reserved", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5861 { &hf_lbmr_topt_exfunc_src_ip_addr
,
5862 { "Source IP Address", "lbmr.topt.exfunc.src_ip_addr", FT_IPv4
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5863 { &hf_lbmr_topt_exfunc_functionality_flags
,
5864 { "Functionality Flags", "lbmr.topt.exfunc.functionality_flags", FT_UINT32
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5865 { &hf_lbmr_topt_exfunc_functionality_flags_ulb
,
5866 { "ULB", "lbmr.topt.exfunc.functionality_flags.ulb", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_EXFUNC_T_FUNCTIONALITY_FLAGS
* 8, TFS(&tfs_capable_not_capable
), LBM_TOPIC_OPT_EXFUNC_FFLAG_ULB
, "Set if ULB supported", HFILL
} },
5867 { &hf_lbmr_topt_exfunc_functionality_flags_umq
,
5868 { "UMQ", "lbmr.topt.exfunc.functionality_flags.umq", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_EXFUNC_T_FUNCTIONALITY_FLAGS
* 8, TFS(&tfs_capable_not_capable
), LBM_TOPIC_OPT_EXFUNC_FFLAG_UMQ
, "Set if UMQ supported", HFILL
} },
5869 { &hf_lbmr_topt_exfunc_functionality_flags_ume
,
5870 { "UME", "lbmr.topt.exfunc.functionality_flags.ume", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_EXFUNC_T_FUNCTIONALITY_FLAGS
* 8, TFS(&tfs_capable_not_capable
), LBM_TOPIC_OPT_EXFUNC_FFLAG_UME
, "Set if UME supported", HFILL
} },
5871 { &hf_lbmr_topt_exfunc_functionality_flags_lj
,
5872 { "Late Join", "lbmr.topt.exfunc.functionality_flags.lj", FT_BOOLEAN
, L_LBMR_TOPIC_OPT_EXFUNC_T_FUNCTIONALITY_FLAGS
* 8, TFS(&tfs_capable_not_capable
), LBM_TOPIC_OPT_EXFUNC_FFLAG_LJ
, "Set if late join supported", HFILL
} },
5873 { &hf_lbmr_topt_unknown
,
5874 { "Unknown Option", "lbmr.topt.unknown", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5875 { &hf_lbmr_topt_unknown_type
,
5876 { "Type", "lbmr.topt.unknown.type", FT_UINT8
, BASE_DEC_HEX
, VALS(lbmr_topic_option_type
), 0x0, NULL
, HFILL
} },
5877 { &hf_lbmr_topt_unknown_len
,
5878 { "Length", "lbmr.topt.unknown.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5879 { &hf_lbmr_topt_unknown_flags
,
5880 { "Flags", "lbmr.topt.unknown.flags", FT_UINT8
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5881 { &hf_lbmr_topt_unknown_data
,
5882 { "Data", "lbmr.topt.unknown.data", FT_BYTES
, FT_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5884 { "Topic Management Block", "lbmr.tmb", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5886 { "Length", "lbmr.tmb.len", FT_UINT16
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5887 { &hf_lbmr_tmb_tmrs
,
5888 { "Topic Management Record Count", "lbmr.tmb.tmrs", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5889 { &hf_lbmr_tmb_tmr_list
,
5890 { "Topic Management Records", "lbmr.tmb.tmr_list", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5892 { "Topic Management Record", "lbmr.tmb.tmr", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5894 { "Length", "lbmr.tmb.tmr.len", FT_UINT16
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5895 { &hf_lbmr_tmr_type
,
5896 { "TMR Type", "lbmr.tmb.tmr.type", FT_UINT8
, BASE_DEC
, VALS(lbmr_tmr_type
), 0x0, NULL
, HFILL
} },
5897 { &hf_lbmr_tmr_flags
,
5898 { "Flags", "lbmr.tmb.tmr.flags", FT_UINT8
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5899 { &hf_lbmr_tmr_flags_response
,
5900 { "Response", "lbmr.tmb.tmr.flags.response", FT_BOOLEAN
, L_LBMR_TMR_T_FLAGS
* 8, TFS(&tfs_set_notset
), LBMR_TMR_FLAG_RESPONSE
, "Set if this is a response", HFILL
} },
5901 { &hf_lbmr_tmr_flags_wildcard_pcre
,
5902 { "PCRE pattern", "lbmr.tmb.tmr.flags.wildcard_pcre", FT_BOOLEAN
, L_LBMR_TMR_T_FLAGS
* 8, TFS(&tfs_set_notset
), LBMR_TMR_FLAG_WILDCARD_PCRE
, "Set if topic is a PCRE pattern", HFILL
} },
5903 { &hf_lbmr_tmr_flags_wildcard_regex
,
5904 { "Regex pattern", "lbmr.tmb.tmr.flags.wildcard_regex", FT_BOOLEAN
, L_LBMR_TMR_T_FLAGS
* 8, TFS(&tfs_set_notset
), LBMR_TMR_FLAG_WILDCARD_REGEX
, "Set if topic is a Regex pattern", HFILL
} },
5905 { &hf_lbmr_tmr_name
,
5906 { "Topic Name", "lbmr.tmb.tmr.name", FT_STRING
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5907 { &hf_lbmr_pser_dep_type
,
5908 { "Dependent Type", "lbmr.pser.dep_type", FT_UINT16
, BASE_DEC_HEX
, VALS(lbmr_pser_dependent_type
), 0x0, NULL
, HFILL
} },
5909 { &hf_lbmr_pser_len
,
5910 { "Length", "lbmr.pser.len", FT_UINT16
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5911 { &hf_lbmr_pser_flags
,
5912 { "Flags", "lbmr.pser.flags", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5913 { &hf_lbmr_pser_flags_option
,
5914 { "Option", "lbmr.pser.flags.option", FT_BOOLEAN
, L_LBMR_PSER_T_FLAGS
* 8, TFS(&tfs_set_notset
), LBMR_PSER_OPT_FLAG
, NULL
, HFILL
} },
5915 { &hf_lbmr_pser_source_ip
,
5916 { "Source IP", "lbmr.pser.source_ip", FT_IPv4
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5917 { &hf_lbmr_pser_store_ip
,
5918 { "Store IP", "lbmr.pser.store_ip", FT_IPv4
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5919 { &hf_lbmr_pser_transport_idx
,
5920 { "Transport Index", "lbmr.pser.transport_idx", FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5921 { &hf_lbmr_pser_topic_idx
,
5922 { "Topic Index", "lbmr.pser.topic_idx", FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5923 { &hf_lbmr_pser_source_port
,
5924 { "Source Port", "lbmr.pser.source_port", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5925 { &hf_lbmr_pser_store_port
,
5926 { "Store Port", "lbmr.pser.store_port", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5927 { &hf_lbmr_pser_topic
,
5928 { "Topic", "lbmr.pser.topic", FT_STRING
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5929 { &hf_lbmr_pser_opts
,
5930 { "Options", "lbmr.pser.opts", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5931 { &hf_lbmr_pser_optlen
,
5932 { "Option Length", "lbmr.pser.opt.optlen", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5933 { &hf_lbmr_pser_optlen_type
,
5934 { "Type", "lbmr.pser.opt.optlen.type", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5935 { &hf_lbmr_pser_optlen_optlen
,
5936 { "Options Length", "lbmr.pser.opt.optlen.optlen", FT_UINT16
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5937 { &hf_lbmr_pser_opt_ctxinst
,
5938 { "Context Instance Option", "lbmr.pser.opt.ctxinst", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5939 { &hf_lbmr_pser_opt_ctxinst_len
,
5940 { "Length", "lbmr.pser.opt.ctxinst.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5941 { &hf_lbmr_pser_opt_ctxinst_type
,
5942 { "Type", "lbmr.pser.opt.ctxinst.type", FT_UINT8
, BASE_DEC_HEX
, VALS(lbmr_pser_option_type
), 0x0, NULL
, HFILL
} },
5943 { &hf_lbmr_pser_opt_ctxinst_ctxinst
,
5944 { "Context Instance", "lbmr.pser.opt.ctxinst.ctxinst", FT_BYTES
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5946 { "QQRs", "lbmr.qqr", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5947 { &hf_lbmr_qqr_name
,
5948 { "Queue name", "lbmr.qqr.name", FT_STRING
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5950 { "QIRs", "lbmr.qirs", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5952 { "QIR", "lbmr.qir", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5953 { &hf_lbmr_qir_queue_name
,
5954 { "Queue name", "lbmr.qir.qname", FT_STRING
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5955 { &hf_lbmr_qir_topic_name
,
5956 { "Topic name", "lbmr.qir.tname", FT_STRING
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5957 { &hf_lbmr_qir_queue_id
,
5958 { "Queue ID", "lbmr.qir.queue_id", FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5959 { &hf_lbmr_qir_queue_ver
,
5960 { "Queue Version", "lbmr.qir.queue_ver", FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5961 { &hf_lbmr_qir_queue_prev_ver
,
5962 { "Queue Previous Version", "lbmr.qir.queue_prev_ver", FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5963 { &hf_lbmr_qir_option_flag
,
5964 { "QIR Options Present", "lbmr.qir.opts", FT_BOOLEAN
, L_LBMR_QIR_T_GRP_BLKS
* 8, TFS(&tfs_set_notset
), LBMR_QIR_OPTIONS
, NULL
, HFILL
} },
5965 { &hf_lbmr_qir_grp_blks
,
5966 { "Group Block Count", "lbmr.qir.grp_blks", FT_UINT16
, BASE_DEC_HEX
, NULL
, LBMR_QIR_GRP_BLOCKS_MASK
, NULL
, HFILL
} },
5967 { &hf_lbmr_qir_queue_blks
,
5968 { "Queue Blocks", "lbmr.qir.queue_blks", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5969 { &hf_lbmr_qir_grps
,
5970 { "Groups", "lbmr.qir.grps", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5971 { &hf_lbmr_qir_grp_blk
,
5972 { "Group Block", "lbmr.qir.grp", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5973 { &hf_lbmr_qir_grp_blk_grp_idx
,
5974 { "Group Index", "lbmr.qir.grp.grp_idx", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5975 { &hf_lbmr_qir_grp_blk_grp_sz
,
5976 { "Group Size", "lbmr.qir.grp.grp_sz", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5977 { &hf_lbmr_qir_queues
,
5978 { "Queues", "lbmr.qir.queues", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5979 { &hf_lbmr_qir_queue_blk
,
5980 { "Queue Block", "lbmr.qir.queue", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5981 { &hf_lbmr_qir_queue_blk_ip
,
5982 { "IP Address", "lbmr.qir.queue.ip", FT_IPv4
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5983 { &hf_lbmr_qir_queue_blk_port
,
5984 { "Port", "lbmr.qir.queue.port", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5985 { &hf_lbmr_qir_queue_blk_idx
,
5986 { "Index", "lbmr.qir.queue.idx", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5987 { &hf_lbmr_qir_queue_blk_grp_idx
,
5988 { "Group Index", "lbmr.qir.queue.grp_idx", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5989 { &hf_lbmr_qir_queue_blk_reserved
,
5990 { "Reserved", "lbmr.qir.queue.reserved", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
5992 { "Options", "lbmr.opt", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5994 { "Length Option", "lbmr.opt.len", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
5995 { &hf_lbmr_opt_len_type
,
5996 { "Type", "lbmr.opt.len.type", FT_UINT8
, BASE_HEX_DEC
, VALS(lbmr_option_type
), 0x0, NULL
, HFILL
} },
5997 { &hf_lbmr_opt_len_len
,
5998 { "Length", "lbmr.opt.len.len", FT_UINT8
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
5999 { &hf_lbmr_opt_len_total_len
,
6000 { "Total Length", "lbmr.opt.len.total_len", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
6001 { &hf_lbmr_opt_src_id
,
6002 { "Source ID Option", "lbmr.opt.src_id", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6003 { &hf_lbmr_opt_src_id_type
,
6004 { "Type", "lbmr.opt.src_id.type", FT_UINT8
, BASE_HEX_DEC
, VALS(lbmr_option_type
), 0x0, NULL
, HFILL
} },
6005 { &hf_lbmr_opt_src_id_len
,
6006 { "Length", "lbmr.opt.src_id.len", FT_UINT8
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
6007 { &hf_lbmr_opt_src_id_flags
,
6008 { "Flags", "lbmr.opt.src_id.flags", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6009 { &hf_lbmr_opt_src_id_flags_ignore
,
6010 { "Ignore", "lbmr.opt.src_id.flags.ignore", FT_BOOLEAN
, L_LBMR_LBMR_OPT_SRC_ID_T_FLAGS
* 8, TFS(&lbm_ignore_flag
), LBMR_LBMR_OPT_SRC_ID_FLAG_IGNORE
, NULL
, HFILL
} },
6011 { &hf_lbmr_opt_src_id_src_id
,
6012 { "Source ID", "lbmr.opt.src_id.src_id", FT_BYTES
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6013 { &hf_lbmr_opt_src_type
,
6014 { "Source Type Option", "lbmr.opt.src_type", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6015 { &hf_lbmr_opt_src_type_type
,
6016 { "Type", "lbmr.opt.src_type.type", FT_UINT8
, BASE_HEX_DEC
, VALS(lbmr_option_type
), 0x0, NULL
, HFILL
} },
6017 { &hf_lbmr_opt_src_type_len
,
6018 { "Length", "lbmr.opt.src_type.len", FT_UINT8
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
6019 { &hf_lbmr_opt_src_type_flags
,
6020 { "Flags", "lbmr.opt.src_type.flags", FT_UINT8
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6021 { &hf_lbmr_opt_src_type_flags_ignore
,
6022 { "Ignore", "lbmr.opt.src_type.flags.ignore", FT_BOOLEAN
, L_LBMR_LBMR_OPT_SRC_TYPE_T_FLAGS
* 8, TFS(&lbm_ignore_flag
), LBMR_LBMR_OPT_SRC_TYPE_FLAG_IGNORE
, NULL
, HFILL
} },
6023 { &hf_lbmr_opt_src_type_src_type
,
6024 { "Source Type", "lbmr.opt.src_type.src_type", FT_UINT8
, BASE_DEC_HEX
, VALS(lbmr_option_source_type
), 0x0, NULL
, HFILL
} },
6025 { &hf_lbmr_opt_version
,
6026 { "Version Option", "lbmr.opt.version", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6027 { &hf_lbmr_opt_version_type
,
6028 { "Type", "lbmr.opt.version.type", FT_UINT8
, BASE_HEX_DEC
, VALS(lbmr_option_type
), 0x0, NULL
, HFILL
} },
6029 { &hf_lbmr_opt_version_len
,
6030 { "Length", "lbmr.opt.version.len", FT_UINT8
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
6031 { &hf_lbmr_opt_version_flags
,
6032 { "Flags", "lbmr.opt.version.flags", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6033 { &hf_lbmr_opt_version_flags_ignore
,
6034 { "Ignore", "lbmr.opt.version.flags.ignore", FT_BOOLEAN
, L_LBMR_LBMR_OPT_VERSION_T_FLAGS
* 8, TFS(&lbm_ignore_flag
), LBMR_LBMR_OPT_VERSION_FLAG_IGNORE
, NULL
, HFILL
} },
6035 { &hf_lbmr_opt_version_flags_ume
,
6036 { "UME Capable", "lbmr.opt.version.flags.ume", FT_BOOLEAN
, L_LBMR_LBMR_OPT_VERSION_T_FLAGS
* 8, TFS(&tfs_set_notset
), LBMR_LBMR_OPT_VERSION_FLAG_UME
, "Set if UME capable", HFILL
} },
6037 { &hf_lbmr_opt_version_flags_umq
,
6038 { "UMQ Capable", "lbmr.opt.version.flags.umq", FT_BOOLEAN
, L_LBMR_LBMR_OPT_VERSION_T_FLAGS
* 8, TFS(&tfs_set_notset
), LBMR_LBMR_OPT_VERSION_FLAG_UMQ
, "Set if UMQ capable", HFILL
} },
6039 { &hf_lbmr_opt_version_version
,
6040 { "Version", "lbmr.opt.version.version", FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6041 { &hf_lbmr_opt_local_domain
,
6042 { "Local Domain Option", "lbmr.opt.local_domain", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6043 { &hf_lbmr_opt_local_domain_type
,
6044 { "Type", "lbmr.opt.local_domain.type", FT_UINT8
, BASE_HEX_DEC
, VALS(lbmr_option_type
), 0x0, NULL
, HFILL
} },
6045 { &hf_lbmr_opt_local_domain_len
,
6046 { "Length", "lbmr.opt.local_domain.len", FT_UINT8
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
6047 { &hf_lbmr_opt_local_domain_flags
,
6048 { "Flags", "lbmr.opt.local_domain.flags", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6049 { &hf_lbmr_opt_local_domain_flags_ignore
,
6050 { "Ignore", "lbmr.opt.local_domain.flags.ignore", FT_BOOLEAN
, L_LBMR_LBMR_OPT_LOCAL_DOMAIN_T_FLAGS
* 8, TFS(&lbm_ignore_flag
), LBMR_LBMR_OPT_HDR_FLAG_IGNORE
, NULL
, HFILL
} },
6051 { &hf_lbmr_opt_local_domain_flags_viral
,
6052 { "Viral", "lbmr.opt.local_domain.flags.viral", FT_BOOLEAN
, L_LBMR_LBMR_OPT_LOCAL_DOMAIN_T_FLAGS
* 8, TFS(&tfs_set_notset
), LBMR_LBMR_OPT_HDR_FLAG_VIRAL
, NULL
, HFILL
} },
6053 { &hf_lbmr_opt_local_domain_local_domain_id
,
6054 { "Local Domain ID", "lbmr.opt.local_domain.local_domain_id", FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6055 { &hf_lbmr_opt_unknown
,
6056 { "Unknown ID Option", "lbmr.opt.unknown", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6057 { &hf_lbmr_opt_unknown_type
,
6058 { "Type", "lbmr.opt.unknown.type", FT_UINT8
, BASE_HEX_DEC
, VALS(lbmr_option_type
), 0x0, NULL
, HFILL
} },
6059 { &hf_lbmr_opt_unknown_len
,
6060 { "Length", "lbmr.opt.unknown.len", FT_UINT8
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
6061 { &hf_lbmr_opt_unknown_flags
,
6062 { "Flags", "lbmr.opt.unknown.flags", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6063 { &hf_lbmr_opt_unknown_data
,
6064 { "Data", "lbmr.opt.unknown.data", FT_BYTES
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6065 { &hf_lbmr_topic_res_request_flags
,
6066 { "Flags", "lbmr.topic_res_request.flags", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6067 { &hf_lbmr_topic_res_request_flags_gw_remote_interest
,
6068 { "Gateway Remote Interest", "lbmr.topic_res_request.flags.gw_remote_interest", FT_BOOLEAN
, 8 * L_LBMR_TOPIC_RES_REQUEST_T_FLAGS
, TFS(&tfs_set_notset
), LBM_TOPIC_RES_REQUEST_GW_REMOTE_INTEREST
, "Set if gateway remote interest is requested", HFILL
} },
6069 { &hf_lbmr_topic_res_request_flags_context_query
,
6070 { "Context Queries", "lbmr.topic_res_request.flags.context_query", FT_BOOLEAN
, 8 * L_LBMR_TOPIC_RES_REQUEST_T_FLAGS
, TFS(&tfs_set_notset
), LBM_TOPIC_RES_REQUEST_CONTEXT_QUERY
, "Set if context queries are requested", HFILL
} },
6071 { &hf_lbmr_topic_res_request_flags_context_advertisement
,
6072 { "Context Advertisements", "lbmr.topic_res_request.flags.context_advertisement", FT_BOOLEAN
, 8 * L_LBMR_TOPIC_RES_REQUEST_T_FLAGS
, TFS(&tfs_set_notset
), LBM_TOPIC_RES_REQUEST_CONTEXT_ADVERTISEMENT
, "Set if context advertisements are requested", HFILL
} },
6073 { &hf_lbmr_topic_res_request_flags_gateway_meta
,
6074 { "Gateway Meta Flag", "lbmr.topic_res_request.flags.gateway_meta", FT_BOOLEAN
, 8 * L_LBMR_TOPIC_RES_REQUEST_T_FLAGS
, TFS(&tfs_set_notset
), LBM_TOPIC_RES_REQUEST_RESERVED1
, NULL
, HFILL
} },
6075 { &hf_lbmr_topic_res_request_flags_advertisement
,
6076 { "Advertisements", "lbmr.topic_res_request.flags.advertisement", FT_BOOLEAN
, 8 * L_LBMR_TOPIC_RES_REQUEST_T_FLAGS
, TFS(&tfs_set_notset
), LBM_TOPIC_RES_REQUEST_ADVERTISEMENT
, "Set if advertisements are requested", HFILL
} },
6077 { &hf_lbmr_topic_res_request_flags_query
,
6078 { "Queries", "lbmr.topic_res_request.flags.query", FT_BOOLEAN
, 8 * L_LBMR_TOPIC_RES_REQUEST_T_FLAGS
, TFS(&tfs_set_notset
), LBM_TOPIC_RES_REQUEST_QUERY
, "Set if queries are requested", HFILL
} },
6079 { &hf_lbmr_topic_res_request_flags_wildcard_query
,
6080 { "Wildcard Queries", "lbmr.topic_res_request.flags.wildcard_query", FT_BOOLEAN
, 8 * L_LBMR_TOPIC_RES_REQUEST_T_FLAGS
, TFS(&tfs_set_notset
), LBM_TOPIC_RES_REQUEST_WILDCARD_QUERY
, "Set if wildcard queries are requested", HFILL
} },
6081 { &hf_lbmr_ctxinfo_len
,
6082 { "Length", "lbmr.ctxinfo.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6083 { &hf_lbmr_ctxinfo_hop_count
,
6084 { "Hop Count", "lbmr.ctxinfo.hop_count", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6085 { &hf_lbmr_ctxinfo_flags
,
6086 { "Flags", "lbmr.ctxinfo.flags", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6087 { &hf_lbmr_ctxinfo_flags_query
,
6088 { "Query", "lbmr.ctxinfo.flags.query", FT_BOOLEAN
, 16, TFS(&tfs_set_notset
), LBMR_CTXINFO_QUERY_FLAG
, "Set if query, clear if response", HFILL
} },
6089 { &hf_lbmr_ctxinfo_flags_ip
,
6090 { "IP Address", "lbmr.ctxinfo.flags.ip", FT_BOOLEAN
, 16, TFS(&tfs_present_not_present
), LBMR_CTXINFO_IP_FLAG
, "Set if IP address is included", HFILL
} },
6091 { &hf_lbmr_ctxinfo_flags_instance
,
6092 { "Instance", "lbmr.ctxinfo.flags.instance", FT_BOOLEAN
, 16, TFS(&tfs_present_not_present
), LBMR_CTXINFO_INSTANCE_FLAG
, "Set if context instance is included", HFILL
} },
6093 { &hf_lbmr_ctxinfo_flags_tnwg_src
,
6094 { "Gateway Source", "lbmr.ctxinfo.flags.tnwg_src", FT_BOOLEAN
, 16, TFS(&tfs_set_notset
), LBMR_CTXINFO_TNWG_SRC_FLAG
, "Set if a gateway source", HFILL
} },
6095 { &hf_lbmr_ctxinfo_flags_tnwg_rcv
,
6096 { "Gateway Receiver", "lbmr.ctxinfo.flags.tnwg_rcv", FT_BOOLEAN
, 16, TFS(&tfs_set_notset
), LBMR_CTXINFO_TNWG_RCV_FLAG
, "Set if a gateway receiver", HFILL
} },
6097 { &hf_lbmr_ctxinfo_flags_proxy
,
6098 { "Proxy", "lbmr.ctxinfo.flags.proxy", FT_BOOLEAN
, 16, TFS(&tfs_set_notset
), LBMR_CTXINFO_PROXY_FLAG
, "Set if a proxy for another context", HFILL
} },
6099 { &hf_lbmr_ctxinfo_flags_name
,
6100 { "Name", "lbmr.ctxinfo.flags.name", FT_BOOLEAN
, 16, TFS(&tfs_present_not_present
), LBMR_CTXINFO_NAME_FLAG
, "Set if context name is included", HFILL
} },
6101 { &hf_lbmr_ctxinfo_port
,
6102 { "Port", "lbmr.ctxinfo.port", FT_UINT16
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6103 { &hf_lbmr_ctxinfo_ip
,
6104 { "IP Address", "lbmr.ctxinfo.ip", FT_IPv4
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6105 { &hf_lbmr_ctxinfo_instance
,
6106 { "Instance", "lbmr.ctxinfo.instance", FT_BYTES
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6107 { &hf_lbmr_ctxinfo_name
,
6108 { "Name", "lbmr.ctxinfo.name", FT_STRING
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6109 { &hf_lbmr_tnwg_len
,
6110 { "Length", "lbmr.tnwg.len", FT_UINT16
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6111 { &hf_lbmr_tnwg_type
,
6112 { "Type", "lbmr.tnwg.type", FT_UINT16
, BASE_DEC_HEX
, VALS(lbmr_tnwg_function_type
), 0x0, NULL
, HFILL
} },
6113 { &hf_lbmr_tnwg_reserved
,
6114 { "Reserved", "lbmr.tnwg.reserved", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6115 { &hf_lbmr_tnwg_interest
,
6116 { "Interest", "lbmr.tnwg.interest", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6117 { &hf_lbmr_tnwg_interest_len
,
6118 { "Length", "lbmr.tnwg.interest.len", FT_UINT16
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6119 { &hf_lbmr_tnwg_interest_count
,
6120 { "Record Count", "lbmr.tnwg.interest.count", FT_UINT16
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6121 { &hf_lbmr_tnwg_interest_rec
,
6122 { "Interest Record", "lbmr.tnwg.interest_rec", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6123 { &hf_lbmr_tnwg_interest_rec_len
,
6124 { "Length", "lbmr.tnwg.interest_rec.len", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
6125 { &hf_lbmr_tnwg_interest_rec_flags
,
6126 { "Flags", "lbmr.tnwg.interest_rec.flags", FT_UINT8
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6127 { &hf_lbmr_tnwg_interest_rec_flags_pattern
,
6128 { "Pattern", "lbmr.tnwg.interest_rec.flags.pattern", FT_BOOLEAN
, L_LBMR_TNWG_INTEREST_REC_T_FLAGS
* 8, TFS(&tfs_set_notset
), LBMR_TNWG_INTEREST_REC_PATTERN_FLAG
, "Set if interest is for a pattern", HFILL
} },
6129 { &hf_lbmr_tnwg_interest_rec_flags_cancel
,
6130 { "Cancel", "lbmr.tnwg.interest_rec.flags.cancel", FT_BOOLEAN
, L_LBMR_TNWG_INTEREST_REC_T_FLAGS
* 8, TFS(&tfs_set_notset
), LBMR_TNWG_INTEREST_REC_CANCEL_FLAG
, "Set if interest is being cancelled", HFILL
} },
6131 { &hf_lbmr_tnwg_interest_rec_flags_refresh
,
6132 { "Refresh", "lbmr.tnwg.interest_rec.flags.refresh", FT_BOOLEAN
, L_LBMR_TNWG_INTEREST_REC_T_FLAGS
* 8, TFS(&tfs_set_notset
), LBMR_TNWG_INTEREST_REC_REFRESH_FLAG
, "Set if interest is being refreshed", HFILL
} },
6133 { &hf_lbmr_tnwg_interest_rec_pattype
,
6134 { "Pattern Type", "lbmr.tnwg.interest_rec.pattype", FT_UINT8
, BASE_DEC_HEX
, VALS(lbm_wildcard_pattern_type_short
), 0x0, NULL
, HFILL
} },
6135 { &hf_lbmr_tnwg_interest_rec_domain_id
,
6136 { "Domain ID", "lbmr.tnwg.interest_rec.domain_id", FT_UINT32
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
6137 { &hf_lbmr_tnwg_interest_rec_symbol
,
6138 { "Symbol", "lbmr.tnwg.interest_rec.symbol", FT_STRING
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6139 { &hf_lbmr_tnwg_ctxinfo
,
6140 { "Context Information", "lbmr.tnwg.ctxinfo", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6141 { &hf_lbmr_tnwg_ctxinfo_len
,
6142 { "Length", "lbmr.tnwg.ctxinfo.len", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
6143 { &hf_lbmr_tnwg_ctxinfo_hop_count
,
6144 { "Hop Count", "lbmr.tnwg.ctxinfo.hop_count", FT_UINT8
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
6145 { &hf_lbmr_tnwg_ctxinfo_reserved
,
6146 { "Reserved", "lbmr.tnwg.ctxinfo.reserved", FT_UINT8
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6147 { &hf_lbmr_tnwg_ctxinfo_flags1
,
6148 { "Flags1", "lbmr.tnwg.ctxinfo.flags1", FT_UINT32
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6149 { &hf_lbmr_tnwg_ctxinfo_flags1_query
,
6150 { "Query", "lbmr.tnwg.ctxinfo.flags1.query", FT_BOOLEAN
, L_LBMR_TNWG_CTXINFO_T_FLAGS1
* 8, TFS(&tfs_set_notset
), LBMR_TNWG_CTXINFO_QUERY_FLAG
, "Set if a query, clear if a response", HFILL
} },
6151 { &hf_lbmr_tnwg_ctxinfo_flags1_tnwg_src
,
6152 { "TNWG Source", "lbmr.tnwg.ctxinfo.flags1.tnwg_src", FT_BOOLEAN
, L_LBMR_TNWG_CTXINFO_T_FLAGS1
* 8, TFS(&tfs_set_notset
), LBMR_TNWG_CTXINFO_TNWG_SRC_FLAG
, "Set if a gateway source", HFILL
} },
6153 { &hf_lbmr_tnwg_ctxinfo_flags1_tnwg_rcv
,
6154 { "TNWG Receiver", "lbmr.tnwg.ctxinfo.flags1.tnwg_rcv", FT_BOOLEAN
, L_LBMR_TNWG_CTXINFO_T_FLAGS1
* 8, TFS(&tfs_set_notset
), LBMR_TNWG_CTXINFO_TNWG_RCV_FLAG
, "Set if a gateway receiver", HFILL
} },
6155 { &hf_lbmr_tnwg_ctxinfo_flags1_proxy
,
6156 { "Proxy", "lbmr.tnwg.ctxinfo.flags1.proxy", FT_BOOLEAN
, L_LBMR_TNWG_CTXINFO_T_FLAGS1
* 8, TFS(&tfs_set_notset
), LBMR_TNWG_CTXINFO_PROXY_FLAG
, "Set if a proxy for another context", HFILL
} },
6157 { &hf_lbmr_tnwg_ctxinfo_flags2
,
6158 { "Flags2", "lbmr.tnwg.ctxinfo.flags2", FT_UINT32
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6159 { &hf_lbmr_tnwg_trreq
,
6160 { "Topic Res Request", "lbmr.tnwg.trreq", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6161 { &hf_lbmr_tnwg_trreq_len
,
6162 { "Length", "lbmr.tnwg.trreq.len", FT_UINT16
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6163 { &hf_lbmr_tnwg_opt
,
6164 { "Unknown Option", "lbmr.tnwg.opt", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6165 { &hf_lbmr_tnwg_opt_type
,
6166 { "Type", "lbmr.tnwg.opt.type", FT_UINT8
, BASE_HEX_DEC
, VALS(lbmr_tnwg_option_type
), 0x0, NULL
, HFILL
} },
6167 { &hf_lbmr_tnwg_opt_len
,
6168 { "Length", "lbmr.tnwg.opt.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6169 { &hf_lbmr_tnwg_opt_flags
,
6170 { "Flags", "lbmr.tnwg.opt.flags", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6171 { &hf_lbmr_tnwg_opt_flags_ignore
,
6172 { "Ignore", "lbmr.tnwg.opt.flags.ignore", FT_BOOLEAN
, L_LBMR_TNWG_OPT_T_FLAGS
* 8, TFS(&lbm_ignore_flag
), LBMR_TNWG_OPT_IGNORE_FLAG
, NULL
, HFILL
} },
6173 { &hf_lbmr_tnwg_opt_data
,
6174 { "Data", "lbmr.tnwg.opt.data", FT_BYTES
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6175 { &hf_lbmr_tnwg_opt_ctxinst
,
6176 { "Context Instance Option", "lbmr.tnwg.opt_ctxinst", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6177 { &hf_lbmr_tnwg_opt_ctxinst_type
,
6178 { "Type", "lbmr.tnwg.opt_ctxinst.type", FT_UINT8
, BASE_HEX_DEC
, VALS(lbmr_tnwg_option_type
), 0x0, NULL
, HFILL
} },
6179 { &hf_lbmr_tnwg_opt_ctxinst_len
,
6180 { "Length", "lbmr.tnwg.opt_ctxinst.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6181 { &hf_lbmr_tnwg_opt_ctxinst_flags
,
6182 { "Flags", "lbmr.tnwg.opt_ctxinst.flags", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6183 { &hf_lbmr_tnwg_opt_ctxinst_flags_ignore
,
6184 { "Ignore", "lbmr.tnwg.opt_ctxinst.flags.ignore", FT_BOOLEAN
, L_LBMR_TNWG_OPT_CTXINST_T_FLAGS
* 8, TFS(&lbm_ignore_flag
), LBMR_TNWG_OPT_IGNORE_FLAG
, NULL
, HFILL
} },
6185 { &hf_lbmr_tnwg_opt_ctxinst_instance
,
6186 { "Context Instance", "lbmr.tnwg.opt_ctxinst.instance", FT_BYTES
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6187 { &hf_lbmr_tnwg_opt_address
,
6188 { "Address Option", "lbmr.tnwg.opt_address", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6189 { &hf_lbmr_tnwg_opt_address_type
,
6190 { "Type", "lbmr.tnwg.opt_address.type", FT_UINT8
, BASE_HEX_DEC
, VALS(lbmr_tnwg_option_type
), 0x0, NULL
, HFILL
} },
6191 { &hf_lbmr_tnwg_opt_address_len
,
6192 { "Length", "lbmr.tnwg.opt_address.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6193 { &hf_lbmr_tnwg_opt_address_flags
,
6194 { "Flags", "lbmr.tnwg.opt_address.flags", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6195 { &hf_lbmr_tnwg_opt_address_flags_ignore
,
6196 { "Ignore", "lbmr.tnwg.opt_address.flags.ignore", FT_BOOLEAN
, L_LBMR_TNWG_OPT_ADDRESS_T_FLAGS
* 8, TFS(&lbm_ignore_flag
), LBMR_TNWG_OPT_IGNORE_FLAG
, NULL
, HFILL
} },
6197 { &hf_lbmr_tnwg_opt_address_port
,
6198 { "Port", "lbmr.tnwg.opt_address.port", FT_UINT16
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6199 { &hf_lbmr_tnwg_opt_address_res
,
6200 { "Reserved", "lbmr.tnwg.opt_address.res", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6201 { &hf_lbmr_tnwg_opt_address_ip
,
6202 { "IP Address", "lbmr.tnwg.opt_address.ip", FT_IPv4
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6203 { &hf_lbmr_tnwg_opt_domain
,
6204 { "Domain Option", "lbmr.tnwg.opt_domain", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6205 { &hf_lbmr_tnwg_opt_domain_type
,
6206 { "Type", "lbmr.tnwg.opt_domain.type", FT_UINT8
, BASE_HEX_DEC
, VALS(lbmr_tnwg_option_type
), 0x0, NULL
, HFILL
} },
6207 { &hf_lbmr_tnwg_opt_domain_len
,
6208 { "Length", "lbmr.tnwg.opt_domain.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6209 { &hf_lbmr_tnwg_opt_domain_flags
,
6210 { "Flags", "lbmr.tnwg.opt_domain.flags", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6211 { &hf_lbmr_tnwg_opt_domain_flags_ignore
,
6212 { "Ignore", "lbmr.tnwg.opt_domain.flags.ignore", FT_BOOLEAN
, L_LBMR_TNWG_OPT_DOMAIN_T_FLAGS
* 8, TFS(&lbm_ignore_flag
), LBMR_TNWG_OPT_IGNORE_FLAG
, NULL
, HFILL
} },
6213 { &hf_lbmr_tnwg_opt_domain_domain_id
,
6214 { "Domain ID", "lbmr.tnwg.opt_domain.domain_id", FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6215 { &hf_lbmr_tnwg_opt_name
,
6216 { "Name Option", "lbmr.tnwg.opt_name", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6217 { &hf_lbmr_tnwg_opt_name_type
,
6218 { "Type", "lbmr.tnwg.opt_name.type", FT_UINT8
, BASE_HEX_DEC
, VALS(lbmr_tnwg_option_type
), 0x0, NULL
, HFILL
} },
6219 { &hf_lbmr_tnwg_opt_name_len
,
6220 { "Length", "lbmr.tnwg.opt_name.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6221 { &hf_lbmr_tnwg_opt_name_flags
,
6222 { "Flags", "lbmr.tnwg.opt_name.flags", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6223 { &hf_lbmr_tnwg_opt_name_flags_ignore
,
6224 { "Ignore", "lbmr.tnwg.opt_name.flags.ignore", FT_BOOLEAN
, L_LBMR_TNWG_OPT_T_FLAGS
* 8, TFS(&lbm_ignore_flag
), LBMR_TNWG_OPT_IGNORE_FLAG
, NULL
, HFILL
} },
6225 { &hf_lbmr_tnwg_opt_name_name
,
6226 { "Name", "lbmr.tnwg.opt_name.name", FT_STRING
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6227 { &hf_lbmr_remote_domain_route_hdr_num_domains
,
6228 { "Number of Domains", "lbmr.remote_domain_route.num_domains", FT_UINT16
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6229 { &hf_lbmr_remote_domain_route_hdr_ip
,
6230 { "IP Address", "lbmr.remote_domain_route.ip", FT_IPv4
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6231 { &hf_lbmr_remote_domain_route_hdr_port
,
6232 { "Port", "lbmr.remote_domain_route.port", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
6233 { &hf_lbmr_remote_domain_route_hdr_route_index
,
6234 { "Route Index", "lbmr.remote_domain_route.route_index", FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
6235 { &hf_lbmr_remote_domain_route_hdr_length
,
6236 { "Length", "lbmr.remote_domain_route.length", FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6237 { &hf_lbmr_remote_domain_route_hdr_domain
,
6238 { "Domain", "lbmr.remote_domain_route.domain", FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6239 { &hf_lbmr_rctxinfo_len
,
6240 { "Length", "lbmr.rctxinfo.len", FT_UINT16
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6241 { &hf_lbmr_rctxinfo_num_recs
,
6242 { "Number of Records", "lbmr.rctxinfo.num_recs", FT_UINT16
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6243 { &hf_lbmr_rctxinfo_reserved
,
6244 { "Reserved", "lbmr.rctxinfo.reserved", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6245 { &hf_lbmr_rctxinfo_rec
,
6246 { "Remote Context Information Record", "lbmr.rctxinfo.rec", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6247 { &hf_lbmr_rctxinfo_rec_len
,
6248 { "Length", "lbmr.rctxinfo.rec.len", FT_UINT16
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6249 { &hf_lbmr_rctxinfo_rec_flags
,
6250 { "Flags", "lbmr.rctxinfo.rec.flags", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6251 { &hf_lbmr_rctxinfo_rec_flags_query
,
6252 { "Query", "lbmr.rctxinfo.rec.flags.query", FT_BOOLEAN
, L_LBMR_RCTXINFO_REC_T_FLAGS
* 8, TFS(&tfs_set_notset
), LBMR_RCTXINFO_REC_FLAG_QUERY
, "Set if a query, clear if a response", HFILL
} },
6253 { &hf_lbmr_rctxinfo_rec_address
,
6254 { "Address Option", "lbmr.rctxinfo.rec.address", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6255 { &hf_lbmr_rctxinfo_rec_address_type
,
6256 { "Type", "lbmr.rctxinfo.rec.address.type", FT_UINT8
, BASE_DEC_HEX
, VALS(lbmr_rctxinfo_option_type
), 0x0, NULL
, HFILL
} },
6257 { &hf_lbmr_rctxinfo_rec_address_len
,
6258 { "Length", "lbmr.rctxinfo.rec.address.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6259 { &hf_lbmr_rctxinfo_rec_address_flags
,
6260 { "Flags", "lbmr.rctxinfo.rec.address.flags", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6261 { &hf_lbmr_rctxinfo_rec_address_domain_id
,
6262 { "Domain ID", "lbmr.rctxinfo.rec.address.domain_id", FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6263 { &hf_lbmr_rctxinfo_rec_address_ip
,
6264 { "Address", "lbmr.rctxinfo.rec.address.ip", FT_IPv4
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6265 { &hf_lbmr_rctxinfo_rec_address_port
,
6266 { "Port", "lbmr.rctxinfo.rec.address.port", FT_UINT16
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6267 { &hf_lbmr_rctxinfo_rec_address_res
,
6268 { "Reserved", "lbmr.rctxinfo.rec.address.res", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6269 { &hf_lbmr_rctxinfo_rec_instance
,
6270 { "Instance Option", "lbmr.rctxinfo.rec.instance", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6271 { &hf_lbmr_rctxinfo_rec_instance_type
,
6272 { "Type", "lbmr.rctxinfo.rec.instance.type", FT_UINT8
, BASE_DEC_HEX
, VALS(lbmr_rctxinfo_option_type
), 0x0, NULL
, HFILL
} },
6273 { &hf_lbmr_rctxinfo_rec_instance_len
,
6274 { "Length", "lbmr.rctxinfo.rec.instance.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6275 { &hf_lbmr_rctxinfo_rec_instance_flags
,
6276 { "Flags", "lbmr.rctxinfo.rec.instance.flags", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6277 { &hf_lbmr_rctxinfo_rec_instance_instance
,
6278 { "Instance", "lbmr.rctxinfo.rec.instance.instance", FT_BYTES
, FT_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6279 { &hf_lbmr_rctxinfo_rec_odomain
,
6280 { "Originating Domain Option", "lbmr.rctxinfo.rec.odomain", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6281 { &hf_lbmr_rctxinfo_rec_odomain_type
,
6282 { "Type", "lbmr.rctxinfo.rec.odomain.type", FT_UINT8
, BASE_DEC_HEX
, VALS(lbmr_rctxinfo_option_type
), 0x0, NULL
, HFILL
} },
6283 { &hf_lbmr_rctxinfo_rec_odomain_len
,
6284 { "Length", "lbmr.rctxinfo.rec.odomain.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6285 { &hf_lbmr_rctxinfo_rec_odomain_flags
,
6286 { "Flags", "lbmr.rctxinfo.rec.odomain.flags", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6287 { &hf_lbmr_rctxinfo_rec_odomain_domain_id
,
6288 { "Domain ID", "lbmr.rctxinfo.rec.odomain.domain_id", FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6289 { &hf_lbmr_rctxinfo_rec_name
,
6290 { "Name Option", "lbmr.rctxinfo.rec.name", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6291 { &hf_lbmr_rctxinfo_rec_name_type
,
6292 { "Type", "lbmr.rctxinfo.rec.name.type", FT_UINT8
, BASE_DEC_HEX
, VALS(lbmr_rctxinfo_option_type
), 0x0, NULL
, HFILL
} },
6293 { &hf_lbmr_rctxinfo_rec_name_len
,
6294 { "Length", "lbmr.rctxinfo.rec.name.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6295 { &hf_lbmr_rctxinfo_rec_name_flags
,
6296 { "Flags", "lbmr.rctxinfo.rec.name.flags", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6297 { &hf_lbmr_rctxinfo_rec_name_name
,
6298 { "Name", "lbmr.rctxinfo.rec.name.name", FT_STRING
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6299 { &hf_lbmr_rctxinfo_rec_unknown
,
6300 { "Unknown Option", "lbmr.rctxinfo.rec.unknown", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6301 { &hf_lbmr_rctxinfo_rec_unknown_type
,
6302 { "Type", "lbmr.rctxinfo.rec.unknown.type", FT_UINT8
, BASE_DEC_HEX
, VALS(lbmr_rctxinfo_option_type
), 0x0, NULL
, HFILL
} },
6303 { &hf_lbmr_rctxinfo_rec_unknown_len
,
6304 { "Length", "lbmr.rctxinfo.rec.unknown.len", FT_UINT8
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6305 { &hf_lbmr_rctxinfo_rec_unknown_flags
,
6306 { "Flags", "lbmr.rctxinfo.rec.unknown.flags", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6307 { &hf_lbmr_rctxinfo_rec_unknown_data
,
6308 { "Data", "lbmr.rctxinfo.rec.unknown.data", FT_BYTES
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6310 { "Flags", "lbmr.qmgmt.flags", FT_UINT8
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6311 { &hf_qmgmt_flags_i_flag
,
6312 { "Ignore", "lbmr.qmgmt.flags.i_flag", FT_BOOLEAN
, L_UMQ_QMGMT_HDR_T_FLAGS
* 8, TFS(&lbm_ignore_flag
), UMQ_QMGMT_HDR_I_FLAG
, NULL
, HFILL
} },
6313 { &hf_qmgmt_flags_n_flag
,
6314 { "Queue Name", "lbmr.qmgmt.flags.n_flag", FT_BOOLEAN
, L_UMQ_QMGMT_HDR_T_FLAGS
* 8, TFS(&tfs_present_not_present
), UMQ_QMGMT_HDR_N_FLAG
, "Set if queue name is present", HFILL
} },
6315 { &hf_qmgmt_flags_il_l_flag
,
6316 { "New Instance List", "lbmr.qmgmt.flags.il_l_flag", FT_BOOLEAN
, L_UMQ_QMGMT_HDR_T_FLAGS
* 8, TFS(&tfs_set_notset
), UMQ_QMGMT_HDR_IL_L_FLAG
, "Set if contains a new instance list", HFILL
} },
6317 { &hf_qmgmt_flags_il_k_flag
,
6318 { "Keepalive Requested", "lbmr.qmgmt.flags.il_k_flag", FT_BOOLEAN
, L_UMQ_QMGMT_HDR_T_FLAGS
* 8, TFS(&tfs_set_notset
), UMQ_QMGMT_HDR_IL_K_FLAG
, "Set if a keepalive requester", HFILL
} },
6319 { &hf_qmgmt_pckt_type
,
6320 { "Packet Type", "lbmr.qmgmt.pckt_type", FT_UINT8
, BASE_HEX_DEC
, VALS(umq_qmgmt_packet_type
), 0x0, NULL
, HFILL
} },
6322 { "Configuration Signature", "lbmr.qmgmt.cfg_sig", FT_BYTES
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6323 { &hf_qmgmt_queue_id
,
6324 { "Queue ID", "lbmr.qmgmt.queue_id", FT_UINT32
, BASE_HEX_DEC
, NULL
, 0x0, NULL
, HFILL
} },
6325 { &hf_qmgmt_queue_ver
,
6326 { "Queue Version", "lbmr.qmgmt.queue_ver", FT_UINT32
, BASE_HEX_DEC
, NULL
, 0x0, NULL
, HFILL
} },
6328 { "IP Address", "lbmr.qmgmt.ip", FT_IPv4
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6330 { "Port", "lbmr.qmgmt.port", FT_UINT16
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6331 { &hf_qmgmt_inst_idx
,
6332 { "Instance Index", "lbmr.qmgmt.inst_idx", FT_UINT16
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6333 { &hf_qmgmt_grp_idx
,
6334 { "Group Index", "lbmr.qmgmt.grp_idx", FT_UINT16
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6335 { &hf_qmgmt_pckt_type_dep16
,
6336 { "Packet-Type Dependent Data", "lbmr.qmgmt.pckt_type_dep16", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6337 { &hf_qmgmt_il_num_insts
,
6338 { "Number of IL Instances", "lbmr.qmgmt.il_num_insts", FT_UINT16
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6339 { &hf_qmgmt_jrej_code
,
6340 { "Join Rejection Code", "lbmr.qmgmt.jrej_code", FT_UINT16
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6341 { &hf_qmgmt_ev_bias
,
6342 { "EV Bias", "lbmr.qmgmt.ev_bias", FT_UINT16
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6344 { "Instance List Header", "lbmr.qmgmt.il", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6345 { &hf_qmgmt_il_highest_rcr_tsp
,
6346 { "Highest RCR TSP", "lbmr.qmgmt.il.highest_rcr_tsp", FT_UINT32
, BASE_HEX_DEC
, NULL
, 0x0, NULL
, HFILL
} },
6347 { &hf_qmgmt_il_inst
,
6348 { "Instance Header", "lbmr.qmgmt.il_inst", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6349 { &hf_qmgmt_il_inst_ip
,
6350 { "IP", "lbmr.qmgmt.il_inst.ip", FT_IPv4
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6351 { &hf_qmgmt_il_inst_port
,
6352 { "Port", "lbmr.qmgmt.il_inst.port", FT_UINT16
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6353 { &hf_qmgmt_il_inst_inst_idx
,
6354 { "Instance Index", "lbmr.qmgmt.il_inst.inst_idx", FT_UINT16
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6355 { &hf_qmgmt_il_inst_grp_idx
,
6356 { "Group Index", "lbmr.qmgmt.il_inst.grp_idx", FT_UINT16
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6357 { &hf_qmgmt_il_inst_flags
,
6358 { "Flags", "lbmr.qmgmt.il_inst.flags", FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6359 { &hf_qmgmt_il_inst_flags_m_flag
,
6360 { "Master", "lbmr.qmgmt.il_inst.flags.m_flag", FT_BOOLEAN
, L_UMQ_QMGMT_IL_INST_HDR_T_FLAGS
* 8, TFS(&tfs_set_notset
), UMQ_QMGMT_HDR_IL_INST_M_FLAG
, "Set if the master queue", HFILL
} },
6361 { &hf_qmgmt_il_inst_flags_q_flag
,
6362 { "Queue Election Master", "lbmr.qmgmt.il_inst.flags.q_flag", FT_BOOLEAN
, L_UMQ_QMGMT_IL_INST_HDR_T_FLAGS
* 8, TFS(&tfs_set_notset
), UMQ_QMGMT_HDR_IL_INST_Q_FLAG
, "Set if a queue election master", HFILL
} },
6363 { &hf_qmgmt_il_inst_flags_p_flag
,
6364 { "Post Election Master", "lbmr.qmgmt.il_inst.flags.p_flag", FT_BOOLEAN
, L_UMQ_QMGMT_IL_INST_HDR_T_FLAGS
* 8, TFS(&tfs_set_notset
), UMQ_QMGMT_HDR_IL_INST_P_FLAG
, "Set if a post election master", HFILL
} },
6366 { "Election Call Header", "lbmr.qmgmt.ec", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6367 { &hf_qmgmt_ec_queue_new_ver
,
6368 { "Queue New Version", "lbmr.qmgmt.ec.queue_new_ver", FT_UINT32
, BASE_HEX_DEC
, NULL
, 0x0, NULL
, HFILL
} },
6370 { "Election Vote Header", "lbmr.qmgmt.ev", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6371 { &hf_qmgmt_ev_highest_rcr_tsp
,
6372 { "Highest RCR TSP", "lbmr.qmgmt.ev.highest_rcr_tsp", FT_UINT32
, BASE_HEX_DEC
, NULL
, 0x0, NULL
, HFILL
} },
6374 { "Age", "lbmr.qmgmt.ev.age", FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0, NULL
, HFILL
} },
6376 { "Queue Resume Operation Header", "lbmr.qmgmt.qro", FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
6377 { &hf_qmgmt_qro_highest_rcr_tsp
,
6378 { "Highest RCR TSP", "lbmr.qmgmt.qro.highest_rcr_tsp", FT_UINT32
, BASE_HEX_DEC
, NULL
, 0x0, NULL
, HFILL
} },
6380 { "Queue Name", "lbmr.qmgmt.qname", FT_STRING
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} }
6382 static int * ett
[] =
6387 &ett_lbmr_opt_src_id
,
6388 &ett_lbmr_opt_src_id_flags
,
6390 &ett_lbmr_opt_src_type
,
6391 &ett_lbmr_opt_src_type_flags
,
6392 &ett_lbmr_opt_version
,
6393 &ett_lbmr_opt_version_flags
,
6394 &ett_lbmr_opt_local_domain
,
6395 &ett_lbmr_opt_local_domain_flags
,
6396 &ett_lbmr_opt_unknown
,
6402 &ett_lbmr_tir_lbtrm
,
6403 &ett_lbmr_tir_lbtru
,
6404 &ett_lbmr_tir_lbtipc
,
6405 &ett_lbmr_tir_lbtrdma
,
6406 &ett_lbmr_tir_lbtsmx
,
6410 &ett_lbmr_topt_ume_flags
,
6411 &ett_lbmr_topt_ume_store
,
6412 &ett_lbmr_topt_ume_store_flags
,
6413 &ett_lbmr_topt_ume_store_group
,
6414 &ett_lbmr_topt_ume_store_group_flags
,
6415 &ett_lbmr_topt_latejoin
,
6416 &ett_lbmr_topt_latejoin_flags
,
6417 &ett_lbmr_topt_umq_rcridx
,
6418 &ett_lbmr_topt_umq_rcridx_flags
,
6419 &ett_lbmr_topt_umq_qinfo
,
6420 &ett_lbmr_topt_umq_qinfo_flags
,
6421 &ett_lbmr_topt_cost
,
6422 &ett_lbmr_topt_cost_flags
,
6423 &ett_lbmr_topt_otid
,
6424 &ett_lbmr_topt_otid_flags
,
6425 &ett_lbmr_topt_ctxinst
,
6426 &ett_lbmr_topt_ctxinst_flags
,
6427 &ett_lbmr_topt_ctxinsts
,
6428 &ett_lbmr_topt_ctxinsts_flags
,
6430 &ett_lbmr_topt_ulb_flags
,
6431 &ett_lbmr_topt_ctxinstq
,
6432 &ett_lbmr_topt_ctxinstq_flags
,
6433 &ett_lbmr_topt_domain_id
,
6434 &ett_lbmr_topt_domain_id_flags
,
6435 &ett_lbmr_topt_exfunc
,
6436 &ett_lbmr_topt_exfunc_flags
,
6437 &ett_lbmr_topt_exfunc_functionality_flags
,
6438 &ett_lbmr_topt_unknown
,
6442 &ett_lbmr_tmr_flags
,
6443 &ett_lbmr_pser_flags
,
6444 &ett_lbmr_pser_opts
,
6445 &ett_lbmr_pser_opt_len
,
6446 &ett_lbmr_pser_opt_ctxinst
,
6450 &ett_lbmr_qir_options
,
6451 &ett_lbmr_qir_grp_blk
,
6452 &ett_lbmr_qir_queue_blk
,
6454 &ett_lbmr_qir_queue
,
6455 &ett_lbmr_topic_res_request_flags
,
6456 &ett_lbmr_ctxinfo_flags
,
6458 &ett_lbmr_tnwg_interest
,
6459 &ett_lbmr_tnwg_interest_rec
,
6460 &ett_lbmr_tnwg_interest_rec_flags
,
6461 &ett_lbmr_tnwg_ctxinfo
,
6462 &ett_lbmr_tnwg_ctxinfo_flags1
,
6463 &ett_lbmr_tnwg_trreq
,
6464 &ett_lbmr_tnwg_ctxinst_opt
,
6465 &ett_lbmr_tnwg_ctxinst_opt_flags
,
6466 &ett_lbmr_tnwg_address_opt
,
6467 &ett_lbmr_tnwg_address_opt_flags
,
6468 &ett_lbmr_tnwg_domain_opt
,
6469 &ett_lbmr_tnwg_domain_opt_flags
,
6470 &ett_lbmr_tnwg_name_opt
,
6471 &ett_lbmr_tnwg_name_opt_flags
,
6472 &ett_lbmr_tnwg_unknown_opt
,
6473 &ett_lbmr_tnwg_unknown_opt_flags
,
6474 &ett_lbmr_remote_domain_route_hdr
,
6476 &ett_lbmr_rctxinfo_rec
,
6477 &ett_lbmr_rctxinfo_rec_flags
,
6478 &ett_lbmr_rctxinfo_rec_address
,
6479 &ett_lbmr_rctxinfo_rec_instance
,
6480 &ett_lbmr_rctxinfo_rec_odomain
,
6481 &ett_lbmr_rctxinfo_rec_name
,
6482 &ett_lbmr_rctxinfo_rec_unknown
,
6486 &ett_qmgmt_il_inst_flags
,
6491 static ei_register_info ei
[] =
6493 { &ei_lbmr_analysis_length_incorrect
, { "lbmr.analysis.length_incorrect", PI_MALFORMED
, PI_ERROR
, "Header length incorrect", EXPFILL
} },
6494 { &ei_lbmr_analysis_invalid_value
, { "lbmr.analysis.invalid_value", PI_UNDECODED
, PI_WARN
, "Invalid value", EXPFILL
} },
6495 { &ei_lbmr_analysis_zero_len_option
, { "lbmr.analysis.zero_len_option", PI_MALFORMED
, PI_ERROR
, "Zero-length LBMR option", EXPFILL
} },
6497 module_t
* lbmr_module
;
6500 expert_module_t
* expert_lbmr
;
6502 proto_lbmr
= proto_register_protocol("LBM Topic Resolution Protocol",
6505 proto_register_field_array(proto_lbmr
, hf
, array_length(hf
));
6506 proto_register_subtree_array(ett
, array_length(ett
));
6507 expert_lbmr
= expert_register_protocol(proto_lbmr
);
6508 expert_register_field_array(expert_lbmr
, ei
, array_length(ei
));
6510 lbmr_dissector_handle
= register_dissector("lbmr", dissect_lbmr
, proto_lbmr
);
6512 lbmr_module
= prefs_register_protocol_subtree("29West", proto_lbmr
, proto_reg_handoff_lbmr
);
6513 prefs_register_uint_preference(lbmr_module
,
6515 "Incoming multicast UDP port (default " LBMR_DEFAULT_MC_INCOMING_UDP_PORT_STRING
")",
6516 "Set the UDP port for incoming multicast topic resolution (context resolver_multicast_incoming_port)",
6518 &global_lbmr_mc_incoming_udp_port
);
6519 ws_inet_pton4(LBMR_DEFAULT_MC_INCOMING_ADDRESS
, &addr
);
6520 lbmr_mc_incoming_address_host
= g_ntohl(addr
);
6521 prefs_register_string_preference(lbmr_module
,
6522 "mc_incoming_address",
6523 "Incoming multicast address (default " LBMR_DEFAULT_MC_INCOMING_ADDRESS
")",
6524 "Set the multicast address for incoming multicast topic resolution (context resolver_multicast_incoming_address)",
6525 &global_lbmr_mc_incoming_address
);
6526 prefs_register_uint_preference(lbmr_module
,
6528 "Outgoing multicast UDP port (default " LBMR_DEFAULT_MC_OUTGOING_UDP_PORT_STRING
")",
6529 "Set the UDP port for outgoing multicast topic resolution (context resolver_multicast_outgoing_port)",
6531 &global_lbmr_mc_outgoing_udp_port
);
6532 ws_inet_pton4(LBMR_DEFAULT_MC_OUTGOING_ADDRESS
, &addr
);
6533 lbmr_mc_outgoing_address_host
= g_ntohl(addr
);
6534 prefs_register_string_preference(lbmr_module
,
6535 "mc_outgoing_address",
6536 "Outgoing multicast address (default " LBMR_DEFAULT_MC_OUTGOING_ADDRESS
")",
6537 "Set the multicast address for outgoing multicast topic resolution (context resolver_multicast_outgoing_address)",
6538 &global_lbmr_mc_outgoing_address
);
6539 prefs_register_uint_preference(lbmr_module
,
6541 "Unicast UDP port low (default " LBMR_DEFAULT_UC_PORT_LOW_STRING
")",
6542 "Set the low UDP port for unicast topic resolution (context resolver_unicast_port_low)",
6544 &global_lbmr_uc_port_low
);
6545 prefs_register_uint_preference(lbmr_module
,
6547 "Unicast UDP port high (default " LBMR_DEFAULT_UC_PORT_HIGH_STRING
")",
6548 "Set the high UDP port for unicast topic resolution (context resolver_unicast_port_high)",
6550 &global_lbmr_uc_port_high
);
6551 prefs_register_uint_preference(lbmr_module
,
6553 "Unicast UDP destination port (default " LBMR_DEFAULT_UC_DEST_PORT_STRING
")",
6554 "Set the destination port for unicast topic resolution (context resolver_unicast_destination_port)",
6556 &global_lbmr_uc_dest_port
);
6557 ws_inet_pton4(LBMR_DEFAULT_UC_ADDRESS
, &addr
);
6558 lbmr_uc_address_host
= g_ntohl(addr
);
6559 prefs_register_string_preference(lbmr_module
,
6561 "Unicast resolver address (default " LBMR_DEFAULT_UC_ADDRESS
")",
6562 "Set the address of the unicast resolver daemon (context resolver_unicast_address)",
6563 &global_lbmr_uc_address
);
6564 prefs_register_bool_preference(lbmr_module
,
6566 "Use LBMR tag table",
6567 "Use table of LBMR tags to decode the packet instead of above values",
6568 &global_lbmr_use_tag
);
6569 tag_uat
= uat_new("LBMR tag definitions",
6570 sizeof(lbmr_tag_entry_t
),
6573 (void * *)&lbmr_tag_entry
,
6575 UAT_AFFECTS_DISSECTION
,
6583 prefs_register_uat_preference(lbmr_module
,
6586 "A table to define LBMR tags",
6589 lbmr_topic_advertisement_tap_handle
= register_tap(LBMR_TOPIC_ADVERTISEMENT_TAP_STRING
);
6590 lbmr_topic_query_tap_handle
= register_tap(LBMR_TOPIC_QUERY_TAP_STRING
);
6591 lbmr_pattern_query_tap_handle
= register_tap(LBMR_PATTERN_QUERY_TAP_STRING
);
6592 lbmr_queue_advertisement_tap_handle
= register_tap(LBMR_QUEUE_ADVERTISEMENT_TAP_STRING
);
6593 lbmr_queue_query_tap_handle
= register_tap(LBMR_QUEUE_QUERY_TAP_STRING
);
6595 stats_tree_register(LBMR_TOPIC_ADVERTISEMENT_TAP_STRING
,
6596 "lbmr_topic_ads_topic",
6597 lbmr_stat_tree_name_topic_ads_topic
,
6599 lbmr_topic_ads_topic_stats_tree_packet
,
6600 lbmr_topic_ads_topic_stats_tree_init
,
6602 stats_tree_register(LBMR_TOPIC_ADVERTISEMENT_TAP_STRING
,
6603 "lbmr_topic_ads_source",
6604 lbmr_stat_tree_name_topic_ads_source
,
6606 lbmr_topic_ads_source_stats_tree_packet
,
6607 lbmr_topic_ads_source_stats_tree_init
,
6609 stats_tree_register(LBMR_TOPIC_ADVERTISEMENT_TAP_STRING
,
6610 "lbmr_topic_ads_transport",
6611 lbmr_stat_tree_name_topic_ads_transport
,
6613 lbmr_topic_ads_transport_stats_tree_packet
,
6614 lbmr_topic_ads_transport_stats_tree_init
,
6616 stats_tree_register(LBMR_TOPIC_QUERY_TAP_STRING
,
6617 "lbmr_topic_queries_topic",
6618 lbmr_stat_tree_name_topic_queries_topic
,
6620 lbmr_topic_queries_topic_stats_tree_packet
,
6621 lbmr_topic_queries_topic_stats_tree_init
,
6623 stats_tree_register(LBMR_TOPIC_QUERY_TAP_STRING
,
6624 "lbmr_topic_queries_receiver",
6625 lbmr_stat_tree_name_topic_queries_receiver
,
6627 lbmr_topic_queries_receiver_stats_tree_packet
,
6628 lbmr_topic_queries_receiver_stats_tree_init
,
6630 stats_tree_register(LBMR_PATTERN_QUERY_TAP_STRING
,
6631 "lbmr_topic_queries_pattern",
6632 lbmr_stat_tree_name_topic_queries_pattern
,
6634 lbmr_topic_queries_pattern_stats_tree_packet
,
6635 lbmr_topic_queries_pattern_stats_tree_init
,
6637 stats_tree_register(LBMR_PATTERN_QUERY_TAP_STRING
,
6638 "lbmr_topic_queries_pattern_receiver",
6639 lbmr_stat_tree_name_topic_queries_pattern_receiver
,
6641 lbmr_topic_queries_pattern_receiver_stats_tree_packet
,
6642 lbmr_topic_queries_pattern_receiver_stats_tree_init
,
6644 stats_tree_register(LBMR_QUEUE_ADVERTISEMENT_TAP_STRING
,
6645 "lbmr_queue_ads_queue",
6646 lbmr_stat_tree_name_queue_ads_queue
,
6648 lbmr_queue_ads_queue_stats_tree_packet
,
6649 lbmr_queue_ads_queue_stats_tree_init
,
6651 stats_tree_register(LBMR_QUEUE_ADVERTISEMENT_TAP_STRING
,
6652 "lbmr_queue_ads_source",
6653 lbmr_stat_tree_name_queue_ads_source
,
6655 lbmr_queue_ads_source_stats_tree_packet
,
6656 lbmr_queue_ads_source_stats_tree_init
,
6658 stats_tree_register(LBMR_QUEUE_QUERY_TAP_STRING
,
6659 "lbmr_queue_queries_queue",
6660 lbmr_stat_tree_name_queue_queries_queue
,
6662 lbmr_queue_queries_queue_stats_tree_packet
,
6663 lbmr_queue_queries_queue_stats_tree_init
,
6665 stats_tree_register(LBMR_QUEUE_QUERY_TAP_STRING
,
6666 "lbmr_queue_queries_receiver",
6667 lbmr_stat_tree_name_queue_queries_receiver
,
6669 lbmr_queue_queries_receiver_stats_tree_packet
,
6670 lbmr_queue_queries_receiver_stats_tree_init
,
6674 lbtsmx_transport_init();
6675 lbtipc_transport_init();
6676 lbtrdma_transport_init();
6679 /* The registration hand-off routine */
6680 void proto_reg_handoff_lbmr(void)
6682 static bool already_registered
= false;
6685 if (!already_registered
)
6687 dissector_add_for_decode_as_with_preference("udp.port", lbmr_dissector_handle
);
6688 heur_dissector_add("udp", test_lbmr_packet
, "LBM Topic Resolution over UDP", "lbmr_udp", proto_lbmr
, HEURISTIC_ENABLE
);
6691 lbmr_mc_incoming_udp_port
= global_lbmr_mc_incoming_udp_port
;
6692 lbmr_mc_outgoing_udp_port
= global_lbmr_mc_outgoing_udp_port
;
6693 ws_inet_pton4(global_lbmr_mc_incoming_address
, &addr
);
6694 lbmr_mc_incoming_address_host
= g_ntohl(addr
);
6696 ws_inet_pton4(global_lbmr_mc_outgoing_address
, &addr
);
6697 lbmr_mc_outgoing_address_host
= g_ntohl(addr
);
6699 /* Make sure the low port is <= the high port. If not, don't change them. */
6700 if (global_lbmr_uc_port_low
<= global_lbmr_uc_port_high
)
6702 lbmr_uc_port_high
= global_lbmr_uc_port_high
;
6703 lbmr_uc_port_low
= global_lbmr_uc_port_low
;
6705 lbmr_uc_dest_port
= global_lbmr_uc_dest_port
;
6706 ws_inet_pton4(global_lbmr_uc_address
, &addr
);
6707 lbmr_uc_address_host
= g_ntohl(addr
);
6708 lbmr_use_tag
= global_lbmr_use_tag
;
6710 already_registered
= true;
6714 * Editor modelines - https://www.wireshark.org/tools/modelines.html
6719 * indent-tabs-mode: nil
6722 * vi: set shiftwidth=4 tabstop=8 expandtab:
6723 * :indentSize=4:tabSize=8:noTabs=true: