diff options
author | Guy Harris <guy@alum.mit.edu> | 2001-06-08 06:01:06 +0000 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2001-06-08 06:01:06 +0000 |
commit | 988785407fd46b441f75f44178f1bc55ddbae5c1 (patch) | |
tree | 9a5907128b6516f757a98da10a8d8293bc99a559 /packet-ieee80211.c | |
parent | 46acd2ba20437bad2ec9ef390c02902e116de875 (diff) | |
download | wireshark-988785407fd46b441f75f44178f1bc55ddbae5c1.tar.gz wireshark-988785407fd46b441f75f44178f1bc55ddbae5c1.tar.bz2 wireshark-988785407fd46b441f75f44178f1bc55ddbae5c1.zip |
Use "col_set_str()", rather than "col_add_str()", wherever possible.
Don't bother doing multiple "tvb_get_letohs()" to get the frame control
field - we fetched it once, just use the value we fetched.
Call sub-dissectors *regardless* of whether a protocol tree is being
built or not - dissectors should always do so.
svn path=/trunk/; revision=3524
Diffstat (limited to 'packet-ieee80211.c')
-rw-r--r-- | packet-ieee80211.c | 223 |
1 files changed, 109 insertions, 114 deletions
diff --git a/packet-ieee80211.c b/packet-ieee80211.c index ba6afc067f..91424f2c49 100644 --- a/packet-ieee80211.c +++ b/packet-ieee80211.c @@ -3,7 +3,7 @@ * Copyright 2000, Axis Communications AB * Inquiries/bugreports should be sent to Johan.Jorgensen@axis.com * - * $Id: packet-ieee80211.c,v 1.19 2001/06/01 01:15:28 guy Exp $ + * $Id: packet-ieee80211.c,v 1.20 2001/06/08 06:01:06 guy Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -91,6 +91,8 @@ #define COOK_WEP_KEY(x) ((x & 0xC0000000) >> 30) #define COL_SHOW_INFO(fd,info) if (check_col(fd,COL_INFO)) \ col_add_str(fd,COL_INFO,info); +#define COL_SHOW_INFO_CONST(fd,info) if (check_col(fd,COL_INFO)) \ +col_set_str(fd,COL_INFO,info); #define IS_TO_DS(x) ((x & 0x1)) #define IS_FROM_DS(x) ((x & 0x2)) @@ -785,24 +787,24 @@ dissect_ieee80211 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree) hdr_tree = proto_item_add_subtree (ti, ett_80211); fc_item = proto_tree_add_uint_format (hdr_tree, hf_fc_field, tvb, 0, 2, - tvb_get_letohs (tvb, 0), + fcf, "Frame Control: 0x%04X", - tvb_get_letohs (tvb, 0)); + fcf); fc_tree = proto_item_add_subtree (fc_item, ett_fc_tree); proto_tree_add_uint (fc_tree, hf_fc_proto_version, tvb, 0, 1, - COOK_PROT_VERSION (tvb_get_letohs (tvb, 0))); + COOK_PROT_VERSION (fcf)); proto_tree_add_uint (fc_tree, hf_fc_frame_type, tvb, 0, 1, - COOK_FRAME_TYPE (tvb_get_letohs (tvb, 0))); + COOK_FRAME_TYPE (fcf)); proto_tree_add_uint (fc_tree, hf_fc_frame_subtype, tvb, 0, 1, - COOK_FRAME_SUBTYPE (tvb_get_letohs (tvb, 0))); + COOK_FRAME_SUBTYPE (fcf)); - flags = COOK_FLAGS (tvb_get_letohs (tvb, 0)); + flags = COOK_FLAGS (fcf); flag_item = proto_tree_add_uint_format (fc_tree, hf_fc_flags, tvb, 1, 1, @@ -1007,7 +1009,7 @@ dissect_ieee80211 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree) { case MGT_ASSOC_REQ: - COL_SHOW_INFO (pinfo->fd, "Association Request"); + COL_SHOW_INFO_CONST (pinfo->fd, "Association Request"); if (tree) { fixed_tree = get_fixed_parameter_tree (tree, tvb, MGT_FRAME_LEN, 4); @@ -1034,7 +1036,7 @@ dissect_ieee80211 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree) case MGT_ASSOC_RESP: - COL_SHOW_INFO (pinfo->fd, "Association Response"); + COL_SHOW_INFO_CONST (pinfo->fd, "Association Response"); if (tree) { @@ -1063,7 +1065,7 @@ dissect_ieee80211 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree) case MGT_REASSOC_REQ: - COL_SHOW_INFO (pinfo->fd, "Reassociation Request"); + COL_SHOW_INFO_CONST (pinfo->fd, "Reassociation Request"); if (tree) { fixed_tree = get_fixed_parameter_tree (tree, tvb, MGT_FRAME_LEN, 10); @@ -1089,7 +1091,7 @@ dissect_ieee80211 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree) break; case MGT_REASSOC_RESP: - COL_SHOW_INFO (pinfo->fd, "Reassociation Response"); + COL_SHOW_INFO_CONST (pinfo->fd, "Reassociation Response"); if (tree) { fixed_tree = get_fixed_parameter_tree (tree, tvb, MGT_FRAME_LEN, 10); @@ -1116,7 +1118,7 @@ dissect_ieee80211 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree) case MGT_PROBE_REQ: - COL_SHOW_INFO (pinfo->fd, "Probe Request"); + COL_SHOW_INFO_CONST (pinfo->fd, "Probe Request"); if (tree) { next_idx = MGT_FRAME_LEN; @@ -1136,7 +1138,7 @@ dissect_ieee80211 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree) case MGT_PROBE_RESP: - COL_SHOW_INFO (pinfo->fd, "Probe Response"); + COL_SHOW_INFO_CONST (pinfo->fd, "Probe Response"); if (tree) { fixed_tree = get_fixed_parameter_tree (tree, tvb, MGT_FRAME_LEN, 12); @@ -1163,7 +1165,7 @@ dissect_ieee80211 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree) case MGT_BEACON: /* Dissect protocol payload fields */ - COL_SHOW_INFO (pinfo->fd, "Beacon frame"); + COL_SHOW_INFO_CONST (pinfo->fd, "Beacon frame"); if (tree) { @@ -1194,14 +1196,14 @@ dissect_ieee80211 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree) case MGT_ATIM: - COL_SHOW_INFO (pinfo->fd, "ATIM"); + COL_SHOW_INFO_CONST (pinfo->fd, "ATIM"); if (tree) { } break; case MGT_DISASS: - COL_SHOW_INFO (pinfo->fd, "Dissassociate"); + COL_SHOW_INFO_CONST (pinfo->fd, "Dissassociate"); if (tree) { fixed_tree = get_fixed_parameter_tree (tree, tvb, MGT_FRAME_LEN, cap_len); @@ -1210,21 +1212,22 @@ dissect_ieee80211 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree) break; case MGT_AUTHENTICATION: - COL_SHOW_INFO (pinfo->fd, "Authentication"); - if (tree) + COL_SHOW_INFO_CONST (pinfo->fd, "Authentication"); + if (IS_WEP(COOK_FLAGS(fcf))) { - if (IS_WEP(COOK_FLAGS(fcf))) - { - int pkt_len = tvb_reported_length (tvb); - int cap_len = tvb_length (tvb); - - get_wep_parameter_tree (tree, tvb, MGT_FRAME_LEN, pkt_len); - pkt_len = MAX (pkt_len - 8 - MGT_FRAME_LEN, 0); - cap_len = MIN (pkt_len, MAX (cap_len - 8 - MGT_FRAME_LEN, 0)); - next_tvb = tvb_new_subset (tvb, MGT_FRAME_LEN + 4, cap_len, pkt_len); - dissect_data (next_tvb, 0, pinfo, tree); - } - else + int pkt_len = tvb_reported_length (tvb); + int cap_len = tvb_length (tvb); + + if (tree) + get_wep_parameter_tree (tree, tvb, MGT_FRAME_LEN, pkt_len); + pkt_len = MAX (pkt_len - 8 - MGT_FRAME_LEN, 0); + cap_len = MIN (pkt_len, MAX (cap_len - 8 - MGT_FRAME_LEN, 0)); + next_tvb = tvb_new_subset (tvb, MGT_FRAME_LEN + 4, cap_len, pkt_len); + dissect_data (next_tvb, 0, pinfo, tree); + } + else + { + if (tree) { fixed_tree = get_fixed_parameter_tree (tree, tvb, MGT_FRAME_LEN, 6); add_fixed_field (fixed_tree, tvb, MGT_FRAME_LEN, FIELD_AUTH_ALG); @@ -1256,7 +1259,7 @@ dissect_ieee80211 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree) break; case MGT_DEAUTHENTICATION: - COL_SHOW_INFO (pinfo->fd, "Deauthentication"); + COL_SHOW_INFO_CONST (pinfo->fd, "Deauthentication"); if (tree) { fixed_tree = get_fixed_parameter_tree (hdr_tree, tvb, MGT_FRAME_LEN, 2); @@ -1267,7 +1270,7 @@ dissect_ieee80211 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree) case CTRL_PS_POLL: - COL_SHOW_INFO (pinfo->fd, "Power-Save poll"); + COL_SHOW_INFO_CONST (pinfo->fd, "Power-Save poll"); src = tvb_get_ptr (tvb, 10, 6); dst = tvb_get_ptr (tvb, 4, 6); @@ -1297,7 +1300,7 @@ dissect_ieee80211 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree) case CTRL_RTS: - COL_SHOW_INFO (pinfo->fd, "Request-to-send"); + COL_SHOW_INFO_CONST (pinfo->fd, "Request-to-send"); src = tvb_get_ptr (tvb, 10, 6); dst = tvb_get_ptr (tvb, 4, 6); @@ -1326,7 +1329,7 @@ dissect_ieee80211 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree) case CTRL_CTS: - COL_SHOW_INFO (pinfo->fd, "Clear-to-send"); + COL_SHOW_INFO_CONST (pinfo->fd, "Clear-to-send"); dst = tvb_get_ptr (tvb, 4, 6); @@ -1346,7 +1349,7 @@ dissect_ieee80211 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree) case CTRL_ACKNOWLEDGEMENT: - COL_SHOW_INFO (pinfo->fd, "Acknowledgement"); + COL_SHOW_INFO_CONST (pinfo->fd, "Acknowledgement"); dst = tvb_get_ptr (tvb, 4, 6); @@ -1363,7 +1366,7 @@ dissect_ieee80211 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree) case CTRL_CFP_END: - COL_SHOW_INFO (pinfo->fd, "CF-End (Control-frame)"); + COL_SHOW_INFO_CONST (pinfo->fd, "CF-End (Control-frame)"); src = tvb_get_ptr (tvb, 10, 6); dst = tvb_get_ptr (tvb, 4, 6); @@ -1389,7 +1392,7 @@ dissect_ieee80211 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree) case CTRL_CFP_ENDACK: - COL_SHOW_INFO (pinfo->fd, "CF-End + CF-Ack (Control-frame)"); + COL_SHOW_INFO_CONST (pinfo->fd, "CF-End + CF-Ack (Control-frame)"); src = tvb_get_ptr (tvb, 10, 6); dst = tvb_get_ptr (tvb, 4, 6); @@ -1415,129 +1418,121 @@ dissect_ieee80211 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree) case DATA: - COL_SHOW_INFO (pinfo->fd, "Data"); - if (tree) - { - hdr_len = find_header_length (tvb_get_ptr (tvb, 0, cap_len), 0); + COL_SHOW_INFO_CONST (pinfo->fd, "Data"); + hdr_len = find_header_length (tvb_get_ptr (tvb, 0, cap_len), 0); - next_tvb = tvb_new_subset (tvb, hdr_len, -1, -1); + next_tvb = tvb_new_subset (tvb, hdr_len, -1, -1); - if (IS_WEP(COOK_FLAGS(fcf))) - { - int pkt_len = tvb_reported_length (next_tvb); - int cap_len = tvb_length (next_tvb); - - get_wep_parameter_tree (tree, next_tvb, 0, pkt_len); - pkt_len = MAX (pkt_len - 8, 0); - cap_len = MIN (pkt_len, MAX (cap_len - 8, 0)); - next_tvb = tvb_new_subset (tvb, hdr_len + 4, cap_len, pkt_len); - dissect_data (next_tvb, 0, pinfo, tree); - } - else - call_dissector (llc_handle, next_tvb, pinfo, tree); + if (IS_WEP(COOK_FLAGS(fcf))) + { + int pkt_len = tvb_reported_length (next_tvb); + int cap_len = tvb_length (next_tvb); + + if (tree) + get_wep_parameter_tree (tree, next_tvb, 0, pkt_len); + pkt_len = MAX (pkt_len - 8, 0); + cap_len = MIN (pkt_len, MAX (cap_len - 8, 0)); + next_tvb = tvb_new_subset (tvb, hdr_len + 4, cap_len, pkt_len); + dissect_data (next_tvb, 0, pinfo, tree); } + else + call_dissector (llc_handle, next_tvb, pinfo, tree); break; case DATA_CF_ACK: - COL_SHOW_INFO (pinfo->fd, "Data + CF-Acknowledgement"); - if (tree) - { - hdr_len = find_header_length (tvb_get_ptr (tvb, 0, cap_len), 0); + COL_SHOW_INFO_CONST (pinfo->fd, "Data + CF-Acknowledgement"); + hdr_len = find_header_length (tvb_get_ptr (tvb, 0, cap_len), 0); - next_tvb = tvb_new_subset (tvb, hdr_len, -1, -1); + next_tvb = tvb_new_subset (tvb, hdr_len, -1, -1); - if (IS_WEP(COOK_FLAGS(fcf))) - { - int pkt_len = tvb_reported_length (next_tvb); - int cap_len = tvb_length (next_tvb); - - get_wep_parameter_tree (tree, next_tvb, 0, pkt_len); - pkt_len = MAX (pkt_len - 8, 0); - cap_len = MIN (pkt_len, MAX (cap_len - 8, 0)); - next_tvb = tvb_new_subset (tvb, hdr_len + 4, cap_len, pkt_len); - dissect_data (next_tvb, 0, pinfo, tree); - } - else - call_dissector (llc_handle, next_tvb, pinfo, tree); + if (IS_WEP(COOK_FLAGS(fcf))) + { + int pkt_len = tvb_reported_length (next_tvb); + int cap_len = tvb_length (next_tvb); + + if (tree) + get_wep_parameter_tree (tree, next_tvb, 0, pkt_len); + pkt_len = MAX (pkt_len - 8, 0); + cap_len = MIN (pkt_len, MAX (cap_len - 8, 0)); + next_tvb = tvb_new_subset (tvb, hdr_len + 4, cap_len, pkt_len); + dissect_data (next_tvb, 0, pinfo, tree); } + else + call_dissector (llc_handle, next_tvb, pinfo, tree); break; case DATA_CF_POLL: - COL_SHOW_INFO (pinfo->fd, "Data + CF-Poll"); - if (tree) - { - hdr_len = find_header_length (tvb_get_ptr (tvb, 0, cap_len), 0); - next_tvb = tvb_new_subset (tvb, hdr_len, -1, -1); + COL_SHOW_INFO_CONST (pinfo->fd, "Data + CF-Poll"); + hdr_len = find_header_length (tvb_get_ptr (tvb, 0, cap_len), 0); + next_tvb = tvb_new_subset (tvb, hdr_len, -1, -1); - if (IS_WEP(COOK_FLAGS(fcf))) - { - int pkt_len = tvb_reported_length (next_tvb); - int cap_len = tvb_length (next_tvb); - - get_wep_parameter_tree (tree, next_tvb, 0, pkt_len); - pkt_len = MAX (pkt_len - 8, 0); - cap_len = MIN (pkt_len, MAX (cap_len - 8, 0)); - next_tvb = tvb_new_subset (tvb, hdr_len + 4, cap_len, pkt_len); - dissect_data (next_tvb, 0, pinfo, tree); - } - else - call_dissector (llc_handle, next_tvb, pinfo, tree); + if (IS_WEP(COOK_FLAGS(fcf))) + { + int pkt_len = tvb_reported_length (next_tvb); + int cap_len = tvb_length (next_tvb); + + if (tree) + get_wep_parameter_tree (tree, next_tvb, 0, pkt_len); + pkt_len = MAX (pkt_len - 8, 0); + cap_len = MIN (pkt_len, MAX (cap_len - 8, 0)); + next_tvb = tvb_new_subset (tvb, hdr_len + 4, cap_len, pkt_len); + dissect_data (next_tvb, 0, pinfo, tree); } + else + call_dissector (llc_handle, next_tvb, pinfo, tree); break; case DATA_CF_ACK_POLL: - COL_SHOW_INFO (pinfo->fd, "Data + CF-Acknowledgement/Poll"); - if (tree) - { - hdr_len = find_header_length (tvb_get_ptr (tvb, 0, cap_len), 0); - next_tvb = tvb_new_subset (tvb, hdr_len, -1, -1); + COL_SHOW_INFO_CONST (pinfo->fd, "Data + CF-Acknowledgement/Poll"); + hdr_len = find_header_length (tvb_get_ptr (tvb, 0, cap_len), 0); + next_tvb = tvb_new_subset (tvb, hdr_len, -1, -1); - if (IS_WEP(COOK_FLAGS(fcf))) - { - int pkt_len = tvb_reported_length (next_tvb); - int cap_len = tvb_length (next_tvb); - - get_wep_parameter_tree (tree, next_tvb, 0, pkt_len); - pkt_len = MAX (pkt_len - 8, 0); - cap_len = MIN (pkt_len, MAX (cap_len - 8, 0)); - next_tvb = tvb_new_subset (tvb, hdr_len + 4, cap_len, pkt_len); - dissect_data (next_tvb, 0, pinfo, tree); - } - else - call_dissector (llc_handle, next_tvb, pinfo, tree); + if (IS_WEP(COOK_FLAGS(fcf))) + { + int pkt_len = tvb_reported_length (next_tvb); + int cap_len = tvb_length (next_tvb); + + if (tree) + get_wep_parameter_tree (tree, next_tvb, 0, pkt_len); + pkt_len = MAX (pkt_len - 8, 0); + cap_len = MIN (pkt_len, MAX (cap_len - 8, 0)); + next_tvb = tvb_new_subset (tvb, hdr_len + 4, cap_len, pkt_len); + dissect_data (next_tvb, 0, pinfo, tree); } + else + call_dissector (llc_handle, next_tvb, pinfo, tree); break; case DATA_NULL_FUNCTION: - COL_SHOW_INFO (pinfo->fd, "Null function (No data)"); + COL_SHOW_INFO_CONST (pinfo->fd, "Null function (No data)"); break; case DATA_CF_ACK_NOD: - COL_SHOW_INFO (pinfo->fd, "Data + Acknowledgement(No data)"); + COL_SHOW_INFO_CONST (pinfo->fd, "Data + Acknowledgement(No data)"); break; case DATA_CF_POLL_NOD: - COL_SHOW_INFO (pinfo->fd, "Data + CF-Poll (No data)"); + COL_SHOW_INFO_CONST (pinfo->fd, "Data + CF-Poll (No data)"); break; case DATA_CF_ACK_POLL_NOD: - COL_SHOW_INFO (pinfo->fd, "Data + CF-Acknowledgement/Poll (No data)"); + COL_SHOW_INFO_CONST (pinfo->fd, "Data + CF-Acknowledgement/Poll (No data)"); break; default: - COL_SHOW_INFO (pinfo->fd, "Unrecognized (Reserved frame)"); + COL_SHOW_INFO_CONST (pinfo->fd, "Unrecognized (Reserved frame)"); break; } } |