Martin Kupec <martin.kupec[AT]kupson.cz>
Litao Gao <ltgao[AT]juniper.net>
Niels Widger <niels[AT]qacafe.com>
+Pontus Fuchs <pontus.fuchs[AT]gmail.com>
Dan Lasley <dlasley[AT]promus.com> gave permission for his
dumpit() hex-dump routine to be used.
AT_AX25 /* AX.25 */
} address_type;
+typedef enum {
+ AT_SUB_NONE, /* no sub type */
+ AT_SUB_IEEE80211, /* 802.11 */
+} address_stype;
+
typedef struct _address {
address_type type; /* type of address */
+ address_stype subtype;
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)->subtype = AT_SUB_NONE; \
+ (addr)->len = (addr_len); \
+ (addr)->data = (addr_data); \
+ }
+
+#define SET_ADDRESS_SUB(addr, addr_type, addr_subtype, addr_len, addr_data) { \
+ (addr)->type = (addr_type); \
+ (addr)->subtype = addr_subtype; \
(addr)->len = (addr_len); \
(addr)->data = (addr_data); \
}
break;
case AT_ETHER:
- if (is_src)
- pinfo->cinfo->col_expr.col_expr[col] = "eth.src";
- else
- pinfo->cinfo->col_expr.col_expr[col] = "eth.dst";
- address_to_str_buf(addr, pinfo->cinfo->col_expr.col_expr_val[col], COL_MAX_LEN);
+ switch(addr->subtype) {
+ default:
+ if (is_src)
+ pinfo->cinfo->col_expr.col_expr[col] = "eth.src";
+ else
+ pinfo->cinfo->col_expr.col_expr[col] = "eth.dst";
+ address_to_str_buf(addr, pinfo->cinfo->col_expr.col_expr_val[col], COL_MAX_LEN);
+ break;
+ case AT_SUB_IEEE80211:
+ if (is_src)
+ pinfo->cinfo->col_expr.col_expr[col] = "wlan.sa";
+ else
+ pinfo->cinfo->col_expr.col_expr[col] = "wlan.da";
+ address_to_str_buf(addr, pinfo->cinfo->col_expr.col_expr_val[col], COL_MAX_LEN);
+ break;
+ }
break;
case AT_IPv4:
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_SUB(&pinfo->dl_src, AT_ETHER, AT_SUB_IEEE80211, 6, src);
+ SET_ADDRESS_SUB(&pinfo->src, AT_ETHER, AT_SUB_IEEE80211, 6, src);
+ SET_ADDRESS_SUB(&pinfo->dl_dst, AT_ETHER, AT_SUB_IEEE80211, 6, dst);
+ SET_ADDRESS_SUB(&pinfo->dst, AT_ETHER, AT_SUB_IEEE80211, 6, dst);
/* 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_SUB(&whdr->bssid, AT_ETHER, AT_SUB_IEEE80211, 6, tvb_get_ptr(tvb, 16,6));
+ SET_ADDRESS_SUB(&whdr->src, AT_ETHER, AT_SUB_IEEE80211, 6, src);
+ SET_ADDRESS_SUB(&whdr->dst, AT_ETHER, AT_SUB_IEEE80211, 6, dst);
whdr->type = frame_type_subtype;
seq_control = tvb_get_letohs(tvb, 22);
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_SUB(&pinfo->dl_src, AT_ETHER, AT_SUB_IEEE80211, 6, src);
+ SET_ADDRESS_SUB(&pinfo->src, AT_ETHER, AT_SUB_IEEE80211, 6, src);
+ SET_ADDRESS_SUB(&pinfo->dl_dst, AT_ETHER, AT_SUB_IEEE80211, 6, dst);
+ SET_ADDRESS_SUB(&pinfo->dst, AT_ETHER, AT_SUB_IEEE80211, 6, dst);
/* 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_SUB(&whdr->bssid, AT_ETHER, AT_SUB_IEEE80211, 6, bssid);
+ SET_ADDRESS_SUB(&whdr->src, AT_ETHER, AT_SUB_IEEE80211, 6, src);
+ SET_ADDRESS_SUB(&whdr->dst, AT_ETHER, AT_SUB_IEEE80211, 6, dst);
whdr->type = frame_type_subtype;
seq_control = tvb_get_letohs(tvb, 22);
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, AT_SUB_NONE, 0, NULL };
tvb_previous_offset = 0;
tvb_len = tvb_length(tvb);
tvb_current_len = tvb_len;
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, AT_SUB_NONE, 0, NULL };
/* does this look like radius ? */
if(!is_radius(tvb)){
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, AT_SUB_NONE, 0, NULL };
rpc_proc_info_key key;
rpc_proc_info_value *value;
rpc_call_info_value *rpc_call;
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, AT_SUB_NONE, 0, NULL };
rpc_call_info_value *rpc_call;
char *procname=NULL;
dissect_function_t *dissect_function = NULL;
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, AT_SUB_NONE, 0, NULL };
nstime_t ns;
dissect_function_t *dissect_function = NULL;
gint man_ofdma = 1;
-address bs_address = {0,0,0};
+address bs_address = {0,0,0,0};
/* The following variables are local to the function, but serve as
elements for the global ett_tlv[] array */