Wireshark 4.5.0
The Wireshark network protocol analyzer
Loading...
Searching...
No Matches
packet-bpv7.h
1/* packet-bpv7.h
2 * Definitions for Bundle Protocol Version 7 dissection.
3 * References:
4 * RFC 9171: https://www.rfc-editor.org/rfc/rfc9171.html
5 *
6 * Copyright 2019-2021, Brian Sipos <[email protected]>
7 *
8 * Wireshark - Network traffic analyzer
9 * By Gerald Combs <[email protected]>
10 * Copyright 1998 Gerald Combs
11 *
12 * SPDX-License-Identifier: LGPL-2.1-or-later
13 */
14#ifndef PACKET_BPV7_H
15#define PACKET_BPV7_H
16
17#include <ws_symbol_export.h>
18#include <epan/tvbuff.h>
19#include <epan/proto.h>
20#include <epan/expert.h>
21
22#ifdef __cplusplus
23extern "C" {
24#endif
25
26/* This dissector defines two layers of protocol:
27 * - The BPv7 bundle format, its endpoint naming and its block types.
28 * - The BPv7 Administrative Record which is a bundle payload as indicated by
29 * a primary block flag.
30 *
31 * BPv7 endpoint identifier (EID) dissectors for the scheme-specific
32 * part (SSP) are registered with the dissector table "bpv7.eid".
33 * This table uses a `uint` key for the scheme number and uses bp_eid_t* as
34 * dissector user data to be populated by the SSP data.
35 * Specifically the bp_eid_t::uri should be populated by the text form
36 * of the EID (as an AT_STRINGZ value).
37 *
38 * BPv7 block-type-specific data (BTSD) dissectors are registered with the
39 * dissector table "bpv7.block_type" and Administrative Record dissectors
40 * with the table "bpv7.admin_record_type". Both use uint64_t* table keys.
41 * Both use bp_dissector_data_t* as dissector user data.
42 *
43 * There is a BTSD heuristic dissector table "bpv7.btsd" which uses
44 * bp_dissector_data_t* as dissector user data.
45 *
46 * Payload block (block type 1) dissection is additionally handled based on
47 * bundle flags and destination EID as:
48 * - If the bundle flags mark it as administrative, it is dissected as such.
49 * - If the destination is a well-known SSP, the dissector table
50 * "bpv7.payload.dtn_wkssp" is used with the scheme-specific part.
51 * - If the destination is "dtn" scheme, the dissector table
52 * "bpv7.payload.dtn_serv" is used with the service demux (text string).
53 * There is also Decode As behavior for dtn service demux.
54 * - If the destination is "ipn" scheme, the dissector table
55 * "bpv7.payload.ipn_serv" is used with the service number (uint value).
56 * There is also Decode As behavior for ipn service number.
57 * - Finally, fall through to BTSD heuristic dissection.
58 * All payload dissection uses bp_dissector_data_t* as dissector user data.
59 */
60
64typedef enum {
66 BP_CRC_NONE = 0,
68 BP_CRC_16 = 1,
70 BP_CRC_32 = 2,
71} BundleCrcType;
72
76typedef enum {
78 BP_BUNDLE_REQ_DELETION_REPORT = 0x040000,
80 BP_BUNDLE_REQ_DELIVERY_REPORT = 0x020000,
82 BP_BUNDLE_REQ_FORWARDING_REPORT = 0x010000,
84 BP_BUNDLE_REQ_RECEPTION_REPORT = 0x004000,
86 BP_BUNDLE_REQ_STATUS_TIME = 0x000040,
88 BP_BUNDLE_USER_APP_ACK = 0x000020,
90 BP_BUNDLE_NO_FRAGMENT = 0x000004,
92 BP_BUNDLE_PAYLOAD_ADMIN = 0x000002,
94 BP_BUNDLE_IS_FRAGMENT = 0x000001,
95} BundleProcessingFlag;
96
100typedef enum {
102 BP_BLOCK_REMOVE_IF_NO_PROCESS = 0x10,
104 BP_BLOCK_DELETE_IF_NO_PROCESS = 0x04,
106 BP_BLOCK_STATUS_IF_NO_PROCESS = 0x02,
108 BP_BLOCK_REPLICATE_IN_FRAGMENT = 0x01,
109} BlockProcessingFlag;
110
114typedef enum {
115 BP_BLOCKTYPE_INVALID = 0,
117 BP_BLOCKTYPE_PAYLOAD = 1,
119 BP_BLOCKTYPE_PREV_NODE = 6,
121 BP_BLOCKTYPE_BUNDLE_AGE = 7,
123 BP_BLOCKTYPE_HOP_COUNT = 10,
125 BP_BLOCKTYPE_BIB = 11,
127 BP_BLOCKTYPE_BCB = 12,
128} BlockTypeCode;
129
133typedef enum {
135 BP_ADMINTYPE_BUNDLE_STATUS = 1,
136} AdminRecordTypeCode;
137
139typedef struct {
141 uint64_t dtntime;
145
147typedef struct {
151 uint64_t seqno;
153
156WS_DLL_PUBLIC
157int bp_creation_ts_compare(const void *a, const void *b, void *user_data);
158
161typedef enum {
162 EID_SCHEME_DTN = 1,
163 EID_SCHEME_IPN = 2,
164} EidScheme;
165
167typedef struct {
171 uint64_t scheme;
174
176 const char *dtn_wkssp;
178 const char *dtn_serv;
180 uint64_t *ipn_serv;
181} bp_eid_t;
182
185WS_DLL_PUBLIC
186bp_eid_t * bp_eid_new(wmem_allocator_t *alloc);
187
190WS_DLL_PUBLIC
191void bp_eid_free(bp_eid_t *obj);
192
195WS_DLL_PUBLIC
196bool bp_eid_equal(const void *a, const void *b);
197
205
233
236WS_DLL_PUBLIC
237bp_block_primary_t * bp_block_primary_new(wmem_allocator_t *alloc);
238
241WS_DLL_PUBLIC
242void bp_block_primary_free(wmem_allocator_t *alloc, bp_block_primary_t *obj);
243
269
274WS_DLL_PUBLIC
275bp_block_canonical_t * bp_block_canonical_new(wmem_allocator_t *alloc, uint64_t blk_ix);
276
277WS_DLL_PUBLIC
278void bp_block_canonical_delete(wmem_allocator_t *alloc, bp_block_canonical_t *obj);
279
281typedef struct {
287 const uint64_t *frag_offset;
289 const uint64_t *total_len;
291
299WS_DLL_PUBLIC
300bp_bundle_ident_t * bp_bundle_ident_new(wmem_allocator_t *alloc, const bp_eid_t *src, const bp_creation_ts_t *ts, const uint64_t *off, const uint64_t *len);
301
302WS_DLL_PUBLIC
303void bp_bundle_ident_free(wmem_allocator_t *alloc, bp_bundle_ident_t *obj);
304
307WS_DLL_PUBLIC
308gboolean bp_bundle_ident_equal(const void *a, const void *b);
309
312WS_DLL_PUBLIC
313unsigned bp_bundle_ident_hash(const void *key);
314
341
344WS_DLL_PUBLIC
345bp_bundle_t * bp_bundle_new(wmem_allocator_t *alloc);
346
349WS_DLL_PUBLIC
350void bp_bundle_free(wmem_allocator_t *alloc, bp_bundle_t *obj);
351
364WS_DLL_PUBLIC
365proto_item * proto_tree_add_cbor_eid(proto_tree *tree, int hfindex, int hfindex_uri, packet_info *pinfo, tvbuff_t *tvb, int *offset, bp_eid_t *eid);
366
376
385
386#ifdef __cplusplus
387}
388#endif
389
390#endif /* PACKET_BPV7_H */
Definition address.h:56
Definition packet_info.h:43
Definition proto.h:903
Definition wmem_allocator.h:27
Definition wmem_list.c:23
Definition wmem_map.c:44
Definition packet-bpv7.h:244
tvbuff_t * data
Type-specific data, unencoded.
Definition packet-bpv7.h:263
uint64_t blk_ix
Definition packet-bpv7.h:247
proto_item * item_block
Display item for the whole block.
Definition packet-bpv7.h:249
proto_tree * tree_data
Type-specific data tree.
Definition packet-bpv7.h:265
uint64_t * type_code
Type of this block.
Definition packet-bpv7.h:252
uint64_t crc_type
CRC type code (assumed zero)
Definition packet-bpv7.h:258
uint64_t flags
All flags on this block.
Definition packet-bpv7.h:256
tvbuff_t * crc_field
Raw bytes of CRC field.
Definition packet-bpv7.h:260
uint64_t * block_number
Unique identifier for this block.
Definition packet-bpv7.h:254
Metadata extracted from the primary block.
Definition packet-bpv7.h:207
bp_eid_t * dst_eid
Destination EID.
Definition packet-bpv7.h:215
uint64_t * total_len
Optional bundle total length.
Definition packet-bpv7.h:225
tvbuff_t * crc_field
Raw bytes of CRC field.
Definition packet-bpv7.h:229
uint64_t crc_type
CRC type code (assumed zero)
Definition packet-bpv7.h:227
uint64_t flags
Definition packet-bpv7.h:213
bp_eid_t * rep_nodeid
Report-to NID.
Definition packet-bpv7.h:219
proto_item * item_block
Display item for the whole block.
Definition packet-bpv7.h:209
uint64_t * frag_offset
Optional fragment start offset.
Definition packet-bpv7.h:223
bp_creation_ts_t ts
Creation Timestamp.
Definition packet-bpv7.h:221
bp_eid_t * src_nodeid
Source NID.
Definition packet-bpv7.h:217
Identification of an individual bundle.
Definition packet-bpv7.h:281
bp_creation_ts_t ts
Creation Timestamp.
Definition packet-bpv7.h:285
const uint64_t * frag_offset
Pointer to external optional fragment start offset.
Definition packet-bpv7.h:287
address src
Normalized EID URI for the Source Node ID.
Definition packet-bpv7.h:283
const uint64_t * total_len
Pointer to external optional bundle total length.
Definition packet-bpv7.h:289
Metadata extracted per-bundle.
Definition packet-bpv7.h:316
wmem_map_t * block_types
Definition packet-bpv7.h:334
uint32_t frame_num
Index of the frame.
Definition packet-bpv7.h:318
bp_bundle_ident_t * ident
Bundle identity derived from primary data.
Definition packet-bpv7.h:324
unsigned * pyld_start
Payload BTSD start offset in bundle TVB.
Definition packet-bpv7.h:337
nstime_t frame_time
Timestamp on the frame (end time if reassembled)
Definition packet-bpv7.h:322
unsigned * pyld_len
Payload BTSD length.
Definition packet-bpv7.h:339
wmem_map_t * block_nums
Definition packet-bpv7.h:331
uint8_t layer_num
Layer within the frame.
Definition packet-bpv7.h:320
bp_block_primary_t * primary
Required primary block.
Definition packet-bpv7.h:326
wmem_list_t * blocks
Additional blocks in order (type bp_block_canonical_t)
Definition packet-bpv7.h:328
Creation Timestamp used to correlate bundles.
Definition packet-bpv7.h:147
bp_dtn_time_t abstime
Absolute time.
Definition packet-bpv7.h:149
uint64_t seqno
Sequence number.
Definition packet-bpv7.h:151
Definition packet-bpv7.h:379
bp_bundle_t * bundle
The overall bundle being decoded (so far)
Definition packet-bpv7.h:381
bp_block_canonical_t * block
This block being decoded.
Definition packet-bpv7.h:383
DTN time with derived UTC time.
Definition packet-bpv7.h:139
nstime_t utctime
Converted to UTC.
Definition packet-bpv7.h:143
uint64_t dtntime
DTN time.
Definition packet-bpv7.h:141
Metadata from a Endpoint ID.
Definition packet-bpv7.h:167
uint64_t * ipn_serv
Optional IPN-scheme service name.
Definition packet-bpv7.h:180
wmem_allocator_t * alloc
Allocator for uri text and optional members.
Definition packet-bpv7.h:169
const char * dtn_wkssp
Optional DTN-scheme well-known SSP.
Definition packet-bpv7.h:176
uint64_t scheme
Scheme ID number.
Definition packet-bpv7.h:171
address uri
Derived URI text as address.
Definition packet-bpv7.h:173
const char * dtn_serv
Optional DTN-scheme service name.
Definition packet-bpv7.h:178
Metadata for an entire file.
Definition packet-bpv7.h:368
wmem_map_t * admin_status
Definition packet-bpv7.h:374
wmem_map_t * bundles
Map from a bundle ID (bp_bundle_ident_t) to wmem_list_t of bundle (bp_bundle_t)
Definition packet-bpv7.h:370
Definition nstime.h:26
Security marking metadata.
Definition packet-bpv7.h:199
wmem_map_t * data_i
Block numbers marking the data as security integrity protected.
Definition packet-bpv7.h:201
wmem_map_t * data_c
Block numbers marking the data as security-modified and not decodable.
Definition packet-bpv7.h:203
Definition tvbuff-int.h:35