aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvan Huus <eapache@gmail.com>2012-10-26 01:59:17 +0000
committerEvan Huus <eapache@gmail.com>2012-10-26 01:59:17 +0000
commit361aedec1f819365bd89143185892e2c7fa38efd (patch)
treea6ac4a3aa66e73b5673b988dc6a4e8ee7fd97979
parentc6b522bc703bd91b5c473491a68e92b5319e819c (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
-rw-r--r--epan/address.h11
-rw-r--r--epan/column-utils.c6
-rw-r--r--epan/dissectors/packet-ieee80211.c28
-rw-r--r--epan/dissectors/packet-mgcp.c2
-rw-r--r--epan/dissectors/packet-radius.c2
-rw-r--r--epan/dissectors/packet-rpc.c6
-rw-r--r--plugins/wimax/packet-wmx.c2
7 files changed, 36 insertions, 21 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;
diff --git a/plugins/wimax/packet-wmx.c b/plugins/wimax/packet-wmx.c
index cb006db0cc..fbb4a7b540 100644
--- a/plugins/wimax/packet-wmx.c
+++ b/plugins/wimax/packet-wmx.c
@@ -64,7 +64,7 @@ extern gboolean include_cor2_changes;
gint man_ofdma = 1;
-address bs_address = {0,0,0};
+address bs_address = {AT_NONE, -1, 0, NULL};
/* The following variables are local to the function, but serve as
elements for the global ett_tlv[] array */