aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--epan/dissectors/packet-ieee80211.c7
-rw-r--r--epan/dissectors/packet-radiotap.c35
-rw-r--r--wiretap/libpcap.c11
3 files changed, 36 insertions, 17 deletions
diff --git a/epan/dissectors/packet-ieee80211.c b/epan/dissectors/packet-ieee80211.c
index fb8a9f56ed..a707bf10ce 100644
--- a/epan/dissectors/packet-ieee80211.c
+++ b/epan/dissectors/packet-ieee80211.c
@@ -1107,7 +1107,7 @@ add_fixed_field (proto_tree * tree, tvbuff_t * tvb, int offset, int lfcode)
proto_item *tsinfo_item;
proto_tree *tsinfo_tree;
guint32 tsi;
-
+
tsinfo_item = proto_tree_add_item(tree, hf_ts_info, tvb,
offset, 3, TRUE);
tsinfo_tree = proto_item_add_subtree(tsinfo_item, ett_tsinfo_tree);
@@ -2037,7 +2037,7 @@ add_tagged_field (packet_info * pinfo, proto_tree * tree, tvbuff_t * tvb, int of
proto_tree_add_item(tree, hf_tsinfo_up, tvb, offset + 2, 1, TRUE);
proto_tree_add_item(tree, hf_class_type, tvb, offset + 3, 1, TRUE);
proto_tree_add_item(tree, hf_class_mask, tvb, offset + 4, 1, TRUE);
- switch (type)
+ switch (type)
{
case 0:
proto_tree_add_item(tree, ff_src_mac_addr, tvb, offset + 5,
@@ -3647,7 +3647,7 @@ dissect_ieee80211 (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
static void
dissect_ieee80211_datapad (tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
{
- dissect_ieee80211_common (tvb, pinfo, tree, FALSE, FALSE,
+ dissect_ieee80211_common (tvb, pinfo, tree, FALSE, TRUE,
pinfo->pseudo_header->ieee_802_11.fcs_len, FALSE, TRUE);
}
@@ -4788,6 +4788,7 @@ proto_register_ieee80211 (void)
register_dissector("wlan_fixed", dissect_ieee80211_fixed, proto_wlan);
register_dissector("wlan_bsfc", dissect_ieee80211_bsfc, proto_wlan);
register_dissector("wlan_datapad", dissect_ieee80211_datapad, proto_wlan);
+ register_dissector("wlan_radio", dissect_ieee80211_radio, proto_wlan);
register_init_routine(wlan_defragment_init);
wlan_tap = register_tap("wlan");
diff --git a/epan/dissectors/packet-radiotap.c b/epan/dissectors/packet-radiotap.c
index 40529a7d6a..824a1f6138 100644
--- a/epan/dissectors/packet-radiotap.c
+++ b/epan/dissectors/packet-radiotap.c
@@ -141,6 +141,7 @@ static int hf_radiotap_pad = -1;
static int hf_radiotap_length = -1;
static int hf_radiotap_present = -1;
static int hf_radiotap_mactime = -1;
+static int hf_radiotap_channel = -1;
static int hf_radiotap_channel_frequency = -1;
static int hf_radiotap_channel_flags = -1;
static int hf_radiotap_datarate = -1;
@@ -186,7 +187,7 @@ static gint ett_radiotap = -1;
static gint ett_radiotap_present = -1;
static gint ett_radiotap_flags = -1;
-static dissector_handle_t ieee80211_handle;
+static dissector_handle_t ieee80211_radio_handle;
static dissector_handle_t ieee80211_datapad_handle;
static void
@@ -425,6 +426,9 @@ proto_register_radiotap(void)
{ &hf_radiotap_fcs,
{ "802.11 FCS", "radiotap.fcs",
FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL } },
+ { &hf_radiotap_channel,
+ { "Channel", "radiotap.channel",
+ FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL } },
{ &hf_radiotap_channel_frequency,
{ "Channel frequency", "radiotap.channel.freq",
FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL } },
@@ -530,7 +534,7 @@ dissect_radiotap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
gint8 dbm;
guint8 db, rflags;
guint32 present, next_present;
- int bit;
+ int bit, channel;
if(check_col(pinfo->cinfo, COL_PROTOCOL))
col_set_str(pinfo->cinfo, COL_PROTOCOL, "WLAN");
@@ -659,8 +663,9 @@ dissect_radiotap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
rate / 2, rate & 1 ? 5 : 0);
}
if (tree) {
+ pinfo->pseudo_header->ieee_802_11.data_rate = rate;
proto_tree_add_uint_format(radiotap_tree, hf_radiotap_datarate,
- tvb, offset, 1, tvb_get_guint8(tvb, offset),
+ tvb, offset, 1, rate,
"Data Rate: %d.%d Mb/s", rate / 2, rate & 1 ? 5 : 0);
}
offset++;
@@ -750,10 +755,19 @@ dissect_radiotap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if (tree) {
freq = tvb_get_letohs(tvb, offset);
flags = tvb_get_letohs(tvb, offset+2);
- proto_tree_add_uint_format(radiotap_tree, hf_radiotap_channel_frequency,
- tvb, offset, 2, freq,
- "Channel: %u (chan %u)", freq, ieee80211_mhz2ieee(freq, flags));
- proto_tree_add_uint(radiotap_tree, hf_radiotap_channel_flags,
+ channel = ieee80211_mhz2ieee(freq, flags);
+ if (channel < 1) {
+ proto_tree_add_uint_format(radiotap_tree, hf_radiotap_channel_frequency,
+ tvb, offset, 2, freq,
+ "Channel frequency: %u (invalid)", freq);
+ } else {
+ pinfo->pseudo_header->ieee_802_11.channel = (guint8) channel;
+ proto_tree_add_uint(radiotap_tree, hf_radiotap_channel,
+ tvb, offset, 2, (guint32) channel);
+ proto_tree_add_uint(radiotap_tree, hf_radiotap_channel_frequency,
+ tvb, offset, 2, freq);
+ }
+ proto_tree_add_uint(radiotap_tree, hf_radiotap_channel_flags,
tvb, offset+2, 2, flags);
}
offset+=4;
@@ -784,8 +798,9 @@ dissect_radiotap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if (length_remaining < 2)
break;
if (tree) {
+ pinfo->pseudo_header->ieee_802_11.signal_level = tvb_get_letohs(tvb, offset);
proto_tree_add_uint(radiotap_tree, hf_radiotap_quality,
- tvb, offset, 2, tvb_get_letohs(tvb, offset));
+ tvb, offset, 2, pinfo->pseudo_header->ieee_802_11.signal_level);
}
offset+=2;
length_remaining-=2;
@@ -854,7 +869,7 @@ dissect_radiotap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
/* dissect the 802.11 header next */
call_dissector((rflags & IEEE80211_RADIOTAP_F_DATAPAD) ?
- ieee80211_datapad_handle : ieee80211_handle,
+ ieee80211_datapad_handle : ieee80211_radio_handle,
next_tvb, pinfo, tree);
}
@@ -864,7 +879,7 @@ proto_reg_handoff_radiotap(void)
dissector_handle_t radiotap_handle;
/* handle for 802.11 dissector */
- ieee80211_handle = find_dissector("wlan");
+ ieee80211_radio_handle = find_dissector("wlan_radio");
ieee80211_datapad_handle = find_dissector("wlan_datapad");
radiotap_handle = create_dissector_handle(dissect_radiotap, proto_radiotap);
diff --git a/wiretap/libpcap.c b/wiretap/libpcap.c
index 997b63f896..0869f81de4 100644
--- a/wiretap/libpcap.c
+++ b/wiretap/libpcap.c
@@ -86,7 +86,7 @@ struct mtp2_hdr {
#endif
/*
- * The fake link-layer header of LAPD packets
+ * The fake link-layer header of LAPD packets
*/
struct lapd_sll_hdr {
guint16 sll_pkttype; /* packet type */
@@ -639,7 +639,7 @@ int libpcap_open(wtap *wth, int *err, gchar **err_info)
gboolean aix;
int file_encap;
-
+
/* Read in the number that should be at the start of a "libpcap" file */
errno = WTAP_ERR_CANT_READ;
bytes_read = file_read(&magic, 1, sizeof magic, wth->fh);
@@ -697,7 +697,7 @@ int libpcap_open(wtap *wth, int *err, gchar **err_info)
case PCAP_SWAPPED_NSEC_MAGIC:
/* Host that wrote it out has a byte order opposite to
- ours, and was running a program using either ss990915
+ ours, and was running a program using either ss990915
or ss991029 libpcap. */
byte_swapped = TRUE;
modified = FALSE;
@@ -1277,6 +1277,9 @@ static gboolean libpcap_read(wtap *wth, int *err, gchar **err_info,
* supplies an FCS?
*/
wth->pseudo_header.ieee_802_11.fcs_len = -1;
+ wth->pseudo_header.ieee_802_11.channel = 0;
+ wth->pseudo_header.ieee_802_11.data_rate = 0;
+ wth->pseudo_header.ieee_802_11.signal_level = 0;
break;
case WTAP_ENCAP_IRDA:
@@ -1814,7 +1817,7 @@ libpcap_read_mtp2_pseudoheader(FILE_T fh, union wtap_pseudo_header *pseudo_heade
}
return libpcap_get_mtp2_pseudoheader(&mtp2_hdr, pseudo_header);
-
+
}
static gboolean