diff options
author | Simon Barber <simon.barber@meraki.net> | 2015-12-09 14:26:46 -0800 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2015-12-24 07:58:51 +0000 |
commit | ffa9e938e24779470c664ea8eca1e452ce025f97 (patch) | |
tree | 907bfdf175cdfd1ac3694b2ca9de9ca452f33020 /wiretap | |
parent | 1ffd4398504d5bc69c322fd64e826fa7eb22ed3b (diff) |
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.c | 78 | ||||
-rw-r--r-- | wiretap/netmon.c | 2 | ||||
-rw-r--r-- | wiretap/network_instruments.c | 10 | ||||
-rw-r--r-- | wiretap/netxray.c | 44 | ||||
-rw-r--r-- | wiretap/pcap-common.c | 2 | ||||
-rw-r--r-- | wiretap/peekclassic.c | 10 | ||||
-rw-r--r-- | wiretap/peektagged.c | 49 | ||||
-rw-r--r-- | wiretap/snoop.c | 8 | ||||
-rw-r--r-- | wiretap/wtap.h | 126 |
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 |