diff options
author | Pascal Quantin <pascal.quantin@gmail.com> | 2015-08-27 23:35:58 +0200 |
---|---|---|
committer | Pascal Quantin <pascal.quantin@gmail.com> | 2015-08-28 18:54:34 +0000 |
commit | c04d54fbd49d36213faa555d1141a7ac3196beed (patch) | |
tree | a4e75a51676b1433e7d0efe2e6a1ddc90317fd7a /epan/dissectors | |
parent | 5179406fa421ad6d8aee3b0a7e37b248ff8115d5 (diff) |
Preparation Host Flows: make ICMP(v6) code and type retrieval more robust
Do not retrieve type and code base on the info column content.
Instead store type and code in pinfo structure and retrieve them in sequence analysis tap.
Change-Id: I71cd505d7faf713c2372731495d47b45928a41f8
Reviewed-on: https://code.wireshark.org/review/10280
Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com>
Reviewed-by: Pascal Artho <pascalartho@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
Diffstat (limited to 'epan/dissectors')
-rw-r--r-- | epan/dissectors/packet-icmp.c | 8 | ||||
-rw-r--r-- | epan/dissectors/packet-icmp.h | 6 | ||||
-rw-r--r-- | epan/dissectors/packet-icmpv6.c | 8 |
3 files changed, 20 insertions, 2 deletions
diff --git a/epan/dissectors/packet-icmp.c b/epan/dissectors/packet-icmp.c index 8d41343cb1..1d4410929a 100644 --- a/epan/dissectors/packet-icmp.c +++ b/epan/dissectors/packet-icmp.c @@ -1590,11 +1590,17 @@ dissect_icmp(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* data) break; } + if (!PINFO_FD_VISITED(pinfo)) { + icmp_info_t *p_icmp_info = wmem_new(wmem_file_scope(), icmp_info_t); + p_icmp_info->type = icmp_type; + p_icmp_info->code = icmp_code; + p_add_proto_data(wmem_file_scope(), pinfo, proto_icmp, 0, p_icmp_info); + } + if (trans) { tap_queue_packet(icmp_tap, pinfo, trans); } - col_append_fstr(pinfo->cinfo, COL_INFO, ", Type=%d, Code=%d", icmp_type, icmp_code); return tvb_reported_length(tvb); } diff --git a/epan/dissectors/packet-icmp.h b/epan/dissectors/packet-icmp.h index 4ba8bf6611..ea72c01d08 100644 --- a/epan/dissectors/packet-icmp.h +++ b/epan/dissectors/packet-icmp.h @@ -33,4 +33,10 @@ typedef struct _icmp_transaction_t { nstime_t resp_time; } icmp_transaction_t; +/* ICMP info ... used by sequence analysis tap and stored in pinfo with p_add_proto_data */ +typedef struct { + guint8 type; + guint8 code; +} icmp_info_t; + #endif diff --git a/epan/dissectors/packet-icmpv6.c b/epan/dissectors/packet-icmpv6.c index ae366be5df..92596e394f 100644 --- a/epan/dissectors/packet-icmpv6.c +++ b/epan/dissectors/packet-icmpv6.c @@ -4114,10 +4114,16 @@ dissect_icmpv6(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) } /* switch (icmp6_type) */ } /* if (1) */ + if (!PINFO_FD_VISITED(pinfo)) { + icmp_info_t *p_icmp_info = wmem_new(wmem_file_scope(), icmp_info_t); + p_icmp_info->type = icmp6_type; + p_icmp_info->code = icmp6_code; + p_add_proto_data(wmem_file_scope(), pinfo, proto_icmpv6, 0, p_icmp_info); + } + if (trans) tap_queue_packet(icmpv6_tap, pinfo, trans); - col_append_fstr(pinfo->cinfo, COL_INFO, ", Type=%d, Code=%d", icmp6_type, icmp6_code); return offset; } |