20#include "ws_symbol_export.h"
31#define FD_DEFRAGMENTED 0x0001
34#define FD_OVERLAP 0x0002
37#define FD_OVERLAPCONFLICT 0x0004
40#define FD_MULTIPLETAILS 0x0008
44#define FD_TOOLONGFRAGMENT 0x0010
47#define FD_SUBSET_TVB 0x0020
50#define FD_PARTIAL_REASSEMBLY 0x0040
54#define FD_BLOCKSEQUENCE 0x0100
60#define FD_DATALEN_SET 0x0400
118#define REASSEMBLE_FLAGS_NO_FRAG_NUMBER 0x0001
121#define REASSEMBLE_FLAGS_802_11_HACK 0x0002
128#define REASSEMBLE_FLAGS_AGING 0x0001
137typedef void * (*fragment_temporary_key)(
const packet_info *pinfo,
138 const uint32_t id,
const void *data);
144typedef void * (*fragment_persistent_key)(
const packet_info *pinfo,
145 const uint32_t id,
const void *data);
151 GHashTable *fragment_table;
152 GHashTable *reassembled_table;
153 fragment_temporary_key temporary_key_func;
154 fragment_persistent_key persistent_key_func;
155 GDestroyNotify free_temporary_key_func;
164 GEqualFunc equal_func;
165 fragment_temporary_key temporary_key_func;
166 fragment_persistent_key persistent_key_func;
167 GDestroyNotify free_temporary_key_func;
168 GDestroyNotify free_persistent_key_func;
176 addresses_reassembly_table_functions;
178 addresses_ports_reassembly_table_functions;
227 const packet_info *pinfo,
const uint32_t
id,
const void *data,
228 const uint32_t frag_offset,
const uint32_t frag_data_len,
229 const bool more_frags);
238 const uint32_t
id,
const void *data,
239 const uint32_t frag_offset,
240 const uint32_t frag_data_len,
241 const bool more_frags);
260 const uint32_t
id,
const void *data,
261 const uint32_t frag_offset,
262 const uint32_t frag_data_len,
263 const bool more_frags,
const uint32_t frag_frame);
289 const void *data,
const uint32_t frag_offset,
290 const uint32_t frag_data_len,
const bool more_frags);
304 const void *data,
const uint32_t frag_offset,
305 const uint32_t frag_data_len,
const bool more_frags,
306 const uint32_t fallback_frame);
340 const packet_info *pinfo,
const uint32_t
id,
const void *data,
341 const uint32_t frag_number,
const uint32_t frag_data_len,
342 const bool more_frags,
const uint32_t flags);
360 const uint32_t frag_number,
const uint32_t frag_data_len,
361 const bool more_frags);
371 const uint32_t
id,
const void *data,
372 const uint32_t frag_number,
const uint32_t frag_data_len,
373 const bool more_frags);
388 const void *data,
const uint32_t frag_data_len,
389 const bool more_frags);
403 const int offset,
const packet_info *pinfo,
const uint32_t
id,
404 const void* data,
const uint32_t frag_data_len,
405 const bool first,
const bool last,
406 const uint32_t max_frags);
415 const int offset,
const packet_info *pinfo,
const uint32_t
id,
416 const void* data,
const uint32_t frag_data_len,
417 const bool first,
const bool last,
418 const uint32_t max_frags,
const uint32_t max_age);
426 const uint32_t
id,
const void *data,
427 const uint32_t tot_len);
438 const uint32_t
id,
const void *data);
445 const void *data,
const uint32_t fragment_offset);
458 const uint32_t
id,
const void *data,
const uint32_t tot_len);
470 const uint32_t
id,
const void *data,
const uint32_t tot_len);
484 const uint32_t
id,
const void *data,
const uint32_t tot_len);
490WS_DLL_PUBLIC uint32_t
492 const uint32_t
id,
const void *data);
512 const uint32_t
id,
const void *data);
528 const uint32_t
id,
const void *data);
542 int *hf_fragment_overlap;
543 int *hf_fragment_overlap_conflict;
544 int *hf_fragment_multiple_tails;
545 int *hf_fragment_too_long_fragment;
546 int *hf_fragment_error;
547 int *hf_fragment_count;
548 int *hf_reassembled_in;
549 int *hf_reassembled_length;
550 int *hf_reassembled_data;
570extern void reassembly_tables_init(
void);
575reassembly_table_cleanup(
void);
604#define REASSEMBLE_ITEMS_DEFINE(var_prefix, name_prefix) \
605 static int ett_##var_prefix##_fragment; \
606 static int ett_##var_prefix##_fragments; \
607 static int hf_##var_prefix##_fragments; \
608 static int hf_##var_prefix##_fragment; \
609 static int hf_##var_prefix##_fragment_overlap; \
610 static int hf_##var_prefix##_fragment_overlap_conflicts; \
611 static int hf_##var_prefix##_fragment_multiple_tails; \
612 static int hf_##var_prefix##_fragment_too_long_fragment; \
613 static int hf_##var_prefix##_fragment_error; \
614 static int hf_##var_prefix##_fragment_count; \
615 static int hf_##var_prefix##_reassembled_in; \
616 static int hf_##var_prefix##_reassembled_length; \
617 static int hf_##var_prefix##_reassembled_data; \
618 static int hf_##var_prefix##_segment; \
619 static const fragment_items var_prefix##_fragment_items = { \
620 &ett_##var_prefix##_fragment, \
621 &ett_##var_prefix##_fragments, \
622 &hf_##var_prefix##_fragments, \
623 &hf_##var_prefix##_fragment, \
624 &hf_##var_prefix##_fragment_overlap, \
625 &hf_##var_prefix##_fragment_overlap_conflicts, \
626 &hf_##var_prefix##_fragment_multiple_tails, \
627 &hf_##var_prefix##_fragment_too_long_fragment, \
628 &hf_##var_prefix##_fragment_error, \
629 &hf_##var_prefix##_fragment_count, \
630 &hf_##var_prefix##_reassembled_in, \
631 &hf_##var_prefix##_reassembled_length, \
632 &hf_##var_prefix##_reassembled_data, \
633 name_prefix " fragments" \
683#define REASSEMBLE_INIT_HF_ITEMS(var_prefix, name_prefix, abbrev_prefix) \
684 { &hf_##var_prefix##_fragments, \
685 { "Reassembled " name_prefix " fragments", abbrev_prefix ".fragments", \
686 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } \
688 { &hf_##var_prefix##_fragment, \
689 { name_prefix " fragment", abbrev_prefix ".fragment", \
690 FT_FRAMENUM, BASE_NONE, NULL, 0x0, NULL, HFILL } \
692 { &hf_##var_prefix##_fragment_overlap, \
693 { name_prefix " fragment overlap", abbrev_prefix ".fragment.overlap", \
694 FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } \
696 { &hf_##var_prefix##_fragment_overlap_conflicts, \
697 { name_prefix " fragment overlapping with conflicting data", abbrev_prefix ".fragment.overlap.conflicts", \
698 FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } \
700 { &hf_##var_prefix##_fragment_multiple_tails, \
701 { name_prefix " has multiple tail fragments", abbrev_prefix ".fragment.multiple_tails", \
702 FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } \
704 { &hf_##var_prefix##_fragment_too_long_fragment, \
705 { name_prefix " fragment too long", abbrev_prefix ".fragment.too_long_fragment", \
706 FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } \
708 { &hf_##var_prefix##_fragment_error, \
709 { name_prefix " defragment error", abbrev_prefix ".fragment.error", \
710 FT_FRAMENUM, BASE_NONE, NULL, 0x0, NULL, HFILL } \
712 { &hf_##var_prefix##_fragment_count, \
713 { name_prefix " fragment count", abbrev_prefix ".fragment.count", \
714 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } \
716 { &hf_##var_prefix##_reassembled_in, \
717 { "Reassembled in", abbrev_prefix ".reassembled.in", \
718 FT_FRAMENUM, BASE_NONE, NULL, 0x0, NULL, HFILL } \
720 { &hf_##var_prefix##_reassembled_length, \
721 { "Reassembled length", abbrev_prefix ".reassembled.length", \
722 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } \
724 { &hf_##var_prefix##_reassembled_data, \
725 { "Reassembled data", abbrev_prefix ".reassembled.data", \
726 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } \
728 { &hf_##var_prefix##_segment, \
729 { name_prefix " segment", abbrev_prefix ".segment", \
730 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL} \
764#define REASSEMBLE_INIT_ETT_ITEMS(var_prefix) \
765 &ett_##var_prefix##_fragment, \
766 &ett_##var_prefix##_fragments
1148 const char* label,
const fragment_items* frag_hf_items,
int hf_segment_data
1164static inline uint64_t
1167 return (((uint64_t)pinfo->
num) << 32) + (((uint64_t)pinfo->
curr_layer_num) << 24)
unsigned tvb_raw_offset(tvbuff_t *tvb)
Returns the offset from the first byte of real data.
Definition tvbuff.c:5377
WS_DLL_PUBLIC streaming_reassembly_info_t * streaming_reassembly_info_new(void)
Definition reassemble.c:3213
WS_DLL_PUBLIC int additional_bytes_expected_to_complete_reassembly(streaming_reassembly_info_t *reassembly_info)
Definition reassemble.c:3537
WS_DLL_PUBLIC int reassemble_streaming_data_and_call_subdissector(tvbuff_t *tvb, packet_info *pinfo, unsigned offset, int length, proto_tree *segment_tree, proto_tree *reassembled_tree, reassembly_table streaming_reassembly_table, streaming_reassembly_info_t *reassembly_info, uint64_t cur_frame_num, struct dissector_handle *subdissector_handle, proto_tree *subdissector_tree, void *subdissector_data, const char *label, const fragment_items *frag_hf_items, int hf_segment_data)
Definition reassemble.h:76
unsigned ref_count
Definition reassemble.h:80
uint32_t flags
Definition reassemble.h:101
const char * error
Definition reassemble.h:109
struct _fragment_item * first_gap
Definition reassemble.h:78
uint32_t len
Definition reassemble.h:83
uint32_t contiguous_len
Definition reassemble.h:81
uint32_t datalen
Definition reassemble.h:89
uint32_t reassembled_in
Definition reassemble.h:95
uint32_t fragment_nr_offset
Definition reassemble.h:86
uint8_t reas_in_layer_num
Definition reassemble.h:97
uint32_t frame
Definition reassemble.h:82
Definition reassemble.h:64
uint32_t frame
Definition reassemble.h:66
uint32_t flags
Definition reassemble.h:70
uint32_t len
Definition reassemble.h:69
uint32_t offset
Definition reassemble.h:67
Definition reassemble.h:536
Definition packet_info.h:43
uint32_t num
Definition packet_info.h:47
uint8_t curr_layer_num
Definition packet_info.h:150
Definition reassemble.h:161
Definition reassemble.h:150
Definition reassemble.c:3190
Definition tvbuff-int.h:36