/src/wireshark/epan/dissectors/packet-lbmr.c
Line | Count | Source |
1 | | /* packet-lbmr.c |
2 | | * Routines for LBM Topic Resolution Packet dissection |
3 | | * |
4 | | * Copyright (c) 2005-2014 Informatica Corporation. All Rights Reserved. |
5 | | * |
6 | | * Wireshark - Network traffic analyzer |
7 | | * By Gerald Combs <gerald@wireshark.org> |
8 | | * Copyright 1998 Gerald Combs |
9 | | * |
10 | | * SPDX-License-Identifier: GPL-2.0-or-later |
11 | | */ |
12 | | |
13 | | #include "config.h" |
14 | | |
15 | | #include <epan/packet.h> |
16 | | #include <epan/address.h> |
17 | | #include <epan/strutil.h> |
18 | | #include <epan/prefs.h> |
19 | | #include <epan/tap.h> |
20 | | #include <epan/stats_tree.h> |
21 | | #include <epan/expert.h> |
22 | | #include <epan/uat.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" |
29 | | |
30 | | #define LBMR_MAX_NAMELEN 256 |
31 | | |
32 | | void proto_register_lbmr(void); |
33 | | void proto_reg_handoff_lbmr(void); |
34 | | |
35 | | /*----------------------------------------------------------------------------*/ |
36 | | /* LBT-IPC transport management. */ |
37 | | /*----------------------------------------------------------------------------*/ |
38 | | |
39 | | typedef struct |
40 | | { |
41 | | uint32_t host_id; |
42 | | uint32_t session_id; |
43 | | uint16_t xport_id; |
44 | | uint64_t channel; |
45 | | } lbtipc_transport_t; |
46 | | |
47 | | static wmem_tree_t * lbtipc_transport_table; |
48 | | |
49 | 0 | #define LBTIPC_KEY_ELEMENT_COUNT 3 |
50 | 0 | #define LBTIPC_KEY_ELEMENT_HOST_ID 0 |
51 | 0 | #define LBTIPC_KEY_ELEMENT_SESSION_ID 1 |
52 | 0 | #define LBTIPC_KEY_ELEMENT_XPORT_ID 2 |
53 | | |
54 | | static void lbtipc_transport_init(void) |
55 | 14 | { |
56 | 14 | lbtipc_transport_table = wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope()); |
57 | 14 | } |
58 | | |
59 | | static lbtipc_transport_t * lbtipc_transport_find(uint32_t host_id, uint32_t session_id, uint16_t xport_id) |
60 | 0 | { |
61 | 0 | lbtipc_transport_t * entry = NULL; |
62 | 0 | uint32_t keyval[LBTIPC_KEY_ELEMENT_COUNT]; |
63 | 0 | wmem_tree_key_t tkey[2]; |
64 | |
|
65 | 0 | keyval[LBTIPC_KEY_ELEMENT_HOST_ID] = host_id; |
66 | 0 | keyval[LBTIPC_KEY_ELEMENT_SESSION_ID] = session_id; |
67 | 0 | keyval[LBTIPC_KEY_ELEMENT_XPORT_ID] = (uint32_t) xport_id; |
68 | 0 | tkey[0].length = LBTIPC_KEY_ELEMENT_COUNT; |
69 | 0 | tkey[0].key = keyval; |
70 | 0 | tkey[1].length = 0; |
71 | 0 | tkey[1].key = NULL; |
72 | 0 | entry = (lbtipc_transport_t *) wmem_tree_lookup32_array(lbtipc_transport_table, tkey); |
73 | 0 | return (entry); |
74 | 0 | } |
75 | | |
76 | | static lbtipc_transport_t * lbtipc_transport_add(uint32_t host_id, uint32_t session_id, uint16_t xport_id) |
77 | 0 | { |
78 | 0 | lbtipc_transport_t * entry; |
79 | 0 | uint32_t keyval[LBTIPC_KEY_ELEMENT_COUNT]; |
80 | 0 | wmem_tree_key_t tkey[2]; |
81 | |
|
82 | 0 | entry = lbtipc_transport_find(host_id, session_id, xport_id); |
83 | 0 | if (entry != NULL) |
84 | 0 | { |
85 | 0 | return (entry); |
86 | 0 | } |
87 | 0 | entry = wmem_new(wmem_file_scope(), lbtipc_transport_t); |
88 | 0 | entry->host_id = host_id; |
89 | 0 | entry->session_id = session_id; |
90 | 0 | entry->xport_id = xport_id; |
91 | 0 | entry->channel = lbm_channel_assign(LBM_CHANNEL_TRANSPORT_LBTIPC); |
92 | 0 | keyval[LBTIPC_KEY_ELEMENT_HOST_ID] = host_id; |
93 | 0 | keyval[LBTIPC_KEY_ELEMENT_SESSION_ID] = session_id; |
94 | 0 | keyval[LBTIPC_KEY_ELEMENT_XPORT_ID] = (uint32_t) xport_id; |
95 | 0 | tkey[0].length = LBTIPC_KEY_ELEMENT_COUNT; |
96 | 0 | tkey[0].key = keyval; |
97 | 0 | tkey[1].length = 0; |
98 | 0 | tkey[1].key = NULL; |
99 | 0 | wmem_tree_insert32_array(lbtipc_transport_table, tkey, (void *) entry); |
100 | 0 | return (entry); |
101 | 0 | } |
102 | | |
103 | | static char * lbtipc_transport_source_string(uint32_t host_id _U_, uint32_t session_id, uint16_t xport_id) |
104 | 0 | { |
105 | 0 | return (wmem_strdup_printf(wmem_file_scope(), "LBT-IPC:%x:%" PRIu16, session_id, xport_id)); |
106 | 0 | } |
107 | | |
108 | | /*----------------------------------------------------------------------------*/ |
109 | | /* LBT-SMX transport management. */ |
110 | | /*----------------------------------------------------------------------------*/ |
111 | | |
112 | | typedef struct |
113 | | { |
114 | | uint32_t host_id; |
115 | | uint32_t session_id; |
116 | | uint16_t xport_id; |
117 | | uint64_t channel; |
118 | | } lbtsmx_transport_t; |
119 | | |
120 | | static wmem_tree_t * lbtsmx_transport_table; |
121 | | |
122 | 0 | #define LBTSMX_KEY_ELEMENT_COUNT 3 |
123 | 0 | #define LBTSMX_KEY_ELEMENT_HOST_ID 0 |
124 | 0 | #define LBTSMX_KEY_ELEMENT_SESSION_ID 1 |
125 | 0 | #define LBTSMX_KEY_ELEMENT_XPORT_ID 2 |
126 | | |
127 | | static void lbtsmx_transport_init(void) |
128 | 14 | { |
129 | 14 | lbtsmx_transport_table = wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope()); |
130 | 14 | } |
131 | | |
132 | | static lbtsmx_transport_t * lbtsmx_transport_find(uint32_t host_id, uint32_t session_id, uint16_t xport_id) |
133 | 0 | { |
134 | 0 | lbtsmx_transport_t * entry = NULL; |
135 | 0 | uint32_t keyval[LBTSMX_KEY_ELEMENT_COUNT]; |
136 | 0 | wmem_tree_key_t tkey[2]; |
137 | |
|
138 | 0 | keyval[LBTSMX_KEY_ELEMENT_HOST_ID] = host_id; |
139 | 0 | keyval[LBTSMX_KEY_ELEMENT_SESSION_ID] = session_id; |
140 | 0 | keyval[LBTSMX_KEY_ELEMENT_XPORT_ID] = (uint32_t) xport_id; |
141 | 0 | tkey[0].length = LBTSMX_KEY_ELEMENT_COUNT; |
142 | 0 | tkey[0].key = keyval; |
143 | 0 | tkey[1].length = 0; |
144 | 0 | tkey[1].key = NULL; |
145 | 0 | entry = (lbtsmx_transport_t *) wmem_tree_lookup32_array(lbtsmx_transport_table, tkey); |
146 | 0 | return (entry); |
147 | 0 | } |
148 | | |
149 | | static lbtsmx_transport_t * lbtsmx_transport_add(uint32_t host_id, uint32_t session_id, uint16_t xport_id) |
150 | 0 | { |
151 | 0 | lbtsmx_transport_t * entry; |
152 | 0 | uint32_t keyval[LBTSMX_KEY_ELEMENT_COUNT]; |
153 | 0 | wmem_tree_key_t tkey[2]; |
154 | |
|
155 | 0 | entry = lbtsmx_transport_find(host_id, session_id, xport_id); |
156 | 0 | if (entry != NULL) |
157 | 0 | { |
158 | 0 | return (entry); |
159 | 0 | } |
160 | 0 | entry = wmem_new(wmem_file_scope(), lbtsmx_transport_t); |
161 | 0 | entry->host_id = host_id; |
162 | 0 | entry->session_id = session_id; |
163 | 0 | entry->xport_id = xport_id; |
164 | 0 | entry->channel = lbm_channel_assign(LBM_CHANNEL_TRANSPORT_LBTSMX); |
165 | 0 | keyval[LBTSMX_KEY_ELEMENT_HOST_ID] = host_id; |
166 | 0 | keyval[LBTSMX_KEY_ELEMENT_SESSION_ID] = session_id; |
167 | 0 | keyval[LBTSMX_KEY_ELEMENT_XPORT_ID] = (uint32_t) xport_id; |
168 | 0 | tkey[0].length = LBTSMX_KEY_ELEMENT_COUNT; |
169 | 0 | tkey[0].key = keyval; |
170 | 0 | tkey[1].length = 0; |
171 | 0 | tkey[1].key = NULL; |
172 | 0 | wmem_tree_insert32_array(lbtsmx_transport_table, tkey, (void *) entry); |
173 | 0 | return (entry); |
174 | 0 | } |
175 | | |
176 | | static char * lbtsmx_transport_source_string(uint32_t host_id _U_, uint32_t session_id, uint16_t xport_id) |
177 | 0 | { |
178 | 0 | return (wmem_strdup_printf(wmem_file_scope(), "LBT-SMX:%x:%" PRIu16, session_id, xport_id)); |
179 | 0 | } |
180 | | |
181 | | /*----------------------------------------------------------------------------*/ |
182 | | /* LBT-RDMA transport management. */ |
183 | | /*----------------------------------------------------------------------------*/ |
184 | | |
185 | | typedef struct |
186 | | { |
187 | | address source_address; |
188 | | uint32_t session_id; |
189 | | uint16_t port; |
190 | | uint64_t channel; |
191 | | } lbtrdma_transport_t; |
192 | | |
193 | | static wmem_tree_t * lbtrdma_transport_table; |
194 | | |
195 | 0 | #define LBTRDMA_KEY_ELEMENT_COUNT 3 |
196 | 0 | #define LBTRDMA_KEY_ELEMENT_SOURCE_ADDRESS 0 |
197 | 0 | #define LBTRDMA_KEY_ELEMENT_SESSION_ID 1 |
198 | 0 | #define LBTRDMA_KEY_ELEMENT_PORT 2 |
199 | | |
200 | | static void lbtrdma_transport_init(void) |
201 | 14 | { |
202 | 14 | lbtrdma_transport_table = wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope()); |
203 | 14 | } |
204 | | |
205 | | static void lbtrdma_transport_build_key(uint32_t * key_value, wmem_tree_key_t * key, const lbtrdma_transport_t * transport) |
206 | 0 | { |
207 | 0 | uint32_t val; |
208 | |
|
209 | 0 | memcpy(&val, transport->source_address.data, sizeof(uint32_t)); |
210 | 0 | key_value[LBTRDMA_KEY_ELEMENT_SOURCE_ADDRESS] = val; |
211 | 0 | key_value[LBTRDMA_KEY_ELEMENT_SESSION_ID] = transport->session_id; |
212 | 0 | key_value[LBTRDMA_KEY_ELEMENT_PORT] = (uint32_t) transport->port; |
213 | 0 | key[0].length = LBTRDMA_KEY_ELEMENT_COUNT; |
214 | 0 | key[0].key = key_value; |
215 | 0 | key[1].length = 0; |
216 | 0 | key[1].key = NULL; |
217 | 0 | } |
218 | | |
219 | | static lbtrdma_transport_t * lbtrdma_transport_find(const address * source_address, uint32_t session_id, uint16_t port) |
220 | 0 | { |
221 | 0 | lbtrdma_transport_t key; |
222 | 0 | lbtrdma_transport_t * entry = NULL; |
223 | 0 | uint32_t keyval[LBTRDMA_KEY_ELEMENT_COUNT]; |
224 | 0 | wmem_tree_key_t tkey[2]; |
225 | |
|
226 | 0 | memset((void *)&key, 0, sizeof(lbtrdma_transport_t)); |
227 | 0 | copy_address_shallow(&(key.source_address), source_address); |
228 | 0 | key.session_id = session_id; |
229 | 0 | key.port = port; |
230 | 0 | lbtrdma_transport_build_key(keyval, tkey, &key); |
231 | 0 | entry = (lbtrdma_transport_t *) wmem_tree_lookup32_array(lbtrdma_transport_table, tkey); |
232 | 0 | return (entry); |
233 | 0 | } |
234 | | |
235 | | static lbtrdma_transport_t * lbtrdma_transport_add(const address * source_address, uint32_t session_id, uint16_t port) |
236 | 0 | { |
237 | 0 | lbtrdma_transport_t * entry; |
238 | 0 | uint32_t keyval[LBTRDMA_KEY_ELEMENT_COUNT]; |
239 | 0 | wmem_tree_key_t tkey[2]; |
240 | |
|
241 | 0 | entry = lbtrdma_transport_find(source_address, session_id, port); |
242 | 0 | if (entry != NULL) |
243 | 0 | { |
244 | 0 | return (entry); |
245 | 0 | } |
246 | 0 | entry = wmem_new(wmem_file_scope(), lbtrdma_transport_t); |
247 | 0 | copy_address_wmem(wmem_file_scope(), &(entry->source_address), source_address); |
248 | 0 | entry->session_id = session_id; |
249 | 0 | entry->port = port; |
250 | 0 | entry->channel = lbm_channel_assign(LBM_CHANNEL_TRANSPORT_LBTRDMA); |
251 | 0 | lbtrdma_transport_build_key(keyval, tkey, entry); |
252 | 0 | wmem_tree_insert32_array(lbtrdma_transport_table, tkey, (void *) entry); |
253 | 0 | return (entry); |
254 | 0 | } |
255 | | |
256 | | static char * lbtrdma_transport_source_string(const address * source_address _U_, uint32_t session_id, uint16_t port) |
257 | 0 | { |
258 | 0 | return (wmem_strdup_printf(wmem_file_scope(), "LBT-RDMA:%x:%" PRIu16, session_id, port)); |
259 | 0 | } |
260 | | |
261 | | /*----------------------------------------------------------------------------*/ |
262 | | /* Packet layouts. */ |
263 | | /*----------------------------------------------------------------------------*/ |
264 | | |
265 | | /* LBMR main header. */ |
266 | | typedef struct |
267 | | { |
268 | | lbm_uint8_t ver_type; |
269 | | lbm_uint8_t tqrs; |
270 | | lbm_uint16_t tirs; |
271 | | } lbmr_hdr_t; |
272 | 0 | #define O_LBMR_HDR_T_VER_TYPE OFFSETOF(lbmr_hdr_t, ver_type) |
273 | 0 | #define L_LBMR_HDR_T_VER_TYPE SIZEOF(lbmr_hdr_t, ver_type) |
274 | 0 | #define O_LBMR_HDR_T_TQRS OFFSETOF(lbmr_hdr_t, tqrs) |
275 | 0 | #define L_LBMR_HDR_T_TQRS SIZEOF(lbmr_hdr_t, tqrs) |
276 | 0 | #define O_LBMR_HDR_T_TIRS OFFSETOF(lbmr_hdr_t, tirs) |
277 | 0 | #define L_LBMR_HDR_T_TIRS SIZEOF(lbmr_hdr_t, tirs) |
278 | 0 | #define L_LBMR_HDR_T (int) sizeof(lbmr_hdr_t) |
279 | | |
280 | 14 | #define LBMR_HDR_VER_VER_MASK 0xf0 |
281 | 14 | #define LBMR_HDR_VER_TYPE_MASK 0x07 |
282 | 0 | #define LBMR_HDR_VER(x) (((x) & LBMR_HDR_VER_VER_MASK) >> 4) |
283 | 0 | #define LBMR_HDR_TYPE(x) ((x) & LBMR_HDR_VER_TYPE_MASK) |
284 | | |
285 | 0 | #define LBMR_HDR_TYPE_NORMAL 0x0 |
286 | 0 | #define LBMR_HDR_TYPE_WC_TQRS 0x1 |
287 | 0 | #define LBMR_HDR_TYPE_UCAST_RCV_ALIVE 0x2 |
288 | 0 | #define LBMR_HDR_TYPE_UCAST_SRC_ALIVE 0x3 |
289 | 0 | #define LBMR_HDR_TYPE_TOPIC_MGMT 0x4 |
290 | 0 | #define LBMR_HDR_TYPE_QUEUE_RES 0x6 |
291 | 0 | #define LBMR_HDR_TYPE_EXT 0x7 |
292 | 14 | #define LBMR_HDR_TYPE_OPTS_MASK 0x8 |
293 | | |
294 | | /* LBMR extended header. */ |
295 | | typedef struct |
296 | | { |
297 | | lbm_uint8_t ver_type; |
298 | | lbm_uint8_t ext_type; |
299 | | lbm_uint16_t dep; |
300 | | } lbmr_hdr_ext_type_t; |
301 | 0 | #define O_LBMR_HDR_EXT_TYPE_T_VER_TYPE OFFSETOF(lbmr_hdr_ext_type_t, ver_type) |
302 | 0 | #define L_LBMR_HDR_EXT_TYPE_T_VER_TYPE SIZEOF(lbmr_hdr_ext_type_t, ver_type) |
303 | 0 | #define O_LBMR_HDR_EXT_TYPE_T_EXT_TYPE OFFSETOF(lbmr_hdr_ext_type_t, ext_type) |
304 | 0 | #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) |
308 | | |
309 | 0 | #define LBMR_HDR_EXT_TYPE_UME_PROXY_SRC_ELECT 0x1 |
310 | 0 | #define LBMR_HDR_EXT_TYPE_UMQ_QUEUE_MGMT 0x2 |
311 | 0 | #define LBMR_HDR_EXT_TYPE_CONTEXT_INFO 0x3 |
312 | 0 | #define LBMR_HDR_EXT_TYPE_TOPIC_RES_REQUEST 0x4 |
313 | 0 | #define LBMR_HDR_EXT_TYPE_TNWG_MSG 0x5 |
314 | 0 | #define LBMR_HDR_EXT_TYPE_REMOTE_DOMAIN_ROUTE 0x6 |
315 | 0 | #define LBMR_HDR_EXT_TYPE_REMOTE_CONTEXT_INFO 0x7 |
316 | | |
317 | | /* LBMR topic information record */ |
318 | | typedef struct |
319 | | { |
320 | | lbm_uint8_t transport; |
321 | | lbm_uint8_t tlen; |
322 | | lbm_uint16_t ttl; |
323 | | lbm_uint32_t idx; |
324 | | } lbmr_tir_t; |
325 | 0 | #define O_LBMR_TIR_T_TRANSPORT OFFSETOF(lbmr_tir_t, transport) |
326 | 14 | #define L_LBMR_TIR_T_TRANSPORT SIZEOF(lbmr_tir_t, transport) |
327 | 0 | #define O_LBMR_TIR_T_TLEN OFFSETOF(lbmr_tir_t, tlen) |
328 | 0 | #define L_LBMR_TIR_T_TLEN SIZEOF(lbmr_tir_t, tlen) |
329 | 0 | #define O_LBMR_TIR_T_TTL OFFSETOF(lbmr_tir_t, ttl) |
330 | 0 | #define L_LBMR_TIR_T_TTL SIZEOF(lbmr_tir_t, ttl) |
331 | 0 | #define O_LBMR_TIR_T_INDEX OFFSETOF(lbmr_tir_t, idx) |
332 | 0 | #define L_LBMR_TIR_T_INDEX SIZEOF(lbmr_tir_t, idx) |
333 | 0 | #define L_LBMR_TIR_T (int) sizeof(lbmr_tir_t) |
334 | | |
335 | | /* LBMR topic information record TCP option data */ |
336 | | typedef struct |
337 | | { |
338 | | lbm_uint32_t ip; |
339 | | lbm_uint16_t port; |
340 | | } lbmr_tir_tcp_t; |
341 | 0 | #define O_LBMR_TIR_TCP_T_IP OFFSETOF(lbmr_tir_tcp_t, ip) |
342 | 0 | #define L_LBMR_TIR_TCP_T_IP SIZEOF(lbmr_tir_tcp_t, ip) |
343 | 0 | #define O_LBMR_TIR_TCP_T_PORT OFFSETOF(lbmr_tir_tcp_t, port) |
344 | 0 | #define L_LBMR_TIR_TCP_T_PORT SIZEOF(lbmr_tir_tcp_t, port) |
345 | 0 | #define L_LBMR_TIR_TCP_T 6 |
346 | | |
347 | | typedef struct { |
348 | | lbm_uint32_t ip; |
349 | | lbm_uint32_t session_id; |
350 | | lbm_uint16_t port; |
351 | | } lbmr_tir_tcp_with_sid_t; |
352 | 0 | #define O_LBMR_TIR_TCP_WITH_SID_T_IP OFFSETOF(lbmr_tir_tcp_with_sid_t, ip) |
353 | 0 | #define L_LBMR_TIR_TCP_WITH_SID_T_IP SIZEOF(lbmr_tir_tcp_with_sid_t, ip) |
354 | 0 | #define O_LBMR_TIR_TCP_WITH_SID_T_SESSION_ID OFFSETOF(lbmr_tir_tcp_with_sid_t, session_id) |
355 | 0 | #define L_LBMR_TIR_TCP_WITH_SID_T_SESSION_ID SIZEOF(lbmr_tir_tcp_with_sid_t, session_id) |
356 | 0 | #define O_LBMR_TIR_TCP_WITH_SID_T_PORT OFFSETOF(lbmr_tir_tcp_with_sid_t, port) |
357 | 0 | #define L_LBMR_TIR_TCP_WITH_SID_T_PORT SIZEOF(lbmr_tir_tcp_with_sid_t, port) |
358 | 0 | #define L_LBMR_TIR_TCP_WITH_SID_T 10 |
359 | | |
360 | | /* LBMR topic information record LBT-RM option data */ |
361 | | typedef struct |
362 | | { |
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; |
368 | | } lbmr_tir_lbtrm_t; |
369 | 0 | #define O_LBMR_TIR_LBTRM_T_SRC_ADDR OFFSETOF(lbmr_tir_lbtrm_t, src_addr) |
370 | 0 | #define L_LBMR_TIR_LBTRM_T_SRC_ADDR SIZEOF(lbmr_tir_lbtrm_t, src_addr) |
371 | 0 | #define O_LBMR_TIR_LBTRM_T_MCAST_ADDR OFFSETOF(lbmr_tir_lbtrm_t, mcast_addr) |
372 | 0 | #define L_LBMR_TIR_LBTRM_T_MCAST_ADDR SIZEOF(lbmr_tir_lbtrm_t, mcast_addr) |
373 | 0 | #define O_LBMR_TIR_LBTRM_T_SESSION_ID OFFSETOF(lbmr_tir_lbtrm_t, session_id) |
374 | 0 | #define L_LBMR_TIR_LBTRM_T_SESSION_ID SIZEOF(lbmr_tir_lbtrm_t, session_id) |
375 | 0 | #define O_LBMR_TIR_LBTRM_T_UDP_DEST_PORT OFFSETOF(lbmr_tir_lbtrm_t, udp_dest_port) |
376 | 0 | #define L_LBMR_TIR_LBTRM_T_UDP_DEST_PORT SIZEOF(lbmr_tir_lbtrm_t, udp_dest_port) |
377 | 0 | #define O_LBMR_TIR_LBTRM_T_SRC_UCAST_PORT OFFSETOF(lbmr_tir_lbtrm_t, src_ucast_port) |
378 | 0 | #define L_LBMR_TIR_LBTRM_T_SRC_UCAST_PORT SIZEOF(lbmr_tir_lbtrm_t, src_ucast_port) |
379 | 0 | #define L_LBMR_TIR_LBTRM_T (int) sizeof(lbmr_tir_lbtrm_t) |
380 | | |
381 | | /* LBMR topic information record LBT-RU option data */ |
382 | | typedef struct |
383 | | { |
384 | | lbm_uint32_t ip; |
385 | | lbm_uint16_t port; |
386 | | } lbmr_tir_lbtru_t; |
387 | 0 | #define O_LBMR_TIR_LBTRU_T_IP OFFSETOF(lbmr_tir_lbtru_t, ip) |
388 | 0 | #define L_LBMR_TIR_LBTRU_T_IP SIZEOF(lbmr_tir_lbtru_t, ip) |
389 | 0 | #define O_LBMR_TIR_LBTRU_T_PORT OFFSETOF(lbmr_tir_lbtru_t, port) |
390 | 0 | #define L_LBMR_TIR_LBTRU_T_PORT SIZEOF(lbmr_tir_lbtru_t, port) |
391 | 0 | #define L_LBMR_TIR_LBTRU_T 6 |
392 | | |
393 | | typedef struct |
394 | | { |
395 | | lbm_uint32_t ip; |
396 | | lbm_uint32_t session_id; |
397 | | lbm_uint16_t port; |
398 | | } lbmr_tir_lbtru_with_sid_t; |
399 | 0 | #define O_LBMR_TIR_LBTRU_WITH_SID_T_IP OFFSETOF(lbmr_tir_lbtru_with_sid_t, ip) |
400 | 0 | #define L_LBMR_TIR_LBTRU_WITH_SID_T_IP SIZEOF(lbmr_tir_lbtru_with_sid_t, ip) |
401 | 0 | #define O_LBMR_TIR_LBTRU_WITH_SID_T_SESSION_ID OFFSETOF(lbmr_tir_lbtru_with_sid_t, session_id) |
402 | 0 | #define L_LBMR_TIR_LBTRU_WITH_SID_T_SESSION_ID SIZEOF(lbmr_tir_lbtru_with_sid_t, session_id) |
403 | 0 | #define O_LBMR_TIR_LBTRU_WITH_SID_T_PORT OFFSETOF(lbmr_tir_lbtru_with_sid_t, port) |
404 | 0 | #define L_LBMR_TIR_LBTRU_WITH_SID_T_PORT SIZEOF(lbmr_tir_lbtru_with_sid_t, port) |
405 | 0 | #define L_LBMR_TIR_LBTRU_WITH_SID_T 10 |
406 | | |
407 | | /* LBMR topic information record LBT-IPC option data */ |
408 | | typedef struct |
409 | | { |
410 | | lbm_uint32_t host_id; |
411 | | lbm_uint32_t session_id; |
412 | | lbm_uint16_t xport_id; |
413 | | } lbmr_tir_lbtipc_t; |
414 | 0 | #define O_LBMR_TIR_LBTIPC_T_HOST_ID OFFSETOF(lbmr_tir_lbtipc_t, host_id) |
415 | 0 | #define L_LBMR_TIR_LBTIPC_T_HOST_ID SIZEOF(lbmr_tir_lbtipc_t, host_id) |
416 | 0 | #define O_LBMR_TIR_LBTIPC_T_SESSION_ID OFFSETOF(lbmr_tir_lbtipc_t, session_id) |
417 | 0 | #define L_LBMR_TIR_LBTIPC_T_SESSION_ID SIZEOF(lbmr_tir_lbtipc_t, session_id) |
418 | 0 | #define O_LBMR_TIR_LBTIPC_T_XPORT_ID OFFSETOF(lbmr_tir_lbtipc_t, xport_id) |
419 | 0 | #define L_LBMR_TIR_LBTIPC_T_XPORT_ID SIZEOF(lbmr_tir_lbtipc_t, xport_id) |
420 | 0 | #define L_LBMR_TIR_LBTIPC_T 10 |
421 | | |
422 | | /* LBMR topic information record LBT-RDMA option data */ |
423 | | typedef struct |
424 | | { |
425 | | lbm_uint32_t ip; |
426 | | lbm_uint32_t session_id; |
427 | | lbm_uint16_t port; |
428 | | } lbmr_tir_lbtrdma_t; |
429 | 0 | #define O_LBMR_TIR_LBTRDMA_T_IP OFFSETOF(lbmr_tir_lbtrdma_t, ip) |
430 | 0 | #define L_LBMR_TIR_LBTRDMA_T_IP SIZEOF(lbmr_tir_lbtrdma_t, ip) |
431 | 0 | #define O_LBMR_TIR_LBTRDMA_T_SESSION_ID OFFSETOF(lbmr_tir_lbtrdma_t, session_id) |
432 | 0 | #define L_LBMR_TIR_LBTRDMA_T_SESSION_ID SIZEOF(lbmr_tir_lbtrdma_t, session_id) |
433 | 0 | #define O_LBMR_TIR_LBTRDMA_T_PORT OFFSETOF(lbmr_tir_lbtrdma_t, port) |
434 | 0 | #define L_LBMR_TIR_LBTRDMA_T_PORT SIZEOF(lbmr_tir_lbtrdma_t, port) |
435 | 0 | #define L_LBMR_TIR_LBTRDMA_T 10 |
436 | | |
437 | | /* LBMR topic information record LBT-SMX option data */ |
438 | | typedef struct |
439 | | { |
440 | | lbm_uint32_t host_id; |
441 | | lbm_uint32_t session_id; |
442 | | lbm_uint16_t xport_id; |
443 | | } lbmr_tir_lbtsmx_t; |
444 | 0 | #define O_LBMR_TIR_LBTSMX_T_HOST_ID OFFSETOF(lbmr_tir_lbtsmx_t, host_id) |
445 | 0 | #define L_LBMR_TIR_LBTSMX_T_HOST_ID SIZEOF(lbmr_tir_lbtsmx_t, host_id) |
446 | 0 | #define O_LBMR_TIR_LBTSMX_T_SESSION_ID OFFSETOF(lbmr_tir_lbtsmx_t, session_id) |
447 | 0 | #define L_LBMR_TIR_LBTSMX_T_SESSION_ID SIZEOF(lbmr_tir_lbtsmx_t, session_id) |
448 | 0 | #define O_LBMR_TIR_LBTSMX_T_XPORT_ID OFFSETOF(lbmr_tir_lbtsmx_t, xport_id) |
449 | 0 | #define L_LBMR_TIR_LBTSMX_T_XPORT_ID SIZEOF(lbmr_tir_lbtsmx_t, xport_id) |
450 | 0 | #define L_LBMR_TIR_LBTSMX_T 10 |
451 | | |
452 | 14 | #define LBMR_TIR_TRANSPORT 0x7F |
453 | 14 | #define LBMR_TIR_OPTIONS 0x80 |
454 | | |
455 | | /* LBMR topic option */ |
456 | | typedef struct |
457 | | { |
458 | | lbm_uint8_t type; |
459 | | lbm_uint8_t len; |
460 | | lbm_uint16_t flags; |
461 | | } lbmr_topic_opt_t; |
462 | 0 | #define O_LBMR_TOPIC_OPT_T_TYPE OFFSETOF(lbmr_topic_opt_t, type) |
463 | 0 | #define L_LBMR_TOPIC_OPT_T_TYPE SIZEOF(lbmr_topic_opt_t, type) |
464 | 0 | #define O_LBMR_TOPIC_OPT_T_LEN OFFSETOF(lbmr_topic_opt_t, len) |
465 | 0 | #define L_LBMR_TOPIC_OPT_T_LEN SIZEOF(lbmr_topic_opt_t, len) |
466 | 0 | #define O_LBMR_TOPIC_OPT_T_FLAGS OFFSETOF(lbmr_topic_opt_t, flags) |
467 | 84 | #define L_LBMR_TOPIC_OPT_T_FLAGS SIZEOF(lbmr_topic_opt_t, flags) |
468 | 0 | #define L_LBMR_TOPIC_OPT_T (int) sizeof(lbmr_topic_opt_t) |
469 | | |
470 | | #define LBMR_TOPIC_OPT_FLAG_IGNORE 0x8000 |
471 | | |
472 | | /* LBMR topic option length */ |
473 | | typedef struct |
474 | | { |
475 | | lbm_uint8_t type; |
476 | | lbm_uint8_t len; |
477 | | lbm_uint16_t total_len; |
478 | | } lbmr_topic_opt_len_t; |
479 | 0 | #define O_LBMR_TOPIC_OPT_LEN_T_TYPE OFFSETOF(lbmr_topic_opt_len_t, type) |
480 | 0 | #define L_LBMR_TOPIC_OPT_LEN_T_TYPE SIZEOF(lbmr_topic_opt_len_t, type) |
481 | 0 | #define O_LBMR_TOPIC_OPT_LEN_T_LEN OFFSETOF(lbmr_topic_opt_len_t, len) |
482 | 0 | #define L_LBMR_TOPIC_OPT_LEN_T_LEN SIZEOF(lbmr_topic_opt_len_t, len) |
483 | 0 | #define O_LBMR_TOPIC_OPT_LEN_T_TOTAL_LEN OFFSETOF(lbmr_topic_opt_len_t, total_len) |
484 | 0 | #define L_LBMR_TOPIC_OPT_LEN_T_TOTAL_LEN SIZEOF(lbmr_topic_opt_len_t, total_len) |
485 | 0 | #define L_LBMR_TOPIC_OPT_LEN_T (int) sizeof(lbmr_topic_opt_len_t) |
486 | | |
487 | | #define LBMR_TOPIC_OPT_LEN_TYPE 0x00 |
488 | | #define LBMR_TOPIC_OPT_LEN_SZ 4 |
489 | | |
490 | | /* LBMR topic UME option */ |
491 | | typedef struct |
492 | | { |
493 | | lbm_uint8_t type; |
494 | | lbm_uint8_t len; |
495 | | lbm_uint16_t flags; |
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 | 0 | #define O_LBMR_TOPIC_OPT_UME_T_TYPE OFFSETOF(lbmr_topic_opt_ume_t, type) |
506 | 0 | #define L_LBMR_TOPIC_OPT_UME_T_TYPE SIZEOF(lbmr_topic_opt_ume_t, type) |
507 | 0 | #define O_LBMR_TOPIC_OPT_UME_T_LEN OFFSETOF(lbmr_topic_opt_ume_t, len) |
508 | 0 | #define L_LBMR_TOPIC_OPT_UME_T_LEN SIZEOF(lbmr_topic_opt_ume_t, len) |
509 | 0 | #define O_LBMR_TOPIC_OPT_UME_T_FLAGS OFFSETOF(lbmr_topic_opt_ume_t, flags) |
510 | 70 | #define L_LBMR_TOPIC_OPT_UME_T_FLAGS SIZEOF(lbmr_topic_opt_ume_t, flags) |
511 | 0 | #define O_LBMR_TOPIC_OPT_UME_T_STORE_TCP_PORT OFFSETOF(lbmr_topic_opt_ume_t, store_tcp_port) |
512 | 0 | #define L_LBMR_TOPIC_OPT_UME_T_STORE_TCP_PORT SIZEOF(lbmr_topic_opt_ume_t, store_tcp_port) |
513 | 0 | #define O_LBMR_TOPIC_OPT_UME_T_SRC_TCP_PORT OFFSETOF(lbmr_topic_opt_ume_t, src_tcp_port) |
514 | 0 | #define L_LBMR_TOPIC_OPT_UME_T_SRC_TCP_PORT SIZEOF(lbmr_topic_opt_ume_t, src_tcp_port) |
515 | 0 | #define O_LBMR_TOPIC_OPT_UME_T_STORE_TCP_ADDR OFFSETOF(lbmr_topic_opt_ume_t, store_tcp_addr) |
516 | 0 | #define L_LBMR_TOPIC_OPT_UME_T_STORE_TCP_ADDR SIZEOF(lbmr_topic_opt_ume_t, store_tcp_addr) |
517 | 0 | #define O_LBMR_TOPIC_OPT_UME_T_SRC_TCP_ADDR OFFSETOF(lbmr_topic_opt_ume_t, src_tcp_addr) |
518 | 0 | #define L_LBMR_TOPIC_OPT_UME_T_SRC_TCP_ADDR SIZEOF(lbmr_topic_opt_ume_t, src_tcp_addr) |
519 | 0 | #define O_LBMR_TOPIC_OPT_UME_T_SRC_REG_ID OFFSETOF(lbmr_topic_opt_ume_t, src_reg_id) |
520 | 0 | #define L_LBMR_TOPIC_OPT_UME_T_SRC_REG_ID SIZEOF(lbmr_topic_opt_ume_t, src_reg_id) |
521 | 0 | #define O_LBMR_TOPIC_OPT_UME_T_TRANSPORT_IDX OFFSETOF(lbmr_topic_opt_ume_t, transport_idx) |
522 | 0 | #define L_LBMR_TOPIC_OPT_UME_T_TRANSPORT_IDX SIZEOF(lbmr_topic_opt_ume_t, transport_idx) |
523 | 0 | #define O_LBMR_TOPIC_OPT_UME_T_HIGH_SEQNUM OFFSETOF(lbmr_topic_opt_ume_t, high_seqnum) |
524 | 0 | #define L_LBMR_TOPIC_OPT_UME_T_HIGH_SEQNUM SIZEOF(lbmr_topic_opt_ume_t, high_seqnum) |
525 | 0 | #define O_LBMR_TOPIC_OPT_UME_T_LOW_SEQNUM OFFSETOF(lbmr_topic_opt_ume_t, low_seqnum) |
526 | 0 | #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) |
528 | | |
529 | 0 | #define LBMR_TOPIC_OPT_UME_TYPE 0x01 |
530 | 14 | #define LBMR_TOPIC_OPT_UME_FLAG_IGNORE 0x8000 |
531 | 14 | #define LBMR_TOPIC_OPT_UME_FLAG_LATEJOIN 0x4000 |
532 | 14 | #define LBMR_TOPIC_OPT_UME_FLAG_STORE 0x2000 |
533 | 14 | #define LBMR_TOPIC_OPT_UME_FLAG_QCCAP 0x1000 |
534 | 14 | #define LBMR_TOPIC_OPT_UME_FLAG_ACKTOSRC 0x800 |
535 | | #define LBMR_TOPIC_OPT_UME_SZ 32 |
536 | | |
537 | | /* LBMR topic UME store option */ |
538 | | typedef struct |
539 | | { |
540 | | lbm_uint8_t type; |
541 | | lbm_uint8_t len; |
542 | | lbm_uint8_t flags; |
543 | | lbm_uint8_t grp_idx; |
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 | 0 | #define O_LBMR_TOPIC_OPT_UME_STORE_T_TYPE OFFSETOF(lbmr_topic_opt_ume_store_t, type) |
550 | 0 | #define L_LBMR_TOPIC_OPT_UME_STORE_T_TYPE SIZEOF(lbmr_topic_opt_ume_store_t, type) |
551 | 0 | #define O_LBMR_TOPIC_OPT_UME_STORE_T_LEN OFFSETOF(lbmr_topic_opt_ume_store_t, len) |
552 | 0 | #define L_LBMR_TOPIC_OPT_UME_STORE_T_LEN SIZEOF(lbmr_topic_opt_ume_store_t, len) |
553 | 0 | #define O_LBMR_TOPIC_OPT_UME_STORE_T_FLAGS OFFSETOF(lbmr_topic_opt_ume_store_t, flags) |
554 | 14 | #define L_LBMR_TOPIC_OPT_UME_STORE_T_FLAGS SIZEOF(lbmr_topic_opt_ume_store_t, flags) |
555 | 0 | #define O_LBMR_TOPIC_OPT_UME_STORE_T_GRP_IDX OFFSETOF(lbmr_topic_opt_ume_store_t, grp_idx) |
556 | 0 | #define L_LBMR_TOPIC_OPT_UME_STORE_T_GRP_IDX SIZEOF(lbmr_topic_opt_ume_store_t, grp_idx) |
557 | 0 | #define O_LBMR_TOPIC_OPT_UME_STORE_T_STORE_TCP_PORT OFFSETOF(lbmr_topic_opt_ume_store_t, store_tcp_port) |
558 | 0 | #define L_LBMR_TOPIC_OPT_UME_STORE_T_STORE_TCP_PORT SIZEOF(lbmr_topic_opt_ume_store_t, store_tcp_port) |
559 | 0 | #define O_LBMR_TOPIC_OPT_UME_STORE_T_STORE_IDX OFFSETOF(lbmr_topic_opt_ume_store_t, store_idx) |
560 | 0 | #define L_LBMR_TOPIC_OPT_UME_STORE_T_STORE_IDX SIZEOF(lbmr_topic_opt_ume_store_t, store_idx) |
561 | 0 | #define O_LBMR_TOPIC_OPT_UME_STORE_T_STORE_IP_ADDR OFFSETOF(lbmr_topic_opt_ume_store_t, store_ip_addr) |
562 | 0 | #define L_LBMR_TOPIC_OPT_UME_STORE_T_STORE_IP_ADDR SIZEOF(lbmr_topic_opt_ume_store_t, store_ip_addr) |
563 | 0 | #define O_LBMR_TOPIC_OPT_UME_STORE_T_SRC_REG_ID OFFSETOF(lbmr_topic_opt_ume_store_t, src_reg_id) |
564 | 0 | #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) |
566 | | |
567 | 0 | #define LBMR_TOPIC_OPT_UME_STORE_TYPE 0x02 |
568 | 14 | #define LBMR_TOPIC_OPT_UME_STORE_FLAG_IGNORE 0x80 |
569 | | #define LBMR_TOPIC_OPT_UME_STORE_SZ 16 |
570 | | |
571 | | /* LBMR topic UME store group option */ |
572 | | typedef struct |
573 | | { |
574 | | lbm_uint8_t type; |
575 | | lbm_uint8_t len; |
576 | | lbm_uint8_t flags; |
577 | | lbm_uint8_t grp_idx; |
578 | | lbm_uint16_t grp_sz; |
579 | | lbm_uint16_t reserved; |
580 | | } lbmr_topic_opt_ume_store_group_t; |
581 | 0 | #define O_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_TYPE OFFSETOF(lbmr_topic_opt_ume_store_group_t, type) |
582 | 0 | #define L_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_TYPE SIZEOF(lbmr_topic_opt_ume_store_group_t, type) |
583 | 0 | #define O_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_LEN OFFSETOF(lbmr_topic_opt_ume_store_group_t, len) |
584 | 0 | #define L_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_LEN SIZEOF(lbmr_topic_opt_ume_store_group_t, len) |
585 | 0 | #define O_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_FLAGS OFFSETOF(lbmr_topic_opt_ume_store_group_t, flags) |
586 | 14 | #define L_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_FLAGS SIZEOF(lbmr_topic_opt_ume_store_group_t, flags) |
587 | 0 | #define O_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_GRP_IDX OFFSETOF(lbmr_topic_opt_ume_store_group_t, grp_idx) |
588 | 0 | #define L_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_GRP_IDX SIZEOF(lbmr_topic_opt_ume_store_group_t, grp_idx) |
589 | 0 | #define O_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_GRP_SZ OFFSETOF(lbmr_topic_opt_ume_store_group_t, grp_sz) |
590 | 0 | #define L_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_GRP_SZ SIZEOF(lbmr_topic_opt_ume_store_group_t, grp_sz) |
591 | 0 | #define O_LBMR_TOPIC_OPT_UME_STORE_GROUP_T_RESERVED OFFSETOF(lbmr_topic_opt_ume_store_group_t, reserved) |
592 | 0 | #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) |
594 | | |
595 | 0 | #define LBMR_TOPIC_OPT_UME_STORE_GROUP_TYPE 0x03 |
596 | 14 | #define LBMR_TOPIC_OPT_UME_STORE_GROUP_FLAG_IGNORE 0x80 |
597 | | #define LBMR_TOPIC_OPT_UME_STORE_GROUP_SZ 8 |
598 | | |
599 | | /* LBMR topic latejoin option */ |
600 | | typedef struct |
601 | | { |
602 | | lbm_uint8_t type; |
603 | | lbm_uint8_t len; |
604 | | lbm_uint16_t flags; |
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 | 0 | #define O_LBMR_TOPIC_OPT_LATEJOIN_T_TYPE OFFSETOF(lbmr_topic_opt_latejoin_t, type) |
613 | 0 | #define L_LBMR_TOPIC_OPT_LATEJOIN_T_TYPE SIZEOF(lbmr_topic_opt_latejoin_t, type) |
614 | 0 | #define O_LBMR_TOPIC_OPT_LATEJOIN_T_LEN OFFSETOF(lbmr_topic_opt_latejoin_t, len) |
615 | 0 | #define L_LBMR_TOPIC_OPT_LATEJOIN_T_LEN SIZEOF(lbmr_topic_opt_latejoin_t, len) |
616 | 0 | #define O_LBMR_TOPIC_OPT_LATEJOIN_T_FLAGS OFFSETOF(lbmr_topic_opt_latejoin_t, flags) |
617 | 28 | #define L_LBMR_TOPIC_OPT_LATEJOIN_T_FLAGS SIZEOF(lbmr_topic_opt_latejoin_t, flags) |
618 | 0 | #define O_LBMR_TOPIC_OPT_LATEJOIN_T_SRC_TCP_PORT OFFSETOF(lbmr_topic_opt_latejoin_t, src_tcp_port) |
619 | 0 | #define L_LBMR_TOPIC_OPT_LATEJOIN_T_SRC_TCP_PORT SIZEOF(lbmr_topic_opt_latejoin_t, src_tcp_port) |
620 | 0 | #define O_LBMR_TOPIC_OPT_LATEJOIN_T_RESERVED OFFSETOF(lbmr_topic_opt_latejoin_t, reserved) |
621 | 0 | #define L_LBMR_TOPIC_OPT_LATEJOIN_T_RESERVED SIZEOF(lbmr_topic_opt_latejoin_t, reserved) |
622 | 0 | #define O_LBMR_TOPIC_OPT_LATEJOIN_T_SRC_IP_ADDR OFFSETOF(lbmr_topic_opt_latejoin_t, src_ip_addr) |
623 | 0 | #define L_LBMR_TOPIC_OPT_LATEJOIN_T_SRC_IP_ADDR SIZEOF(lbmr_topic_opt_latejoin_t, src_ip_addr) |
624 | 0 | #define O_LBMR_TOPIC_OPT_LATEJOIN_T_TRANSPORT_IDX OFFSETOF(lbmr_topic_opt_latejoin_t, transport_idx) |
625 | 0 | #define L_LBMR_TOPIC_OPT_LATEJOIN_T_TRANSPORT_IDX SIZEOF(lbmr_topic_opt_latejoin_t, transport_idx) |
626 | 0 | #define O_LBMR_TOPIC_OPT_LATEJOIN_T_HIGH_SEQNUM OFFSETOF(lbmr_topic_opt_latejoin_t, high_seqnum) |
627 | 0 | #define L_LBMR_TOPIC_OPT_LATEJOIN_T_HIGH_SEQNUM SIZEOF(lbmr_topic_opt_latejoin_t, high_seqnum) |
628 | 0 | #define O_LBMR_TOPIC_OPT_LATEJOIN_T_LOW_SEQNUM OFFSETOF(lbmr_topic_opt_latejoin_t, low_seqnum) |
629 | 0 | #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) |
631 | | |
632 | 0 | #define LBMR_TOPIC_OPT_LATEJOIN_TYPE 0x04 |
633 | 14 | #define LBMR_TOPIC_OPT_LATEJOIN_FLAG_IGNORE 0x8000 |
634 | 14 | #define LBMR_TOPIC_OPT_LATEJOIN_FLAG_ACKTOSRC 0x4000 |
635 | | #define LBMR_TOPIC_OPT_LATEJOIN_SZ 24 |
636 | | |
637 | | /* LBMR topic queue control option */ |
638 | | typedef struct |
639 | | { |
640 | | lbm_uint8_t type; |
641 | | lbm_uint8_t len; |
642 | | lbm_uint16_t flags; |
643 | | lbm_uint32_t rcr_idx; |
644 | | } lbmr_topic_opt_umq_rcridx_t; |
645 | 0 | #define O_LBMR_TOPIC_OPT_UMQ_RCRIDX_T_TYPE OFFSETOF(lbmr_topic_opt_umq_rcridx_t, type) |
646 | 0 | #define L_LBMR_TOPIC_OPT_UMQ_RCRIDX_T_TYPE SIZEOF(lbmr_topic_opt_umq_rcridx_t, type) |
647 | 0 | #define O_LBMR_TOPIC_OPT_UMQ_RCRIDX_T_LEN OFFSETOF(lbmr_topic_opt_umq_rcridx_t, len) |
648 | 0 | #define L_LBMR_TOPIC_OPT_UMQ_RCRIDX_T_LEN SIZEOF(lbmr_topic_opt_umq_rcridx_t, len) |
649 | 0 | #define O_LBMR_TOPIC_OPT_UMQ_RCRIDX_T_FLAGS OFFSETOF(lbmr_topic_opt_umq_rcridx_t, flags) |
650 | 14 | #define L_LBMR_TOPIC_OPT_UMQ_RCRIDX_T_FLAGS SIZEOF(lbmr_topic_opt_umq_rcridx_t, flags) |
651 | 0 | #define O_LBMR_TOPIC_OPT_UMQ_RCRIDX_T_RCR_IDX OFFSETOF(lbmr_topic_opt_umq_rcridx_t, rcr_idx) |
652 | 0 | #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) |
654 | | |
655 | 0 | #define LBMR_TOPIC_OPT_UMQ_RCRIDX_TYPE 0x05 |
656 | | #define LBMR_TOPIC_OPT_UMQ_RCRIDX_SZ 8 |
657 | 14 | #define LBMR_TOPIC_OPT_UMQ_RCRIDX_FLAG_IGNORE 0x8000 |
658 | | |
659 | 0 | #define LBMR_TOPIC_OPT_UMQ_QINFO_TYPE 0x06 |
660 | 14 | #define LBMR_TOPIC_OPT_UMQ_FLAG_IGNORE 0x8000 |
661 | 14 | #define LBMR_TOPIC_OPT_UMQ_FLAG_QUEUE 0x4000 |
662 | 14 | #define LBMR_TOPIC_OPT_UMQ_FLAG_RCVLISTEN 0x2000 |
663 | 14 | #define LBMR_TOPIC_OPT_UMQ_FLAG_CONTROL 0x1000 |
664 | 14 | #define LBMR_TOPIC_OPT_UMQ_FLAG_SRCRCVLISTEN 0x0800 |
665 | 14 | #define LBMR_TOPIC_OPT_UMQ_FLAG_PARTICIPANTS_ONLY 0x0400 |
666 | | #define LBMR_TOPIC_OPT_UMQ_MAX_QNAME_LEN 252 |
667 | | |
668 | | /* LBMR topic ULB option */ |
669 | | typedef struct |
670 | | { |
671 | | lbm_uint8_t type; |
672 | | lbm_uint8_t len; |
673 | | lbm_uint16_t flags; |
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 | 0 | #define O_LBMR_TOPIC_OPT_ULB_T_TYPE OFFSETOF(lbmr_topic_opt_ulb_t, type) |
682 | 0 | #define L_LBMR_TOPIC_OPT_ULB_T_TYPE SIZEOF(lbmr_topic_opt_ulb_t, type) |
683 | 0 | #define O_LBMR_TOPIC_OPT_ULB_T_LEN OFFSETOF(lbmr_topic_opt_ulb_t, len) |
684 | 0 | #define L_LBMR_TOPIC_OPT_ULB_T_LEN SIZEOF(lbmr_topic_opt_ulb_t, len) |
685 | 0 | #define O_LBMR_TOPIC_OPT_ULB_T_FLAGS OFFSETOF(lbmr_topic_opt_ulb_t, flags) |
686 | 14 | #define L_LBMR_TOPIC_OPT_ULB_T_FLAGS SIZEOF(lbmr_topic_opt_ulb_t, flags) |
687 | 0 | #define O_LBMR_TOPIC_OPT_ULB_T_QUEUE_ID OFFSETOF(lbmr_topic_opt_ulb_t, queue_id) |
688 | 0 | #define L_LBMR_TOPIC_OPT_ULB_T_QUEUE_ID SIZEOF(lbmr_topic_opt_ulb_t, queue_id) |
689 | 0 | #define O_LBMR_TOPIC_OPT_ULB_T_REGID OFFSETOF(lbmr_topic_opt_ulb_t, regid) |
690 | 0 | #define L_LBMR_TOPIC_OPT_ULB_T_REGID SIZEOF(lbmr_topic_opt_ulb_t, regid) |
691 | 0 | #define O_LBMR_TOPIC_OPT_ULB_T_ULB_SRC_ID OFFSETOF(lbmr_topic_opt_ulb_t, ulb_src_id) |
692 | 0 | #define L_LBMR_TOPIC_OPT_ULB_T_ULB_SRC_ID SIZEOF(lbmr_topic_opt_ulb_t, ulb_src_id) |
693 | 0 | #define O_LBMR_TOPIC_OPT_ULB_T_SRC_IP_ADDR OFFSETOF(lbmr_topic_opt_ulb_t, src_ip_addr) |
694 | 0 | #define L_LBMR_TOPIC_OPT_ULB_T_SRC_IP_ADDR SIZEOF(lbmr_topic_opt_ulb_t, src_ip_addr) |
695 | 0 | #define O_LBMR_TOPIC_OPT_ULB_T_SRC_TCP_PORT OFFSETOF(lbmr_topic_opt_ulb_t, src_tcp_port) |
696 | 0 | #define L_LBMR_TOPIC_OPT_ULB_T_SRC_TCP_PORT SIZEOF(lbmr_topic_opt_ulb_t, src_tcp_port) |
697 | 0 | #define O_LBMR_TOPIC_OPT_ULB_T_RESERVED OFFSETOF(lbmr_topic_opt_ulb_t, reserved) |
698 | 0 | #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) |
700 | | |
701 | 0 | #define LBMR_TOPIC_OPT_ULB_TYPE 0x0B |
702 | 14 | #define LBMR_TOPIC_OPT_ULB_FLAG_IGNORE 0x8000 |
703 | | #define LBMR_TOPIC_OPT_ULB_SZ 28 |
704 | | |
705 | | /* LBMR topic cost option */ |
706 | | typedef struct |
707 | | { |
708 | | lbm_uint8_t type; |
709 | | lbm_uint8_t len; |
710 | | lbm_uint8_t flags; |
711 | | lbm_uint8_t hop_count; |
712 | | lbm_uint32_t cost; |
713 | | } lbmr_topic_opt_cost_t; |
714 | 0 | #define O_LBMR_TOPIC_OPT_COST_T_TYPE OFFSETOF(lbmr_topic_opt_cost_t, type) |
715 | 0 | #define L_LBMR_TOPIC_OPT_COST_T_TYPE SIZEOF(lbmr_topic_opt_cost_t, type) |
716 | 0 | #define O_LBMR_TOPIC_OPT_COST_T_LEN OFFSETOF(lbmr_topic_opt_cost_t, len) |
717 | 0 | #define L_LBMR_TOPIC_OPT_COST_T_LEN SIZEOF(lbmr_topic_opt_cost_t, len) |
718 | 0 | #define O_LBMR_TOPIC_OPT_COST_T_FLAGS OFFSETOF(lbmr_topic_opt_cost_t, flags) |
719 | 14 | #define L_LBMR_TOPIC_OPT_COST_T_FLAGS SIZEOF(lbmr_topic_opt_cost_t, flags) |
720 | 0 | #define O_LBMR_TOPIC_OPT_COST_T_HOP_COUNT OFFSETOF(lbmr_topic_opt_cost_t, hop_count) |
721 | 0 | #define L_LBMR_TOPIC_OPT_COST_T_HOP_COUNT SIZEOF(lbmr_topic_opt_cost_t, hop_count) |
722 | 0 | #define O_LBMR_TOPIC_OPT_COST_T_COST OFFSETOF(lbmr_topic_opt_cost_t, cost) |
723 | 0 | #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) |
725 | | |
726 | 0 | #define LBMR_TOPIC_OPT_COST_TYPE 0x07 |
727 | 14 | #define LBMR_TOPIC_OPT_COST_FLAG_IGNORE 0x80 |
728 | | #define LBMR_TOPIC_OPT_COST_SZ 8 |
729 | | |
730 | | /* LBMR topic originating transport ID option */ |
731 | | typedef struct |
732 | | { |
733 | | lbm_uint8_t type; |
734 | | lbm_uint8_t len; |
735 | | lbm_uint16_t flags; |
736 | | lbm_uint8_t originating_transport[LBM_OTID_BLOCK_SZ]; |
737 | | } lbmr_topic_opt_otid_t; |
738 | 0 | #define O_LBMR_TOPIC_OPT_OTID_T_TYPE OFFSETOF(lbmr_topic_opt_otid_t, type) |
739 | 0 | #define L_LBMR_TOPIC_OPT_OTID_T_TYPE SIZEOF(lbmr_topic_opt_otid_t, type) |
740 | 0 | #define O_LBMR_TOPIC_OPT_OTID_T_LEN OFFSETOF(lbmr_topic_opt_otid_t, len) |
741 | 0 | #define L_LBMR_TOPIC_OPT_OTID_T_LEN SIZEOF(lbmr_topic_opt_otid_t, len) |
742 | 0 | #define O_LBMR_TOPIC_OPT_OTID_T_FLAGS OFFSETOF(lbmr_topic_opt_otid_t, flags) |
743 | 14 | #define L_LBMR_TOPIC_OPT_OTID_T_FLAGS SIZEOF(lbmr_topic_opt_otid_t, flags) |
744 | 0 | #define O_LBMR_TOPIC_OPT_OTID_T_ORIGINATING_TRANSPORT OFFSETOF(lbmr_topic_opt_otid_t, originating_transport) |
745 | 0 | #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) |
747 | | |
748 | 0 | #define LBMR_TOPIC_OPT_OTID_TYPE 0x08 |
749 | 14 | #define LBMR_TOPIC_OPT_OTID_FLAG_IGNORE 0x8000 |
750 | | #define LBMR_TOPIC_OPT_OTID_SZ 36 |
751 | | |
752 | | /* LBMR topic context instance transport option */ |
753 | | typedef struct |
754 | | { |
755 | | lbm_uint8_t type; |
756 | | lbm_uint8_t len; |
757 | | lbm_uint8_t flags; |
758 | | lbm_uint8_t res; |
759 | | lbm_uint8_t ctxinst[LBM_CONTEXT_INSTANCE_BLOCK_SZ]; |
760 | | } lbmr_topic_opt_ctxinst_t; |
761 | 0 | #define O_LBMR_TOPIC_OPT_CTXINST_T_TYPE OFFSETOF(lbmr_topic_opt_ctxinst_t, type) |
762 | 0 | #define L_LBMR_TOPIC_OPT_CTXINST_T_TYPE SIZEOF(lbmr_topic_opt_ctxinst_t, type) |
763 | 0 | #define O_LBMR_TOPIC_OPT_CTXINST_T_LEN OFFSETOF(lbmr_topic_opt_ctxinst_t, len) |
764 | 0 | #define L_LBMR_TOPIC_OPT_CTXINST_T_LEN SIZEOF(lbmr_topic_opt_ctxinst_t, len) |
765 | 0 | #define O_LBMR_TOPIC_OPT_CTXINST_T_FLAGS OFFSETOF(lbmr_topic_opt_ctxinst_t, flags) |
766 | 14 | #define L_LBMR_TOPIC_OPT_CTXINST_T_FLAGS SIZEOF(lbmr_topic_opt_ctxinst_t, flags) |
767 | 0 | #define O_LBMR_TOPIC_OPT_CTXINST_T_RES OFFSETOF(lbmr_topic_opt_ctxinst_t, res) |
768 | 0 | #define L_LBMR_TOPIC_OPT_CTXINST_T_RES SIZEOF(lbmr_topic_opt_ctxinst_t, res) |
769 | 0 | #define O_LBMR_TOPIC_OPT_CTXINST_T_CTXINST OFFSETOF(lbmr_topic_opt_ctxinst_t, ctxinst) |
770 | 0 | #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) |
772 | | |
773 | 0 | #define LBMR_TOPIC_OPT_CTXINST_TYPE 0x09 |
774 | 14 | #define LBMR_TOPIC_OPT_CTXINST_FLAG_IGNORE 0x80 |
775 | | #define LBMR_TOPIC_OPT_CTXINST_SZ 12 |
776 | | |
777 | | /* LBMR topic context instance store transport option */ |
778 | | typedef struct |
779 | | { |
780 | | lbm_uint8_t type; |
781 | | lbm_uint8_t len; |
782 | | lbm_uint8_t flags; |
783 | | lbm_uint8_t idx; |
784 | | lbm_uint8_t ctxinst[LBM_CONTEXT_INSTANCE_BLOCK_SZ]; |
785 | | } lbmr_topic_opt_ctxinsts_t; |
786 | 0 | #define O_LBMR_TOPIC_OPT_CTXINSTS_T_TYPE OFFSETOF(lbmr_topic_opt_ctxinsts_t, type) |
787 | 0 | #define L_LBMR_TOPIC_OPT_CTXINSTS_T_TYPE SIZEOF(lbmr_topic_opt_ctxinsts_t, type) |
788 | 0 | #define O_LBMR_TOPIC_OPT_CTXINSTS_T_LEN OFFSETOF(lbmr_topic_opt_ctxinsts_t, len) |
789 | 0 | #define L_LBMR_TOPIC_OPT_CTXINSTS_T_LEN SIZEOF(lbmr_topic_opt_ctxinsts_t, len) |
790 | 0 | #define O_LBMR_TOPIC_OPT_CTXINSTS_T_FLAGS OFFSETOF(lbmr_topic_opt_ctxinsts_t, flags) |
791 | 14 | #define L_LBMR_TOPIC_OPT_CTXINSTS_T_FLAGS SIZEOF(lbmr_topic_opt_ctxinsts_t, flags) |
792 | 0 | #define O_LBMR_TOPIC_OPT_CTXINSTS_T_IDX OFFSETOF(lbmr_topic_opt_ctxinsts_t, idx) |
793 | 0 | #define L_LBMR_TOPIC_OPT_CTXINSTS_T_IDX SIZEOF(lbmr_topic_opt_ctxinsts_t, idx) |
794 | 0 | #define O_LBMR_TOPIC_OPT_CTXINSTS_T_CTXINST OFFSETOF(lbmr_topic_opt_ctxinsts_t, ctxinst) |
795 | 0 | #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) |
797 | | |
798 | 0 | #define LBMR_TOPIC_OPT_CTXINSTS_TYPE 0x0A |
799 | 14 | #define LBMR_TOPIC_OPT_CTXINSTS_FLAG_IGNORE 0x80 |
800 | | #define LBMR_TOPIC_OPT_CTXINSTS_SZ 12 |
801 | | |
802 | | /* LBMR topic context instance queue transport option */ |
803 | | typedef struct |
804 | | { |
805 | | lbm_uint8_t type; |
806 | | lbm_uint8_t len; |
807 | | lbm_uint8_t flags; |
808 | | lbm_uint8_t idx; |
809 | | lbm_uint8_t ctxinst[LBM_CONTEXT_INSTANCE_BLOCK_SZ]; |
810 | | } lbmr_topic_opt_ctxinstq_t; |
811 | 0 | #define O_LBMR_TOPIC_OPT_CTXINSTQ_T_TYPE OFFSETOF(lbmr_topic_opt_ctxinstq_t, type) |
812 | 0 | #define L_LBMR_TOPIC_OPT_CTXINSTQ_T_TYPE SIZEOF(lbmr_topic_opt_ctxinstq_t, type) |
813 | 0 | #define O_LBMR_TOPIC_OPT_CTXINSTQ_T_LEN OFFSETOF(lbmr_topic_opt_ctxinstq_t, len) |
814 | 0 | #define L_LBMR_TOPIC_OPT_CTXINSTQ_T_LEN SIZEOF(lbmr_topic_opt_ctxinstq_t, len) |
815 | 0 | #define O_LBMR_TOPIC_OPT_CTXINSTQ_T_FLAGS OFFSETOF(lbmr_topic_opt_ctxinstq_t, flags) |
816 | 14 | #define L_LBMR_TOPIC_OPT_CTXINSTQ_T_FLAGS SIZEOF(lbmr_topic_opt_ctxinstq_t, flags) |
817 | 0 | #define O_LBMR_TOPIC_OPT_CTXINSTQ_T_IDX OFFSETOF(lbmr_topic_opt_ctxinstq_t, idx) |
818 | 0 | #define L_LBMR_TOPIC_OPT_CTXINSTQ_T_IDX SIZEOF(lbmr_topic_opt_ctxinstq_t, idx) |
819 | 0 | #define O_LBMR_TOPIC_OPT_CTXINSTQ_T_CTXINST OFFSETOF(lbmr_topic_opt_ctxinstq_t, ctxinst) |
820 | 0 | #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) |
822 | | |
823 | 0 | #define LBMR_TOPIC_OPT_CTXINSTQ_TYPE 0x0C |
824 | 14 | #define LBMR_TOPIC_OPT_CTXINSTQ_FLAG_IGNORE 0x80 |
825 | | #define LBMR_TOPIC_OPT_CTXINSTQ_SZ 12 |
826 | | |
827 | | /* LBMR topic domain ID option */ |
828 | | typedef struct |
829 | | { |
830 | | lbm_uint8_t type; |
831 | | lbm_uint8_t len; |
832 | | lbm_uint16_t flags; |
833 | | lbm_uint32_t domain_id; |
834 | | } lbmr_topic_opt_domain_id_t; |
835 | 0 | #define O_LBMR_TOPIC_OPT_DOMAIN_ID_T_TYPE OFFSETOF(lbmr_topic_opt_domain_id_t, type) |
836 | 0 | #define L_LBMR_TOPIC_OPT_DOMAIN_ID_T_TYPE SIZEOF(lbmr_topic_opt_domain_id_t, type) |
837 | 0 | #define O_LBMR_TOPIC_OPT_DOMAIN_ID_T_LEN OFFSETOF(lbmr_topic_opt_domain_id_t, len) |
838 | 0 | #define L_LBMR_TOPIC_OPT_DOMAIN_ID_T_LEN SIZEOF(lbmr_topic_opt_domain_id_t, len) |
839 | 0 | #define O_LBMR_TOPIC_OPT_DOMAIN_ID_T_FLAGS OFFSETOF(lbmr_topic_opt_domain_id_t, flags) |
840 | 14 | #define L_LBMR_TOPIC_OPT_DOMAIN_ID_T_FLAGS SIZEOF(lbmr_topic_opt_domain_id_t, flags) |
841 | 0 | #define O_LBMR_TOPIC_OPT_DOMAIN_ID_T_DOMAIN_ID OFFSETOF(lbmr_topic_opt_domain_id_t, domain_id) |
842 | 0 | #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) |
844 | | |
845 | 0 | #define LBMR_TOPIC_OPT_DOMAIN_ID_TYPE 0x0D |
846 | 14 | #define LBMR_TOPIC_OPT_DOMAIN_ID_FLAG_IGNORE 0x8000 |
847 | | #define LBMR_TOPIC_OPT_DOMAIN_ID_SZ 8 |
848 | | |
849 | | /* LBMR topic extended functionality option */ |
850 | | typedef struct |
851 | | { |
852 | | lbm_uint8_t type; |
853 | | lbm_uint8_t len; |
854 | | lbm_uint16_t flags; |
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 | 0 | #define O_LBMR_TOPIC_OPT_EXFUNC_T_TYPE OFFSETOF(lbmr_topic_opt_exfunc_t, type) |
861 | 0 | #define L_LBMR_TOPIC_OPT_EXFUNC_T_TYPE SIZEOF(lbmr_topic_opt_exfunc_t, type) |
862 | 0 | #define O_LBMR_TOPIC_OPT_EXFUNC_T_LEN OFFSETOF(lbmr_topic_opt_exfunc_t, len) |
863 | 0 | #define L_LBMR_TOPIC_OPT_EXFUNC_T_LEN SIZEOF(lbmr_topic_opt_exfunc_t, len) |
864 | 0 | #define O_LBMR_TOPIC_OPT_EXFUNC_T_FLAGS OFFSETOF(lbmr_topic_opt_exfunc_t, flags) |
865 | 14 | #define L_LBMR_TOPIC_OPT_EXFUNC_T_FLAGS SIZEOF(lbmr_topic_opt_exfunc_t, flags) |
866 | 0 | #define O_LBMR_TOPIC_OPT_EXFUNC_T_SRC_TCP_PORT OFFSETOF(lbmr_topic_opt_exfunc_t, src_tcp_port) |
867 | 0 | #define L_LBMR_TOPIC_OPT_EXFUNC_T_SRC_TCP_PORT SIZEOF(lbmr_topic_opt_exfunc_t, src_tcp_port) |
868 | 0 | #define O_LBMR_TOPIC_OPT_EXFUNC_T_RESERVED OFFSETOF(lbmr_topic_opt_exfunc_t, reserved) |
869 | 0 | #define L_LBMR_TOPIC_OPT_EXFUNC_T_RESERVED SIZEOF(lbmr_topic_opt_exfunc_t, reserved) |
870 | 0 | #define O_LBMR_TOPIC_OPT_EXFUNC_T_SRC_IP_ADDR OFFSETOF(lbmr_topic_opt_exfunc_t, src_ip_addr) |
871 | 0 | #define L_LBMR_TOPIC_OPT_EXFUNC_T_SRC_IP_ADDR SIZEOF(lbmr_topic_opt_exfunc_t, src_ip_addr) |
872 | 0 | #define O_LBMR_TOPIC_OPT_EXFUNC_T_FUNCTIONALITY_FLAGS OFFSETOF(lbmr_topic_opt_exfunc_t, functionality_flags) |
873 | 56 | #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) |
875 | | |
876 | 0 | #define LBMR_TOPIC_OPT_EXFUNC_TYPE 0x0E |
877 | 14 | #define LBMR_TOPIC_OPT_EXFUNC_FLAG_IGNORE 0x8000 |
878 | | #define LBMR_TOPIC_OPT_EXFUNC_SZ 16 |
879 | | |
880 | | /* Transports */ |
881 | 0 | #define LBMR_TRANSPORT_TCP 0x00 |
882 | 0 | #define LBMR_TRANSPORT_LBTRU 0x01 |
883 | | #define LBMR_TRANSPORT_TCP6 0x02 |
884 | 0 | #define LBMR_TRANSPORT_LBTSMX 0x4 |
885 | 0 | #define LBMR_TRANSPORT_LBTRM 0x10 |
886 | 0 | #define LBMR_TRANSPORT_LBTIPC 0x40 |
887 | 0 | #define LBMR_TRANSPORT_LBTRDMA 0x20 |
888 | | #define LBMR_TRANSPORT_PGM 0x11 |
889 | | |
890 | | #define LBMR_TRANSPORT_OPTION_MASK 0x80 |
891 | | |
892 | | /* LBMR context info */ |
893 | | typedef struct |
894 | | { |
895 | | lbm_uint8_t ver_type; |
896 | | lbm_uint8_t ext_type; |
897 | | lbm_uint8_t len; |
898 | | lbm_uint8_t hop_count; |
899 | | lbm_uint16_t flags; |
900 | | lbm_uint16_t port; |
901 | | lbm_uint32_t ip; |
902 | | lbm_uint8_t instance[LBM_CONTEXT_INSTANCE_BLOCK_SZ]; |
903 | | } lbmr_ctxinfo_t; |
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 | 0 | #define O_LBMR_CTXINFO_T_LEN OFFSETOF(lbmr_ctxinfo_t, len) |
909 | 0 | #define L_LBMR_CTXINFO_T_LEN SIZEOF(lbmr_ctxinfo_t, len) |
910 | 0 | #define O_LBMR_CTXINFO_T_HOP_COUNT OFFSETOF(lbmr_ctxinfo_t, hop_count) |
911 | 0 | #define L_LBMR_CTXINFO_T_HOP_COUNT SIZEOF(lbmr_ctxinfo_t, hop_count) |
912 | 0 | #define O_LBMR_CTXINFO_T_FLAGS OFFSETOF(lbmr_ctxinfo_t, flags) |
913 | 0 | #define L_LBMR_CTXINFO_T_FLAGS SIZEOF(lbmr_ctxinfo_t, flags) |
914 | 0 | #define O_LBMR_CTXINFO_T_PORT OFFSETOF(lbmr_ctxinfo_t, port) |
915 | | #define L_LBMR_CTXINFO_T_PORT SIZEOF(lbmr_ctxinfo_t, port) |
916 | 0 | #define O_LBMR_CTXINFO_T_IP OFFSETOF(lbmr_ctxinfo_t, ip) |
917 | 0 | #define L_LBMR_CTXINFO_T_IP SIZEOF(lbmr_ctxinfo_t, ip) |
918 | 0 | #define O_LBMR_CTXINFO_T_INSTANCE OFFSETOF(lbmr_ctxinfo_t, instance) |
919 | 0 | #define L_LBMR_CTXINFO_T_INSTANCE SIZEOF(lbmr_ctxinfo_t, instance) |
920 | 0 | #define L_LBMR_CTXINFO_T (int) sizeof(lbmr_ctxinfo_t) |
921 | | |
922 | 14 | #define LBMR_CTXINFO_QUERY_FLAG 0x8000 |
923 | 14 | #define LBMR_CTXINFO_IP_FLAG 0x4000 |
924 | 14 | #define LBMR_CTXINFO_INSTANCE_FLAG 0x2000 |
925 | 14 | #define LBMR_CTXINFO_TNWG_SRC_FLAG 0x1000 |
926 | 14 | #define LBMR_CTXINFO_TNWG_RCV_FLAG 0x0800 |
927 | 14 | #define LBMR_CTXINFO_PROXY_FLAG 0x0400 |
928 | 14 | #define LBMR_CTXINFO_NAME_FLAG 0x0001 |
929 | | |
930 | | /* LBMR topic resolution request */ |
931 | | typedef struct |
932 | | { |
933 | | lbm_uint8_t ver_type; |
934 | | lbm_uint8_t ext_type; |
935 | | lbm_uint16_t flags; |
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 | 0 | #define O_LBMR_TOPIC_RES_REQUEST_T_FLAGS OFFSETOF(lbmr_topic_res_request_t, flags) |
942 | 98 | #define L_LBMR_TOPIC_RES_REQUEST_T_FLAGS SIZEOF(lbmr_topic_res_request_t, flags) |
943 | 0 | #define L_LBMR_TOPIC_RES_REQUEST_T (int) sizeof(lbmr_topic_res_request_t) |
944 | | |
945 | 14 | #define LBM_TOPIC_RES_REQUEST_GW_REMOTE_INTEREST 0x40 |
946 | 14 | #define LBM_TOPIC_RES_REQUEST_CONTEXT_QUERY 0x20 |
947 | 14 | #define LBM_TOPIC_RES_REQUEST_CONTEXT_ADVERTISEMENT 0x10 |
948 | 14 | #define LBM_TOPIC_RES_REQUEST_RESERVED1 0x08 |
949 | 14 | #define LBM_TOPIC_RES_REQUEST_ADVERTISEMENT 0x04 |
950 | 14 | #define LBM_TOPIC_RES_REQUEST_QUERY 0x02 |
951 | 14 | #define LBM_TOPIC_RES_REQUEST_WILDCARD_QUERY 0x01 |
952 | | |
953 | | /* LBMR topic management block */ |
954 | | typedef struct |
955 | | { |
956 | | lbm_uint16_t len; |
957 | | lbm_uint16_t tmrs; |
958 | | } lbmr_tmb_t; |
959 | 0 | #define O_LBMR_TMB_T_LEN OFFSETOF(lbmr_tmb_t, len) |
960 | 0 | #define L_LBMR_TMB_T_LEN SIZEOF(lbmr_tmb_t, len) |
961 | 0 | #define O_LBMR_TMB_T_TMRS OFFSETOF(lbmr_tmb_t, tmrs) |
962 | 0 | #define L_LBMR_TMB_T_TMRS SIZEOF(lbmr_tmb_t, tmrs) |
963 | 0 | #define L_LBMR_TMB_T (int) sizeof(lbmr_tmb_t) |
964 | | |
965 | | /* LBMR topic management record */ |
966 | | typedef struct |
967 | | { |
968 | | lbm_uint16_t len; |
969 | | lbm_uint8_t type; |
970 | | lbm_uint8_t flags; |
971 | | } lbmr_tmr_t; |
972 | 0 | #define O_LBMR_TMR_T_LEN OFFSETOF(lbmr_tmr_t, len) |
973 | 0 | #define L_LBMR_TMR_T_LEN SIZEOF(lbmr_tmr_t, len) |
974 | 0 | #define O_LBMR_TMR_T_TYPE OFFSETOF(lbmr_tmr_t, type) |
975 | 0 | #define L_LBMR_TMR_T_TYPE SIZEOF(lbmr_tmr_t, type) |
976 | 0 | #define O_LBMR_TMR_T_FLAGS OFFSETOF(lbmr_tmr_t, flags) |
977 | 42 | #define L_LBMR_TMR_T_FLAGS SIZEOF(lbmr_tmr_t, flags) |
978 | 0 | #define L_LBMR_TMR_T (int) sizeof(lbmr_tmr_t) |
979 | | |
980 | 0 | #define LBMR_TMR_LEAVE_TOPIC 0x00 |
981 | 0 | #define LBMR_TMR_TOPIC_USE 0x01 |
982 | | |
983 | 14 | #define LBMR_TMR_FLAG_RESPONSE 0x80 |
984 | 14 | #define LBMR_TMR_FLAG_WILDCARD_PCRE 0x40 |
985 | 14 | #define LBMR_TMR_FLAG_WILDCARD_REGEX 0x20 |
986 | | #define LBMR_TMR_FLAG_WILDCARD_MASK (LBMR_TMR_FLAG_WILDCARD_PCRE | LBMR_TMR_FLAG_WILDCARD_REGEX) |
987 | | |
988 | | /* LBMR queue information record */ |
989 | | typedef struct |
990 | | { |
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; |
996 | | } lbmr_qir_t; |
997 | 0 | #define O_LBMR_QIR_T_QUEUE_ID OFFSETOF(lbmr_qir_t, queue_id) |
998 | 0 | #define L_LBMR_QIR_T_QUEUE_ID SIZEOF(lbmr_qir_t, queue_id) |
999 | 0 | #define O_LBMR_QIR_T_QUEUE_VER OFFSETOF(lbmr_qir_t, queue_ver) |
1000 | 0 | #define L_LBMR_QIR_T_QUEUE_VER SIZEOF(lbmr_qir_t, queue_ver) |
1001 | 0 | #define O_LBMR_QIR_T_QUEUE_PREV_VER OFFSETOF(lbmr_qir_t, queue_prev_ver) |
1002 | 0 | #define L_LBMR_QIR_T_QUEUE_PREV_VER SIZEOF(lbmr_qir_t, queue_prev_ver) |
1003 | 0 | #define O_LBMR_QIR_T_GRP_BLKS OFFSETOF(lbmr_qir_t, grp_blks) |
1004 | 14 | #define L_LBMR_QIR_T_GRP_BLKS SIZEOF(lbmr_qir_t, grp_blks) |
1005 | 0 | #define O_LBMR_QIR_T_QUEUE_BLKS OFFSETOF(lbmr_qir_t, queue_blks) |
1006 | 0 | #define L_LBMR_QIR_T_QUEUE_BLKS SIZEOF(lbmr_qir_t, queue_blks) |
1007 | 0 | #define L_LBMR_QIR_T (int) sizeof(lbmr_qir_t) |
1008 | | |
1009 | 14 | #define LBMR_QIR_OPTIONS 0x8000 |
1010 | 14 | #define LBMR_QIR_GRP_BLOCKS_MASK 0x7fff |
1011 | | |
1012 | | /* LBMR queue group block record */ |
1013 | | typedef struct |
1014 | | { |
1015 | | lbm_uint16_t grp_idx; |
1016 | | lbm_uint16_t grp_sz; |
1017 | | } lbmr_qir_grp_blk_t; |
1018 | 0 | #define O_LBMR_QIR_GRP_BLK_T_GRP_IDX OFFSETOF(lbmr_qir_grp_blk_t, grp_idx) |
1019 | 0 | #define L_LBMR_QIR_GRP_BLK_T_GRP_IDX SIZEOF(lbmr_qir_grp_blk_t, grp_idx) |
1020 | 0 | #define O_LBMR_QIR_GRP_BLK_T_GRP_SZ OFFSETOF(lbmr_qir_grp_blk_t, grp_sz) |
1021 | 0 | #define L_LBMR_QIR_GRP_BLK_T_GRP_SZ SIZEOF(lbmr_qir_grp_blk_t, grp_sz) |
1022 | 0 | #define L_LBMR_QIR_GRP_BLK_T (int) sizeof(lbmr_qir_grp_blk_t) |
1023 | | |
1024 | | /* LBMR queue block record */ |
1025 | | typedef struct |
1026 | | { |
1027 | | lbm_uint32_t ip; |
1028 | | lbm_uint16_t port; |
1029 | | lbm_uint16_t idx; |
1030 | | lbm_uint16_t grp_idx; |
1031 | | lbm_uint16_t reserved; |
1032 | | } lbmr_qir_queue_blk_t; |
1033 | 0 | #define O_LBMR_QIR_QUEUE_BLK_T_IP OFFSETOF(lbmr_qir_queue_blk_t, ip) |
1034 | 0 | #define L_LBMR_QIR_QUEUE_BLK_T_IP SIZEOF(lbmr_qir_queue_blk_t, ip) |
1035 | 0 | #define O_LBMR_QIR_QUEUE_BLK_T_PORT OFFSETOF(lbmr_qir_queue_blk_t, port) |
1036 | 0 | #define L_LBMR_QIR_QUEUE_BLK_T_PORT SIZEOF(lbmr_qir_queue_blk_t, port) |
1037 | 0 | #define O_LBMR_QIR_QUEUE_BLK_T_IDX OFFSETOF(lbmr_qir_queue_blk_t, idx) |
1038 | 0 | #define L_LBMR_QIR_QUEUE_BLK_T_IDX SIZEOF(lbmr_qir_queue_blk_t, idx) |
1039 | 0 | #define O_LBMR_QIR_QUEUE_BLK_T_GRP_IDX OFFSETOF(lbmr_qir_queue_blk_t, grp_idx) |
1040 | 0 | #define L_LBMR_QIR_QUEUE_BLK_T_GRP_IDX SIZEOF(lbmr_qir_queue_blk_t, grp_idx) |
1041 | 0 | #define O_LBMR_QIR_QUEUE_BLK_T_RESERVED OFFSETOF(lbmr_qir_queue_blk_t, reserved) |
1042 | 0 | #define L_LBMR_QIR_QUEUE_BLK_T_RESERVED SIZEOF(lbmr_qir_queue_blk_t, reserved) |
1043 | 0 | #define L_LBMR_QIR_QUEUE_BLK_T (int) sizeof(lbmr_qir_queue_blk_t) |
1044 | | |
1045 | | #define LBMR_QIR_QUEUE_BLK_FLAG_MASTER 0x8000 |
1046 | | |
1047 | | /* LBMR packet option header */ |
1048 | | typedef struct |
1049 | | { |
1050 | | lbm_uint8_t type; |
1051 | | lbm_uint8_t len; |
1052 | | lbm_uint16_t flags; |
1053 | | } lbmr_lbmr_opt_hdr_t; |
1054 | 0 | #define O_LBMR_LBMR_OPT_HDR_T_TYPE OFFSETOF(lbmr_lbmr_opt_hdr_t, type) |
1055 | 0 | #define L_LBMR_LBMR_OPT_HDR_T_TYPE SIZEOF(lbmr_lbmr_opt_hdr_t, type) |
1056 | 0 | #define O_LBMR_LBMR_OPT_HDR_T_LEN OFFSETOF(lbmr_lbmr_opt_hdr_t, len) |
1057 | 0 | #define L_LBMR_LBMR_OPT_HDR_T_LEN SIZEOF(lbmr_lbmr_opt_hdr_t, len) |
1058 | 0 | #define O_LBMR_LBMR_OPT_HDR_T_FLAGS OFFSETOF(lbmr_lbmr_opt_hdr_t, flags) |
1059 | 0 | #define L_LBMR_LBMR_OPT_HDR_T_FLAGS SIZEOF(lbmr_lbmr_opt_hdr_t, flags) |
1060 | 0 | #define L_LBMR_LBMR_OPT_HDR_T (int) sizeof(lbmr_lbmr_opt_hdr_t) |
1061 | | |
1062 | 14 | #define LBMR_LBMR_OPT_HDR_FLAG_IGNORE 0x8000 |
1063 | 14 | #define LBMR_LBMR_OPT_HDR_FLAG_VIRAL 0x0001 |
1064 | | |
1065 | | /* LBMR packet option length header */ |
1066 | | typedef struct |
1067 | | { |
1068 | | lbm_uint8_t type; |
1069 | | lbm_uint8_t len; |
1070 | | lbm_uint16_t total_len; |
1071 | | } lbmr_lbmr_opt_len_t; |
1072 | 0 | #define O_LBMR_LBMR_OPT_LEN_T_TYPE OFFSETOF(lbmr_lbmr_opt_len_t, type) |
1073 | 0 | #define L_LBMR_LBMR_OPT_LEN_T_TYPE SIZEOF(lbmr_lbmr_opt_len_t, type) |
1074 | 0 | #define O_LBMR_LBMR_OPT_LEN_T_LEN OFFSETOF(lbmr_lbmr_opt_len_t, len) |
1075 | 0 | #define L_LBMR_LBMR_OPT_LEN_T_LEN SIZEOF(lbmr_lbmr_opt_len_t, len) |
1076 | 0 | #define O_LBMR_LBMR_OPT_LEN_T_TOTAL_LEN OFFSETOF(lbmr_lbmr_opt_len_t, total_len) |
1077 | 0 | #define L_LBMR_LBMR_OPT_LEN_T_TOTAL_LEN SIZEOF(lbmr_lbmr_opt_len_t, total_len) |
1078 | 0 | #define L_LBMR_LBMR_OPT_LEN_T (int) sizeof(lbmr_lbmr_opt_len_t) |
1079 | | |
1080 | 0 | #define LBMR_LBMR_OPT_LEN_TYPE 0x80 |
1081 | | |
1082 | | /* LBMR packet option source ID header */ |
1083 | | typedef struct |
1084 | | { |
1085 | | lbm_uint8_t type; |
1086 | | lbm_uint8_t len; |
1087 | | lbm_uint16_t flags; |
1088 | | lbm_uint8_t src_id[LBM_CONTEXT_INSTANCE_BLOCK_SZ]; |
1089 | | } lbmr_lbmr_opt_src_id_t; |
1090 | 0 | #define O_LBMR_LBMR_OPT_SRC_ID_T_TYPE OFFSETOF(lbmr_lbmr_opt_src_id_t, type) |
1091 | 0 | #define L_LBMR_LBMR_OPT_SRC_ID_T_TYPE SIZEOF(lbmr_lbmr_opt_src_id_t, type) |
1092 | 0 | #define O_LBMR_LBMR_OPT_SRC_ID_T_LEN OFFSETOF(lbmr_lbmr_opt_src_id_t, len) |
1093 | 0 | #define L_LBMR_LBMR_OPT_SRC_ID_T_LEN SIZEOF(lbmr_lbmr_opt_src_id_t, len) |
1094 | 0 | #define O_LBMR_LBMR_OPT_SRC_ID_T_FLAGS OFFSETOF(lbmr_lbmr_opt_src_id_t, flags) |
1095 | 14 | #define L_LBMR_LBMR_OPT_SRC_ID_T_FLAGS SIZEOF(lbmr_lbmr_opt_src_id_t, flags) |
1096 | 0 | #define O_LBMR_LBMR_OPT_SRC_ID_T_SRC_ID OFFSETOF(lbmr_lbmr_opt_src_id_t, src_id) |
1097 | 0 | #define L_LBMR_LBMR_OPT_SRC_ID_T_SRC_ID SIZEOF(lbmr_lbmr_opt_src_id_t, src_id) |
1098 | 0 | #define L_LBMR_LBMR_OPT_SRC_ID_T (int) sizeof(lbmr_lbmr_opt_src_id_t) |
1099 | | |
1100 | 0 | #define LBMR_LBMR_OPT_SRC_ID_TYPE 0x81 |
1101 | 14 | #define LBMR_LBMR_OPT_SRC_ID_FLAG_IGNORE 0x8000 |
1102 | | |
1103 | | /* LBMR packet option source type header */ |
1104 | | typedef struct |
1105 | | { |
1106 | | lbm_uint8_t type; |
1107 | | lbm_uint8_t len; |
1108 | | lbm_uint8_t flags; |
1109 | | lbm_uint8_t src_type; |
1110 | | } lbmr_lbmr_opt_src_type_t; |
1111 | 0 | #define O_LBMR_LBMR_OPT_SRC_TYPE_T_TYPE OFFSETOF(lbmr_lbmr_opt_src_type_t, type) |
1112 | 0 | #define L_LBMR_LBMR_OPT_SRC_TYPE_T_TYPE SIZEOF(lbmr_lbmr_opt_src_type_t, type) |
1113 | 0 | #define O_LBMR_LBMR_OPT_SRC_TYPE_T_LEN OFFSETOF(lbmr_lbmr_opt_src_type_t, len) |
1114 | 0 | #define L_LBMR_LBMR_OPT_SRC_TYPE_T_LEN SIZEOF(lbmr_lbmr_opt_src_type_t, len) |
1115 | 0 | #define O_LBMR_LBMR_OPT_SRC_TYPE_T_FLAGS OFFSETOF(lbmr_lbmr_opt_src_type_t, flags) |
1116 | 14 | #define L_LBMR_LBMR_OPT_SRC_TYPE_T_FLAGS SIZEOF(lbmr_lbmr_opt_src_type_t, flags) |
1117 | 0 | #define O_LBMR_LBMR_OPT_SRC_TYPE_T_SRC_TYPE OFFSETOF(lbmr_lbmr_opt_src_type_t, src_type) |
1118 | 0 | #define L_LBMR_LBMR_OPT_SRC_TYPE_T_SRC_TYPE SIZEOF(lbmr_lbmr_opt_src_type_t, src_type) |
1119 | 0 | #define L_LBMR_LBMR_OPT_SRC_TYPE_T (int) sizeof(lbmr_lbmr_opt_src_type_t) |
1120 | | |
1121 | 0 | #define LBMR_LBMR_OPT_SRC_TYPE_TYPE 0x82 |
1122 | | #define LBMR_LBMR_OPT_SRC_TYPE_SZ 4 |
1123 | 14 | #define LBMR_LBMR_OPT_SRC_TYPE_FLAG_IGNORE 0x80 |
1124 | | |
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 |
1128 | | |
1129 | | /* LBMR packet option version header */ |
1130 | | typedef struct |
1131 | | { |
1132 | | lbm_uint8_t type; |
1133 | | lbm_uint8_t len; |
1134 | | lbm_uint16_t flags; |
1135 | | lbm_uint32_t version; |
1136 | | } lbmr_lbmr_opt_version_t; |
1137 | 0 | #define O_LBMR_LBMR_OPT_VERSION_T_TYPE OFFSETOF(lbmr_lbmr_opt_version_t, type) |
1138 | 0 | #define L_LBMR_LBMR_OPT_VERSION_T_TYPE SIZEOF(lbmr_lbmr_opt_version_t, type) |
1139 | 0 | #define O_LBMR_LBMR_OPT_VERSION_T_LEN OFFSETOF(lbmr_lbmr_opt_version_t, len) |
1140 | 0 | #define L_LBMR_LBMR_OPT_VERSION_T_LEN SIZEOF(lbmr_lbmr_opt_version_t, len) |
1141 | 0 | #define O_LBMR_LBMR_OPT_VERSION_T_FLAGS OFFSETOF(lbmr_lbmr_opt_version_t, flags) |
1142 | 42 | #define L_LBMR_LBMR_OPT_VERSION_T_FLAGS SIZEOF(lbmr_lbmr_opt_version_t, flags) |
1143 | 0 | #define O_LBMR_LBMR_OPT_VERSION_T_VERSION OFFSETOF(lbmr_lbmr_opt_version_t, version) |
1144 | 0 | #define L_LBMR_LBMR_OPT_VERSION_T_VERSION SIZEOF(lbmr_lbmr_opt_version_t, version) |
1145 | 0 | #define L_LBMR_LBMR_OPT_VERSION_T (int) sizeof(lbmr_lbmr_opt_version_t) |
1146 | | |
1147 | 0 | #define LBMR_LBMR_OPT_VERSION_TYPE 0x83 |
1148 | | #define LBMR_LBMR_OPT_VERSIION_SZ 8 |
1149 | 14 | #define LBMR_LBMR_OPT_VERSION_FLAG_IGNORE 0x8000 |
1150 | 14 | #define LBMR_LBMR_OPT_VERSION_FLAG_UME 0x0001 |
1151 | 14 | #define LBMR_LBMR_OPT_VERSION_FLAG_UMQ 0x0002 |
1152 | | |
1153 | | /* LBMR packet option domain header */ |
1154 | | typedef struct |
1155 | | { |
1156 | | lbm_uint8_t type; |
1157 | | lbm_uint8_t len; |
1158 | | lbm_uint16_t flags; |
1159 | | lbm_uint32_t local_domain_id; |
1160 | | } lbmr_lbmr_opt_local_domain_t; |
1161 | 0 | #define O_LBMR_LBMR_OPT_LOCAL_DOMAIN_T_TYPE OFFSETOF(lbmr_lbmr_opt_local_domain_t, type) |
1162 | 0 | #define L_LBMR_LBMR_OPT_LOCAL_DOMAIN_T_TYPE SIZEOF(lbmr_lbmr_opt_local_domain_t, type) |
1163 | 0 | #define O_LBMR_LBMR_OPT_LOCAL_DOMAIN_T_LEN OFFSETOF(lbmr_lbmr_opt_local_domain_t, len) |
1164 | 0 | #define L_LBMR_LBMR_OPT_LOCAL_DOMAIN_T_LEN SIZEOF(lbmr_lbmr_opt_local_domain_t, len) |
1165 | 0 | #define O_LBMR_LBMR_OPT_LOCAL_DOMAIN_T_FLAGS OFFSETOF(lbmr_lbmr_opt_local_domain_t, flags) |
1166 | 28 | #define L_LBMR_LBMR_OPT_LOCAL_DOMAIN_T_FLAGS SIZEOF(lbmr_lbmr_opt_local_domain_t, flags) |
1167 | 0 | #define O_LBMR_LBMR_OPT_LOCAL_DOMAIN_T_LOCAL_DOMAIN_ID OFFSETOF(lbmr_lbmr_opt_local_domain_t, local_domain_id) |
1168 | 0 | #define L_LBMR_LBMR_OPT_LOCAL_DOMAIN_T_LOCAL_DOMAIN_ID SIZEOF(lbmr_lbmr_opt_local_domain_t, local_domain_id) |
1169 | 0 | #define L_LBMR_LBMR_OPT_LOCAL_DOMAIN_T (int) sizeof(lbmr_lbmr_opt_local_domain_t) |
1170 | | |
1171 | 0 | #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 |
1174 | | |
1175 | | /* LBMR (extended) proxy source election record */ |
1176 | | typedef struct |
1177 | | { |
1178 | | lbm_uint8_t ver_type; |
1179 | | lbm_uint8_t ext_type; |
1180 | | lbm_uint16_t dep_type; |
1181 | | lbm_uint16_t len; |
1182 | | lbm_uint16_t flags; |
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; |
1189 | | } lbmr_pser_t; |
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 | 0 | #define O_LBMR_PSER_T_DEP_TYPE OFFSETOF(lbmr_pser_t, dep_type) |
1195 | 0 | #define L_LBMR_PSER_T_DEP_TYPE SIZEOF(lbmr_pser_t, dep_type) |
1196 | 0 | #define O_LBMR_PSER_T_LEN OFFSETOF(lbmr_pser_t, len) |
1197 | 0 | #define L_LBMR_PSER_T_LEN SIZEOF(lbmr_pser_t, len) |
1198 | 0 | #define O_LBMR_PSER_T_FLAGS OFFSETOF(lbmr_pser_t, flags) |
1199 | 14 | #define L_LBMR_PSER_T_FLAGS SIZEOF(lbmr_pser_t, flags) |
1200 | 0 | #define O_LBMR_PSER_T_SOURCE_IP OFFSETOF(lbmr_pser_t, source_ip) |
1201 | 0 | #define L_LBMR_PSER_T_SOURCE_IP SIZEOF(lbmr_pser_t, source_ip) |
1202 | 0 | #define O_LBMR_PSER_T_STORE_IP OFFSETOF(lbmr_pser_t, store_ip) |
1203 | 0 | #define L_LBMR_PSER_T_STORE_IP SIZEOF(lbmr_pser_t, store_ip) |
1204 | 0 | #define O_LBMR_PSER_T_TRANSPORT_IDX OFFSETOF(lbmr_pser_t, transport_idx) |
1205 | 0 | #define L_LBMR_PSER_T_TRANSPORT_IDX SIZEOF(lbmr_pser_t, transport_idx) |
1206 | 0 | #define O_LBMR_PSER_T_TOPIC_IDX OFFSETOF(lbmr_pser_t, topic_idx) |
1207 | 0 | #define L_LBMR_PSER_T_TOPIC_IDX SIZEOF(lbmr_pser_t, topic_idx) |
1208 | 0 | #define O_LBMR_PSER_T_SOURCE_PORT OFFSETOF(lbmr_pser_t, source_port) |
1209 | 0 | #define L_LBMR_PSER_T_SOURCE_PORT SIZEOF(lbmr_pser_t, source_port) |
1210 | 0 | #define O_LBMR_PSER_T_STORE_PORT OFFSETOF(lbmr_pser_t, store_port) |
1211 | 0 | #define L_LBMR_PSER_T_STORE_PORT SIZEOF(lbmr_pser_t, store_port) |
1212 | 0 | #define O_LBMR_PSER_T_TOPIC (O_LBMR_PSER_T_STORE_PORT + L_LBMR_PSER_T_STORE_PORT) |
1213 | 0 | #define L_LBMR_PSER_T (int) sizeof(lbmr_pser_t) |
1214 | | |
1215 | 14 | #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 |
1218 | | |
1219 | | typedef struct |
1220 | | { |
1221 | | lbm_uint16_t type; |
1222 | | lbm_uint16_t optlen; |
1223 | | } lbmr_pser_optlen_t; |
1224 | 0 | #define O_LBMR_PSER_OPTLEN_T_TYPE OFFSETOF(lbmr_pser_optlen_t, type) |
1225 | 0 | #define L_LBMR_PSER_OPTLEN_T_TYPE SIZEOF(lbmr_pser_optlen_t, type) |
1226 | 0 | #define O_LBMR_PSER_OPTLEN_T_OPTLEN OFFSETOF(lbmr_pser_optlen_t, optlen) |
1227 | 0 | #define L_LBMR_PSER_OPTLEN_T_OPTLEN SIZEOF(lbmr_pser_optlen_t, optlen) |
1228 | 0 | #define L_LBMR_PSER_OPTLEN_T (int) sizeof(lbmr_pser_optlen_t) |
1229 | | |
1230 | | typedef struct |
1231 | | { |
1232 | | lbm_uint8_t len; |
1233 | | lbm_uint8_t type; |
1234 | | } lbmr_pser_opt_hdr_t; |
1235 | 0 | #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 | 0 | #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) |
1240 | | |
1241 | 0 | #define LBMR_PSER_OPT_SRC_CTXINST_TYPE 0x00 |
1242 | 0 | #define LBMR_PSER_OPT_STORE_CTXINST_TYPE 0x01 |
1243 | | |
1244 | | typedef struct |
1245 | | { |
1246 | | lbm_uint8_t len; |
1247 | | lbm_uint8_t type; |
1248 | | lbm_uint8_t ctxinst[LBM_CONTEXT_INSTANCE_BLOCK_SZ]; |
1249 | | } lbmr_pser_opt_ctxinst_t; |
1250 | 0 | #define O_LBMR_PSER_OPT_CTXINST_T_LEN OFFSETOF(lbmr_pser_opt_ctxinst_t, len) |
1251 | 0 | #define L_LBMR_PSER_OPT_CTXINST_T_LEN SIZEOF(lbmr_pser_opt_ctxinst_t, len) |
1252 | 0 | #define O_LBMR_PSER_OPT_CTXINST_T_TYPE OFFSETOF(lbmr_pser_opt_ctxinst_t, type) |
1253 | 0 | #define L_LBMR_PSER_OPT_CTXINST_T_TYPE SIZEOF(lbmr_pser_opt_ctxinst_t, type) |
1254 | 0 | #define O_LBMR_PSER_OPT_CTXINST_T_CTXINST OFFSETOF(lbmr_pser_opt_ctxinst_t, ctxinst) |
1255 | 0 | #define L_LBMR_PSER_OPT_CTXINST_T_CTXINST SIZEOF(lbmr_pser_opt_ctxinst_t, ctxinst) |
1256 | 0 | #define L_LBMR_PSER_OPT_CTXINST_T (int) sizeof(lbmr_pser_opt_ctxinst_t) |
1257 | | |
1258 | | /* LBMR (extended) gateway message */ |
1259 | | typedef struct |
1260 | | { |
1261 | | lbm_uint8_t ver_type; |
1262 | | lbm_uint8_t ext_type; |
1263 | | lbm_uint16_t len; |
1264 | | lbm_uint16_t type; |
1265 | | lbm_uint16_t reserved; |
1266 | | } lbmr_tnwg_t; |
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 | 0 | #define O_LBMR_TNWG_T_LEN OFFSETOF(lbmr_tnwg_t, len) |
1272 | 0 | #define L_LBMR_TNWG_T_LEN SIZEOF(lbmr_tnwg_t, len) |
1273 | 0 | #define O_LBMR_TNWG_T_TYPE OFFSETOF(lbmr_tnwg_t, type) |
1274 | 0 | #define L_LBMR_TNWG_T_TYPE SIZEOF(lbmr_tnwg_t, type) |
1275 | 0 | #define O_LBMR_TNWG_T_RESERVED OFFSETOF(lbmr_tnwg_t, reserved) |
1276 | 0 | #define L_LBMR_TNWG_T_RESERVED SIZEOF(lbmr_tnwg_t, reserved) |
1277 | 0 | #define L_LBMR_TNWG_T (int) sizeof(lbmr_tnwg_t) |
1278 | | |
1279 | 0 | #define LBMR_TNWG_TYPE_INTEREST 0x0000 |
1280 | 0 | #define LBMR_TNWG_TYPE_CTXINFO 0x0001 |
1281 | 0 | #define LBMR_TNWG_TYPE_TRREQ 0x0002 |
1282 | | |
1283 | | /* LBMR (extended) gateway message - interest header */ |
1284 | | typedef struct |
1285 | | { |
1286 | | lbm_uint16_t len; |
1287 | | lbm_uint16_t count; |
1288 | | } lbmr_tnwg_interest_t; |
1289 | 0 | #define O_LBMR_TNWG_INTEREST_T_LEN OFFSETOF(lbmr_tnwg_interest_t, len) |
1290 | 0 | #define L_LBMR_TNWG_INTEREST_T_LEN SIZEOF(lbmr_tnwg_interest_t, len) |
1291 | 0 | #define O_LBMR_TNWG_INTEREST_T_COUNT OFFSETOF(lbmr_tnwg_interest_t, count) |
1292 | 0 | #define L_LBMR_TNWG_INTEREST_T_COUNT SIZEOF(lbmr_tnwg_interest_t, count) |
1293 | 0 | #define L_LBMR_TNWG_INTEREST_T (int) sizeof(lbmr_tnwg_interest_t) |
1294 | | |
1295 | | /* LBMR (extended) gateway message - interest record */ |
1296 | | typedef struct |
1297 | | { |
1298 | | lbm_uint16_t len; |
1299 | | lbm_uint8_t flags; |
1300 | | lbm_uint8_t pattype; |
1301 | | lbm_uint32_t domain_id; |
1302 | | } lbmr_tnwg_interest_rec_t; |
1303 | 0 | #define O_LBMR_TNWG_INTEREST_REC_T_LEN OFFSETOF(lbmr_tnwg_interest_rec_t, len) |
1304 | 0 | #define L_LBMR_TNWG_INTEREST_REC_T_LEN SIZEOF(lbmr_tnwg_interest_rec_t, len) |
1305 | 0 | #define O_LBMR_TNWG_INTEREST_REC_T_FLAGS OFFSETOF(lbmr_tnwg_interest_rec_t, flags) |
1306 | 42 | #define L_LBMR_TNWG_INTEREST_REC_T_FLAGS SIZEOF(lbmr_tnwg_interest_rec_t, flags) |
1307 | 0 | #define O_LBMR_TNWG_INTEREST_REC_T_PATTYPE OFFSETOF(lbmr_tnwg_interest_rec_t, pattype) |
1308 | 0 | #define L_LBMR_TNWG_INTEREST_REC_T_PATTYPE SIZEOF(lbmr_tnwg_interest_rec_t, pattype) |
1309 | 0 | #define O_LBMR_TNWG_INTEREST_REC_T_DOMAIN_ID OFFSETOF(lbmr_tnwg_interest_rec_t, domain_id) |
1310 | 0 | #define L_LBMR_TNWG_INTEREST_REC_T_DOMAIN_ID SIZEOF(lbmr_tnwg_interest_rec_t, domain_id) |
1311 | 0 | #define L_LBMR_TNWG_INTEREST_REC_T (int) sizeof(lbmr_tnwg_interest_rec_t) |
1312 | | |
1313 | 14 | #define LBMR_TNWG_INTEREST_REC_PATTERN_FLAG 0x80 |
1314 | 14 | #define LBMR_TNWG_INTEREST_REC_CANCEL_FLAG 0x40 |
1315 | 14 | #define LBMR_TNWG_INTEREST_REC_REFRESH_FLAG 0x20 |
1316 | | |
1317 | | /* LBMR (extended) gateway message - ctxinfo header */ |
1318 | | typedef struct |
1319 | | { |
1320 | | lbm_uint16_t len; |
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 | 0 | #define O_LBMR_TNWG_CTXINFO_T_LEN OFFSETOF(lbmr_tnwg_ctxinfo_t, len) |
1327 | 0 | #define L_LBMR_TNWG_CTXINFO_T_LEN SIZEOF(lbmr_tnwg_ctxinfo_t, len) |
1328 | 0 | #define O_LBMR_TNWG_CTXINFO_T_HOP_COUNT OFFSETOF(lbmr_tnwg_ctxinfo_t, hop_count) |
1329 | 0 | #define L_LBMR_TNWG_CTXINFO_T_HOP_COUNT SIZEOF(lbmr_tnwg_ctxinfo_t, hop_count) |
1330 | 0 | #define O_LBMR_TNWG_CTXINFO_T_RESERVED OFFSETOF(lbmr_tnwg_ctxinfo_t, reserved) |
1331 | 0 | #define L_LBMR_TNWG_CTXINFO_T_RESERVED SIZEOF(lbmr_tnwg_ctxinfo_t, reserved) |
1332 | 0 | #define O_LBMR_TNWG_CTXINFO_T_FLAGS1 OFFSETOF(lbmr_tnwg_ctxinfo_t, flags1) |
1333 | 56 | #define L_LBMR_TNWG_CTXINFO_T_FLAGS1 SIZEOF(lbmr_tnwg_ctxinfo_t, flags1) |
1334 | 0 | #define O_LBMR_TNWG_CTXINFO_T_FLAGS2 OFFSETOF(lbmr_tnwg_ctxinfo_t, flags2) |
1335 | 0 | #define L_LBMR_TNWG_CTXINFO_T_FLAGS2 SIZEOF(lbmr_tnwg_ctxinfo_t, flags2) |
1336 | 0 | #define L_LBMR_TNWG_CTXINFO_T (int) sizeof(lbmr_tnwg_ctxinfo_t) |
1337 | | |
1338 | 14 | #define LBMR_TNWG_CTXINFO_QUERY_FLAG 0x80000000 |
1339 | 14 | #define LBMR_TNWG_CTXINFO_TNWG_SRC_FLAG 0x40000000 |
1340 | 14 | #define LBMR_TNWG_CTXINFO_TNWG_RCV_FLAG 0x20000000 |
1341 | 14 | #define LBMR_TNWG_CTXINFO_PROXY_FLAG 0x10000000 |
1342 | | |
1343 | | /* LBMR (extended) gateway message - topic res request header */ |
1344 | | typedef struct |
1345 | | { |
1346 | | lbm_uint16_t len; |
1347 | | } lbmr_tnwg_trreq_t; |
1348 | 0 | #define O_LBMR_TNWG_TRREQ_T_LEN OFFSETOF(lbmr_tnwg_trreq_t, len) |
1349 | 0 | #define L_LBMR_TNWG_TRREQ_T_LEN SIZEOF(lbmr_tnwg_trreq_t, len) |
1350 | 0 | #define L_LBMR_TNWG_TRREQ_T (int) sizeof(lbmr_tnwg_trreq_t) |
1351 | | |
1352 | | /* LBMR (extended) gateway message - basic option */ |
1353 | | typedef struct |
1354 | | { |
1355 | | lbm_uint8_t type; |
1356 | | lbm_uint8_t len; |
1357 | | lbm_uint16_t flags; |
1358 | | } lbmr_tnwg_opt_t; |
1359 | 0 | #define O_LBMR_TNWG_OPT_T_TYPE OFFSETOF(lbmr_tnwg_opt_t, type) |
1360 | 0 | #define L_LBMR_TNWG_OPT_T_TYPE SIZEOF(lbmr_tnwg_opt_t, type) |
1361 | 0 | #define O_LBMR_TNWG_OPT_T_LEN OFFSETOF(lbmr_tnwg_opt_t, len) |
1362 | 0 | #define L_LBMR_TNWG_OPT_T_LEN SIZEOF(lbmr_tnwg_opt_t, len) |
1363 | 0 | #define O_LBMR_TNWG_OPT_T_FLAGS OFFSETOF(lbmr_tnwg_opt_t, flags) |
1364 | 28 | #define L_LBMR_TNWG_OPT_T_FLAGS SIZEOF(lbmr_tnwg_opt_t, flags) |
1365 | 0 | #define L_LBMR_TNWG_OPT_T (int) sizeof(lbmr_tnwg_opt_t) |
1366 | | |
1367 | 70 | #define LBMR_TNWG_OPT_IGNORE_FLAG 0x8000 |
1368 | | |
1369 | | /* LBMR (extended) gateway message - ctxinst option */ |
1370 | | typedef struct |
1371 | | { |
1372 | | lbm_uint8_t type; |
1373 | | lbm_uint8_t len; |
1374 | | lbm_uint16_t flags; |
1375 | | lbm_uint8_t instance[LBM_CONTEXT_INSTANCE_BLOCK_SZ]; |
1376 | | } lbmr_tnwg_opt_ctxinst_t; |
1377 | 0 | #define O_LBMR_TNWG_OPT_CTXINST_T_TYPE OFFSETOF(lbmr_tnwg_opt_ctxinst_t, type) |
1378 | 0 | #define L_LBMR_TNWG_OPT_CTXINST_T_TYPE SIZEOF(lbmr_tnwg_opt_ctxinst_t, type) |
1379 | 0 | #define O_LBMR_TNWG_OPT_CTXINST_T_LEN OFFSETOF(lbmr_tnwg_opt_ctxinst_t, len) |
1380 | 0 | #define L_LBMR_TNWG_OPT_CTXINST_T_LEN SIZEOF(lbmr_tnwg_opt_ctxinst_t, len) |
1381 | 0 | #define O_LBMR_TNWG_OPT_CTXINST_T_FLAGS OFFSETOF(lbmr_tnwg_opt_ctxinst_t, flags) |
1382 | 14 | #define L_LBMR_TNWG_OPT_CTXINST_T_FLAGS SIZEOF(lbmr_tnwg_opt_ctxinst_t, flags) |
1383 | 0 | #define O_LBMR_TNWG_OPT_CTXINST_T_INSTANCE OFFSETOF(lbmr_tnwg_opt_ctxinst_t, instance) |
1384 | 0 | #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) |
1386 | | |
1387 | 0 | #define LBMR_TNWG_OPT_CTXINST_TYPE 0x00 |
1388 | | |
1389 | | /* LBMR (extended) gateway message - address option */ |
1390 | | typedef struct |
1391 | | { |
1392 | | lbm_uint8_t type; |
1393 | | lbm_uint8_t len; |
1394 | | lbm_uint16_t flags; |
1395 | | lbm_uint16_t port; |
1396 | | lbm_uint16_t res; |
1397 | | lbm_uint32_t ip; |
1398 | | } lbmr_tnwg_opt_address_t; |
1399 | 0 | #define O_LBMR_TNWG_OPT_ADDRESS_T_TYPE OFFSETOF(lbmr_tnwg_opt_address_t, type) |
1400 | 0 | #define L_LBMR_TNWG_OPT_ADDRESS_T_TYPE SIZEOF(lbmr_tnwg_opt_address_t, type) |
1401 | 0 | #define O_LBMR_TNWG_OPT_ADDRESS_T_LEN OFFSETOF(lbmr_tnwg_opt_address_t, len) |
1402 | 0 | #define L_LBMR_TNWG_OPT_ADDRESS_T_LEN SIZEOF(lbmr_tnwg_opt_address_t, len) |
1403 | 0 | #define O_LBMR_TNWG_OPT_ADDRESS_T_FLAGS OFFSETOF(lbmr_tnwg_opt_address_t, flags) |
1404 | 14 | #define L_LBMR_TNWG_OPT_ADDRESS_T_FLAGS SIZEOF(lbmr_tnwg_opt_address_t, flags) |
1405 | 0 | #define O_LBMR_TNWG_OPT_ADDRESS_T_PORT OFFSETOF(lbmr_tnwg_opt_address_t, port) |
1406 | 0 | #define L_LBMR_TNWG_OPT_ADDRESS_T_PORT SIZEOF(lbmr_tnwg_opt_address_t, port) |
1407 | 0 | #define O_LBMR_TNWG_OPT_ADDRESS_T_RES OFFSETOF(lbmr_tnwg_opt_address_t, res) |
1408 | 0 | #define L_LBMR_TNWG_OPT_ADDRESS_T_RES SIZEOF(lbmr_tnwg_opt_address_t, res) |
1409 | 0 | #define O_LBMR_TNWG_OPT_ADDRESS_T_IP OFFSETOF(lbmr_tnwg_opt_address_t, ip) |
1410 | 0 | #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) |
1412 | | |
1413 | 0 | #define LBMR_TNWG_OPT_ADDRESS_TYPE 0x01 |
1414 | | |
1415 | | /* LBMR (extended) gateway message - domain option */ |
1416 | | typedef struct |
1417 | | { |
1418 | | lbm_uint8_t type; |
1419 | | lbm_uint8_t len; |
1420 | | lbm_uint16_t flags; |
1421 | | lbm_uint32_t domain_id; |
1422 | | } lbmr_tnwg_opt_domain_t; |
1423 | 0 | #define O_LBMR_TNWG_OPT_DOMAIN_T_TYPE OFFSETOF(lbmr_tnwg_opt_domain_t, type) |
1424 | 0 | #define L_LBMR_TNWG_OPT_DOMAIN_T_TYPE SIZEOF(lbmr_tnwg_opt_domain_t, type) |
1425 | 0 | #define O_LBMR_TNWG_OPT_DOMAIN_T_LEN OFFSETOF(lbmr_tnwg_opt_domain_t, len) |
1426 | 0 | #define L_LBMR_TNWG_OPT_DOMAIN_T_LEN SIZEOF(lbmr_tnwg_opt_domain_t, len) |
1427 | 0 | #define O_LBMR_TNWG_OPT_DOMAIN_T_FLAGS OFFSETOF(lbmr_tnwg_opt_domain_t, flags) |
1428 | 14 | #define L_LBMR_TNWG_OPT_DOMAIN_T_FLAGS SIZEOF(lbmr_tnwg_opt_domain_t, flags) |
1429 | 0 | #define O_LBMR_TNWG_OPT_DOMAIN_T_DOMAIN_ID OFFSETOF(lbmr_tnwg_opt_domain_t, domain_id) |
1430 | 0 | #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) |
1432 | | |
1433 | 0 | #define LBMR_TNWG_OPT_DOMAIN_TYPE 0x02 |
1434 | | |
1435 | | /* LBMR (extended) gateway message - name option (a base option) */ |
1436 | 0 | #define LBMR_TNWG_OPT_NAME_TYPE 0x03 |
1437 | | |
1438 | | /* LBMR (extended) remote domain route message */ |
1439 | | typedef struct |
1440 | | { |
1441 | | lbm_uint8_t ver_type; |
1442 | | lbm_uint8_t ext_type; |
1443 | | lbm_uint16_t num_domains; |
1444 | | lbm_uint32_t ip; |
1445 | | lbm_uint16_t port; |
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 | 0 | #define O_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_NUM_DOMAINS OFFSETOF(lbmr_remote_domain_route_hdr_t, num_domains) |
1455 | 0 | #define L_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_NUM_DOMAINS SIZEOF(lbmr_remote_domain_route_hdr_t, num_domains) |
1456 | 0 | #define O_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_IP OFFSETOF(lbmr_remote_domain_route_hdr_t, ip) |
1457 | 0 | #define L_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_IP SIZEOF(lbmr_remote_domain_route_hdr_t, ip) |
1458 | 0 | #define O_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_PORT OFFSETOF(lbmr_remote_domain_route_hdr_t, port) |
1459 | 0 | #define L_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_PORT SIZEOF(lbmr_remote_domain_route_hdr_t, port) |
1460 | 0 | #define O_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_ROUTE_INDEX OFFSETOF(lbmr_remote_domain_route_hdr_t, route_index) |
1461 | 0 | #define L_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_ROUTE_INDEX SIZEOF(lbmr_remote_domain_route_hdr_t, route_index) |
1462 | 0 | #define O_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_LENGTH OFFSETOF(lbmr_remote_domain_route_hdr_t, length) |
1463 | 0 | #define L_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_LENGTH SIZEOF(lbmr_remote_domain_route_hdr_t, length) |
1464 | 0 | #define L_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T (int) sizeof(lbmr_remote_domain_route_hdr_t) |
1465 | | |
1466 | | /* LBMR (extended) remote context information message */ |
1467 | | typedef struct |
1468 | | { |
1469 | | lbm_uint8_t ver_type; |
1470 | | lbm_uint8_t ext_type; |
1471 | | lbm_uint16_t len; |
1472 | | lbm_uint16_t num_recs; |
1473 | | lbm_uint16_t reserved; |
1474 | | } lbmr_rctxinfo_t; |
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 | 0 | #define O_LBMR_RCTXINFO_T_LEN OFFSETOF(lbmr_rctxinfo_t, len) |
1480 | 0 | #define L_LBMR_RCTXINFO_T_LEN SIZEOF(lbmr_rctxinfo_t, len) |
1481 | 0 | #define O_LBMR_RCTXINFO_T_NUM_RECS OFFSETOF(lbmr_rctxinfo_t, num_recs) |
1482 | 0 | #define L_LBMR_RCTXINFO_T_NUM_RECS SIZEOF(lbmr_rctxinfo_t, num_recs) |
1483 | 0 | #define O_LBMR_RCTXINFO_T_RESERVED OFFSETOF(lbmr_rctxinfo_t, reserved) |
1484 | 0 | #define L_LBMR_RCTXINFO_T_RESERVED SIZEOF(lbmr_rctxinfo_t, reserved) |
1485 | 0 | #define L_LBMR_RCTXINFO_T (int) sizeof(lbmr_rctxinfo_t) |
1486 | | |
1487 | | /* LBMR (extended) remote context information record */ |
1488 | | typedef struct |
1489 | | { |
1490 | | lbm_uint16_t len; |
1491 | | lbm_uint16_t flags; |
1492 | | } lbmr_rctxinfo_rec_t; |
1493 | 0 | #define O_LBMR_RCTXINFO_REC_T_LEN OFFSETOF(lbmr_rctxinfo_rec_t, len) |
1494 | 0 | #define L_LBMR_RCTXINFO_REC_T_LEN SIZEOF(lbmr_rctxinfo_rec_t, len) |
1495 | 0 | #define O_LBMR_RCTXINFO_REC_T_FLAGS OFFSETOF(lbmr_rctxinfo_rec_t, flags) |
1496 | 14 | #define L_LBMR_RCTXINFO_REC_T_FLAGS SIZEOF(lbmr_rctxinfo_rec_t, flags) |
1497 | 0 | #define L_LBMR_RCTXINFO_REC_T (int) sizeof(lbmr_rctxinfo_rec_t) |
1498 | | |
1499 | 14 | #define LBMR_RCTXINFO_REC_FLAG_QUERY 0x8000 |
1500 | | |
1501 | | /* LBMR (extended) remote context information record option */ |
1502 | | typedef struct |
1503 | | { |
1504 | | lbm_uint8_t type; |
1505 | | lbm_uint8_t len; |
1506 | | lbm_uint16_t flags; |
1507 | | } lbmr_rctxinfo_rec_opt_t; |
1508 | 0 | #define O_LBMR_RCTXINFO_REC_OPT_T_TYPE OFFSETOF(lbmr_rctxinfo_rec_opt_t, type) |
1509 | 0 | #define L_LBMR_RCTXINFO_REC_OPT_T_TYPE SIZEOF(lbmr_rctxinfo_rec_opt_t, type) |
1510 | 0 | #define O_LBMR_RCTXINFO_REC_OPT_T_LEN OFFSETOF(lbmr_rctxinfo_rec_opt_t, len) |
1511 | 0 | #define L_LBMR_RCTXINFO_REC_OPT_T_LEN SIZEOF(lbmr_rctxinfo_rec_opt_t, len) |
1512 | 0 | #define O_LBMR_RCTXINFO_REC_OPT_T_FLAGS OFFSETOF(lbmr_rctxinfo_rec_opt_t, flags) |
1513 | 0 | #define L_LBMR_RCTXINFO_REC_OPT_T_FLAGS SIZEOF(lbmr_rctxinfo_rec_opt_t, flags) |
1514 | 0 | #define L_LBMR_RCTXINFO_REC_OPT_T (int) sizeof(lbmr_rctxinfo_rec_opt_t) |
1515 | | |
1516 | | /* LBMR (extended) remote context information record address option */ |
1517 | | typedef struct |
1518 | | { |
1519 | | lbm_uint8_t type; |
1520 | | lbm_uint8_t len; |
1521 | | lbm_uint16_t flags; |
1522 | | lbm_uint32_t domain_id; |
1523 | | lbm_uint32_t ip; |
1524 | | lbm_uint16_t port; |
1525 | | lbm_uint16_t res; |
1526 | | } lbmr_rctxinfo_rec_address_opt_t; |
1527 | 0 | #define O_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_TYPE OFFSETOF(lbmr_rctxinfo_rec_address_opt_t, type) |
1528 | 0 | #define L_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_TYPE SIZEOF(lbmr_rctxinfo_rec_address_opt_t, type) |
1529 | 0 | #define O_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_LEN OFFSETOF(lbmr_rctxinfo_rec_address_opt_t, len) |
1530 | 0 | #define L_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_LEN SIZEOF(lbmr_rctxinfo_rec_address_opt_t, len) |
1531 | 0 | #define O_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_FLAGS OFFSETOF(lbmr_rctxinfo_rec_address_opt_t, flags) |
1532 | 0 | #define L_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_FLAGS SIZEOF(lbmr_rctxinfo_rec_address_opt_t, flags) |
1533 | 0 | #define O_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_DOMAIN_ID OFFSETOF(lbmr_rctxinfo_rec_address_opt_t, domain_id) |
1534 | 0 | #define L_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_DOMAIN_ID SIZEOF(lbmr_rctxinfo_rec_address_opt_t, domain_id) |
1535 | 0 | #define O_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_IP OFFSETOF(lbmr_rctxinfo_rec_address_opt_t, ip) |
1536 | 0 | #define L_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_IP SIZEOF(lbmr_rctxinfo_rec_address_opt_t, ip) |
1537 | 0 | #define O_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_PORT OFFSETOF(lbmr_rctxinfo_rec_address_opt_t, port) |
1538 | 0 | #define L_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_PORT SIZEOF(lbmr_rctxinfo_rec_address_opt_t, port) |
1539 | 0 | #define O_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_RES OFFSETOF(lbmr_rctxinfo_rec_address_opt_t, res) |
1540 | 0 | #define L_LBMR_RCTXINFO_REC_ADDRESS_OPT_T_RES SIZEOF(lbmr_rctxinfo_rec_address_opt_t, res) |
1541 | 0 | #define L_LBMR_RCTXINFO_REC_ADDRESS_OPT_T (int) sizeof(lbmr_rctxinfo_rec_address_opt_t) |
1542 | | |
1543 | 0 | #define LBMR_RCTXINFO_OPT_ADDRESS_TYPE 0x01 |
1544 | | |
1545 | | /* LBMR (extended) remote context information record instance option */ |
1546 | | typedef struct |
1547 | | { |
1548 | | lbm_uint8_t type; |
1549 | | lbm_uint8_t len; |
1550 | | lbm_uint16_t flags; |
1551 | | lbm_uint8_t instance[LBM_CONTEXT_INSTANCE_BLOCK_SZ]; |
1552 | | } lbmr_rctxinfo_rec_instance_opt_t; |
1553 | 0 | #define O_LBMR_RCTXINFO_REC_INSTANCE_OPT_T_TYPE OFFSETOF(lbmr_rctxinfo_rec_instance_opt_t, type) |
1554 | 0 | #define L_LBMR_RCTXINFO_REC_INSTANCE_OPT_T_TYPE SIZEOF(lbmr_rctxinfo_rec_instance_opt_t, type) |
1555 | 0 | #define O_LBMR_RCTXINFO_REC_INSTANCE_OPT_T_LEN OFFSETOF(lbmr_rctxinfo_rec_instance_opt_t, len) |
1556 | 0 | #define L_LBMR_RCTXINFO_REC_INSTANCE_OPT_T_LEN SIZEOF(lbmr_rctxinfo_rec_instance_opt_t, len) |
1557 | 0 | #define O_LBMR_RCTXINFO_REC_INSTANCE_OPT_T_FLAGS OFFSETOF(lbmr_rctxinfo_rec_instance_opt_t, flags) |
1558 | 0 | #define L_LBMR_RCTXINFO_REC_INSTANCE_OPT_T_FLAGS SIZEOF(lbmr_rctxinfo_rec_instance_opt_t, flags) |
1559 | 0 | #define O_LBMR_RCTXINFO_REC_INSTANCE_OPT_T_INSTANCE OFFSETOF(lbmr_rctxinfo_rec_instance_opt_t, instance) |
1560 | 0 | #define L_LBMR_RCTXINFO_REC_INSTANCE_OPT_T_INSTANCE SIZEOF(lbmr_rctxinfo_rec_instance_opt_t, instance) |
1561 | 0 | #define L_LBMR_RCTXINFO_REC_INSTANCE_OPT_T (int) sizeof(lbmr_rctxinfo_rec_instance_opt_t) |
1562 | | |
1563 | 0 | #define LBMR_RCTXINFO_OPT_INSTANCE_TYPE 0x02 |
1564 | | |
1565 | | /* LBMR (extended) remote context information record odomain option */ |
1566 | | typedef struct |
1567 | | { |
1568 | | lbm_uint8_t type; |
1569 | | lbm_uint8_t len; |
1570 | | lbm_uint16_t flags; |
1571 | | lbm_uint32_t domain_id; |
1572 | | } lbmr_rctxinfo_rec_odomain_opt_t; |
1573 | 0 | #define O_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T_TYPE OFFSETOF(lbmr_rctxinfo_rec_odomain_opt_t, type) |
1574 | 0 | #define L_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T_TYPE SIZEOF(lbmr_rctxinfo_rec_odomain_opt_t, type) |
1575 | 0 | #define O_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T_LEN OFFSETOF(lbmr_rctxinfo_rec_odomain_opt_t, len) |
1576 | 0 | #define L_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T_LEN SIZEOF(lbmr_rctxinfo_rec_odomain_opt_t, len) |
1577 | 0 | #define O_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T_FLAGS OFFSETOF(lbmr_rctxinfo_rec_odomain_opt_t, flags) |
1578 | 0 | #define L_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T_FLAGS SIZEOF(lbmr_rctxinfo_rec_odomain_opt_t, flags) |
1579 | 0 | #define O_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T_DOMAIN_ID OFFSETOF(lbmr_rctxinfo_rec_odomain_opt_t, domain_id) |
1580 | 0 | #define L_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T_DOMAIN_ID SIZEOF(lbmr_rctxinfo_rec_odomain_opt_t, domain_id) |
1581 | 0 | #define L_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T (int) sizeof(lbmr_rctxinfo_rec_odomain_opt_t) |
1582 | | |
1583 | 0 | #define LBMR_RCTXINFO_OPT_ODOMAIN_TYPE 0x03 |
1584 | | |
1585 | | /* LBMR (extended) remote context information record name option */ |
1586 | | typedef struct |
1587 | | { |
1588 | | lbm_uint8_t type; |
1589 | | lbm_uint8_t len; |
1590 | | lbm_uint16_t flags; |
1591 | | } lbmr_rctxinfo_rec_name_opt_t; |
1592 | 0 | #define O_LBMR_RCTXINFO_REC_NAME_OPT_T_TYPE OFFSETOF(lbmr_rctxinfo_rec_name_opt_t, type) |
1593 | 0 | #define L_LBMR_RCTXINFO_REC_NAME_OPT_T_TYPE SIZEOF(lbmr_rctxinfo_rec_name_opt_t, type) |
1594 | 0 | #define O_LBMR_RCTXINFO_REC_NAME_OPT_T_LEN OFFSETOF(lbmr_rctxinfo_rec_name_opt_t, len) |
1595 | 0 | #define L_LBMR_RCTXINFO_REC_NAME_OPT_T_LEN SIZEOF(lbmr_rctxinfo_rec_name_opt_t, len) |
1596 | 0 | #define O_LBMR_RCTXINFO_REC_NAME_OPT_T_FLAGS OFFSETOF(lbmr_rctxinfo_rec_name_opt_t, flags) |
1597 | 0 | #define L_LBMR_RCTXINFO_REC_NAME_OPT_T_FLAGS SIZEOF(lbmr_rctxinfo_rec_name_opt_t, flags) |
1598 | 0 | #define L_LBMR_RCTXINFO_REC_NAME_OPT_T (int) sizeof(lbmr_rctxinfo_rec_name_opt_t) |
1599 | | |
1600 | 0 | #define LBMR_RCTXINFO_OPT_NAME_TYPE 0x04 |
1601 | | |
1602 | | /* Queue management headers (may appear in LBMR or LBMC packets) */ |
1603 | | typedef struct |
1604 | | { |
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 | 0 | #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 | 0 | #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) |
1613 | | |
1614 | | typedef struct |
1615 | | { |
1616 | | lbm_uint8_t filler1; |
1617 | | lbm_uint8_t filler2; |
1618 | | lbm_uint8_t flags; |
1619 | | lbm_uint8_t pckt_type; |
1620 | | lbm_uint8_t cfgsig[20]; |
1621 | | lbm_uint32_t queue_id; |
1622 | | lbm_uint32_t queue_ver; |
1623 | | lbm_uint32_t ip; |
1624 | | lbm_uint16_t port; |
1625 | | lbm_uint16_t inst_idx; |
1626 | | lbm_uint16_t grp_idx; |
1627 | | lbm_uint16_t pckt_type_dep16; |
1628 | | } umq_qmgmt_hdr_t; |
1629 | 70 | #define O_UMQ_QMGMT_HDR_T_FLAGS OFFSETOF(umq_qmgmt_hdr_t, flags) |
1630 | 56 | #define L_UMQ_QMGMT_HDR_T_FLAGS SIZEOF(umq_qmgmt_hdr_t, flags) |
1631 | 70 | #define O_UMQ_QMGMT_HDR_T_PCKT_TYPE OFFSETOF(umq_qmgmt_hdr_t, pckt_type) |
1632 | 35 | #define L_UMQ_QMGMT_HDR_T_PCKT_TYPE SIZEOF(umq_qmgmt_hdr_t, pckt_type) |
1633 | 35 | #define O_UMQ_QMGMT_HDR_T_CFGSIG OFFSETOF(umq_qmgmt_hdr_t, cfgsig) |
1634 | 35 | #define L_UMQ_QMGMT_HDR_T_CFGSIG SIZEOF(umq_qmgmt_hdr_t, cfgsig) |
1635 | 35 | #define O_UMQ_QMGMT_HDR_T_QUEUE_ID OFFSETOF(umq_qmgmt_hdr_t, queue_id) |
1636 | 35 | #define L_UMQ_QMGMT_HDR_T_QUEUE_ID SIZEOF(umq_qmgmt_hdr_t, queue_id) |
1637 | 35 | #define O_UMQ_QMGMT_HDR_T_QUEUE_VER OFFSETOF(umq_qmgmt_hdr_t, queue_ver) |
1638 | 35 | #define L_UMQ_QMGMT_HDR_T_QUEUE_VER SIZEOF(umq_qmgmt_hdr_t, queue_ver) |
1639 | 35 | #define O_UMQ_QMGMT_HDR_T_IP OFFSETOF(umq_qmgmt_hdr_t, ip) |
1640 | 35 | #define L_UMQ_QMGMT_HDR_T_IP SIZEOF(umq_qmgmt_hdr_t, ip) |
1641 | 35 | #define O_UMQ_QMGMT_HDR_T_PORT OFFSETOF(umq_qmgmt_hdr_t, port) |
1642 | 35 | #define L_UMQ_QMGMT_HDR_T_PORT SIZEOF(umq_qmgmt_hdr_t, port) |
1643 | 35 | #define O_UMQ_QMGMT_HDR_T_INST_IDX OFFSETOF(umq_qmgmt_hdr_t, inst_idx) |
1644 | 35 | #define L_UMQ_QMGMT_HDR_T_INST_IDX SIZEOF(umq_qmgmt_hdr_t, inst_idx) |
1645 | 35 | #define O_UMQ_QMGMT_HDR_T_GRP_IDX OFFSETOF(umq_qmgmt_hdr_t, grp_idx) |
1646 | 35 | #define L_UMQ_QMGMT_HDR_T_GRP_IDX SIZEOF(umq_qmgmt_hdr_t, grp_idx) |
1647 | 69 | #define O_UMQ_QMGMT_HDR_T_PCKT_TYPE_DEP16 OFFSETOF(umq_qmgmt_hdr_t, pckt_type_dep16) |
1648 | 34 | #define L_UMQ_QMGMT_HDR_T_PCKT_TYPE_DEP16 SIZEOF(umq_qmgmt_hdr_t, pckt_type_dep16) |
1649 | 68 | #define L_UMQ_QMGMT_HDR_T (int) sizeof(umq_qmgmt_hdr_t) |
1650 | | |
1651 | 14 | #define UMQ_QMGMT_HDR_I_FLAG 0x80 |
1652 | 43 | #define UMQ_QMGMT_HDR_N_FLAG 0x40 |
1653 | 14 | #define UMQ_QMGMT_HDR_IL_L_FLAG 0x20 |
1654 | 14 | #define UMQ_QMGMT_HDR_IL_K_FLAG 0x10 |
1655 | | |
1656 | | typedef struct |
1657 | | { |
1658 | | lbm_uint32_t highest_rcr_tsp; |
1659 | | } umq_qmgmt_il_hdr_t; |
1660 | 5 | #define O_UMQ_QMGMT_IL_HDR_T_HIGHEST_RCR_TSP OFFSETOF(umq_qmgmt_il_hdr_t, highest_rcr_tsp) |
1661 | 5 | #define L_UMQ_QMGMT_IL_HDR_T_HIGHEST_RCR_TSP SIZEOF(umq_qmgmt_il_hdr_t, highest_rcr_tsp) |
1662 | 15 | #define L_UMQ_QMGMT_IL_HDR_T (int) sizeof(umq_qmgmt_il_hdr_t) |
1663 | | |
1664 | | typedef struct |
1665 | | { |
1666 | | lbm_uint32_t ip; |
1667 | | lbm_uint16_t port; |
1668 | | lbm_uint16_t inst_idx; |
1669 | | lbm_uint16_t grp_idx; |
1670 | | lbm_uint16_t flags; |
1671 | | } umq_qmgmt_il_inst_hdr_t; |
1672 | 25 | #define O_UMQ_QMGMT_IL_INST_HDR_T_IP OFFSETOF(umq_qmgmt_il_inst_hdr_t, ip) |
1673 | 25 | #define L_UMQ_QMGMT_IL_INST_HDR_T_IP SIZEOF(umq_qmgmt_il_inst_hdr_t, ip) |
1674 | 25 | #define O_UMQ_QMGMT_IL_INST_HDR_T_PORT OFFSETOF(umq_qmgmt_il_inst_hdr_t, port) |
1675 | 25 | #define L_UMQ_QMGMT_IL_INST_HDR_T_PORT SIZEOF(umq_qmgmt_il_inst_hdr_t, port) |
1676 | 25 | #define O_UMQ_QMGMT_IL_INST_HDR_T_INST_IDX OFFSETOF(umq_qmgmt_il_inst_hdr_t, inst_idx) |
1677 | 25 | #define L_UMQ_QMGMT_IL_INST_HDR_T_INST_IDX SIZEOF(umq_qmgmt_il_inst_hdr_t, inst_idx) |
1678 | 25 | #define O_UMQ_QMGMT_IL_INST_HDR_T_GRP_IDX OFFSETOF(umq_qmgmt_il_inst_hdr_t, grp_idx) |
1679 | 25 | #define L_UMQ_QMGMT_IL_INST_HDR_T_GRP_IDX SIZEOF(umq_qmgmt_il_inst_hdr_t, grp_idx) |
1680 | 25 | #define O_UMQ_QMGMT_IL_INST_HDR_T_FLAGS OFFSETOF(umq_qmgmt_il_inst_hdr_t, flags) |
1681 | 42 | #define L_UMQ_QMGMT_IL_INST_HDR_T_FLAGS SIZEOF(umq_qmgmt_il_inst_hdr_t, flags) |
1682 | 75 | #define L_UMQ_QMGMT_IL_INST_HDR_T (int) sizeof(umq_qmgmt_il_inst_hdr_t) |
1683 | | |
1684 | 14 | #define UMQ_QMGMT_HDR_IL_INST_M_FLAG 0x8000 |
1685 | 14 | #define UMQ_QMGMT_HDR_IL_INST_Q_FLAG 0x4000 |
1686 | 14 | #define UMQ_QMGMT_HDR_IL_INST_P_FLAG 0x2000 |
1687 | | |
1688 | | typedef struct |
1689 | | { |
1690 | | lbm_uint32_t queue_new_ver; |
1691 | | } umq_qmgmt_ec_hdr_t; |
1692 | 1 | #define O_UMQ_QMGMT_EC_HDR_T_QUEUE_NEW_VER OFFSETOF(umq_qmgmt_ec_hdr_t, queue_new_ver) |
1693 | 1 | #define L_UMQ_QMGMT_EC_HDR_T_QUEUE_NEW_VER SIZEOF(umq_qmgmt_ec_hdr_t, queue_new_ver) |
1694 | 3 | #define L_UMQ_QMGMT_EC_HDR_T (int) sizeof(umq_qmgmt_ec_hdr_t) |
1695 | | |
1696 | | typedef struct |
1697 | | { |
1698 | | lbm_uint32_t highest_rcr_tsp; |
1699 | | lbm_uint32_t age; |
1700 | | } umq_qmgmt_ev_hdr_t; |
1701 | 1 | #define O_UMQ_QMGMT_EV_HDR_T_HIGHEST_RCR_TSP OFFSETOF(umq_qmgmt_ev_hdr_t, highest_rcr_tsp) |
1702 | 1 | #define L_UMQ_QMGMT_EV_HDR_T_HIGHEST_RCR_TSP SIZEOF(umq_qmgmt_ev_hdr_t, highest_rcr_tsp) |
1703 | 1 | #define O_UMQ_QMGMT_EV_HDR_T_AGE OFFSETOF(umq_qmgmt_ev_hdr_t, age) |
1704 | 1 | #define L_UMQ_QMGMT_EV_HDR_T_AGE SIZEOF(umq_qmgmt_ev_hdr_t, age) |
1705 | 3 | #define L_UMQ_QMGMT_EV_HDR_T (int) sizeof(umq_qmgmt_ev_hdr_t) |
1706 | | |
1707 | | typedef struct |
1708 | | { |
1709 | | lbm_uint32_t highest_rcr_tsp; |
1710 | | } umq_qmgmt_qro_hdr_t; |
1711 | 1 | #define O_UMQ_QMGMT_QRO_HDR_T_HIGHEST_RCR_TSP OFFSETOF(umq_qmgmt_qro_hdr_t, highest_rcr_tsp) |
1712 | 1 | #define L_UMQ_QMGMT_QRO_HDR_T_HIGHEST_RCR_TSP SIZEOF(umq_qmgmt_qro_hdr_t, highest_rcr_tsp) |
1713 | 3 | #define L_UMQ_QMGMT_QRO_HDR_T (int) sizeof(umq_qmgmt_qro_hdr_t) |
1714 | | |
1715 | 45 | #define UMQ_QMGMT_HDR_PCKT_TYPE_IL 0x1 |
1716 | 0 | #define UMQ_QMGMT_HDR_PCKT_TYPE_JR 0x2 |
1717 | 2 | #define UMQ_QMGMT_HDR_PCKT_TYPE_JREJ 0x3 |
1718 | 0 | #define UMQ_QMGMT_HDR_PCKT_TYPE_IKA 0x4 |
1719 | 1 | #define UMQ_QMGMT_HDR_PCKT_TYPE_EC 0x5 |
1720 | 2 | #define UMQ_QMGMT_HDR_PCKT_TYPE_EV 0x6 |
1721 | 1 | #define UMQ_QMGMT_HDR_PCKT_TYPE_CNIL 0x7 |
1722 | 1 | #define UMQ_QMGMT_HDR_PCKT_TYPE_QRO 0x8 |
1723 | | |
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 |
1728 | | |
1729 | | /*----------------------------------------------------------------------------*/ |
1730 | | /* Value translation tables. */ |
1731 | | /*----------------------------------------------------------------------------*/ |
1732 | | |
1733 | | static const value_string lbmr_packet_type[] = |
1734 | | { |
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" }, |
1742 | | { 0x0, NULL } |
1743 | | }; |
1744 | | |
1745 | | static const value_string lbmr_ext_packet_type[] = |
1746 | | { |
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" }, |
1754 | | { 0x0, NULL } |
1755 | | }; |
1756 | | |
1757 | | static const value_string lbmr_transport_type[] = |
1758 | | { |
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" }, |
1765 | | { 0x0, NULL } |
1766 | | }; |
1767 | | |
1768 | | static const value_string lbmr_tmr_type[] = |
1769 | | { |
1770 | | { LBMR_TMR_LEAVE_TOPIC, "Leave Topic" }, |
1771 | | { LBMR_TMR_TOPIC_USE, "Topic Use" }, |
1772 | | { 0x0, NULL } |
1773 | | }; |
1774 | | |
1775 | | static const value_string lbmr_topic_option_type[] = |
1776 | | { |
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" }, |
1792 | | { 0x0, NULL } |
1793 | | }; |
1794 | | |
1795 | | static const value_string lbmr_pser_dependent_type[] = |
1796 | | { |
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" }, |
1799 | | { 0x0, NULL } |
1800 | | }; |
1801 | | |
1802 | | static const value_string lbmr_option_type[] = |
1803 | | { |
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" }, |
1809 | | { 0x0, NULL } |
1810 | | }; |
1811 | | |
1812 | | static const value_string lbmr_pser_option_type[] = |
1813 | | { |
1814 | | { LBMR_PSER_OPT_SRC_CTXINST_TYPE, "Source context instance" }, |
1815 | | { LBMR_PSER_OPT_STORE_CTXINST_TYPE, "Store context instance" }, |
1816 | | { 0x0, NULL } |
1817 | | }; |
1818 | | |
1819 | | static const value_string lbmr_option_source_type[] = |
1820 | | { |
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" }, |
1824 | | { 0x0, NULL } |
1825 | | }; |
1826 | | |
1827 | | static const value_string lbmr_tnwg_function_type[] = |
1828 | | { |
1829 | | { LBMR_TNWG_TYPE_INTEREST, "Interest" }, |
1830 | | { LBMR_TNWG_TYPE_CTXINFO, "Context information" }, |
1831 | | { LBMR_TNWG_TYPE_TRREQ, "Topic res request" }, |
1832 | | { 0x0, NULL } |
1833 | | }; |
1834 | | |
1835 | | static const value_string lbmr_tnwg_option_type[] = |
1836 | | { |
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" }, |
1841 | | { 0x0, NULL } |
1842 | | }; |
1843 | | |
1844 | | static const value_string umq_qmgmt_packet_type[] = |
1845 | | { |
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" }, |
1854 | | { 0x0, NULL } |
1855 | | }; |
1856 | | |
1857 | | static const value_string lbmr_rctxinfo_option_type[] = |
1858 | | { |
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" }, |
1863 | | { 0x0, NULL } |
1864 | | }; |
1865 | | |
1866 | | /*----------------------------------------------------------------------------*/ |
1867 | | /* Preferences. */ |
1868 | | /*----------------------------------------------------------------------------*/ |
1869 | | |
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 | 14 | #define LBMR_DEFAULT_MC_INCOMING_ADDRESS "224.9.10.11" |
1876 | 14 | #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 | 14 | #define LBMR_DEFAULT_UC_ADDRESS "0.0.0.0" |
1884 | | |
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; |
1895 | | |
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; |
1906 | | |
1907 | | typedef struct |
1908 | | { |
1909 | | char * name; |
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; |
1919 | | char * uc_address; |
1920 | | uint32_t uc_address_val_h; |
1921 | | } lbmr_tag_entry_t; |
1922 | | |
1923 | | static lbmr_tag_entry_t * lbmr_tag_entry; |
1924 | | static unsigned lbmr_tag_count; |
1925 | | |
1926 | | UAT_CSTRING_CB_DEF(lbmr_tag, name, lbmr_tag_entry_t) |
1927 | 0 | UAT_DEC_CB_DEF(lbmr_tag, mc_outgoing_udp_port, lbmr_tag_entry_t) Unexecuted instantiation: packet-lbmr.c:lbmr_tag_mc_outgoing_udp_port_set_cb Unexecuted instantiation: packet-lbmr.c:lbmr_tag_mc_outgoing_udp_port_tostr_cb |
1928 | 0 | UAT_DEC_CB_DEF(lbmr_tag, mc_incoming_udp_port, lbmr_tag_entry_t) Unexecuted instantiation: packet-lbmr.c:lbmr_tag_mc_incoming_udp_port_set_cb Unexecuted instantiation: packet-lbmr.c:lbmr_tag_mc_incoming_udp_port_tostr_cb |
1929 | 0 | UAT_IPV4_MC_CB_DEF(lbmr_tag, mc_incoming_address, lbmr_tag_entry_t) Unexecuted instantiation: packet-lbmr.c:lbmr_tag_mc_incoming_address_chk_cb Unexecuted instantiation: packet-lbmr.c:lbmr_tag_mc_incoming_address_set_cb |
1930 | 0 | UAT_IPV4_MC_CB_DEF(lbmr_tag, mc_outgoing_address, lbmr_tag_entry_t) Unexecuted instantiation: packet-lbmr.c:lbmr_tag_mc_outgoing_address_chk_cb Unexecuted instantiation: packet-lbmr.c:lbmr_tag_mc_outgoing_address_set_cb |
1931 | 0 | UAT_DEC_CB_DEF(lbmr_tag, uc_port_high, lbmr_tag_entry_t) Unexecuted instantiation: packet-lbmr.c:lbmr_tag_uc_port_high_set_cb Unexecuted instantiation: packet-lbmr.c:lbmr_tag_uc_port_high_tostr_cb |
1932 | 0 | UAT_DEC_CB_DEF(lbmr_tag, uc_port_low, lbmr_tag_entry_t) Unexecuted instantiation: packet-lbmr.c:lbmr_tag_uc_port_low_set_cb Unexecuted instantiation: packet-lbmr.c:lbmr_tag_uc_port_low_tostr_cb |
1933 | 0 | UAT_DEC_CB_DEF(lbmr_tag, uc_dest_port, lbmr_tag_entry_t) Unexecuted instantiation: packet-lbmr.c:lbmr_tag_uc_dest_port_set_cb Unexecuted instantiation: packet-lbmr.c:lbmr_tag_uc_dest_port_tostr_cb |
1934 | 0 | UAT_IPV4_CB_DEF(lbmr_tag, uc_address, lbmr_tag_entry_t) Unexecuted instantiation: packet-lbmr.c:lbmr_tag_uc_address_chk_cb Unexecuted instantiation: packet-lbmr.c:lbmr_tag_uc_address_set_cb |
1935 | | static uat_field_t lbmr_tag_array[] = |
1936 | | { |
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"), |
1946 | | UAT_END_FIELDS |
1947 | | }; |
1948 | | |
1949 | | /*----------------------------------------------------------------------------*/ |
1950 | | /* UAT callback functions. */ |
1951 | | /*----------------------------------------------------------------------------*/ |
1952 | | static bool lbmr_tag_update_cb(void * record, char * * error_string) |
1953 | 0 | { |
1954 | 0 | lbmr_tag_entry_t * tag = (lbmr_tag_entry_t *)record; |
1955 | |
|
1956 | 0 | if (tag->name == NULL) |
1957 | 0 | { |
1958 | 0 | *error_string = g_strdup("Tag name can't be empty"); |
1959 | 0 | return false; |
1960 | 0 | } |
1961 | 0 | else |
1962 | 0 | { |
1963 | 0 | g_strstrip(tag->name); |
1964 | 0 | if (tag->name[0] == 0) |
1965 | 0 | { |
1966 | 0 | *error_string = g_strdup("Tag name can't be empty"); |
1967 | 0 | return false; |
1968 | 0 | } |
1969 | 0 | } |
1970 | 0 | return true; |
1971 | 0 | } |
1972 | | |
1973 | | static void * lbmr_tag_copy_cb(void * destination, const void * source, size_t length _U_) |
1974 | 0 | { |
1975 | 0 | const lbmr_tag_entry_t * src = (const lbmr_tag_entry_t *)source; |
1976 | 0 | lbmr_tag_entry_t * dest = (lbmr_tag_entry_t *)destination; |
1977 | |
|
1978 | 0 | dest->name = g_strdup(src->name); |
1979 | 0 | dest->mc_outgoing_udp_port = src->mc_outgoing_udp_port; |
1980 | 0 | dest->mc_incoming_udp_port = src->mc_incoming_udp_port; |
1981 | 0 | dest->mc_incoming_address = g_strdup(src->mc_incoming_address); |
1982 | 0 | dest->mc_incoming_address_val_h = src->mc_incoming_address_val_h; |
1983 | 0 | dest->mc_outgoing_address = g_strdup(src->mc_outgoing_address); |
1984 | 0 | dest->mc_outgoing_address_val_h = src->mc_outgoing_address_val_h; |
1985 | 0 | dest->uc_port_high = src->uc_port_high; |
1986 | 0 | dest->uc_port_low = src->uc_port_low; |
1987 | 0 | dest->uc_dest_port = src->uc_dest_port; |
1988 | 0 | dest->uc_address = g_strdup(src->uc_address); |
1989 | 0 | dest->uc_address_val_h = src->uc_address_val_h; |
1990 | 0 | return (dest); |
1991 | 0 | } |
1992 | | |
1993 | | static void lbmr_tag_free_cb(void * record) |
1994 | 0 | { |
1995 | 0 | lbmr_tag_entry_t * tag = (lbmr_tag_entry_t *)record; |
1996 | |
|
1997 | 0 | if (tag->name != NULL) |
1998 | 0 | { |
1999 | 0 | g_free(tag->name); |
2000 | 0 | tag->name = NULL; |
2001 | 0 | } |
2002 | 0 | if (tag->mc_incoming_address != NULL) |
2003 | 0 | { |
2004 | 0 | g_free(tag->mc_incoming_address); |
2005 | 0 | tag->mc_incoming_address = NULL; |
2006 | 0 | } |
2007 | 0 | if (tag->mc_outgoing_address != NULL) |
2008 | 0 | { |
2009 | 0 | g_free(tag->mc_outgoing_address); |
2010 | 0 | tag->mc_outgoing_address = NULL; |
2011 | 0 | } |
2012 | 0 | if (tag->uc_address != NULL) |
2013 | 0 | { |
2014 | 0 | g_free(tag->uc_address); |
2015 | 0 | tag->uc_address = NULL; |
2016 | 0 | } |
2017 | 0 | } |
2018 | | |
2019 | | static tap_packet_status lbmr_match_packet(packet_info * pinfo, const lbmr_tag_entry_t * entry) |
2020 | 0 | { |
2021 | 0 | uint32_t dest_addr_h; |
2022 | 0 | uint32_t src_addr_h; |
2023 | |
|
2024 | 0 | if ((pinfo->dst.type != AT_IPv4) || (pinfo->dst.len != 4) || |
2025 | 0 | (pinfo->src.type != AT_IPv4) || (pinfo->src.len != 4)) |
2026 | 0 | return (TAP_PACKET_DONT_REDRAW); |
2027 | 0 | dest_addr_h = pntohu32(pinfo->dst.data); |
2028 | 0 | src_addr_h = pntohu32(pinfo->src.data); |
2029 | |
|
2030 | 0 | if (in4_addr_is_multicast(dest_addr_h)) |
2031 | 0 | { |
2032 | | /* Check multicast topic resolution values. */ |
2033 | 0 | if ((dest_addr_h != entry->mc_incoming_address_val_h) && (dest_addr_h != entry->mc_outgoing_address_val_h)) |
2034 | 0 | { |
2035 | | /* No match. */ |
2036 | 0 | return (TAP_PACKET_DONT_REDRAW); |
2037 | 0 | } |
2038 | | /* Check for the correct port. */ |
2039 | 0 | if ((dest_addr_h == entry->mc_incoming_address_val_h) && (pinfo->destport != entry->mc_incoming_udp_port)) |
2040 | 0 | { |
2041 | | /* Wrong incoming port. */ |
2042 | 0 | return (TAP_PACKET_DONT_REDRAW); |
2043 | 0 | } |
2044 | 0 | if ((dest_addr_h == entry->mc_outgoing_address_val_h) && (pinfo->destport != entry->mc_outgoing_udp_port)) |
2045 | 0 | { |
2046 | | /* Wrong outgoing port. */ |
2047 | 0 | return (TAP_PACKET_DONT_REDRAW); |
2048 | 0 | } |
2049 | | /* Must be one of ours. */ |
2050 | 0 | return (TAP_PACKET_REDRAW); |
2051 | 0 | } |
2052 | 0 | else |
2053 | 0 | { |
2054 | | /* Check unicast topic resolution values. */ |
2055 | | /* Address should be either not specified, or match the src or dest address of the packet. */ |
2056 | 0 | if ((entry->uc_address_val_h == 0) || (entry->uc_address_val_h == dest_addr_h) || (entry->uc_address_val_h == src_addr_h)) |
2057 | 0 | { |
2058 | 0 | if (((pinfo->destport == entry->uc_dest_port) || (pinfo->srcport == entry->uc_dest_port)) |
2059 | 0 | && (((pinfo->destport <= entry->uc_port_high) && (pinfo->destport >= entry->uc_port_low)) |
2060 | 0 | || ((pinfo->srcport <= entry->uc_port_high) && (pinfo->srcport >= entry->uc_port_low)))) |
2061 | 0 | { |
2062 | | /* One of ours, so handle it. */ |
2063 | 0 | return (TAP_PACKET_REDRAW); |
2064 | 0 | } |
2065 | 0 | } |
2066 | 0 | } |
2067 | 0 | return (TAP_PACKET_DONT_REDRAW); |
2068 | 0 | } |
2069 | | |
2070 | | static char * lbmr_tag_find(packet_info * pinfo) |
2071 | 0 | { |
2072 | 0 | unsigned idx; |
2073 | 0 | lbmr_tag_entry_t * tag = NULL; |
2074 | |
|
2075 | 0 | if (!lbmr_use_tag) |
2076 | 0 | { |
2077 | 0 | return (NULL); |
2078 | 0 | } |
2079 | 0 | for (idx = 0; idx < lbmr_tag_count; ++idx) |
2080 | 0 | { |
2081 | 0 | tag = &(lbmr_tag_entry[idx]); |
2082 | 0 | if (lbmr_match_packet(pinfo, tag)) |
2083 | 0 | { |
2084 | 0 | return tag->name; |
2085 | 0 | } |
2086 | 0 | } |
2087 | 0 | return (NULL); |
2088 | 0 | } |
2089 | | |
2090 | | /*----------------------------------------------------------------------------*/ |
2091 | | /* Handles of all types. */ |
2092 | | /*----------------------------------------------------------------------------*/ |
2093 | | /* Protocol handle */ |
2094 | | static int proto_lbmr; |
2095 | | |
2096 | | /* Dissector handle */ |
2097 | | static dissector_handle_t lbmr_dissector_handle; |
2098 | | |
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; |
2206 | | |
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; |
2646 | | |
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; |
2651 | | |
2652 | | |
2653 | | /* Tap handles */ |
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; |
2659 | | |
2660 | 56 | #define LBMR_TOPIC_ADVERTISEMENT_TAP_STRING "lbm_lbmr_topic_advertisement" |
2661 | 42 | #define LBMR_TOPIC_QUERY_TAP_STRING "lbm_lbmr_topic_query" |
2662 | 42 | #define LBMR_PATTERN_QUERY_TAP_STRING "lbm_lbmr_pattern_query" |
2663 | 42 | #define LBMR_QUEUE_ADVERTISEMENT_TAP_STRING "lbm_lbmr_queue_advertisement" |
2664 | 42 | #define LBMR_QUEUE_QUERY_TAP_STRING "lbm_lbmr_queue_query" |
2665 | | |
2666 | | /*----------------------------------------------------------------------------*/ |
2667 | | /* Statistics. */ |
2668 | | /*----------------------------------------------------------------------------*/ |
2669 | | /* Statistics structures */ |
2670 | | struct tqr_node_t_stct; |
2671 | | struct tqr_node_t_stct |
2672 | | { |
2673 | | char * topic; |
2674 | | struct tqr_node_t_stct * next; |
2675 | | }; |
2676 | | typedef struct tqr_node_t_stct tqr_node_t; |
2677 | | |
2678 | | struct wctqr_node_t_stct; |
2679 | | struct wctqr_node_t_stct |
2680 | | { |
2681 | | uint8_t type; |
2682 | | char * pattern; |
2683 | | struct wctqr_node_t_stct * next; |
2684 | | }; |
2685 | | typedef struct wctqr_node_t_stct wctqr_node_t; |
2686 | | |
2687 | | struct tir_node_t_stct; |
2688 | | struct tir_node_t_stct |
2689 | | { |
2690 | | char * topic; |
2691 | | char * source_string; |
2692 | | uint32_t idx; |
2693 | | struct tir_node_t_stct * next; |
2694 | | }; |
2695 | | typedef struct tir_node_t_stct tir_node_t; |
2696 | | |
2697 | | typedef struct |
2698 | | { |
2699 | | int tqr_count; |
2700 | | tqr_node_t * tqr; |
2701 | | int tir_count; |
2702 | | tir_node_t * tir; |
2703 | | int wctqr_count; |
2704 | | wctqr_node_t * wctqr; |
2705 | | } lbmr_topic_contents_t; |
2706 | | |
2707 | | struct qqr_node_t_stct; |
2708 | | struct qqr_node_t_stct |
2709 | | { |
2710 | | char * queue; |
2711 | | struct qqr_node_t_stct * next; |
2712 | | }; |
2713 | | typedef struct qqr_node_t_stct qqr_node_t; |
2714 | | |
2715 | | struct qir_node_t_stct; |
2716 | | struct qir_node_t_stct |
2717 | | { |
2718 | | char * queue; |
2719 | | char * topic; |
2720 | | uint16_t port; |
2721 | | struct qir_node_t_stct * next; |
2722 | | }; |
2723 | | typedef struct qir_node_t_stct qir_node_t; |
2724 | | |
2725 | | typedef struct |
2726 | | { |
2727 | | int qqr_count; |
2728 | | qqr_node_t * qqr; |
2729 | | int qir_count; |
2730 | | qir_node_t * qir; |
2731 | | } lbmr_queue_contents_t; |
2732 | | |
2733 | | typedef struct |
2734 | | { |
2735 | | int type; |
2736 | | union |
2737 | | { |
2738 | | lbmr_topic_contents_t topic; |
2739 | | lbmr_queue_contents_t queue; |
2740 | | } contents; |
2741 | | } lbmr_contents_t; |
2742 | | |
2743 | 0 | #define LBMR_CONTENTS_TOPIC 0 |
2744 | 0 | #define LBMR_CONTENTS_QUEUE 1 |
2745 | | |
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"; |
2758 | | |
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; |
2771 | | |
2772 | | /*----------------------------------------------------------------------------*/ |
2773 | | /* Statistics tree utility functions. */ |
2774 | | /*----------------------------------------------------------------------------*/ |
2775 | | |
2776 | | static void add_contents_tqr(wmem_allocator_t* allocator, lbmr_contents_t * contents, const char * topic) |
2777 | 0 | { |
2778 | 0 | tqr_node_t * node = NULL; |
2779 | |
|
2780 | 0 | node = wmem_new(allocator, tqr_node_t); |
2781 | 0 | node->topic = wmem_strdup(allocator, topic); |
2782 | 0 | node->next = contents->contents.topic.tqr; |
2783 | 0 | contents->contents.topic.tqr = node; |
2784 | 0 | contents->contents.topic.tqr_count++; |
2785 | 0 | } |
2786 | | |
2787 | | static void add_contents_wctqr(wmem_allocator_t* allocator, lbmr_contents_t * contents, unsigned char type, const char * pattern) |
2788 | 0 | { |
2789 | 0 | wctqr_node_t * node = NULL; |
2790 | |
|
2791 | 0 | node = wmem_new(allocator, wctqr_node_t); |
2792 | 0 | node->type = type; |
2793 | 0 | node->pattern = wmem_strdup(allocator, pattern); |
2794 | 0 | node->next = contents->contents.topic.wctqr; |
2795 | 0 | contents->contents.topic.wctqr = node; |
2796 | 0 | contents->contents.topic.wctqr_count++; |
2797 | 0 | } |
2798 | | |
2799 | | static void add_contents_tir(wmem_allocator_t* allocator, lbmr_contents_t * contents, const char * topic, char * source, uint32_t topic_index) |
2800 | 0 | { |
2801 | 0 | tir_node_t * node = NULL; |
2802 | |
|
2803 | 0 | node = wmem_new(allocator, tir_node_t); |
2804 | 0 | node->topic = wmem_strdup(allocator, topic); |
2805 | 0 | node->source_string = source; |
2806 | 0 | node->idx = topic_index; |
2807 | 0 | node->next = contents->contents.topic.tir; |
2808 | 0 | contents->contents.topic.tir = node; |
2809 | 0 | contents->contents.topic.tir_count++; |
2810 | 0 | } |
2811 | | |
2812 | | static void add_contents_qqr(wmem_allocator_t* allocator, lbmr_contents_t * contents, const char * queue) |
2813 | 0 | { |
2814 | 0 | qqr_node_t * node = NULL; |
2815 | |
|
2816 | 0 | node = wmem_new(allocator, qqr_node_t); |
2817 | 0 | node->queue = wmem_strdup(allocator, queue); |
2818 | 0 | node->next = contents->contents.queue.qqr; |
2819 | 0 | contents->contents.queue.qqr = node; |
2820 | 0 | contents->contents.queue.qqr_count++; |
2821 | 0 | } |
2822 | | |
2823 | | static void add_contents_qir(wmem_allocator_t* allocator, lbmr_contents_t * contents, const char * queue, const char * topic, uint16_t port) |
2824 | 0 | { |
2825 | 0 | qir_node_t * node = NULL; |
2826 | |
|
2827 | 0 | node = wmem_new(allocator, qir_node_t); |
2828 | 0 | node->queue = wmem_strdup(allocator, queue); |
2829 | 0 | node->topic = wmem_strdup(allocator, topic); |
2830 | 0 | node->port = port; |
2831 | 0 | node->next = contents->contents.queue.qir; |
2832 | 0 | contents->contents.queue.qir = node; |
2833 | 0 | contents->contents.queue.qir_count++; |
2834 | 0 | } |
2835 | | |
2836 | | /*----------------------------------------------------------------------------*/ |
2837 | | /* Topic advertisements by Topic: */ |
2838 | | /* Topic name */ |
2839 | | /* - Source address */ |
2840 | | /* - Source string (including topic index) */ |
2841 | | /*----------------------------------------------------------------------------*/ |
2842 | | |
2843 | | static void lbmr_topic_ads_topic_stats_tree_init(stats_tree * tree) |
2844 | 0 | { |
2845 | 0 | lbmr_stats_tree_handle_topic_ads_topic = stats_tree_create_node(tree, lbmr_stat_tree_name_topic_ads_topic, 0, STAT_DT_INT, true); |
2846 | 0 | } |
2847 | | |
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_) |
2849 | 0 | { |
2850 | 0 | const lbm_lbmr_topic_advertisement_tap_info_t * info = (const lbm_lbmr_topic_advertisement_tap_info_t *) data; |
2851 | 0 | int topic_node; |
2852 | 0 | int source_node; |
2853 | 0 | char * full_source_string; |
2854 | |
|
2855 | 0 | tick_stat_node(tree, lbmr_stat_tree_name_topic_ads_topic, 0, false); |
2856 | 0 | topic_node = tick_stat_node(tree, info->topic, lbmr_stats_tree_handle_topic_ads_topic, true); |
2857 | 0 | source_node = tick_stat_node(tree, address_to_str(pinfo->pool, &pinfo->net_src), topic_node, true); |
2858 | 0 | full_source_string = wmem_strdup_printf(pinfo->pool, "%s[%" PRIu32 "]", info->source, info->topic_index); |
2859 | 0 | tick_stat_node(tree, full_source_string, source_node, true); |
2860 | 0 | return (TAP_PACKET_REDRAW); |
2861 | 0 | } |
2862 | | |
2863 | | /*----------------------------------------------------------------------------*/ |
2864 | | /* Topic advertisements by Source: */ |
2865 | | /* Source address */ |
2866 | | /* - Topic name */ |
2867 | | /* - Source string (including topic index) */ |
2868 | | /*----------------------------------------------------------------------------*/ |
2869 | | |
2870 | | static void lbmr_topic_ads_source_stats_tree_init(stats_tree * tree) |
2871 | 0 | { |
2872 | 0 | lbmr_stats_tree_handle_topic_ads_source = stats_tree_create_node(tree, lbmr_stat_tree_name_topic_ads_source, 0, STAT_DT_INT, true); |
2873 | 0 | } |
2874 | | |
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_) |
2876 | 0 | { |
2877 | 0 | const lbm_lbmr_topic_advertisement_tap_info_t * info = (const lbm_lbmr_topic_advertisement_tap_info_t *) data; |
2878 | 0 | int source_node; |
2879 | 0 | int topic_node; |
2880 | 0 | char * full_source_string; |
2881 | |
|
2882 | 0 | tick_stat_node(tree, lbmr_stat_tree_name_topic_ads_source, 0, false); |
2883 | 0 | source_node = tick_stat_node(tree, address_to_str(pinfo->pool, &pinfo->net_src), lbmr_stats_tree_handle_topic_ads_source, true); |
2884 | 0 | topic_node = tick_stat_node(tree, info->topic, source_node, true); |
2885 | 0 | full_source_string = wmem_strdup_printf(pinfo->pool, "%s[%" PRIu32 "]", info->source, info->topic_index); |
2886 | 0 | tick_stat_node(tree, full_source_string, topic_node, true); |
2887 | 0 | return (TAP_PACKET_REDRAW); |
2888 | 0 | } |
2889 | | |
2890 | | /*----------------------------------------------------------------------------*/ |
2891 | | /* Topic advertisements by Transport: */ |
2892 | | /* Source string */ |
2893 | | /* - Topic name (including topic index) */ |
2894 | | /*----------------------------------------------------------------------------*/ |
2895 | | |
2896 | | static void lbmr_topic_ads_transport_stats_tree_init(stats_tree * tree) |
2897 | 0 | { |
2898 | 0 | lbmr_stats_tree_handle_topic_ads_transport = stats_tree_create_node(tree, lbmr_stat_tree_name_topic_ads_transport, 0, STAT_DT_INT, true); |
2899 | 0 | } |
2900 | | |
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_) |
2902 | 0 | { |
2903 | 0 | const lbm_lbmr_topic_advertisement_tap_info_t * info = (const lbm_lbmr_topic_advertisement_tap_info_t *) data; |
2904 | 0 | int transport_node; |
2905 | 0 | char * full_source_string; |
2906 | |
|
2907 | 0 | tick_stat_node(tree, lbmr_stat_tree_name_topic_ads_transport, 0, false); |
2908 | 0 | transport_node = tick_stat_node(tree, info->source, lbmr_stats_tree_handle_topic_ads_transport, true); |
2909 | 0 | full_source_string = wmem_strdup_printf(pinfo->pool, "%s [%" PRIu32 "]", info->topic, info->topic_index); |
2910 | 0 | tick_stat_node(tree, full_source_string, transport_node, true); |
2911 | 0 | return (TAP_PACKET_REDRAW); |
2912 | 0 | } |
2913 | | |
2914 | | /*----------------------------------------------------------------------------*/ |
2915 | | /* Topic queries by Topic: */ |
2916 | | /* Topic name */ |
2917 | | /* - Receiver address */ |
2918 | | /*----------------------------------------------------------------------------*/ |
2919 | | |
2920 | | static void lbmr_topic_queries_topic_stats_tree_init(stats_tree * tree) |
2921 | 0 | { |
2922 | 0 | lbmr_stats_tree_handle_topic_queries_topic = stats_tree_create_node(tree, lbmr_stat_tree_name_topic_queries_topic, 0, STAT_DT_INT, true); |
2923 | 0 | } |
2924 | | |
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_) |
2926 | 0 | { |
2927 | 0 | const lbm_lbmr_topic_query_tap_info_t * info = (const lbm_lbmr_topic_query_tap_info_t *) data; |
2928 | 0 | int topic_node; |
2929 | |
|
2930 | 0 | tick_stat_node(tree, lbmr_stat_tree_name_topic_queries_topic, 0, false); |
2931 | 0 | topic_node = tick_stat_node(tree, info->topic, lbmr_stats_tree_handle_topic_queries_topic, true); |
2932 | 0 | tick_stat_node(tree, address_to_str(pinfo->pool, &pinfo->net_src), topic_node, true); |
2933 | 0 | return (TAP_PACKET_REDRAW); |
2934 | 0 | } |
2935 | | |
2936 | | /*----------------------------------------------------------------------------*/ |
2937 | | /* Topic queries by Receiver: */ |
2938 | | /* Receiver address */ |
2939 | | /* - Topic name */ |
2940 | | /*----------------------------------------------------------------------------*/ |
2941 | | |
2942 | | static void lbmr_topic_queries_receiver_stats_tree_init(stats_tree * tree) |
2943 | 0 | { |
2944 | 0 | lbmr_stats_tree_handle_topic_queries_receiver = stats_tree_create_node(tree, lbmr_stat_tree_name_topic_queries_receiver, 0, STAT_DT_INT, true); |
2945 | 0 | } |
2946 | | |
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_) |
2948 | 0 | { |
2949 | 0 | const lbm_lbmr_topic_query_tap_info_t * info = (const lbm_lbmr_topic_query_tap_info_t *) data; |
2950 | 0 | int receiver_node; |
2951 | |
|
2952 | 0 | tick_stat_node(tree, lbmr_stat_tree_name_topic_queries_receiver, 0, false); |
2953 | 0 | receiver_node = tick_stat_node(tree, address_to_str(pinfo->pool, &pinfo->net_src), lbmr_stats_tree_handle_topic_queries_receiver, true); |
2954 | 0 | tick_stat_node(tree, info->topic, receiver_node, true); |
2955 | 0 | return (TAP_PACKET_REDRAW); |
2956 | 0 | } |
2957 | | |
2958 | | /*----------------------------------------------------------------------------*/ |
2959 | | /* Topic queries by Pattern: */ |
2960 | | /* Pattern */ |
2961 | | /* - Receiver address */ |
2962 | | /*----------------------------------------------------------------------------*/ |
2963 | | |
2964 | | static void lbmr_topic_queries_pattern_stats_tree_init(stats_tree * tree) |
2965 | 0 | { |
2966 | 0 | lbmr_stats_tree_handle_topic_queries_pattern = stats_tree_create_node(tree, lbmr_stat_tree_name_topic_queries_pattern, 0, STAT_DT_INT, true); |
2967 | 0 | } |
2968 | | |
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_) |
2970 | 0 | { |
2971 | 0 | const lbm_lbmr_pattern_query_tap_info_t * info = (const lbm_lbmr_pattern_query_tap_info_t *) data; |
2972 | 0 | int pattern_node; |
2973 | 0 | char * pattern_str; |
2974 | |
|
2975 | 0 | tick_stat_node(tree, lbmr_stat_tree_name_topic_queries_pattern, 0, false); |
2976 | 0 | pattern_str = wmem_strdup_printf(pinfo->pool, "%s (%s)", |
2977 | 0 | info->pattern, |
2978 | 0 | val_to_str(pinfo->pool, info->type, lbm_wildcard_pattern_type_short, "UNKN[0x%02x]")); |
2979 | 0 | pattern_node = tick_stat_node(tree, pattern_str, lbmr_stats_tree_handle_topic_queries_pattern, true); |
2980 | 0 | tick_stat_node(tree, address_to_str(pinfo->pool, &pinfo->net_src), pattern_node, true); |
2981 | 0 | return (TAP_PACKET_REDRAW); |
2982 | 0 | } |
2983 | | |
2984 | | /*----------------------------------------------------------------------------*/ |
2985 | | /* Topic queries by Pattern: */ |
2986 | | /* Receiver address */ |
2987 | | /* - Patternme */ |
2988 | | /*----------------------------------------------------------------------------*/ |
2989 | | |
2990 | | static void lbmr_topic_queries_pattern_receiver_stats_tree_init(stats_tree * tree) |
2991 | 0 | { |
2992 | 0 | 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); |
2993 | 0 | } |
2994 | | |
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_) |
2996 | 0 | { |
2997 | 0 | const lbm_lbmr_pattern_query_tap_info_t * info = (const lbm_lbmr_pattern_query_tap_info_t *) data; |
2998 | 0 | int receiver_node; |
2999 | 0 | char * pattern_str; |
3000 | |
|
3001 | 0 | tick_stat_node(tree, lbmr_stat_tree_name_topic_queries_pattern_receiver, 0, false); |
3002 | 0 | receiver_node = tick_stat_node(tree, address_to_str(pinfo->pool, &pinfo->net_src), lbmr_stats_tree_handle_topic_queries_pattern_receiver, true); |
3003 | 0 | pattern_str = wmem_strdup_printf(pinfo->pool, "%s (%s)", |
3004 | 0 | info->pattern, |
3005 | 0 | val_to_str(pinfo->pool, info->type, lbm_wildcard_pattern_type_short, "UNKN[0x%02x]")); |
3006 | 0 | tick_stat_node(tree, pattern_str, receiver_node, true); |
3007 | 0 | return (TAP_PACKET_REDRAW); |
3008 | 0 | } |
3009 | | |
3010 | | /*----------------------------------------------------------------------------*/ |
3011 | | /* Queue advertisements by Queue: */ |
3012 | | /* Queue name */ |
3013 | | /* - Source address and port */ |
3014 | | /*----------------------------------------------------------------------------*/ |
3015 | | |
3016 | | static void lbmr_queue_ads_queue_stats_tree_init(stats_tree * tree) |
3017 | 0 | { |
3018 | 0 | lbmr_stats_tree_handle_queue_ads_queue = stats_tree_create_node(tree, lbmr_stat_tree_name_queue_ads_queue, 0, STAT_DT_INT, true); |
3019 | 0 | } |
3020 | | |
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_) |
3022 | 0 | { |
3023 | 0 | const lbm_lbmr_queue_advertisement_tap_info_t * info = (const lbm_lbmr_queue_advertisement_tap_info_t *) data; |
3024 | 0 | int queue_node; |
3025 | 0 | char * str; |
3026 | |
|
3027 | 0 | tick_stat_node(tree, lbmr_stat_tree_name_queue_ads_queue, 0, false); |
3028 | 0 | queue_node = tick_stat_node(tree, info->queue, lbmr_stats_tree_handle_queue_ads_queue, true); |
3029 | 0 | str = wmem_strdup_printf(pinfo->pool, "%s:%" PRIu16, address_to_str(pinfo->pool, &pinfo->net_src), info->port); |
3030 | 0 | tick_stat_node(tree, str, queue_node, true); |
3031 | 0 | return (TAP_PACKET_REDRAW); |
3032 | 0 | } |
3033 | | |
3034 | | /*----------------------------------------------------------------------------*/ |
3035 | | /* Queue advertisements by Source: */ |
3036 | | /* Source address */ |
3037 | | /* - Queue name and port */ |
3038 | | /*----------------------------------------------------------------------------*/ |
3039 | | |
3040 | | static void lbmr_queue_ads_source_stats_tree_init(stats_tree * tree) |
3041 | 0 | { |
3042 | 0 | lbmr_stats_tree_handle_queue_ads_source = stats_tree_create_node(tree, lbmr_stat_tree_name_queue_ads_source, 0, STAT_DT_INT, true); |
3043 | 0 | } |
3044 | | |
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_) |
3046 | 0 | { |
3047 | 0 | const lbm_lbmr_queue_advertisement_tap_info_t * info = (const lbm_lbmr_queue_advertisement_tap_info_t *) data; |
3048 | 0 | int source_node; |
3049 | 0 | char * str; |
3050 | |
|
3051 | 0 | tick_stat_node(tree, lbmr_stat_tree_name_queue_ads_source, 0, false); |
3052 | 0 | source_node = tick_stat_node(tree, address_to_str(pinfo->pool, &pinfo->net_src), lbmr_stats_tree_handle_queue_ads_source, true); |
3053 | 0 | str = wmem_strdup_printf(pinfo->pool, "%s:%" PRIu16, info->queue, info->port); |
3054 | 0 | tick_stat_node(tree, str, source_node, true); |
3055 | 0 | return (TAP_PACKET_REDRAW); |
3056 | 0 | } |
3057 | | |
3058 | | /*----------------------------------------------------------------------------*/ |
3059 | | /* Queue queries by Queue: */ |
3060 | | /* Queue name */ |
3061 | | /* - Receiver address */ |
3062 | | /*----------------------------------------------------------------------------*/ |
3063 | | |
3064 | | static void lbmr_queue_queries_queue_stats_tree_init(stats_tree * tree) |
3065 | 0 | { |
3066 | 0 | lbmr_stats_tree_handle_queue_queries_queue = stats_tree_create_node(tree, lbmr_stat_tree_name_queue_queries_queue, 0, STAT_DT_INT, true); |
3067 | 0 | } |
3068 | | |
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_) |
3070 | 0 | { |
3071 | 0 | const lbm_lbmr_queue_query_tap_info_t * info = (const lbm_lbmr_queue_query_tap_info_t *) data; |
3072 | 0 | int queue_node = 0; |
3073 | |
|
3074 | 0 | tick_stat_node(tree, lbmr_stat_tree_name_queue_queries_queue, 0, false); |
3075 | 0 | queue_node = tick_stat_node(tree, info->queue, lbmr_stats_tree_handle_queue_queries_queue, true); |
3076 | 0 | tick_stat_node(tree, address_to_str(pinfo->pool, &pinfo->net_src), queue_node, true); |
3077 | 0 | return (TAP_PACKET_REDRAW); |
3078 | 0 | } |
3079 | | |
3080 | | /*----------------------------------------------------------------------------*/ |
3081 | | /* Queue queries by Receiver: */ |
3082 | | /* Receiver address */ |
3083 | | /* - Queue name */ |
3084 | | /*----------------------------------------------------------------------------*/ |
3085 | | |
3086 | | static void lbmr_queue_queries_receiver_stats_tree_init(stats_tree * tree) |
3087 | 0 | { |
3088 | 0 | lbmr_stats_tree_handle_queue_queries_receiver = stats_tree_create_node(tree, lbmr_stat_tree_name_queue_queries_receiver, 0, STAT_DT_INT, true); |
3089 | 0 | } |
3090 | | |
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_) |
3092 | 0 | { |
3093 | 0 | const lbm_lbmr_queue_query_tap_info_t * info = (const lbm_lbmr_queue_query_tap_info_t *) data; |
3094 | 0 | int receiver_node; |
3095 | |
|
3096 | 0 | tick_stat_node(tree, lbmr_stat_tree_name_queue_queries_receiver, 0, false); |
3097 | 0 | receiver_node = tick_stat_node(tree, address_to_str(pinfo->pool, &pinfo->net_src), lbmr_stats_tree_handle_queue_queries_receiver, true); |
3098 | 0 | tick_stat_node(tree, info->queue, receiver_node, true); |
3099 | 0 | return (TAP_PACKET_REDRAW); |
3100 | 0 | } |
3101 | | |
3102 | | /*----------------------------------------------------------------------------*/ |
3103 | | /* Dissector functions. */ |
3104 | | /*----------------------------------------------------------------------------*/ |
3105 | | |
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) |
3110 | 0 | { |
3111 | 0 | proto_tree * opt_tree = NULL; |
3112 | 0 | proto_item * opt_item = NULL; |
3113 | 0 | uint8_t opt_len = 0; |
3114 | 0 | static int * const flags[] = |
3115 | 0 | { |
3116 | 0 | &hf_lbmr_tnwg_opt_ctxinst_flags_ignore, |
3117 | 0 | NULL |
3118 | 0 | }; |
3119 | |
|
3120 | 0 | opt_len = tvb_get_uint8(tvb, offset + O_LBMR_TNWG_OPT_CTXINST_T_LEN); |
3121 | 0 | opt_item = proto_tree_add_item(tree, hf_lbmr_tnwg_opt_ctxinst, tvb, offset, opt_len, ENC_NA); |
3122 | 0 | opt_tree = proto_item_add_subtree(opt_item, ett_lbmr_tnwg_ctxinst_opt); |
3123 | 0 | 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 | 0 | 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 | 0 | 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 | 0 | 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 | 0 | return ((int) opt_len); |
3128 | 0 | } |
3129 | | |
3130 | | static int dissect_lbmr_tnwg_address_opt(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree * tree) |
3131 | 0 | { |
3132 | 0 | proto_tree * opt_tree = NULL; |
3133 | 0 | proto_item * opt_item = NULL; |
3134 | 0 | uint8_t opt_len = 0; |
3135 | 0 | static int * const flags[] = |
3136 | 0 | { |
3137 | 0 | &hf_lbmr_tnwg_opt_address_flags_ignore, |
3138 | 0 | NULL |
3139 | 0 | }; |
3140 | |
|
3141 | 0 | opt_len = tvb_get_uint8(tvb, offset + O_LBMR_TNWG_OPT_ADDRESS_T_LEN); |
3142 | 0 | opt_item = proto_tree_add_item(tree, hf_lbmr_tnwg_opt_address, tvb, offset, opt_len, ENC_NA); |
3143 | 0 | opt_tree = proto_item_add_subtree(opt_item, ett_lbmr_tnwg_address_opt); |
3144 | 0 | 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 | 0 | 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 | 0 | 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 | 0 | 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 | 0 | 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 | 0 | 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 | 0 | return ((int)opt_len); |
3151 | 0 | } |
3152 | | |
3153 | | static int dissect_lbmr_tnwg_domain_opt(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree * tree) |
3154 | 0 | { |
3155 | 0 | proto_tree * opt_tree = NULL; |
3156 | 0 | proto_item * opt_item = NULL; |
3157 | 0 | uint8_t opt_len = 0; |
3158 | 0 | static int * const flags[] = |
3159 | 0 | { |
3160 | 0 | &hf_lbmr_tnwg_opt_domain_flags_ignore, |
3161 | 0 | NULL |
3162 | 0 | }; |
3163 | |
|
3164 | 0 | opt_len = tvb_get_uint8(tvb, offset + O_LBMR_TNWG_OPT_DOMAIN_T_LEN); |
3165 | 0 | opt_item = proto_tree_add_item(tree, hf_lbmr_tnwg_opt_domain, tvb, offset, opt_len, ENC_NA); |
3166 | 0 | opt_tree = proto_item_add_subtree(opt_item, ett_lbmr_tnwg_domain_opt); |
3167 | 0 | 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 | 0 | 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 | 0 | 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 | 0 | 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 | 0 | return ((int)opt_len); |
3172 | 0 | } |
3173 | | |
3174 | | static int dissect_lbmr_tnwg_name_opt(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree * tree) |
3175 | 0 | { |
3176 | 0 | proto_tree * opt_tree = NULL; |
3177 | 0 | proto_item * opt_item = NULL; |
3178 | 0 | uint8_t opt_len = 0; |
3179 | 0 | static int * const flags[] = |
3180 | 0 | { |
3181 | 0 | &hf_lbmr_tnwg_opt_name_flags_ignore, |
3182 | 0 | NULL |
3183 | 0 | }; |
3184 | 0 | uint32_t name_len = 0; |
3185 | |
|
3186 | 0 | opt_len = tvb_get_uint8(tvb, offset + O_LBMR_TNWG_OPT_T_LEN); |
3187 | 0 | name_len = opt_len - L_LBMR_TNWG_OPT_T; |
3188 | 0 | opt_item = proto_tree_add_item(tree, hf_lbmr_tnwg_opt_name, tvb, offset, opt_len, ENC_NA); |
3189 | 0 | opt_tree = proto_item_add_subtree(opt_item, ett_lbmr_tnwg_name_opt); |
3190 | 0 | 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 | 0 | 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 | 0 | 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 | 0 | proto_tree_add_item(opt_tree, hf_lbmr_tnwg_opt_name_name, tvb, offset + L_LBMR_TNWG_OPT_T, name_len, ENC_ASCII); |
3194 | 0 | return ((int)opt_len); |
3195 | 0 | } |
3196 | | |
3197 | | static int dissect_lbmr_tnwg_unknown_opt(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree * tree) |
3198 | 0 | { |
3199 | 0 | proto_tree * opt_tree = NULL; |
3200 | 0 | proto_item * opt_item = NULL; |
3201 | 0 | uint8_t opt_len = 0; |
3202 | 0 | static int * const flags[] = |
3203 | 0 | { |
3204 | 0 | &hf_lbmr_tnwg_opt_flags_ignore, |
3205 | 0 | NULL |
3206 | 0 | }; |
3207 | 0 | uint32_t data_len = 0; |
3208 | |
|
3209 | 0 | opt_len = tvb_get_uint8(tvb, offset + O_LBMR_TNWG_OPT_T_LEN); |
3210 | 0 | data_len = opt_len - L_LBMR_TNWG_OPT_T; |
3211 | 0 | opt_item = proto_tree_add_item(tree, hf_lbmr_tnwg_opt, tvb, offset, opt_len, ENC_NA); |
3212 | 0 | opt_tree = proto_item_add_subtree(opt_item, ett_lbmr_tnwg_unknown_opt); |
3213 | 0 | 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 | 0 | 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 | 0 | 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 | 0 | proto_tree_add_item(opt_tree, hf_lbmr_tnwg_opt_data, tvb, offset + L_LBMR_TNWG_OPT_T, data_len, ENC_NA); |
3217 | 0 | return ((int)opt_len); |
3218 | 0 | } |
3219 | | |
3220 | | static int dissect_lbmr_tnwg_opts(tvbuff_t * tvb, int offset, int length, packet_info * pinfo, proto_tree * tree) |
3221 | 0 | { |
3222 | 0 | int len_remaining = length; |
3223 | 0 | int curr_offset = offset; |
3224 | 0 | int dissected_len = 0; |
3225 | 0 | uint8_t type = 0; |
3226 | 0 | int len_used = 0; |
3227 | |
|
3228 | 0 | while (len_remaining >= L_LBMR_TNWG_OPT_T) |
3229 | 0 | { |
3230 | 0 | type = tvb_get_uint8(tvb, curr_offset); |
3231 | 0 | switch (type) |
3232 | 0 | { |
3233 | 0 | case LBMR_TNWG_OPT_CTXINST_TYPE: |
3234 | 0 | dissected_len += dissect_lbmr_tnwg_ctxinst_opt(tvb, curr_offset, pinfo, tree); |
3235 | 0 | break; |
3236 | 0 | case LBMR_TNWG_OPT_ADDRESS_TYPE: |
3237 | 0 | dissected_len += dissect_lbmr_tnwg_address_opt(tvb, curr_offset, pinfo, tree); |
3238 | 0 | break; |
3239 | 0 | case LBMR_TNWG_OPT_DOMAIN_TYPE: |
3240 | 0 | dissected_len += dissect_lbmr_tnwg_domain_opt(tvb, curr_offset, pinfo, tree); |
3241 | 0 | break; |
3242 | 0 | case LBMR_TNWG_OPT_NAME_TYPE: |
3243 | 0 | dissected_len += dissect_lbmr_tnwg_name_opt(tvb, curr_offset, pinfo, tree); |
3244 | 0 | break; |
3245 | 0 | default: |
3246 | 0 | dissected_len += dissect_lbmr_tnwg_unknown_opt(tvb, curr_offset, pinfo, tree); |
3247 | 0 | break; |
3248 | 0 | } |
3249 | 0 | len_remaining -= dissected_len; |
3250 | 0 | len_used += dissected_len; |
3251 | 0 | curr_offset += dissected_len; |
3252 | 0 | } |
3253 | 0 | return (len_used); |
3254 | 0 | } |
3255 | | |
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) |
3260 | 0 | { |
3261 | 0 | proto_tree * rec_tree = NULL; |
3262 | 0 | proto_item * rec_item = NULL; |
3263 | 0 | uint16_t rec_len = 0; |
3264 | 0 | int string_len = 0; |
3265 | 0 | static int * const flags[] = |
3266 | 0 | { |
3267 | 0 | &hf_lbmr_tnwg_interest_rec_flags_pattern, |
3268 | 0 | &hf_lbmr_tnwg_interest_rec_flags_cancel, |
3269 | 0 | &hf_lbmr_tnwg_interest_rec_flags_refresh, |
3270 | 0 | NULL |
3271 | 0 | }; |
3272 | |
|
3273 | 0 | rec_len = tvb_get_ntohs(tvb, offset + O_LBMR_TNWG_INTEREST_REC_T_LEN); |
3274 | |
|
3275 | 0 | rec_item = proto_tree_add_item(tree, hf_lbmr_tnwg_interest_rec, tvb, offset, rec_len, ENC_NA); |
3276 | 0 | rec_tree = proto_item_add_subtree(rec_item, ett_lbmr_tnwg_interest_rec); |
3277 | 0 | 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 | 0 | if (rec_len < L_LBMR_TNWG_INTEREST_REC_T) |
3279 | 0 | { |
3280 | | /* XXX - report an error */ |
3281 | 0 | return ((int)rec_len); |
3282 | 0 | } |
3283 | 0 | 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 | 0 | 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 | 0 | 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 | 0 | string_len = rec_len - L_LBMR_TNWG_INTEREST_REC_T; |
3287 | 0 | 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 | 0 | return ((int)rec_len); |
3289 | 0 | } |
3290 | | |
3291 | | static int dissect_lbmr_tnwg_interest(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree * tree) |
3292 | 0 | { |
3293 | 0 | proto_tree * int_tree = NULL; |
3294 | 0 | proto_item * int_item = NULL; |
3295 | 0 | uint16_t rec_count = 0; |
3296 | 0 | int curr_offset = 0; |
3297 | 0 | int len = 0; |
3298 | 0 | int len_remaining = 0; |
3299 | 0 | int len_dissected = 0; |
3300 | |
|
3301 | 0 | len_remaining = tvb_get_ntohs(tvb, offset + O_LBMR_TNWG_INTEREST_T_LEN); |
3302 | 0 | rec_count = tvb_get_ntohs(tvb, offset + O_LBMR_TNWG_INTEREST_T_COUNT); |
3303 | 0 | int_item = proto_tree_add_item(tree, hf_lbmr_tnwg_interest, tvb, offset, len_remaining, ENC_NA); |
3304 | 0 | int_tree = proto_item_add_subtree(int_item, ett_lbmr_tnwg_interest); |
3305 | 0 | 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 | 0 | 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); |
3307 | |
|
3308 | 0 | curr_offset = offset + L_LBMR_TNWG_INTEREST_T; |
3309 | 0 | len = L_LBMR_TNWG_INTEREST_T; |
3310 | 0 | while (rec_count > 0) |
3311 | 0 | { |
3312 | 0 | len_dissected = dissect_lbmr_tnwg_interest_rec(tvb, curr_offset, pinfo, int_tree); |
3313 | 0 | curr_offset += len_dissected; |
3314 | 0 | len += len_dissected; |
3315 | 0 | rec_count--; |
3316 | 0 | } |
3317 | 0 | return (len); |
3318 | 0 | } |
3319 | | |
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) |
3324 | 0 | { |
3325 | 0 | proto_tree * ctxinfo_tree = NULL; |
3326 | 0 | proto_item * ctxinfo_item = NULL; |
3327 | 0 | static int * const flags1[] = |
3328 | 0 | { |
3329 | 0 | &hf_lbmr_tnwg_ctxinfo_flags1_query, |
3330 | 0 | &hf_lbmr_tnwg_ctxinfo_flags1_tnwg_src, |
3331 | 0 | &hf_lbmr_tnwg_ctxinfo_flags1_tnwg_rcv, |
3332 | 0 | &hf_lbmr_tnwg_ctxinfo_flags1_proxy, |
3333 | 0 | NULL |
3334 | 0 | }; |
3335 | 0 | uint16_t reclen = 0; |
3336 | 0 | uint16_t len_remaining = 0; |
3337 | 0 | int len_used = 0; |
3338 | |
|
3339 | 0 | reclen = tvb_get_ntohs(tvb, offset + O_LBMR_TNWG_CTXINFO_T_LEN); |
3340 | 0 | len_remaining = reclen; |
3341 | 0 | ctxinfo_item = proto_tree_add_item(tree, hf_lbmr_tnwg_ctxinfo, tvb, offset, (int)reclen, ENC_NA); |
3342 | 0 | ctxinfo_tree = proto_item_add_subtree(ctxinfo_item, ett_lbmr_tnwg_ctxinfo); |
3343 | 0 | 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 | 0 | 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 | 0 | 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 | 0 | 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 | 0 | 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 | 0 | offset += L_LBMR_TNWG_CTXINFO_T; |
3349 | 0 | len_remaining -= L_LBMR_TNWG_CTXINFO_T; |
3350 | 0 | len_used = L_LBMR_TNWG_CTXINFO_T; |
3351 | 0 | if (len_remaining >= L_LBMR_TNWG_OPT_T) |
3352 | 0 | { |
3353 | 0 | len_used += dissect_lbmr_tnwg_opts(tvb, offset, len_remaining, pinfo, ctxinfo_tree); |
3354 | 0 | } |
3355 | 0 | return (len_used); |
3356 | 0 | } |
3357 | | |
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) |
3362 | 0 | { |
3363 | 0 | proto_tree * trreq_tree = NULL; |
3364 | 0 | proto_item * trreq_item = NULL; |
3365 | 0 | uint16_t reclen = 0; |
3366 | 0 | uint16_t len_remaining = 0; |
3367 | 0 | int len_used = 0; |
3368 | |
|
3369 | 0 | reclen = tvb_get_ntohs(tvb, offset + O_LBMR_TNWG_TRREQ_T_LEN); |
3370 | 0 | len_remaining = reclen; |
3371 | |
|
3372 | 0 | trreq_item = proto_tree_add_item(tree, hf_lbmr_tnwg_trreq, tvb, offset, (int)reclen, ENC_NA); |
3373 | 0 | trreq_tree = proto_item_add_subtree(trreq_item, ett_lbmr_tnwg_trreq); |
3374 | 0 | 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); |
3375 | |
|
3376 | 0 | offset += L_LBMR_TNWG_TRREQ_T; |
3377 | 0 | len_remaining -= L_LBMR_TNWG_TRREQ_T; |
3378 | 0 | len_used = L_LBMR_TNWG_TRREQ_T; |
3379 | 0 | if (len_remaining >= L_LBMR_TNWG_OPT_T) |
3380 | 0 | { |
3381 | 0 | len_used += dissect_lbmr_tnwg_opts(tvb, offset, len_remaining, pinfo, trreq_tree); |
3382 | 0 | } |
3383 | 0 | return (len_used); |
3384 | 0 | } |
3385 | | |
3386 | | /*----------------------------------------------------------------------------*/ |
3387 | | /* LBMR TNWG dissection functions. */ |
3388 | | /*----------------------------------------------------------------------------*/ |
3389 | | static int dissect_lbmr_tnwg(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree * tree) |
3390 | 0 | { |
3391 | 0 | uint16_t type = 0; |
3392 | 0 | int curr_offset = 0; |
3393 | 0 | int len_dissected = 0; |
3394 | 0 | proto_item * type_item = NULL; |
3395 | |
|
3396 | 0 | type = tvb_get_ntohs(tvb, offset + O_LBMR_TNWG_T_TYPE); |
3397 | 0 | 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 | 0 | 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 | 0 | 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 | 0 | len_dissected = L_LBMR_TNWG_T; |
3401 | 0 | curr_offset = offset + L_LBMR_TNWG_T; |
3402 | 0 | switch (type) |
3403 | 0 | { |
3404 | 0 | case LBMR_TNWG_TYPE_INTEREST: |
3405 | 0 | len_dissected += dissect_lbmr_tnwg_interest(tvb, curr_offset, pinfo, tree); |
3406 | 0 | break; |
3407 | 0 | case LBMR_TNWG_TYPE_CTXINFO: |
3408 | 0 | len_dissected += dissect_lbmr_tnwg_ctxinfo(tvb, curr_offset, pinfo, tree); |
3409 | 0 | break; |
3410 | 0 | case LBMR_TNWG_TYPE_TRREQ: |
3411 | 0 | len_dissected += dissect_lbmr_tnwg_trreq(tvb, curr_offset, pinfo, tree); |
3412 | 0 | break; |
3413 | 0 | default: |
3414 | 0 | expert_add_info_format(pinfo, type_item, &ei_lbmr_analysis_invalid_value, "Unknown LBMR TNWG type 0x%04x", type); |
3415 | 0 | break; |
3416 | 0 | } |
3417 | 0 | return ((int)len_dissected); |
3418 | 0 | } |
3419 | | |
3420 | | /*----------------------------------------------------------------------------*/ |
3421 | | /* LBMR Topic Management dissection functions. */ |
3422 | | /*----------------------------------------------------------------------------*/ |
3423 | | static int dissect_lbmr_tmr(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree * tree) |
3424 | 0 | { |
3425 | 0 | unsigned namelen = 0; |
3426 | 0 | int name_offset = 0; |
3427 | 0 | char * name = NULL; |
3428 | 0 | proto_item * ti = NULL; |
3429 | 0 | proto_tree * tinfo_tree = NULL; |
3430 | 0 | static int * const flags[] = |
3431 | 0 | { |
3432 | 0 | &hf_lbmr_tmr_flags_response, |
3433 | 0 | &hf_lbmr_tmr_flags_wildcard_pcre, |
3434 | 0 | &hf_lbmr_tmr_flags_wildcard_regex, |
3435 | 0 | NULL |
3436 | 0 | }; |
3437 | 0 | uint16_t tmr_len; |
3438 | 0 | uint8_t tmr_type; |
3439 | 0 | uint8_t tmr_flags; |
3440 | 0 | const char * info_string = ""; |
3441 | |
|
3442 | 0 | tmr_len = tvb_get_ntohs(tvb, offset + O_LBMR_TMR_T_LEN); |
3443 | 0 | tmr_type = tvb_get_uint8(tvb, offset + O_LBMR_TMR_T_TYPE); |
3444 | 0 | tmr_flags = tvb_get_uint8(tvb, offset + O_LBMR_TMR_T_FLAGS); |
3445 | 0 | name_offset = offset + L_LBMR_TMR_T; |
3446 | |
|
3447 | 0 | name = (char*)tvb_get_stringz_enc(pinfo->pool, tvb, name_offset, &namelen, ENC_ASCII); |
3448 | |
|
3449 | 0 | switch (tmr_type) |
3450 | 0 | { |
3451 | 0 | case LBMR_TMR_LEAVE_TOPIC: |
3452 | 0 | default: |
3453 | 0 | break; |
3454 | 0 | case LBMR_TMR_TOPIC_USE: |
3455 | 0 | if (tmr_flags & LBMR_TMR_FLAG_RESPONSE) |
3456 | 0 | { |
3457 | 0 | info_string = " Response"; |
3458 | 0 | } |
3459 | 0 | else |
3460 | 0 | { |
3461 | 0 | info_string = " Query"; |
3462 | 0 | } |
3463 | 0 | break; |
3464 | 0 | } |
3465 | 0 | ti = proto_tree_add_none_format(tree, hf_lbmr_tmr, tvb, offset, tmr_len, "%s: %s%s, Length %" PRIu16, |
3466 | 0 | name, val_to_str(pinfo->pool, tmr_type, lbmr_tmr_type, "Unknown (0x%02x)"), info_string, tmr_len); |
3467 | 0 | tinfo_tree = proto_item_add_subtree(ti, ett_lbmr_tmr); |
3468 | 0 | 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 | 0 | 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 | 0 | 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 | 0 | proto_tree_add_item(tinfo_tree, hf_lbmr_tmr_name, tvb, name_offset, namelen, ENC_ASCII); |
3472 | 0 | return ((int) tmr_len); |
3473 | 0 | } |
3474 | | |
3475 | | static int dissect_lbmr_tmb(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree * tree) |
3476 | 0 | { |
3477 | 0 | int tmr_len = 0; |
3478 | 0 | proto_tree * tmb_tree = NULL; |
3479 | 0 | proto_item * ti = NULL; |
3480 | 0 | proto_tree * tmr_tree = NULL; |
3481 | 0 | proto_item * tmr_ti = NULL; |
3482 | 0 | int tmr_count = 0; |
3483 | 0 | uint16_t tmrs; |
3484 | 0 | int len_dissected; |
3485 | |
|
3486 | 0 | tmrs = tvb_get_ntohs(tvb, offset + O_LBMR_TMB_T_TMRS); |
3487 | 0 | ti = proto_tree_add_item(tree, hf_lbmr_tmb, tvb, offset, -1, ENC_NA); |
3488 | 0 | tmb_tree = proto_item_add_subtree(ti, ett_lbmr_tmb); |
3489 | 0 | 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 | 0 | 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 | 0 | tmr_ti = proto_tree_add_item(tmb_tree, hf_lbmr_tmb_tmr_list, tvb, offset + L_LBMR_TMB_T, -1, ENC_NA); |
3492 | 0 | tmr_tree = proto_item_add_subtree(tmr_ti, ett_lbmr_tmrs); |
3493 | |
|
3494 | 0 | offset += L_LBMR_TMB_T; |
3495 | 0 | len_dissected = L_LBMR_TMB_T; |
3496 | 0 | while (tmr_count < tmrs) |
3497 | 0 | { |
3498 | 0 | tmr_len = dissect_lbmr_tmr(tvb, offset, pinfo, tmr_tree); |
3499 | 0 | len_dissected += tmr_len; |
3500 | 0 | offset += tmr_len; |
3501 | 0 | tmr_count++; |
3502 | 0 | } |
3503 | 0 | return (len_dissected); |
3504 | 0 | } |
3505 | | |
3506 | | /*----------------------------------------------------------------------------*/ |
3507 | | /* LBMR Topic Query Record dissection functions. */ |
3508 | | /*----------------------------------------------------------------------------*/ |
3509 | | static int dissect_lbmr_tqr(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree * tree, bool wildcard_tqr, lbmr_contents_t * contents) |
3510 | 0 | { |
3511 | 0 | unsigned reclen; |
3512 | 0 | const char * name = NULL; |
3513 | 0 | uint32_t pattern_type; |
3514 | 0 | proto_item * tqr_item = NULL; |
3515 | 0 | proto_tree * tqr_tree = NULL; |
3516 | 0 | int name_offset = offset; |
3517 | |
|
3518 | 0 | if (wildcard_tqr) |
3519 | 0 | { |
3520 | 0 | name_offset++; |
3521 | 0 | reclen = tvb_strsize(tvb, name_offset) + 1; |
3522 | 0 | tqr_item = proto_tree_add_none_format(tree, hf_lbmr_tqr, tvb, offset, reclen, "Wildcard TQR"); |
3523 | 0 | } |
3524 | 0 | else |
3525 | 0 | { |
3526 | 0 | reclen = tvb_strsize(tvb, name_offset); |
3527 | 0 | tqr_item = proto_tree_add_item(tree, hf_lbmr_tqr, tvb, offset, reclen, ENC_NA); |
3528 | 0 | } |
3529 | 0 | tqr_tree = proto_item_add_subtree(tqr_item, ett_lbmr_tqr); |
3530 | 0 | if (wildcard_tqr) |
3531 | 0 | { |
3532 | 0 | proto_tree_add_item_ret_uint(tqr_tree, hf_lbmr_tqr_pattern_type, tvb, offset, 1, ENC_BIG_ENDIAN, &pattern_type); |
3533 | 0 | offset++; |
3534 | 0 | proto_tree_add_item_ret_string(tqr_tree, hf_lbmr_tqr_pattern, tvb, offset, -1, ENC_ASCII, pinfo->pool, (const uint8_t **)&name); |
3535 | 0 | add_contents_wctqr(pinfo->pool, contents, (unsigned char)pattern_type, name); |
3536 | 0 | } |
3537 | 0 | else |
3538 | 0 | { |
3539 | 0 | proto_tree_add_item_ret_string(tqr_tree, hf_lbmr_tqr_name, tvb, offset, -1, ENC_ASCII, pinfo->pool, (const uint8_t **)&name); |
3540 | 0 | add_contents_tqr(pinfo->pool, contents, name); |
3541 | 0 | } |
3542 | 0 | proto_item_append_text(tqr_item, ": %s", name); |
3543 | 0 | return (reclen); |
3544 | 0 | } |
3545 | | |
3546 | | static int dissect_lbmr_tqrs(tvbuff_t * tvb, int offset, uint8_t tqr_count, packet_info * pinfo, proto_tree * tree, |
3547 | | bool wildcard_tqr, lbmr_contents_t * contents) |
3548 | 0 | { |
3549 | 0 | int start_offset = 0; |
3550 | 0 | int tqr_len = 0; |
3551 | 0 | proto_tree * tqrs_tree = NULL; |
3552 | 0 | proto_item * ti = NULL; |
3553 | 0 | int len = 0; |
3554 | |
|
3555 | 0 | start_offset = offset; |
3556 | 0 | if (wildcard_tqr) |
3557 | 0 | { |
3558 | 0 | ti = proto_tree_add_none_format(tree, hf_lbmr_tqrs, tvb, start_offset, -1, "Wildcard TQRs"); |
3559 | 0 | } |
3560 | 0 | else |
3561 | 0 | { |
3562 | 0 | ti = proto_tree_add_none_format(tree, hf_lbmr_tqrs, tvb, start_offset, -1, "TQRs"); |
3563 | 0 | } |
3564 | 0 | tqrs_tree = proto_item_add_subtree(ti, ett_lbmr_tqrs); |
3565 | 0 | while (tqr_count-- > 0) |
3566 | 0 | { |
3567 | 0 | tqr_len = dissect_lbmr_tqr(tvb, offset, pinfo, tqrs_tree, wildcard_tqr, contents); |
3568 | 0 | len += tqr_len; |
3569 | 0 | offset += tqr_len; |
3570 | 0 | } |
3571 | 0 | proto_item_set_len(ti, len); |
3572 | 0 | return (len); |
3573 | 0 | } |
3574 | | |
3575 | | /*----------------------------------------------------------------------------*/ |
3576 | | /* LBMR Topic Information Record dissection functions. */ |
3577 | | /*----------------------------------------------------------------------------*/ |
3578 | | static int dissect_lbmr_tir_options(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree * tree) |
3579 | 0 | { |
3580 | 0 | uint8_t opt_type = 0; |
3581 | 0 | uint8_t opt_len = 0; |
3582 | 0 | int opt_total_len = 0; |
3583 | 0 | int opt_remaining_len = 0; |
3584 | 0 | int curr_offset = offset; |
3585 | 0 | proto_item * oi = NULL; |
3586 | 0 | proto_tree * otree = NULL; |
3587 | 0 | proto_item * optlen_item = NULL; |
3588 | 0 | proto_tree * optlen_tree = NULL; |
3589 | 0 | static int * const opt_ume_flags[] = |
3590 | 0 | { |
3591 | 0 | &hf_lbmr_topt_ume_flags_ignore, |
3592 | 0 | &hf_lbmr_topt_ume_flags_latejoin, |
3593 | 0 | &hf_lbmr_topt_ume_flags_store, |
3594 | 0 | &hf_lbmr_topt_ume_flags_qccap, |
3595 | 0 | &hf_lbmr_topt_ume_flags_acktosrc, |
3596 | 0 | NULL |
3597 | 0 | }; |
3598 | 0 | static int * const opt_ume_store_flags[] = |
3599 | 0 | { |
3600 | 0 | &hf_lbmr_topt_ume_store_flags_ignore, |
3601 | 0 | NULL |
3602 | 0 | }; |
3603 | 0 | static int * const opt_ume_store_group_flags[] = |
3604 | 0 | { |
3605 | 0 | &hf_lbmr_topt_ume_store_group_flags_ignore, |
3606 | 0 | NULL |
3607 | 0 | }; |
3608 | 0 | static int * const opt_latejoin_flags[] = |
3609 | 0 | { |
3610 | 0 | &hf_lbmr_topt_latejoin_flags_ignore, |
3611 | 0 | &hf_lbmr_topt_latejoin_flags_acktosrc, |
3612 | 0 | NULL |
3613 | 0 | }; |
3614 | 0 | static int * const opt_umq_rcridx_flags[] = |
3615 | 0 | { |
3616 | 0 | &hf_lbmr_topt_umq_rcridx_flags_ignore, |
3617 | 0 | NULL |
3618 | 0 | }; |
3619 | 0 | static int * const opt_umq_qinfo_flags[] = |
3620 | 0 | { |
3621 | 0 | &hf_lbmr_topt_umq_qinfo_flags_ignore, |
3622 | 0 | &hf_lbmr_topt_umq_qinfo_flags_queue, |
3623 | 0 | &hf_lbmr_topt_umq_qinfo_flags_rcvlisten, |
3624 | 0 | &hf_lbmr_topt_umq_qinfo_flags_control, |
3625 | 0 | &hf_lbmr_topt_umq_qinfo_flags_srcrcvlisten, |
3626 | 0 | &hf_lbmr_topt_umq_qinfo_flags_participants_only, |
3627 | 0 | NULL |
3628 | 0 | }; |
3629 | 0 | static int * const opt_cost_flags[] = |
3630 | 0 | { |
3631 | 0 | &hf_lbmr_topt_cost_flags_ignore, |
3632 | 0 | NULL |
3633 | 0 | }; |
3634 | 0 | static int * const opt_otid_flags[] = |
3635 | 0 | { |
3636 | 0 | &hf_lbmr_topt_otid_flags_ignore, |
3637 | 0 | NULL |
3638 | 0 | }; |
3639 | 0 | static int * const opt_ctxinst_flags[] = |
3640 | 0 | { |
3641 | 0 | &hf_lbmr_topt_ctxinst_flags_ignore, |
3642 | 0 | NULL |
3643 | 0 | }; |
3644 | 0 | static int * const opt_ctxinsts_flags[] = |
3645 | 0 | { |
3646 | 0 | &hf_lbmr_topt_ctxinsts_flags_ignore, |
3647 | 0 | NULL |
3648 | 0 | }; |
3649 | 0 | static int * const opt_ulb_flags[] = |
3650 | 0 | { |
3651 | 0 | &hf_lbmr_topt_ulb_flags_ignore, |
3652 | 0 | NULL |
3653 | 0 | }; |
3654 | 0 | static int * const opt_ctxinstq_flags[] = |
3655 | 0 | { |
3656 | 0 | &hf_lbmr_topt_ctxinstq_flags_ignore, |
3657 | 0 | NULL |
3658 | 0 | }; |
3659 | 0 | static int * const opt_domain_id_flags[] = |
3660 | 0 | { |
3661 | 0 | &hf_lbmr_topt_domain_id_flags_ignore, |
3662 | 0 | NULL |
3663 | 0 | }; |
3664 | 0 | static int * const opt_exfunc_flags[] = |
3665 | 0 | { |
3666 | 0 | &hf_lbmr_topt_exfunc_flags_ignore, |
3667 | 0 | NULL |
3668 | 0 | }; |
3669 | 0 | static int * const opt_exfunc_functionality_flags[] = |
3670 | 0 | { |
3671 | 0 | &hf_lbmr_topt_exfunc_functionality_flags_ulb, |
3672 | 0 | &hf_lbmr_topt_exfunc_functionality_flags_umq, |
3673 | 0 | &hf_lbmr_topt_exfunc_functionality_flags_ume, |
3674 | 0 | &hf_lbmr_topt_exfunc_functionality_flags_lj, |
3675 | 0 | NULL |
3676 | 0 | }; |
3677 | 0 | int len = 0; |
3678 | |
|
3679 | 0 | opt_total_len = (int)tvb_get_ntohs(tvb, curr_offset + O_LBMR_TOPIC_OPT_LEN_T_TOTAL_LEN); |
3680 | 0 | opt_remaining_len = opt_total_len; |
3681 | |
|
3682 | 0 | oi = proto_tree_add_none_format(tree, hf_lbmr_topts, tvb, curr_offset, opt_total_len, "Options: %d bytes", opt_total_len); |
3683 | 0 | otree = proto_item_add_subtree(oi, ett_lbmr_topts); |
3684 | 0 | optlen_item = proto_tree_add_item(otree, hf_lbmr_topt_len, tvb, curr_offset, L_LBMR_TOPIC_OPT_LEN_T, ENC_NA); |
3685 | 0 | optlen_tree = proto_item_add_subtree(optlen_item, ett_lbmr_topt_len); |
3686 | 0 | 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); |
3687 | 0 | 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); |
3688 | 0 | 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); |
3689 | 0 | len = L_LBMR_TOPIC_OPT_LEN_T; |
3690 | 0 | curr_offset += L_LBMR_TOPIC_OPT_LEN_T; |
3691 | 0 | opt_remaining_len -= L_LBMR_TOPIC_OPT_LEN_T; |
3692 | 0 | while (opt_remaining_len > 0) |
3693 | 0 | { |
3694 | 0 | proto_item * opt_item = NULL; |
3695 | 0 | proto_tree * opt_tree = NULL; |
3696 | 0 | proto_item * ei_item = NULL; |
3697 | 0 | int qname_len; |
3698 | |
|
3699 | 0 | opt_type = tvb_get_uint8(tvb, curr_offset + O_LBMR_TOPIC_OPT_T_TYPE); |
3700 | 0 | opt_len = tvb_get_uint8(tvb, curr_offset + O_LBMR_TOPIC_OPT_T_LEN); |
3701 | 0 | if (opt_len == 0) |
3702 | 0 | { |
3703 | 0 | opt_item = proto_tree_add_item(otree, hf_lbmr_topt_unknown, tvb, curr_offset + O_LBMR_TOPIC_OPT_T_TYPE, opt_len, ENC_NA); |
3704 | 0 | opt_tree = proto_item_add_subtree(opt_item, ett_lbmr_topt_unknown); |
3705 | 0 | 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); |
3706 | 0 | 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); |
3707 | 0 | 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); |
3708 | 0 | if (((int) opt_len) > L_LBMR_TOPIC_OPT_T) |
3709 | 0 | { |
3710 | 0 | 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); |
3711 | 0 | } |
3712 | 0 | expert_add_info(pinfo, ei_item, &ei_lbmr_analysis_zero_len_option); |
3713 | 0 | return (len); |
3714 | 0 | } |
3715 | 0 | switch (opt_type) |
3716 | 0 | { |
3717 | 0 | case LBMR_TOPIC_OPT_UME_TYPE: |
3718 | 0 | opt_item = proto_tree_add_item(otree, hf_lbmr_topt_ume, tvb, curr_offset + O_LBMR_TOPIC_OPT_T_TYPE, opt_len, ENC_NA); |
3719 | 0 | opt_tree = proto_item_add_subtree(opt_item, ett_lbmr_topt_ume); |
3720 | 0 | 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); |
3721 | 0 | 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); |
3722 | 0 | 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); |
3723 | 0 | 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); |
3724 | 0 | 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); |
3725 | 0 | 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); |
3726 | 0 | 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); |
3727 | 0 | 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); |
3728 | 0 | 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); |
3729 | 0 | 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); |
3730 | 0 | 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); |
3731 | 0 | break; |
3732 | 0 | case LBMR_TOPIC_OPT_UME_STORE_TYPE: |
3733 | 0 | 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); |
3734 | 0 | opt_tree = proto_item_add_subtree(opt_item, ett_lbmr_topt_ume_store); |
3735 | 0 | 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); |
3736 | 0 | 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); |
3737 | 0 | 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); |
3738 | 0 | 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); |
3739 | 0 | 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); |
3740 | 0 | 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); |
3741 | 0 | 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); |
3742 | 0 | 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); |
3743 | 0 | break; |
3744 | 0 | case LBMR_TOPIC_OPT_UME_STORE_GROUP_TYPE: |
3745 | 0 | 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); |
3746 | 0 | opt_tree = proto_item_add_subtree(opt_item, ett_lbmr_topt_ume_store_group); |
3747 | 0 | 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); |
3748 | 0 | 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); |
3749 | 0 | 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); |
3750 | 0 | 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); |
3751 | 0 | 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); |
3752 | 0 | 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); |
3753 | 0 | break; |
3754 | 0 | case LBMR_TOPIC_OPT_LATEJOIN_TYPE: |
3755 | 0 | opt_item = proto_tree_add_item(otree, hf_lbmr_topt_latejoin, tvb, curr_offset + O_LBMR_TOPIC_OPT_T_TYPE, opt_len, ENC_NA); |
3756 | 0 | opt_tree = proto_item_add_subtree(opt_item, ett_lbmr_topt_latejoin); |
3757 | 0 | 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); |
3758 | 0 | 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); |
3759 | 0 | 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); |
3760 | 0 | 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); |
3761 | 0 | 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); |
3762 | 0 | 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); |
3763 | 0 | 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); |
3764 | 0 | 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); |
3765 | 0 | 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); |
3766 | 0 | break; |
3767 | 0 | case LBMR_TOPIC_OPT_UMQ_RCRIDX_TYPE: |
3768 | 0 | 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); |
3769 | 0 | opt_tree = proto_item_add_subtree(opt_item, ett_lbmr_topt_umq_rcridx); |
3770 | 0 | 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); |
3771 | 0 | 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); |
3772 | 0 | 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); |
3773 | 0 | 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); |
3774 | 0 | break; |
3775 | 0 | case LBMR_TOPIC_OPT_UMQ_QINFO_TYPE: |
3776 | 0 | 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); |
3777 | 0 | opt_tree = proto_item_add_subtree(opt_item, ett_lbmr_topt_umq_qinfo); |
3778 | 0 | 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); |
3779 | 0 | 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); |
3780 | 0 | qname_len = opt_len - L_LBMR_TOPIC_OPT_T; |
3781 | 0 | 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); |
3782 | 0 | proto_tree_add_item(opt_tree, hf_lbmr_topt_umq_qinfo_queue, tvb, curr_offset + L_LBMR_TOPIC_OPT_T, qname_len, ENC_ASCII); |
3783 | 0 | break; |
3784 | 0 | case LBMR_TOPIC_OPT_COST_TYPE: |
3785 | 0 | opt_item = proto_tree_add_item(otree, hf_lbmr_topt_cost, tvb, curr_offset + O_LBMR_TOPIC_OPT_T_TYPE, opt_len, ENC_NA); |
3786 | 0 | opt_tree = proto_item_add_subtree(opt_item, ett_lbmr_topt_cost); |
3787 | 0 | 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); |
3788 | 0 | 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); |
3789 | 0 | 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); |
3790 | 0 | 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); |
3791 | 0 | 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); |
3792 | 0 | break; |
3793 | 0 | case LBMR_TOPIC_OPT_OTID_TYPE: |
3794 | 0 | opt_item = proto_tree_add_item(otree, hf_lbmr_topt_otid, tvb, curr_offset + O_LBMR_TOPIC_OPT_T_TYPE, opt_len, ENC_NA); |
3795 | 0 | opt_tree = proto_item_add_subtree(opt_item, ett_lbmr_topt_otid); |
3796 | 0 | 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); |
3797 | 0 | 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); |
3798 | 0 | 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); |
3799 | 0 | 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); |
3800 | 0 | break; |
3801 | 0 | case LBMR_TOPIC_OPT_CTXINST_TYPE: |
3802 | 0 | opt_item = proto_tree_add_item(otree, hf_lbmr_topt_ctxinst, tvb, curr_offset + O_LBMR_TOPIC_OPT_T_TYPE, opt_len, ENC_NA); |
3803 | 0 | opt_tree = proto_item_add_subtree(opt_item, ett_lbmr_topt_ctxinst); |
3804 | 0 | 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); |
3805 | 0 | 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); |
3806 | 0 | 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); |
3807 | 0 | 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); |
3808 | 0 | 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); |
3809 | 0 | break; |
3810 | 0 | case LBMR_TOPIC_OPT_CTXINSTS_TYPE: |
3811 | 0 | opt_item = proto_tree_add_item(otree, hf_lbmr_topt_ctxinsts, tvb, curr_offset + O_LBMR_TOPIC_OPT_T_TYPE, opt_len, ENC_NA); |
3812 | 0 | opt_tree = proto_item_add_subtree(opt_item, ett_lbmr_topt_ctxinsts); |
3813 | 0 | 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); |
3814 | 0 | 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); |
3815 | 0 | 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); |
3816 | 0 | 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); |
3817 | 0 | 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); |
3818 | 0 | break; |
3819 | 0 | case LBMR_TOPIC_OPT_ULB_TYPE: |
3820 | 0 | opt_item = proto_tree_add_item(otree, hf_lbmr_topt_ulb, tvb, curr_offset + O_LBMR_TOPIC_OPT_T_TYPE, opt_len, ENC_NA); |
3821 | 0 | opt_tree = proto_item_add_subtree(opt_item, ett_lbmr_topt_ulb); |
3822 | 0 | 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); |
3823 | 0 | 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); |
3824 | 0 | 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); |
3825 | 0 | 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); |
3826 | 0 | 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); |
3827 | 0 | 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); |
3828 | 0 | 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); |
3829 | 0 | 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); |
3830 | 0 | 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); |
3831 | 0 | break; |
3832 | 0 | case LBMR_TOPIC_OPT_CTXINSTQ_TYPE: |
3833 | 0 | opt_item = proto_tree_add_item(otree, hf_lbmr_topt_ctxinstq, tvb, curr_offset + O_LBMR_TOPIC_OPT_T_TYPE, opt_len, ENC_NA); |
3834 | 0 | opt_tree = proto_item_add_subtree(opt_item, ett_lbmr_topt_ctxinstq); |
3835 | 0 | 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); |
3836 | 0 | 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); |
3837 | 0 | 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); |
3838 | 0 | 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); |
3839 | 0 | 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); |
3840 | 0 | break; |
3841 | 0 | case LBMR_TOPIC_OPT_DOMAIN_ID_TYPE: |
3842 | 0 | 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); |
3843 | 0 | opt_tree = proto_item_add_subtree(opt_item, ett_lbmr_topt_domain_id); |
3844 | 0 | 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); |
3845 | 0 | 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); |
3846 | 0 | 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); |
3847 | 0 | 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); |
3848 | 0 | break; |
3849 | 0 | case LBMR_TOPIC_OPT_EXFUNC_TYPE: |
3850 | 0 | opt_item = proto_tree_add_item(otree, hf_lbmr_topt_exfunc, tvb, curr_offset + O_LBMR_TOPIC_OPT_T_TYPE, opt_len, ENC_NA); |
3851 | 0 | opt_tree = proto_item_add_subtree(opt_item, ett_lbmr_topt_exfunc); |
3852 | 0 | 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); |
3853 | 0 | 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); |
3854 | 0 | 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); |
3855 | 0 | 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); |
3856 | 0 | 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); |
3857 | 0 | 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); |
3858 | 0 | 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); |
3859 | 0 | break; |
3860 | 0 | default: |
3861 | 0 | opt_item = proto_tree_add_item(otree, hf_lbmr_topt_unknown, tvb, curr_offset + O_LBMR_TOPIC_OPT_T_TYPE, opt_len, ENC_NA); |
3862 | 0 | opt_tree = proto_item_add_subtree(opt_item, ett_lbmr_topt_unknown); |
3863 | 0 | 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); |
3864 | 0 | 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); |
3865 | 0 | 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); |
3866 | 0 | if (((int) opt_len) > L_LBMR_TOPIC_OPT_T) |
3867 | 0 | { |
3868 | 0 | 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); |
3869 | 0 | } |
3870 | 0 | expert_add_info_format(pinfo, ei_item, &ei_lbmr_analysis_invalid_value, "Unknown option 0x%02x", opt_type); |
3871 | 0 | break; |
3872 | 0 | } |
3873 | 0 | len += opt_len; |
3874 | 0 | curr_offset += opt_len; |
3875 | 0 | opt_remaining_len -= opt_len; |
3876 | 0 | } |
3877 | 0 | return (opt_total_len); |
3878 | 0 | } |
3879 | | |
3880 | | static int dissect_lbmr_tir_transport(tvbuff_t * tvb, int offset, lbm_uint8_t transport, lbm_uint8_t transport_len, const char * topic_name, |
3881 | | uint32_t topic_index, packet_info * pinfo, proto_tree * tree, lbmr_contents_t * contents, proto_item * transport_len_item) |
3882 | 0 | { |
3883 | 0 | int len = 0; |
3884 | 0 | uint64_t channel; |
3885 | 0 | proto_item * channel_item = NULL; |
3886 | 0 | proto_item * ei_item = NULL; |
3887 | |
|
3888 | 0 | switch (transport) |
3889 | 0 | { |
3890 | 0 | case LBMR_TRANSPORT_TCP: |
3891 | 0 | { |
3892 | 0 | uint16_t port = 0; |
3893 | 0 | uint32_t session_id = 0; |
3894 | 0 | proto_item * tcp_item = NULL; |
3895 | 0 | proto_tree * tcp_tree = NULL; |
3896 | 0 | lbttcp_transport_t * lbttcp_transport = NULL; |
3897 | |
|
3898 | 0 | tcp_item = proto_tree_add_item(tree, hf_lbmr_tir_tcp, tvb, offset, (int) transport_len, ENC_NA); |
3899 | 0 | tcp_tree = proto_item_add_subtree(tcp_item, ett_lbmr_tir_tcp); |
3900 | 0 | if ((transport_len != L_LBMR_TIR_TCP_T) && (transport_len != L_LBMR_TIR_TCP_WITH_SID_T)) |
3901 | 0 | { |
3902 | 0 | expert_add_info_format(pinfo, transport_len_item, &ei_lbmr_analysis_length_incorrect, "Wrong transport length for LBMR TIR TCP info"); |
3903 | 0 | return 0; |
3904 | 0 | } |
3905 | 0 | if (transport_len == L_LBMR_TIR_TCP_WITH_SID_T) |
3906 | 0 | { |
3907 | 0 | session_id = tvb_get_ntohl(tvb, offset + O_LBMR_TIR_TCP_WITH_SID_T_SESSION_ID); |
3908 | 0 | port = tvb_get_ntohs(tvb, offset + O_LBMR_TIR_TCP_WITH_SID_T_PORT); |
3909 | 0 | 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); |
3910 | 0 | 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); |
3911 | 0 | 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); |
3912 | 0 | len += L_LBMR_TIR_TCP_WITH_SID_T; |
3913 | 0 | } |
3914 | 0 | else |
3915 | 0 | { |
3916 | 0 | port = tvb_get_ntohs(tvb, offset + O_LBMR_TIR_TCP_T_PORT); |
3917 | 0 | 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); |
3918 | 0 | 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); |
3919 | 0 | session_id = 0; |
3920 | 0 | len += L_LBMR_TIR_TCP_T; |
3921 | 0 | } |
3922 | 0 | lbttcp_transport = lbttcp_transport_add(&(pinfo->src), port, session_id, pinfo->num); |
3923 | 0 | channel = lbttcp_transport->channel; |
3924 | 0 | add_contents_tir(pinfo->pool, contents, topic_name, lbttcp_transport_source_string(pinfo->pool, &(pinfo->src), port, session_id), topic_index); |
3925 | 0 | } |
3926 | 0 | break; |
3927 | 0 | case LBMR_TRANSPORT_LBTRM: |
3928 | 0 | { |
3929 | 0 | uint16_t src_ucast_port = 0; |
3930 | 0 | uint16_t udp_dest_port = 0; |
3931 | 0 | uint32_t session_id = 0; |
3932 | 0 | proto_item * lbtrm_item = NULL; |
3933 | 0 | proto_tree * lbtrm_tree = NULL; |
3934 | 0 | lbtrm_transport_t * lbtrm_transport = NULL; |
3935 | 0 | address multicast_group; |
3936 | |
|
3937 | 0 | lbtrm_item = proto_tree_add_item(tree, hf_lbmr_tir_lbtrm, tvb, offset, (int)transport_len, ENC_NA); |
3938 | 0 | lbtrm_tree = proto_item_add_subtree(lbtrm_item, ett_lbmr_tir_lbtrm); |
3939 | 0 | set_address_tvb(&multicast_group, AT_IPv4, L_LBMR_TIR_LBTRM_T_MCAST_ADDR, tvb, offset + O_LBMR_TIR_LBTRM_T_MCAST_ADDR); |
3940 | 0 | session_id = tvb_get_ntohl(tvb, offset + O_LBMR_TIR_LBTRM_T_SESSION_ID); |
3941 | 0 | udp_dest_port = tvb_get_ntohs(tvb, offset + O_LBMR_TIR_LBTRM_T_UDP_DEST_PORT); |
3942 | 0 | src_ucast_port = tvb_get_ntohs(tvb, offset + O_LBMR_TIR_LBTRM_T_SRC_UCAST_PORT); |
3943 | 0 | 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); |
3944 | 0 | 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); |
3945 | 0 | 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); |
3946 | 0 | 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); |
3947 | 0 | 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); |
3948 | 0 | lbtrm_transport = lbtrm_transport_add(&(pinfo->src), src_ucast_port, session_id, &multicast_group, udp_dest_port, pinfo->num); |
3949 | 0 | channel = lbtrm_transport->channel; |
3950 | 0 | add_contents_tir(pinfo->pool, contents, topic_name, lbtrm_transport_source_string(&(pinfo->src), src_ucast_port, session_id, &multicast_group, udp_dest_port), topic_index); |
3951 | 0 | len += L_LBMR_TIR_LBTRM_T; |
3952 | 0 | if (transport_len != L_LBMR_TIR_LBTRM_T) |
3953 | 0 | { |
3954 | 0 | expert_add_info_format(pinfo, transport_len_item, &ei_lbmr_analysis_length_incorrect, "Wrong transport length for LBMR TIR LBTRM info"); |
3955 | 0 | } |
3956 | 0 | } |
3957 | 0 | break; |
3958 | 0 | case LBMR_TRANSPORT_LBTRU: |
3959 | 0 | { |
3960 | 0 | uint32_t session_id; |
3961 | 0 | uint16_t port; |
3962 | 0 | proto_item * lbtru_item = NULL; |
3963 | 0 | proto_tree * lbtru_tree = NULL; |
3964 | 0 | lbtru_transport_t * lbtru_transport = NULL; |
3965 | |
|
3966 | 0 | lbtru_item = proto_tree_add_item(tree, hf_lbmr_tir_lbtru, tvb, offset, (int)transport_len, ENC_NA); |
3967 | 0 | lbtru_tree = proto_item_add_subtree(lbtru_item, ett_lbmr_tir_lbtru); |
3968 | 0 | if ((transport_len != L_LBMR_TIR_LBTRU_T) && (transport_len != L_LBMR_TIR_LBTRU_WITH_SID_T)) |
3969 | 0 | { |
3970 | 0 | expert_add_info_format(pinfo, transport_len_item, &ei_lbmr_analysis_length_incorrect, "Wrong transport length for LBMR TIR LBTRU info"); |
3971 | 0 | return 0; |
3972 | 0 | } |
3973 | 0 | if (transport_len == L_LBMR_TIR_LBTRU_WITH_SID_T) |
3974 | 0 | { |
3975 | 0 | session_id = tvb_get_ntohl(tvb, offset + O_LBMR_TIR_LBTRU_WITH_SID_T_SESSION_ID); |
3976 | 0 | port = tvb_get_ntohs(tvb, offset + O_LBMR_TIR_LBTRU_WITH_SID_T_PORT); |
3977 | 0 | 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); |
3978 | 0 | 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); |
3979 | 0 | 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); |
3980 | 0 | len += L_LBMR_TIR_LBTRU_WITH_SID_T; |
3981 | 0 | } |
3982 | 0 | else |
3983 | 0 | { |
3984 | 0 | session_id = 0; |
3985 | 0 | port = tvb_get_ntohs(tvb, offset + O_LBMR_TIR_LBTRU_T_PORT); |
3986 | 0 | 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); |
3987 | 0 | 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); |
3988 | 0 | len += L_LBMR_TIR_LBTRU_T; |
3989 | 0 | } |
3990 | 0 | lbtru_transport = lbtru_transport_add(&(pinfo->src), port, session_id, pinfo->num); |
3991 | 0 | channel = lbtru_transport->channel; |
3992 | 0 | add_contents_tir(pinfo->pool, contents, topic_name, lbtru_transport_source_string(&(pinfo->src), port, session_id), topic_index); |
3993 | 0 | } |
3994 | 0 | break; |
3995 | 0 | case LBMR_TRANSPORT_LBTIPC: |
3996 | 0 | { |
3997 | 0 | uint32_t host_id; |
3998 | 0 | uint32_t session_id; |
3999 | 0 | uint16_t xport_id; |
4000 | 0 | proto_item * lbtipc_item = NULL; |
4001 | 0 | proto_tree * lbtipc_tree = NULL; |
4002 | 0 | lbtipc_transport_t * lbtipc_transport = NULL; |
4003 | |
|
4004 | 0 | lbtipc_item = proto_tree_add_item(tree, hf_lbmr_tir_lbtipc, tvb, offset, (int)transport_len, ENC_NA); |
4005 | 0 | lbtipc_tree = proto_item_add_subtree(lbtipc_item, ett_lbmr_tir_lbtipc); |
4006 | 0 | if (transport_len != L_LBMR_TIR_LBTIPC_T) |
4007 | 0 | { |
4008 | 0 | expert_add_info_format(pinfo, transport_len_item, &ei_lbmr_analysis_length_incorrect, "Wrong transport length for LBMR TIR LBTIPC info"); |
4009 | 0 | return 0; |
4010 | 0 | } |
4011 | 0 | host_id = tvb_get_ntohl(tvb, offset + O_LBMR_TIR_LBTIPC_T_HOST_ID); |
4012 | 0 | session_id = tvb_get_ntohl(tvb, offset + O_LBMR_TIR_LBTIPC_T_SESSION_ID); |
4013 | 0 | xport_id = tvb_get_ntohs(tvb, offset + O_LBMR_TIR_LBTIPC_T_XPORT_ID); |
4014 | 0 | 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); |
4015 | 0 | 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); |
4016 | 0 | 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); |
4017 | 0 | lbtipc_transport = lbtipc_transport_add(host_id, session_id, xport_id); |
4018 | 0 | channel = lbtipc_transport->channel; |
4019 | 0 | add_contents_tir(pinfo->pool, contents, topic_name, lbtipc_transport_source_string(host_id, session_id, xport_id), topic_index); |
4020 | 0 | len += L_LBMR_TIR_LBTIPC_T; |
4021 | 0 | } |
4022 | 0 | break; |
4023 | 0 | case LBMR_TRANSPORT_LBTRDMA: |
4024 | 0 | { |
4025 | 0 | uint32_t session_id; |
4026 | 0 | uint16_t port; |
4027 | 0 | proto_item * lbtrdma_item = NULL; |
4028 | 0 | proto_tree * lbtrdma_tree = NULL; |
4029 | 0 | lbtrdma_transport_t * lbtrdma_transport = NULL; |
4030 | 0 | address source_addr; |
4031 | |
|
4032 | 0 | lbtrdma_item = proto_tree_add_item(tree, hf_lbmr_tir_lbtrdma, tvb, offset, (int)transport_len, ENC_NA); |
4033 | 0 | lbtrdma_tree = proto_item_add_subtree(lbtrdma_item, ett_lbmr_tir_lbtrdma); |
4034 | 0 | if (transport_len != L_LBMR_TIR_LBTRDMA_T) |
4035 | 0 | { |
4036 | 0 | expert_add_info_format(pinfo, transport_len_item, &ei_lbmr_analysis_length_incorrect, "Wrong transport length for LBMR TIR LBTRDMA info"); |
4037 | 0 | return 0; |
4038 | 0 | } |
4039 | 0 | set_address_tvb(&source_addr, AT_IPv4, L_LBMR_TIR_LBTRDMA_T_IP, tvb, offset + O_LBMR_TIR_LBTRDMA_T_IP); |
4040 | 0 | session_id = tvb_get_ntohl(tvb, offset + O_LBMR_TIR_LBTRDMA_T_SESSION_ID); |
4041 | 0 | port = tvb_get_ntohs(tvb, offset + O_LBMR_TIR_LBTRDMA_T_PORT); |
4042 | 0 | 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); |
4043 | 0 | 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); |
4044 | 0 | 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); |
4045 | 0 | lbtrdma_transport = lbtrdma_transport_add(&source_addr, port, session_id); |
4046 | 0 | channel = lbtrdma_transport->channel; |
4047 | 0 | add_contents_tir(pinfo->pool, contents, topic_name, lbtrdma_transport_source_string(&source_addr, port, session_id), topic_index); |
4048 | 0 | len += L_LBMR_TIR_LBTRDMA_T; |
4049 | 0 | } |
4050 | 0 | break; |
4051 | 0 | case LBMR_TRANSPORT_LBTSMX: |
4052 | 0 | { |
4053 | 0 | uint32_t host_id; |
4054 | 0 | uint32_t session_id; |
4055 | 0 | uint16_t xport_id; |
4056 | 0 | proto_item * lbtsmx_item = NULL; |
4057 | 0 | proto_tree * lbtsmx_tree = NULL; |
4058 | 0 | lbtsmx_transport_t * lbtsmx_transport = NULL; |
4059 | |
|
4060 | 0 | lbtsmx_item = proto_tree_add_item(tree, hf_lbmr_tir_lbtsmx, tvb, offset, (int)transport_len, ENC_NA); |
4061 | 0 | lbtsmx_tree = proto_item_add_subtree(lbtsmx_item, ett_lbmr_tir_lbtsmx); |
4062 | 0 | if (transport_len != L_LBMR_TIR_LBTSMX_T) |
4063 | 0 | { |
4064 | 0 | expert_add_info_format(pinfo, transport_len_item, &ei_lbmr_analysis_length_incorrect, "Wrong transport length for LBMR TIR LBTSMX info"); |
4065 | 0 | } |
4066 | 0 | host_id = tvb_get_ntohl(tvb, offset + O_LBMR_TIR_LBTSMX_T_HOST_ID); |
4067 | 0 | session_id = tvb_get_ntohl(tvb, offset + O_LBMR_TIR_LBTSMX_T_SESSION_ID); |
4068 | 0 | xport_id = tvb_get_ntohs(tvb, offset + O_LBMR_TIR_LBTSMX_T_XPORT_ID); |
4069 | 0 | 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); |
4070 | 0 | 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); |
4071 | 0 | 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); |
4072 | 0 | lbtsmx_transport = lbtsmx_transport_add(host_id, session_id, xport_id); |
4073 | 0 | channel = lbtsmx_transport->channel; |
4074 | 0 | add_contents_tir(pinfo->pool, contents, topic_name, lbtsmx_transport_source_string(host_id, session_id, xport_id), topic_index); |
4075 | 0 | len += L_LBMR_TIR_LBTSMX_T; |
4076 | 0 | } |
4077 | 0 | break; |
4078 | 0 | default: |
4079 | 0 | ei_item = proto_tree_add_item(tree, hf_lbmr_tir_unknown_transport, tvb, offset, transport_len, ENC_NA); |
4080 | 0 | expert_add_info_format(pinfo, ei_item, &ei_lbmr_analysis_invalid_value, "Unknown LBMR TIR transport 0x%02x", transport); |
4081 | 0 | len = transport_len; |
4082 | 0 | channel = LBM_CHANNEL_NO_CHANNEL; |
4083 | 0 | break; |
4084 | 0 | } |
4085 | 0 | if (channel != LBM_CHANNEL_NO_CHANNEL) |
4086 | 0 | { |
4087 | 0 | lbm_topic_add(channel, topic_index, topic_name); |
4088 | 0 | channel_item = proto_tree_add_uint64(tree, hf_lbmr_tir_channel, tvb, 0, 0, channel); |
4089 | 0 | proto_item_set_generated(channel_item); |
4090 | 0 | } |
4091 | 0 | return (len); |
4092 | 0 | } |
4093 | | |
4094 | | static int dissect_lbmr_tir_entry(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree * tree, lbmr_contents_t * contents) |
4095 | 0 | { |
4096 | 0 | unsigned namelen = 0; |
4097 | 0 | int reclen = 0; |
4098 | 0 | int dissect_len = 0; |
4099 | 0 | int tinfo_offset = 0; |
4100 | 0 | char * name = NULL; |
4101 | 0 | proto_item * ti = NULL; |
4102 | 0 | proto_tree * tinfo_tree = NULL; |
4103 | 0 | uint8_t transport; |
4104 | 0 | uint8_t tlen; |
4105 | 0 | uint16_t ttl; |
4106 | 0 | uint32_t idx; |
4107 | 0 | int curr_offset; |
4108 | 0 | proto_item * transport_len_item = NULL; |
4109 | |
|
4110 | 0 | name = (char*)tvb_get_stringz_enc(pinfo->pool, tvb, offset, &namelen, ENC_ASCII); |
4111 | 0 | reclen += namelen; |
4112 | 0 | curr_offset = offset + namelen; |
4113 | 0 | tinfo_offset = curr_offset; |
4114 | 0 | transport = tvb_get_uint8(tvb, curr_offset + O_LBMR_TIR_T_TRANSPORT); |
4115 | 0 | tlen = tvb_get_uint8(tvb, curr_offset + O_LBMR_TIR_T_TLEN); |
4116 | 0 | ttl = tvb_get_ntohs(tvb, curr_offset + O_LBMR_TIR_T_TTL); |
4117 | 0 | idx = tvb_get_ntohl(tvb, curr_offset + O_LBMR_TIR_T_INDEX); |
4118 | 0 | reclen += L_LBMR_TIR_T; |
4119 | 0 | curr_offset += L_LBMR_TIR_T; |
4120 | |
|
4121 | 0 | ti = proto_tree_add_none_format(tree, hf_lbmr_tir, tvb, offset, reclen, "%s: %s, Length %u, Index %" PRIu32 ", TTL %" PRIu16, |
4122 | 0 | name, val_to_str(pinfo->pool, (transport & LBMR_TIR_TRANSPORT), lbmr_transport_type, "Unknown (0x%02x)"), tlen, idx, ttl); |
4123 | 0 | tinfo_tree = proto_item_add_subtree(ti, ett_lbmr_tir); |
4124 | 0 | proto_tree_add_item(tinfo_tree, hf_lbmr_tir_name, tvb, offset, namelen, ENC_ASCII); |
4125 | 0 | 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); |
4126 | 0 | 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); |
4127 | 0 | 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); |
4128 | 0 | 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); |
4129 | 0 | 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); |
4130 | 0 | if ((transport & LBMR_TIR_OPTIONS) != 0) |
4131 | 0 | { |
4132 | 0 | dissect_len = dissect_lbmr_tir_options(tvb, curr_offset, pinfo, tinfo_tree); |
4133 | 0 | reclen += dissect_len; |
4134 | 0 | curr_offset += dissect_len; |
4135 | 0 | } |
4136 | 0 | 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); |
4137 | 0 | proto_item_set_len(ti, reclen); |
4138 | 0 | return (reclen); |
4139 | 0 | } |
4140 | | |
4141 | | static int dissect_lbmr_tirs(tvbuff_t * tvb, int offset, uint16_t tir_count, packet_info * pinfo, proto_tree * tree, |
4142 | | const char * name, lbmr_contents_t * contents) |
4143 | 0 | { |
4144 | 0 | int start_offset; |
4145 | 0 | int tir_len; |
4146 | 0 | proto_tree * tirs_tree = NULL; |
4147 | 0 | proto_item * ti = NULL; |
4148 | 0 | int len = 0; |
4149 | |
|
4150 | 0 | start_offset = offset; |
4151 | 0 | ti = proto_tree_add_none_format(tree, hf_lbmr_tirs, tvb, start_offset, -1, "%s", name); |
4152 | 0 | tirs_tree = proto_item_add_subtree(ti, ett_lbmr_tirs); |
4153 | 0 | while (tir_count-- > 0) |
4154 | 0 | { |
4155 | 0 | tir_len = dissect_lbmr_tir_entry(tvb, offset, pinfo, tirs_tree, contents); |
4156 | 0 | offset += tir_len; |
4157 | 0 | len += tir_len; |
4158 | 0 | } |
4159 | 0 | proto_item_set_len(ti, len); |
4160 | 0 | return (len); |
4161 | 0 | } |
4162 | | |
4163 | | /*----------------------------------------------------------------------------*/ |
4164 | | /* LBMR Queue Query Record dissection functions. */ |
4165 | | /*----------------------------------------------------------------------------*/ |
4166 | | static int dissect_lbmr_qqr(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree * tree, lbmr_contents_t * contents) |
4167 | 0 | { |
4168 | 0 | unsigned namelen = 0; |
4169 | 0 | unsigned reclen = 0; |
4170 | 0 | char * name = NULL; |
4171 | |
|
4172 | 0 | name = (char*)tvb_get_stringz_enc(pinfo->pool, tvb, offset, &namelen, ENC_ASCII); |
4173 | 0 | reclen += namelen; |
4174 | 0 | add_contents_qqr(pinfo->pool, contents, name); |
4175 | 0 | proto_tree_add_item(tree, hf_lbmr_qqr_name, tvb, offset, namelen, ENC_ASCII); |
4176 | 0 | return (reclen); |
4177 | 0 | } |
4178 | | |
4179 | | static int dissect_lbmr_qqrs(tvbuff_t * tvb, int offset, uint8_t qqr_count, packet_info * pinfo, proto_tree * tree, lbmr_contents_t * contents) |
4180 | 0 | { |
4181 | 0 | int start_offset; |
4182 | 0 | int qqr_len; |
4183 | 0 | proto_tree * qqrs_tree = NULL; |
4184 | 0 | proto_item * qqrs_ti = NULL; |
4185 | 0 | int total_len = 0; |
4186 | |
|
4187 | 0 | start_offset = offset; |
4188 | 0 | qqrs_ti = proto_tree_add_item(tree, hf_lbmr_qqr, tvb, start_offset, -1, ENC_NA); |
4189 | 0 | qqrs_tree = proto_item_add_subtree(qqrs_ti, ett_lbmr_qqrs); |
4190 | 0 | while (qqr_count-- > 0) |
4191 | 0 | { |
4192 | 0 | qqr_len = dissect_lbmr_qqr(tvb, offset, pinfo, qqrs_tree, contents); |
4193 | 0 | total_len += qqr_len; |
4194 | 0 | offset += qqr_len; |
4195 | 0 | } |
4196 | 0 | proto_item_set_len(qqrs_ti, total_len); |
4197 | 0 | return (total_len); |
4198 | 0 | } |
4199 | | |
4200 | | /*----------------------------------------------------------------------------*/ |
4201 | | /* LBMR Queue Information Record dissection functions. */ |
4202 | | /*----------------------------------------------------------------------------*/ |
4203 | | static int dissect_lbmr_qir_queue_blk(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree * tree, const char * queue_name, |
4204 | | const char * topic_name, lbmr_contents_t * contents) |
4205 | 0 | { |
4206 | 0 | uint16_t port = 0; |
4207 | 0 | proto_item * ti = NULL; |
4208 | 0 | proto_tree * blk_tree = NULL; |
4209 | |
|
4210 | 0 | port = tvb_get_ntohs(tvb, offset + O_LBMR_QIR_QUEUE_BLK_T_PORT); |
4211 | 0 | ti = proto_tree_add_item(tree, hf_lbmr_qir_queue_blk, tvb, offset, L_LBMR_QIR_QUEUE_BLK_T, ENC_NA); |
4212 | 0 | blk_tree = proto_item_add_subtree(ti, ett_lbmr_qir_queue_blk); |
4213 | 0 | 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); |
4214 | 0 | 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); |
4215 | 0 | 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); |
4216 | 0 | 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); |
4217 | 0 | 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); |
4218 | 0 | add_contents_qir(pinfo->pool, contents, queue_name, topic_name, port); |
4219 | 0 | return ((int)L_LBMR_QIR_QUEUE_BLK_T); |
4220 | 0 | } |
4221 | | |
4222 | | static int dissect_lbmr_qir_grp_blk(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree * tree, lbmr_contents_t * contents _U_) |
4223 | 0 | { |
4224 | 0 | proto_item * ti = NULL; |
4225 | 0 | proto_tree * blk_tree = NULL; |
4226 | 0 | uint16_t idx = 0; |
4227 | 0 | uint16_t sz = 0; |
4228 | |
|
4229 | 0 | idx = tvb_get_ntohs(tvb, offset + O_LBMR_QIR_GRP_BLK_T_GRP_IDX); |
4230 | 0 | sz = tvb_get_ntohs(tvb, offset + O_LBMR_QIR_GRP_BLK_T_GRP_SZ); |
4231 | 0 | 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); |
4232 | 0 | blk_tree = proto_item_add_subtree(ti, ett_lbmr_qir_grp_blk); |
4233 | 0 | 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); |
4234 | 0 | 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); |
4235 | 0 | return ((int)L_LBMR_QIR_GRP_BLK_T); |
4236 | 0 | } |
4237 | | |
4238 | | static int dissect_lbmr_qir_entry(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree * tree, lbmr_contents_t * contents) |
4239 | 0 | { |
4240 | 0 | unsigned qnamelen = 0; |
4241 | 0 | int qnameoffset = 0; |
4242 | 0 | char * qname = NULL; |
4243 | 0 | unsigned tnamelen = 0; |
4244 | 0 | int tnameoffset = 0; |
4245 | 0 | char * tname = NULL; |
4246 | 0 | int reclen = 0; |
4247 | 0 | int curr_offset = 0; |
4248 | 0 | proto_item * qirti = NULL; |
4249 | 0 | proto_tree * qirtree = NULL; |
4250 | 0 | proto_item * grpti = NULL; |
4251 | 0 | proto_tree * grptree = NULL; |
4252 | 0 | int grplen = 0; |
4253 | 0 | proto_item * queueti = NULL; |
4254 | 0 | proto_item * queuetree = NULL; |
4255 | 0 | int queuelen = 0; |
4256 | 0 | uint32_t queue_id = 0; |
4257 | 0 | uint16_t grp_blks = 0; |
4258 | 0 | uint16_t queue_blks = 0; |
4259 | 0 | uint16_t have_options = 0; |
4260 | 0 | int optlen = 0; |
4261 | | |
4262 | | /* |
4263 | | queue name (null-terminated) |
4264 | | topic name (null-terminated) |
4265 | | lbmr_qir_t |
4266 | | if qir.grp_blks & LBMR_QIR_OPTIONS |
4267 | | parse options (normal topic options - though there shouldn't be any) can use dissect_lbmr_tir_options |
4268 | | endif |
4269 | | group blocks (lbmr_qir_grp_blk_t) |
4270 | | queue blocks (lbmr_qir_queue_blk_t) |
4271 | | */ |
4272 | 0 | curr_offset = offset; |
4273 | 0 | qnameoffset = curr_offset; |
4274 | 0 | qname = (char*)tvb_get_stringz_enc(pinfo->pool, tvb, qnameoffset, &qnamelen, ENC_ASCII); |
4275 | 0 | curr_offset += qnamelen; |
4276 | 0 | reclen += qnamelen; |
4277 | 0 | tnameoffset = curr_offset; |
4278 | 0 | tname = (char*)tvb_get_stringz_enc(pinfo->pool, tvb, tnameoffset, &tnamelen, ENC_ASCII); |
4279 | 0 | curr_offset += tnamelen; |
4280 | 0 | reclen += tnamelen; |
4281 | 0 | queue_id = tvb_get_ntohl(tvb, curr_offset + O_LBMR_QIR_T_QUEUE_ID); |
4282 | 0 | have_options = tvb_get_ntohs(tvb, curr_offset + O_LBMR_QIR_T_GRP_BLKS); |
4283 | 0 | grp_blks = have_options & LBMR_QIR_GRP_BLOCKS_MASK; |
4284 | 0 | have_options &= LBMR_QIR_OPTIONS; |
4285 | 0 | queue_blks = tvb_get_ntohs(tvb, curr_offset + O_LBMR_QIR_T_QUEUE_BLKS); |
4286 | 0 | qirti = proto_tree_add_none_format(tree, hf_lbmr_qir, tvb, offset, reclen, "%s: %s, ID %" PRIu32, qname, tname, queue_id); |
4287 | 0 | qirtree = proto_item_add_subtree(qirti, ett_lbmr_qir); |
4288 | 0 | proto_tree_add_item(qirtree, hf_lbmr_qir_queue_name, tvb, qnameoffset, qnamelen, ENC_ASCII); |
4289 | 0 | proto_tree_add_item(qirtree, hf_lbmr_qir_topic_name, tvb, tnameoffset, tnamelen, ENC_ASCII); |
4290 | 0 | 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); |
4291 | 0 | 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); |
4292 | 0 | 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); |
4293 | 0 | 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); |
4294 | 0 | 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); |
4295 | 0 | 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); |
4296 | 0 | curr_offset += L_LBMR_QIR_T; |
4297 | 0 | reclen += L_LBMR_QIR_T; |
4298 | 0 | if (have_options) |
4299 | 0 | { |
4300 | 0 | optlen = dissect_lbmr_tir_options(tvb, curr_offset, pinfo, tree); |
4301 | 0 | curr_offset += optlen; |
4302 | 0 | reclen += optlen; |
4303 | 0 | } |
4304 | 0 | if (grp_blks > 0) |
4305 | 0 | { |
4306 | 0 | grpti = proto_tree_add_item(qirtree, hf_lbmr_qir_grps, tvb, curr_offset, 1, ENC_NA); |
4307 | 0 | grptree = proto_item_add_subtree(grpti, ett_lbmr_qir_grp); |
4308 | 0 | grplen = 0; |
4309 | 0 | while (grp_blks-- > 0) |
4310 | 0 | { |
4311 | 0 | optlen = dissect_lbmr_qir_grp_blk(tvb, curr_offset, pinfo, grptree, contents); |
4312 | 0 | curr_offset += optlen; |
4313 | 0 | reclen += optlen; |
4314 | 0 | grplen += optlen; |
4315 | 0 | } |
4316 | 0 | proto_item_set_len(grpti, grplen); |
4317 | 0 | } |
4318 | 0 | if (queue_blks > 0) |
4319 | 0 | { |
4320 | 0 | queueti = proto_tree_add_item(qirtree, hf_lbmr_qir_queues, tvb, curr_offset, 1, ENC_NA); |
4321 | 0 | queuetree = proto_item_add_subtree(queueti, ett_lbmr_qir_queue); |
4322 | 0 | queuelen = 0; |
4323 | 0 | while (queue_blks-- > 0) |
4324 | 0 | { |
4325 | 0 | optlen = dissect_lbmr_qir_queue_blk(tvb, curr_offset, pinfo, queuetree, qname, tname, contents); |
4326 | 0 | curr_offset += optlen; |
4327 | 0 | reclen += optlen; |
4328 | 0 | queuelen += optlen; |
4329 | 0 | } |
4330 | 0 | proto_item_set_len(queueti, queuelen); |
4331 | 0 | } |
4332 | 0 | proto_item_set_len(qirti, reclen); |
4333 | 0 | return (reclen); |
4334 | 0 | } |
4335 | | |
4336 | | static int dissect_lbmr_qirs(tvbuff_t * tvb, int offset, uint16_t qirs, packet_info * pinfo, proto_tree * tree, lbmr_contents_t * contents) |
4337 | 0 | { |
4338 | 0 | int start_offset; |
4339 | 0 | int qir_len; |
4340 | 0 | proto_tree * qirs_tree = NULL; |
4341 | 0 | proto_item * qirs_ti = NULL; |
4342 | 0 | int len = 0; |
4343 | |
|
4344 | 0 | start_offset = offset; |
4345 | 0 | qirs_ti = proto_tree_add_item(tree, hf_lbmr_qirs, tvb, start_offset, -1, ENC_NA); |
4346 | 0 | qirs_tree = proto_item_add_subtree(qirs_ti, ett_lbmr_qirs); |
4347 | 0 | while (qirs-- > 0) |
4348 | 0 | { |
4349 | 0 | qir_len = dissect_lbmr_qir_entry(tvb, offset, pinfo, qirs_tree, contents); |
4350 | 0 | len += qir_len; |
4351 | 0 | offset += qir_len; |
4352 | 0 | } |
4353 | 0 | proto_item_set_len(qirs_ti, len); |
4354 | 0 | return (len); |
4355 | 0 | } |
4356 | | |
4357 | | /*----------------------------------------------------------------------------*/ |
4358 | | /* LBMR Proxy Source Election Record dissection functions. */ |
4359 | | /*----------------------------------------------------------------------------*/ |
4360 | | static int dissect_lbmr_pser(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree * tree) |
4361 | 0 | { |
4362 | 0 | int hdr_len = 0; |
4363 | 0 | int len = 0; |
4364 | 0 | int topic_len = 0; |
4365 | 0 | static int * const flags[] = |
4366 | 0 | { |
4367 | 0 | &hf_lbmr_pser_flags_option, |
4368 | 0 | NULL |
4369 | 0 | }; |
4370 | 0 | int curr_offset = offset; |
4371 | 0 | uint16_t flags_val = 0; |
4372 | |
|
4373 | 0 | hdr_len = (int)tvb_get_ntohs(tvb, curr_offset + O_LBMR_PSER_T_LEN); |
4374 | 0 | flags_val = tvb_get_ntohs(tvb, curr_offset + O_LBMR_PSER_T_FLAGS); |
4375 | 0 | topic_len = hdr_len - L_LBMR_PSER_T; |
4376 | 0 | 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); |
4377 | 0 | proto_tree_add_item(tree, hf_lbmr_pser_len, tvb, offset + O_LBMR_PSER_T_LEN, L_LBMR_PSER_T_LEN, ENC_BIG_ENDIAN); |
4378 | 0 | proto_tree_add_bitmask(tree, tvb, offset + O_LBMR_PSER_T_FLAGS, hf_lbmr_pser_flags, ett_lbmr_pser_flags, flags, ENC_BIG_ENDIAN); |
4379 | 0 | 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); |
4380 | 0 | 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); |
4381 | 0 | 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); |
4382 | 0 | 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); |
4383 | 0 | 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); |
4384 | 0 | 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); |
4385 | 0 | proto_tree_add_item(tree, hf_lbmr_pser_topic, tvb, offset + O_LBMR_PSER_T_TOPIC, topic_len, ENC_ASCII); |
4386 | 0 | curr_offset += hdr_len; |
4387 | 0 | len = hdr_len; |
4388 | 0 | if ((flags_val & LBMR_PSER_OPT_FLAG) != 0) |
4389 | 0 | { |
4390 | 0 | proto_tree * opts_tree = NULL; |
4391 | 0 | proto_item * opts_item = NULL; |
4392 | 0 | proto_tree * optlen_tree = NULL; |
4393 | 0 | proto_tree * optlen_item = NULL; |
4394 | 0 | uint16_t opt_len = 0; |
4395 | |
|
4396 | 0 | opt_len = tvb_get_ntohs(tvb, curr_offset + O_LBMR_PSER_OPTLEN_T_OPTLEN); |
4397 | 0 | opts_item = proto_tree_add_item(tree, hf_lbmr_pser_opts, tvb, curr_offset, -1, ENC_NA); |
4398 | 0 | opts_tree = proto_item_add_subtree(opts_item, ett_lbmr_pser_opts); |
4399 | 0 | optlen_item = proto_tree_add_item(opts_tree, hf_lbmr_pser_optlen, tvb, curr_offset, L_LBMR_PSER_OPTLEN_T, ENC_NA); |
4400 | 0 | optlen_tree = proto_item_add_subtree(optlen_item, ett_lbmr_pser_opt_len); |
4401 | 0 | 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); |
4402 | 0 | 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); |
4403 | 0 | proto_item_set_len(opts_item, opt_len); |
4404 | 0 | len += L_LBMR_PSER_OPTLEN_T; |
4405 | 0 | curr_offset += L_LBMR_PSER_OPTLEN_T; |
4406 | 0 | opt_len -= L_LBMR_PSER_OPTLEN_T; |
4407 | 0 | while (opt_len > 0) |
4408 | 0 | { |
4409 | 0 | proto_tree * ctxinst_tree = NULL; |
4410 | 0 | proto_item * ctxinst_item = NULL; |
4411 | 0 | uint8_t opt_type = tvb_get_uint8(tvb, curr_offset + O_LBMR_PSER_OPT_HDR_T_TYPE); |
4412 | 0 | uint8_t option_len = tvb_get_uint8(tvb, curr_offset + O_LBMR_PSER_OPT_HDR_T_LEN); |
4413 | |
|
4414 | 0 | switch (opt_type) |
4415 | 0 | { |
4416 | 0 | case LBMR_PSER_OPT_SRC_CTXINST_TYPE: |
4417 | 0 | case LBMR_PSER_OPT_STORE_CTXINST_TYPE: |
4418 | 0 | ctxinst_item = proto_tree_add_item(opts_tree, hf_lbmr_pser_opt_ctxinst, tvb, curr_offset, L_LBMR_PSER_OPT_CTXINST_T, ENC_NA); |
4419 | 0 | ctxinst_tree = proto_item_add_subtree(ctxinst_item, ett_lbmr_pser_opt_ctxinst); |
4420 | 0 | 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); |
4421 | 0 | 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); |
4422 | 0 | 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); |
4423 | 0 | len += L_LBMR_PSER_OPT_CTXINST_T; |
4424 | 0 | curr_offset += L_LBMR_PSER_OPT_CTXINST_T; |
4425 | 0 | opt_len -= L_LBMR_PSER_OPT_CTXINST_T; |
4426 | 0 | break; |
4427 | 0 | default: |
4428 | 0 | len += option_len; |
4429 | 0 | curr_offset += option_len; |
4430 | 0 | opt_len -= option_len; |
4431 | 0 | expert_add_info_format(pinfo, NULL, &ei_lbmr_analysis_invalid_value, "Unknown LBMR PSER option 0x%02x", opt_type); |
4432 | 0 | if (option_len == 0) { |
4433 | 0 | return (len); |
4434 | 0 | } |
4435 | 0 | break; |
4436 | 0 | } |
4437 | 0 | } |
4438 | 0 | } |
4439 | 0 | return (len); |
4440 | 0 | } |
4441 | | |
4442 | | /*----------------------------------------------------------------------------*/ |
4443 | | /* LBMR Queue Management dissection functions. */ |
4444 | | /*----------------------------------------------------------------------------*/ |
4445 | | int lbmr_dissect_umq_qmgmt(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree * tree) |
4446 | 35 | { |
4447 | 35 | uint8_t pckt_type = 0; |
4448 | 35 | int curr_offset = 0; |
4449 | 35 | uint16_t dep16; |
4450 | 35 | uint16_t idx; |
4451 | 35 | uint8_t flags_val = 0; |
4452 | 35 | int len_dissected = 0; |
4453 | 35 | static int * const flags[] = |
4454 | 35 | { |
4455 | 35 | &hf_qmgmt_flags_i_flag, |
4456 | 35 | &hf_qmgmt_flags_n_flag, |
4457 | 35 | NULL |
4458 | 35 | }; |
4459 | 35 | static int * const il_flags[] = |
4460 | 35 | { |
4461 | 35 | &hf_qmgmt_flags_i_flag, |
4462 | 35 | &hf_qmgmt_flags_n_flag, |
4463 | 35 | &hf_qmgmt_flags_il_l_flag, |
4464 | 35 | &hf_qmgmt_flags_il_k_flag, |
4465 | 35 | NULL |
4466 | 35 | }; |
4467 | | |
4468 | 35 | flags_val = tvb_get_uint8(tvb, offset + O_UMQ_QMGMT_HDR_T_FLAGS); |
4469 | 35 | pckt_type = tvb_get_uint8(tvb, offset + O_UMQ_QMGMT_HDR_T_PCKT_TYPE); |
4470 | 35 | dep16 = tvb_get_ntohs(tvb, offset + O_UMQ_QMGMT_HDR_T_PCKT_TYPE_DEP16); |
4471 | 35 | if (pckt_type == UMQ_QMGMT_HDR_PCKT_TYPE_IL) |
4472 | 5 | { |
4473 | 5 | proto_tree_add_bitmask(tree, tvb, offset + O_UMQ_QMGMT_HDR_T_FLAGS, hf_qmgmt_flags, ett_qmgmt_flags, il_flags, ENC_BIG_ENDIAN); |
4474 | 5 | } |
4475 | 30 | else |
4476 | 30 | { |
4477 | 30 | proto_tree_add_bitmask(tree, tvb, offset + O_UMQ_QMGMT_HDR_T_FLAGS, hf_qmgmt_flags, ett_qmgmt_flags, flags, ENC_BIG_ENDIAN); |
4478 | 30 | } |
4479 | 35 | 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); |
4480 | 35 | proto_tree_add_item(tree, hf_qmgmt_cfgsig, tvb, offset + O_UMQ_QMGMT_HDR_T_CFGSIG, L_UMQ_QMGMT_HDR_T_CFGSIG, ENC_NA); |
4481 | 35 | 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); |
4482 | 35 | 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); |
4483 | 35 | 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); |
4484 | 35 | 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); |
4485 | 35 | 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); |
4486 | 35 | 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); |
4487 | 35 | switch (pckt_type) |
4488 | 35 | { |
4489 | 5 | case UMQ_QMGMT_HDR_PCKT_TYPE_IL: |
4490 | 5 | 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); |
4491 | 5 | break; |
4492 | 1 | case UMQ_QMGMT_HDR_PCKT_TYPE_JREJ: |
4493 | 1 | 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); |
4494 | 1 | break; |
4495 | 1 | case UMQ_QMGMT_HDR_PCKT_TYPE_EV: |
4496 | 1 | 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); |
4497 | 1 | break; |
4498 | 27 | default: |
4499 | 27 | 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); |
4500 | 27 | break; |
4501 | 35 | } |
4502 | 34 | len_dissected = L_UMQ_QMGMT_HDR_T; |
4503 | 34 | curr_offset = offset + L_UMQ_QMGMT_HDR_T; |
4504 | 34 | switch (pckt_type) |
4505 | 34 | { |
4506 | 5 | case UMQ_QMGMT_HDR_PCKT_TYPE_IL: |
4507 | 5 | { |
4508 | 5 | proto_item * il_subtree_item = NULL; |
4509 | 5 | proto_tree * il_subtree = NULL; |
4510 | 5 | static int * const il_inst_flags[] = |
4511 | 5 | { |
4512 | 5 | &hf_qmgmt_il_inst_flags_m_flag, |
4513 | 5 | &hf_qmgmt_il_inst_flags_q_flag, |
4514 | 5 | &hf_qmgmt_il_inst_flags_p_flag, |
4515 | 5 | NULL |
4516 | 5 | }; |
4517 | | |
4518 | 5 | il_subtree_item = proto_tree_add_item(tree, hf_qmgmt_il, tvb, curr_offset, L_UMQ_QMGMT_IL_HDR_T, ENC_NA); |
4519 | 5 | il_subtree = proto_item_add_subtree(il_subtree_item, ett_qmgmt_il); |
4520 | 5 | 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); |
4521 | 5 | len_dissected += L_UMQ_QMGMT_IL_HDR_T; |
4522 | 5 | curr_offset += L_UMQ_QMGMT_IL_HDR_T; |
4523 | 30 | for (idx = 0; idx < dep16; ++idx) |
4524 | 25 | { |
4525 | 25 | proto_item * il_inst_subtree_item = NULL; |
4526 | 25 | proto_tree * il_inst_subtree = NULL; |
4527 | | |
4528 | 25 | 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); |
4529 | 25 | il_inst_subtree = proto_item_add_subtree(il_inst_subtree_item, ett_qmgmt_il_inst); |
4530 | 25 | 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); |
4531 | 25 | 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); |
4532 | 25 | 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); |
4533 | 25 | 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); |
4534 | 25 | 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); |
4535 | 25 | len_dissected += L_UMQ_QMGMT_IL_INST_HDR_T; |
4536 | 25 | curr_offset += L_UMQ_QMGMT_IL_INST_HDR_T; |
4537 | 25 | } |
4538 | 5 | } |
4539 | 5 | break; |
4540 | 0 | case UMQ_QMGMT_HDR_PCKT_TYPE_JR: |
4541 | | /* Nothing to do */ |
4542 | 0 | break; |
4543 | 1 | case UMQ_QMGMT_HDR_PCKT_TYPE_JREJ: |
4544 | | /* Nothing to do */ |
4545 | 1 | break; |
4546 | 0 | case UMQ_QMGMT_HDR_PCKT_TYPE_IKA: |
4547 | | /* Nothing to do */ |
4548 | 0 | break; |
4549 | 1 | case UMQ_QMGMT_HDR_PCKT_TYPE_EC: |
4550 | 1 | { |
4551 | 1 | proto_item * ec_subtree_item = NULL; |
4552 | 1 | proto_tree * ec_subtree = NULL; |
4553 | | |
4554 | 1 | ec_subtree_item = proto_tree_add_item(tree, hf_qmgmt_ec, tvb, curr_offset, L_UMQ_QMGMT_EC_HDR_T, ENC_NA); |
4555 | 1 | ec_subtree = proto_item_add_subtree(ec_subtree_item, ett_qmgmt_ec); |
4556 | 1 | 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); |
4557 | 1 | len_dissected += L_UMQ_QMGMT_EC_HDR_T; |
4558 | 1 | curr_offset += L_UMQ_QMGMT_EC_HDR_T; |
4559 | 1 | } |
4560 | 1 | break; |
4561 | 1 | case UMQ_QMGMT_HDR_PCKT_TYPE_EV: |
4562 | 1 | { |
4563 | 1 | proto_item * ev_subtree_item = NULL; |
4564 | 1 | proto_tree * ev_subtree = NULL; |
4565 | | |
4566 | 1 | ev_subtree_item = proto_tree_add_item(tree, hf_qmgmt_ev, tvb, curr_offset, L_UMQ_QMGMT_EV_HDR_T, ENC_NA); |
4567 | 1 | ev_subtree = proto_item_add_subtree(ev_subtree_item, ett_qmgmt_ev); |
4568 | 1 | 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); |
4569 | 1 | 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); |
4570 | 1 | len_dissected += L_UMQ_QMGMT_EV_HDR_T; |
4571 | 1 | curr_offset += L_UMQ_QMGMT_EV_HDR_T; |
4572 | 1 | } |
4573 | 1 | break; |
4574 | 1 | case UMQ_QMGMT_HDR_PCKT_TYPE_CNIL: |
4575 | | /* Nothing to do */ |
4576 | 1 | break; |
4577 | 1 | case UMQ_QMGMT_HDR_PCKT_TYPE_QRO: |
4578 | 1 | { |
4579 | 1 | proto_item * qro_subtree_item = NULL; |
4580 | 1 | proto_tree * qro_subtree = NULL; |
4581 | | |
4582 | 1 | qro_subtree_item = proto_tree_add_item(tree, hf_qmgmt_qro, tvb, curr_offset, L_UMQ_QMGMT_QRO_HDR_T, ENC_NA); |
4583 | 1 | qro_subtree = proto_item_add_subtree(qro_subtree_item, ett_qmgmt_qro); |
4584 | 1 | 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); |
4585 | 1 | len_dissected += L_UMQ_QMGMT_QRO_HDR_T; |
4586 | 1 | curr_offset += L_UMQ_QMGMT_QRO_HDR_T; |
4587 | 1 | } |
4588 | 1 | break; |
4589 | 24 | default: |
4590 | 24 | expert_add_info_format(pinfo, NULL, &ei_lbmr_analysis_invalid_value, "Unknown LBMR QMGMT packet type 0x%02x", pckt_type); |
4591 | 24 | break; |
4592 | 34 | } |
4593 | 29 | if ((flags_val & UMQ_QMGMT_HDR_N_FLAG) != 0) |
4594 | 9 | { |
4595 | 9 | int qnamelen = tvb_reported_length_remaining(tvb, curr_offset); |
4596 | 9 | if (qnamelen > 1) |
4597 | 9 | { |
4598 | 9 | proto_tree_add_item(tree, hf_qmgmt_qname, tvb, curr_offset, qnamelen, ENC_ASCII); |
4599 | 9 | } |
4600 | 9 | len_dissected += qnamelen; |
4601 | 9 | } |
4602 | 29 | return (len_dissected); |
4603 | 34 | } |
4604 | | |
4605 | | /*----------------------------------------------------------------------------*/ |
4606 | | /* LBMR ContextInfo dissection functions. */ |
4607 | | /*----------------------------------------------------------------------------*/ |
4608 | | static int dissect_lbmr_ctxinfo(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree * tree) |
4609 | 0 | { |
4610 | 0 | uint16_t flags16 = 0; |
4611 | 0 | uint8_t reclen = 0; |
4612 | 0 | static int * const flags[] = |
4613 | 0 | { |
4614 | 0 | &hf_lbmr_ctxinfo_flags_query, |
4615 | 0 | &hf_lbmr_ctxinfo_flags_ip, |
4616 | 0 | &hf_lbmr_ctxinfo_flags_instance, |
4617 | 0 | &hf_lbmr_ctxinfo_flags_tnwg_src, |
4618 | 0 | &hf_lbmr_ctxinfo_flags_tnwg_rcv, |
4619 | 0 | &hf_lbmr_ctxinfo_flags_proxy, |
4620 | 0 | &hf_lbmr_ctxinfo_flags_name, |
4621 | 0 | NULL |
4622 | 0 | }; |
4623 | |
|
4624 | 0 | flags16 = tvb_get_ntohs(tvb, offset + O_LBMR_CTXINFO_T_FLAGS); |
4625 | 0 | reclen = tvb_get_uint8(tvb, offset + O_LBMR_CTXINFO_T_LEN); |
4626 | 0 | proto_tree_add_item(tree, hf_lbmr_ctxinfo_len, tvb, offset + O_LBMR_CTXINFO_T_LEN, L_LBMR_CTXINFO_T_LEN, ENC_BIG_ENDIAN); |
4627 | 0 | 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); |
4628 | 0 | proto_tree_add_bitmask(tree, tvb, offset + O_LBMR_CTXINFO_T_FLAGS, hf_lbmr_ctxinfo_flags, ett_lbmr_ctxinfo_flags, flags, ENC_BIG_ENDIAN); |
4629 | 0 | proto_tree_add_item(tree, hf_lbmr_ctxinfo_port, tvb, offset + O_LBMR_CTXINFO_T_PORT, L_LBMR_CTXINFO_T_FLAGS, ENC_BIG_ENDIAN); |
4630 | 0 | proto_tree_add_item(tree, hf_lbmr_ctxinfo_ip, tvb, offset + O_LBMR_CTXINFO_T_IP, L_LBMR_CTXINFO_T_IP, ENC_BIG_ENDIAN); |
4631 | 0 | proto_tree_add_item(tree, hf_lbmr_ctxinfo_instance, tvb, offset + O_LBMR_CTXINFO_T_INSTANCE, L_LBMR_CTXINFO_T_INSTANCE, ENC_NA); |
4632 | 0 | if ((flags16 & LBMR_CTXINFO_NAME_FLAG) != 0) |
4633 | 0 | { |
4634 | 0 | proto_tree_add_item(tree, hf_lbmr_ctxinfo_name, tvb, offset + L_LBMR_CTXINFO_T, reclen - L_LBMR_CTXINFO_T, ENC_ASCII); |
4635 | 0 | } |
4636 | 0 | return ((int)reclen); |
4637 | 0 | } |
4638 | | |
4639 | | /*----------------------------------------------------------------------------*/ |
4640 | | /* LBMR Topic Res Request dissection functions. */ |
4641 | | /*----------------------------------------------------------------------------*/ |
4642 | | static int dissect_lbmr_topic_res_request(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree * tree) |
4643 | 0 | { |
4644 | 0 | static int * const flags[] = |
4645 | 0 | { |
4646 | 0 | &hf_lbmr_topic_res_request_flags_gw_remote_interest, |
4647 | 0 | &hf_lbmr_topic_res_request_flags_context_query, |
4648 | 0 | &hf_lbmr_topic_res_request_flags_context_advertisement, |
4649 | 0 | &hf_lbmr_topic_res_request_flags_gateway_meta, |
4650 | 0 | &hf_lbmr_topic_res_request_flags_advertisement, |
4651 | 0 | &hf_lbmr_topic_res_request_flags_query, |
4652 | 0 | &hf_lbmr_topic_res_request_flags_wildcard_query, |
4653 | 0 | NULL |
4654 | 0 | }; |
4655 | |
|
4656 | 0 | 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); |
4657 | 0 | return (L_LBMR_TOPIC_RES_REQUEST_T); |
4658 | 0 | } |
4659 | | |
4660 | | /*----------------------------------------------------------------------------*/ |
4661 | | /* LBMR Remote Domain Route dissection functions. */ |
4662 | | /*----------------------------------------------------------------------------*/ |
4663 | | static int dissect_lbmr_remote_domain_route(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree * tree) |
4664 | 0 | { |
4665 | 0 | uint16_t num_domains; |
4666 | 0 | int len_dissected = 0; |
4667 | 0 | int ofs = 0; |
4668 | 0 | uint16_t idx; |
4669 | |
|
4670 | 0 | num_domains = tvb_get_ntohs(tvb, offset + O_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T_NUM_DOMAINS); |
4671 | 0 | 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); |
4672 | 0 | 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); |
4673 | 0 | 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); |
4674 | 0 | 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); |
4675 | 0 | 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); |
4676 | 0 | len_dissected = L_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T; |
4677 | 0 | ofs = offset + L_LBMR_REMOTE_DOMAIN_ROUTE_HDR_T; |
4678 | 0 | for (idx = 0; idx < num_domains; ++idx) |
4679 | 0 | { |
4680 | 0 | proto_tree_add_item(tree, hf_lbmr_remote_domain_route_hdr_domain, tvb, ofs, sizeof(lbm_uint32_t), ENC_BIG_ENDIAN); |
4681 | 0 | len_dissected += (int)sizeof(lbm_uint32_t); |
4682 | 0 | ofs += (int)sizeof(lbm_uint32_t); |
4683 | 0 | } |
4684 | 0 | return (len_dissected); |
4685 | 0 | } |
4686 | | |
4687 | | /*----------------------------------------------------------------------------*/ |
4688 | | /* LBMR Remote ContextInfo option dissection functions. */ |
4689 | | /*----------------------------------------------------------------------------*/ |
4690 | | static int dissect_lbmr_rctxinfo_rec_address_opt(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree * tree) |
4691 | 0 | { |
4692 | 0 | proto_tree * subtree = NULL; |
4693 | 0 | proto_item * subtree_item = NULL; |
4694 | |
|
4695 | 0 | subtree_item = proto_tree_add_item(tree, hf_lbmr_rctxinfo_rec_address, tvb, offset, L_LBMR_RCTXINFO_REC_ADDRESS_OPT_T, ENC_NA); |
4696 | 0 | subtree = proto_item_add_subtree(subtree_item, ett_lbmr_rctxinfo_rec_address); |
4697 | 0 | 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); |
4698 | 0 | 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); |
4699 | 0 | 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); |
4700 | 0 | 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); |
4701 | 0 | 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); |
4702 | 0 | 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); |
4703 | 0 | 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); |
4704 | 0 | return ((int)L_LBMR_RCTXINFO_REC_ADDRESS_OPT_T); |
4705 | 0 | } |
4706 | | |
4707 | | static int dissect_lbmr_rctxinfo_rec_instance_opt(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree * tree) |
4708 | 0 | { |
4709 | 0 | proto_tree * subtree = NULL; |
4710 | 0 | proto_item * subtree_item = NULL; |
4711 | 0 | uint8_t len = 0; |
4712 | |
|
4713 | 0 | len = tvb_get_uint8(tvb, offset + O_LBMR_RCTXINFO_REC_INSTANCE_OPT_T_LEN); |
4714 | 0 | subtree_item = proto_tree_add_item(tree, hf_lbmr_rctxinfo_rec_instance, tvb, offset, (int)len, ENC_NA); |
4715 | 0 | subtree = proto_item_add_subtree(subtree_item, ett_lbmr_rctxinfo_rec_instance); |
4716 | 0 | 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); |
4717 | 0 | 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); |
4718 | 0 | 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); |
4719 | 0 | 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); |
4720 | 0 | return ((int)L_LBMR_RCTXINFO_REC_INSTANCE_OPT_T); |
4721 | 0 | } |
4722 | | |
4723 | | static int dissect_lbmr_rctxinfo_rec_odomain_opt(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree * tree) |
4724 | 0 | { |
4725 | 0 | proto_tree * subtree = NULL; |
4726 | 0 | proto_item * subtree_item = NULL; |
4727 | 0 | uint8_t len = 0; |
4728 | |
|
4729 | 0 | len = tvb_get_uint8(tvb, offset + O_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T_LEN); |
4730 | 0 | subtree_item = proto_tree_add_item(tree, hf_lbmr_rctxinfo_rec_odomain, tvb, offset, (int)len, ENC_NA); |
4731 | 0 | subtree = proto_item_add_subtree(subtree_item, ett_lbmr_rctxinfo_rec_odomain); |
4732 | 0 | 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); |
4733 | 0 | 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); |
4734 | 0 | 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); |
4735 | 0 | 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); |
4736 | 0 | return ((int)L_LBMR_RCTXINFO_REC_ODOMAIN_OPT_T); |
4737 | 0 | } |
4738 | | |
4739 | | static int dissect_lbmr_rctxinfo_rec_name_opt(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree * tree) |
4740 | 0 | { |
4741 | 0 | proto_tree * subtree = NULL; |
4742 | 0 | proto_item * subtree_item = NULL; |
4743 | 0 | uint8_t len = 0; |
4744 | 0 | int name_len = 0; |
4745 | |
|
4746 | 0 | len = tvb_get_uint8(tvb, offset + O_LBMR_RCTXINFO_REC_NAME_OPT_T_LEN); |
4747 | 0 | subtree_item = proto_tree_add_item(tree, hf_lbmr_rctxinfo_rec_name, tvb, offset, (int)len, ENC_NA); |
4748 | 0 | subtree = proto_item_add_subtree(subtree_item, ett_lbmr_rctxinfo_rec_name); |
4749 | 0 | 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); |
4750 | 0 | 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); |
4751 | 0 | 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); |
4752 | 0 | name_len = ((int)len) - L_LBMR_RCTXINFO_REC_NAME_OPT_T; |
4753 | 0 | proto_tree_add_item(subtree, hf_lbmr_rctxinfo_rec_name_name, tvb, offset + L_LBMR_RCTXINFO_REC_NAME_OPT_T, name_len, ENC_ASCII); |
4754 | 0 | return ((int)len); |
4755 | 0 | } |
4756 | | |
4757 | | static int dissect_lbmr_rctxinfo_rec_unknown_opt(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree * tree) |
4758 | 0 | { |
4759 | 0 | proto_tree * subtree = NULL; |
4760 | 0 | proto_item * subtree_item = NULL; |
4761 | 0 | uint8_t len = 0; |
4762 | 0 | int data_len = 0; |
4763 | 0 | uint8_t opt_type; |
4764 | |
|
4765 | 0 | opt_type = tvb_get_uint8(tvb, offset + O_LBMR_RCTXINFO_REC_OPT_T_TYPE); |
4766 | 0 | len = tvb_get_uint8(tvb, offset + O_LBMR_RCTXINFO_REC_OPT_T_LEN); |
4767 | 0 | subtree_item = proto_tree_add_item(tree, hf_lbmr_rctxinfo_rec_unknown, tvb, offset, (int)len, ENC_NA); |
4768 | 0 | subtree = proto_item_add_subtree(subtree_item, ett_lbmr_rctxinfo_rec_unknown); |
4769 | 0 | 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); |
4770 | 0 | 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); |
4771 | 0 | 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); |
4772 | 0 | data_len = ((int) len) - L_LBMR_RCTXINFO_REC_OPT_T; |
4773 | 0 | proto_tree_add_item(subtree, hf_lbmr_rctxinfo_rec_unknown_data, tvb, offset + L_LBMR_RCTXINFO_REC_OPT_T, data_len, ENC_NA); |
4774 | 0 | expert_add_info_format(pinfo, subtree_item, &ei_lbmr_analysis_invalid_value, "Unknown LBMR RCTXINFO option 0x%02x", opt_type); |
4775 | 0 | return ((int) len); |
4776 | 0 | } |
4777 | | |
4778 | | /*----------------------------------------------------------------------------*/ |
4779 | | /* LBMR Remote ContextInfo dissection functions. */ |
4780 | | /*----------------------------------------------------------------------------*/ |
4781 | | static int dissect_lbmr_rctxinfo_rec(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree * tree) |
4782 | 0 | { |
4783 | 0 | proto_tree * subtree = NULL; |
4784 | 0 | proto_item * subtree_item = NULL; |
4785 | 0 | uint8_t opt_type = 0; |
4786 | 0 | static int * const flags[] = |
4787 | 0 | { |
4788 | 0 | &hf_lbmr_rctxinfo_rec_flags_query, |
4789 | 0 | NULL |
4790 | 0 | }; |
4791 | 0 | uint16_t len = 0; |
4792 | 0 | int rec_len_remaining = 0; |
4793 | 0 | int ofs = 0; |
4794 | 0 | int opt_len_dissected = 0; |
4795 | 0 | int len_dissected = 0; |
4796 | |
|
4797 | 0 | len = tvb_get_ntohs(tvb, offset + O_LBMR_RCTXINFO_REC_T_LEN); |
4798 | 0 | subtree_item = proto_tree_add_item(tree, hf_lbmr_rctxinfo_rec, tvb, offset, -1, ENC_NA); |
4799 | 0 | subtree = proto_item_add_subtree(subtree_item, ett_lbmr_rctxinfo_rec); |
4800 | 0 | 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); |
4801 | 0 | 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); |
4802 | 0 | ofs = offset + L_LBMR_RCTXINFO_REC_T; |
4803 | 0 | rec_len_remaining = len - L_LBMR_RCTXINFO_REC_T; |
4804 | 0 | len_dissected = L_LBMR_RCTXINFO_REC_T; |
4805 | 0 | while (rec_len_remaining > 0) |
4806 | 0 | { |
4807 | 0 | opt_type = tvb_get_uint8(tvb, ofs + O_LBMR_RCTXINFO_REC_OPT_T_TYPE); |
4808 | 0 | switch (opt_type) |
4809 | 0 | { |
4810 | 0 | case LBMR_RCTXINFO_OPT_ADDRESS_TYPE: |
4811 | 0 | opt_len_dissected = dissect_lbmr_rctxinfo_rec_address_opt(tvb, ofs, pinfo, subtree); |
4812 | 0 | break; |
4813 | 0 | case LBMR_RCTXINFO_OPT_INSTANCE_TYPE: |
4814 | 0 | opt_len_dissected = dissect_lbmr_rctxinfo_rec_instance_opt(tvb, ofs, pinfo, subtree); |
4815 | 0 | break; |
4816 | 0 | case LBMR_RCTXINFO_OPT_ODOMAIN_TYPE: |
4817 | 0 | opt_len_dissected = dissect_lbmr_rctxinfo_rec_odomain_opt(tvb, ofs, pinfo, subtree); |
4818 | 0 | break; |
4819 | 0 | case LBMR_RCTXINFO_OPT_NAME_TYPE: |
4820 | 0 | opt_len_dissected = dissect_lbmr_rctxinfo_rec_name_opt(tvb, ofs, pinfo, subtree); |
4821 | 0 | break; |
4822 | 0 | default: |
4823 | 0 | opt_len_dissected = dissect_lbmr_rctxinfo_rec_unknown_opt(tvb, ofs, pinfo, subtree); |
4824 | 0 | break; |
4825 | 0 | } |
4826 | 0 | len_dissected += opt_len_dissected; |
4827 | 0 | rec_len_remaining -= opt_len_dissected; |
4828 | 0 | ofs += opt_len_dissected; |
4829 | 0 | } |
4830 | 0 | proto_item_set_len(subtree_item, len_dissected); |
4831 | 0 | return (len_dissected); |
4832 | 0 | } |
4833 | | |
4834 | | static int dissect_lbmr_rctxinfo(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree * tree) |
4835 | 0 | { |
4836 | 0 | uint16_t num_recs = 0; |
4837 | 0 | int ofs = 0; |
4838 | 0 | int len_dissected = 0; |
4839 | 0 | int rec_len_dissected = 0; |
4840 | |
|
4841 | 0 | num_recs = tvb_get_ntohs(tvb, offset + O_LBMR_RCTXINFO_T_NUM_RECS); |
4842 | 0 | proto_tree_add_item(tree, hf_lbmr_rctxinfo_len, tvb, offset + O_LBMR_RCTXINFO_T_LEN, L_LBMR_RCTXINFO_T_LEN, ENC_BIG_ENDIAN); |
4843 | 0 | 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); |
4844 | 0 | proto_tree_add_item(tree, hf_lbmr_rctxinfo_reserved, tvb, offset + O_LBMR_RCTXINFO_T_RESERVED, L_LBMR_RCTXINFO_T_RESERVED, ENC_BIG_ENDIAN); |
4845 | 0 | len_dissected = L_LBMR_RCTXINFO_T; |
4846 | 0 | ofs = offset + L_LBMR_RCTXINFO_T; |
4847 | 0 | while (num_recs > 0) |
4848 | 0 | { |
4849 | 0 | rec_len_dissected = dissect_lbmr_rctxinfo_rec(tvb, ofs, pinfo, tree); |
4850 | 0 | ofs += rec_len_dissected; |
4851 | 0 | len_dissected += rec_len_dissected; |
4852 | 0 | num_recs--; |
4853 | 0 | } |
4854 | 0 | return (len_dissected); |
4855 | 0 | } |
4856 | | |
4857 | | static proto_item * format_ver_type(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree * tree) |
4858 | 0 | { |
4859 | 0 | proto_item * type_item = NULL; |
4860 | |
|
4861 | 0 | 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); |
4862 | 0 | 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); |
4863 | 0 | 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); |
4864 | 0 | return (type_item); |
4865 | 0 | } |
4866 | | |
4867 | | /*----------------------------------------------------------------------------*/ |
4868 | | /* LBMR Option dissection functions. */ |
4869 | | /*----------------------------------------------------------------------------*/ |
4870 | | static int dissect_lbmr_opt_len(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree * tree) |
4871 | 0 | { |
4872 | 0 | proto_tree * subtree = NULL; |
4873 | 0 | proto_item * subtree_item = NULL; |
4874 | 0 | int len = 0; |
4875 | |
|
4876 | 0 | subtree_item = proto_tree_add_item(tree, hf_lbmr_opt_len, tvb, offset, L_LBMR_LBMR_OPT_SRC_ID_T, ENC_NA); |
4877 | 0 | subtree = proto_item_add_subtree(subtree_item, ett_lbmr_opt_len); |
4878 | 0 | 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); |
4879 | 0 | 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); |
4880 | 0 | 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); |
4881 | 0 | len = L_LBMR_LBMR_OPT_LEN_T; |
4882 | 0 | return (len); |
4883 | 0 | } |
4884 | | |
4885 | | static int dissect_lbmr_opt_src_id(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree * tree) |
4886 | 0 | { |
4887 | 0 | proto_tree * subtree = NULL; |
4888 | 0 | proto_item * subtree_item = NULL; |
4889 | 0 | static int * const flags[] = |
4890 | 0 | { |
4891 | 0 | &hf_lbmr_opt_src_id_flags_ignore, |
4892 | 0 | NULL |
4893 | 0 | }; |
4894 | |
|
4895 | 0 | subtree_item = proto_tree_add_item(tree, hf_lbmr_opt_src_id, tvb, offset, L_LBMR_LBMR_OPT_SRC_ID_T, ENC_NA); |
4896 | 0 | subtree = proto_item_add_subtree(subtree_item, ett_lbmr_opt_src_id); |
4897 | 0 | 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); |
4898 | 0 | 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); |
4899 | 0 | 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); |
4900 | 0 | 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); |
4901 | 0 | return (L_LBMR_LBMR_OPT_SRC_ID_T); |
4902 | 0 | } |
4903 | | |
4904 | | static int dissect_lbmr_opt_src_type(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree * tree) |
4905 | 0 | { |
4906 | 0 | proto_tree * subtree = NULL; |
4907 | 0 | proto_item * subtree_item = NULL; |
4908 | 0 | static int * const flags[] = |
4909 | 0 | { |
4910 | 0 | &hf_lbmr_opt_src_type_flags_ignore, |
4911 | 0 | NULL |
4912 | 0 | }; |
4913 | |
|
4914 | 0 | subtree_item = proto_tree_add_item(tree, hf_lbmr_opt_src_type, tvb, offset, L_LBMR_LBMR_OPT_SRC_TYPE_T, ENC_NA); |
4915 | 0 | subtree = proto_item_add_subtree(subtree_item, ett_lbmr_opt_src_type); |
4916 | 0 | 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); |
4917 | 0 | 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); |
4918 | 0 | 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); |
4919 | 0 | 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); |
4920 | 0 | return (L_LBMR_LBMR_OPT_SRC_TYPE_T); |
4921 | 0 | } |
4922 | | |
4923 | | static int dissect_lbmr_opt_version(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree * tree) |
4924 | 0 | { |
4925 | 0 | proto_tree * subtree = NULL; |
4926 | 0 | proto_item * subtree_item = NULL; |
4927 | 0 | static int * const flags[] = |
4928 | 0 | { |
4929 | 0 | &hf_lbmr_opt_version_flags_ignore, |
4930 | 0 | &hf_lbmr_opt_version_flags_ume, |
4931 | 0 | &hf_lbmr_opt_version_flags_umq, |
4932 | 0 | NULL |
4933 | 0 | }; |
4934 | |
|
4935 | 0 | subtree_item = proto_tree_add_item(tree, hf_lbmr_opt_version, tvb, offset, L_LBMR_LBMR_OPT_VERSION_T, ENC_NA); |
4936 | 0 | subtree = proto_item_add_subtree(subtree_item, ett_lbmr_opt_version); |
4937 | 0 | 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); |
4938 | 0 | 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); |
4939 | 0 | 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); |
4940 | 0 | 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); |
4941 | 0 | return (L_LBMR_LBMR_OPT_VERSION_T); |
4942 | 0 | } |
4943 | | |
4944 | | static int dissect_lbmr_opt_local_domain(tvbuff_t * tvb, int offset, packet_info * pinfo _U_, proto_tree * tree) |
4945 | 0 | { |
4946 | 0 | proto_tree * subtree = NULL; |
4947 | 0 | proto_item * subtree_item = NULL; |
4948 | 0 | static int * const flags[] = |
4949 | 0 | { |
4950 | 0 | &hf_lbmr_opt_local_domain_flags_ignore, |
4951 | 0 | &hf_lbmr_opt_local_domain_flags_viral, |
4952 | 0 | NULL |
4953 | 0 | }; |
4954 | |
|
4955 | 0 | subtree_item = proto_tree_add_item(tree, hf_lbmr_opt_local_domain, tvb, offset, L_LBMR_LBMR_OPT_LOCAL_DOMAIN_T, ENC_NA); |
4956 | 0 | subtree = proto_item_add_subtree(subtree_item, ett_lbmr_opt_local_domain); |
4957 | 0 | 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); |
4958 | 0 | 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); |
4959 | 0 | 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); |
4960 | 0 | 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); |
4961 | 0 | return (L_LBMR_LBMR_OPT_LOCAL_DOMAIN_T); |
4962 | 0 | } |
4963 | | |
4964 | | static int dissect_lbmr_opt_unknown(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree * tree) |
4965 | 0 | { |
4966 | 0 | proto_tree * subtree = NULL; |
4967 | 0 | proto_item * subtree_item = NULL; |
4968 | 0 | uint8_t len = 0; |
4969 | 0 | proto_item * type_item = NULL; |
4970 | 0 | uint8_t opt_type = 0; |
4971 | |
|
4972 | 0 | subtree_item = proto_tree_add_item(tree, hf_lbmr_opt_unknown, tvb, offset, -1, ENC_NA); |
4973 | 0 | subtree = proto_item_add_subtree(subtree_item, ett_lbmr_opt_unknown); |
4974 | 0 | opt_type = tvb_get_uint8(tvb, offset + O_LBMR_LBMR_OPT_HDR_T_TYPE); |
4975 | 0 | 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); |
4976 | 0 | len = tvb_get_uint8(tvb, offset + O_LBMR_LBMR_OPT_HDR_T_LEN); |
4977 | 0 | 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); |
4978 | 0 | 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); |
4979 | 0 | 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); |
4980 | 0 | proto_item_set_len(subtree_item, (int) len); |
4981 | 0 | expert_add_info_format(pinfo, type_item, &ei_lbmr_analysis_invalid_value, "Unknown LBMR option type 0x%02x", opt_type); |
4982 | 0 | return ((int) len); |
4983 | 0 | } |
4984 | | |
4985 | | static int dissect_lbmr_options(tvbuff_t * tvb, int offset, packet_info * pinfo, proto_tree * tree) |
4986 | 0 | { |
4987 | 0 | proto_tree * opt_tree = NULL; |
4988 | 0 | proto_item * ti = NULL; |
4989 | 0 | int curr_offset = offset; |
4990 | 0 | int len = 0; |
4991 | |
|
4992 | 0 | ti = proto_tree_add_item(tree, hf_lbmr_opts, tvb, curr_offset, -1, ENC_NA); |
4993 | 0 | opt_tree = proto_item_add_subtree(ti, ett_lbmr_opts); |
4994 | 0 | while (tvb_reported_length_remaining(tvb, curr_offset) > 0) |
4995 | 0 | { |
4996 | 0 | int opt_len; |
4997 | 0 | uint8_t opt_type; |
4998 | |
|
4999 | 0 | opt_type = tvb_get_uint8(tvb, curr_offset + O_LBMR_LBMR_OPT_HDR_T_TYPE); |
5000 | 0 | switch (opt_type) |
5001 | 0 | { |
5002 | 0 | case LBMR_LBMR_OPT_LEN_TYPE: |
5003 | 0 | opt_len = dissect_lbmr_opt_len(tvb, curr_offset, pinfo, opt_tree); |
5004 | 0 | break; |
5005 | 0 | case LBMR_LBMR_OPT_SRC_ID_TYPE: |
5006 | 0 | opt_len = dissect_lbmr_opt_src_id(tvb, curr_offset, pinfo, opt_tree); |
5007 | 0 | break; |
5008 | 0 | case LBMR_LBMR_OPT_SRC_TYPE_TYPE: |
5009 | 0 | opt_len = dissect_lbmr_opt_src_type(tvb, curr_offset, pinfo, opt_tree); |
5010 | 0 | break; |
5011 | 0 | case LBMR_LBMR_OPT_VERSION_TYPE: |
5012 | 0 | opt_len = dissect_lbmr_opt_version(tvb, curr_offset, pinfo, opt_tree); |
5013 | 0 | break; |
5014 | 0 | case LBMR_LBMR_OPT_LOCAL_DOMAIN_TYPE: |
5015 | 0 | opt_len = dissect_lbmr_opt_local_domain(tvb, curr_offset, pinfo, opt_tree); |
5016 | 0 | break; |
5017 | 0 | default: |
5018 | 0 | opt_len = dissect_lbmr_opt_unknown(tvb, curr_offset, pinfo, opt_tree); |
5019 | 0 | break; |
5020 | 0 | } |
5021 | 0 | len += opt_len; |
5022 | 0 | curr_offset += opt_len; |
5023 | 0 | } |
5024 | 0 | return (len); |
5025 | 0 | } |
5026 | | |
5027 | | static void lbmr_tap_queue_packet(packet_info * pinfo, const lbmr_contents_t * contents) |
5028 | 0 | { |
5029 | 0 | const lbmr_topic_contents_t * topic; |
5030 | 0 | const lbmr_queue_contents_t * queue; |
5031 | |
|
5032 | 0 | switch (contents->type) |
5033 | 0 | { |
5034 | 0 | case LBMR_CONTENTS_TOPIC: |
5035 | 0 | topic = &(contents->contents.topic); |
5036 | 0 | if (topic->tqr_count > 0) |
5037 | 0 | { |
5038 | 0 | tqr_node_t * tqr = topic->tqr; |
5039 | 0 | while (tqr != NULL) |
5040 | 0 | { |
5041 | 0 | lbm_lbmr_topic_query_tap_info_t * tqr_tap = wmem_new0(pinfo->pool, lbm_lbmr_topic_query_tap_info_t); |
5042 | 0 | tqr_tap->size = (uint16_t) sizeof(lbm_lbmr_topic_query_tap_info_t); |
5043 | 0 | tqr_tap->topic_length = (uint8_t)strlen(tqr->topic); |
5044 | 0 | memcpy(tqr_tap->topic, tqr->topic, tqr_tap->topic_length); |
5045 | 0 | tap_queue_packet(lbmr_topic_query_tap_handle, pinfo, (void *) tqr_tap); |
5046 | 0 | tqr = tqr->next; |
5047 | 0 | } |
5048 | 0 | } |
5049 | 0 | if (topic->tir_count > 0) |
5050 | 0 | { |
5051 | 0 | tir_node_t * tir = topic->tir; |
5052 | 0 | while (tir != NULL) |
5053 | 0 | { |
5054 | 0 | lbm_lbmr_topic_advertisement_tap_info_t * tir_tap = wmem_new0(pinfo->pool, lbm_lbmr_topic_advertisement_tap_info_t); |
5055 | 0 | tir_tap->size = (uint16_t) sizeof(lbm_lbmr_topic_advertisement_tap_info_t); |
5056 | 0 | tir_tap->topic_length = (uint8_t)strlen(tir->topic); |
5057 | 0 | tir_tap->source_length = (uint8_t)strlen(tir->source_string); |
5058 | 0 | tir_tap->topic_index = tir->idx; |
5059 | 0 | memcpy(tir_tap->topic, tir->topic, tir_tap->topic_length); |
5060 | 0 | memcpy(tir_tap->source, tir->source_string, tir_tap->source_length); |
5061 | 0 | tap_queue_packet(lbmr_topic_advertisement_tap_handle, pinfo, (void *) tir_tap); |
5062 | 0 | tir = tir->next; |
5063 | 0 | } |
5064 | 0 | } |
5065 | 0 | if (topic->wctqr_count > 0) |
5066 | 0 | { |
5067 | 0 | wctqr_node_t * wctqr = topic->wctqr; |
5068 | 0 | while (wctqr != NULL) |
5069 | 0 | { |
5070 | 0 | lbm_lbmr_pattern_query_tap_info_t * wctqr_tap = wmem_new0(pinfo->pool, lbm_lbmr_pattern_query_tap_info_t); |
5071 | 0 | wctqr_tap->size = (uint16_t) sizeof(lbm_lbmr_pattern_query_tap_info_t); |
5072 | 0 | wctqr_tap->type = wctqr->type; |
5073 | 0 | wctqr_tap->pattern_length = (uint8_t)strlen(wctqr->pattern); |
5074 | 0 | memcpy(wctqr_tap->pattern, wctqr->pattern, wctqr_tap->pattern_length); |
5075 | 0 | tap_queue_packet(lbmr_pattern_query_tap_handle, pinfo, (void *) wctqr_tap); |
5076 | 0 | wctqr = wctqr->next; |
5077 | 0 | } |
5078 | 0 | } |
5079 | 0 | break; |
5080 | 0 | case LBMR_CONTENTS_QUEUE: |
5081 | 0 | queue = &(contents->contents.queue); |
5082 | 0 | if (queue->qqr_count > 0) |
5083 | 0 | { |
5084 | 0 | qqr_node_t * qqr = queue->qqr; |
5085 | 0 | while (qqr != NULL) |
5086 | 0 | { |
5087 | 0 | lbm_lbmr_queue_query_tap_info_t * qqr_tap = wmem_new0(pinfo->pool, lbm_lbmr_queue_query_tap_info_t); |
5088 | 0 | qqr_tap->size = (uint16_t) sizeof(lbm_lbmr_queue_query_tap_info_t); |
5089 | 0 | qqr_tap->queue_length = (uint8_t)strlen(qqr->queue); |
5090 | 0 | memcpy(qqr_tap->queue, qqr->queue, qqr_tap->queue_length); |
5091 | 0 | tap_queue_packet(lbmr_queue_advertisement_tap_handle, pinfo, (void *) qqr_tap); |
5092 | 0 | qqr = qqr->next; |
5093 | 0 | } |
5094 | 0 | } |
5095 | 0 | if (queue->qir_count > 0) |
5096 | 0 | { |
5097 | 0 | qir_node_t * qir = queue->qir; |
5098 | 0 | while (qir != NULL) |
5099 | 0 | { |
5100 | 0 | lbm_lbmr_queue_advertisement_tap_info_t * qir_tap = wmem_new0(pinfo->pool, lbm_lbmr_queue_advertisement_tap_info_t); |
5101 | 0 | qir_tap->size = (uint16_t) sizeof(lbm_lbmr_queue_advertisement_tap_info_t); |
5102 | 0 | qir_tap->port = qir->port; |
5103 | 0 | qir_tap->queue_length = (uint8_t)strlen(qir->queue); |
5104 | 0 | qir_tap->topic_length = (uint8_t)strlen(qir->topic); |
5105 | 0 | memcpy(qir_tap->queue, qir->queue, qir_tap->queue_length); |
5106 | 0 | memcpy(qir_tap->topic, qir->topic, qir_tap->topic_length); |
5107 | 0 | tap_queue_packet(lbmr_queue_query_tap_handle, pinfo, (void *) qir_tap); |
5108 | 0 | qir = qir->next; |
5109 | 0 | } |
5110 | 0 | } |
5111 | 0 | break; |
5112 | 0 | default: |
5113 | 0 | break; |
5114 | 0 | } |
5115 | 0 | } |
5116 | | |
5117 | | /*----------------------------------------------------------------------------*/ |
5118 | | /* dissect_lbmr - The dissector for LBM Topic Resolution protocol. */ |
5119 | | /*----------------------------------------------------------------------------*/ |
5120 | | static int dissect_lbmr(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void * user_data _U_) |
5121 | 0 | { |
5122 | 0 | proto_tree * lbmr_tree = NULL; |
5123 | 0 | proto_item * ti = NULL; |
5124 | 0 | int offset = 0; |
5125 | 0 | uint8_t ver_type; |
5126 | 0 | uint8_t ver; |
5127 | 0 | uint8_t type; |
5128 | 0 | lbmr_contents_t * contents = NULL; |
5129 | 0 | char * tag_name = NULL; |
5130 | 0 | int total_len_dissected = 0; |
5131 | 0 | int len_dissected = 0; |
5132 | 0 | tvbuff_t * packet_tvb = NULL; |
5133 | 0 | proto_item * lbmr_hdr_item = NULL; |
5134 | 0 | proto_tree * lbmr_hdr_tree = NULL; |
5135 | |
|
5136 | 0 | col_set_str(pinfo->cinfo, COL_PROTOCOL, "LBMR"); |
5137 | 0 | if (lbmr_use_tag) |
5138 | 0 | { |
5139 | 0 | tag_name = lbmr_tag_find(pinfo); |
5140 | 0 | } |
5141 | 0 | col_clear(pinfo->cinfo, COL_INFO); |
5142 | 0 | if (tag_name != NULL) |
5143 | 0 | { |
5144 | 0 | col_add_fstr(pinfo->cinfo, COL_INFO, "[Tag: %s]", tag_name); |
5145 | 0 | } |
5146 | 0 | col_set_fence(pinfo->cinfo, COL_INFO); |
5147 | |
|
5148 | 0 | ver_type = tvb_get_uint8(tvb, O_LBMR_HDR_T_VER_TYPE); |
5149 | 0 | ver = LBMR_HDR_VER(ver_type); |
5150 | 0 | type = LBMR_HDR_TYPE(ver_type); |
5151 | 0 | offset = 0; |
5152 | 0 | total_len_dissected = 0; |
5153 | 0 | packet_tvb = tvb; |
5154 | |
|
5155 | 0 | unsigned packet_len = tvb_reported_length(tvb); |
5156 | | /* The length option is at the end. Trim the options off if possible. */ |
5157 | 0 | if (((ver_type & LBMR_HDR_TYPE_OPTS_MASK) != 0) && packet_len > L_LBMR_LBMR_OPT_LEN_T && tvb_bytes_exist(tvb, 0, packet_len)) |
5158 | 0 | { |
5159 | 0 | uint8_t opt_type; |
5160 | 0 | uint8_t opt_len; |
5161 | |
|
5162 | 0 | opt_type = tvb_get_uint8(tvb, packet_len - L_LBMR_LBMR_OPT_LEN_T + O_LBMR_LBMR_OPT_LEN_T_TYPE); |
5163 | 0 | opt_len = tvb_get_uint8(tvb, packet_len - L_LBMR_LBMR_OPT_LEN_T + O_LBMR_LBMR_OPT_LEN_T_LEN); |
5164 | 0 | if ((opt_type == LBMR_LBMR_OPT_LEN_TYPE) && (((int)opt_len) == L_LBMR_LBMR_OPT_LEN_T)) |
5165 | 0 | { |
5166 | 0 | unsigned opt_total_len = 0; |
5167 | |
|
5168 | 0 | opt_total_len = tvb_get_ntohs(tvb, packet_len - L_LBMR_LBMR_OPT_LEN_T + O_LBMR_LBMR_OPT_LEN_T_TOTAL_LEN); |
5169 | 0 | if (packet_len > opt_total_len) |
5170 | 0 | { |
5171 | 0 | int tvb_len = packet_len - opt_total_len; |
5172 | |
|
5173 | 0 | packet_tvb = tvb_new_subset_length(tvb, 0, tvb_len); |
5174 | 0 | } |
5175 | 0 | } |
5176 | 0 | } |
5177 | |
|
5178 | 0 | if (type == LBMR_HDR_TYPE_EXT) |
5179 | 0 | { |
5180 | 0 | uint8_t ext_type = 0; |
5181 | 0 | const char * ext_string; |
5182 | 0 | proto_item * ext_type_item = NULL; |
5183 | |
|
5184 | 0 | ext_type = tvb_get_uint8(tvb, O_LBMR_HDR_EXT_TYPE_T_EXT_TYPE); |
5185 | 0 | ext_string = val_to_str(pinfo->pool, ext_type, lbmr_ext_packet_type, "Unknown(0x%02x)"); |
5186 | 0 | col_append_sep_fstr(pinfo->cinfo, COL_INFO, " ", "ExtType %s", ext_string); |
5187 | 0 | if (tag_name != NULL) |
5188 | 0 | { |
5189 | 0 | 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", |
5190 | 0 | tag_name, ver, type, val_to_str(pinfo->pool, type, lbmr_packet_type, "Unknown(0x%02x)"), ext_string); |
5191 | 0 | } |
5192 | 0 | else |
5193 | 0 | { |
5194 | 0 | 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", |
5195 | 0 | ver, type, val_to_str(pinfo->pool, type, lbmr_packet_type, "Unknown(0x%02x)"), ext_string); |
5196 | 0 | } |
5197 | 0 | lbmr_tree = proto_item_add_subtree(ti, ett_lbmr); |
5198 | 0 | if (tag_name != NULL) |
5199 | 0 | { |
5200 | 0 | proto_item * item = NULL; |
5201 | |
|
5202 | 0 | item = proto_tree_add_string(lbmr_tree, hf_lbmr_tag, tvb, 0, 0, tag_name); |
5203 | 0 | proto_item_set_generated(item); |
5204 | 0 | } |
5205 | 0 | lbmr_hdr_item = proto_tree_add_item(lbmr_tree, hf_lbmr_hdr, tvb, 0, -1, ENC_NA); |
5206 | 0 | lbmr_hdr_tree = proto_item_add_subtree(lbmr_hdr_item, ett_lbmr_hdr); |
5207 | 0 | (void) format_ver_type(tvb, 0, pinfo, lbmr_hdr_tree); |
5208 | 0 | 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); |
5209 | | |
5210 | | /* ver_type and ext_type have already been processed. But their dissected length is included in the individual type dissections below. */ |
5211 | 0 | switch (ext_type) |
5212 | 0 | { |
5213 | 0 | case LBMR_HDR_EXT_TYPE_UME_PROXY_SRC_ELECT: |
5214 | 0 | len_dissected = dissect_lbmr_pser(packet_tvb, offset, pinfo, lbmr_tree); |
5215 | 0 | break; |
5216 | 0 | case LBMR_HDR_EXT_TYPE_UMQ_QUEUE_MGMT: |
5217 | 0 | offset += L_LBMR_UMQ_QMGMT_HDR_T_VER_TYPE + L_LBMR_UMQ_QMGMT_HDR_T_EXT_TYPE; |
5218 | 0 | total_len_dissected += L_LBMR_UMQ_QMGMT_HDR_T_VER_TYPE + L_LBMR_UMQ_QMGMT_HDR_T_EXT_TYPE; |
5219 | 0 | len_dissected = lbmr_dissect_umq_qmgmt(packet_tvb, offset - 2, pinfo, lbmr_tree); |
5220 | 0 | break; |
5221 | 0 | case LBMR_HDR_EXT_TYPE_CONTEXT_INFO: |
5222 | 0 | len_dissected = dissect_lbmr_ctxinfo(packet_tvb, offset, pinfo, lbmr_tree); |
5223 | 0 | break; |
5224 | 0 | case LBMR_HDR_EXT_TYPE_TOPIC_RES_REQUEST: |
5225 | 0 | len_dissected = dissect_lbmr_topic_res_request(packet_tvb, offset, pinfo, lbmr_tree); |
5226 | 0 | break; |
5227 | 0 | case LBMR_HDR_EXT_TYPE_TNWG_MSG: |
5228 | 0 | len_dissected = dissect_lbmr_tnwg(packet_tvb, offset, pinfo, lbmr_tree); |
5229 | 0 | break; |
5230 | 0 | case LBMR_HDR_EXT_TYPE_REMOTE_DOMAIN_ROUTE: |
5231 | 0 | len_dissected = dissect_lbmr_remote_domain_route(packet_tvb, offset, pinfo, lbmr_tree); |
5232 | 0 | break; |
5233 | 0 | case LBMR_HDR_EXT_TYPE_REMOTE_CONTEXT_INFO: |
5234 | 0 | len_dissected = dissect_lbmr_rctxinfo(packet_tvb, offset, pinfo, lbmr_tree); |
5235 | 0 | break; |
5236 | 0 | default: |
5237 | 0 | len_dissected = L_LBMR_HDR_EXT_TYPE_T_VER_TYPE + L_LBMR_HDR_EXT_TYPE_T_EXT_TYPE; |
5238 | 0 | expert_add_info_format(pinfo, ext_type_item, &ei_lbmr_analysis_invalid_value, "Unknown LBMR extended type 0x%02x", ext_type); |
5239 | 0 | break; |
5240 | 0 | } |
5241 | 0 | offset += len_dissected; |
5242 | 0 | total_len_dissected += len_dissected; |
5243 | 0 | } |
5244 | 0 | else |
5245 | 0 | { |
5246 | 0 | uint8_t tqrs = 0; |
5247 | 0 | uint16_t tirs = 0; |
5248 | 0 | bool rd_keepalive = false; |
5249 | 0 | bool topic_mgmt = false; |
5250 | 0 | bool client_rd_keepalive = false; |
5251 | 0 | bool zero_tirs_tqrs = false; |
5252 | 0 | proto_item * type_item = NULL; |
5253 | |
|
5254 | 0 | tqrs = tvb_get_uint8(tvb, O_LBMR_HDR_T_TQRS); |
5255 | 0 | tirs = tvb_get_ntohs(tvb, O_LBMR_HDR_T_TIRS); |
5256 | 0 | if ((tqrs == 0) && (tirs == 0)) |
5257 | 0 | { |
5258 | 0 | zero_tirs_tqrs = true; |
5259 | 0 | } |
5260 | 0 | if ((type == LBMR_HDR_TYPE_NORMAL) && zero_tirs_tqrs) |
5261 | 0 | { |
5262 | 0 | rd_keepalive = true; |
5263 | 0 | } |
5264 | 0 | else if (zero_tirs_tqrs && ((type == LBMR_HDR_TYPE_UCAST_RCV_ALIVE) || (type == LBMR_HDR_TYPE_UCAST_SRC_ALIVE))) |
5265 | 0 | { |
5266 | 0 | client_rd_keepalive = true; |
5267 | 0 | } |
5268 | 0 | else if (type == LBMR_HDR_TYPE_TOPIC_MGMT) |
5269 | 0 | { |
5270 | 0 | topic_mgmt = true; |
5271 | 0 | } |
5272 | 0 | switch (type) |
5273 | 0 | { |
5274 | 0 | case LBMR_HDR_TYPE_QUEUE_RES: |
5275 | 0 | col_append_sep_fstr(pinfo->cinfo, COL_INFO, " ", "QQRs %u QIRs %" PRIu16, tqrs, tirs); |
5276 | 0 | break; |
5277 | 0 | default: |
5278 | 0 | if (rd_keepalive) |
5279 | 0 | { |
5280 | 0 | col_append_sep_str(pinfo->cinfo, COL_INFO, " ", "Unicast Resolver Keepalive"); |
5281 | 0 | } |
5282 | 0 | else if (client_rd_keepalive) |
5283 | 0 | { |
5284 | 0 | if (type == LBMR_HDR_TYPE_UCAST_RCV_ALIVE) |
5285 | 0 | { |
5286 | 0 | col_append_sep_str(pinfo->cinfo, COL_INFO, " ", "Receiver Alive"); |
5287 | 0 | } |
5288 | 0 | else |
5289 | 0 | { |
5290 | 0 | col_append_sep_str(pinfo->cinfo, COL_INFO, " ", "Source Alive"); |
5291 | 0 | } |
5292 | 0 | } |
5293 | 0 | else if (topic_mgmt) |
5294 | 0 | { |
5295 | 0 | col_append_sep_str(pinfo->cinfo, COL_INFO, " ", "Topic Management"); |
5296 | 0 | } |
5297 | 0 | else |
5298 | 0 | { |
5299 | 0 | col_append_sep_fstr(pinfo->cinfo, COL_INFO, " ", "TQRs %u TIRs %" PRIu16, tqrs, tirs); |
5300 | 0 | } |
5301 | 0 | break; |
5302 | 0 | } |
5303 | | |
5304 | 0 | switch (type) |
5305 | 0 | { |
5306 | 0 | case LBMR_HDR_TYPE_QUEUE_RES: |
5307 | 0 | if (tag_name != NULL) |
5308 | 0 | { |
5309 | 0 | 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, |
5310 | 0 | tag_name, ver, type, val_to_str(pinfo->pool, type, lbmr_packet_type, "Unknown(0x%02x)"), tqrs, tirs); |
5311 | 0 | } |
5312 | 0 | else |
5313 | 0 | { |
5314 | 0 | 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, |
5315 | 0 | ver, type, val_to_str(pinfo->pool, type, lbmr_packet_type, "Unknown(0x%02x)"), tqrs, tirs); |
5316 | 0 | } |
5317 | 0 | break; |
5318 | 0 | default: |
5319 | 0 | if (tag_name != NULL) |
5320 | 0 | { |
5321 | 0 | if (rd_keepalive) |
5322 | 0 | { |
5323 | 0 | 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", |
5324 | 0 | tag_name, ver, type, val_to_str(pinfo->pool, type, lbmr_packet_type, "Unknown(0x%02x)")); |
5325 | 0 | } |
5326 | 0 | else if (topic_mgmt) |
5327 | 0 | { |
5328 | 0 | 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", |
5329 | 0 | tag_name, ver, type, val_to_str(pinfo->pool, type, lbmr_packet_type, "Unknown(0x%02x)")); |
5330 | 0 | } |
5331 | 0 | else |
5332 | 0 | { |
5333 | 0 | 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, |
5334 | 0 | tag_name, ver, type, val_to_str(pinfo->pool, type, lbmr_packet_type, "Unknown(0x%02x)"), tqrs, tirs); |
5335 | 0 | } |
5336 | 0 | } |
5337 | 0 | else |
5338 | 0 | { |
5339 | 0 | if (rd_keepalive) |
5340 | 0 | { |
5341 | 0 | 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", |
5342 | 0 | ver, type, val_to_str(pinfo->pool, type, lbmr_packet_type, "Unknown(0x%02x)")); |
5343 | 0 | } |
5344 | 0 | else if (topic_mgmt) |
5345 | 0 | { |
5346 | 0 | 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", |
5347 | 0 | ver, type, val_to_str(pinfo->pool, type, lbmr_packet_type, "Unknown(0x%02x)")); |
5348 | 0 | } |
5349 | 0 | else |
5350 | 0 | { |
5351 | 0 | 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, |
5352 | 0 | ver, type, val_to_str(pinfo->pool, type, lbmr_packet_type, "Unknown(0x%02x)"), tqrs, tirs); |
5353 | 0 | } |
5354 | 0 | } |
5355 | 0 | break; |
5356 | 0 | } |
5357 | 0 | lbmr_tree = proto_item_add_subtree(ti, ett_lbmr); |
5358 | 0 | if (tag_name != NULL) |
5359 | 0 | { |
5360 | 0 | proto_item * item; |
5361 | 0 | item = proto_tree_add_string(lbmr_tree, hf_lbmr_tag, tvb, 0, 0, tag_name); |
5362 | 0 | proto_item_set_generated(item); |
5363 | 0 | } |
5364 | 0 | lbmr_hdr_item = proto_tree_add_item(lbmr_tree, hf_lbmr_hdr, tvb, 0, -1, ENC_NA); |
5365 | 0 | lbmr_hdr_tree = proto_item_add_subtree(lbmr_hdr_item, ett_lbmr_hdr); |
5366 | 0 | type_item = format_ver_type(tvb, 0, pinfo, lbmr_hdr_tree); |
5367 | 0 | switch (type) |
5368 | 0 | { |
5369 | 0 | case LBMR_HDR_TYPE_QUEUE_RES: |
5370 | 0 | 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); |
5371 | 0 | 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); |
5372 | 0 | break; |
5373 | 0 | default: |
5374 | 0 | 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); |
5375 | 0 | 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); |
5376 | 0 | break; |
5377 | 0 | } |
5378 | | |
5379 | 0 | offset = L_LBMR_HDR_T; |
5380 | 0 | total_len_dissected = L_LBMR_HDR_T; |
5381 | 0 | contents = wmem_new0(pinfo->pool, lbmr_contents_t); |
5382 | 0 | switch (type) |
5383 | 0 | { |
5384 | 0 | case LBMR_HDR_TYPE_QUEUE_RES: |
5385 | 0 | contents->type = LBMR_CONTENTS_QUEUE; |
5386 | 0 | if (tqrs > 0) |
5387 | 0 | { |
5388 | 0 | len_dissected = dissect_lbmr_qqrs(packet_tvb, offset, tqrs, pinfo, lbmr_tree, contents); |
5389 | 0 | total_len_dissected += len_dissected; |
5390 | 0 | offset += len_dissected; |
5391 | 0 | } |
5392 | 0 | if (tirs > 0) |
5393 | 0 | { |
5394 | 0 | len_dissected = dissect_lbmr_qirs(packet_tvb, offset, tirs, pinfo, lbmr_tree, contents); |
5395 | 0 | total_len_dissected += len_dissected; |
5396 | 0 | offset += len_dissected; |
5397 | 0 | } |
5398 | 0 | lbmr_tap_queue_packet(pinfo, contents); |
5399 | 0 | break; |
5400 | 0 | case LBMR_HDR_TYPE_NORMAL: |
5401 | 0 | case LBMR_HDR_TYPE_WC_TQRS: |
5402 | 0 | if (!rd_keepalive) |
5403 | 0 | { |
5404 | 0 | contents->type = LBMR_CONTENTS_TOPIC; |
5405 | 0 | if (tqrs > 0) |
5406 | 0 | { |
5407 | 0 | bool wc_tqrs = false; |
5408 | |
|
5409 | 0 | if (type == LBMR_HDR_TYPE_WC_TQRS) |
5410 | 0 | { |
5411 | 0 | wc_tqrs = true; |
5412 | 0 | } |
5413 | 0 | len_dissected = dissect_lbmr_tqrs(packet_tvb, offset, tqrs, pinfo, lbmr_tree, wc_tqrs, contents); |
5414 | 0 | total_len_dissected += len_dissected; |
5415 | 0 | offset += len_dissected; |
5416 | 0 | } |
5417 | 0 | if (tirs > 0) |
5418 | 0 | { |
5419 | 0 | len_dissected = dissect_lbmr_tirs(packet_tvb, offset, tirs, pinfo, lbmr_tree, "TIRs", contents); |
5420 | 0 | total_len_dissected += len_dissected; |
5421 | 0 | offset += len_dissected; |
5422 | 0 | } |
5423 | 0 | lbmr_tap_queue_packet(pinfo, contents); |
5424 | 0 | } |
5425 | 0 | break; |
5426 | 0 | case LBMR_HDR_TYPE_TOPIC_MGMT: |
5427 | 0 | len_dissected = dissect_lbmr_tmb(packet_tvb, offset, pinfo, lbmr_tree); |
5428 | 0 | total_len_dissected += len_dissected; |
5429 | 0 | offset += len_dissected; |
5430 | 0 | break; |
5431 | 0 | case LBMR_HDR_TYPE_UCAST_RCV_ALIVE: |
5432 | 0 | case LBMR_HDR_TYPE_UCAST_SRC_ALIVE: |
5433 | 0 | break; |
5434 | 0 | default: |
5435 | 0 | expert_add_info_format(pinfo, type_item, &ei_lbmr_analysis_invalid_value, "Unknown LBMR type 0x%02x", type); |
5436 | 0 | break; |
5437 | 0 | } |
5438 | 0 | } |
5439 | 0 | if ((tvb_reported_length_remaining(tvb, offset) > 0) && ((ver_type & LBMR_HDR_TYPE_OPTS_MASK) != 0)) |
5440 | 0 | { |
5441 | | /* Process LBMR packet options. */ |
5442 | 0 | len_dissected = dissect_lbmr_options(tvb, offset, pinfo, lbmr_tree); |
5443 | 0 | total_len_dissected += len_dissected; |
5444 | 0 | } |
5445 | 0 | return (total_len_dissected); |
5446 | 0 | } |
5447 | | |
5448 | | static bool test_lbmr_packet(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void * user_data _U_) |
5449 | 1.34k | { |
5450 | 1.34k | lbmr_tag_entry_t entry; |
5451 | 1.34k | bool valid_packet = false; |
5452 | | |
5453 | | /* Must be a UDP packet. */ |
5454 | 1.34k | if (pinfo->ptype != PT_UDP) |
5455 | 1 | { |
5456 | 1 | return false; |
5457 | 1 | } |
5458 | | /* Destination address must be IPV4 and 4 bytes in length. */ |
5459 | 1.34k | if ((pinfo->dst.type != AT_IPv4) || (pinfo->dst.len != 4)) |
5460 | 1.34k | { |
5461 | 1.34k | return false; |
5462 | 1.34k | } |
5463 | | |
5464 | 0 | if (lbmr_use_tag) |
5465 | 0 | { |
5466 | 0 | if (lbmr_tag_find(pinfo) != NULL) |
5467 | 0 | { |
5468 | 0 | valid_packet = true; |
5469 | 0 | } |
5470 | 0 | } |
5471 | 0 | else |
5472 | 0 | { |
5473 | 0 | entry.name = NULL; |
5474 | 0 | entry.mc_outgoing_udp_port = lbmr_mc_outgoing_udp_port; |
5475 | 0 | entry.mc_incoming_udp_port = lbmr_mc_incoming_udp_port; |
5476 | 0 | entry.mc_incoming_address = NULL; |
5477 | 0 | entry.mc_incoming_address_val_h = lbmr_mc_incoming_address_host; |
5478 | 0 | entry.mc_outgoing_address = NULL; |
5479 | 0 | entry.mc_outgoing_address_val_h = lbmr_mc_outgoing_address_host; |
5480 | 0 | entry.uc_port_high = lbmr_uc_port_high; |
5481 | 0 | entry.uc_port_low = lbmr_uc_port_low; |
5482 | 0 | entry.uc_dest_port = lbmr_uc_dest_port; |
5483 | 0 | entry.uc_address = NULL; |
5484 | 0 | entry.uc_address_val_h = lbmr_uc_address_host; |
5485 | 0 | valid_packet = lbmr_match_packet(pinfo, &entry); |
5486 | 0 | } |
5487 | 0 | if (valid_packet) |
5488 | 0 | { |
5489 | 0 | dissect_lbmr(tvb, pinfo, tree, NULL); |
5490 | 0 | return true; |
5491 | 0 | } |
5492 | 0 | return false; |
5493 | 0 | } |
5494 | | |
5495 | | /* Register all the bits needed with the filtering engine */ |
5496 | | void proto_register_lbmr(void) |
5497 | 14 | { |
5498 | 14 | static hf_register_info hf[] = |
5499 | 14 | { |
5500 | 14 | { &hf_lbmr_tag, |
5501 | 14 | { "Tag", "lbmr.tag", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5502 | 14 | { &hf_lbmr_hdr, |
5503 | 14 | { "Header", "lbmr.hdr", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5504 | 14 | { &hf_lbmr_hdr_ver, |
5505 | 14 | { "Version", "lbmr.hdr.ver", FT_UINT8, BASE_DEC, NULL, LBMR_HDR_VER_VER_MASK, NULL, HFILL } }, |
5506 | 14 | { &hf_lbmr_hdr_opt, |
5507 | 14 | { "Options", "lbmr.hdr.opts", FT_BOOLEAN, 8, TFS(&tfs_present_not_present), LBMR_HDR_TYPE_OPTS_MASK, "Set if LBMR options are present", HFILL } }, |
5508 | 14 | { &hf_lbmr_hdr_type, |
5509 | 14 | { "Type", "lbmr.hdr.type", FT_UINT8, BASE_HEX, VALS(lbmr_packet_type), LBMR_HDR_VER_TYPE_MASK, NULL, HFILL } }, |
5510 | 14 | { &hf_lbmr_hdr_tqrs, |
5511 | 14 | { "Topic Query Records", "lbmr.hdr.tqrs", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5512 | 14 | { &hf_lbmr_hdr_tirs, |
5513 | 14 | { "Topic Information Records", "lbmr.hdr.tirs", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5514 | 14 | { &hf_lbmr_hdr_qqrs, |
5515 | 14 | { "Queue Query Records", "lbmr.hdr.qqrs", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5516 | 14 | { &hf_lbmr_hdr_qirs, |
5517 | 14 | { "Queue Information Records", "lbmr.hdr.qirs", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5518 | 14 | { &hf_lbmr_hdr_ext_type, |
5519 | 14 | { "Extended Type", "lbmr.hdr.ext_type", FT_UINT8, BASE_HEX, VALS(lbmr_ext_packet_type), 0x0, NULL, HFILL } }, |
5520 | 14 | { &hf_lbmr_tqrs, |
5521 | 14 | { "TQRs", "lbmr.tqrs", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5522 | 14 | { &hf_lbmr_tqr, |
5523 | 14 | { "TQR", "lbmr.tqr", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5524 | 14 | { &hf_lbmr_tqr_pattern_type, |
5525 | 14 | { "Pattern Type", "lbmr.tqr.pattern_type", FT_UINT8, BASE_DEC, VALS(lbm_wildcard_pattern_type), 0x0, NULL, HFILL } }, |
5526 | 14 | { &hf_lbmr_tqr_pattern, |
5527 | 14 | { "Pattern", "lbmr.tqr.pattern", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5528 | 14 | { &hf_lbmr_tqr_name, |
5529 | 14 | { "Topic Name", "lbmr.tqr.name", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5530 | 14 | { &hf_lbmr_tirs, |
5531 | 14 | { "TIRs", "lbmr.tirs", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5532 | 14 | { &hf_lbmr_tir, |
5533 | 14 | { "TIR", "lbmr.tir", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5534 | 14 | { &hf_lbmr_tir_name, |
5535 | 14 | { "Topic Name", "lbmr.tir.name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5536 | 14 | { &hf_lbmr_tir_transport_opts, |
5537 | 14 | { "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 } }, |
5538 | 14 | { &hf_lbmr_tir_transport_type, |
5539 | 14 | { "Transport Type", "lbmr.tir.transport_type", FT_UINT8, BASE_HEX, VALS(lbmr_transport_type), LBMR_TIR_TRANSPORT, NULL, HFILL } }, |
5540 | 14 | { &hf_lbmr_tir_tlen, |
5541 | 14 | { "Transport Info Length", "lbmr.tir.tlen", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5542 | 14 | { &hf_lbmr_tir_ttl, |
5543 | 14 | { "TTL", "lbmr.tir.ttl", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5544 | 14 | { &hf_lbmr_tir_index, |
5545 | 14 | { "Index", "lbmr.tir.index", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5546 | 14 | { &hf_lbmr_tir_tcp, |
5547 | 14 | { "TCP Transport", "lbmr.tir.tcp", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5548 | 14 | { &hf_lbmr_tir_tcp_ip, |
5549 | 14 | { "Source IP", "lbmr.tir.tcp.ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5550 | 14 | { &hf_lbmr_tir_tcp_session_id, |
5551 | 14 | { "Session ID", "lbmr.tir.tcp.session_id", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
5552 | 14 | { &hf_lbmr_tir_tcp_port, |
5553 | 14 | { "Source Port", "lbmr.tir.tcp.port", FT_UINT16, BASE_PT_TCP, NULL, 0x0, NULL, HFILL } }, |
5554 | 14 | { &hf_lbmr_tir_lbtrm, |
5555 | 14 | { "LBTRM Transport", "lbmr.tir.lbtrm", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5556 | 14 | { &hf_lbmr_tir_lbtrm_src_addr, |
5557 | 14 | { "Source IP", "lbmr.tir.lbtrm.srcip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5558 | 14 | { &hf_lbmr_tir_lbtrm_mcast_addr, |
5559 | 14 | { "Multicast IP", "lbmr.tir.lbtrm.mcastip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5560 | 14 | { &hf_lbmr_tir_lbtrm_session_id, |
5561 | 14 | { "Session ID", "lbmr.tir.lbtrm.sessid", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
5562 | 14 | { &hf_lbmr_tir_lbtrm_udp_dest_port, |
5563 | 14 | { "Destination Port", "lbmr.tir.lbtrm.dport", FT_UINT16, BASE_PT_UDP, NULL, 0x0, NULL, HFILL } }, |
5564 | 14 | { &hf_lbmr_tir_lbtrm_src_ucast_port, |
5565 | 14 | { "Source Port", "lbmr.tir.lbtrm.sport", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5566 | 14 | { &hf_lbmr_tir_lbtru, |
5567 | 14 | { "LBTRU Transport", "lbmr.tir.lbtru", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5568 | 14 | { &hf_lbmr_tir_lbtru_ip, |
5569 | 14 | { "Source IP", "lbmr.tir.lbtru.ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5570 | 14 | { &hf_lbmr_tir_lbtru_port, |
5571 | 14 | { "Source Port", "lbmr.tir.lbtru.port", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5572 | 14 | { &hf_lbmr_tir_lbtru_session_id, |
5573 | 14 | { "Session ID", "lbmr.tir.lbtru.session_id", FT_UINT32, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5574 | 14 | { &hf_lbmr_tir_lbtipc, |
5575 | 14 | { "LBTIPC Transport", "lbmr.tir.lbtipc", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5576 | 14 | { &hf_lbmr_tir_lbtipc_host_id, |
5577 | 14 | { "Host ID", "lbmr.tir.lbtipc.host_id", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL } }, |
5578 | 14 | { &hf_lbmr_tir_lbtipc_session_id, |
5579 | 14 | { "Session ID", "lbmr.tir.lbtipc.session_id", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL } }, |
5580 | 14 | { &hf_lbmr_tir_lbtipc_xport_id, |
5581 | 14 | { "Transport ID", "lbmr.tir.lbtipc.xport_id", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL } }, |
5582 | 14 | { &hf_lbmr_tir_lbtrdma, |
5583 | 14 | { "LBTRDMA Transport", "lbmr.tir.lbtrdma", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5584 | 14 | { &hf_lbmr_tir_lbtrdma_ip, |
5585 | 14 | { "Source IP", "lbmr.tir.lbtrdma.ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5586 | 14 | { &hf_lbmr_tir_lbtrdma_session_id, |
5587 | 14 | { "Session ID", "lbmr.tir.lbtrdma.session_id", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL } }, |
5588 | 14 | { &hf_lbmr_tir_lbtrdma_port, |
5589 | 14 | { "Port", "lbmr.tir.lbtrdma.port", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5590 | 14 | { &hf_lbmr_tir_lbtsmx, |
5591 | 14 | { "LBTSMX Transport", "lbmr.tir.lbtsmx", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5592 | 14 | { &hf_lbmr_tir_lbtsmx_host_id, |
5593 | 14 | { "Host ID", "lbmr.tir.lbtsmx.host_id", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL } }, |
5594 | 14 | { &hf_lbmr_tir_lbtsmx_session_id, |
5595 | 14 | { "Session ID", "lbmr.tir.lbtsmx.session_id", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL } }, |
5596 | 14 | { &hf_lbmr_tir_lbtsmx_xport_id, |
5597 | 14 | { "Transport ID", "lbmr.tir.lbtsmx.xport_id", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL } }, |
5598 | 14 | { &hf_lbmr_tir_channel, |
5599 | 14 | { "Channel", "lbmr.tir.channel", FT_UINT64, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL } }, |
5600 | 14 | { &hf_lbmr_tir_unknown_transport, |
5601 | 14 | { "Unknown Transport", "lbmr.tir.unknown_transport", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5602 | 14 | { &hf_lbmr_topts, |
5603 | 14 | { "Options", "lbmr.topts", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5604 | 14 | { &hf_lbmr_topt_len, |
5605 | 14 | { "Length Option", "lbmr.topt.len", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5606 | 14 | { &hf_lbmr_topt_len_type, |
5607 | 14 | { "Type", "lbmr.topt.len.type", FT_UINT8, BASE_DEC, VALS(lbmr_topic_option_type), 0x0, NULL, HFILL } }, |
5608 | 14 | { &hf_lbmr_topt_len_len, |
5609 | 14 | { "Length", "lbmr.topt.len.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5610 | 14 | { &hf_lbmr_topt_len_total_len, |
5611 | 14 | { "Total Length", "lbmr.topt.len.total_len", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5612 | 14 | { &hf_lbmr_topt_ume, |
5613 | 14 | { "UME Option", "lbmr.topt.ume", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5614 | 14 | { &hf_lbmr_topt_ume_type, |
5615 | 14 | { "Type", "lbmr.topt.ume.type", FT_UINT8, BASE_DEC, VALS(lbmr_topic_option_type), 0x0, NULL, HFILL } }, |
5616 | 14 | { &hf_lbmr_topt_ume_len, |
5617 | 14 | { "Length", "lbmr.topt.ume.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5618 | 14 | { &hf_lbmr_topt_ume_flags, |
5619 | 14 | { "Flags", "lbmr.topt.ume.flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
5620 | 14 | { &hf_lbmr_topt_ume_flags_ignore, |
5621 | 14 | { "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 } }, |
5622 | 14 | { &hf_lbmr_topt_ume_flags_latejoin, |
5623 | 14 | { "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 } }, |
5624 | 14 | { &hf_lbmr_topt_ume_flags_store, |
5625 | 14 | { "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 } }, |
5626 | 14 | { &hf_lbmr_topt_ume_flags_qccap, |
5627 | 14 | { "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 } }, |
5628 | 14 | { &hf_lbmr_topt_ume_flags_acktosrc, |
5629 | 14 | { "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 } }, |
5630 | 14 | { &hf_lbmr_topt_ume_store_tcp_port, |
5631 | 14 | { "Store TCP Port", "lbmr.topt.ume.store_tcp_port", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5632 | 14 | { &hf_lbmr_topt_ume_src_tcp_port, |
5633 | 14 | { "Source TCP Port", "lbmr.topt.ume.src_tcp_port", FT_UINT16, BASE_PT_TCP, NULL, 0x0, NULL, HFILL } }, |
5634 | 14 | { &hf_lbmr_topt_ume_store_tcp_addr, |
5635 | 14 | { "Store TCP Address", "lbmr.topt.ume.store_tcp_addr", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5636 | 14 | { &hf_lbmr_topt_ume_src_tcp_addr, |
5637 | 14 | { "Source TCP Address", "lbmr.topt.ume.src_tcp_addr", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5638 | 14 | { &hf_lbmr_topt_ume_src_reg_id, |
5639 | 14 | { "Source Registration ID", "lbmr.topt.ume.src_reg_id", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5640 | 14 | { &hf_lbmr_topt_ume_transport_idx, |
5641 | 14 | { "Transport Index", "lbmr.topt.ume.transport_idx", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5642 | 14 | { &hf_lbmr_topt_ume_high_seqnum, |
5643 | 14 | { "High Sequence Number", "lbmr.topt.ume.high_seqnum", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5644 | 14 | { &hf_lbmr_topt_ume_low_seqnum, |
5645 | 14 | { "Low Sequence Number", "lbmr.topt.ume.low_seqnum", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5646 | 14 | { &hf_lbmr_topt_ume_store, |
5647 | 14 | { "UME Store Option", "lbmr.topt.ume_store", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5648 | 14 | { &hf_lbmr_topt_ume_store_type, |
5649 | 14 | { "Type", "lbmr.topt.ume_store.type", FT_UINT8, BASE_DEC_HEX, VALS(lbmr_topic_option_type), 0x0, NULL, HFILL } }, |
5650 | 14 | { &hf_lbmr_topt_ume_store_len, |
5651 | 14 | { "Length", "lbmr.topt.ume_store.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5652 | 14 | { &hf_lbmr_topt_ume_store_flags, |
5653 | 14 | { "Flags", "lbmr.topt.ume_store.flags", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
5654 | 14 | { &hf_lbmr_topt_ume_store_flags_ignore, |
5655 | 14 | { "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 } }, |
5656 | 14 | { &hf_lbmr_topt_ume_store_grp_idx, |
5657 | 14 | { "Group Index", "lbmr.topt.ume_store.grp_idx", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5658 | 14 | { &hf_lbmr_topt_ume_store_store_tcp_port, |
5659 | 14 | { "Store TCP Port", "lbmr.topt.ume_store.store_tcp_port", FT_UINT16, BASE_PT_TCP, NULL, 0x0, NULL, HFILL } }, |
5660 | 14 | { &hf_lbmr_topt_ume_store_store_idx, |
5661 | 14 | { "Store Index", "lbmr.topt.ume_store.store_idx", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5662 | 14 | { &hf_lbmr_topt_ume_store_store_ip_addr, |
5663 | 14 | { "Store IP Address", "lbmr.topt.ume_store.store_ip_addr", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5664 | 14 | { &hf_lbmr_topt_ume_store_src_reg_id, |
5665 | 14 | { "Source Registration ID", "lbmr.topt.ume_store.src_reg_id", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5666 | 14 | { &hf_lbmr_topt_ume_store_group, |
5667 | 14 | { "UME Store Group Option", "lbmr.topt.ume_store_group", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5668 | 14 | { &hf_lbmr_topt_ume_store_group_type, |
5669 | 14 | { "Type", "lbmr.topt.ume_store_group.type", FT_UINT8, BASE_DEC_HEX, VALS(lbmr_topic_option_type), 0x0, NULL, HFILL } }, |
5670 | 14 | { &hf_lbmr_topt_ume_store_group_len, |
5671 | 14 | { "Length", "lbmr.topt.ume_store_group.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5672 | 14 | { &hf_lbmr_topt_ume_store_group_flags, |
5673 | 14 | { "Flags", "lbmr.topt.ume_store_group.flags", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
5674 | 14 | { &hf_lbmr_topt_ume_store_group_flags_ignore, |
5675 | 14 | { "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 } }, |
5676 | 14 | { &hf_lbmr_topt_ume_store_group_grp_idx, |
5677 | 14 | { "Group Index", "lbmr.topt.ume_store_group.grp_idx", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5678 | 14 | { &hf_lbmr_topt_ume_store_group_grp_sz, |
5679 | 14 | { "Group Size", "lbmr.topt.ume_store_group.grp_sz", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5680 | 14 | { &hf_lbmr_topt_ume_store_group_reserved, |
5681 | 14 | { "Reserved", "lbmr.topt.ume_store_group.reserved", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
5682 | 14 | { &hf_lbmr_topt_latejoin, |
5683 | 14 | { "Late Join Option", "lbmr.topt.latejoin", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5684 | 14 | { &hf_lbmr_topt_latejoin_type, |
5685 | 14 | { "Type", "lbmr.topt.latejoin.type", FT_UINT8, BASE_DEC_HEX, VALS(lbmr_topic_option_type), 0x0, NULL, HFILL } }, |
5686 | 14 | { &hf_lbmr_topt_latejoin_len, |
5687 | 14 | { "Length", "lbmr.topt.latejoin.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5688 | 14 | { &hf_lbmr_topt_latejoin_flags, |
5689 | 14 | { "Flags", "lbmr.topt.latejoin.flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
5690 | 14 | { &hf_lbmr_topt_latejoin_flags_ignore, |
5691 | 14 | { "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 } }, |
5692 | 14 | { &hf_lbmr_topt_latejoin_flags_acktosrc, |
5693 | 14 | { "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 } }, |
5694 | 14 | { &hf_lbmr_topt_latejoin_src_tcp_port, |
5695 | 14 | { "Source TCP Port", "lbmr.topt.latejoin.src_tcp_port", FT_UINT16, BASE_PT_TCP, NULL, 0x0, NULL, HFILL } }, |
5696 | 14 | { &hf_lbmr_topt_latejoin_reserved, |
5697 | 14 | { "Reserved", "lbmr.topt.latejoin.reserved", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
5698 | 14 | { &hf_lbmr_topt_latejoin_src_ip_addr, |
5699 | 14 | { "Source IP Address", "lbmr.topt.latejoin.src_ip_addr", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5700 | 14 | { &hf_lbmr_topt_latejoin_transport_idx, |
5701 | 14 | { "Transport Index", "lbmr.topt.latejoin.transport_idx", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5702 | 14 | { &hf_lbmr_topt_latejoin_high_seqnum, |
5703 | 14 | { "High Sequence Number", "lbmr.topt.latejoin.high_seqnum", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5704 | 14 | { &hf_lbmr_topt_latejoin_low_seqnum, |
5705 | 14 | { "Low Sequence Number", "lbmr.topt.latejoin.low_seqnum", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5706 | 14 | { &hf_lbmr_topt_umq_rcridx, |
5707 | 14 | { "Receiver Control Record Index Option", "lbmr.topt.umq_rcridx", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5708 | 14 | { &hf_lbmr_topt_umq_rcridx_type, |
5709 | 14 | { "Type", "lbmr.topt.umq_rcridx.type", FT_UINT8, BASE_DEC_HEX, VALS(lbmr_topic_option_type), 0x0, NULL, HFILL } }, |
5710 | 14 | { &hf_lbmr_topt_umq_rcridx_len, |
5711 | 14 | { "Length", "lbmr.topt.umq_rcridx.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5712 | 14 | { &hf_lbmr_topt_umq_rcridx_flags, |
5713 | 14 | { "Flags", "lbmr.topt.umq_rcridx.flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
5714 | 14 | { &hf_lbmr_topt_umq_rcridx_flags_ignore, |
5715 | 14 | { "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 } }, |
5716 | 14 | { &hf_lbmr_topt_umq_rcridx_rcr_idx, |
5717 | 14 | { "Receiver Control Record Index", "lbmr.topt.umq_rcridx.rcr_idx", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL } }, |
5718 | 14 | { &hf_lbmr_topt_umq_qinfo, |
5719 | 14 | { "Queue Info Option", "lbmr.topt.umq_qinfo", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5720 | 14 | { &hf_lbmr_topt_umq_qinfo_type, |
5721 | 14 | { "Type", "lbmr.topt.umq_qinfo.type", FT_UINT8, BASE_DEC_HEX, VALS(lbmr_topic_option_type), 0x0, NULL, HFILL } }, |
5722 | 14 | { &hf_lbmr_topt_umq_qinfo_len, |
5723 | 14 | { "Length", "lbmr.topt.umq_qinfo.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5724 | 14 | { &hf_lbmr_topt_umq_qinfo_flags, |
5725 | 14 | { "Flags", "lbmr.topt.umq_qinfo.flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
5726 | 14 | { &hf_lbmr_topt_umq_qinfo_flags_ignore, |
5727 | 14 | { "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 } }, |
5728 | 14 | { &hf_lbmr_topt_umq_qinfo_flags_queue, |
5729 | 14 | { "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 } }, |
5730 | 14 | { &hf_lbmr_topt_umq_qinfo_flags_rcvlisten, |
5731 | 14 | { "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 } }, |
5732 | 14 | { &hf_lbmr_topt_umq_qinfo_flags_control, |
5733 | 14 | { "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 } }, |
5734 | 14 | { &hf_lbmr_topt_umq_qinfo_flags_srcrcvlisten, |
5735 | 14 | { "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 } }, |
5736 | 14 | { &hf_lbmr_topt_umq_qinfo_flags_participants_only, |
5737 | 14 | { "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 } }, |
5738 | 14 | { &hf_lbmr_topt_umq_qinfo_queue, |
5739 | 14 | { "Queue", "lbmr.topt.ume_qinfo.queue", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5740 | 14 | { &hf_lbmr_topt_cost, |
5741 | 14 | { "Cost Option", "lbmr.topt.cost", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5742 | 14 | { &hf_lbmr_topt_cost_type, |
5743 | 14 | { "Type", "lbmr.topt.cost.type", FT_UINT8, BASE_DEC_HEX, VALS(lbmr_topic_option_type), 0x0, NULL, HFILL } }, |
5744 | 14 | { &hf_lbmr_topt_cost_len, |
5745 | 14 | { "Length", "lbmr.topt.cost.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5746 | 14 | { &hf_lbmr_topt_cost_flags, |
5747 | 14 | { "Flags", "lbmr.topt.cost.flags", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
5748 | 14 | { &hf_lbmr_topt_cost_flags_ignore, |
5749 | 14 | { "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 } }, |
5750 | 14 | { &hf_lbmr_topt_cost_hop_count, |
5751 | 14 | { "Hop count", "lbmr.topt.cost.hop_count", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5752 | 14 | { &hf_lbmr_topt_cost_cost, |
5753 | 14 | { "Cost", "lbmr.topt.cost.cost", FT_INT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5754 | 14 | { &hf_lbmr_topt_otid, |
5755 | 14 | { "Originating Transport ID Option", "lbmr.topt.otid", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5756 | 14 | { &hf_lbmr_topt_otid_type, |
5757 | 14 | { "Type", "lbmr.topt.otid.type", FT_UINT8, BASE_DEC_HEX, VALS(lbmr_topic_option_type), 0x0, NULL, HFILL } }, |
5758 | 14 | { &hf_lbmr_topt_otid_len, |
5759 | 14 | { "Length", "lbmr.topt.otid.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5760 | 14 | { &hf_lbmr_topt_otid_flags, |
5761 | 14 | { "Flags", "lbmr.topt.otid.flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
5762 | 14 | { &hf_lbmr_topt_otid_flags_ignore, |
5763 | 14 | { "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 } }, |
5764 | 14 | { &hf_lbmr_topt_otid_originating_transport, |
5765 | 14 | { "Originating Transport ID", "lbmr.topt.otid.originating_transport", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5766 | 14 | { &hf_lbmr_topt_ctxinst, |
5767 | 14 | { "Context Instance Option", "lbmr.topt.ctxinst", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5768 | 14 | { &hf_lbmr_topt_ctxinst_type, |
5769 | 14 | { "Type", "lbmr.topt.ctxinst.type", FT_UINT8, BASE_DEC_HEX, VALS(lbmr_topic_option_type), 0x0, NULL, HFILL } }, |
5770 | 14 | { &hf_lbmr_topt_ctxinst_len, |
5771 | 14 | { "Length", "lbmr.topt.ctxinst.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5772 | 14 | { &hf_lbmr_topt_ctxinst_flags, |
5773 | 14 | { "Flags", "lbmr.topt.ctxinst.flags", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
5774 | 14 | { &hf_lbmr_topt_ctxinst_flags_ignore, |
5775 | 14 | { "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 } }, |
5776 | 14 | { &hf_lbmr_topt_ctxinst_res, |
5777 | 14 | { "Reserved", "lbmr.topt.ctxinst.res", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
5778 | 14 | { &hf_lbmr_topt_ctxinst_ctxinst, |
5779 | 14 | { "Context Instance", "lbmr.topt.ctxinst.ctxinst", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5780 | 14 | { &hf_lbmr_topt_ctxinsts, |
5781 | 14 | { "Store Context Instance Option", "lbmr.topt.ctxinsts", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5782 | 14 | { &hf_lbmr_topt_ctxinsts_type, |
5783 | 14 | { "Type", "lbmr.topt.ctxinsts.type", FT_UINT8, BASE_DEC_HEX, VALS(lbmr_topic_option_type), 0x0, NULL, HFILL } }, |
5784 | 14 | { &hf_lbmr_topt_ctxinsts_len, |
5785 | 14 | { "Length", "lbmr.topt.ctxinsts.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5786 | 14 | { &hf_lbmr_topt_ctxinsts_flags, |
5787 | 14 | { "Flags", "lbmr.topt.ctxinsts.flags", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
5788 | 14 | { &hf_lbmr_topt_ctxinsts_flags_ignore, |
5789 | 14 | { "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 } }, |
5790 | 14 | { &hf_lbmr_topt_ctxinsts_idx, |
5791 | 14 | { "Index", "lbmr.topt.ctxinsts.idx", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5792 | 14 | { &hf_lbmr_topt_ctxinsts_ctxinst, |
5793 | 14 | { "Store Context Instance", "lbmr.topt.ctxinsts.ctxinsts", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5794 | 14 | { &hf_lbmr_topt_ulb, |
5795 | 14 | { "ULB Option", "lbmr.topt.ulb", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5796 | 14 | { &hf_lbmr_topt_ulb_type, |
5797 | 14 | { "Type", "lbmr.topt.ulb.type", FT_UINT8, BASE_DEC_HEX, VALS(lbmr_topic_option_type), 0x0, NULL, HFILL } }, |
5798 | 14 | { &hf_lbmr_topt_ulb_len, |
5799 | 14 | { "Length", "lbmr.topt.ulb.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5800 | 14 | { &hf_lbmr_topt_ulb_flags, |
5801 | 14 | { "Flags", "lbmr.topt.ulb.flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
5802 | 14 | { &hf_lbmr_topt_ulb_flags_ignore, |
5803 | 14 | { "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 } }, |
5804 | 14 | { &hf_lbmr_topt_ulb_queue_id, |
5805 | 14 | { "Queue ID", "lbmr.topt.ulb.queue_id", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL } }, |
5806 | 14 | { &hf_lbmr_topt_ulb_regid, |
5807 | 14 | { "Registration ID", "lbmr.topt.ulb.regid", FT_UINT64, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL } }, |
5808 | 14 | { &hf_lbmr_topt_ulb_ulb_src_id, |
5809 | 14 | { "ULB Source ID", "lbmr.topt.ulb.ulb_src_id", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL } }, |
5810 | 14 | { &hf_lbmr_topt_ulb_src_ip_addr, |
5811 | 14 | { "Source IP Address", "lbmr.topt.ulb.src_ip_addr", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5812 | 14 | { &hf_lbmr_topt_ulb_src_tcp_port, |
5813 | 14 | { "Source TCP Port", "lbmr.topt.ulb.src_tcp_port", FT_UINT16, BASE_PT_TCP, NULL, 0x0, NULL, HFILL } }, |
5814 | 14 | { &hf_lbmr_topt_ulb_reserved, |
5815 | 14 | { "Reserved", "lbmr.topt.ulb.reserved", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
5816 | 14 | { &hf_lbmr_topt_ctxinstq, |
5817 | 14 | { "Queue Context Instance Option", "lbmr.topt.ctxinstq", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5818 | 14 | { &hf_lbmr_topt_ctxinstq_type, |
5819 | 14 | { "Type", "lbmr.topt.ctxinstq.type", FT_UINT8, BASE_DEC_HEX, VALS(lbmr_topic_option_type), 0x0, NULL, HFILL } }, |
5820 | 14 | { &hf_lbmr_topt_ctxinstq_len, |
5821 | 14 | { "Length", "lbmr.topt.ctxinstq.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5822 | 14 | { &hf_lbmr_topt_ctxinstq_flags, |
5823 | 14 | { "Flags", "lbmr.topt.ctxinstq.flags", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
5824 | 14 | { &hf_lbmr_topt_ctxinstq_flags_ignore, |
5825 | 14 | { "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 } }, |
5826 | 14 | { &hf_lbmr_topt_ctxinstq_idx, |
5827 | 14 | { "Index", "lbmr.topt.ctxinstq.idx", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5828 | 14 | { &hf_lbmr_topt_ctxinstq_ctxinst, |
5829 | 14 | { "Store Context Instance", "lbmr.topt.ctxinstq.ctxinstq", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5830 | 14 | { &hf_lbmr_topt_domain_id, |
5831 | 14 | { "Domain ID Option", "lbmr.topt.domain_id", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5832 | 14 | { &hf_lbmr_topt_domain_id_type, |
5833 | 14 | { "Type", "lbmr.topt.domain_id.type", FT_UINT8, BASE_DEC_HEX, VALS(lbmr_topic_option_type), 0x0, NULL, HFILL } }, |
5834 | 14 | { &hf_lbmr_topt_domain_id_len, |
5835 | 14 | { "Length", "lbmr.topt.domain_id.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5836 | 14 | { &hf_lbmr_topt_domain_id_flags, |
5837 | 14 | { "Flags", "lbmr.topt.domain_id.flags", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
5838 | 14 | { &hf_lbmr_topt_domain_id_flags_ignore, |
5839 | 14 | { "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 } }, |
5840 | 14 | { &hf_lbmr_topt_domain_id_domain_id, |
5841 | 14 | { "Domain ID", "lbmr.topt.domain_id.domain_id", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5842 | 14 | { &hf_lbmr_topt_exfunc, |
5843 | 14 | { "Extended Functionality Option", "lbmr.topt.exfunc", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5844 | 14 | { &hf_lbmr_topt_exfunc_type, |
5845 | 14 | { "Type", "lbmr.topt.exfunc.type", FT_UINT8, BASE_DEC_HEX, VALS(lbmr_topic_option_type), 0x0, NULL, HFILL } }, |
5846 | 14 | { &hf_lbmr_topt_exfunc_len, |
5847 | 14 | { "Length", "lbmr.topt.exfunc.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5848 | 14 | { &hf_lbmr_topt_exfunc_flags, |
5849 | 14 | { "Flags", "lbmr.topt.exfunc.flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
5850 | 14 | { &hf_lbmr_topt_exfunc_flags_ignore, |
5851 | 14 | { "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 } }, |
5852 | 14 | { &hf_lbmr_topt_exfunc_src_tcp_port, |
5853 | 14 | { "Source TCP Port", "lbmr.topt.exfunc.src_tcp_port", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5854 | 14 | { &hf_lbmr_topt_exfunc_reserved, |
5855 | 14 | { "Reserved", "lbmr.topt.exfunc.reserved", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
5856 | 14 | { &hf_lbmr_topt_exfunc_src_ip_addr, |
5857 | 14 | { "Source IP Address", "lbmr.topt.exfunc.src_ip_addr", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5858 | 14 | { &hf_lbmr_topt_exfunc_functionality_flags, |
5859 | 14 | { "Functionality Flags", "lbmr.topt.exfunc.functionality_flags", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
5860 | 14 | { &hf_lbmr_topt_exfunc_functionality_flags_ulb, |
5861 | 14 | { "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 } }, |
5862 | 14 | { &hf_lbmr_topt_exfunc_functionality_flags_umq, |
5863 | 14 | { "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 } }, |
5864 | 14 | { &hf_lbmr_topt_exfunc_functionality_flags_ume, |
5865 | 14 | { "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 } }, |
5866 | 14 | { &hf_lbmr_topt_exfunc_functionality_flags_lj, |
5867 | 14 | { "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 } }, |
5868 | 14 | { &hf_lbmr_topt_unknown, |
5869 | 14 | { "Unknown Option", "lbmr.topt.unknown", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5870 | 14 | { &hf_lbmr_topt_unknown_type, |
5871 | 14 | { "Type", "lbmr.topt.unknown.type", FT_UINT8, BASE_DEC_HEX, VALS(lbmr_topic_option_type), 0x0, NULL, HFILL } }, |
5872 | 14 | { &hf_lbmr_topt_unknown_len, |
5873 | 14 | { "Length", "lbmr.topt.unknown.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5874 | 14 | { &hf_lbmr_topt_unknown_flags, |
5875 | 14 | { "Flags", "lbmr.topt.unknown.flags", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
5876 | 14 | { &hf_lbmr_topt_unknown_data, |
5877 | 14 | { "Data", "lbmr.topt.unknown.data", FT_BYTES, FT_NONE, NULL, 0x0, NULL, HFILL } }, |
5878 | 14 | { &hf_lbmr_tmb, |
5879 | 14 | { "Topic Management Block", "lbmr.tmb", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5880 | 14 | { &hf_lbmr_tmb_len, |
5881 | 14 | { "Length", "lbmr.tmb.len", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5882 | 14 | { &hf_lbmr_tmb_tmrs, |
5883 | 14 | { "Topic Management Record Count", "lbmr.tmb.tmrs", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5884 | 14 | { &hf_lbmr_tmb_tmr_list, |
5885 | 14 | { "Topic Management Records", "lbmr.tmb.tmr_list", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5886 | 14 | { &hf_lbmr_tmr, |
5887 | 14 | { "Topic Management Record", "lbmr.tmb.tmr", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5888 | 14 | { &hf_lbmr_tmr_len, |
5889 | 14 | { "Length", "lbmr.tmb.tmr.len", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5890 | 14 | { &hf_lbmr_tmr_type, |
5891 | 14 | { "TMR Type", "lbmr.tmb.tmr.type", FT_UINT8, BASE_DEC, VALS(lbmr_tmr_type), 0x0, NULL, HFILL } }, |
5892 | 14 | { &hf_lbmr_tmr_flags, |
5893 | 14 | { "Flags", "lbmr.tmb.tmr.flags", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
5894 | 14 | { &hf_lbmr_tmr_flags_response, |
5895 | 14 | { "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 } }, |
5896 | 14 | { &hf_lbmr_tmr_flags_wildcard_pcre, |
5897 | 14 | { "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 } }, |
5898 | 14 | { &hf_lbmr_tmr_flags_wildcard_regex, |
5899 | 14 | { "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 } }, |
5900 | 14 | { &hf_lbmr_tmr_name, |
5901 | 14 | { "Topic Name", "lbmr.tmb.tmr.name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5902 | 14 | { &hf_lbmr_pser_dep_type, |
5903 | 14 | { "Dependent Type", "lbmr.pser.dep_type", FT_UINT16, BASE_DEC_HEX, VALS(lbmr_pser_dependent_type), 0x0, NULL, HFILL } }, |
5904 | 14 | { &hf_lbmr_pser_len, |
5905 | 14 | { "Length", "lbmr.pser.len", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5906 | 14 | { &hf_lbmr_pser_flags, |
5907 | 14 | { "Flags", "lbmr.pser.flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
5908 | 14 | { &hf_lbmr_pser_flags_option, |
5909 | 14 | { "Option", "lbmr.pser.flags.option", FT_BOOLEAN, L_LBMR_PSER_T_FLAGS * 8, TFS(&tfs_set_notset), LBMR_PSER_OPT_FLAG, NULL, HFILL } }, |
5910 | 14 | { &hf_lbmr_pser_source_ip, |
5911 | 14 | { "Source IP", "lbmr.pser.source_ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5912 | 14 | { &hf_lbmr_pser_store_ip, |
5913 | 14 | { "Store IP", "lbmr.pser.store_ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5914 | 14 | { &hf_lbmr_pser_transport_idx, |
5915 | 14 | { "Transport Index", "lbmr.pser.transport_idx", FT_UINT32, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5916 | 14 | { &hf_lbmr_pser_topic_idx, |
5917 | 14 | { "Topic Index", "lbmr.pser.topic_idx", FT_UINT32, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5918 | 14 | { &hf_lbmr_pser_source_port, |
5919 | 14 | { "Source Port", "lbmr.pser.source_port", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5920 | 14 | { &hf_lbmr_pser_store_port, |
5921 | 14 | { "Store Port", "lbmr.pser.store_port", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5922 | 14 | { &hf_lbmr_pser_topic, |
5923 | 14 | { "Topic", "lbmr.pser.topic", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5924 | 14 | { &hf_lbmr_pser_opts, |
5925 | 14 | { "Options", "lbmr.pser.opts", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5926 | 14 | { &hf_lbmr_pser_optlen, |
5927 | 14 | { "Option Length", "lbmr.pser.opt.optlen", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5928 | 14 | { &hf_lbmr_pser_optlen_type, |
5929 | 14 | { "Type", "lbmr.pser.opt.optlen.type", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
5930 | 14 | { &hf_lbmr_pser_optlen_optlen, |
5931 | 14 | { "Options Length", "lbmr.pser.opt.optlen.optlen", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5932 | 14 | { &hf_lbmr_pser_opt_ctxinst, |
5933 | 14 | { "Context Instance Option", "lbmr.pser.opt.ctxinst", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5934 | 14 | { &hf_lbmr_pser_opt_ctxinst_len, |
5935 | 14 | { "Length", "lbmr.pser.opt.ctxinst.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5936 | 14 | { &hf_lbmr_pser_opt_ctxinst_type, |
5937 | 14 | { "Type", "lbmr.pser.opt.ctxinst.type", FT_UINT8, BASE_DEC_HEX, VALS(lbmr_pser_option_type), 0x0, NULL, HFILL } }, |
5938 | 14 | { &hf_lbmr_pser_opt_ctxinst_ctxinst, |
5939 | 14 | { "Context Instance", "lbmr.pser.opt.ctxinst.ctxinst", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5940 | 14 | { &hf_lbmr_qqr, |
5941 | 14 | { "QQRs", "lbmr.qqr", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5942 | 14 | { &hf_lbmr_qqr_name, |
5943 | 14 | { "Queue name", "lbmr.qqr.name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5944 | 14 | { &hf_lbmr_qirs, |
5945 | 14 | { "QIRs", "lbmr.qirs", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5946 | 14 | { &hf_lbmr_qir, |
5947 | 14 | { "QIR", "lbmr.qir", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5948 | 14 | { &hf_lbmr_qir_queue_name, |
5949 | 14 | { "Queue name", "lbmr.qir.qname", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5950 | 14 | { &hf_lbmr_qir_topic_name, |
5951 | 14 | { "Topic name", "lbmr.qir.tname", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5952 | 14 | { &hf_lbmr_qir_queue_id, |
5953 | 14 | { "Queue ID", "lbmr.qir.queue_id", FT_UINT32, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5954 | 14 | { &hf_lbmr_qir_queue_ver, |
5955 | 14 | { "Queue Version", "lbmr.qir.queue_ver", FT_UINT32, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5956 | 14 | { &hf_lbmr_qir_queue_prev_ver, |
5957 | 14 | { "Queue Previous Version", "lbmr.qir.queue_prev_ver", FT_UINT32, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
5958 | 14 | { &hf_lbmr_qir_option_flag, |
5959 | 14 | { "QIR Options Present", "lbmr.qir.opts", FT_BOOLEAN, L_LBMR_QIR_T_GRP_BLKS * 8, TFS(&tfs_set_notset), LBMR_QIR_OPTIONS, NULL, HFILL } }, |
5960 | 14 | { &hf_lbmr_qir_grp_blks, |
5961 | 14 | { "Group Block Count", "lbmr.qir.grp_blks", FT_UINT16, BASE_DEC_HEX, NULL, LBMR_QIR_GRP_BLOCKS_MASK, NULL, HFILL } }, |
5962 | 14 | { &hf_lbmr_qir_queue_blks, |
5963 | 14 | { "Queue Blocks", "lbmr.qir.queue_blks", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5964 | 14 | { &hf_lbmr_qir_grps, |
5965 | 14 | { "Groups", "lbmr.qir.grps", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5966 | 14 | { &hf_lbmr_qir_grp_blk, |
5967 | 14 | { "Group Block", "lbmr.qir.grp", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5968 | 14 | { &hf_lbmr_qir_grp_blk_grp_idx, |
5969 | 14 | { "Group Index", "lbmr.qir.grp.grp_idx", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5970 | 14 | { &hf_lbmr_qir_grp_blk_grp_sz, |
5971 | 14 | { "Group Size", "lbmr.qir.grp.grp_sz", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5972 | 14 | { &hf_lbmr_qir_queues, |
5973 | 14 | { "Queues", "lbmr.qir.queues", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5974 | 14 | { &hf_lbmr_qir_queue_blk, |
5975 | 14 | { "Queue Block", "lbmr.qir.queue", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5976 | 14 | { &hf_lbmr_qir_queue_blk_ip, |
5977 | 14 | { "IP Address", "lbmr.qir.queue.ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5978 | 14 | { &hf_lbmr_qir_queue_blk_port, |
5979 | 14 | { "Port", "lbmr.qir.queue.port", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5980 | 14 | { &hf_lbmr_qir_queue_blk_idx, |
5981 | 14 | { "Index", "lbmr.qir.queue.idx", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5982 | 14 | { &hf_lbmr_qir_queue_blk_grp_idx, |
5983 | 14 | { "Group Index", "lbmr.qir.queue.grp_idx", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5984 | 14 | { &hf_lbmr_qir_queue_blk_reserved, |
5985 | 14 | { "Reserved", "lbmr.qir.queue.reserved", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
5986 | 14 | { &hf_lbmr_opts, |
5987 | 14 | { "Options", "lbmr.opt", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5988 | 14 | { &hf_lbmr_opt_len, |
5989 | 14 | { "Length Option", "lbmr.opt.len", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5990 | 14 | { &hf_lbmr_opt_len_type, |
5991 | 14 | { "Type", "lbmr.opt.len.type", FT_UINT8, BASE_HEX_DEC, VALS(lbmr_option_type), 0x0, NULL, HFILL } }, |
5992 | 14 | { &hf_lbmr_opt_len_len, |
5993 | 14 | { "Length", "lbmr.opt.len.len", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5994 | 14 | { &hf_lbmr_opt_len_total_len, |
5995 | 14 | { "Total Length", "lbmr.opt.len.total_len", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
5996 | 14 | { &hf_lbmr_opt_src_id, |
5997 | 14 | { "Source ID Option", "lbmr.opt.src_id", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
5998 | 14 | { &hf_lbmr_opt_src_id_type, |
5999 | 14 | { "Type", "lbmr.opt.src_id.type", FT_UINT8, BASE_HEX_DEC, VALS(lbmr_option_type), 0x0, NULL, HFILL } }, |
6000 | 14 | { &hf_lbmr_opt_src_id_len, |
6001 | 14 | { "Length", "lbmr.opt.src_id.len", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
6002 | 14 | { &hf_lbmr_opt_src_id_flags, |
6003 | 14 | { "Flags", "lbmr.opt.src_id.flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6004 | 14 | { &hf_lbmr_opt_src_id_flags_ignore, |
6005 | 14 | { "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 } }, |
6006 | 14 | { &hf_lbmr_opt_src_id_src_id, |
6007 | 14 | { "Source ID", "lbmr.opt.src_id.src_id", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6008 | 14 | { &hf_lbmr_opt_src_type, |
6009 | 14 | { "Source Type Option", "lbmr.opt.src_type", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6010 | 14 | { &hf_lbmr_opt_src_type_type, |
6011 | 14 | { "Type", "lbmr.opt.src_type.type", FT_UINT8, BASE_HEX_DEC, VALS(lbmr_option_type), 0x0, NULL, HFILL } }, |
6012 | 14 | { &hf_lbmr_opt_src_type_len, |
6013 | 14 | { "Length", "lbmr.opt.src_type.len", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
6014 | 14 | { &hf_lbmr_opt_src_type_flags, |
6015 | 14 | { "Flags", "lbmr.opt.src_type.flags", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6016 | 14 | { &hf_lbmr_opt_src_type_flags_ignore, |
6017 | 14 | { "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 } }, |
6018 | 14 | { &hf_lbmr_opt_src_type_src_type, |
6019 | 14 | { "Source Type", "lbmr.opt.src_type.src_type", FT_UINT8, BASE_DEC_HEX, VALS(lbmr_option_source_type), 0x0, NULL, HFILL } }, |
6020 | 14 | { &hf_lbmr_opt_version, |
6021 | 14 | { "Version Option", "lbmr.opt.version", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6022 | 14 | { &hf_lbmr_opt_version_type, |
6023 | 14 | { "Type", "lbmr.opt.version.type", FT_UINT8, BASE_HEX_DEC, VALS(lbmr_option_type), 0x0, NULL, HFILL } }, |
6024 | 14 | { &hf_lbmr_opt_version_len, |
6025 | 14 | { "Length", "lbmr.opt.version.len", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
6026 | 14 | { &hf_lbmr_opt_version_flags, |
6027 | 14 | { "Flags", "lbmr.opt.version.flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6028 | 14 | { &hf_lbmr_opt_version_flags_ignore, |
6029 | 14 | { "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 } }, |
6030 | 14 | { &hf_lbmr_opt_version_flags_ume, |
6031 | 14 | { "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 } }, |
6032 | 14 | { &hf_lbmr_opt_version_flags_umq, |
6033 | 14 | { "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 } }, |
6034 | 14 | { &hf_lbmr_opt_version_version, |
6035 | 14 | { "Version", "lbmr.opt.version.version", FT_UINT32, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6036 | 14 | { &hf_lbmr_opt_local_domain, |
6037 | 14 | { "Local Domain Option", "lbmr.opt.local_domain", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6038 | 14 | { &hf_lbmr_opt_local_domain_type, |
6039 | 14 | { "Type", "lbmr.opt.local_domain.type", FT_UINT8, BASE_HEX_DEC, VALS(lbmr_option_type), 0x0, NULL, HFILL } }, |
6040 | 14 | { &hf_lbmr_opt_local_domain_len, |
6041 | 14 | { "Length", "lbmr.opt.local_domain.len", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
6042 | 14 | { &hf_lbmr_opt_local_domain_flags, |
6043 | 14 | { "Flags", "lbmr.opt.local_domain.flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6044 | 14 | { &hf_lbmr_opt_local_domain_flags_ignore, |
6045 | 14 | { "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 } }, |
6046 | 14 | { &hf_lbmr_opt_local_domain_flags_viral, |
6047 | 14 | { "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 } }, |
6048 | 14 | { &hf_lbmr_opt_local_domain_local_domain_id, |
6049 | 14 | { "Local Domain ID", "lbmr.opt.local_domain.local_domain_id", FT_UINT32, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6050 | 14 | { &hf_lbmr_opt_unknown, |
6051 | 14 | { "Unknown ID Option", "lbmr.opt.unknown", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6052 | 14 | { &hf_lbmr_opt_unknown_type, |
6053 | 14 | { "Type", "lbmr.opt.unknown.type", FT_UINT8, BASE_HEX_DEC, VALS(lbmr_option_type), 0x0, NULL, HFILL } }, |
6054 | 14 | { &hf_lbmr_opt_unknown_len, |
6055 | 14 | { "Length", "lbmr.opt.unknown.len", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
6056 | 14 | { &hf_lbmr_opt_unknown_flags, |
6057 | 14 | { "Flags", "lbmr.opt.unknown.flags", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6058 | 14 | { &hf_lbmr_opt_unknown_data, |
6059 | 14 | { "Data", "lbmr.opt.unknown.data", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6060 | 14 | { &hf_lbmr_topic_res_request_flags, |
6061 | 14 | { "Flags", "lbmr.topic_res_request.flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6062 | 14 | { &hf_lbmr_topic_res_request_flags_gw_remote_interest, |
6063 | 14 | { "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 } }, |
6064 | 14 | { &hf_lbmr_topic_res_request_flags_context_query, |
6065 | 14 | { "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 } }, |
6066 | 14 | { &hf_lbmr_topic_res_request_flags_context_advertisement, |
6067 | 14 | { "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 } }, |
6068 | 14 | { &hf_lbmr_topic_res_request_flags_gateway_meta, |
6069 | 14 | { "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 } }, |
6070 | 14 | { &hf_lbmr_topic_res_request_flags_advertisement, |
6071 | 14 | { "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 } }, |
6072 | 14 | { &hf_lbmr_topic_res_request_flags_query, |
6073 | 14 | { "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 } }, |
6074 | 14 | { &hf_lbmr_topic_res_request_flags_wildcard_query, |
6075 | 14 | { "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 } }, |
6076 | 14 | { &hf_lbmr_ctxinfo_len, |
6077 | 14 | { "Length", "lbmr.ctxinfo.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6078 | 14 | { &hf_lbmr_ctxinfo_hop_count, |
6079 | 14 | { "Hop Count", "lbmr.ctxinfo.hop_count", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6080 | 14 | { &hf_lbmr_ctxinfo_flags, |
6081 | 14 | { "Flags", "lbmr.ctxinfo.flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6082 | 14 | { &hf_lbmr_ctxinfo_flags_query, |
6083 | 14 | { "Query", "lbmr.ctxinfo.flags.query", FT_BOOLEAN, 16, TFS(&tfs_set_notset), LBMR_CTXINFO_QUERY_FLAG, "Set if query, clear if response", HFILL } }, |
6084 | 14 | { &hf_lbmr_ctxinfo_flags_ip, |
6085 | 14 | { "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 } }, |
6086 | 14 | { &hf_lbmr_ctxinfo_flags_instance, |
6087 | 14 | { "Instance", "lbmr.ctxinfo.flags.instance", FT_BOOLEAN, 16, TFS(&tfs_present_not_present), LBMR_CTXINFO_INSTANCE_FLAG, "Set if context instance is included", HFILL } }, |
6088 | 14 | { &hf_lbmr_ctxinfo_flags_tnwg_src, |
6089 | 14 | { "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 } }, |
6090 | 14 | { &hf_lbmr_ctxinfo_flags_tnwg_rcv, |
6091 | 14 | { "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 } }, |
6092 | 14 | { &hf_lbmr_ctxinfo_flags_proxy, |
6093 | 14 | { "Proxy", "lbmr.ctxinfo.flags.proxy", FT_BOOLEAN, 16, TFS(&tfs_set_notset), LBMR_CTXINFO_PROXY_FLAG, "Set if a proxy for another context", HFILL } }, |
6094 | 14 | { &hf_lbmr_ctxinfo_flags_name, |
6095 | 14 | { "Name", "lbmr.ctxinfo.flags.name", FT_BOOLEAN, 16, TFS(&tfs_present_not_present), LBMR_CTXINFO_NAME_FLAG, "Set if context name is included", HFILL } }, |
6096 | 14 | { &hf_lbmr_ctxinfo_port, |
6097 | 14 | { "Port", "lbmr.ctxinfo.port", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6098 | 14 | { &hf_lbmr_ctxinfo_ip, |
6099 | 14 | { "IP Address", "lbmr.ctxinfo.ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6100 | 14 | { &hf_lbmr_ctxinfo_instance, |
6101 | 14 | { "Instance", "lbmr.ctxinfo.instance", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6102 | 14 | { &hf_lbmr_ctxinfo_name, |
6103 | 14 | { "Name", "lbmr.ctxinfo.name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6104 | 14 | { &hf_lbmr_tnwg_len, |
6105 | 14 | { "Length", "lbmr.tnwg.len", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6106 | 14 | { &hf_lbmr_tnwg_type, |
6107 | 14 | { "Type", "lbmr.tnwg.type", FT_UINT16, BASE_DEC_HEX, VALS(lbmr_tnwg_function_type), 0x0, NULL, HFILL } }, |
6108 | 14 | { &hf_lbmr_tnwg_reserved, |
6109 | 14 | { "Reserved", "lbmr.tnwg.reserved", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6110 | 14 | { &hf_lbmr_tnwg_interest, |
6111 | 14 | { "Interest", "lbmr.tnwg.interest", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6112 | 14 | { &hf_lbmr_tnwg_interest_len, |
6113 | 14 | { "Length", "lbmr.tnwg.interest.len", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6114 | 14 | { &hf_lbmr_tnwg_interest_count, |
6115 | 14 | { "Record Count", "lbmr.tnwg.interest.count", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6116 | 14 | { &hf_lbmr_tnwg_interest_rec, |
6117 | 14 | { "Interest Record", "lbmr.tnwg.interest_rec", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6118 | 14 | { &hf_lbmr_tnwg_interest_rec_len, |
6119 | 14 | { "Length", "lbmr.tnwg.interest_rec.len", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
6120 | 14 | { &hf_lbmr_tnwg_interest_rec_flags, |
6121 | 14 | { "Flags", "lbmr.tnwg.interest_rec.flags", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6122 | 14 | { &hf_lbmr_tnwg_interest_rec_flags_pattern, |
6123 | 14 | { "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 } }, |
6124 | 14 | { &hf_lbmr_tnwg_interest_rec_flags_cancel, |
6125 | 14 | { "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 } }, |
6126 | 14 | { &hf_lbmr_tnwg_interest_rec_flags_refresh, |
6127 | 14 | { "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 } }, |
6128 | 14 | { &hf_lbmr_tnwg_interest_rec_pattype, |
6129 | 14 | { "Pattern Type", "lbmr.tnwg.interest_rec.pattype", FT_UINT8, BASE_DEC_HEX, VALS(lbm_wildcard_pattern_type_short), 0x0, NULL, HFILL } }, |
6130 | 14 | { &hf_lbmr_tnwg_interest_rec_domain_id, |
6131 | 14 | { "Domain ID", "lbmr.tnwg.interest_rec.domain_id", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
6132 | 14 | { &hf_lbmr_tnwg_interest_rec_symbol, |
6133 | 14 | { "Symbol", "lbmr.tnwg.interest_rec.symbol", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6134 | 14 | { &hf_lbmr_tnwg_ctxinfo, |
6135 | 14 | { "Context Information", "lbmr.tnwg.ctxinfo", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6136 | 14 | { &hf_lbmr_tnwg_ctxinfo_len, |
6137 | 14 | { "Length", "lbmr.tnwg.ctxinfo.len", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
6138 | 14 | { &hf_lbmr_tnwg_ctxinfo_hop_count, |
6139 | 14 | { "Hop Count", "lbmr.tnwg.ctxinfo.hop_count", FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
6140 | 14 | { &hf_lbmr_tnwg_ctxinfo_reserved, |
6141 | 14 | { "Reserved", "lbmr.tnwg.ctxinfo.reserved", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6142 | 14 | { &hf_lbmr_tnwg_ctxinfo_flags1, |
6143 | 14 | { "Flags1", "lbmr.tnwg.ctxinfo.flags1", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6144 | 14 | { &hf_lbmr_tnwg_ctxinfo_flags1_query, |
6145 | 14 | { "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 } }, |
6146 | 14 | { &hf_lbmr_tnwg_ctxinfo_flags1_tnwg_src, |
6147 | 14 | { "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 } }, |
6148 | 14 | { &hf_lbmr_tnwg_ctxinfo_flags1_tnwg_rcv, |
6149 | 14 | { "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 } }, |
6150 | 14 | { &hf_lbmr_tnwg_ctxinfo_flags1_proxy, |
6151 | 14 | { "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 } }, |
6152 | 14 | { &hf_lbmr_tnwg_ctxinfo_flags2, |
6153 | 14 | { "Flags2", "lbmr.tnwg.ctxinfo.flags2", FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6154 | 14 | { &hf_lbmr_tnwg_trreq, |
6155 | 14 | { "Topic Res Request", "lbmr.tnwg.trreq", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6156 | 14 | { &hf_lbmr_tnwg_trreq_len, |
6157 | 14 | { "Length", "lbmr.tnwg.trreq.len", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6158 | 14 | { &hf_lbmr_tnwg_opt, |
6159 | 14 | { "Unknown Option", "lbmr.tnwg.opt", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6160 | 14 | { &hf_lbmr_tnwg_opt_type, |
6161 | 14 | { "Type", "lbmr.tnwg.opt.type", FT_UINT8, BASE_HEX_DEC, VALS(lbmr_tnwg_option_type), 0x0, NULL, HFILL } }, |
6162 | 14 | { &hf_lbmr_tnwg_opt_len, |
6163 | 14 | { "Length", "lbmr.tnwg.opt.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6164 | 14 | { &hf_lbmr_tnwg_opt_flags, |
6165 | 14 | { "Flags", "lbmr.tnwg.opt.flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6166 | 14 | { &hf_lbmr_tnwg_opt_flags_ignore, |
6167 | 14 | { "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 } }, |
6168 | 14 | { &hf_lbmr_tnwg_opt_data, |
6169 | 14 | { "Data", "lbmr.tnwg.opt.data", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6170 | 14 | { &hf_lbmr_tnwg_opt_ctxinst, |
6171 | 14 | { "Context Instance Option", "lbmr.tnwg.opt_ctxinst", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6172 | 14 | { &hf_lbmr_tnwg_opt_ctxinst_type, |
6173 | 14 | { "Type", "lbmr.tnwg.opt_ctxinst.type", FT_UINT8, BASE_HEX_DEC, VALS(lbmr_tnwg_option_type), 0x0, NULL, HFILL } }, |
6174 | 14 | { &hf_lbmr_tnwg_opt_ctxinst_len, |
6175 | 14 | { "Length", "lbmr.tnwg.opt_ctxinst.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6176 | 14 | { &hf_lbmr_tnwg_opt_ctxinst_flags, |
6177 | 14 | { "Flags", "lbmr.tnwg.opt_ctxinst.flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6178 | 14 | { &hf_lbmr_tnwg_opt_ctxinst_flags_ignore, |
6179 | 14 | { "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 } }, |
6180 | 14 | { &hf_lbmr_tnwg_opt_ctxinst_instance, |
6181 | 14 | { "Context Instance", "lbmr.tnwg.opt_ctxinst.instance", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6182 | 14 | { &hf_lbmr_tnwg_opt_address, |
6183 | 14 | { "Address Option", "lbmr.tnwg.opt_address", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6184 | 14 | { &hf_lbmr_tnwg_opt_address_type, |
6185 | 14 | { "Type", "lbmr.tnwg.opt_address.type", FT_UINT8, BASE_HEX_DEC, VALS(lbmr_tnwg_option_type), 0x0, NULL, HFILL } }, |
6186 | 14 | { &hf_lbmr_tnwg_opt_address_len, |
6187 | 14 | { "Length", "lbmr.tnwg.opt_address.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6188 | 14 | { &hf_lbmr_tnwg_opt_address_flags, |
6189 | 14 | { "Flags", "lbmr.tnwg.opt_address.flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6190 | 14 | { &hf_lbmr_tnwg_opt_address_flags_ignore, |
6191 | 14 | { "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 } }, |
6192 | 14 | { &hf_lbmr_tnwg_opt_address_port, |
6193 | 14 | { "Port", "lbmr.tnwg.opt_address.port", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6194 | 14 | { &hf_lbmr_tnwg_opt_address_res, |
6195 | 14 | { "Reserved", "lbmr.tnwg.opt_address.res", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6196 | 14 | { &hf_lbmr_tnwg_opt_address_ip, |
6197 | 14 | { "IP Address", "lbmr.tnwg.opt_address.ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6198 | 14 | { &hf_lbmr_tnwg_opt_domain, |
6199 | 14 | { "Domain Option", "lbmr.tnwg.opt_domain", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6200 | 14 | { &hf_lbmr_tnwg_opt_domain_type, |
6201 | 14 | { "Type", "lbmr.tnwg.opt_domain.type", FT_UINT8, BASE_HEX_DEC, VALS(lbmr_tnwg_option_type), 0x0, NULL, HFILL } }, |
6202 | 14 | { &hf_lbmr_tnwg_opt_domain_len, |
6203 | 14 | { "Length", "lbmr.tnwg.opt_domain.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6204 | 14 | { &hf_lbmr_tnwg_opt_domain_flags, |
6205 | 14 | { "Flags", "lbmr.tnwg.opt_domain.flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6206 | 14 | { &hf_lbmr_tnwg_opt_domain_flags_ignore, |
6207 | 14 | { "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 } }, |
6208 | 14 | { &hf_lbmr_tnwg_opt_domain_domain_id, |
6209 | 14 | { "Domain ID", "lbmr.tnwg.opt_domain.domain_id", FT_UINT32, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6210 | 14 | { &hf_lbmr_tnwg_opt_name, |
6211 | 14 | { "Name Option", "lbmr.tnwg.opt_name", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6212 | 14 | { &hf_lbmr_tnwg_opt_name_type, |
6213 | 14 | { "Type", "lbmr.tnwg.opt_name.type", FT_UINT8, BASE_HEX_DEC, VALS(lbmr_tnwg_option_type), 0x0, NULL, HFILL } }, |
6214 | 14 | { &hf_lbmr_tnwg_opt_name_len, |
6215 | 14 | { "Length", "lbmr.tnwg.opt_name.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6216 | 14 | { &hf_lbmr_tnwg_opt_name_flags, |
6217 | 14 | { "Flags", "lbmr.tnwg.opt_name.flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6218 | 14 | { &hf_lbmr_tnwg_opt_name_flags_ignore, |
6219 | 14 | { "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 } }, |
6220 | 14 | { &hf_lbmr_tnwg_opt_name_name, |
6221 | 14 | { "Name", "lbmr.tnwg.opt_name.name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6222 | 14 | { &hf_lbmr_remote_domain_route_hdr_num_domains, |
6223 | 14 | { "Number of Domains", "lbmr.remote_domain_route.num_domains", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6224 | 14 | { &hf_lbmr_remote_domain_route_hdr_ip, |
6225 | 14 | { "IP Address", "lbmr.remote_domain_route.ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6226 | 14 | { &hf_lbmr_remote_domain_route_hdr_port, |
6227 | 14 | { "Port", "lbmr.remote_domain_route.port", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
6228 | 14 | { &hf_lbmr_remote_domain_route_hdr_route_index, |
6229 | 14 | { "Route Index", "lbmr.remote_domain_route.route_index", FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } }, |
6230 | 14 | { &hf_lbmr_remote_domain_route_hdr_length, |
6231 | 14 | { "Length", "lbmr.remote_domain_route.length", FT_UINT32, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6232 | 14 | { &hf_lbmr_remote_domain_route_hdr_domain, |
6233 | 14 | { "Domain", "lbmr.remote_domain_route.domain", FT_UINT32, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6234 | 14 | { &hf_lbmr_rctxinfo_len, |
6235 | 14 | { "Length", "lbmr.rctxinfo.len", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6236 | 14 | { &hf_lbmr_rctxinfo_num_recs, |
6237 | 14 | { "Number of Records", "lbmr.rctxinfo.num_recs", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6238 | 14 | { &hf_lbmr_rctxinfo_reserved, |
6239 | 14 | { "Reserved", "lbmr.rctxinfo.reserved", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6240 | 14 | { &hf_lbmr_rctxinfo_rec, |
6241 | 14 | { "Remote Context Information Record", "lbmr.rctxinfo.rec", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6242 | 14 | { &hf_lbmr_rctxinfo_rec_len, |
6243 | 14 | { "Length", "lbmr.rctxinfo.rec.len", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6244 | 14 | { &hf_lbmr_rctxinfo_rec_flags, |
6245 | 14 | { "Flags", "lbmr.rctxinfo.rec.flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6246 | 14 | { &hf_lbmr_rctxinfo_rec_flags_query, |
6247 | 14 | { "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 } }, |
6248 | 14 | { &hf_lbmr_rctxinfo_rec_address, |
6249 | 14 | { "Address Option", "lbmr.rctxinfo.rec.address", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6250 | 14 | { &hf_lbmr_rctxinfo_rec_address_type, |
6251 | 14 | { "Type", "lbmr.rctxinfo.rec.address.type", FT_UINT8, BASE_DEC_HEX, VALS(lbmr_rctxinfo_option_type), 0x0, NULL, HFILL } }, |
6252 | 14 | { &hf_lbmr_rctxinfo_rec_address_len, |
6253 | 14 | { "Length", "lbmr.rctxinfo.rec.address.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6254 | 14 | { &hf_lbmr_rctxinfo_rec_address_flags, |
6255 | 14 | { "Flags", "lbmr.rctxinfo.rec.address.flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6256 | 14 | { &hf_lbmr_rctxinfo_rec_address_domain_id, |
6257 | 14 | { "Domain ID", "lbmr.rctxinfo.rec.address.domain_id", FT_UINT32, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6258 | 14 | { &hf_lbmr_rctxinfo_rec_address_ip, |
6259 | 14 | { "Address", "lbmr.rctxinfo.rec.address.ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6260 | 14 | { &hf_lbmr_rctxinfo_rec_address_port, |
6261 | 14 | { "Port", "lbmr.rctxinfo.rec.address.port", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6262 | 14 | { &hf_lbmr_rctxinfo_rec_address_res, |
6263 | 14 | { "Reserved", "lbmr.rctxinfo.rec.address.res", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6264 | 14 | { &hf_lbmr_rctxinfo_rec_instance, |
6265 | 14 | { "Instance Option", "lbmr.rctxinfo.rec.instance", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6266 | 14 | { &hf_lbmr_rctxinfo_rec_instance_type, |
6267 | 14 | { "Type", "lbmr.rctxinfo.rec.instance.type", FT_UINT8, BASE_DEC_HEX, VALS(lbmr_rctxinfo_option_type), 0x0, NULL, HFILL } }, |
6268 | 14 | { &hf_lbmr_rctxinfo_rec_instance_len, |
6269 | 14 | { "Length", "lbmr.rctxinfo.rec.instance.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6270 | 14 | { &hf_lbmr_rctxinfo_rec_instance_flags, |
6271 | 14 | { "Flags", "lbmr.rctxinfo.rec.instance.flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6272 | 14 | { &hf_lbmr_rctxinfo_rec_instance_instance, |
6273 | 14 | { "Instance", "lbmr.rctxinfo.rec.instance.instance", FT_BYTES, FT_NONE, NULL, 0x0, NULL, HFILL } }, |
6274 | 14 | { &hf_lbmr_rctxinfo_rec_odomain, |
6275 | 14 | { "Originating Domain Option", "lbmr.rctxinfo.rec.odomain", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6276 | 14 | { &hf_lbmr_rctxinfo_rec_odomain_type, |
6277 | 14 | { "Type", "lbmr.rctxinfo.rec.odomain.type", FT_UINT8, BASE_DEC_HEX, VALS(lbmr_rctxinfo_option_type), 0x0, NULL, HFILL } }, |
6278 | 14 | { &hf_lbmr_rctxinfo_rec_odomain_len, |
6279 | 14 | { "Length", "lbmr.rctxinfo.rec.odomain.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6280 | 14 | { &hf_lbmr_rctxinfo_rec_odomain_flags, |
6281 | 14 | { "Flags", "lbmr.rctxinfo.rec.odomain.flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6282 | 14 | { &hf_lbmr_rctxinfo_rec_odomain_domain_id, |
6283 | 14 | { "Domain ID", "lbmr.rctxinfo.rec.odomain.domain_id", FT_UINT32, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6284 | 14 | { &hf_lbmr_rctxinfo_rec_name, |
6285 | 14 | { "Name Option", "lbmr.rctxinfo.rec.name", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6286 | 14 | { &hf_lbmr_rctxinfo_rec_name_type, |
6287 | 14 | { "Type", "lbmr.rctxinfo.rec.name.type", FT_UINT8, BASE_DEC_HEX, VALS(lbmr_rctxinfo_option_type), 0x0, NULL, HFILL } }, |
6288 | 14 | { &hf_lbmr_rctxinfo_rec_name_len, |
6289 | 14 | { "Length", "lbmr.rctxinfo.rec.name.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6290 | 14 | { &hf_lbmr_rctxinfo_rec_name_flags, |
6291 | 14 | { "Flags", "lbmr.rctxinfo.rec.name.flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6292 | 14 | { &hf_lbmr_rctxinfo_rec_name_name, |
6293 | 14 | { "Name", "lbmr.rctxinfo.rec.name.name", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6294 | 14 | { &hf_lbmr_rctxinfo_rec_unknown, |
6295 | 14 | { "Unknown Option", "lbmr.rctxinfo.rec.unknown", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6296 | 14 | { &hf_lbmr_rctxinfo_rec_unknown_type, |
6297 | 14 | { "Type", "lbmr.rctxinfo.rec.unknown.type", FT_UINT8, BASE_DEC_HEX, VALS(lbmr_rctxinfo_option_type), 0x0, NULL, HFILL } }, |
6298 | 14 | { &hf_lbmr_rctxinfo_rec_unknown_len, |
6299 | 14 | { "Length", "lbmr.rctxinfo.rec.unknown.len", FT_UINT8, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6300 | 14 | { &hf_lbmr_rctxinfo_rec_unknown_flags, |
6301 | 14 | { "Flags", "lbmr.rctxinfo.rec.unknown.flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6302 | 14 | { &hf_lbmr_rctxinfo_rec_unknown_data, |
6303 | 14 | { "Data", "lbmr.rctxinfo.rec.unknown.data", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6304 | 14 | { &hf_qmgmt_flags, |
6305 | 14 | { "Flags", "lbmr.qmgmt.flags", FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6306 | 14 | { &hf_qmgmt_flags_i_flag, |
6307 | 14 | { "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 } }, |
6308 | 14 | { &hf_qmgmt_flags_n_flag, |
6309 | 14 | { "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 } }, |
6310 | 14 | { &hf_qmgmt_flags_il_l_flag, |
6311 | 14 | { "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 } }, |
6312 | 14 | { &hf_qmgmt_flags_il_k_flag, |
6313 | 14 | { "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 } }, |
6314 | 14 | { &hf_qmgmt_pckt_type, |
6315 | 14 | { "Packet Type", "lbmr.qmgmt.pckt_type", FT_UINT8, BASE_HEX_DEC, VALS(umq_qmgmt_packet_type), 0x0, NULL, HFILL } }, |
6316 | 14 | { &hf_qmgmt_cfgsig, |
6317 | 14 | { "Configuration Signature", "lbmr.qmgmt.cfg_sig", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6318 | 14 | { &hf_qmgmt_queue_id, |
6319 | 14 | { "Queue ID", "lbmr.qmgmt.queue_id", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL } }, |
6320 | 14 | { &hf_qmgmt_queue_ver, |
6321 | 14 | { "Queue Version", "lbmr.qmgmt.queue_ver", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL } }, |
6322 | 14 | { &hf_qmgmt_ip, |
6323 | 14 | { "IP Address", "lbmr.qmgmt.ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6324 | 14 | { &hf_qmgmt_port, |
6325 | 14 | { "Port", "lbmr.qmgmt.port", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6326 | 14 | { &hf_qmgmt_inst_idx, |
6327 | 14 | { "Instance Index", "lbmr.qmgmt.inst_idx", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6328 | 14 | { &hf_qmgmt_grp_idx, |
6329 | 14 | { "Group Index", "lbmr.qmgmt.grp_idx", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6330 | 14 | { &hf_qmgmt_pckt_type_dep16, |
6331 | 14 | { "Packet-Type Dependent Data", "lbmr.qmgmt.pckt_type_dep16", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6332 | 14 | { &hf_qmgmt_il_num_insts, |
6333 | 14 | { "Number of IL Instances", "lbmr.qmgmt.il_num_insts", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6334 | 14 | { &hf_qmgmt_jrej_code, |
6335 | 14 | { "Join Rejection Code", "lbmr.qmgmt.jrej_code", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6336 | 14 | { &hf_qmgmt_ev_bias, |
6337 | 14 | { "EV Bias", "lbmr.qmgmt.ev_bias", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6338 | 14 | { &hf_qmgmt_il, |
6339 | 14 | { "Instance List Header", "lbmr.qmgmt.il", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6340 | 14 | { &hf_qmgmt_il_highest_rcr_tsp, |
6341 | 14 | { "Highest RCR TSP", "lbmr.qmgmt.il.highest_rcr_tsp", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL } }, |
6342 | 14 | { &hf_qmgmt_il_inst, |
6343 | 14 | { "Instance Header", "lbmr.qmgmt.il_inst", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6344 | 14 | { &hf_qmgmt_il_inst_ip, |
6345 | 14 | { "IP", "lbmr.qmgmt.il_inst.ip", FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6346 | 14 | { &hf_qmgmt_il_inst_port, |
6347 | 14 | { "Port", "lbmr.qmgmt.il_inst.port", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6348 | 14 | { &hf_qmgmt_il_inst_inst_idx, |
6349 | 14 | { "Instance Index", "lbmr.qmgmt.il_inst.inst_idx", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6350 | 14 | { &hf_qmgmt_il_inst_grp_idx, |
6351 | 14 | { "Group Index", "lbmr.qmgmt.il_inst.grp_idx", FT_UINT16, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6352 | 14 | { &hf_qmgmt_il_inst_flags, |
6353 | 14 | { "Flags", "lbmr.qmgmt.il_inst.flags", FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } }, |
6354 | 14 | { &hf_qmgmt_il_inst_flags_m_flag, |
6355 | 14 | { "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 } }, |
6356 | 14 | { &hf_qmgmt_il_inst_flags_q_flag, |
6357 | 14 | { "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 } }, |
6358 | 14 | { &hf_qmgmt_il_inst_flags_p_flag, |
6359 | 14 | { "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 } }, |
6360 | 14 | { &hf_qmgmt_ec, |
6361 | 14 | { "Election Call Header", "lbmr.qmgmt.ec", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6362 | 14 | { &hf_qmgmt_ec_queue_new_ver, |
6363 | 14 | { "Queue New Version", "lbmr.qmgmt.ec.queue_new_ver", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL } }, |
6364 | 14 | { &hf_qmgmt_ev, |
6365 | 14 | { "Election Vote Header", "lbmr.qmgmt.ev", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6366 | 14 | { &hf_qmgmt_ev_highest_rcr_tsp, |
6367 | 14 | { "Highest RCR TSP", "lbmr.qmgmt.ev.highest_rcr_tsp", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL } }, |
6368 | 14 | { &hf_qmgmt_ev_age, |
6369 | 14 | { "Age", "lbmr.qmgmt.ev.age", FT_UINT32, BASE_DEC_HEX, NULL, 0x0, NULL, HFILL } }, |
6370 | 14 | { &hf_qmgmt_qro, |
6371 | 14 | { "Queue Resume Operation Header", "lbmr.qmgmt.qro", FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } }, |
6372 | 14 | { &hf_qmgmt_qro_highest_rcr_tsp, |
6373 | 14 | { "Highest RCR TSP", "lbmr.qmgmt.qro.highest_rcr_tsp", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, NULL, HFILL } }, |
6374 | 14 | { &hf_qmgmt_qname, |
6375 | 14 | { "Queue Name", "lbmr.qmgmt.qname", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL } } |
6376 | 14 | }; |
6377 | 14 | static int * ett[] = |
6378 | 14 | { |
6379 | 14 | &ett_lbmr, |
6380 | 14 | &ett_lbmr_hdr, |
6381 | 14 | &ett_lbmr_opts, |
6382 | 14 | &ett_lbmr_opt_src_id, |
6383 | 14 | &ett_lbmr_opt_src_id_flags, |
6384 | 14 | &ett_lbmr_opt_len, |
6385 | 14 | &ett_lbmr_opt_src_type, |
6386 | 14 | &ett_lbmr_opt_src_type_flags, |
6387 | 14 | &ett_lbmr_opt_version, |
6388 | 14 | &ett_lbmr_opt_version_flags, |
6389 | 14 | &ett_lbmr_opt_local_domain, |
6390 | 14 | &ett_lbmr_opt_local_domain_flags, |
6391 | 14 | &ett_lbmr_opt_unknown, |
6392 | 14 | &ett_lbmr_tqrs, |
6393 | 14 | &ett_lbmr_tqr, |
6394 | 14 | &ett_lbmr_tirs, |
6395 | 14 | &ett_lbmr_tir, |
6396 | 14 | &ett_lbmr_tir_tcp, |
6397 | 14 | &ett_lbmr_tir_lbtrm, |
6398 | 14 | &ett_lbmr_tir_lbtru, |
6399 | 14 | &ett_lbmr_tir_lbtipc, |
6400 | 14 | &ett_lbmr_tir_lbtrdma, |
6401 | 14 | &ett_lbmr_tir_lbtsmx, |
6402 | 14 | &ett_lbmr_topts, |
6403 | 14 | &ett_lbmr_topt_len, |
6404 | 14 | &ett_lbmr_topt_ume, |
6405 | 14 | &ett_lbmr_topt_ume_flags, |
6406 | 14 | &ett_lbmr_topt_ume_store, |
6407 | 14 | &ett_lbmr_topt_ume_store_flags, |
6408 | 14 | &ett_lbmr_topt_ume_store_group, |
6409 | 14 | &ett_lbmr_topt_ume_store_group_flags, |
6410 | 14 | &ett_lbmr_topt_latejoin, |
6411 | 14 | &ett_lbmr_topt_latejoin_flags, |
6412 | 14 | &ett_lbmr_topt_umq_rcridx, |
6413 | 14 | &ett_lbmr_topt_umq_rcridx_flags, |
6414 | 14 | &ett_lbmr_topt_umq_qinfo, |
6415 | 14 | &ett_lbmr_topt_umq_qinfo_flags, |
6416 | 14 | &ett_lbmr_topt_cost, |
6417 | 14 | &ett_lbmr_topt_cost_flags, |
6418 | 14 | &ett_lbmr_topt_otid, |
6419 | 14 | &ett_lbmr_topt_otid_flags, |
6420 | 14 | &ett_lbmr_topt_ctxinst, |
6421 | 14 | &ett_lbmr_topt_ctxinst_flags, |
6422 | 14 | &ett_lbmr_topt_ctxinsts, |
6423 | 14 | &ett_lbmr_topt_ctxinsts_flags, |
6424 | 14 | &ett_lbmr_topt_ulb, |
6425 | 14 | &ett_lbmr_topt_ulb_flags, |
6426 | 14 | &ett_lbmr_topt_ctxinstq, |
6427 | 14 | &ett_lbmr_topt_ctxinstq_flags, |
6428 | 14 | &ett_lbmr_topt_domain_id, |
6429 | 14 | &ett_lbmr_topt_domain_id_flags, |
6430 | 14 | &ett_lbmr_topt_exfunc, |
6431 | 14 | &ett_lbmr_topt_exfunc_flags, |
6432 | 14 | &ett_lbmr_topt_exfunc_functionality_flags, |
6433 | 14 | &ett_lbmr_topt_unknown, |
6434 | 14 | &ett_lbmr_tmb, |
6435 | 14 | &ett_lbmr_tmrs, |
6436 | 14 | &ett_lbmr_tmr, |
6437 | 14 | &ett_lbmr_tmr_flags, |
6438 | 14 | &ett_lbmr_pser_flags, |
6439 | 14 | &ett_lbmr_pser_opts, |
6440 | 14 | &ett_lbmr_pser_opt_len, |
6441 | 14 | &ett_lbmr_pser_opt_ctxinst, |
6442 | 14 | &ett_lbmr_qqrs, |
6443 | 14 | &ett_lbmr_qirs, |
6444 | 14 | &ett_lbmr_qir, |
6445 | 14 | &ett_lbmr_qir_options, |
6446 | 14 | &ett_lbmr_qir_grp_blk, |
6447 | 14 | &ett_lbmr_qir_queue_blk, |
6448 | 14 | &ett_lbmr_qir_grp, |
6449 | 14 | &ett_lbmr_qir_queue, |
6450 | 14 | &ett_lbmr_topic_res_request_flags, |
6451 | 14 | &ett_lbmr_ctxinfo_flags, |
6452 | 14 | &ett_lbmr_tnwg, |
6453 | 14 | &ett_lbmr_tnwg_interest, |
6454 | 14 | &ett_lbmr_tnwg_interest_rec, |
6455 | 14 | &ett_lbmr_tnwg_interest_rec_flags, |
6456 | 14 | &ett_lbmr_tnwg_ctxinfo, |
6457 | 14 | &ett_lbmr_tnwg_ctxinfo_flags1, |
6458 | 14 | &ett_lbmr_tnwg_trreq, |
6459 | 14 | &ett_lbmr_tnwg_ctxinst_opt, |
6460 | 14 | &ett_lbmr_tnwg_ctxinst_opt_flags, |
6461 | 14 | &ett_lbmr_tnwg_address_opt, |
6462 | 14 | &ett_lbmr_tnwg_address_opt_flags, |
6463 | 14 | &ett_lbmr_tnwg_domain_opt, |
6464 | 14 | &ett_lbmr_tnwg_domain_opt_flags, |
6465 | 14 | &ett_lbmr_tnwg_name_opt, |
6466 | 14 | &ett_lbmr_tnwg_name_opt_flags, |
6467 | 14 | &ett_lbmr_tnwg_unknown_opt, |
6468 | 14 | &ett_lbmr_tnwg_unknown_opt_flags, |
6469 | 14 | &ett_lbmr_remote_domain_route_hdr, |
6470 | 14 | &ett_lbmr_rctxinfo, |
6471 | 14 | &ett_lbmr_rctxinfo_rec, |
6472 | 14 | &ett_lbmr_rctxinfo_rec_flags, |
6473 | 14 | &ett_lbmr_rctxinfo_rec_address, |
6474 | 14 | &ett_lbmr_rctxinfo_rec_instance, |
6475 | 14 | &ett_lbmr_rctxinfo_rec_odomain, |
6476 | 14 | &ett_lbmr_rctxinfo_rec_name, |
6477 | 14 | &ett_lbmr_rctxinfo_rec_unknown, |
6478 | 14 | &ett_qmgmt_flags, |
6479 | 14 | &ett_qmgmt_il, |
6480 | 14 | &ett_qmgmt_il_inst, |
6481 | 14 | &ett_qmgmt_il_inst_flags, |
6482 | 14 | &ett_qmgmt_ec, |
6483 | 14 | &ett_qmgmt_ev, |
6484 | 14 | &ett_qmgmt_qro |
6485 | 14 | }; |
6486 | 14 | static ei_register_info ei[] = |
6487 | 14 | { |
6488 | 14 | { &ei_lbmr_analysis_length_incorrect, { "lbmr.analysis.length_incorrect", PI_MALFORMED, PI_ERROR, "Header length incorrect", EXPFILL } }, |
6489 | 14 | { &ei_lbmr_analysis_invalid_value, { "lbmr.analysis.invalid_value", PI_UNDECODED, PI_WARN, "Invalid value", EXPFILL } }, |
6490 | 14 | { &ei_lbmr_analysis_zero_len_option, { "lbmr.analysis.zero_len_option", PI_MALFORMED, PI_ERROR, "Zero-length LBMR option", EXPFILL } }, |
6491 | 14 | }; |
6492 | 14 | module_t * lbmr_module; |
6493 | 14 | uint32_t addr; |
6494 | 14 | uat_t * tag_uat; |
6495 | 14 | expert_module_t * expert_lbmr; |
6496 | | |
6497 | 14 | proto_lbmr = proto_register_protocol("LBM Topic Resolution Protocol", |
6498 | 14 | "LBMR", "lbmr"); |
6499 | | |
6500 | 14 | proto_register_field_array(proto_lbmr, hf, array_length(hf)); |
6501 | 14 | proto_register_subtree_array(ett, array_length(ett)); |
6502 | 14 | expert_lbmr = expert_register_protocol(proto_lbmr); |
6503 | 14 | expert_register_field_array(expert_lbmr, ei, array_length(ei)); |
6504 | | |
6505 | 14 | lbmr_dissector_handle = register_dissector("lbmr", dissect_lbmr, proto_lbmr); |
6506 | | |
6507 | 14 | lbmr_module = prefs_register_protocol_subtree("29West", proto_lbmr, proto_reg_handoff_lbmr); |
6508 | 14 | prefs_register_uint_preference(lbmr_module, |
6509 | 14 | "mc_incoming_port", |
6510 | 14 | "Incoming multicast UDP port (default " LBMR_DEFAULT_MC_INCOMING_UDP_PORT_STRING ")", |
6511 | 14 | "Set the UDP port for incoming multicast topic resolution (context resolver_multicast_incoming_port)", |
6512 | 14 | 10, |
6513 | 14 | &global_lbmr_mc_incoming_udp_port); |
6514 | 14 | ws_inet_pton4(LBMR_DEFAULT_MC_INCOMING_ADDRESS, &addr); |
6515 | 14 | lbmr_mc_incoming_address_host = g_ntohl(addr); |
6516 | 14 | prefs_register_string_preference(lbmr_module, |
6517 | 14 | "mc_incoming_address", |
6518 | 14 | "Incoming multicast address (default " LBMR_DEFAULT_MC_INCOMING_ADDRESS ")", |
6519 | 14 | "Set the multicast address for incoming multicast topic resolution (context resolver_multicast_incoming_address)", |
6520 | 14 | &global_lbmr_mc_incoming_address); |
6521 | 14 | prefs_register_uint_preference(lbmr_module, |
6522 | 14 | "mc_outgoing_port", |
6523 | 14 | "Outgoing multicast UDP port (default " LBMR_DEFAULT_MC_OUTGOING_UDP_PORT_STRING ")", |
6524 | 14 | "Set the UDP port for outgoing multicast topic resolution (context resolver_multicast_outgoing_port)", |
6525 | 14 | 10, |
6526 | 14 | &global_lbmr_mc_outgoing_udp_port); |
6527 | 14 | ws_inet_pton4(LBMR_DEFAULT_MC_OUTGOING_ADDRESS, &addr); |
6528 | 14 | lbmr_mc_outgoing_address_host = g_ntohl(addr); |
6529 | 14 | prefs_register_string_preference(lbmr_module, |
6530 | 14 | "mc_outgoing_address", |
6531 | 14 | "Outgoing multicast address (default " LBMR_DEFAULT_MC_OUTGOING_ADDRESS ")", |
6532 | 14 | "Set the multicast address for outgoing multicast topic resolution (context resolver_multicast_outgoing_address)", |
6533 | 14 | &global_lbmr_mc_outgoing_address); |
6534 | 14 | prefs_register_uint_preference(lbmr_module, |
6535 | 14 | "uc_port_low", |
6536 | 14 | "Unicast UDP port low (default " LBMR_DEFAULT_UC_PORT_LOW_STRING ")", |
6537 | 14 | "Set the low UDP port for unicast topic resolution (context resolver_unicast_port_low)", |
6538 | 14 | 10, |
6539 | 14 | &global_lbmr_uc_port_low); |
6540 | 14 | prefs_register_uint_preference(lbmr_module, |
6541 | 14 | "uc_port_high", |
6542 | 14 | "Unicast UDP port high (default " LBMR_DEFAULT_UC_PORT_HIGH_STRING ")", |
6543 | 14 | "Set the high UDP port for unicast topic resolution (context resolver_unicast_port_high)", |
6544 | 14 | 10, |
6545 | 14 | &global_lbmr_uc_port_high); |
6546 | 14 | prefs_register_uint_preference(lbmr_module, |
6547 | 14 | "uc_dest_port", |
6548 | 14 | "Unicast UDP destination port (default " LBMR_DEFAULT_UC_DEST_PORT_STRING ")", |
6549 | 14 | "Set the destination port for unicast topic resolution (context resolver_unicast_destination_port)", |
6550 | 14 | 10, |
6551 | 14 | &global_lbmr_uc_dest_port); |
6552 | 14 | ws_inet_pton4(LBMR_DEFAULT_UC_ADDRESS, &addr); |
6553 | 14 | lbmr_uc_address_host = g_ntohl(addr); |
6554 | 14 | prefs_register_string_preference(lbmr_module, |
6555 | 14 | "uc_address", |
6556 | 14 | "Unicast resolver address (default " LBMR_DEFAULT_UC_ADDRESS ")", |
6557 | 14 | "Set the address of the unicast resolver daemon (context resolver_unicast_address)", |
6558 | 14 | &global_lbmr_uc_address); |
6559 | 14 | prefs_register_bool_preference(lbmr_module, |
6560 | 14 | "use_lbmr_domain", |
6561 | 14 | "Use LBMR tag table", |
6562 | 14 | "Use table of LBMR tags to decode the packet instead of above values", |
6563 | 14 | &global_lbmr_use_tag); |
6564 | 14 | tag_uat = uat_new("LBMR tag definitions", |
6565 | 14 | sizeof(lbmr_tag_entry_t), |
6566 | 14 | "lbmr_domains", |
6567 | 14 | true, |
6568 | 14 | (void * *)&lbmr_tag_entry, |
6569 | 14 | &lbmr_tag_count, |
6570 | 14 | UAT_AFFECTS_DISSECTION, |
6571 | 14 | NULL, |
6572 | 14 | lbmr_tag_copy_cb, |
6573 | 14 | lbmr_tag_update_cb, |
6574 | 14 | lbmr_tag_free_cb, |
6575 | 14 | NULL, |
6576 | 14 | NULL, |
6577 | 14 | lbmr_tag_array); |
6578 | 14 | prefs_register_uat_preference(lbmr_module, |
6579 | 14 | "tnw_lbmr_tags", |
6580 | 14 | "LBMR Tags", |
6581 | 14 | "A table to define LBMR tags", |
6582 | 14 | tag_uat); |
6583 | | |
6584 | 14 | lbmr_topic_advertisement_tap_handle = register_tap(LBMR_TOPIC_ADVERTISEMENT_TAP_STRING); |
6585 | 14 | lbmr_topic_query_tap_handle = register_tap(LBMR_TOPIC_QUERY_TAP_STRING); |
6586 | 14 | lbmr_pattern_query_tap_handle = register_tap(LBMR_PATTERN_QUERY_TAP_STRING); |
6587 | 14 | lbmr_queue_advertisement_tap_handle = register_tap(LBMR_QUEUE_ADVERTISEMENT_TAP_STRING); |
6588 | 14 | lbmr_queue_query_tap_handle = register_tap(LBMR_QUEUE_QUERY_TAP_STRING); |
6589 | | |
6590 | 14 | stats_tree_register(LBMR_TOPIC_ADVERTISEMENT_TAP_STRING, |
6591 | 14 | "lbmr_topic_ads_topic", |
6592 | 14 | lbmr_stat_tree_name_topic_ads_topic, |
6593 | 14 | 0, |
6594 | 14 | lbmr_topic_ads_topic_stats_tree_packet, |
6595 | 14 | lbmr_topic_ads_topic_stats_tree_init, |
6596 | 14 | NULL); |
6597 | 14 | stats_tree_register(LBMR_TOPIC_ADVERTISEMENT_TAP_STRING, |
6598 | 14 | "lbmr_topic_ads_source", |
6599 | 14 | lbmr_stat_tree_name_topic_ads_source, |
6600 | 14 | 0, |
6601 | 14 | lbmr_topic_ads_source_stats_tree_packet, |
6602 | 14 | lbmr_topic_ads_source_stats_tree_init, |
6603 | 14 | NULL); |
6604 | 14 | stats_tree_register(LBMR_TOPIC_ADVERTISEMENT_TAP_STRING, |
6605 | 14 | "lbmr_topic_ads_transport", |
6606 | 14 | lbmr_stat_tree_name_topic_ads_transport, |
6607 | 14 | 0, |
6608 | 14 | lbmr_topic_ads_transport_stats_tree_packet, |
6609 | 14 | lbmr_topic_ads_transport_stats_tree_init, |
6610 | 14 | NULL); |
6611 | 14 | stats_tree_register(LBMR_TOPIC_QUERY_TAP_STRING, |
6612 | 14 | "lbmr_topic_queries_topic", |
6613 | 14 | lbmr_stat_tree_name_topic_queries_topic, |
6614 | 14 | 0, |
6615 | 14 | lbmr_topic_queries_topic_stats_tree_packet, |
6616 | 14 | lbmr_topic_queries_topic_stats_tree_init, |
6617 | 14 | NULL); |
6618 | 14 | stats_tree_register(LBMR_TOPIC_QUERY_TAP_STRING, |
6619 | 14 | "lbmr_topic_queries_receiver", |
6620 | 14 | lbmr_stat_tree_name_topic_queries_receiver, |
6621 | 14 | 0, |
6622 | 14 | lbmr_topic_queries_receiver_stats_tree_packet, |
6623 | 14 | lbmr_topic_queries_receiver_stats_tree_init, |
6624 | 14 | NULL); |
6625 | 14 | stats_tree_register(LBMR_PATTERN_QUERY_TAP_STRING, |
6626 | 14 | "lbmr_topic_queries_pattern", |
6627 | 14 | lbmr_stat_tree_name_topic_queries_pattern, |
6628 | 14 | 0, |
6629 | 14 | lbmr_topic_queries_pattern_stats_tree_packet, |
6630 | 14 | lbmr_topic_queries_pattern_stats_tree_init, |
6631 | 14 | NULL); |
6632 | 14 | stats_tree_register(LBMR_PATTERN_QUERY_TAP_STRING, |
6633 | 14 | "lbmr_topic_queries_pattern_receiver", |
6634 | 14 | lbmr_stat_tree_name_topic_queries_pattern_receiver, |
6635 | 14 | 0, |
6636 | 14 | lbmr_topic_queries_pattern_receiver_stats_tree_packet, |
6637 | 14 | lbmr_topic_queries_pattern_receiver_stats_tree_init, |
6638 | 14 | NULL); |
6639 | 14 | stats_tree_register(LBMR_QUEUE_ADVERTISEMENT_TAP_STRING, |
6640 | 14 | "lbmr_queue_ads_queue", |
6641 | 14 | lbmr_stat_tree_name_queue_ads_queue, |
6642 | 14 | 0, |
6643 | 14 | lbmr_queue_ads_queue_stats_tree_packet, |
6644 | 14 | lbmr_queue_ads_queue_stats_tree_init, |
6645 | 14 | NULL); |
6646 | 14 | stats_tree_register(LBMR_QUEUE_ADVERTISEMENT_TAP_STRING, |
6647 | 14 | "lbmr_queue_ads_source", |
6648 | 14 | lbmr_stat_tree_name_queue_ads_source, |
6649 | 14 | 0, |
6650 | 14 | lbmr_queue_ads_source_stats_tree_packet, |
6651 | 14 | lbmr_queue_ads_source_stats_tree_init, |
6652 | 14 | NULL); |
6653 | 14 | stats_tree_register(LBMR_QUEUE_QUERY_TAP_STRING, |
6654 | 14 | "lbmr_queue_queries_queue", |
6655 | 14 | lbmr_stat_tree_name_queue_queries_queue, |
6656 | 14 | 0, |
6657 | 14 | lbmr_queue_queries_queue_stats_tree_packet, |
6658 | 14 | lbmr_queue_queries_queue_stats_tree_init, |
6659 | 14 | NULL); |
6660 | 14 | stats_tree_register(LBMR_QUEUE_QUERY_TAP_STRING, |
6661 | 14 | "lbmr_queue_queries_receiver", |
6662 | 14 | lbmr_stat_tree_name_queue_queries_receiver, |
6663 | 14 | 0, |
6664 | 14 | lbmr_queue_queries_receiver_stats_tree_packet, |
6665 | 14 | lbmr_queue_queries_receiver_stats_tree_init, |
6666 | 14 | NULL); |
6667 | | |
6668 | 14 | lbm_topic_init(); |
6669 | 14 | lbtsmx_transport_init(); |
6670 | 14 | lbtipc_transport_init(); |
6671 | 14 | lbtrdma_transport_init(); |
6672 | 14 | } |
6673 | | |
6674 | | /* The registration hand-off routine */ |
6675 | | void proto_reg_handoff_lbmr(void) |
6676 | 14 | { |
6677 | 14 | static bool already_registered = false; |
6678 | 14 | uint32_t addr; |
6679 | | |
6680 | 14 | if (!already_registered) |
6681 | 14 | { |
6682 | 14 | dissector_add_for_decode_as_with_preference("udp.port", lbmr_dissector_handle); |
6683 | 14 | heur_dissector_add("udp", test_lbmr_packet, "LBM Topic Resolution over UDP", "lbmr_udp", proto_lbmr, HEURISTIC_ENABLE); |
6684 | 14 | } |
6685 | | |
6686 | 14 | lbmr_mc_incoming_udp_port = global_lbmr_mc_incoming_udp_port; |
6687 | 14 | lbmr_mc_outgoing_udp_port = global_lbmr_mc_outgoing_udp_port; |
6688 | 14 | ws_inet_pton4(global_lbmr_mc_incoming_address, &addr); |
6689 | 14 | lbmr_mc_incoming_address_host = g_ntohl(addr); |
6690 | | |
6691 | 14 | ws_inet_pton4(global_lbmr_mc_outgoing_address, &addr); |
6692 | 14 | lbmr_mc_outgoing_address_host = g_ntohl(addr); |
6693 | | |
6694 | | /* Make sure the low port is <= the high port. If not, don't change them. */ |
6695 | 14 | if (global_lbmr_uc_port_low <= global_lbmr_uc_port_high) |
6696 | 14 | { |
6697 | 14 | lbmr_uc_port_high = global_lbmr_uc_port_high; |
6698 | 14 | lbmr_uc_port_low = global_lbmr_uc_port_low; |
6699 | 14 | } |
6700 | 14 | lbmr_uc_dest_port = global_lbmr_uc_dest_port; |
6701 | 14 | ws_inet_pton4(global_lbmr_uc_address, &addr); |
6702 | 14 | lbmr_uc_address_host = g_ntohl(addr); |
6703 | 14 | lbmr_use_tag = global_lbmr_use_tag; |
6704 | | |
6705 | | already_registered = true; |
6706 | 14 | } |
6707 | | |
6708 | | /* |
6709 | | * Editor modelines - https://www.wireshark.org/tools/modelines.html |
6710 | | * |
6711 | | * Local variables: |
6712 | | * c-basic-offset: 4 |
6713 | | * tab-width: 8 |
6714 | | * indent-tabs-mode: nil |
6715 | | * End: |
6716 | | * |
6717 | | * vi: set shiftwidth=4 tabstop=8 expandtab: |
6718 | | * :indentSize=4:tabSize=8:noTabs=true: |
6719 | | */ |