18#include "ws_symbol_export.h"
25#define FD_DEFRAGMENTED 0x0001
28#define FD_OVERLAP 0x0002
31#define FD_OVERLAPCONFLICT 0x0004
34#define FD_MULTIPLETAILS 0x0008
38#define FD_TOOLONGFRAGMENT 0x0010
41#define FD_SUBSET_TVB 0x0020
44#define FD_PARTIAL_REASSEMBLY 0x0040
48#define FD_BLOCKSEQUENCE 0x0100
54#define FD_DATALEN_SET 0x0400
110#define REASSEMBLE_FLAGS_NO_FRAG_NUMBER 0x0001
113#define REASSEMBLE_FLAGS_802_11_HACK 0x0002
120#define REASSEMBLE_FLAGS_AGING 0x0001
129typedef void * (*fragment_temporary_key)(
const packet_info *pinfo,
130 const uint32_t id,
const void *data);
136typedef void * (*fragment_persistent_key)(
const packet_info *pinfo,
137 const uint32_t id,
const void *data);
143 GHashTable *fragment_table;
144 GHashTable *reassembled_table;
145 fragment_temporary_key temporary_key_func;
146 fragment_persistent_key persistent_key_func;
147 GDestroyNotify free_temporary_key_func;
156 GEqualFunc equal_func;
157 fragment_temporary_key temporary_key_func;
158 fragment_persistent_key persistent_key_func;
159 GDestroyNotify free_temporary_key_func;
160 GDestroyNotify free_persistent_key_func;
168 addresses_reassembly_table_functions;
170 addresses_ports_reassembly_table_functions;
219 const packet_info *pinfo,
const uint32_t
id,
const void *data,
220 const uint32_t frag_offset,
const uint32_t frag_data_len,
221 const bool more_frags);
230 const uint32_t
id,
const void *data,
231 const uint32_t frag_offset,
232 const uint32_t frag_data_len,
233 const bool more_frags);
252 const uint32_t
id,
const void *data,
253 const uint32_t frag_offset,
254 const uint32_t frag_data_len,
255 const bool more_frags,
const uint32_t frag_frame);
281 const void *data,
const uint32_t frag_offset,
282 const uint32_t frag_data_len,
const bool more_frags);
296 const void *data,
const uint32_t frag_offset,
297 const uint32_t frag_data_len,
const bool more_frags,
298 const uint32_t fallback_frame);
332 const packet_info *pinfo,
const uint32_t
id,
const void *data,
333 const uint32_t frag_number,
const uint32_t frag_data_len,
334 const bool more_frags,
const uint32_t flags);
352 const uint32_t frag_number,
const uint32_t frag_data_len,
353 const bool more_frags);
363 const uint32_t
id,
const void *data,
364 const uint32_t frag_number,
const uint32_t frag_data_len,
365 const bool more_frags);
380 const void *data,
const uint32_t frag_data_len,
381 const bool more_frags);
395 const int offset,
const packet_info *pinfo,
const uint32_t
id,
396 const void* data,
const uint32_t frag_data_len,
397 const bool first,
const bool last,
398 const uint32_t max_frags);
407 const int offset,
const packet_info *pinfo,
const uint32_t
id,
408 const void* data,
const uint32_t frag_data_len,
409 const bool first,
const bool last,
410 const uint32_t max_frags,
const uint32_t max_age);
418 const uint32_t
id,
const void *data,
419 const uint32_t tot_len);
430 const uint32_t
id,
const void *data);
437 const void *data,
const uint32_t fragment_offset);
450 const uint32_t
id,
const void *data,
const uint32_t tot_len);
462 const uint32_t
id,
const void *data,
const uint32_t tot_len);
476 const uint32_t
id,
const void *data,
const uint32_t tot_len);
482WS_DLL_PUBLIC uint32_t
484 const uint32_t
id,
const void *data);
504 const uint32_t
id,
const void *data);
520 const uint32_t
id,
const void *data);
534 int *hf_fragment_overlap;
535 int *hf_fragment_overlap_conflict;
536 int *hf_fragment_multiple_tails;
537 int *hf_fragment_too_long_fragment;
538 int *hf_fragment_error;
539 int *hf_fragment_count;
540 int *hf_reassembled_in;
541 int *hf_reassembled_length;
542 int *hf_reassembled_data;
562extern void reassembly_tables_init(
void);
567reassembly_table_cleanup(
void);
596#define REASSEMBLE_ITEMS_DEFINE(var_prefix, name_prefix) \
597 static int ett_##var_prefix##_fragment; \
598 static int ett_##var_prefix##_fragments; \
599 static int hf_##var_prefix##_fragments; \
600 static int hf_##var_prefix##_fragment; \
601 static int hf_##var_prefix##_fragment_overlap; \
602 static int hf_##var_prefix##_fragment_overlap_conflicts; \
603 static int hf_##var_prefix##_fragment_multiple_tails; \
604 static int hf_##var_prefix##_fragment_too_long_fragment; \
605 static int hf_##var_prefix##_fragment_error; \
606 static int hf_##var_prefix##_fragment_count; \
607 static int hf_##var_prefix##_reassembled_in; \
608 static int hf_##var_prefix##_reassembled_length; \
609 static int hf_##var_prefix##_reassembled_data; \
610 static int hf_##var_prefix##_segment; \
611 static const fragment_items var_prefix##_fragment_items = { \
612 &ett_##var_prefix##_fragment, \
613 &ett_##var_prefix##_fragments, \
614 &hf_##var_prefix##_fragments, \
615 &hf_##var_prefix##_fragment, \
616 &hf_##var_prefix##_fragment_overlap, \
617 &hf_##var_prefix##_fragment_overlap_conflicts, \
618 &hf_##var_prefix##_fragment_multiple_tails, \
619 &hf_##var_prefix##_fragment_too_long_fragment, \
620 &hf_##var_prefix##_fragment_error, \
621 &hf_##var_prefix##_fragment_count, \
622 &hf_##var_prefix##_reassembled_in, \
623 &hf_##var_prefix##_reassembled_length, \
624 &hf_##var_prefix##_reassembled_data, \
625 name_prefix " fragments" \
675#define REASSEMBLE_INIT_HF_ITEMS(var_prefix, name_prefix, abbrev_prefix) \
676 { &hf_##var_prefix##_fragments, \
677 { "Reassembled " name_prefix " fragments", abbrev_prefix ".fragments", \
678 FT_NONE, BASE_NONE, NULL, 0x0, NULL, HFILL } \
680 { &hf_##var_prefix##_fragment, \
681 { name_prefix " fragment", abbrev_prefix ".fragment", \
682 FT_FRAMENUM, BASE_NONE, NULL, 0x0, NULL, HFILL } \
684 { &hf_##var_prefix##_fragment_overlap, \
685 { name_prefix " fragment overlap", abbrev_prefix ".fragment.overlap", \
686 FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } \
688 { &hf_##var_prefix##_fragment_overlap_conflicts, \
689 { name_prefix " fragment overlapping with conflicting data", abbrev_prefix ".fragment.overlap.conflicts", \
690 FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } \
692 { &hf_##var_prefix##_fragment_multiple_tails, \
693 { name_prefix " has multiple tail fragments", abbrev_prefix ".fragment.multiple_tails", \
694 FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } \
696 { &hf_##var_prefix##_fragment_too_long_fragment, \
697 { name_prefix " fragment too long", abbrev_prefix ".fragment.too_long_fragment", \
698 FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } \
700 { &hf_##var_prefix##_fragment_error, \
701 { name_prefix " defragment error", abbrev_prefix ".fragment.error", \
702 FT_FRAMENUM, BASE_NONE, NULL, 0x0, NULL, HFILL } \
704 { &hf_##var_prefix##_fragment_count, \
705 { name_prefix " fragment count", abbrev_prefix ".fragment.count", \
706 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } \
708 { &hf_##var_prefix##_reassembled_in, \
709 { "Reassembled in", abbrev_prefix ".reassembled.in", \
710 FT_FRAMENUM, BASE_NONE, NULL, 0x0, NULL, HFILL } \
712 { &hf_##var_prefix##_reassembled_length, \
713 { "Reassembled length", abbrev_prefix ".reassembled.length", \
714 FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL } \
716 { &hf_##var_prefix##_reassembled_data, \
717 { "Reassembled data", abbrev_prefix ".reassembled.data", \
718 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } \
720 { &hf_##var_prefix##_segment, \
721 { name_prefix " segment", abbrev_prefix ".segment", \
722 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL} \
756#define REASSEMBLE_INIT_ETT_ITEMS(var_prefix) \
757 &ett_##var_prefix##_fragment, \
758 &ett_##var_prefix##_fragments
1140 const char* label,
const fragment_items* frag_hf_items,
int hf_segment_data
1156static inline uint64_t
1159 return (((uint64_t)pinfo->num) << 32) + (((uint64_t)pinfo->curr_layer_num) << 24)
int tvb_raw_offset(tvbuff_t *tvb)
Returns the offset from the first byte of real data.
Definition tvbuff.c:4776
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, dissector_handle_t subdissector_handle, proto_tree *subdissector_tree, void *subdissector_data, const char *label, const fragment_items *frag_hf_items, int hf_segment_data)
Definition reassemble.c:3282
Definition reassemble.h:68
unsigned ref_count
Definition reassemble.h:72
uint32_t flags
Definition reassemble.h:93
const char * error
Definition reassemble.h:101
struct _fragment_item * first_gap
Definition reassemble.h:70
uint32_t len
Definition reassemble.h:75
uint32_t contiguous_len
Definition reassemble.h:73
uint32_t datalen
Definition reassemble.h:81
uint32_t reassembled_in
Definition reassemble.h:87
uint32_t fragment_nr_offset
Definition reassemble.h:78
uint8_t reas_in_layer_num
Definition reassemble.h:89
uint32_t frame
Definition reassemble.h:74
Definition reassemble.h:56
uint32_t frame
Definition reassemble.h:58
uint32_t flags
Definition reassemble.h:62
uint32_t len
Definition reassemble.h:61
uint32_t offset
Definition reassemble.h:59
Definition reassemble.h:528
Definition packet_info.h:43
Definition reassemble.h:153
Definition reassemble.h:142
Definition reassemble.c:3209
Definition tvbuff-int.h:35