Bug Summary

File:epan/dissectors/packet-darwin.c
Warning:line 432, column 13
Value stored to 'first_metadata_item' is never read

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple x86_64-pc-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name packet-darwin.c -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -fno-delete-null-pointer-checks -mframe-pointer=all -relaxed-aliasing -fmath-errno -ffp-contract=on -fno-rounding-math -ffloat16-excess-precision=fast -fbfloat16-excess-precision=fast -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fdebug-compilation-dir=/builds/wireshark/wireshark/build -fcoverage-compilation-dir=/builds/wireshark/wireshark/build -resource-dir /usr/lib/llvm-20/lib/clang/20 -isystem /usr/include/glib-2.0 -isystem /usr/lib/x86_64-linux-gnu/glib-2.0/include -isystem /builds/wireshark/wireshark/epan/dissectors -isystem /builds/wireshark/wireshark/build/epan/dissectors -isystem /usr/include/mit-krb5 -isystem /usr/include/libxml2 -isystem /builds/wireshark/wireshark/epan -D G_DISABLE_DEPRECATED -D G_DISABLE_SINGLE_INCLUDES -D WS_BUILD_DLL -D WS_DEBUG -D WS_DEBUG_UTF_8 -I /builds/wireshark/wireshark/build -I /builds/wireshark/wireshark -I /builds/wireshark/wireshark/include -D _GLIBCXX_ASSERTIONS -internal-isystem /usr/lib/llvm-20/lib/clang/20/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/14/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fmacro-prefix-map=/builds/wireshark/wireshark/= -fmacro-prefix-map=/builds/wireshark/wireshark/build/= -fmacro-prefix-map=../= -Wno-format-truncation -Wno-format-nonliteral -Wno-pointer-sign -std=gnu11 -ferror-limit 19 -fvisibility=hidden -fwrapv -fwrapv-pointer -fstrict-flex-arrays=3 -stack-protector 2 -fstack-clash-protection -fcf-protection=full -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fexceptions -fcolor-diagnostics -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /builds/wireshark/wireshark/sbout/2025-09-13-101102-3933-1 -x c /builds/wireshark/wireshark/epan/dissectors/packet-darwin.c
1/* packet-darwin.c
2 * Support for Apple Legacy and Custom pcapng blocks and options
3 * Copyright 2025, Omer Shapira <[email protected]>
4 *
5 * Wireshark - Network traffic analyzer
6 * By Gerald Combs <[email protected]>
7 * Copyright 1998 Gerald Combs
8 *
9 *
10 * SPDX-License-Identifier: GPL-2.0-or-later
11 */
12
13
14#include "config.h"
15
16#include <wiretap/wtap.h>
17#include <epan/packet.h>
18#include <epan/proto_data.h>
19#include <epan/tfs.h>
20
21#define PNAME"Apple Darwin" "Apple Darwin"
22#define PSNAME"Darwin" "Darwin"
23#define PFNAME"darwin" "darwin"
24
25void proto_register_darwin(void);
26void proto_reg_handoff_darwin(void);
27
28/* Initialize the protocol and registered fields */
29static int proto_darwin;
30
31static int hf_process_info;
32static int hf_process_info_pname;
33static int hf_process_info_pid;
34static int hf_process_info_epname;
35static int hf_process_info_epid;
36
37static int hf_darwin_metadata;
38static int hf_darwin_metadata_svc_code;
39static int hf_darwin_metadata_flags;
40static int hf_darwin_metadata_flags_reserved;
41static int hf_darwin_metadata_flags_wk;
42static int hf_darwin_metadata_flags_ch;
43static int hf_darwin_metadata_flags_so;
44static int hf_darwin_metadata_flags_re;
45static int hf_darwin_metadata_flags_ka;
46static int hf_darwin_metadata_flags_nf;
47
48static int hf_darwin_metadata_flow_id;
49static int hf_darwin_metadata_trace_tag;
50static int hf_darwin_metadata_dropped;
51static int hf_darwin_metadata_drop_reason;
52static int hf_darwin_metadata_drop_line;
53static int hf_darwin_metadata_drop_func;
54
55static int hf_darwin_metadata_comp_gencnt;
56
57static int ett_proc_info;
58static int ett_proc_info_proc;
59static int ett_proc_info_eproc;
60static int ett_darwin_metadata;
61static int ett_darwin_metadata_flags;
62static int ett_darwin_metadata_dropped;
63
64static const value_string darwin_svc_class_vals[] = {
65 { 0x0000, "BE" },
66 { 0x0064, "BK_SYS" },
67 { 0x00C8, "BK" },
68 { 0x012C, "RD" },
69 { 0x0190, "OAM" },
70 { 0x01F4, "AV" },
71 { 0x0258, "RV" },
72 { 0x02BC, "VI" },
73 { 0x0320, "VO" },
74 { 0x0384, "CTL" },
75 { 0, NULL((void*)0) }
76};
77
78typedef struct darwin_md {
79#define PINFO_DARWIN_MD_HAS_DPIB_ID1 1
80 uint32_t dpib_id; /**< Id of the Darwin Process Info Block that corresponds to the `proc` */
81#define PINFO_DARWIN_MD_HAS_EDPIB_ID2 2
82 uint32_t effective_dpib_id; /**< Id of the Darwin Process Info Block that corresponds to the `eproc` */
83#define PINFO_DARWIN_MD_HAS_SVC_CODE4 4
84 uint32_t svc_code; /**< Service Class Code */
85#define PINFO_DARWIN_MD_HAS_MD_FLAGS8 8
86 uint32_t md_flags; /**< Metadata flags */
87#define PINFO_DARWIN_MD_HAS_FLOW_ID16 16
88 uint32_t flow_id; /**< Internal flow id (flow =~ TCP / QUIC conn) */
89#define PINFO_DARWIN_MD_HAS_TRACE_TAG32 32
90 uint32_t trace_tag; /**< Internal trace tag */
91#define PINFO_DARWIN_MD_HAS_DROP_REASON64 64
92 uint32_t drop_reason; /**< Packet was dropped by kernel (not by libpcap) */
93#define PINFO_DARWIN_MD_HAS_DROP_LINE128 128
94 uint32_t drop_line; /**< Packet was dropped by kernel (not by libpcap) */
95#define PINFO_DARWIN_MD_HAS_DROP_FUNC256 256
96 const char* drop_func; /**< Packet was dropped by kernel (not by libpcap) */
97#define PINFO_DARWIN_MD_HAS_COMP_GENCNT512 512
98 uint32_t comp_gencnt; /**< Generation count */
99#define PINFO_DARWIN_MD_OPT_BITMASK( 4| 8| 16| 32| 64| 128| 256| 512) (\
100 PINFO_DARWIN_MD_HAS_SVC_CODE4|\
101 PINFO_DARWIN_MD_HAS_MD_FLAGS8|\
102 PINFO_DARWIN_MD_HAS_FLOW_ID16|\
103 PINFO_DARWIN_MD_HAS_TRACE_TAG32|\
104 PINFO_DARWIN_MD_HAS_DROP_REASON64|\
105 PINFO_DARWIN_MD_HAS_DROP_LINE128|\
106 PINFO_DARWIN_MD_HAS_DROP_FUNC256|\
107 PINFO_DARWIN_MD_HAS_COMP_GENCNT512\
108) /**< Bitmask for Darwin-specific options (v.s. process info, which *may* be present on other systems ) */
109 uint64_t present_opts; /**< Bitmask for present codes */
110} darwin_md;
111
112
113#define DARWIN_MD_FLAG_WK0x00000020 0x00000020
114#define DARWIN_MD_FLAG_CH0x00000010 0x00000010
115#define DARWIN_MD_FLAG_SO0x00000008 0x00000008
116#define DARWIN_MD_FLAG_RE0x00000004 0x00000004
117#define DARWIN_MD_FLAG_KA0x00000002 0x00000002
118#define DARWIN_MD_FLAG_NF0x00000001 0x00000001
119#define DARWIN_MD_FLAG_RESERVED(~( 0x00000020| 0x00000010| 0x00000008| 0x00000004| 0x00000002
| 0x00000001))
(~(\
120 DARWIN_MD_FLAG_WK0x00000020|\
121 DARWIN_MD_FLAG_CH0x00000010|\
122 DARWIN_MD_FLAG_SO0x00000008|\
123 DARWIN_MD_FLAG_RE0x00000004|\
124 DARWIN_MD_FLAG_KA0x00000002|\
125 DARWIN_MD_FLAG_NF0x00000001))
126static int* const darwin_md_flags[] = {
127 &hf_darwin_metadata_flags_reserved,
128 &hf_darwin_metadata_flags_wk,
129 &hf_darwin_metadata_flags_ch,
130 &hf_darwin_metadata_flags_so,
131 &hf_darwin_metadata_flags_re,
132 &hf_darwin_metadata_flags_ka,
133 &hf_darwin_metadata_flags_nf,
134 NULL((void*)0)
135};
136
137static struct darwin_md*
138get_darwin_proto_data(packet_info* pinfo)
139{
140 struct darwin_md* darwin = (struct darwin_md*)p_get_proto_data(wmem_file_scope(), pinfo, proto_darwin, 0);
141 if (darwin == NULL((void*)0))
142 {
143 darwin = wmem_new0(wmem_file_scope(), struct darwin_md)((struct darwin_md*)wmem_alloc0((wmem_file_scope()), sizeof(struct
darwin_md)))
;
144 p_add_proto_data(wmem_file_scope(), pinfo, proto_darwin, 0, darwin);
145 }
146
147 return darwin;
148}
149
150static int
151dissect_darwin_dpib_id(tvbuff_t* tvb _U___attribute__((unused)), packet_info* pinfo, proto_tree* tree _U___attribute__((unused)), void* data)
152{
153 wtap_optval_t* optval = (wtap_optval_t*)data;
154
155 struct darwin_md* darwin = get_darwin_proto_data(pinfo);
156 darwin->dpib_id = optval->uint32val;
157 darwin->present_opts |= PINFO_DARWIN_MD_HAS_DPIB_ID1;
158
159 return 1;
160}
161
162static int
163dissect_darwin_effective_dpib_id(tvbuff_t* tvb _U___attribute__((unused)), packet_info* pinfo, proto_tree* tree _U___attribute__((unused)), void* data)
164{
165 wtap_optval_t* optval = (wtap_optval_t*)data;
166
167 struct darwin_md* darwin = get_darwin_proto_data(pinfo);
168 darwin->effective_dpib_id = optval->uint32val;
169 darwin->present_opts |= PINFO_DARWIN_MD_HAS_EDPIB_ID2;
170
171 return 1;
172}
173
174static int
175dissect_darwin_svc_code(tvbuff_t* tvb _U___attribute__((unused)), packet_info* pinfo, proto_tree* tree _U___attribute__((unused)), void* data)
176{
177 wtap_optval_t* optval = (wtap_optval_t*)data;
178
179 struct darwin_md* darwin = get_darwin_proto_data(pinfo);
180 darwin->svc_code = optval->uint32val;
181 darwin->present_opts |= PINFO_DARWIN_MD_HAS_SVC_CODE4;
182
183 return 1;
184}
185
186static int
187dissect_darwin_md_flags(tvbuff_t* tvb _U___attribute__((unused)), packet_info* pinfo, proto_tree* tree _U___attribute__((unused)), void* data)
188{
189 wtap_optval_t* optval = (wtap_optval_t*)data;
190
191 struct darwin_md* darwin = get_darwin_proto_data(pinfo);
192 darwin->md_flags = optval->uint32val;
193 darwin->present_opts |= PINFO_DARWIN_MD_HAS_MD_FLAGS8;
194
195 return 1;
196}
197
198static int
199dissect_darwin_flow_id(tvbuff_t* tvb _U___attribute__((unused)), packet_info* pinfo, proto_tree* tree _U___attribute__((unused)), void* data)
200{
201 wtap_optval_t* optval = (wtap_optval_t*)data;
202
203 struct darwin_md* darwin = get_darwin_proto_data(pinfo);
204 darwin->flow_id = optval->uint32val;
205 darwin->present_opts |= PINFO_DARWIN_MD_HAS_FLOW_ID16;
206
207 return 1;
208}
209
210static int
211dissect_darwin_trace_tag(tvbuff_t* tvb _U___attribute__((unused)), packet_info* pinfo, proto_tree* tree _U___attribute__((unused)), void* data)
212{
213 wtap_optval_t* optval = (wtap_optval_t*)data;
214
215 struct darwin_md* darwin = get_darwin_proto_data(pinfo);
216 darwin->trace_tag = optval->uint32val;
217 darwin->present_opts |= PINFO_DARWIN_MD_HAS_TRACE_TAG32;
218
219 return 1;
220}
221
222static int
223dissect_darwin_drop_reason(tvbuff_t* tvb _U___attribute__((unused)), packet_info* pinfo, proto_tree* tree _U___attribute__((unused)), void* data)
224{
225 wtap_optval_t* optval = (wtap_optval_t*)data;
226
227 struct darwin_md* darwin = get_darwin_proto_data(pinfo);
228 darwin->drop_reason = optval->uint32val;
229 darwin->present_opts |= PINFO_DARWIN_MD_HAS_DROP_REASON64;
230
231 return 1;
232}
233
234static int
235dissect_darwin_drop_line(tvbuff_t* tvb _U___attribute__((unused)), packet_info* pinfo, proto_tree* tree _U___attribute__((unused)), void* data)
236{
237 wtap_optval_t* optval = (wtap_optval_t*)data;
238
239 struct darwin_md* darwin = get_darwin_proto_data(pinfo);
240 darwin->drop_line = optval->uint32val;
241 darwin->present_opts |= PINFO_DARWIN_MD_HAS_DROP_LINE128;
242
243 return 1;
244}
245
246static int
247dissect_darwin_drop_func(tvbuff_t* tvb _U___attribute__((unused)), packet_info* pinfo, proto_tree* tree _U___attribute__((unused)), void* data)
248{
249 wtap_optval_t* optval = (wtap_optval_t*)data;
250
251 struct darwin_md* darwin = get_darwin_proto_data(pinfo);
252 darwin->drop_func = optval->stringval;
253 darwin->present_opts |= PINFO_DARWIN_MD_HAS_DROP_FUNC256;
254
255 return 1;
256}
257
258static int
259dissect_darwin_comp_gencnt(tvbuff_t* tvb _U___attribute__((unused)), packet_info* pinfo, proto_tree* tree _U___attribute__((unused)), void* data)
260{
261 wtap_optval_t* optval = (wtap_optval_t*)data;
262
263 struct darwin_md* darwin = get_darwin_proto_data(pinfo);
264 darwin->comp_gencnt = optval->uint32val;
265 darwin->present_opts |= PINFO_DARWIN_MD_HAS_COMP_GENCNT512;
266
267 return 1;
268}
269
270static int
271dissect_darwin_data(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, void* data _U___attribute__((unused)))
272{
273 struct darwin_md* darwin = (struct darwin_md*)p_get_proto_data(wmem_file_scope(), pinfo, proto_darwin, 0);
274 proto_item* ti;
275
276 /* Reqiure darwin data */
277 if (darwin == NULL((void*)0))
278 return 0;
279
280 int section_number = (pinfo->rec->presence_flags & WTAP_HAS_SECTION_NUMBER0x00000008) ? pinfo->rec->section_number : 0;
281
282 if (darwin->present_opts & (PINFO_DARWIN_MD_HAS_DPIB_ID1 | PINFO_DARWIN_MD_HAS_EDPIB_ID2)) {
283 uint32_t proc_id;
284 const char* proc_name;
285 uint32_t eproc_id;
286 const char* eproc_name;
287
288 proc_id = epan_get_process_id(pinfo->epan, darwin->dpib_id, section_number);
289 proc_name = epan_get_process_name(pinfo->epan, darwin->dpib_id, section_number);
290
291 /* If the effective dpib id is not present, or is equal to the primary dpib id,
292 * set the eproc_id to proc_id.
293 */
294 if (((darwin->present_opts & PINFO_DARWIN_MD_HAS_EDPIB_ID2) == 0) ||
295 (darwin->dpib_id == darwin->effective_dpib_id)) {
296 eproc_id = proc_id;
297 eproc_name = proc_name;
298 }
299 else {
300 eproc_id = epan_get_process_id(pinfo->epan, darwin->effective_dpib_id, section_number);
301 eproc_name = epan_get_process_name(pinfo->epan, darwin->effective_dpib_id, section_number);
302 }
303
304 if (proc_name) {
305 proto_item* proc_info_item;
306 proto_tree* proc_info_tree;
307
308 if (proc_id == eproc_id) {
309 proc_info_item = proto_tree_add_item(tree, hf_process_info, tvb, 0, 0, ENC_NA0x00000000);
310 proc_info_tree = proto_item_add_subtree(proc_info_item, ett_proc_info);
311 PROTO_ITEM_SET_GENERATED(proc_info_item)proto_item_set_generated((proc_info_item));
312 proto_item_append_text(proc_info_item, ": %s(%u)", proc_name, proc_id);
313 ti = proto_tree_add_uint(proc_info_tree, hf_process_info_pid, tvb, 0, 0, proc_id);
314 PROTO_ITEM_SET_GENERATED(ti)proto_item_set_generated((ti));
315 ti = proto_tree_add_string(proc_info_tree, hf_process_info_pname, tvb, 0, 0, proc_name);
316 PROTO_ITEM_SET_GENERATED(ti)proto_item_set_generated((ti));
317 }
318 else {
319 proc_info_item = proto_tree_add_item(tree, hf_process_info, tvb, 0, 0, ENC_NA0x00000000);
320 proc_info_tree = proto_item_add_subtree(proc_info_item, ett_proc_info);
321 PROTO_ITEM_SET_GENERATED(proc_info_item)proto_item_set_generated((proc_info_item));
322 proto_item_append_text(proc_info_item, ": %s(%u) [%s(%u)]", proc_name, proc_id, eproc_name, eproc_id);
323 ti = proto_tree_add_uint(proc_info_tree, hf_process_info_pid, tvb, 0, 0, proc_id);
324 PROTO_ITEM_SET_GENERATED(ti)proto_item_set_generated((ti));
325 ti = proto_tree_add_string(proc_info_tree, hf_process_info_pname, tvb, 0, 0, proc_name);
326 PROTO_ITEM_SET_GENERATED(ti)proto_item_set_generated((ti));
327 }
328
329 proto_item_append_text(tree, " proc: %s(%u)", proc_name, proc_id);
330 }
331 else {
332 proto_item_append_text(tree, " pid: %u", proc_id);
333 }
334
335 /* This extra scrutiny is to ensure that the effective process id
336 * is _actually_ different from the primary process id.
337 */
338 if ((proc_id != eproc_id) && (eproc_name != NULL((void*)0))) {
339 proto_item_append_text(tree, " [%s(%u)]", eproc_name, eproc_id);
340 }
341 else {
342 proto_item_append_text(tree, " [%u]", eproc_id);
343 }
344 }
345
346 /* Check for Darwin-specific options, and create a subtree if needed */
347 if (darwin->present_opts & PINFO_DARWIN_MD_OPT_BITMASK( 4| 8| 16| 32| 64| 128| 256| 512)) {
348 proto_item* dmd_item;
349 proto_tree* dmd_tree;
350 bool_Bool first_metadata_item = true1;
351
352 dmd_item = proto_tree_add_boolean_format(tree, hf_darwin_metadata, tvb, 0, 0, true1, "Darwin Metadata:");
353 dmd_tree = proto_item_add_subtree(dmd_item, ett_darwin_metadata);
354 PROTO_ITEM_SET_GENERATED(dmd_item)proto_item_set_generated((dmd_item));
355
356 if (darwin->present_opts & PINFO_DARWIN_MD_HAS_MD_FLAGS8) {
357 ti = proto_tree_add_bitmask_value(dmd_tree, tvb, 0, hf_darwin_metadata_flags, ett_darwin_metadata_flags, darwin_md_flags, darwin->md_flags);
358 PROTO_ITEM_SET_GENERATED(ti)proto_item_set_generated((ti));
359 proto_item_append_text(dmd_item, " flags=%s%s%s%s%s%s",
360 (darwin->md_flags & DARWIN_MD_FLAG_WK0x00000020) ? "W" : ".",
361 (darwin->md_flags & DARWIN_MD_FLAG_CH0x00000010) ? "C" : ".",
362 (darwin->md_flags & DARWIN_MD_FLAG_SO0x00000008) ? "S" : ".",
363 (darwin->md_flags & DARWIN_MD_FLAG_RE0x00000004) ? "R" : ".",
364 (darwin->md_flags & DARWIN_MD_FLAG_KA0x00000002) ? "K" : ".",
365 (darwin->md_flags & DARWIN_MD_FLAG_NF0x00000001) ? "N" : "."
366 );
367 first_metadata_item = false0;
368 }
369 if (darwin->present_opts & PINFO_DARWIN_MD_HAS_SVC_CODE4) {
370 ti = proto_tree_add_uint(dmd_tree, hf_darwin_metadata_svc_code, tvb, 0, 0, darwin->svc_code);
371 PROTO_ITEM_SET_GENERATED(ti)proto_item_set_generated((ti));
372 proto_item_append_text(dmd_item, "%ssc=%s",
373 first_metadata_item ? " " : "; ",
374 val_to_str_const(darwin->svc_code, darwin_svc_class_vals, "Unknown"));
375 first_metadata_item = false0;
376 }
377 if (darwin->present_opts & PINFO_DARWIN_MD_HAS_FLOW_ID16) {
378 ti = proto_tree_add_uint(dmd_tree, hf_darwin_metadata_flow_id, tvb, 0, 0, darwin->flow_id);
379 PROTO_ITEM_SET_GENERATED(ti)proto_item_set_generated((ti));
380 proto_item_append_text(dmd_item, "%sfi=%x",
381 first_metadata_item ? " " : "; ",
382 darwin->flow_id);
383 first_metadata_item = false0;
384 }
385 if (darwin->present_opts & PINFO_DARWIN_MD_HAS_TRACE_TAG32) {
386 ti = proto_tree_add_uint(dmd_tree, hf_darwin_metadata_trace_tag, tvb, 0, 0, darwin->trace_tag);
387 PROTO_ITEM_SET_GENERATED(ti)proto_item_set_generated((ti));
388 proto_item_append_text(dmd_item, "%strace=%x",
389 first_metadata_item ? " " : "; ",
390 darwin->trace_tag);
391 first_metadata_item = false0;
392 }
393 if (darwin->present_opts & (PINFO_DARWIN_MD_HAS_DROP_REASON64 | PINFO_DARWIN_MD_HAS_DROP_LINE128 | PINFO_DARWIN_MD_HAS_DROP_FUNC256)) {
394 proto_tree* drop_tree;
395 proto_item* drop_item;
396
397 drop_item = proto_tree_add_boolean(dmd_tree, hf_darwin_metadata_dropped, tvb, 0, 0, true1);
398 drop_tree = proto_item_add_subtree(drop_item, ett_darwin_metadata_dropped);
399 PROTO_ITEM_SET_GENERATED(drop_item)proto_item_set_generated((drop_item));
400 proto_item_append_text(dmd_item, "%sdrop", first_metadata_item ? " " : "; ");
401
402 if (darwin->present_opts & PINFO_DARWIN_MD_HAS_DROP_FUNC256) {
403 ti = proto_tree_add_string(drop_tree, hf_darwin_metadata_drop_func, tvb, 0, 0, darwin->drop_func);
404 PROTO_ITEM_SET_GENERATED(ti)proto_item_set_generated((ti));
405 proto_item_append_text(dmd_item, " %s", darwin->drop_func);
406 proto_item_append_text(drop_item, " %s", darwin->drop_func);
407 }
408 if (darwin->present_opts & PINFO_DARWIN_MD_HAS_DROP_LINE128) {
409 ti = proto_tree_add_uint(drop_tree, hf_darwin_metadata_drop_line, tvb, 0, 0, darwin->drop_line);
410 PROTO_ITEM_SET_GENERATED(ti)proto_item_set_generated((ti));
411 proto_item_append_text(dmd_item, "%s%u",
412 (darwin->present_opts & PINFO_DARWIN_MD_HAS_DROP_FUNC256) ? ":" : " ",
413 darwin->drop_line);
414 proto_item_append_text(drop_item, "%s%u",
415 (darwin->present_opts & PINFO_DARWIN_MD_HAS_DROP_FUNC256) ? ":" : " ",
416 darwin->drop_line);
417 }
418 if (darwin->present_opts & PINFO_DARWIN_MD_HAS_DROP_REASON64) {
419 ti = proto_tree_add_uint(drop_tree, hf_darwin_metadata_drop_reason, tvb, 0, 0, darwin->drop_reason);
420 PROTO_ITEM_SET_GENERATED(ti)proto_item_set_generated((ti));
421 proto_item_append_text(dmd_item, " 0x%x", darwin->drop_reason);
422 proto_item_append_text(drop_item, " 0x%x", darwin->drop_reason);
423 }
424 first_metadata_item = false0;
425 }
426 if (darwin->present_opts & PINFO_DARWIN_MD_HAS_COMP_GENCNT512) {
427 ti = proto_tree_add_uint(dmd_tree, hf_darwin_metadata_comp_gencnt, tvb, 0, 0, darwin->comp_gencnt);
428 PROTO_ITEM_SET_GENERATED(ti)proto_item_set_generated((ti));
429 proto_item_append_text(dmd_item, "%sgencnt=%u",
430 first_metadata_item ? " " : "; ",
431 darwin->comp_gencnt);
432 first_metadata_item = false0;
Value stored to 'first_metadata_item' is never read
433 }
434 }
435
436 return 1;
437}
438
439void
440proto_register_darwin(void)
441{
442 /* Register the protocol name and description */
443 proto_darwin = proto_register_protocol(PNAME"Apple Darwin", PSNAME"Darwin", PFNAME"darwin");
444
445 register_dissector("darwin", dissect_darwin_data, proto_darwin);
446}
447
448
449void
450proto_reg_handoff_darwin(void)
451{
452 static hf_register_info hf_darwin_options[] = {
453 { &hf_process_info,
454 { "Process Information", "frame.darwin.process_info",
455 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
456 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
457 { &hf_process_info_pid,
458 { "Id", "frame.darwin.process_info.pid",
459 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
460 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
461 { &hf_process_info_pname,
462 { "Name", "frame.darwin.process_info.pname",
463 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
464 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
465 { &hf_process_info_epid,
466 { "Effective Id", "frame.darwin.process_info.epid",
467 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
468 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
469 { &hf_process_info_epname,
470 { "Effective Name", "frame.darwin.process_info.epname",
471 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
472 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
473 { &hf_darwin_metadata,
474 { "Darwin MD", "frame.darwin",
475 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
476 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
477 { &hf_darwin_metadata_svc_code,
478 { "Service Class", "frame.darwin.sc",
479 FT_UINT8, BASE_DEC, VALS(darwin_svc_class_vals)((0 ? (const struct _value_string*)0 : ((darwin_svc_class_vals
))))
, 0x0,
480 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
481 { &hf_darwin_metadata_flags,
482 { "Flags", "frame.darwin.flags",
483 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
484 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
485 { &hf_darwin_metadata_flags_reserved,
486 { "Reserved", "frame.darwin.flags.reserved",
487 FT_BOOLEAN, 32, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, DARWIN_MD_FLAG_RESERVED(~( 0x00000020| 0x00000010| 0x00000008| 0x00000004| 0x00000002
| 0x00000001))
,
488 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
489 { &hf_darwin_metadata_flags_wk,
490 { "Wake Packet(wk)", "frame.darwin.flags.wk",
491 FT_BOOLEAN, 32, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, DARWIN_MD_FLAG_WK0x00000020,
492 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
493 { &hf_darwin_metadata_flags_ch,
494 { "Nexus Channel(ch)", "frame.darwin.flags.ch",
495 FT_BOOLEAN, 32, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, DARWIN_MD_FLAG_CH0x00000010,
496 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
497 { &hf_darwin_metadata_flags_so,
498 { "Socket(so)", "frame.darwin.flags.so",
499 FT_BOOLEAN, 32, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, DARWIN_MD_FLAG_SO0x00000008,
500 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
501 { &hf_darwin_metadata_flags_re,
502 { "ReXmit(re)", "frame.darwin.flags.re",
503 FT_BOOLEAN, 32, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, DARWIN_MD_FLAG_RE0x00000004,
504 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
505 { &hf_darwin_metadata_flags_ka,
506 { "Keep Alive(ka)", "frame.darwin.flags.ka",
507 FT_BOOLEAN, 32, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, DARWIN_MD_FLAG_KA0x00000002,
508 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
509 { &hf_darwin_metadata_flags_nf,
510 { "New Flow(nf)", "frame.darwin.flags.nf",
511 FT_BOOLEAN, 32, TFS(&tfs_set_notset)((0 ? (const struct true_false_string*)0 : ((&tfs_set_notset
))))
, DARWIN_MD_FLAG_NF0x00000001,
512 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
513 { &hf_darwin_metadata_flow_id,
514 { "Flow Id", "frame.darwin.flow_id",
515 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
516 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
517 { &hf_darwin_metadata_trace_tag,
518 { "Trace Tag", "frame.darwin.trace_tag",
519 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
520 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
521 { &hf_darwin_metadata_dropped,
522 { "Packet Dropped By Kernel", "frame.darwin.drop",
523 FT_BOOLEAN, BASE_NONE, NULL((void*)0), 0x0,
524 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
525 { &hf_darwin_metadata_drop_reason,
526 { "Drop Reason", "frame.darwin.drop.reason_code",
527 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
528 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
529 { &hf_darwin_metadata_drop_line,
530 { "Drop Line", "frame.darwin.drop.line",
531 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
532 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
533 { &hf_darwin_metadata_drop_func,
534 { "Drop Func", "frame.darwin.drop.func",
535 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
536 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
537 { &hf_darwin_metadata_comp_gencnt,
538 { "Compression gencnt", "frame.darwin.gencnt",
539 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
540 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }},
541 };
542
543 static int *ett_frame_darwin_options[] = {
544 &ett_proc_info,
545 &ett_proc_info_proc,
546 &ett_proc_info_eproc,
547 &ett_darwin_metadata,
548 &ett_darwin_metadata_flags,
549 };
550
551 int proto_frame = proto_registrar_get_id_byname("frame");
552
553 proto_register_subtree_array(ett_frame_darwin_options, array_length(ett_frame_darwin_options)(sizeof (ett_frame_darwin_options) / sizeof (ett_frame_darwin_options
)[0])
);
554 proto_register_field_array(proto_frame, hf_darwin_options, array_length(hf_darwin_options)(sizeof (hf_darwin_options) / sizeof (hf_darwin_options)[0]));
555
556 dissector_add_uint("pcapng_packet_block_option", OPT_PKT_DARWIN_PIB_ID32769, create_dissector_handle(dissect_darwin_dpib_id, proto_darwin));
557 dissector_add_uint("pcapng_packet_block_option", OPT_PKT_DARWIN_EFFECTIVE_PIB_ID32771, create_dissector_handle(dissect_darwin_effective_dpib_id, proto_darwin));
558 dissector_add_uint("pcapng_packet_block_option", OPT_PKT_DARWIN_SVC_CODE32770, create_dissector_handle(dissect_darwin_svc_code, proto_darwin));
559 dissector_add_uint("pcapng_packet_block_option", OPT_PKT_DARWIN_MD_FLAGS32772, create_dissector_handle(dissect_darwin_md_flags, proto_darwin));
560 dissector_add_uint("pcapng_packet_block_option", OPT_PKT_DARWIN_FLOW_ID32773, create_dissector_handle(dissect_darwin_flow_id, proto_darwin));
561 dissector_add_uint("pcapng_packet_block_option", OPT_PKT_DARWIN_TRACE_TAG32774, create_dissector_handle(dissect_darwin_trace_tag, proto_darwin));
562 dissector_add_uint("pcapng_packet_block_option", OPT_PKT_DARWIN_DROP_REASON32775, create_dissector_handle(dissect_darwin_drop_reason, proto_darwin));
563 dissector_add_uint("pcapng_packet_block_option", OPT_PKT_DARWIN_DROP_LINE32776, create_dissector_handle(dissect_darwin_drop_line, proto_darwin));
564 dissector_add_uint("pcapng_packet_block_option", OPT_PKT_DARWIN_DROP_FUNC32777, create_dissector_handle(dissect_darwin_drop_func, proto_darwin));
565 dissector_add_uint("pcapng_packet_block_option", OPT_PKT_DARWIN_COMP_GENCNT32778, create_dissector_handle(dissect_darwin_comp_gencnt, proto_darwin));
566}
567
568/*
569 * Editor modelines - https://www.wireshark.org/tools/modelines.html
570 *
571 * Local variables:
572 * c-basic-offset: 4
573 * tab-width: 8
574 * indent-tabs-mode: nil
575 * End:
576 *
577 * vi: set shiftwidth=4 tabstop=8 expandtab:
578 * :indentSize=4:tabSize=8:noTabs=true:
579 */