2 * Routines for dlm3 dissection
3 * Copyright 2007, Masatake YAMATO <jet@gyve.org>
5 * Wireshark - Network traffic analyzer
6 * By Gerald Combs <gerald@wireshark.org>
7 * Copyright 1998 Gerald Combs
9 * SPDX-License-Identifier: GPL-2.0-or-later
12 /* This dissector supports version 3.0 of the dlm(Distributed Lock Manager)
15 Actual implementation for the protocol is in linux kernel.
16 See files under linux/fs/dlm/ */
19 * #defines are mostly copied from
20 * *.[ch] files in linux/fs/dlm/ and linux/include/linux/dlm.h
23 * -----------------------------------------------------------------------
24 ** Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
25 ** Copyright (C) 2004-2005 Red Hat, Inc. All rights reserved.
27 ** This copyrighted material is made available to anyone wishing to use,
28 ** modify, copy, or redistribute it subject to the terms and conditions
29 ** of the GNU General Public License v.2.
30 * -----------------------------------------------------------------------
36 #include <epan/packet.h>
37 #include <epan/prefs.h>
39 #include "packet-tcp.h"
41 #define TCP_PORT_DLM3 21064 /* Not IANA registered */
42 #define SCTP_PORT_DLM3 TCP_PORT_DLM3
44 #define DLM3_MAJOR_VERSION 0x00030000
45 #define DLM3_MINOR_VERSION_MAX 0x00000002
47 #define DLM_VERSION_3_1 0x00030001
48 #define DLM_VERSION_3_2 0x00030002
56 #define DLM3_MSG_REQUEST 1
57 #define DLM3_MSG_CONVERT 2
58 #define DLM3_MSG_UNLOCK 3
59 #define DLM3_MSG_CANCEL 4
60 #define DLM3_MSG_REQUEST_REPLY 5
61 #define DLM3_MSG_CONVERT_REPLY 6
62 #define DLM3_MSG_UNLOCK_REPLY 7
63 #define DLM3_MSG_CANCEL_REPLY 8
64 #define DLM3_MSG_GRANT 9
65 #define DLM3_MSG_BAST 10
66 #define DLM3_MSG_LOOKUP 11
67 #define DLM3_MSG_REMOVE 12
68 #define DLM3_MSG_LOOKUP_REPLY 13
69 #define DLM3_MSG_PURGE 14
71 #define DLM3_LKF_NOQUEUE 0x00000001
72 #define DLM3_LKF_CANCEL 0x00000002
73 #define DLM3_LKF_CONVERT 0x00000004
74 #define DLM3_LKF_VALBLK 0x00000008
75 #define DLM3_LKF_QUECVT 0x00000010
76 #define DLM3_LKF_IVVALBLK 0x00000020
77 #define DLM3_LKF_CONVDEADLK 0x00000040
78 #define DLM3_LKF_PERSISTENT 0x00000080
79 #define DLM3_LKF_NODLCKWT 0x00000100
80 #define DLM3_LKF_NODLCKBLK 0x00000200
81 #define DLM3_LKF_EXPEDITE 0x00000400
82 #define DLM3_LKF_NOQUEUEBAST 0x00000800
83 #define DLM3_LKF_HEADQUE 0x00001000
84 #define DLM3_LKF_NOORDER 0x00002000
85 #define DLM3_LKF_ORPHAN 0x00004000
86 #define DLM3_LKF_ALTPR 0x00008000
87 #define DLM3_LKF_ALTCW 0x00010000
88 #define DLM3_LKF_FORCEUNLOCK 0x00020000
89 #define DLM3_LKF_TIMEOUT 0x00040000
91 #define DLM3_SBF_DEMOTED 0x00000001
92 #define DLM3_SBF_VALNOTVALID 0x00000002
93 #define DLM3_SBF_ALTMODE 0x00000004
95 #define DLM3_IFL_USER 0x00000001
96 #define DLM3_IFL_ORPHAN 0x00000002
97 /* They may not be used in receiver side.
98 --------------------------------------
99 #define DLM3_IFL_MSTCPY 0x00010000
100 #define DLM3_IFL_RESEND 0x00020000
101 #define DLM3_IFL_DEAD 0x00040000
102 #define DLM3_IFL_OVERLAP_UNLOCK 0x00080000
103 #define DLM3_IFL_OVERLAP_CANCEL 0x00100000
104 #define DLM3_IFL_ENDOFLIFE 0x00200000
105 #define DLM3_IFL_WATCH_TIMEWARN 0x00400000
106 #define DLM3_IFL_TIMEOUT_CANCEL 0x00800000
107 #define DLM3_IFL_DEADLOCK_CANCEL 0x01000000 */
109 #define DLM3_LKSTS_WAITING 1
110 #define DLM3_LKSTS_GRANTED 2
111 #define DLM3_LKSTS_CONVERT 3
113 #define DLM3_LOCK_IV -1
114 #define DLM3_LOCK_NL 0
115 #define DLM3_LOCK_CR 1
116 #define DLM3_LOCK_CW 2
117 #define DLM3_LOCK_PR 3
118 #define DLM3_LOCK_PW 4
119 #define DLM3_LOCK_EX 5
121 #define DLM3_AST_COMP 1
122 #define DLM3_AST_BAST 2
125 /* see asm-generic/errno-base.h about LINUX_* */
126 #define LINUX_EAGAIN 11
127 #define LINUX_ENOMEM 12
128 #define LINUX_INVAL 22
130 #define DLM3_ERRNO_EDEADLK 35
131 #define DLM3_ERRNO_EBADR 53
132 #define DLM3_ERRNO_EBADSLT 57
133 #define DLM3_ERRNO_EPROTO 71
134 #define DLM3_ERRNO_EOPNOTSUPP 95
135 #define DLM3_ERRNO_ETIMEDOUT 110
136 #define DLM3_ERRNO_EINPROGRESS 115
138 #define DLM3_ECANCEL 0x10001
139 #define DLM3_EUNLOCK 0x10002
142 #define DLM3_RCOM_STATUS 1
143 #define DLM3_RCOM_NAMES 2
144 #define DLM3_RCOM_LOOKUP 3
145 #define DLM3_RCOM_LOCK 4
146 #define DLM3_RCOM_STATUS_REPLY 5
147 #define DLM3_RCOM_NAMES_REPLY 6
148 #define DLM3_RCOM_LOOKUP_REPLY 7
149 #define DLM3_RCOM_LOCK_REPLY 8
151 #define DLM_RSF_NEED_SLOTS 0x00000001
153 #define DLM3_RS_NODES 0x00000001
154 #define DLM3_RS_NODES_ALL 0x00000002
155 #define DLM3_RS_DIR 0x00000004
156 #define DLM3_RS_DIR_ALL 0x00000008
157 #define DLM3_RS_LOCKS 0x00000010
158 #define DLM3_RS_LOCKS_ALL 0x00000020
159 #define DLM3_RS_DONE 0x00000040
160 #define DLM3_RS_DONE_ALL 0x00000080
162 #define DLM3_RESNAME_MAXLEN 64
164 #define DLM_HEADER_LEN (4 + 4 + 4 + 2 + 1 + 1)
165 #define DLM_RCOM_LEN (DLM_HEADER_LEN + 4 + 4 + 8 + 8 + 8)
166 #define DLM_MSG_LEN (DLM_HEADER_LEN + ((4 * 12) + (4 * 6)))
167 #define DLM_OPTS_LEN (DLM_HEADER_LEN + 1 + 1 + 2 + 4)
169 /* Forward declaration we need below */
170 void proto_register_dlm3(void);
171 void proto_reg_handoff_dlm3(void);
173 static dissector_handle_t dlm3_tcp_handle
;
174 static dissector_handle_t dlm3_sctp_handle
;
177 /* Initialize the protocol and registered fields */
178 static int proto_dlm3
;
180 /* fields for struct dlm_header(h) */
181 static int hf_dlm3_h_version
;
182 static int hf_dlm3_h_major_version
;
183 static int hf_dlm3_h_minor_version
;
184 static int hf_dlm3_h_lockspace
;
185 static int hf_dlm3_h_seq
;
186 static int hf_dlm3_h_nodeid
;
187 static int hf_dlm3_h_length
;
188 static int hf_dlm3_h_cmd
;
189 static int hf_dlm3_h_pad
;
191 /* fields for struct dlm_opts(o) */
192 static int hf_dlm3_o_nextcmd
;
193 static int hf_dlm3_o_pad
;
194 static int hf_dlm3_o_optlen
;
195 static int hf_dlm3_o_pad2
;
196 static int hf_dlm3_o_opts
;
198 /* fields for struct dlm_opt_header(t) */
199 static int hf_dlm3_t_type
;
200 static int hf_dlm3_t_length
;
201 static int hf_dlm3_t_pad
;
202 static int hf_dlm3_t_value
;
204 /* fields for struct dlm_message(m) */
205 static int hf_dlm3_m_type
;
206 static int hf_dlm3_m_nodeid
;
207 static int hf_dlm3_m_pid
;
208 static int hf_dlm3_m_lkid
;
209 static int hf_dlm3_m_remid
;
210 static int hf_dlm3_m_parent_lkid
;
211 static int hf_dlm3_m_parent_remid
;
213 /* bit fields for dlm_message::exflags */
215 static int hf_dlm3_m_exflags
;
216 static int hf_dlm3_m_exflags_noqueue
;
217 static int hf_dlm3_m_exflags_cancel
;
218 static int hf_dlm3_m_exflags_convert
;
219 static int hf_dlm3_m_exflags_valblk
;
220 static int hf_dlm3_m_exflags_quecvt
;
221 static int hf_dlm3_m_exflags_ivvalblk
;
222 static int hf_dlm3_m_exflags_convdeadlk
;
223 static int hf_dlm3_m_exflags_persistent
;
224 static int hf_dlm3_m_exflags_nodlckwt
;
225 static int hf_dlm3_m_exflags_nodlckblk
;
226 static int hf_dlm3_m_exflags_expedite
;
227 static int hf_dlm3_m_exflags_noqueuebast
;
228 static int hf_dlm3_m_exflags_headque
;
229 static int hf_dlm3_m_exflags_noorder
;
230 static int hf_dlm3_m_exflags_orphan
;
231 static int hf_dlm3_m_exflags_altpr
;
232 static int hf_dlm3_m_exflags_altcw
;
233 static int hf_dlm3_m_exflags_forceunlock
;
234 static int hf_dlm3_m_exflags_timeout
;
236 /* bit fields for dlm_message::sbflags */
237 static int hf_dlm3_m_sbflags
;
238 static int hf_dlm3_m_sbflags_demoted
;
239 static int hf_dlm3_m_sbflags_valnotvalid
;
240 static int hf_dlm3_m_sbflags_altmode
;
242 /* bit fields for dlm_message::flags */
244 static int hf_dlm3_m_flags
;
245 static int hf_dlm3_m_flags_user
;
246 static int hf_dlm3_m_flags_orphan
;
248 static int hf_dlm3_m_lvbseq
;
249 static int hf_dlm3_m_hash
;
250 static int hf_dlm3_m_status
;
251 static int hf_dlm3_m_grmode
;
252 static int hf_dlm3_m_rqmode
;
253 static int hf_dlm3_m_bastmode
;
255 /* bit fields for dlm_message::asts */
256 static int hf_dlm3_m_asts
;
257 static int hf_dlm3_m_asts_comp
;
258 static int hf_dlm3_m_asts_bast
;
260 static int hf_dlm3_m_result
;
261 static int hf_dlm3_m_extra
;
263 /* fields for struct dlm_rcom(rc) */
264 static int hf_dlm3_rc_type
;
265 static int hf_dlm3_rc_result
;
266 static int hf_dlm3_rc_id
;
267 static int hf_dlm3_rc_seq
;
268 static int hf_dlm3_rc_seq_reply
;
269 static int hf_dlm3_rc_buf
;
271 /* fields for struct rcom_config(rf) */
272 static int hf_dlm3_rf_lvblen
;
273 static int hf_dlm3_rf_lsflags
;
274 static int hf_dlm3_rf_lsflags_noqueue
;
275 static int hf_dlm3_rf_lsflags_cancel
;
276 static int hf_dlm3_rf_lsflags_convert
;
277 static int hf_dlm3_rf_lsflags_valblk
;
278 static int hf_dlm3_rf_lsflags_quecvt
;
279 static int hf_dlm3_rf_lsflags_ivvalblk
;
280 static int hf_dlm3_rf_lsflags_convdeadlk
;
281 static int hf_dlm3_rf_lsflags_persistent
;
282 static int hf_dlm3_rf_lsflags_nodlckwt
;
283 static int hf_dlm3_rf_lsflags_nodlckblk
;
284 static int hf_dlm3_rf_lsflags_expedite
;
285 static int hf_dlm3_rf_lsflags_noqueuebast
;
286 static int hf_dlm3_rf_lsflags_headque
;
287 static int hf_dlm3_rf_lsflags_noorder
;
288 static int hf_dlm3_rf_lsflags_orphan
;
289 static int hf_dlm3_rf_lsflags_altpr
;
290 static int hf_dlm3_rf_lsflags_altcw
;
291 static int hf_dlm3_rf_lsflags_forceunlock
;
292 static int hf_dlm3_rf_lsflags_timeout
;
293 static int hf_dlm3_rf_unused
;
295 /* fields for struct rcom_status(rs) */
296 static int hf_dlm3_rs_flags
;
297 static int hf_dlm3_rs_flags_need_slots
;
298 static int hf_dlm3_rs_unused1
;
299 static int hf_dlm3_rs_unused2
;
301 /* fields for struct rcom_lock(rl) */
302 static int hf_dlm3_rl_ownpid
;
303 static int hf_dlm3_rl_lkid
;
304 static int hf_dlm3_rl_remid
;
305 static int hf_dlm3_rl_parent_lkid
;
306 static int hf_dlm3_rl_parent_remid
;
307 static int hf_dlm3_rl_exflags
;
308 static int hf_dlm3_rl_exflags_noqueue
;
309 static int hf_dlm3_rl_exflags_cancel
;
310 static int hf_dlm3_rl_exflags_convert
;
311 static int hf_dlm3_rl_exflags_valblk
;
312 static int hf_dlm3_rl_exflags_quecvt
;
313 static int hf_dlm3_rl_exflags_ivvalblk
;
314 static int hf_dlm3_rl_exflags_convdeadlk
;
315 static int hf_dlm3_rl_exflags_persistent
;
316 static int hf_dlm3_rl_exflags_nodlckwt
;
317 static int hf_dlm3_rl_exflags_nodlckblk
;
318 static int hf_dlm3_rl_exflags_expedite
;
319 static int hf_dlm3_rl_exflags_noqueuebast
;
320 static int hf_dlm3_rl_exflags_headque
;
321 static int hf_dlm3_rl_exflags_noorder
;
322 static int hf_dlm3_rl_exflags_orphan
;
323 static int hf_dlm3_rl_exflags_altpr
;
324 static int hf_dlm3_rl_exflags_altcw
;
325 static int hf_dlm3_rl_exflags_forceunlock
;
326 static int hf_dlm3_rl_exflags_timeout
;
327 static int hf_dlm3_rl_flags
;
328 static int hf_dlm3_rl_flags_user
;
329 static int hf_dlm3_rl_flags_orphan
;
330 static int hf_dlm3_rl_lvbseq
;
331 static int hf_dlm3_rl_result
;
332 static int hf_dlm3_rl_rqmode
;
333 static int hf_dlm3_rl_grmode
;
334 static int hf_dlm3_rl_status
;
335 static int hf_dlm3_rl_asts
;
336 static int hf_dlm3_rl_asts_comp
;
337 static int hf_dlm3_rl_asts_bast
;
338 static int hf_dlm3_rl_wait_type
;
339 static int hf_dlm3_rl_namelen
;
340 static int hf_dlm3_rl_name
;
341 static int hf_dlm3_rl_name_contents
;
342 static int hf_dlm3_rl_name_padding
;
343 static int hf_dlm3_rl_lvb
;
345 /* Initialize the subtree pointers */
347 static int ett_dlm3_version
;
349 static int ett_dlm3_opts
;
350 static int ett_dlm3_options
;
351 static int ett_dlm3_next_cmd
;
353 static int ett_dlm3_msg
;
354 static int ett_dlm3_m_exflags
;
355 static int ett_dlm3_sbflags
;
356 static int ett_dlm3_m_flags
;
357 static int ett_dlm3_m_asts
;
359 static int ett_dlm3_rcom
;
360 static int ett_dlm3_rcom_status
;
361 static int ett_dlm3_rcom_lock
;
362 static int ett_dlm3_rcom_config
;
364 static int ett_dlm3_rs_flags
;
366 static int ett_dlm3_rf_lsflags
;
367 static int ett_dlm3_rl_exflags
;
368 static int ett_dlm3_rl_flags
;
369 static int ett_dlm3_rl_asts
;
370 static int ett_dlm3_rl_name
;
376 static const value_string dlm3_cmd
[] = {
377 { DLM3_MSG
, "message" },
378 { DLM3_RCOM
, "recovery command" },
379 { DLM3_OPTS
, "options" },
380 { DLM3_ACK
, "acknowledge" },
385 static const value_string dlm3_msg
[] = {
386 { DLM3_MSG_REQUEST
, "request message" },
387 { DLM3_MSG_CONVERT
, "conversion message" },
388 { DLM3_MSG_UNLOCK
, "unlock message" },
389 { DLM3_MSG_CANCEL
, "cancel message" },
390 { DLM3_MSG_REQUEST_REPLY
, "request reply" },
391 { DLM3_MSG_CONVERT_REPLY
, "conversion reply" },
392 { DLM3_MSG_UNLOCK_REPLY
, "unlock reply" },
393 { DLM3_MSG_CANCEL_REPLY
, "cancel reply" },
394 { DLM3_MSG_GRANT
, "grant message" },
395 { DLM3_MSG_BAST
, "bast message" },
396 { DLM3_MSG_LOOKUP
, "lookup message" },
397 { DLM3_MSG_REMOVE
, "remove message" },
398 { DLM3_MSG_LOOKUP_REPLY
, "lookup reply" },
399 { DLM3_MSG_PURGE
, "purge orphans" },
403 static const value_string dlm3_status
[] = {
404 { DLM3_LKSTS_WAITING
, "waiting" },
405 { DLM3_LKSTS_GRANTED
, "granted" },
406 { DLM3_LKSTS_CONVERT
, "convert" },
410 static const value_string dlm3_mode
[] = {
411 { DLM3_LOCK_IV
, "invalid" },
412 { DLM3_LOCK_NL
, "null" },
413 { DLM3_LOCK_CR
, "concurrent read" },
414 { DLM3_LOCK_CW
, "concurrent write" },
415 { DLM3_LOCK_PR
, "protected read" },
416 { DLM3_LOCK_PW
, "protected write" },
417 { DLM3_LOCK_EX
, "exclusive" },
421 static const value_string dlm3_result
[] = {
422 { -LINUX_EAGAIN
, "blocked" },
423 { -LINUX_ENOMEM
, "no memory" },
424 { -LINUX_INVAL
, "invalid parameters" },
425 { -DLM3_ERRNO_EDEADLK
, "Resource deadlock avoided" },
426 { -DLM3_ERRNO_EBADR
, "Invalid request descriptor" },
427 { -DLM3_ERRNO_EBADSLT
, "Invalid slot" },
428 { -DLM3_ERRNO_EPROTO
, "Protocol error" },
429 { -DLM3_ERRNO_EOPNOTSUPP
, "Operation not supported" },
430 { -DLM3_ERRNO_ETIMEDOUT
, "Connection timed out" },
431 { -DLM3_ERRNO_EINPROGRESS
, "Operation now in progress" },
432 { -DLM3_ECANCEL
, "cancel completed successfully" },
433 { -DLM3_EUNLOCK
, "unlock request was successful" },
438 static const value_string dlm3_rcom
[] = {
439 { DLM3_RCOM_STATUS
, "status command" },
440 { DLM3_RCOM_NAMES
, "names command" },
441 { DLM3_RCOM_LOOKUP
, "lookup command" },
442 { DLM3_RCOM_LOCK
, "lock command" },
443 { DLM3_RCOM_STATUS_REPLY
, "status reply" },
444 { DLM3_RCOM_NAMES_REPLY
, "names reply" },
445 { DLM3_RCOM_LOOKUP_REPLY
, "lookup reply" },
446 { DLM3_RCOM_LOCK_REPLY
, "lock reply" },
450 static const value_string dlm3_rs
[] = {
451 { DLM3_RS_NODES
, "recovering nodes" },
452 { DLM3_RS_NODES_ALL
, "recovering all nodes" },
453 { DLM3_RS_DIR
, "recovering resource directory" },
454 { DLM3_RS_DIR_ALL
, "recovering all resource directories" },
455 { DLM3_RS_LOCKS
, "recovering lock" },
456 { DLM3_RS_LOCKS_ALL
, "recovering all locks" },
457 { DLM3_RS_DONE
, "recovering is done" },
458 { DLM3_RS_DONE_ALL
, "all recovering is done" },
466 static int * const m_exflags_fields
[] = {
467 &hf_dlm3_m_exflags_timeout
,
468 &hf_dlm3_m_exflags_forceunlock
,
469 &hf_dlm3_m_exflags_altcw
,
470 &hf_dlm3_m_exflags_altpr
,
471 &hf_dlm3_m_exflags_orphan
,
472 &hf_dlm3_m_exflags_noorder
,
473 &hf_dlm3_m_exflags_headque
,
474 &hf_dlm3_m_exflags_noqueuebast
,
475 &hf_dlm3_m_exflags_expedite
,
476 &hf_dlm3_m_exflags_nodlckblk
,
477 &hf_dlm3_m_exflags_nodlckwt
,
478 &hf_dlm3_m_exflags_persistent
,
479 &hf_dlm3_m_exflags_convdeadlk
,
480 &hf_dlm3_m_exflags_ivvalblk
,
481 &hf_dlm3_m_exflags_quecvt
,
482 &hf_dlm3_m_exflags_valblk
,
483 &hf_dlm3_m_exflags_convert
,
484 &hf_dlm3_m_exflags_cancel
,
485 &hf_dlm3_m_exflags_noqueue
,
489 static int * const rs_flags_fields
[] = {
490 &hf_dlm3_rs_flags_need_slots
,
494 static int * const m_sbflags_fields
[] = {
495 &hf_dlm3_m_sbflags_altmode
,
496 &hf_dlm3_m_sbflags_valnotvalid
,
497 &hf_dlm3_m_sbflags_demoted
,
501 static int * const m_flags_fields
[] = {
502 &hf_dlm3_m_flags_orphan
,
503 &hf_dlm3_m_flags_user
,
507 static int * const m_asts_fields
[] = {
508 &hf_dlm3_m_asts_bast
,
509 &hf_dlm3_m_asts_comp
,
513 static int * const rf_lsflags_fields
[] = {
514 &hf_dlm3_rf_lsflags_timeout
,
515 &hf_dlm3_rf_lsflags_forceunlock
,
516 &hf_dlm3_rf_lsflags_altcw
,
517 &hf_dlm3_rf_lsflags_altpr
,
518 &hf_dlm3_rf_lsflags_orphan
,
519 &hf_dlm3_rf_lsflags_noorder
,
520 &hf_dlm3_rf_lsflags_headque
,
521 &hf_dlm3_rf_lsflags_noqueuebast
,
522 &hf_dlm3_rf_lsflags_expedite
,
523 &hf_dlm3_rf_lsflags_nodlckblk
,
524 &hf_dlm3_rf_lsflags_nodlckwt
,
525 &hf_dlm3_rf_lsflags_persistent
,
526 &hf_dlm3_rf_lsflags_convdeadlk
,
527 &hf_dlm3_rf_lsflags_ivvalblk
,
528 &hf_dlm3_rf_lsflags_quecvt
,
529 &hf_dlm3_rf_lsflags_valblk
,
530 &hf_dlm3_rf_lsflags_convert
,
531 &hf_dlm3_rf_lsflags_cancel
,
532 &hf_dlm3_rf_lsflags_noqueue
,
536 static int * const rl_exflags_fields
[] = {
537 &hf_dlm3_rl_exflags_timeout
,
538 &hf_dlm3_rl_exflags_forceunlock
,
539 &hf_dlm3_rl_exflags_altcw
,
540 &hf_dlm3_rl_exflags_altpr
,
541 &hf_dlm3_rl_exflags_orphan
,
542 &hf_dlm3_rl_exflags_noorder
,
543 &hf_dlm3_rl_exflags_headque
,
544 &hf_dlm3_rl_exflags_noqueuebast
,
545 &hf_dlm3_rl_exflags_expedite
,
546 &hf_dlm3_rl_exflags_nodlckblk
,
547 &hf_dlm3_rl_exflags_nodlckwt
,
548 &hf_dlm3_rl_exflags_persistent
,
549 &hf_dlm3_rl_exflags_convdeadlk
,
550 &hf_dlm3_rl_exflags_ivvalblk
,
551 &hf_dlm3_rl_exflags_quecvt
,
552 &hf_dlm3_rl_exflags_valblk
,
553 &hf_dlm3_rl_exflags_convert
,
554 &hf_dlm3_rl_exflags_cancel
,
555 &hf_dlm3_rl_exflags_noqueue
,
559 static int * const rl_flags_fields
[] = {
560 &hf_dlm3_rl_flags_orphan
,
561 &hf_dlm3_rl_flags_user
,
565 static int * const rl_asts_fields
[] = {
566 &hf_dlm3_rl_asts_bast
,
567 &hf_dlm3_rl_asts_comp
,
571 /* Code to actually dissect the packets */
573 dissect_dlm3_msg(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
,
574 unsigned length
, int offset
)
578 m_type
= tvb_get_letohl(tvb
, offset
);
579 proto_tree_add_uint(tree
,
580 hf_dlm3_m_type
, tvb
, offset
, 4, m_type
);
581 col_append_fstr(pinfo
->cinfo
, COL_INFO
,
583 val_to_str_const(m_type
,
588 proto_tree_add_item(tree
,
589 hf_dlm3_m_nodeid
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
592 proto_tree_add_item(tree
,
593 hf_dlm3_m_pid
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
596 proto_tree_add_item(tree
,
597 hf_dlm3_m_lkid
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
598 /* TODO: See `create_lkb'
599 lkid has some structure. We dissect more. */
602 proto_tree_add_item(tree
,
603 hf_dlm3_m_remid
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
606 proto_tree_add_item(tree
,
607 hf_dlm3_m_parent_lkid
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
610 proto_tree_add_item(tree
,
611 hf_dlm3_m_parent_remid
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
614 proto_tree_add_bitmask(tree
, tvb
, offset
,
615 hf_dlm3_m_exflags
, ett_dlm3_m_exflags
,
616 m_exflags_fields
, ENC_LITTLE_ENDIAN
);
619 proto_tree_add_bitmask(tree
, tvb
, offset
,
620 hf_dlm3_m_sbflags
, ett_dlm3_sbflags
,
621 m_sbflags_fields
, ENC_LITTLE_ENDIAN
);
624 proto_tree_add_bitmask(tree
, tvb
, offset
,
625 hf_dlm3_m_flags
, ett_dlm3_m_flags
,
626 m_flags_fields
, ENC_LITTLE_ENDIAN
);
629 proto_tree_add_item(tree
,
630 hf_dlm3_m_lvbseq
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
633 proto_tree_add_item(tree
,
634 hf_dlm3_m_hash
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
637 proto_tree_add_item(tree
,
638 hf_dlm3_m_status
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
641 proto_tree_add_item(tree
,
642 hf_dlm3_m_grmode
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
645 proto_tree_add_item(tree
,
646 hf_dlm3_m_rqmode
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
649 proto_tree_add_item(tree
,
650 hf_dlm3_m_bastmode
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
654 proto_tree_add_bitmask(tree
, tvb
, offset
,
655 hf_dlm3_m_asts
, ett_dlm3_m_asts
,
656 m_asts_fields
, ENC_LITTLE_ENDIAN
);
658 proto_tree_add_item(tree
,
659 hf_dlm3_m_result
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
662 if ((length
- offset
) > 0) {
663 proto_tree_add_item(tree
,
674 dissect_dlm3_rcom_status(tvbuff_t
*tvb
, proto_tree
*tree
,
675 unsigned length
, int offset
)
677 if ((length
- offset
) < ( 4 * 2 + 8 ))
681 proto_tree_add_bitmask(tree
, tvb
, offset
,
682 hf_dlm3_rs_flags
, ett_dlm3_rs_flags
,
683 rs_flags_fields
, ENC_LITTLE_ENDIAN
);
686 proto_tree_add_item(tree
,
687 hf_dlm3_rs_unused1
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
690 proto_tree_add_item(tree
,
691 hf_dlm3_rs_unused2
, tvb
, offset
, 8, ENC_LITTLE_ENDIAN
);
696 dissect_dlm3_rcom_lock(tvbuff_t
*tvb
, proto_tree
*tree
,
697 unsigned length
, int offset
)
699 proto_item
*sub_item
;
700 proto_tree
*sub_tree
;
706 if ((length
- offset
) < ( 4 * 8 + 4 + 1 * 4 + 2 * 2
707 + DLM3_RESNAME_MAXLEN
))
711 proto_tree_add_item(tree
,
712 hf_dlm3_rl_ownpid
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
715 proto_tree_add_item(tree
,
716 hf_dlm3_rl_lkid
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
719 proto_tree_add_item(tree
,
720 hf_dlm3_rl_remid
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
723 proto_tree_add_item(tree
,
724 hf_dlm3_rl_parent_lkid
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
727 proto_tree_add_item(tree
,
728 hf_dlm3_rl_parent_remid
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
731 proto_tree_add_bitmask(tree
, tvb
, offset
,
732 hf_dlm3_rl_exflags
, ett_dlm3_rl_exflags
,
733 rl_exflags_fields
, ENC_LITTLE_ENDIAN
);
734 exflags
= tvb_get_letohl(tvb
, offset
);
738 proto_tree_add_bitmask(tree
, tvb
, offset
,
739 hf_dlm3_rl_flags
, ett_dlm3_rl_flags
,
740 rl_flags_fields
, ENC_LITTLE_ENDIAN
);
743 proto_tree_add_item(tree
,
744 hf_dlm3_rl_lvbseq
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
747 proto_tree_add_item(tree
,
748 hf_dlm3_rl_result
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
751 proto_tree_add_item(tree
,
752 hf_dlm3_rl_rqmode
, tvb
, offset
, 1, ENC_LITTLE_ENDIAN
);
755 proto_tree_add_item(tree
,
756 hf_dlm3_rl_grmode
, tvb
, offset
, 1, ENC_LITTLE_ENDIAN
);
759 proto_tree_add_item(tree
,
760 hf_dlm3_rl_status
, tvb
, offset
, 1, ENC_LITTLE_ENDIAN
);
763 proto_tree_add_bitmask(tree
, tvb
, offset
,
764 hf_dlm3_rl_asts
, ett_dlm3_rl_asts
,
765 rl_asts_fields
, ENC_LITTLE_ENDIAN
);
768 proto_tree_add_item(tree
,
769 hf_dlm3_rl_wait_type
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
772 namelen
= tvb_get_letohs(tvb
, offset
);
773 proto_tree_add_uint(tree
,
774 hf_dlm3_rl_namelen
, tvb
, offset
, 2,
778 if (namelen
<= DLM3_RESNAME_MAXLEN
) {
779 sub_item
= proto_tree_add_item(tree
,
780 hf_dlm3_rl_name
, tvb
, offset
,
781 DLM3_RESNAME_MAXLEN
, ENC_NA
);
783 sub_tree
= proto_item_add_subtree(sub_item
,
786 proto_tree_add_item(sub_tree
,
787 hf_dlm3_rl_name_contents
, tvb
, sub_offset
,
790 sub_offset
+= namelen
;
791 proto_tree_add_item(sub_tree
,
792 hf_dlm3_rl_name_padding
, tvb
, sub_offset
,
793 DLM3_RESNAME_MAXLEN
- namelen
, ENC_NA
);
795 /* XXX - report an error */
798 offset
+= DLM3_RESNAME_MAXLEN
;
799 if (((length
- offset
) > 0) && (exflags
& DLM3_LKF_VALBLK
))
800 proto_tree_add_item(tree
,
801 hf_dlm3_rl_lvb
, tvb
, offset
,
808 dissect_dlm3_rcom_config(tvbuff_t
*tvb
, proto_tree
*tree
,
809 unsigned length
, int offset
)
811 if ((length
- offset
) < ( 4 + 4 + 8 ))
814 proto_tree_add_item(tree
,
815 hf_dlm3_rf_lvblen
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
818 proto_tree_add_bitmask(tree
, tvb
, offset
,
819 hf_dlm3_rf_lsflags
, ett_dlm3_rf_lsflags
,
820 rf_lsflags_fields
, ENC_LITTLE_ENDIAN
);
823 proto_tree_add_item(tree
,
824 hf_dlm3_rf_unused
, tvb
, offset
, 8, ENC_LITTLE_ENDIAN
);
832 dissect_dlm3_rcom(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
,
833 unsigned length
, int offset
, uint32_t h_version
)
837 proto_item
*sub_item
;
838 proto_tree
*sub_tree
;
841 rc_type
= tvb_get_letohl(tvb
, offset
);
842 proto_tree_add_uint(tree
,
843 hf_dlm3_rc_type
, tvb
, offset
, 4, rc_type
);
844 col_append_fstr(pinfo
->cinfo
, COL_INFO
,
846 val_to_str_const(rc_type
,
851 proto_tree_add_item(tree
,
852 hf_dlm3_rc_result
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
855 proto_tree_add_item(tree
,
856 hf_dlm3_rc_id
, tvb
, offset
, 8, ENC_LITTLE_ENDIAN
);
859 proto_tree_add_item(tree
,
860 hf_dlm3_rc_seq
, tvb
, offset
, 8, ENC_LITTLE_ENDIAN
);
863 proto_tree_add_item(tree
,
864 hf_dlm3_rc_seq_reply
, tvb
, offset
, 8, ENC_LITTLE_ENDIAN
);
867 if ((length
- offset
) == 0) {
868 /* No rc_buf: Just return */
873 sub_item
= proto_tree_add_item(tree
,
881 if (rc_type
== DLM3_RCOM_STATUS
&& (h_version
& 0xffff) > 0) {
882 sub_tree
= proto_item_add_subtree(sub_item
,
883 ett_dlm3_rcom_status
);
884 dissect_dlm3_rcom_status(tvb
, sub_tree
, length
, offset
);
885 } else if (rc_type
== DLM3_RCOM_LOCK
) {
886 sub_tree
= proto_item_add_subtree(sub_item
,
888 dissect_dlm3_rcom_lock(tvb
, sub_tree
, length
, offset
);
889 } else if (rc_type
== DLM3_RCOM_STATUS_REPLY
) {
890 sub_tree
= proto_item_add_subtree(sub_item
,
891 ett_dlm3_rcom_config
);
892 dissect_dlm3_rcom_config(tvb
, sub_tree
, length
, offset
);
898 dissect_dlm3_1(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data _U_
,
899 uint8_t h_cmd
, uint32_t h_version
, unsigned length
, int offset
)
901 proto_item
*sub_item
;
902 proto_tree
*sub_tree
;
912 sub_item
= proto_tree_add_uint(tree
,
913 hf_dlm3_h_version
, tvb
, offset
, 4,
915 sub_tree
= proto_item_add_subtree(sub_item
, ett_dlm3_version
);
916 proto_tree_add_uint(sub_tree
,
917 hf_dlm3_h_major_version
, tvb
, offset
+ 0, 2,
918 (h_version
& 0xFFFF0000) >> 16);
919 proto_tree_add_uint(sub_tree
,
920 hf_dlm3_h_minor_version
, tvb
, offset
+ 2, 2,
921 (h_version
& 0x0000FFFF));
924 proto_tree_add_item(tree
,
925 hf_dlm3_h_lockspace
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
928 proto_tree_add_item(tree
,
929 hf_dlm3_h_nodeid
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
932 proto_tree_add_item(tree
,
933 hf_dlm3_h_length
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
936 sub_item
= proto_tree_add_uint(tree
,
937 hf_dlm3_h_cmd
, tvb
, offset
, 1, h_cmd
);
940 proto_tree_add_item(tree
,
941 hf_dlm3_h_pad
, tvb
, offset
, 1, ENC_LITTLE_ENDIAN
);
946 if (length
< DLM_MSG_LEN
)
949 sub_tree
= proto_item_add_subtree(sub_item
, ett_dlm3_msg
);
950 dissect_dlm3_msg(tvb
, pinfo
, sub_tree
, length
, offset
);
953 if (length
< DLM_RCOM_LEN
)
956 sub_tree
= proto_item_add_subtree(sub_item
, ett_dlm3_rcom
);
957 dissect_dlm3_rcom(tvb
, pinfo
, sub_tree
, length
, offset
, h_version
);
963 return tvb_captured_length(tvb
);
967 dissect_dlm3_2(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data _U_
,
968 uint8_t h_cmd
, uint32_t h_version
, unsigned length
)
970 proto_item
*sub_item
, *opts_item
;
971 proto_tree
*sub_tree
, *opts_tree
;
972 int offset
, tlv_offset
;
974 uint16_t o_optlen
, tmp
, t_len
;
989 sub_item
= proto_tree_add_uint(tree
,
990 hf_dlm3_h_version
, tvb
, offset
, 4,
992 sub_tree
= proto_item_add_subtree(sub_item
, ett_dlm3_version
);
993 proto_tree_add_uint(sub_tree
,
994 hf_dlm3_h_major_version
, tvb
, offset
+ 0, 2,
995 (h_version
& 0xFFFF0000) >> 16);
996 proto_tree_add_uint(sub_tree
,
997 hf_dlm3_h_minor_version
, tvb
, offset
+ 2, 2,
998 (h_version
& 0x0000FFFF));
1001 proto_tree_add_item(tree
,
1002 hf_dlm3_h_seq
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
1005 proto_tree_add_item(tree
,
1006 hf_dlm3_h_nodeid
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
1009 proto_tree_add_item(tree
,
1010 hf_dlm3_h_length
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
1013 sub_item
= proto_tree_add_uint(tree
,
1014 hf_dlm3_h_cmd
, tvb
, offset
, 1, h_cmd
);
1017 proto_tree_add_item(tree
,
1018 hf_dlm3_h_pad
, tvb
, offset
, 1, ENC_LITTLE_ENDIAN
);
1023 if (length
< DLM_OPTS_LEN
)
1026 sub_tree
= proto_item_add_subtree(sub_item
, ett_dlm3_opts
);
1027 o_nextcmd
= tvb_get_uint8(tvb
, offset
);
1028 col_append_fstr(pinfo
->cinfo
, COL_INFO
,
1029 ": %s", val_to_str_const(o_nextcmd
,
1032 sub_item
= proto_tree_add_uint(sub_tree
, hf_dlm3_o_nextcmd
, tvb
, offset
, 1, o_nextcmd
);
1035 proto_tree_add_item(sub_tree
, hf_dlm3_o_pad
, tvb
, offset
, 1, ENC_LITTLE_ENDIAN
);
1038 o_optlen
= tvb_get_letohs(tvb
, offset
);
1039 tmp
= DLM_OPTS_LEN
+ o_optlen
;
1043 proto_tree_add_uint(sub_tree
, hf_dlm3_o_optlen
, tvb
, offset
, 2, o_optlen
);
1046 proto_tree_add_item(sub_tree
, hf_dlm3_o_pad2
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
1051 opts_item
= proto_tree_add_item(sub_tree
, hf_dlm3_o_opts
, tvb
, offset
, tmp
, ENC_NA
);
1052 opts_tree
= proto_item_add_subtree(opts_item
, ett_dlm3_options
);
1056 proto_tree_add_item(opts_tree
, hf_dlm3_t_type
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
1059 t_len
= tvb_get_letohs(tvb
, offset
);
1060 if (t_len
> o_optlen
- tlv_offset
)
1062 proto_tree_add_uint(opts_tree
, hf_dlm3_t_length
, tvb
, offset
, 2, t_len
);
1065 proto_tree_add_item(opts_tree
, hf_dlm3_t_pad
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
1068 proto_tree_add_item(opts_tree
, hf_dlm3_t_value
, tvb
, offset
, t_len
, ENC_NA
);
1069 tlv_offset
+= t_len
;
1072 offset
+= tlv_offset
;
1075 switch (o_nextcmd
) {
1077 tmp
= DLM_OPTS_LEN
+ o_optlen
+ DLM_RCOM_LEN
;
1081 sub_tree
= proto_item_add_subtree(sub_item
, ett_dlm3_next_cmd
);
1082 dissect_dlm3_1(tvb
, pinfo
, sub_tree
, data
, o_nextcmd
, h_version
, length
, offset
);
1085 tmp
= DLM_OPTS_LEN
+ o_optlen
+ DLM_RCOM_LEN
;
1089 sub_tree
= proto_item_add_subtree(sub_item
, ett_dlm3_next_cmd
);
1090 dissect_dlm3_1(tvb
, pinfo
, sub_tree
, data
, o_nextcmd
, h_version
, length
, offset
);
1097 if (length
< DLM_MSG_LEN
)
1100 dissect_dlm3_1(tvb
, pinfo
, sub_tree
, data
, h_cmd
, h_version
, length
, offset
);
1103 if (length
< DLM_RCOM_LEN
)
1106 dissect_dlm3_1(tvb
, pinfo
, sub_tree
, data
, h_cmd
, h_version
, length
, offset
);
1112 return tvb_captured_length(tvb
);
1116 dissect_dlm3(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*parent_tree
, void *data _U_
)
1126 /* Check that there's enough data */
1127 length
= tvb_captured_length(tvb
);
1128 if (length
< DLM_HEADER_LEN
)
1131 /* Check the protocol version */
1132 h_version
= tvb_get_letohl(tvb
, 0);
1133 if ((h_version
& 0xffff0000) != DLM3_MAJOR_VERSION
||
1134 (h_version
& 0xffff) > DLM3_MINOR_VERSION_MAX
)
1137 col_set_str(pinfo
->cinfo
, COL_PROTOCOL
, "DLM3");
1140 col_set_str(pinfo
->cinfo
, COL_INFO
, "DLM3");
1142 h_cmd
= tvb_get_uint8(tvb
, DLM_HEADER_LEN
- 1 - 1);
1143 col_set_str(pinfo
->cinfo
, COL_INFO
,
1144 val_to_str_const(h_cmd
,
1146 "packet-dlm3.c internal bug"));
1148 item
= proto_tree_add_item(parent_tree
, proto_dlm3
, tvb
, 0,
1150 tree
= proto_item_add_subtree(item
, ett_dlm3
);
1152 switch (h_version
) {
1153 case DLM_VERSION_3_1
:
1154 ret
= dissect_dlm3_1(tvb
, pinfo
, tree
, data
, h_cmd
, h_version
, length
, 0);
1156 case DLM_VERSION_3_2
:
1157 ret
= dissect_dlm3_2(tvb
, pinfo
, tree
, data
, h_cmd
, h_version
, length
);
1166 /* This method dissects fully reassembled messages */
1168 dissect_dlm3_message(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
)
1170 dissect_dlm3(tvb
, pinfo
, tree
, data
);
1171 return tvb_captured_length(tvb
);
1174 /* determine PDU length of protocol foo */
1176 get_dlm3_message_len(packet_info
*pinfo _U_
, tvbuff_t
*tvb
, int offset
, void *data _U_
)
1178 return tvb_get_letohs(tvb
, offset
+ DLM_HEADER_LEN
- 2 - 1 - 1);
1182 dissect_tcp_dlm3(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data
)
1184 tcp_dissect_pdus(tvb
, pinfo
, tree
, true, DLM_HEADER_LEN
- 1 - 1,
1185 get_dlm3_message_len
, dissect_dlm3_message
, data
);
1186 return tvb_captured_length(tvb
);
1189 /* Register the protocol with Wireshark */
1192 proto_register_dlm3(void)
1195 static hf_register_info hf
[] = {
1197 { &hf_dlm3_h_version
,
1198 { "Version", "dlm3.h.version",
1199 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
1201 { &hf_dlm3_h_major_version
,
1202 { "Major Version", "dlm3.h.major_version",
1203 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
1205 { &hf_dlm3_h_minor_version
,
1206 { "Minor Version", "dlm3.h.minor_version",
1207 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
1209 { &hf_dlm3_h_lockspace
,
1210 { "Lockspace Global ID", "dlm3.h.lockspac",
1211 FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0,
1214 { "Sequence Number", "dlm3.h.seq",
1215 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
1217 { &hf_dlm3_h_nodeid
,
1218 { "Sender Node ID", "dlm3.h.nodeid",
1219 FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0,
1221 { &hf_dlm3_h_length
,
1222 { "Length", "dlm3.h.length",
1223 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
1226 { "Command", "dlm3.h.cmd",
1227 FT_UINT8
, BASE_DEC
, VALS(dlm3_cmd
), 0x0,
1230 { "Padding", "dlm3.h.pad",
1231 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
1235 { &hf_dlm3_o_nextcmd
,
1236 { "Next Command", "dlm3.o.nextcmd",
1237 FT_UINT8
, BASE_DEC
, VALS(dlm3_cmd
), 0x0,
1240 { "Padding", "dlm3.o.pad",
1241 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
1243 { &hf_dlm3_o_optlen
,
1244 { "Options Length", "dlm3.o.optlen",
1245 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
1248 { "Padding", "dlm3.o.pad2",
1249 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
1252 { "Options", "dlm3.o.opts",
1253 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
1256 /* dlm_opt_header */
1258 { "Type", "dlm3.t.type",
1259 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
1261 { &hf_dlm3_t_length
,
1262 { "Length", "dlm3.t.length",
1263 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
1266 { "Padding", "dlm3.t.pad",
1267 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
1270 { "Value", "dlm3.t.value",
1271 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
1276 { "Message Type", "dlm3.m.type",
1277 FT_UINT32
, BASE_DEC
, VALS(dlm3_msg
), 0x0,
1279 { &hf_dlm3_m_nodeid
,
1280 { "Receiver Node ID", "dlm3.m.nodeid",
1281 FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0,
1284 { "Process ID of Lock Owner", "dlm3.m.pid",
1285 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
1288 { "Lock ID on Sender", "dlm3.m.lkid",
1289 FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0,
1292 { "Lock ID on Receiver", "dlm3.m.remid",
1293 FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0,
1295 { &hf_dlm3_m_parent_lkid
,
1296 { "Parent Lock ID on Sender", "dlm3.m.parent_lkid",
1297 FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0,
1299 { &hf_dlm3_m_parent_remid
,
1300 { "Parent Lock ID on Receiver", "dlm3.m.parent_remid",
1301 FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0,
1303 /* dlm_message::exflags */
1304 { &hf_dlm3_m_exflags
,
1305 { "External Flags", "dlm3.m.exflags",
1306 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
1308 { &hf_dlm3_m_exflags_noqueue
,
1309 { "Don't queue", "dlm3.m.exflags.noqueue",
1310 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_NOQUEUE
,
1312 { &hf_dlm3_m_exflags_cancel
,
1313 { "Cancel", "dlm3.m.exflags.cancel",
1314 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_CANCEL
,
1316 { &hf_dlm3_m_exflags_convert
,
1317 { "Convert", "dlm3.m.exflags.convert",
1318 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_CONVERT
,
1320 { &hf_dlm3_m_exflags_valblk
,
1321 { "Return the contents of the lock value block", "dlm3.m.exflags.valblk",
1322 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_VALBLK
,
1324 { &hf_dlm3_m_exflags_quecvt
,
1325 { "Force a conversion request to be queued", "dlm3.m.exflags.quecvt",
1326 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_QUECVT
,
1328 { &hf_dlm3_m_exflags_ivvalblk
,
1329 { "Invalidate the lock value block", "dlm3.m.exflags.ivvalblk",
1330 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_IVVALBLK
,
1332 { &hf_dlm3_m_exflags_convdeadlk
,
1333 { "Forced down to NL to resolve a conversion deadlock", "dlm3.m.exflags.convdeadlk",
1334 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_CONVDEADLK
,
1336 { &hf_dlm3_m_exflags_persistent
,
1337 { "Persistent", "dlm3.m.exflags.persistent",
1338 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_PERSISTENT
,
1340 { &hf_dlm3_m_exflags_nodlckwt
,
1341 { "Don't cancel the lock if it gets into conversion deadlock", "dlm3.m.exflags.nodlckwt",
1342 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_NODLCKWT
,
1344 { &hf_dlm3_m_exflags_nodlckblk
,
1345 { "Nodlckblk", "dlm3.m.exflags.nodlckblk",
1346 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_NODLCKBLK
,
1348 { &hf_dlm3_m_exflags_expedite
,
1349 { "Grant a NL lock immediately", "dlm3.m.exflags.expedite",
1350 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_EXPEDITE
,
1352 { &hf_dlm3_m_exflags_noqueuebast
,
1353 { "Send blocking ASTs even for NOQUEUE operations", "dlm3.m.exflags.noqueuebast",
1354 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_NOQUEUEBAST
,
1356 { &hf_dlm3_m_exflags_headque
,
1357 { "Add a lock to the head of the queue", "dlm3.m.exflags.headque",
1358 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_HEADQUE
,
1360 { &hf_dlm3_m_exflags_noorder
,
1361 { "Disregard the standard grant order rules", "dlm3.m.exflags.noorder",
1362 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_NOORDER
,
1364 { &hf_dlm3_m_exflags_orphan
,
1365 { "Orphan", "dlm3.m.exflags.orphan",
1366 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_ORPHAN
,
1368 { &hf_dlm3_m_exflags_altpr
,
1369 { "Try to grant the lock in `protected read' mode", "dlm3.m.exflags.altpr",
1370 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_ALTPR
,
1372 { &hf_dlm3_m_exflags_altcw
,
1373 { "Try to grant the lock in `concurrent read' mode", "dlm3.m.exflags.altcw",
1374 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_ALTCW
,
1376 { &hf_dlm3_m_exflags_forceunlock
,
1377 { "Force unlock", "dlm3.m.exflags.forceunlock",
1378 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_FORCEUNLOCK
,
1380 { &hf_dlm3_m_exflags_timeout
,
1381 { "Timeout", "dlm3.m.exflags.timeout",
1382 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_TIMEOUT
,
1384 /* dlm_message::sbflags */
1385 { &hf_dlm3_m_sbflags
,
1386 { "Status Block Flags", "dlm3.m.sbflags",
1387 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
1389 { &hf_dlm3_m_sbflags_demoted
,
1390 { "Demoted for deadlock resolution", "dlm3.m.sbflags.demoted",
1391 FT_BOOLEAN
, 32, NULL
, DLM3_SBF_DEMOTED
,
1393 { &hf_dlm3_m_sbflags_valnotvalid
,
1394 { "Lock Value Block Is Invalid", "dlm3.m.sbflags.valnotvalid",
1395 FT_BOOLEAN
, 32, NULL
, DLM3_SBF_VALNOTVALID
,
1397 { &hf_dlm3_m_sbflags_altmode
,
1398 { "Try to Grant in Alternative Mode", "dlm3.m.sbflags.altmode",
1399 FT_BOOLEAN
, 32, NULL
, DLM3_SBF_ALTMODE
,
1402 /* dlm_message::flags */
1404 { "Internal Flags", "dlm3.m.flags",
1405 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
1407 { &hf_dlm3_m_flags_user
,
1408 { "User space lock related", "dlm3.m.flags.user",
1409 FT_BOOLEAN
, 32, NULL
, DLM3_IFL_USER
,
1411 { &hf_dlm3_m_flags_orphan
,
1412 { "Orphaned lock", "dlm3.m.flags.orphan",
1413 FT_BOOLEAN
, 32, NULL
, DLM3_IFL_ORPHAN
,
1416 { &hf_dlm3_m_lvbseq
,
1417 { "Lock Value Block Sequence Number", "dlm3.m.lvbseq",
1418 FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0,
1422 { "Hash value", "dlm3.m.hash",
1423 FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0,
1426 { &hf_dlm3_m_status
,
1427 { "Status", "dlm3.m.status",
1428 FT_INT32
, BASE_DEC
, VALS(dlm3_status
), 0x0,
1431 { &hf_dlm3_m_grmode
,
1432 { "Granted Mode", "dlm3.m.grmode",
1433 FT_INT32
, BASE_DEC
, VALS(dlm3_mode
), 0x0,
1435 { &hf_dlm3_m_rqmode
,
1436 { "Request Mode", "dlm3.m.rqmode",
1437 FT_INT32
, BASE_DEC
, VALS(dlm3_mode
), 0x0,
1439 { &hf_dlm3_m_bastmode
,
1440 { "Mode requested by another node", "dlm3.m.bastmode",
1441 FT_INT32
, BASE_DEC
, VALS(dlm3_mode
), 0x0,
1444 /* dlm_message::asts */
1446 { "Asynchronous Traps", "dlm3.m.asts",
1447 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
1449 { &hf_dlm3_m_asts_comp
,
1450 { "Completion", "dlm3.m.asts.comp",
1451 FT_BOOLEAN
, 32, NULL
, DLM3_AST_COMP
,
1453 { &hf_dlm3_m_asts_bast
,
1454 { "Blocking", "dlm3.m.asts.bast",
1455 FT_BOOLEAN
, 32, NULL
, DLM3_AST_BAST
,
1458 { &hf_dlm3_m_result
,
1459 { "Message Result(errno)", "dlm3.m.result",
1460 FT_INT32
, BASE_DEC
, VALS(dlm3_result
), 0x0,
1463 { "Extra Message", "dlm3.m.extra",
1464 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
1469 { "Recovery Command Type", "dlm3.rc.type",
1470 FT_UINT32
, BASE_DEC
, VALS(dlm3_rcom
), 0x0,
1472 { &hf_dlm3_rc_result
,
1473 { "Recovery Command Result", "dlm3.rc.result",
1474 FT_INT32
, BASE_DEC
, NULL
, 0x0,
1477 { "Recovery Command ID", "dlm3.rc.id",
1478 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
1481 { "Recovery Command Sequence Number of Sender", "dlm3.rc.seq",
1482 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
1484 { &hf_dlm3_rc_seq_reply
,
1485 { "Recovery Command Sequence Number of Receiver", "dlm3.rc.seq_reply",
1486 FT_UINT64
, BASE_DEC
, NULL
, 0x0,
1489 { "Recovery Buffer", "dlm3.rc.buf",
1490 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
1494 { &hf_dlm3_rf_lvblen
,
1495 { "Lock Value Block Length", "dlm3.rf.lvblen",
1496 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
1499 /* rcom_config::rf_lsflags */
1500 { &hf_dlm3_rf_lsflags
,
1501 { "External Flags", "dlm3.rf.lsflags",
1502 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
1504 { &hf_dlm3_rf_lsflags_noqueue
,
1505 { "Don't queue", "dlm3.rf.lsflags.noqueue",
1506 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_NOQUEUE
,
1508 { &hf_dlm3_rf_lsflags_cancel
,
1509 { "Cancel", "dlm3.rf.lsflags.cancel",
1510 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_CANCEL
,
1512 { &hf_dlm3_rf_lsflags_convert
,
1513 { "Convert", "dlm3.rf.lsflags.convert",
1514 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_CONVERT
,
1516 { &hf_dlm3_rf_lsflags_valblk
,
1517 { "Return the contents of the lock value block", "dlm3.rf.lsflags.valblk",
1518 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_VALBLK
,
1520 { &hf_dlm3_rf_lsflags_quecvt
,
1521 { "Force a conversion request to be queued", "dlm3.rf.lsflags.quecvt",
1522 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_QUECVT
,
1524 { &hf_dlm3_rf_lsflags_ivvalblk
,
1525 { "Invalidate the lock value block", "dlm3.rf.lsflags.ivvalblk",
1526 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_IVVALBLK
,
1528 { &hf_dlm3_rf_lsflags_convdeadlk
,
1529 { "Forced down to NL to resolve a conversion deadlock", "dlm3.rf.lsflags.convdeadlk",
1530 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_CONVDEADLK
,
1532 { &hf_dlm3_rf_lsflags_persistent
,
1533 { "Persistent", "dlm3.rf.lsflags.persistent",
1534 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_PERSISTENT
,
1536 { &hf_dlm3_rf_lsflags_nodlckwt
,
1537 { "Don't cancel the lock if it gets into conversion deadlock", "dlm3.rf.lsflags.nodlckwt",
1538 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_NODLCKWT
,
1540 { &hf_dlm3_rf_lsflags_nodlckblk
,
1541 { "Nodlckblk", "dlm3.rf.lsflags.nodlckblk",
1542 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_NODLCKBLK
,
1544 { &hf_dlm3_rf_lsflags_expedite
,
1545 { "Grant a NL lock immediately", "dlm3.rf.lsflags.expedite",
1546 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_EXPEDITE
,
1548 { &hf_dlm3_rf_lsflags_noqueuebast
,
1549 { "Send blocking ASTs even for NOQUEUE operations", "dlm3.rf.lsflags.noqueuebast",
1550 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_NOQUEUEBAST
,
1552 { &hf_dlm3_rf_lsflags_headque
,
1553 { "Add a lock to the head of the queue", "dlm3.rf.lsflags.headque",
1554 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_HEADQUE
,
1556 { &hf_dlm3_rf_lsflags_noorder
,
1557 { "Disregard the standard grant order rules", "dlm3.rf.lsflags.noorder",
1558 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_NOORDER
,
1560 { &hf_dlm3_rf_lsflags_orphan
,
1561 { "Orphan", "dlm3.rf.lsflags.orphan",
1562 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_ORPHAN
,
1564 { &hf_dlm3_rf_lsflags_altpr
,
1565 { "Try to grant the lock in `protected read' mode", "dlm3.rf.lsflags.altpr",
1566 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_ALTPR
,
1568 { &hf_dlm3_rf_lsflags_altcw
,
1569 { "Try to grant the lock in `concurrent read' mode", "dlm3.rf.lsflags.altcw",
1570 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_ALTCW
,
1572 { &hf_dlm3_rf_lsflags_forceunlock
,
1573 { "Force unlock", "dlm3.rf.lsflags.forceunlock",
1574 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_FORCEUNLOCK
,
1576 { &hf_dlm3_rf_lsflags_timeout
,
1577 { "Timeout", "dlm3.rf.lsflags.timeout",
1578 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_TIMEOUT
,
1581 { &hf_dlm3_rf_unused
,
1582 { "Unused area", "dlm3.rf.lsflags.unused",
1583 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
1587 { &hf_dlm3_rs_flags
,
1588 { "Recovery Command Status Flags", "dlm3.rs.flags",
1589 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
1591 { &hf_dlm3_rs_flags_need_slots
,
1592 { "Need slots", "dlm3.rs.flags.need_slots",
1593 FT_UINT32
, BASE_HEX
, NULL
, DLM_RSF_NEED_SLOTS
,
1595 { &hf_dlm3_rs_unused1
,
1596 { "Unused area", "dlm3.rs.unused1",
1597 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
1599 { &hf_dlm3_rs_unused2
,
1600 { "Unused area", "dlm3.rs.unused2",
1601 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
1605 { &hf_dlm3_rl_ownpid
,
1606 { "Process ID of Lock Owner", "dlm3.rl.ownpid",
1607 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
1610 { "Lock ID on Sender", "dlm3.rl.lkid",
1611 FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0,
1613 { &hf_dlm3_rl_remid
,
1614 { "Lock ID on Receiver", "dlm3.rl.remid",
1615 FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0,
1617 { &hf_dlm3_rl_parent_lkid
,
1618 { "Parent Lock ID on Sender", "dlm3.rl.parent_lkid",
1619 FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0,
1621 { &hf_dlm3_rl_parent_remid
,
1622 { "Parent Lock ID on Receiver", "dlm3.rl.parent_remid",
1623 FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0,
1626 { &hf_dlm3_rl_exflags
,
1627 { "External Flags", "dlm3.rl.exflags",
1628 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
1630 { &hf_dlm3_rl_exflags_noqueue
,
1631 { "Don't queue", "dlm3.rl.exflags.noqueue",
1632 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_NOQUEUE
,
1634 { &hf_dlm3_rl_exflags_cancel
,
1635 { "Cancel", "dlm3.rl.exflags.cancel",
1636 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_CANCEL
,
1638 { &hf_dlm3_rl_exflags_convert
,
1639 { "Convert", "dlm3.rl.exflags.convert",
1640 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_CONVERT
,
1642 { &hf_dlm3_rl_exflags_valblk
,
1643 { "Return the contents of the lock value block", "dlm3.rl.exflags.valblk",
1644 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_VALBLK
,
1646 { &hf_dlm3_rl_exflags_quecvt
,
1647 { "Force a conversion request to be queued", "dlm3.rl.exflags.quecvt",
1648 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_QUECVT
,
1650 { &hf_dlm3_rl_exflags_ivvalblk
,
1651 { "Invalidate the lock value block", "dlm3.rl.exflags.ivvalblk",
1652 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_IVVALBLK
,
1654 { &hf_dlm3_rl_exflags_convdeadlk
,
1655 { "Forced down to NL to resolve a conversion deadlock", "dlm3.rl.exflags.convdeadlk",
1656 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_CONVDEADLK
,
1658 { &hf_dlm3_rl_exflags_persistent
,
1659 { "Persistent", "dlm3.rl.exflags.persistent",
1660 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_PERSISTENT
,
1662 { &hf_dlm3_rl_exflags_nodlckwt
,
1663 { "Don't cancel the lock if it gets into conversion deadlock", "dlm3.rl.exflags.nodlckwt",
1664 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_NODLCKWT
,
1666 { &hf_dlm3_rl_exflags_nodlckblk
,
1667 { "Nodlckblk", "dlm3.rl.exflags.nodlckblk",
1668 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_NODLCKBLK
,
1670 { &hf_dlm3_rl_exflags_expedite
,
1671 { "Grant a NL lock immediately", "dlm3.rl.exflags.expedite",
1672 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_EXPEDITE
,
1674 { &hf_dlm3_rl_exflags_noqueuebast
,
1675 { "Send blocking ASTs even for NOQUEUE operations", "dlm3.rl.exflags.noqueuebast",
1676 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_NOQUEUEBAST
,
1678 { &hf_dlm3_rl_exflags_headque
,
1679 { "Add a lock to the head of the queue", "dlm3.rl.exflags.headque",
1680 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_HEADQUE
,
1682 { &hf_dlm3_rl_exflags_noorder
,
1683 { "Disregard the standard grant order rules", "dlm3.rl.exflags.noorder",
1684 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_NOORDER
,
1686 { &hf_dlm3_rl_exflags_orphan
,
1687 { "Orphan", "dlm3.rl.exflags.orphan",
1688 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_ORPHAN
,
1690 { &hf_dlm3_rl_exflags_altpr
,
1691 { "Try to grant the lock in `protected read' mode", "dlm3.rl.exflags.altpr",
1692 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_ALTPR
,
1694 { &hf_dlm3_rl_exflags_altcw
,
1695 { "Try to grant the lock in `concurrent read' mode", "dlm3.rl.exflags.altcw",
1696 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_ALTCW
,
1698 { &hf_dlm3_rl_exflags_forceunlock
,
1699 { "Force unlock", "dlm3.rl.exflags.forceunlock",
1700 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_FORCEUNLOCK
,
1702 { &hf_dlm3_rl_exflags_timeout
,
1703 { "Timeout", "dlm3.rl.exflags.timeout",
1704 FT_BOOLEAN
, 32, NULL
, DLM3_LKF_TIMEOUT
,
1706 { &hf_dlm3_rl_flags
,
1707 { "Internal Flags", "dlm3.rl.flags",
1708 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
1710 { &hf_dlm3_rl_flags_user
,
1711 { "User space lock related", "dlm3.rl.flags.user",
1712 FT_BOOLEAN
, 32, NULL
, DLM3_IFL_USER
,
1714 { &hf_dlm3_rl_flags_orphan
,
1715 { "Orphaned lock", "dlm3.rl.flags.orphan",
1716 FT_BOOLEAN
, 32, NULL
, DLM3_IFL_ORPHAN
,
1719 { &hf_dlm3_rl_lvbseq
,
1720 { "Lock Value Block Sequence Number", "dlm3.rl.lvbseq",
1721 FT_UINT32
, BASE_DEC_HEX
, NULL
, 0x0,
1723 { &hf_dlm3_rl_result
,
1724 { "Result of Recovering master copy", "dlm3.rl.result",
1725 FT_INT32
, BASE_DEC
, VALS(dlm3_result
), 0x0,
1727 { &hf_dlm3_rl_rqmode
,
1728 { "Request Mode", "dlm3.rl.rqmode",
1729 FT_INT8
, BASE_DEC
, VALS(dlm3_mode
), 0x0,
1731 { &hf_dlm3_rl_grmode
,
1732 { "Granted Mode", "dlm3.rl.grmode",
1733 FT_INT8
, BASE_DEC
, VALS(dlm3_mode
), 0x0,
1735 { &hf_dlm3_rl_status
,
1736 { "Status", "dlm3.rl.status",
1737 FT_INT8
, BASE_DEC
, VALS(dlm3_rs
), 0x0,
1740 { "Asynchronous Traps", "dlm3.rl.asts",
1741 FT_UINT8
, BASE_HEX
, NULL
, 0x0,
1743 { &hf_dlm3_rl_asts_comp
,
1744 { "Completion", "dlm3.rl.asts.comp",
1745 FT_BOOLEAN
, 8, NULL
, DLM3_AST_COMP
,
1747 { &hf_dlm3_rl_asts_bast
,
1748 { "Blocking", "dlm3.rl.asts.bast",
1749 FT_BOOLEAN
, 8, NULL
, DLM3_AST_BAST
,
1752 { &hf_dlm3_rl_wait_type
,
1753 { "Message Type the waiter is waiting for", "dlm3.rl.wait_type",
1754 FT_UINT16
, BASE_DEC
, VALS(dlm3_msg
), 0x0,
1757 { &hf_dlm3_rl_namelen
,
1758 { "Length of `name' field", "dlm3.rl.namelen",
1759 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
1762 { "Name of Resource", "dlm3.rl.name",
1763 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
1765 { &hf_dlm3_rl_name_contents
,
1766 { "Contents actually occupying `name' field", "dlm3.rl.name_contents",
1767 FT_STRING
, BASE_NONE
, NULL
, 0x0,
1769 { &hf_dlm3_rl_name_padding
,
1770 { "Padding", "dlm3.rl.name_padding",
1771 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
1774 { "Lock Value Block", "dlm3.rl.lvb",
1775 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
1779 static int *ett
[] = {
1788 &ett_dlm3_m_exflags
,
1794 &ett_dlm3_rcom_status
,
1795 &ett_dlm3_rcom_lock
,
1796 &ett_dlm3_rcom_config
,
1800 &ett_dlm3_rf_lsflags
,
1801 &ett_dlm3_rl_exflags
,
1807 proto_dlm3
= proto_register_protocol("Distributed Lock Manager",
1809 proto_register_field_array(proto_dlm3
, hf
, array_length(hf
));
1810 proto_register_subtree_array(ett
, array_length(ett
));
1812 /* dlm3_module = prefs_register_protocol(proto_dlm3, NULL); */
1814 dlm3_sctp_handle
= register_dissector("dlm3", dissect_dlm3
, proto_dlm3
);
1815 dlm3_tcp_handle
= register_dissector("dlm3.tcp", dissect_tcp_dlm3
, proto_dlm3
);
1821 proto_reg_handoff_dlm3(void)
1823 dissector_add_uint_with_preference("tcp.port", TCP_PORT_DLM3
, dlm3_tcp_handle
);
1824 dissector_add_uint_with_preference("sctp.port", SCTP_PORT_DLM3
, dlm3_sctp_handle
);
1827 /* packet-dlm3.c ends here. */
1830 * Editor modelines - https://www.wireshark.org/tools/modelines.html
1835 * indent-tabs-mode: nil
1838 * ex: set shiftwidth=2 tabstop=8 expandtab:
1839 * :indentSize=2:tabSize=8:noTabs=true: