20#include "ws_symbol_export.h"
27#define FD_DEFRAGMENTED 0x0001
30#define FD_OVERLAP 0x0002
33#define FD_OVERLAPCONFLICT 0x0004
36#define FD_MULTIPLETAILS 0x0008
40#define FD_TOOLONGFRAGMENT 0x0010
43#define FD_SUBSET_TVB 0x0020
46#define FD_PARTIAL_REASSEMBLY 0x0040
50#define FD_BLOCKSEQUENCE 0x0100
56#define FD_DATALEN_SET 0x0400
114#define REASSEMBLE_FLAGS_NO_FRAG_NUMBER 0x0001
117#define REASSEMBLE_FLAGS_802_11_HACK 0x0002
124#define REASSEMBLE_FLAGS_AGING 0x0001
133typedef void * (*fragment_temporary_key)(
const packet_info *pinfo,
134 const uint32_t id,
const void *data);
140typedef void * (*fragment_persistent_key)(
const packet_info *pinfo,
141 const uint32_t id,
const void *data);
147 GHashTable *fragment_table;
148 GHashTable *reassembled_table;
149 fragment_temporary_key temporary_key_func;
150 fragment_persistent_key persistent_key_func;
151 GDestroyNotify free_temporary_key_func;
160 GEqualFunc equal_func;
161 fragment_temporary_key temporary_key_func;
162 fragment_persistent_key persistent_key_func;
163 GDestroyNotify free_temporary_key_func;
164 GDestroyNotify free_persistent_key_func;
172 addresses_reassembly_table_functions;
174 addresses_ports_reassembly_table_functions;
223 const packet_info *pinfo,
const uint32_t
id,
const void *data,
224 const uint32_t frag_offset,
const uint32_t frag_data_len,
225 const bool more_frags);
234 const uint32_t
id,
const void *data,
235 const uint32_t frag_offset,
236 const uint32_t frag_data_len,
237 const bool more_frags);
256 const uint32_t
id,
const void *data,
257 const uint32_t frag_offset,
258 const uint32_t frag_data_len,
259 const bool more_frags,
const uint32_t frag_frame);
285 const void *data,
const uint32_t frag_offset,
286 const uint32_t frag_data_len,
const bool more_frags);
300 const void *data,
const uint32_t frag_offset,
301 const uint32_t frag_data_len,
const bool more_frags,
302 const uint32_t fallback_frame);
336 const packet_info *pinfo,
const uint32_t
id,
const void *data,
337 const uint32_t frag_number,
const uint32_t frag_data_len,
338 const bool more_frags,
const uint32_t flags);
356 const uint32_t frag_number,
const uint32_t frag_data_len,
357 const bool more_frags);
367 const uint32_t
id,
const void *data,
368 const uint32_t frag_number,
const uint32_t frag_data_len,
369 const bool more_frags);
384 const void *data,
const uint32_t frag_data_len,
385 const bool more_frags);
399 const int offset,
const packet_info *pinfo,
const uint32_t
id,
400 const void* data,
const uint32_t frag_data_len,
401 const bool first,
const bool last,
402 const uint32_t max_frags);
411 const int offset,
const packet_info *pinfo,
const uint32_t
id,
412 const void* data,
const uint32_t frag_data_len,
413 const bool first,
const bool last,
414 const uint32_t max_frags,
const uint32_t max_age);
422 const uint32_t
id,
const void *data,
423 const uint32_t tot_len);
434 const uint32_t
id,
const void *data);
441 const void *data,
const uint32_t fragment_offset);
454 const uint32_t
id,
const void *data,
const uint32_t tot_len);
466 const uint32_t
id,
const void *data,
const uint32_t tot_len);
480 const uint32_t
id,
const void *data,
const uint32_t tot_len);
486WS_DLL_PUBLIC uint32_t
488 const uint32_t
id,
const void *data);
508 const uint32_t
id,
const void *data);
524 const uint32_t
id,
const void *data);
538 int *hf_fragment_overlap;
539 int *hf_fragment_overlap_conflict;
540 int *hf_fragment_multiple_tails;
541 int *hf_fragment_too_long_fragment;
542 int *hf_fragment_error;
543 int *hf_fragment_count;
544 int *hf_reassembled_in;
545 int *hf_reassembled_length;
546 int *hf_reassembled_data;
566extern void reassembly_tables_init(
void);
571reassembly_table_cleanup(
void);
600#define REASSEMBLE_ITEMS_DEFINE(var_prefix, name_prefix) \
601 static int ett_##var_prefix##_fragment; \
602 static int ett_##var_prefix##_fragments; \
603 static int hf_##var_prefix##_fragments; \
604 static int hf_##var_prefix##_fragment; \
605 static int hf_##var_prefix##_fragment_overlap; \
606 static int hf_##var_prefix##_fragment_overlap_conflicts; \
607 static int hf_##var_prefix##_fragment_multiple_tails; \
608 static int hf_##var_prefix##_fragment_too_long_fragment; \
609 static int hf_##var_prefix##_fragment_error; \
610 static int hf_##var_prefix##_fragment_count; \
611 static int hf_##var_prefix##_reassembled_in; \
612 static int hf_##var_prefix##_reassembled_length; \
613 static int hf_##var_prefix##_reassembled_data; \
614 static int hf_##var_prefix##_segment; \
615 static const fragment_items var_prefix##_fragment_items = { \
616 &ett_##var_prefix##_fragment, \
617 &ett_##var_prefix##_fragments, \
618 &hf_##var_prefix##_fragments, \
619 &hf_##var_prefix##_fragment, \
620 &hf_##var_prefix##_fragment_overlap, \
621 &hf_##var_prefix##_fragment_overlap_conflicts, \
622 &hf_##var_prefix##_fragment_multiple_tails, \
623 &hf_##var_prefix##_fragment_too_long_fragment, \
624 &hf_##var_prefix##_fragment_error, \
625 &hf_##var_prefix##_fragment_count, \
626 &hf_##var_prefix##_reassembled_in, \
627 &hf_##var_prefix##_reassembled_length, \
628 &hf_##var_prefix##_reassembled_data, \
629 name_prefix " fragments" \
679#define REASSEMBLE_INIT_HF_ITEMS(var_prefix, name_prefix, abbrev_prefix) \
680 { &hf_##var_prefix##_fragments, \
681 { "Reassembled " name_prefix " fragments", abbrev_prefix ".fragments", \
682 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } \
684 { &hf_##var_prefix##_fragment, \
685 { name_prefix " fragment", abbrev_prefix ".fragment", \
686 FT_FRAMENUM, BASE_NONE, NULL, 0x0, NULL, HFILL } \
688 { &hf_##var_prefix##_fragment_overlap, \
689 { name_prefix " fragment overlap", abbrev_prefix ".fragment.overlap", \
690 FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } \
692 { &hf_##var_prefix##_fragment_overlap_conflicts, \
693 { name_prefix " fragment overlapping with conflicting data", abbrev_prefix ".fragment.overlap.conflicts", \
694 FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } \
696 { &hf_##var_prefix##_fragment_multiple_tails, \
697 { name_prefix " has multiple tail fragments", abbrev_prefix ".fragment.multiple_tails", \
698 FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } \
700 { &hf_##var_prefix##_fragment_too_long_fragment, \
701 { name_prefix " fragment too long", abbrev_prefix ".fragment.too_long_fragment", \
702 FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } \
704 { &hf_##var_prefix##_fragment_error, \
705 { name_prefix " defragment error", abbrev_prefix ".fragment.error", \
706 FT_FRAMENUM, BASE_NONE, NULL, 0x0, NULL, HFILL } \
708 { &hf_##var_prefix##_fragment_count, \
709 { name_prefix " fragment count", abbrev_prefix ".fragment.count", \
710 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } \
712 { &hf_##var_prefix##_reassembled_in, \
713 { "Reassembled in", abbrev_prefix ".reassembled.in", \
714 FT_FRAMENUM, BASE_NONE, NULL, 0x0, NULL, HFILL } \
716 { &hf_##var_prefix##_reassembled_length, \
717 { "Reassembled length", abbrev_prefix ".reassembled.length", \
718 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } \
720 { &hf_##var_prefix##_reassembled_data, \
721 { "Reassembled data", abbrev_prefix ".reassembled.data", \
722 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } \
724 { &hf_##var_prefix##_segment, \
725 { name_prefix " segment", abbrev_prefix ".segment", \
726 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL} \
760#define REASSEMBLE_INIT_ETT_ITEMS(var_prefix) \
761 &ett_##var_prefix##_fragment, \
762 &ett_##var_prefix##_fragments
1144 const char* label,
const fragment_items* frag_hf_items,
int hf_segment_data
1160static inline uint64_t
1163 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:5397
WS_DLL_PUBLIC streaming_reassembly_info_t * streaming_reassembly_info_new(void)
Definition reassemble.c:3232
WS_DLL_PUBLIC int additional_bytes_expected_to_complete_reassembly(streaming_reassembly_info_t *reassembly_info)
Definition reassemble.c:3556
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:72
unsigned ref_count
Definition reassemble.h:76
uint32_t flags
Definition reassemble.h:97
const char * error
Definition reassemble.h:105
struct _fragment_item * first_gap
Definition reassemble.h:74
uint32_t len
Definition reassemble.h:79
uint32_t contiguous_len
Definition reassemble.h:77
uint32_t datalen
Definition reassemble.h:85
uint32_t reassembled_in
Definition reassemble.h:91
uint32_t fragment_nr_offset
Definition reassemble.h:82
uint8_t reas_in_layer_num
Definition reassemble.h:93
uint32_t frame
Definition reassemble.h:78
Definition reassemble.h:60
uint32_t frame
Definition reassemble.h:62
uint32_t flags
Definition reassemble.h:66
uint32_t len
Definition reassemble.h:65
uint32_t offset
Definition reassemble.h:63
Definition reassemble.h:532
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:157
Definition reassemble.h:146
Definition reassemble.c:3209
Definition tvbuff-int.h:36