diff options
author | Evan Huus <eapache@gmail.com> | 2012-10-26 01:59:17 +0000 |
---|---|---|
committer | Evan Huus <eapache@gmail.com> | 2012-10-26 01:59:17 +0000 |
commit | 361aedec1f819365bd89143185892e2c7fa38efd (patch) | |
tree | a6ac4a3aa66e73b5673b988dc6a4e8ee7fd97979 /epan | |
parent | c6b522bc703bd91b5c473491a68e92b5319e819c (diff) |
Create SET_ADDRESS_HF that takes an additional hf_ value that can be
used to override the filter generated from the address column.
Fixes https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=7728 (again).
svn path=/trunk/; revision=45792
Diffstat (limited to 'epan')
-rw-r--r-- | epan/address.h | 11 | ||||
-rw-r--r-- | epan/column-utils.c | 6 | ||||
-rw-r--r-- | epan/dissectors/packet-ieee80211.c | 28 | ||||
-rw-r--r-- | epan/dissectors/packet-mgcp.c | 2 | ||||
-rw-r--r-- | epan/dissectors/packet-radius.c | 2 | ||||
-rw-r--r-- | epan/dissectors/packet-rpc.c | 6 |
6 files changed, 35 insertions, 20 deletions
diff --git a/epan/address.h b/epan/address.h index 24e0001370..e650699647 100644 --- a/epan/address.h +++ b/epan/address.h @@ -64,13 +64,22 @@ typedef enum { typedef struct _address { address_type type; /* type of address */ + int hf; /* the specific field that this addr is */ int len; /* length of address, in bytes */ const void *data; /* pointer to address data */ } address; #define SET_ADDRESS(addr, addr_type, addr_len, addr_data) { \ (addr)->type = (addr_type); \ - (addr)->len = (addr_len); \ + (addr)->hf = -1; \ + (addr)->len = (addr_len); \ + (addr)->data = (addr_data); \ + } + +#define SET_ADDRESS_HF(addr, addr_type, addr_len, addr_data, addr_hf) { \ + (addr)->type = (addr_type); \ + (addr)->hf = (addr_hf); \ + (addr)->len = (addr_len); \ (addr)->data = (addr_data); \ } diff --git a/epan/column-utils.c b/epan/column-utils.c index 3fe7d16e4b..208af563b6 100644 --- a/epan/column-utils.c +++ b/epan/column-utils.c @@ -39,6 +39,7 @@ #include "osi-utils.h" #include "value_string.h" #include "column_info.h" +#include "proto.h" #include <epan/strutil.h> #include <epan/epan.h> @@ -1491,6 +1492,11 @@ col_set_addr(packet_info *pinfo, const int col, const address *addr, const gbool default: break; } + + if (addr->hf != -1) { + pinfo->cinfo->col_expr.col_expr[col] = proto_registrar_get_nth(addr->hf)->abbrev; + } + } /* ------------------------ */ diff --git a/epan/dissectors/packet-ieee80211.c b/epan/dissectors/packet-ieee80211.c index 15836c5eac..4ad70ff42c 100644 --- a/epan/dissectors/packet-ieee80211.c +++ b/epan/dissectors/packet-ieee80211.c @@ -11399,15 +11399,15 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo, src = tvb_get_ptr (tvb, 10, 6); dst = tvb_get_ptr (tvb, 4, 6); - SET_ADDRESS(&pinfo->dl_src, AT_ETHER, 6, src); - SET_ADDRESS(&pinfo->src, AT_ETHER, 6, src); - SET_ADDRESS(&pinfo->dl_dst, AT_ETHER, 6, dst); - SET_ADDRESS(&pinfo->dst, AT_ETHER, 6, dst); + SET_ADDRESS_HF(&pinfo->dl_src, AT_ETHER, 6, src, hf_ieee80211_addr_sa); + SET_ADDRESS_HF(&pinfo->src, AT_ETHER, 6, src, hf_ieee80211_addr_sa); + SET_ADDRESS_HF(&pinfo->dl_dst, AT_ETHER, 6, dst, hf_ieee80211_addr_da); + SET_ADDRESS_HF(&pinfo->dst, AT_ETHER, 6, dst, hf_ieee80211_addr_da); /* for tap */ - SET_ADDRESS(&whdr->bssid, AT_ETHER, 6, tvb_get_ptr(tvb, 16,6)); - SET_ADDRESS(&whdr->src, AT_ETHER, 6, src); - SET_ADDRESS(&whdr->dst, AT_ETHER, 6, dst); + SET_ADDRESS_HF(&whdr->bssid, AT_ETHER, 6, tvb_get_ptr(tvb, 16,6), hf_ieee80211_addr_bssid); + SET_ADDRESS_HF(&whdr->src, AT_ETHER, 6, src, hf_ieee80211_addr_sa); + SET_ADDRESS_HF(&whdr->dst, AT_ETHER, 6, dst, hf_ieee80211_addr_da); whdr->type = frame_type_subtype; seq_control = tvb_get_letohs(tvb, 22); @@ -11779,16 +11779,16 @@ dissect_ieee80211_common (tvbuff_t * tvb, packet_info * pinfo, break; } - SET_ADDRESS(&pinfo->dl_src, AT_ETHER, 6, src); - SET_ADDRESS(&pinfo->src, AT_ETHER, 6, src); - SET_ADDRESS(&pinfo->dl_dst, AT_ETHER, 6, dst); - SET_ADDRESS(&pinfo->dst, AT_ETHER, 6, dst); + SET_ADDRESS_HF(&pinfo->dl_src, AT_ETHER, 6, src, hf_ieee80211_addr_sa); + SET_ADDRESS_HF(&pinfo->src, AT_ETHER, 6, src, hf_ieee80211_addr_sa); + SET_ADDRESS_HF(&pinfo->dl_dst, AT_ETHER, 6, dst, hf_ieee80211_addr_da); + SET_ADDRESS_HF(&pinfo->dst, AT_ETHER, 6, dst, hf_ieee80211_addr_da); /* for tap */ - SET_ADDRESS(&whdr->bssid, AT_ETHER, 6, bssid); - SET_ADDRESS(&whdr->src, AT_ETHER, 6, src); - SET_ADDRESS(&whdr->dst, AT_ETHER, 6, dst); + SET_ADDRESS_HF(&whdr->bssid, AT_ETHER, 6, bssid, hf_ieee80211_addr_bssid); + SET_ADDRESS_HF(&whdr->src, AT_ETHER, 6, src, hf_ieee80211_addr_sa); + SET_ADDRESS_HF(&whdr->dst, AT_ETHER, 6, dst, hf_ieee80211_addr_da); whdr->type = frame_type_subtype; seq_control = tvb_get_letohs(tvb, 22); diff --git a/epan/dissectors/packet-mgcp.c b/epan/dissectors/packet-mgcp.c index 58212bc79e..a629c94ead 100644 --- a/epan/dissectors/packet-mgcp.c +++ b/epan/dissectors/packet-mgcp.c @@ -1396,7 +1396,7 @@ static void dissect_mgcp_firstline(tvbuff_t *tvb, packet_info *pinfo, proto_tree const gchar *verb_description = ""; char code_with_verb[64] = ""; /* To fit "<4-letter-code> (<longest-verb>)" */ - static address null_address = { AT_NONE, 0, NULL }; + static address null_address = { AT_NONE, -1, 0, NULL }; tvb_previous_offset = 0; tvb_len = tvb_length(tvb); tvb_current_len = tvb_len; diff --git a/epan/dissectors/packet-radius.c b/epan/dissectors/packet-radius.c index 7455d7ca03..a6e9719dfb 100644 --- a/epan/dissectors/packet-radius.c +++ b/epan/dissectors/packet-radius.c @@ -1356,7 +1356,7 @@ dissect_radius(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _ radius_call_info_key radius_call_key; radius_call_info_key *new_radius_call_key; radius_call_t *radius_call = NULL; - static address null_address = { AT_NONE, 0, NULL }; + static address null_address = { AT_NONE, -1, 0, NULL }; /* does this look like radius ? */ if(!is_radius(tvb)){ diff --git a/epan/dissectors/packet-rpc.c b/epan/dissectors/packet-rpc.c index 2bed5aafd3..26feaa2104 100644 --- a/epan/dissectors/packet-rpc.c +++ b/epan/dissectors/packet-rpc.c @@ -1547,7 +1547,7 @@ dissect_rpc_indir_call(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int args_id, guint32 prog, guint32 vers, guint32 proc) { conversation_t* conversation; - static address null_address = { AT_NONE, 0, NULL }; + static address null_address = { AT_NONE, -1, 0, NULL }; rpc_proc_info_key key; rpc_proc_info_value *value; rpc_call_info_value *rpc_call; @@ -1697,7 +1697,7 @@ dissect_rpc_indir_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, int result_id, int prog_id, int vers_id, int proc_id) { conversation_t* conversation; - static address null_address = { AT_NONE, 0, NULL }; + static address null_address = { AT_NONE, -1, 0, NULL }; rpc_call_info_value *rpc_call; char *procname=NULL; dissect_function_t *dissect_function = NULL; @@ -1929,7 +1929,7 @@ dissect_rpc_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, rpc_proc_info_key key; rpc_proc_info_value *value = NULL; conversation_t* conversation; - static address null_address = { AT_NONE, 0, NULL }; + static address null_address = { AT_NONE, -1, 0, NULL }; nstime_t ns; dissect_function_t *dissect_function = NULL; |