summaryrefslogtreecommitdiff
path: root/wiretap
diff options
context:
space:
mode:
authorSimon Barber <simon.barber@meraki.net>2015-12-09 14:26:46 -0800
committerGuy Harris <guy@alum.mit.edu>2015-12-24 07:58:51 +0000
commitffa9e938e24779470c664ea8eca1e452ce025f97 (patch)
tree907bfdf175cdfd1ac3694b2ca9de9ca452f33020 /wiretap
parent1ffd4398504d5bc69c322fd64e826fa7eb22ed3b (diff)
downloadwireshark-ffa9e938e24779470c664ea8eca1e452ce025f97.tar.gz
Refactor 802.11 radio flags.
The use of a flag field here is aesthetically unpleasing when the flags are referred to frequently. Convert these into bitfield entries. Change-Id: I6f47e31558439dfd343ec7f856d04480366a1237 Reviewed-on: https://code.wireshark.org/review/12511 Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Guy Harris <guy@alum.mit.edu>
Diffstat (limited to 'wiretap')
-rw-r--r--wiretap/commview.c78
-rw-r--r--wiretap/netmon.c2
-rw-r--r--wiretap/network_instruments.c10
-rw-r--r--wiretap/netxray.c44
-rw-r--r--wiretap/pcap-common.c2
-rw-r--r--wiretap/peekclassic.c10
-rw-r--r--wiretap/peektagged.c49
-rw-r--r--wiretap/snoop.c8
-rw-r--r--wiretap/wtap.h126
9 files changed, 142 insertions, 187 deletions
diff --git a/wiretap/commview.c b/wiretap/commview.c
index 1d99fbc051..ec89dda834 100644
--- a/wiretap/commview.c
+++ b/wiretap/commview.c
@@ -156,20 +156,16 @@ commview_read_packet(FILE_T fh, struct wtap_pkthdr *phdr, Buffer *buf,
case MEDIUM_WIFI :
phdr->pkt_encap = WTAP_ENCAP_IEEE_802_11_WITH_RADIO;
+ memset(&phdr->pseudo_header.ieee_802_11, 0, sizeof(phdr->pseudo_header.ieee_802_11));
phdr->pseudo_header.ieee_802_11.fcs_len = -1; /* Unknown */
phdr->pseudo_header.ieee_802_11.decrypted = FALSE;
phdr->pseudo_header.ieee_802_11.datapad = FALSE;
phdr->pseudo_header.ieee_802_11.phy = PHDR_802_11_PHY_UNKNOWN;
- phdr->pseudo_header.ieee_802_11.presence_flags =
- PHDR_802_11_HAS_CHANNEL |
- PHDR_802_11_HAS_DATA_RATE |
- PHDR_802_11_HAS_SIGNAL_PERCENT;
switch (cv_hdr.band) {
case BAND_11A:
phdr->pseudo_header.ieee_802_11.phy = PHDR_802_11_PHY_11A;
- phdr->pseudo_header.ieee_802_11.phy_info.info_11a.presence_flags =
- PHDR_802_11A_HAS_TURBO_TYPE;
+ phdr->pseudo_header.ieee_802_11.phy_info.info_11a.has_turbo_type = TRUE;
phdr->pseudo_header.ieee_802_11.phy_info.info_11a.turbo_type =
PHDR_802_11A_TURBO_TYPE_NORMAL;
frequency = ieee80211_chan_to_mhz(cv_hdr.channel, FALSE);
@@ -177,14 +173,12 @@ commview_read_packet(FILE_T fh, struct wtap_pkthdr *phdr, Buffer *buf,
case BAND_11B:
phdr->pseudo_header.ieee_802_11.phy = PHDR_802_11_PHY_11B;
- phdr->pseudo_header.ieee_802_11.phy_info.info_11b.presence_flags = 0;
frequency = ieee80211_chan_to_mhz(cv_hdr.channel, TRUE);
break;
case BAND_11G:
phdr->pseudo_header.ieee_802_11.phy = PHDR_802_11_PHY_11G;
- phdr->pseudo_header.ieee_802_11.phy_info.info_11g.presence_flags =
- PHDR_802_11G_HAS_MODE;
+ phdr->pseudo_header.ieee_802_11.phy_info.info_11g.has_mode = TRUE;
phdr->pseudo_header.ieee_802_11.phy_info.info_11g.mode =
PHDR_802_11G_MODE_NORMAL;
frequency = ieee80211_chan_to_mhz(cv_hdr.channel, TRUE);
@@ -192,8 +186,7 @@ commview_read_packet(FILE_T fh, struct wtap_pkthdr *phdr, Buffer *buf,
case BAND_11A_TURBO:
phdr->pseudo_header.ieee_802_11.phy = PHDR_802_11_PHY_11A;
- phdr->pseudo_header.ieee_802_11.phy_info.info_11a.presence_flags =
- PHDR_802_11A_HAS_TURBO_TYPE;
+ phdr->pseudo_header.ieee_802_11.phy_info.info_11a.has_turbo_type = TRUE;
phdr->pseudo_header.ieee_802_11.phy_info.info_11a.turbo_type =
PHDR_802_11A_TURBO_TYPE_TURBO;
frequency = ieee80211_chan_to_mhz(cv_hdr.channel, FALSE);
@@ -201,8 +194,7 @@ commview_read_packet(FILE_T fh, struct wtap_pkthdr *phdr, Buffer *buf,
case BAND_SUPERG:
phdr->pseudo_header.ieee_802_11.phy = PHDR_802_11_PHY_11G;
- phdr->pseudo_header.ieee_802_11.phy_info.info_11g.presence_flags =
- PHDR_802_11G_HAS_MODE;
+ phdr->pseudo_header.ieee_802_11.phy_info.info_11g.has_mode = TRUE;
phdr->pseudo_header.ieee_802_11.phy_info.info_11g.mode =
PHDR_802_11G_MODE_SUPER_G;
frequency = ieee80211_chan_to_mhz(cv_hdr.channel, TRUE);
@@ -210,15 +202,11 @@ commview_read_packet(FILE_T fh, struct wtap_pkthdr *phdr, Buffer *buf,
case BAND_11N_5GHZ:
phdr->pseudo_header.ieee_802_11.phy = PHDR_802_11_PHY_11N;
- phdr->pseudo_header.ieee_802_11.phy_info.info_11n.presence_flags =
- 0;
frequency = ieee80211_chan_to_mhz(cv_hdr.channel, FALSE);
break;
case BAND_11N_2_4GHZ:
phdr->pseudo_header.ieee_802_11.phy = PHDR_802_11_PHY_11N;
- phdr->pseudo_header.ieee_802_11.phy_info.info_11n.presence_flags =
- 0;
frequency = ieee80211_chan_to_mhz(cv_hdr.channel, TRUE);
break;
@@ -236,13 +224,17 @@ commview_read_packet(FILE_T fh, struct wtap_pkthdr *phdr, Buffer *buf,
break;
}
if (frequency != 0) {
- phdr->pseudo_header.ieee_802_11.presence_flags |=
- PHDR_802_11_HAS_FREQUENCY;
+ phdr->pseudo_header.ieee_802_11.has_frequency = TRUE;
phdr->pseudo_header.ieee_802_11.frequency = frequency;
}
+ phdr->pseudo_header.ieee_802_11.has_channel = TRUE;
phdr->pseudo_header.ieee_802_11.channel = cv_hdr.channel;
+
+ phdr->pseudo_header.ieee_802_11.has_data_rate = TRUE;
phdr->pseudo_header.ieee_802_11.data_rate =
cv_hdr.rate | (cv_hdr.direction << 8);
+
+ phdr->pseudo_header.ieee_802_11.has_signal_percent = TRUE;
phdr->pseudo_header.ieee_802_11.signal_percent = cv_hdr.signal_level_percent;
/*
@@ -257,13 +249,11 @@ commview_read_packet(FILE_T fh, struct wtap_pkthdr *phdr, Buffer *buf,
*/
if (cv_hdr.signal_level_dbm != 0) {
phdr->pseudo_header.ieee_802_11.signal_dbm = -cv_hdr.signal_level_dbm;
- phdr->pseudo_header.ieee_802_11.presence_flags |=
- PHDR_802_11_HAS_SIGNAL_DBM;
+ phdr->pseudo_header.ieee_802_11.has_signal_dbm = TRUE;
}
if (cv_hdr.noise_level != 0) {
phdr->pseudo_header.ieee_802_11.noise_dbm = -cv_hdr.noise_level;
- phdr->pseudo_header.ieee_802_11.presence_flags |=
- PHDR_802_11_HAS_NOISE_DBM;
+ phdr->pseudo_header.ieee_802_11.has_noise_dbm = TRUE;
}
break;
@@ -455,7 +445,7 @@ static gboolean commview_dump(wtap_dumper *wdh,
* If we don't know whether it's turbo, say it's
* not.
*/
- if (!(phdr->pseudo_header.ieee_802_11.phy_info.info_11a.presence_flags & PHDR_802_11A_HAS_TURBO_TYPE) ||
+ if (!phdr->pseudo_header.ieee_802_11.phy_info.info_11a.has_turbo_type ||
phdr->pseudo_header.ieee_802_11.phy_info.info_11a.turbo_type == PHDR_802_11A_TURBO_TYPE_NORMAL)
cv_hdr.band = BAND_11A;
else
@@ -471,7 +461,7 @@ static gboolean commview_dump(wtap_dumper *wdh,
* If we don't know whether it's Super G, say it's
* not.
*/
- if (!(phdr->pseudo_header.ieee_802_11.phy_info.info_11g.presence_flags & PHDR_802_11G_HAS_MODE))
+ if (!phdr->pseudo_header.ieee_802_11.phy_info.info_11g.has_mode)
cv_hdr.band = BAND_11G;
else {
switch (phdr->pseudo_header.ieee_802_11.phy_info.info_11g.mode) {
@@ -495,7 +485,7 @@ static gboolean commview_dump(wtap_dumper *wdh,
/*
* Pick the band based on the frequency.
*/
- if (phdr->pseudo_header.ieee_802_11.presence_flags & PHDR_802_11_HAS_FREQUENCY) {
+ if (phdr->pseudo_header.ieee_802_11.has_frequency) {
if (phdr->pseudo_header.ieee_802_11.frequency > 2484) {
/* 5 GHz band */
cv_hdr.band = BAND_11N_5GHZ;
@@ -518,29 +508,29 @@ static gboolean commview_dump(wtap_dumper *wdh,
break;
}
cv_hdr.channel =
- (phdr->pseudo_header.ieee_802_11.presence_flags & PHDR_802_11_HAS_CHANNEL) ?
- phdr->pseudo_header.ieee_802_11.channel :
- 0;
+ phdr->pseudo_header.ieee_802_11.has_channel ?
+ phdr->pseudo_header.ieee_802_11.channel :
+ 0;
cv_hdr.rate =
- (phdr->pseudo_header.ieee_802_11.presence_flags & PHDR_802_11_HAS_DATA_RATE) ?
- (guint8)(phdr->pseudo_header.ieee_802_11.data_rate & 0xFF) :
- 0;
+ phdr->pseudo_header.ieee_802_11.has_data_rate ?
+ (guint8)(phdr->pseudo_header.ieee_802_11.data_rate & 0xFF) :
+ 0;
cv_hdr.direction =
- (phdr->pseudo_header.ieee_802_11.presence_flags & PHDR_802_11_HAS_DATA_RATE) ?
- (guint8)((phdr->pseudo_header.ieee_802_11.data_rate >> 8) & 0xFF) :
- 0;
+ phdr->pseudo_header.ieee_802_11.has_data_rate ?
+ (guint8)((phdr->pseudo_header.ieee_802_11.data_rate >> 8) & 0xFF) :
+ 0;
cv_hdr.signal_level_percent =
- (phdr->pseudo_header.ieee_802_11.presence_flags & PHDR_802_11_HAS_SIGNAL_PERCENT) ?
- phdr->pseudo_header.ieee_802_11.signal_percent :
- 0;
+ phdr->pseudo_header.ieee_802_11.has_signal_percent ?
+ phdr->pseudo_header.ieee_802_11.signal_percent :
+ 0;
cv_hdr.signal_level_dbm =
- (phdr->pseudo_header.ieee_802_11.presence_flags & PHDR_802_11_HAS_SIGNAL_DBM) ?
- -phdr->pseudo_header.ieee_802_11.signal_dbm :
- 0;
+ phdr->pseudo_header.ieee_802_11.has_signal_dbm ?
+ -phdr->pseudo_header.ieee_802_11.signal_dbm :
+ 0;
cv_hdr.noise_level =
- (phdr->pseudo_header.ieee_802_11.presence_flags & PHDR_802_11_HAS_NOISE_DBM) ?
- -phdr->pseudo_header.ieee_802_11.noise_dbm :
- 0;
+ phdr->pseudo_header.ieee_802_11.has_noise_dbm ?
+ -phdr->pseudo_header.ieee_802_11.noise_dbm :
+ 0;
break;
case WTAP_ENCAP_TOKEN_RING :
diff --git a/wiretap/netmon.c b/wiretap/netmon.c
index b792c2ddfd..a7e2ea6eab 100644
--- a/wiretap/netmon.c
+++ b/wiretap/netmon.c
@@ -428,11 +428,11 @@ netmon_set_pseudo_header_info(struct wtap_pkthdr *phdr, Buffer *buf)
* do not have an FCS).
* An "FCS length" of -2 means "NetMon weirdness".
*/
+ memset(&phdr->pseudo_header.ieee_802_11, 0, sizeof(phdr->pseudo_header.ieee_802_11));
phdr->pseudo_header.ieee_802_11.fcs_len = -2;
phdr->pseudo_header.ieee_802_11.decrypted = FALSE;
phdr->pseudo_header.ieee_802_11.datapad = FALSE;
phdr->pseudo_header.ieee_802_11.phy = PHDR_802_11_PHY_UNKNOWN;
- phdr->pseudo_header.ieee_802_11.presence_flags = 0; /* radio data is in the packet data */
break;
}
}
diff --git a/wiretap/network_instruments.c b/wiretap/network_instruments.c
index 93e9005728..9f2a45accb 100644
--- a/wiretap/network_instruments.c
+++ b/wiretap/network_instruments.c
@@ -374,11 +374,11 @@ read_packet_header(wtap *wth, FILE_T fh, union wtap_pseudo_header *pseudo_header
pseudo_header->eth.fcs_len = 0;
break;
case WTAP_ENCAP_IEEE_802_11_WITH_RADIO:
+ memset(&pseudo_header->ieee_802_11, 0, sizeof(pseudo_header->ieee_802_11));
pseudo_header->ieee_802_11.fcs_len = 0;
pseudo_header->ieee_802_11.decrypted = FALSE;
pseudo_header->ieee_802_11.datapad = FALSE;
pseudo_header->ieee_802_11.phy = PHDR_802_11_PHY_UNKNOWN;
- pseudo_header->ieee_802_11.presence_flags = 0;
/* Updated below */
break;
}
@@ -404,16 +404,14 @@ read_packet_header(wtap *wth, FILE_T fh, union wtap_pseudo_header *pseudo_header
if (!wtap_read_bytes(fh, &wireless_header, sizeof wireless_header,
err, err_info))
return -1;
- /* update the pseudo header */
- pseudo_header->ieee_802_11.presence_flags |=
- PHDR_802_11_HAS_CHANNEL |
- PHDR_802_11_HAS_DATA_RATE |
- PHDR_802_11_HAS_SIGNAL_PERCENT;
/* set decryption status */
/* XXX - what other bits are there in conditions? */
pseudo_header->ieee_802_11.decrypted = (wireless_header.conditions & WIRELESS_WEP_SUCCESS) != 0;
+ pseudo_header->ieee_802_11.has_channel = TRUE;
pseudo_header->ieee_802_11.channel = wireless_header.frequency;
+ pseudo_header->ieee_802_11.has_data_rate = TRUE;
pseudo_header->ieee_802_11.data_rate = wireless_header.rate;
+ pseudo_header->ieee_802_11.has_signal_percent = TRUE;
pseudo_header->ieee_802_11.signal_percent = wireless_header.strengthPercent;
offset += (int)sizeof wireless_header;
break;
diff --git a/wiretap/netxray.c b/wiretap/netxray.c
index ab23bd62c7..8d09a0e335 100644
--- a/wiretap/netxray.c
+++ b/wiretap/netxray.c
@@ -1230,6 +1230,7 @@ netxray_process_rec_header(wtap *wth, FILE_T fh, struct wtap_pkthdr *phdr,
* Ken also says that xxx[11] is 0x5 when the
* packet is WEP-encrypted.
*/
+ memset(&phdr->pseudo_header.ieee_802_11, 0, sizeof(phdr->pseudo_header.ieee_802_11));
if (hdr.hdr_2_x.xxx[2] == 0xff &&
hdr.hdr_2_x.xxx[3] == 0xff) {
/*
@@ -1259,31 +1260,28 @@ netxray_process_rec_header(wtap *wth, FILE_T fh, struct wtap_pkthdr *phdr,
* type, frequency, 11n/11ac information,
* etc.?
*/
+ phdr->pseudo_header.ieee_802_11.has_channel = TRUE;
phdr->pseudo_header.ieee_802_11.channel =
hdr.hdr_2_x.xxx[12];
+
+ phdr->pseudo_header.ieee_802_11.has_data_rate = TRUE;
phdr->pseudo_header.ieee_802_11.data_rate =
hdr.hdr_2_x.xxx[13];
+
+ phdr->pseudo_header.ieee_802_11.has_signal_percent = TRUE;
phdr->pseudo_header.ieee_802_11.signal_percent =
hdr.hdr_2_x.xxx[14];
+
/*
* According to Ken Mann, at least in the captures
* he's seen, xxx[15] is the noise level, which
* is either 0xFF meaning "none reported" or a value
* from 0x00 to 0x7F for 0 to 100%.
*/
- if (hdr.hdr_2_x.xxx[15] == 0xFF) {
- phdr->pseudo_header.ieee_802_11.presence_flags =
- PHDR_802_11_HAS_CHANNEL |
- PHDR_802_11_HAS_DATA_RATE |
- PHDR_802_11_HAS_SIGNAL_PERCENT;
- } else {
+ if (hdr.hdr_2_x.xxx[15] != 0xFF) {
+ phdr->pseudo_header.ieee_802_11.has_noise_percent = TRUE;
phdr->pseudo_header.ieee_802_11.noise_percent =
hdr.hdr_2_x.xxx[15]*100/127;
- phdr->pseudo_header.ieee_802_11.presence_flags =
- PHDR_802_11_HAS_CHANNEL |
- PHDR_802_11_HAS_DATA_RATE |
- PHDR_802_11_HAS_SIGNAL_PERCENT |
- PHDR_802_11_HAS_NOISE_PERCENT;
}
break;
@@ -1962,21 +1960,21 @@ netxray_dump_2_0(wtap_dumper *wdh,
case WTAP_ENCAP_IEEE_802_11_WITH_RADIO:
rec_hdr.xxx[12] =
- (pseudo_header->ieee_802_11.presence_flags & PHDR_802_11_HAS_CHANNEL) ?
- pseudo_header->ieee_802_11.channel :
- 0;
+ pseudo_header->ieee_802_11.has_channel ?
+ pseudo_header->ieee_802_11.channel :
+ 0;
rec_hdr.xxx[13] =
- (pseudo_header->ieee_802_11.presence_flags & PHDR_802_11_HAS_DATA_RATE) ?
- (guint8)pseudo_header->ieee_802_11.data_rate :
- 0;
+ pseudo_header->ieee_802_11.has_data_rate ?
+ (guint8)pseudo_header->ieee_802_11.data_rate :
+ 0;
rec_hdr.xxx[14] =
- (pseudo_header->ieee_802_11.presence_flags & PHDR_802_11_HAS_SIGNAL_PERCENT) ?
- pseudo_header->ieee_802_11.signal_percent :
- 0;
+ pseudo_header->ieee_802_11.has_signal_percent ?
+ pseudo_header->ieee_802_11.signal_percent :
+ 0;
rec_hdr.xxx[15] =
- (pseudo_header->ieee_802_11.presence_flags & PHDR_802_11_HAS_NOISE_PERCENT) ?
- pseudo_header->ieee_802_11.noise_percent*127/100 :
- 0xFF;
+ pseudo_header->ieee_802_11.has_noise_percent ?
+ pseudo_header->ieee_802_11.noise_percent*127/100 :
+ 0xFF;
break;
case WTAP_ENCAP_PPP_WITH_PHDR:
diff --git a/wiretap/pcap-common.c b/wiretap/pcap-common.c
index f9ecc8db93..2ae777e380 100644
--- a/wiretap/pcap-common.c
+++ b/wiretap/pcap-common.c
@@ -1607,10 +1607,10 @@ pcap_process_pseudo_header(FILE_T fh, int file_type, int wtap_encap,
* XXX - in pcap-ng, there *could* be a packet option
* indicating the FCS length.
*/
+ memset(&phdr->pseudo_header.ieee_802_11, 0, sizeof(phdr->pseudo_header.ieee_802_11));
phdr->pseudo_header.ieee_802_11.fcs_len = -1;
phdr->pseudo_header.ieee_802_11.decrypted = FALSE;
phdr->pseudo_header.ieee_802_11.datapad = FALSE;
- phdr->pseudo_header.ieee_802_11.presence_flags = 0; /* absent or supplied in the packet data */
break;
case WTAP_ENCAP_IRDA:
diff --git a/wiretap/peekclassic.c b/wiretap/peekclassic.c
index bb147f1a7a..79c294c266 100644
--- a/wiretap/peekclassic.c
+++ b/wiretap/peekclassic.c
@@ -448,14 +448,11 @@ static int peekclassic_read_packet_v7(wtap *wth, FILE_T fh,
switch (wth->file_encap) {
case WTAP_ENCAP_IEEE_802_11_WITH_RADIO:
+ memset(&phdr->pseudo_header.ieee_802_11, 0, sizeof(phdr->pseudo_header.ieee_802_11));
phdr->pseudo_header.ieee_802_11.fcs_len = 0; /* no FCS */
phdr->pseudo_header.ieee_802_11.decrypted = FALSE;
phdr->pseudo_header.ieee_802_11.datapad = FALSE;
phdr->pseudo_header.ieee_802_11.phy = PHDR_802_11_PHY_UNKNOWN;
- phdr->pseudo_header.ieee_802_11.presence_flags =
- PHDR_802_11_HAS_DATA_RATE |
- PHDR_802_11_HAS_CHANNEL |
- PHDR_802_11_HAS_SIGNAL_PERCENT;
/*
* Now process the radio information pseudo-header.
@@ -490,8 +487,13 @@ static int peekclassic_read_packet_v7(wtap *wth, FILE_T fh,
if (!wtap_read_bytes(fh, radio_info, RADIO_INFO_SIZE, err, err_info))
return -1;
+ phdr->pseudo_header.ieee_802_11.has_data_rate = TRUE;
phdr->pseudo_header.ieee_802_11.data_rate = radio_info[0];
+
+ phdr->pseudo_header.ieee_802_11.has_channel = TRUE;
phdr->pseudo_header.ieee_802_11.channel = radio_info[1];
+
+ phdr->pseudo_header.ieee_802_11.has_signal_percent = TRUE;
phdr->pseudo_header.ieee_802_11.signal_percent = radio_info[2];
/*
diff --git a/wiretap/peektagged.c b/wiretap/peektagged.c
index 1c1426fcf5..24eaad1406 100644
--- a/wiretap/peektagged.c
+++ b/wiretap/peektagged.c
@@ -441,13 +441,11 @@ peektagged_read_packet(wtap *wth, FILE_T fh, struct wtap_pkthdr *phdr,
timestamp.upper = 0;
timestamp.lower = 0;
- /* Shouldn't be necessary, but squelches a compiler warning. */
memset(&ieee_802_11, 0, sizeof ieee_802_11);
ieee_802_11.fcs_len = -1; /* Unknown */
ieee_802_11.decrypted = FALSE;
ieee_802_11.datapad = FALSE;
ieee_802_11.phy = PHDR_802_11_PHY_UNKNOWN;
- ieee_802_11.presence_flags = 0;
/* Extract the fields from the packet header */
do {
@@ -503,7 +501,7 @@ peektagged_read_packet(wtap *wth, FILE_T fh, struct wtap_pkthdr *phdr,
break;
case TAG_PEEKTAGGED_CHANNEL:
- ieee_802_11.presence_flags |= PHDR_802_11_HAS_CHANNEL;
+ ieee_802_11.has_channel = TRUE;
ieee_802_11.channel = pletoh32(&tag_value[2]);
break;
@@ -513,22 +511,22 @@ peektagged_read_packet(wtap *wth, FILE_T fh, struct wtap_pkthdr *phdr,
break;
case TAG_PEEKTAGGED_SIGNAL_PERC:
- ieee_802_11.presence_flags |= PHDR_802_11_HAS_SIGNAL_PERCENT;
+ ieee_802_11.has_signal_percent = TRUE;
ieee_802_11.signal_percent = pletoh32(&tag_value[2]);
break;
case TAG_PEEKTAGGED_SIGNAL_DBM:
- ieee_802_11.presence_flags |= PHDR_802_11_HAS_SIGNAL_DBM;
+ ieee_802_11.has_signal_dbm = TRUE;
ieee_802_11.signal_dbm = pletoh32(&tag_value[2]);
break;
case TAG_PEEKTAGGED_NOISE_PERC:
- ieee_802_11.presence_flags |= PHDR_802_11_HAS_NOISE_PERCENT;
+ ieee_802_11.has_noise_percent = TRUE;
ieee_802_11.noise_percent = pletoh32(&tag_value[2]);
break;
case TAG_PEEKTAGGED_NOISE_DBM:
- ieee_802_11.presence_flags |= PHDR_802_11_HAS_NOISE_DBM;
+ ieee_802_11.has_noise_dbm = TRUE;
ieee_802_11.noise_dbm = pletoh32(&tag_value[2]);
break;
@@ -541,7 +539,7 @@ peektagged_read_packet(wtap *wth, FILE_T fh, struct wtap_pkthdr *phdr,
case TAG_PEEKTAGGED_CENTER_FREQUENCY:
/* XXX - also seen in an EtherPeek capture; value unknown */
- ieee_802_11.presence_flags |= PHDR_802_11_HAS_FREQUENCY;
+ ieee_802_11.has_frequency = TRUE;
ieee_802_11.frequency = pletoh32(&tag_value[2]);
break;
@@ -613,7 +611,6 @@ peektagged_read_packet(wtap *wth, FILE_T fh, struct wtap_pkthdr *phdr,
ext_flags = pletoh32(&tag_value[2]);
if (ext_flags & EXT_FLAG_802_11ac) {
ieee_802_11.phy = PHDR_802_11_PHY_11AC;
- ieee_802_11.phy_info.info_11ac.presence_flags = 0;
/*
* XXX - this probably has only one user, so only
* one MCS index and only one NSS, but where's the
@@ -625,12 +622,12 @@ peektagged_read_packet(wtap *wth, FILE_T fh, struct wtap_pkthdr *phdr,
switch (ext_flags & EXT_FLAGS_GI) {
case EXT_FLAG_HALF_GI:
- ieee_802_11.phy_info.info_11ac.presence_flags |= PHDR_802_11AC_HAS_SHORT_GI;
+ ieee_802_11.phy_info.info_11ac.has_short_gi = TRUE;
ieee_802_11.phy_info.info_11ac.short_gi = 1;
break;
case EXT_FLAG_FULL_GI:
- ieee_802_11.phy_info.info_11ac.presence_flags |= PHDR_802_11AC_HAS_SHORT_GI;
+ ieee_802_11.phy_info.info_11ac.has_short_gi = TRUE;
ieee_802_11.phy_info.info_11ac.short_gi = 0;
break;
@@ -643,40 +640,39 @@ peektagged_read_packet(wtap *wth, FILE_T fh, struct wtap_pkthdr *phdr,
switch (ext_flags & EXT_FLAGS_BANDWIDTH) {
case 0:
- ieee_802_11.phy_info.info_11n.presence_flags = PHDR_802_11N_HAS_BANDWIDTH;
+ ieee_802_11.phy_info.info_11n.has_bandwidth = TRUE;
ieee_802_11.phy_info.info_11n.bandwidth = PHDR_802_11_BANDWIDTH_20_MHZ;
break;
case EXT_FLAG_20_MHZ_LOWER:
- ieee_802_11.phy_info.info_11n.presence_flags = PHDR_802_11N_HAS_BANDWIDTH;
+ ieee_802_11.phy_info.info_11n.has_bandwidth = TRUE;
ieee_802_11.phy_info.info_11n.bandwidth = PHDR_802_11_BANDWIDTH_20_20L;
break;
case EXT_FLAG_20_MHZ_UPPER:
- ieee_802_11.phy_info.info_11n.presence_flags = PHDR_802_11N_HAS_BANDWIDTH;
+ ieee_802_11.phy_info.info_11n.has_bandwidth = TRUE;
ieee_802_11.phy_info.info_11n.bandwidth = PHDR_802_11_BANDWIDTH_20_20U;
break;
case EXT_FLAG_40_MHZ:
- ieee_802_11.phy_info.info_11n.presence_flags = PHDR_802_11N_HAS_BANDWIDTH;
+ ieee_802_11.phy_info.info_11n.has_bandwidth = TRUE;
ieee_802_11.phy_info.info_11n.bandwidth = PHDR_802_11_BANDWIDTH_40_MHZ;
break;
default:
/* Mutually exclusive flags set */
- ieee_802_11.phy_info.info_11n.presence_flags = 0;
break;
}
switch (ext_flags & EXT_FLAGS_GI) {
case EXT_FLAG_HALF_GI:
- ieee_802_11.phy_info.info_11n.presence_flags |= PHDR_802_11N_HAS_SHORT_GI;
+ ieee_802_11.phy_info.info_11n.has_short_gi = TRUE;
ieee_802_11.phy_info.info_11n.short_gi = 1;
break;
case EXT_FLAG_FULL_GI:
- ieee_802_11.phy_info.info_11n.presence_flags |= PHDR_802_11N_HAS_SHORT_GI;
+ ieee_802_11.phy_info.info_11n.has_short_gi = TRUE;
ieee_802_11.phy_info.info_11n.short_gi = 0;
break;
@@ -753,27 +749,23 @@ peektagged_read_packet(wtap *wth, FILE_T fh, struct wtap_pkthdr *phdr,
* XXX - what about 11ac?
*/
if (!(ext_flags & EXT_FLAG_802_11ac)) {
- ieee_802_11.phy_info.info_11n.presence_flags |= PHDR_802_11N_HAS_MCS_INDEX;
+ ieee_802_11.phy_info.info_11n.has_mcs_index = TRUE;
ieee_802_11.phy_info.info_11n.mcs_index = data_rate_or_mcs_index;
}
} else {
/* It's a data rate. */
- ieee_802_11.presence_flags |= PHDR_802_11_HAS_DATA_RATE;
+ ieee_802_11.has_data_rate = TRUE;
ieee_802_11.data_rate = data_rate_or_mcs_index;
}
}
- switch (ieee_802_11.presence_flags & (PHDR_802_11_HAS_FREQUENCY|PHDR_802_11_HAS_CHANNEL)) {
-
- case PHDR_802_11_HAS_FREQUENCY:
+ if (ieee_802_11.has_frequency && !ieee_802_11.has_channel) {
/* Frequency, but no channel; try to calculate the channel. */
channel = ieee80211_mhz_to_chan(ieee_802_11.frequency);
if (channel != -1) {
- ieee_802_11.presence_flags |= PHDR_802_11_HAS_CHANNEL;
+ ieee_802_11.has_channel = TRUE;
ieee_802_11.channel = channel;
}
- break;
-
- case PHDR_802_11_HAS_CHANNEL:
+ } else if (ieee_802_11.has_channel && !ieee_802_11.has_frequency) {
/*
* If it's 11 legacy DHSS, 11b, or 11g, it's 2.4 GHz,
* so we can calculate the frequency.
@@ -799,10 +791,9 @@ peektagged_read_packet(wtap *wth, FILE_T fh, struct wtap_pkthdr *phdr,
break;
}
if (frequency != 0) {
- ieee_802_11.presence_flags |= PHDR_802_11_HAS_FREQUENCY;
+ ieee_802_11.has_frequency = TRUE;
ieee_802_11.frequency = frequency;
}
- break;
}
phdr->pseudo_header.ieee_802_11 = ieee_802_11;
if (peektagged->has_fcs)
diff --git a/wiretap/snoop.c b/wiretap/snoop.c
index 1fcfada8fe..da88bb4c51 100644
--- a/wiretap/snoop.c
+++ b/wiretap/snoop.c
@@ -738,16 +738,16 @@ snoop_read_shomiti_wireless_pseudoheader(FILE_T fh,
if (file_seek(fh, rsize, SEEK_CUR, err) == -1)
return FALSE;
+ memset(&pseudo_header->ieee_802_11, 0, sizeof(pseudo_header->ieee_802_11));
pseudo_header->ieee_802_11.fcs_len = 4;
pseudo_header->ieee_802_11.decrypted = FALSE;
pseudo_header->ieee_802_11.datapad = FALSE;
pseudo_header->ieee_802_11.phy = PHDR_802_11_PHY_UNKNOWN;
- pseudo_header->ieee_802_11.presence_flags =
- PHDR_802_11_HAS_CHANNEL |
- PHDR_802_11_HAS_DATA_RATE |
- PHDR_802_11_HAS_SIGNAL_PERCENT;
+ pseudo_header->ieee_802_11.has_channel = TRUE;
pseudo_header->ieee_802_11.channel = whdr.channel;
+ pseudo_header->ieee_802_11.has_data_rate = TRUE;
pseudo_header->ieee_802_11.data_rate = whdr.rate;
+ pseudo_header->ieee_802_11.has_signal_percent = TRUE;
pseudo_header->ieee_802_11.signal_percent = whdr.signal;
/* add back the header and don't forget the pad as well */
diff --git a/wiretap/wtap.h b/wiretap/wtap.h
index fb4702a29c..df122fd3ad 100644
--- a/wiretap/wtap.h
+++ b/wiretap/wtap.h
@@ -581,48 +581,38 @@ struct p2p_phdr {
* 802.11 legacy FHSS.
*/
struct ieee_802_11_fhss {
- guint32 presence_flags; /* Which of this information is present? */
+ guint has_hop_set:1;
+ guint has_hop_pattern:1;
+ guint has_hop_index:1;
+
guint8 hop_set; /* Hop set */
guint8 hop_pattern; /* Hop pattern */
guint8 hop_index; /* Hop index */
};
/*
- * Presence flags.
- */
-#define PHDR_802_11_FHSS_HAS_HOP_SET 0x0000001
-#define PHDR_802_11_FHSS_HAS_HOP_PATTERN 0x0000002
-#define PHDR_802_11_FHSS_HAS_HOP_INDEX 0x0000004
-
-/*
* 802.11b.
*/
struct ieee_802_11b {
- guint32 presence_flags; /* Which of this information is present? */
+ /* Which of this information is present? */
+ guint has_short_preamble:1;
+
gboolean short_preamble; /* Short preamble */
};
/*
- * Presence flags.
- */
-#define PHDR_802_11B_HAS_SHORT_PREAMBLE 0x0000001 /* Short preamble */
-
-/*
* 802.11a.
*/
struct ieee_802_11a {
- guint32 presence_flags; /* Which of this information is present? */
+ /* Which of this information is present? */
+ guint has_channel_type:1;
+ guint has_turbo_type:1;
+
guint channel_type:2;
guint turbo_type:2;
};
/*
- * Presence flags.
- */
-#define PHDR_802_11A_HAS_CHANNEL_TYPE 0x0000001 /* Normal, half-clocked, quarter-clocked */
-#define PHDR_802_11A_HAS_TURBO_TYPE 0x0000002 /* Normal, turbo, "static turbo" */
-
-/*
* Channel type values.
*/
#define PHDR_802_11A_CHANNEL_TYPE_NORMAL 0
@@ -646,18 +636,15 @@ struct ieee_802_11a {
* 802.11g.
*/
struct ieee_802_11g {
- guint32 presence_flags; /* Which of this information is present? */
+ /* Which of this information is present? */
+ guint has_short_preamble:1;
+ guint has_mode:1;
+
gboolean short_preamble; /* Short preamble */
guint32 mode; /* Various proprietary extensions */
};
/*
- * Presence flags.
- */
-#define PHDR_802_11G_HAS_SHORT_PREAMBLE 0x0000001 /* Short preamble */
-#define PHDR_802_11G_HAS_MODE 0x0000002 /* Proprietary extensions */
-
-/*
* Mode values.
*/
#define PHDR_802_11G_MODE_NORMAL 0
@@ -667,7 +654,15 @@ struct ieee_802_11g {
* 802.11n.
*/
struct ieee_802_11n {
- guint32 presence_flags; /* Which of this information is present? */
+ /* Which of this information is present? */
+ guint has_mcs_index:1;
+ guint has_bandwidth:1;
+ guint has_short_gi:1;
+ guint has_greenfield:1;
+ guint has_fec:1;
+ guint has_stbc_streams:1;
+ guint has_ness:1;
+
guint16 mcs_index; /* MCS index */
guint bandwidth; /* Bandwidth = 20 MHz, 40 MHz, etc. */
guint short_gi:1; /* True for short guard interval */
@@ -678,17 +673,6 @@ struct ieee_802_11n {
};
/*
- * Presence flags.
- */
-#define PHDR_802_11N_HAS_MCS_INDEX 0x00000001 /* mcs */
-#define PHDR_802_11N_HAS_BANDWIDTH 0x00000002 /* bandwidth */
-#define PHDR_802_11N_HAS_SHORT_GI 0x00000004 /* short_gi */
-#define PHDR_802_11N_HAS_GREENFIELD 0x00000008 /* greenfield */
-#define PHDR_802_11N_HAS_FEC 0x00000010 /* fec */
-#define PHDR_802_11N_HAS_STBC_STREAMS 0x00000020 /* stbc_streams */
-#define PHDR_802_11N_HAS_NESS 0x00000040 /* ness */
-
-/*
* Bandwidth values; used for both 11n and 11ac.
*/
#define PHDR_802_11_BANDWIDTH_20_MHZ 0 /* 20 MHz */
@@ -722,7 +706,18 @@ struct ieee_802_11n {
* 802.11ac.
*/
struct ieee_802_11ac {
- guint32 presence_flags; /* Which of this information is present? */
+ /* Which of this information is present? */
+ guint has_stbc:1;
+ guint has_txop_ps_not_allowed:1;
+ guint has_short_gi:1;
+ guint has_short_gi_nsym_disambig:1;
+ guint has_ldpc_extra_ofdm_symbol:1;
+ guint has_beamformed:1;
+ guint has_bandwidth:1;
+ guint has_fec:1;
+ guint has_group_id:1;
+ guint has_partial_aid:1;
+
guint stbc:1; /* 1 if all spatial streams have STBC */
guint txop_ps_not_allowed:1;
guint short_gi:1; /* True for short guard interval */
@@ -738,20 +733,6 @@ struct ieee_802_11ac {
};
/*
- * 802.11ac presence flags.
- */
-#define PHDR_802_11AC_HAS_STBC 0x00000001 /* stbc */
-#define PHDR_802_11AC_HAS_TXOP_PS_NOT_ALLOWED 0x00000002 /* txop_ps_not_allowed */
-#define PHDR_802_11AC_HAS_SHORT_GI 0x00000004 /* short_gi */
-#define PHDR_802_11AC_HAS_SHORT_GI_NSYM_DISAMBIG 0x00000008 /* short_gi_nsym_disambig */
-#define PHDR_802_11AC_HAS_LDPC_EXTRA_OFDM_SYMBOL 0x00000010 /* ldpc_extra_ofdm_symbol */
-#define PHDR_802_11AC_HAS_BEAMFORMED 0x00000020 /* beamformed */
-#define PHDR_802_11AC_HAS_BANDWIDTH 0x00000040 /* bandwidth */
-#define PHDR_802_11AC_HAS_FEC 0x00000080 /* fec */
-#define PHDR_802_11AC_HAS_GROUP_ID 0x00000100 /* group_id */
-#define PHDR_802_11AC_HAS_PARTIAL_AID 0x00000200 /* partial_aid */
-
-/*
* 802.11ad.
*/
@@ -766,14 +747,11 @@ struct ieee_802_11ac {
((frequency) <= PHDR_802_11AD_MAX_FREQUENCY))
struct ieee_802_11ad {
- guint32 presence_flags; /* Which of this information is present? */
- guint8 mcs; /* MCS index */
-};
+ /* Which of this information is present? */
+ guint has_mcs_index:1;
-/*
- * 802.11ad presence flags.
- */
-#define PHDR_802_11AD_HAS_MCS_INDEX 0x00000001 /* mcs */
+ guint8 mcs; /* MCS index */
+};
struct ieee_802_11_phdr {
gint fcs_len; /* Number of bytes of FCS - -1 means "unknown" */
@@ -789,7 +767,17 @@ struct ieee_802_11_phdr {
struct ieee_802_11ac info_11ac;
struct ieee_802_11ad info_11ad;
} phy_info;
- guint32 presence_flags; /* Flags indicating presence of fields below */
+
+ /* Which of this information is present? */
+ guint has_channel:1;
+ guint has_frequency:1;
+ guint has_data_rate:1;
+ guint has_signal_percent:1;
+ guint has_noise_percent:1;
+ guint has_signal_dbm:1;
+ guint has_noise_dbm:1;
+ guint has_tsf_timestamp:1;
+
guint16 channel; /* Channel number */
guint32 frequency; /* Channel center frequency */
guint16 data_rate; /* Data rate, in .5 Mb/s units */
@@ -800,18 +788,6 @@ struct ieee_802_11_phdr {
guint64 tsf_timestamp;
};
-/*
- * Presence bits for non-PHY-specific data.
- */
-#define PHDR_802_11_HAS_CHANNEL 0x00000001 /* channel */
-#define PHDR_802_11_HAS_FREQUENCY 0x00000002 /* frequency */
-#define PHDR_802_11_HAS_DATA_RATE 0x00000004 /* data_rate */
-#define PHDR_802_11_HAS_SIGNAL_PERCENT 0x00000008 /* signal_percent */
-#define PHDR_802_11_HAS_NOISE_PERCENT 0x00000010 /* noise_percent */
-#define PHDR_802_11_HAS_SIGNAL_DBM 0x00000020 /* signal_dbm */
-#define PHDR_802_11_HAS_NOISE_DBM 0x00000040 /* noise_dbm */
-#define PHDR_802_11_HAS_TSF_TIMESTAMP 0x00000080 /* tsf_timestamp */
-
/* Packet "pseudo-header" for the output from CoSine L2 debug output. */
#define COSINE_MAX_IF_NAME_LEN 128