2 * Routines for calling the right protocol for the ethertype.
4 * Tom Cook <tcook@ixiacom.com>
6 * Wireshark - Network traffic analyzer
7 * By Gerald Combs <gerald@wireshark.org>
10 * SPDX-License-Identifier: GPL-2.0-or-later
17 #include <epan/packet.h>
18 #include <epan/proto_data.h>
20 #include <epan/unit_strings.h>
22 #include <wiretap/wtap.h>
24 void proto_register_ixveriwave(void);
25 void proto_reg_handoff_ixveriwave(void);
27 static void ethernettap_dissect(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, proto_tree
*tap_tree
);
28 static void wlantap_dissect(tvbuff_t
*tvb
, packet_info
*pinfo
,
29 proto_tree
*tree
, proto_tree
*tap_tree
,
30 uint16_t vw_msdu_length
);
31 static void wlantap_dissect_octo(tvbuff_t
*tvb
, packet_info
*pinfo
,
32 proto_tree
*tree
, proto_tree
*tap_tree
,
33 uint8_t cmd_type
, int log_mode
);
36 uint32_t previous_frame_num
;
37 uint64_t previous_end_time
;
40 typedef struct ifg_info
{
42 uint64_t previous_end_time
;
43 uint64_t current_start_time
;
46 static frame_end_data previous_frame_data
;
48 /* static int ieee80211_mhz2ieee(int freq, int flags); */
50 #define COMMON_LENGTH_OFFSET 2
51 #define ETHERNETTAP_VWF_TXF 0x01 /* frame was transmitted flag */
52 #define ETHERNETTAP_VWF_FCSERR 0x02 /* frame has FCS error */
54 #define VW_RADIOTAPF_TXF 0x01 /* frame was transmitted */
55 #define VW_RADIOTAPF_FCSERR 0x02 /* FCS error detected */
56 #define VW_RADIOTAPF_RETRERR 0x04 /* excess retry error detected */
57 #define VW_RADIOTAPF_DCRERR 0x10 /* decrypt error detected */
58 #define VW_RADIOTAPF_ENCMSK 0x60 /* encryption type mask */
59 /* 0 = none, 1 = WEP, 2 = TKIP, 3 = CCKM */
60 #define VW_RADIOTAPF_ENCSHIFT 5 /* shift amount to right-align above field */
61 #define VW_RADIOTAPF_IS_WEP 0x20 /* encryption type value = WEP */
62 #define VW_RADIOTAPF_IS_TKIP 0x40 /* encryption type value = TKIP */
63 #define VW_RADIOTAPF_IS_CCMP 0x60 /* encryption type value = CCMP */
64 #define VW_RADIOTAPF_SEQ_ERR 0x80 /* flow sequence error detected */
66 #define VW_RADIOTAP_FPGA_VER_vVW510021 0x000C /* vVW510021 version detected */
67 #define VW_RADIOTAP_FPGA_VER_vVW510021_11n 0x000D
69 #define CHAN_CCK 0x00020 /* CCK channel */
70 #define CHAN_OFDM 0x00040 /* OFDM channel */
72 #define FLAGS_SHORTPRE 0x0002 /* sent/received
76 #define FLAGS_WEP 0x0004 /* sent/received
79 #define FLAGS_CHAN_HT 0x0040 /* HT mode */
80 #define FLAGS_CHAN_VHT 0x0080 /* VHT mode */
81 #define FLAGS_CHAN_SHORTGI 0x0100 /* short guard interval */
82 #define FLAGS_CHAN_40MHZ 0x0200 /* 40 Mhz channel bandwidth */
83 #define FLAGS_CHAN_80MHZ 0x0400 /* 80 Mhz channel bandwidth */
84 #define FLAGS_CHAN_160MHZ 0x0800 /* 160 Mhz channel bandwidth */
86 #define INFO_MPDU_OF_A_MPDU 0x0400 /* MPDU of A-MPDU */
87 #define INFO_FIRST_MPDU_OF_A_MPDU 0x0800 /* first MPDU of A-MPDU */
88 #define INFO_LAST_MPDU_OF_A_MPDU 0x1000 /* last MPDU of A-MPDU */
89 #define INFO_MSDU_OF_A_MSDU 0x2000 /* MSDU of A-MSDU */
90 #define INFO_FIRST_MSDU_OF_A_MSDU 0x4000 /* first MSDU of A-MSDU */
91 #define INFO_LAST_MSDU_OF_A_MSDU 0x8000 /* last MSDU of A-MSDU */
93 #define PLCP_TYPE_LEGACY 0x00 /* pre-HT (11 legacy/11b/11a/11g) */
94 #define PLCP_TYPE_MIXED 0x01 /* HT, mixed (11n) */
95 #define PLCP_TYPE_GREENFIELD 0x02 /* HT, greenfield (11n) */
96 #define PLCP_TYPE_VHT_MIXED 0x03 /* VHT (11ac) */
98 #define ETHERNET_PORT 1
100 #define OCTO_TIMESTAMP_FIELDS_LEN 32 /* (4+4+8+8+4+4) */
101 #define OCTO_MODIFIED_RF_LEN 76 /* Number of RF bytes to be displayed*/
102 #define VW_INFO_OFF 48
103 #define IFG_MAX_VAL 0xEE6B2800
106 * VHT bandwidth values.
108 #define VHT_BW_20_MHZ 0
109 #define VHT_BW_40_MHZ 1
110 #define VHT_BW_80_MHZ 2
111 #define VHT_BW_160_MHZ 3
113 static int proto_ixveriwave
;
114 static dissector_handle_t ethernet_handle
;
116 /* static int hf_ixveriwave_version; */
117 static int hf_ixveriwave_frame_length
;
119 /* static int hf_ixveriwave_fcs; */
121 static int hf_ixveriwave_vw_msdu_length
;
122 static int hf_ixveriwave_vw_flowid
;
123 static int hf_ixveriwave_vw_vcid
;
124 static int hf_ixveriwave_vw_seqnum
;
126 static int hf_ixveriwave_vw_mslatency
;
127 static int hf_ixveriwave_vw_latency
;
128 static int hf_ixveriwave_vw_sig_ts
;
129 static int hf_ixveriwave_vw_delay
;
130 static int hf_ixveriwave_vw_startt
;
131 static int hf_ixveriwave_vw_endt
;
132 static int hf_ixveriwave_vw_pktdur
;
133 static int hf_ixveriwave_vw_ifg
;
136 static int hf_radiotap_rf_info
;
137 static int hf_radiotap_rfinfo_rfid
;
140 static int hf_radiotap_rfinfo_noise;
141 static int hf_radiotap_rfinfo_noise_anta;
142 static int hf_radiotap_rfinfo_noise_antb;
143 static int hf_radiotap_rfinfo_noise_antc;
144 static int hf_radiotap_rfinfo_noise_antd;
147 static int hf_radiotap_rfinfo_snr
;
148 static int hf_radiotap_rfinfo_snr_anta
;
149 static int hf_radiotap_rfinfo_snr_antb
;
150 static int hf_radiotap_rfinfo_snr_antc
;
151 static int hf_radiotap_rfinfo_snr_antd
;
153 static int hf_radiotap_rfinfo_pfe
;
154 static int hf_radiotap_rfinfo_pfe_anta
;
155 static int hf_radiotap_rfinfo_pfe_antb
;
156 static int hf_radiotap_rfinfo_pfe_antc
;
157 static int hf_radiotap_rfinfo_pfe_antd
;
159 static int hf_radiotap_rfinfo_sigdata
;
160 static int hf_radiotap_rfinfo_avg_evm_sd_siga
;
161 static int hf_radiotap_rfinfo_avg_evm_sd_sigb
;
162 static int hf_radiotap_rfinfo_avg_evm_sd_sigc
;
163 static int hf_radiotap_rfinfo_avg_evm_sd_sigd
;
165 static int hf_radiotap_rfinfo_sigpilot
;
166 static int hf_radiotap_rfinfo_avg_evm_sp_siga
;
167 static int hf_radiotap_rfinfo_avg_evm_sp_sigb
;
168 static int hf_radiotap_rfinfo_avg_evm_sp_sigc
;
169 static int hf_radiotap_rfinfo_avg_evm_sp_sigd
;
171 static int hf_radiotap_rfinfo_datadata
;
172 static int hf_radiotap_rfinfo_avg_evm_dd_siga
;
173 static int hf_radiotap_rfinfo_avg_evm_dd_sigb
;
174 static int hf_radiotap_rfinfo_avg_evm_dd_sigc
;
175 static int hf_radiotap_rfinfo_avg_evm_dd_sigd
;
177 static int hf_radiotap_rfinfo_datapilot
;
178 static int hf_radiotap_rfinfo_avg_evm_dp_siga
;
179 static int hf_radiotap_rfinfo_avg_evm_dp_sigb
;
180 static int hf_radiotap_rfinfo_avg_evm_dp_sigc
;
181 static int hf_radiotap_rfinfo_avg_evm_dp_sigd
;
183 static int hf_radiotap_rfinfo_avg_ws_symbol
;
184 static int hf_radiotap_rfinfo_avg_evm_ws_siga
;
185 static int hf_radiotap_rfinfo_avg_evm_ws_sigb
;
186 static int hf_radiotap_rfinfo_avg_evm_ws_sigc
;
187 static int hf_radiotap_rfinfo_avg_evm_ws_sigd
;
189 static int hf_radiotap_rfinfo_contextpa
;
190 static int hf_radiotap_rfinfo_contextpA_snr_noise_valid
;
191 static int hf_radiotap_rfinfo_contextpA_pfe_valid
;
192 static int hf_radiotap_rfinfo_contextpA_pfe_is_cck
;
193 static int hf_radiotap_rfinfo_contextpA_agc_idle2iqrdy_no_gain_change
;
194 static int hf_radiotap_rfinfo_contextpA_agc_high_pwr_terminated
;
195 static int hf_radiotap_rfinfo_contextpA_agc_high_pwr_terminator
;
196 /* static int hf_radiotap_rfinfo_contextpA_frame_format; */
197 /* static int hf_radiotap_rfinfo_contextpA_ofdm_or_cck; */
198 /* static int hf_radiotap_rfinfo_contextpA_sigbandwidth_of_evm; */
199 static int hf_radiotap_rfinfo_contextpA_qam_modulation
;
201 static int hf_radiotap_rfinfo_frameformatA
;
202 static int hf_radiotap_rfinfo_sigbwevmA
;
203 static int hf_radiotap_rfinfo_legacytypeA
;
205 static int hf_radiotap_rfinfo_contextpb
;
206 static int hf_radiotap_rfinfo_contextpB_snr_noise_valid
;
207 static int hf_radiotap_rfinfo_contextpB_pfe_valid
;
208 static int hf_radiotap_rfinfo_contextpB_pfe_is_cck
;
209 static int hf_radiotap_rfinfo_contextpB_agc_idle2iqrdy_no_gain_change
;
210 static int hf_radiotap_rfinfo_contextpB_agc_high_pwr_terminated
;
211 static int hf_radiotap_rfinfo_contextpB_agc_high_pwr_terminator
;
212 static int hf_radiotap_rfinfo_contextpB_qam_modulation
;
214 static int hf_radiotap_rfinfo_frameformatB
;
215 static int hf_radiotap_rfinfo_sigbwevmB
;
216 static int hf_radiotap_rfinfo_legacytypeB
;
218 static int hf_radiotap_rfinfo_contextpc
;
219 static int hf_radiotap_rfinfo_contextpC_snr_noise_valid
;
220 static int hf_radiotap_rfinfo_contextpC_pfe_valid
;
221 static int hf_radiotap_rfinfo_contextpC_pfe_is_cck
;
222 static int hf_radiotap_rfinfo_contextpC_agc_idle2iqrdy_no_gain_change
;
223 static int hf_radiotap_rfinfo_contextpC_agc_high_pwr_terminated
;
224 static int hf_radiotap_rfinfo_contextpC_agc_high_pwr_terminator
;
225 static int hf_radiotap_rfinfo_contextpC_qam_modulation
;
227 static int hf_radiotap_rfinfo_frameformatC
;
228 static int hf_radiotap_rfinfo_sigbwevmC
;
229 static int hf_radiotap_rfinfo_legacytypeC
;
231 static int hf_radiotap_rfinfo_contextpd
;
232 static int hf_radiotap_rfinfo_contextpD_snr_noise_valid
;
233 static int hf_radiotap_rfinfo_contextpD_pfe_valid
;
234 static int hf_radiotap_rfinfo_contextpD_pfe_is_cck
;
235 static int hf_radiotap_rfinfo_contextpD_agc_idle2iqrdy_no_gain_change
;
236 static int hf_radiotap_rfinfo_contextpD_agc_high_pwr_terminated
;
237 static int hf_radiotap_rfinfo_contextpD_agc_high_pwr_terminator
;
238 static int hf_radiotap_rfinfo_contextpD_qam_modulation
;
240 static int hf_radiotap_rfinfo_frameformatD
;
241 static int hf_radiotap_rfinfo_sigbwevmD
;
242 static int hf_radiotap_rfinfo_legacytypeD
;
244 /* static int hf_radiotap_rfinfo_tbd; */
246 /* Fields for both Ethernet and WLAN */
247 static int hf_ixveriwave_vw_l4id
;
249 /* Ethernet fields */
250 static int hf_ixveriwave_vwf_txf
;
251 static int hf_ixveriwave_vwf_fcserr
;
253 static int hf_ixveriwave_vw_info
;
254 static int hf_ixveriwave_vw_info_go_no_flow
;
255 static int hf_ixveriwave_vw_info_go_with_flow
;
257 /*veriwave note: i know the below method seems clunky, but
258 they didn't have a item_format at the time to dynamically add the appropriate decode text*/
259 static int hf_ixveriwave_vw_info_retry_count
;
261 static int hf_ixveriwave_vw_error
;
264 static int hf_ixveriwave_vw_error_1_alignment_error
;
265 static int hf_ixveriwave_vw_error_1_packet_fcs_error
;
266 static int hf_ixveriwave_vw_error_1_bad_magic_byte_signature
;
267 static int hf_ixveriwave_vw_error_1_bad_payload_checksum
;
268 static int hf_ixveriwave_vw_error_1_frame_too_long
;
269 static int hf_ixveriwave_vw_error_1_ip_checksum_error
;
270 static int hf_ixveriwave_vw_error_1_l4_checksum_error
;
271 static int hf_ixveriwave_vw_error_1_id_mismatch
;
272 static int hf_ixveriwave_vw_error_1_length_error
;
273 static int hf_ixveriwave_vw_error_1_underflow
;
274 static int hf_ixveriwave_vw_error_1_late_collision
;
275 static int hf_ixveriwave_vw_error_1_excessive_collisions
;
278 static int hf_radiotap_flags
;
279 static int hf_radiotap_flags_preamble
;
280 static int hf_radiotap_flags_wep
;
281 static int hf_radiotap_flags_ht
;
282 static int hf_radiotap_flags_vht
;
283 static int hf_radiotap_flags_short_gi
;
284 static int hf_radiotap_flags_40mhz
;
285 static int hf_radiotap_flags_80mhz
;
287 static int hf_radiotap_datarate
;
288 static int hf_radiotap_mcsindex
;
289 static int hf_radiotap_nss
;
291 static int hf_radiotap_dbm_anta
;
292 static int hf_radiotap_dbm_antb
;
293 static int hf_radiotap_dbm_antc
;
294 static int hf_radiotap_dbm_antd
;
296 static int hf_radiotap_plcptype
;
298 static int hf_radiotap_vwf_txf
;
299 static int hf_radiotap_vwf_fcserr
;
300 static int hf_radiotap_vwf_dcrerr
;
301 static int hf_radiotap_vwf_retrerr
;
302 static int hf_radiotap_vwf_enctype
;
304 static int hf_radiotap_vw_ht_length
;
306 static int hf_radiotap_vw_info
;
308 static int hf_radiotap_vw_info_2_ack_withheld_from_frame
;
309 static int hf_radiotap_vw_info_2_sent_cts_to_self_before_data
;
310 static int hf_radiotap_vw_info_2_mpdu_of_a_mpdu
;
311 static int hf_radiotap_vw_info_2_first_mpdu_of_a_mpdu
;
312 static int hf_radiotap_vw_info_2_last_pdu_of_a_mpdu
;
313 static int hf_radiotap_vw_info_2_msdu_of_a_msdu
;
314 static int hf_radiotap_vw_info_2_first_msdu_of_a_msdu
;
315 static int hf_radiotap_vw_info_2_last_msdu_of_a_msdu
;
317 static int hf_radiotap_vw_errors
;
319 static int hf_radiotap_vw_errors_rx_2_crc16_or_parity_error
;
320 static int hf_radiotap_vw_errors_rx_2_non_supported_rate_or_service_field
;
321 static int hf_radiotap_vw_errors_rx_2_short_frame
;
322 static int hf_radiotap_vw_errors_rx_2_fcs_error
;
323 static int hf_radiotap_vw_errors_rx_2_l2_de_aggregation_error
;
324 static int hf_radiotap_vw_errors_rx_2_duplicate_mpdu
;
325 static int hf_radiotap_vw_errors_rx_2_bad_flow_magic_number
;
326 static int hf_radiotap_vw_errors_rx_2_flow_payload_checksum_error
;
327 static int hf_radiotap_vw_errors_rx_2_ip_checksum_error
;
328 static int hf_radiotap_vw_errors_rx_2_l4_checksum_error
;
330 static int hf_radiotap_vw_errors_tx_2_crc32_error
;
331 static int hf_radiotap_vw_errors_tx_2_ip_checksum_error
;
332 static int hf_radiotap_vw_errors_tx_2_ack_timeout
;
333 static int hf_radiotap_vw_errors_tx_2_cts_timeout
;
334 static int hf_radiotap_vw_errors_tx_2_last_retry_attempt
;
335 static int hf_radiotap_vw_errors_tx_2_internal_error
;
337 static int hf_radiotap_vht_mu_mimo_flg
;
338 static int hf_radiotap_vht_user_pos
;
339 static int hf_radiotap_vht_su_mimo_flg
;
341 static int hf_radiotap_l1info
;
342 static int hf_radiotap_l1info_preamble
;
343 static int hf_radiotap_l1info_rateindex
;
344 static int hf_radiotap_l1info_ht_mcsindex
;
345 static int hf_radiotap_l1info_vht_mcsindex
;
346 static int hf_radiotap_l1info_nss
;
347 static int hf_radiotap_l1info_transmitted
;
349 static int hf_radiotap_sigbandwidth
;
350 /* static int hf_radiotap_rssi; */
351 static int hf_radiotap_modulation
;
353 static int hf_radiotap_dbm_tx_anta
;
354 static int hf_radiotap_dbm_tx_antb
;
355 static int hf_radiotap_dbm_tx_antc
;
356 static int hf_radiotap_dbm_tx_antd
;
358 static int hf_radiotap_sigbandwidthmask
;
359 static int hf_radiotap_antennaportenergydetect
;
360 static int hf_radiotap_tx_antennaselect
;
361 static int hf_radiotap_tx_stbcselect
;
362 static int hf_radiotap_mumask
;
364 static int hf_radiotap_l1infoc
;
365 static int hf_radiotap_vht_ndp_flg
;
367 static int hf_radiotap_plcp_info
;
368 static int hf_radiotap_plcp_type
;
369 static int hf_radiotap_plcp_default
;
371 static int hf_radiotap_plcp_signal
;
372 static int hf_radiotap_plcp_locked_clocks
;
373 static int hf_radiotap_plcp_modulation
;
374 static int hf_radiotap_plcp_length_extension
;
375 static int hf_radiotap_plcp_length
;
376 static int hf_radiotap_plcp_crc16
;
378 static int hf_radiotap_ofdm_service
;
380 static int hf_radiotap_ofdm_rate
;
381 static int hf_radiotap_ofdm_length
;
382 static int hf_radiotap_ofdm_parity
;
383 static int hf_radiotap_ofdm_tail
;
386 static int hf_radiotap_ht_mcsindex
;
387 static int hf_radiotap_ht_bw
;
388 static int hf_radiotap_ht_length
;
391 static int hf_radiotap_ht_smoothing
;
392 static int hf_radiotap_ht_notsounding
;
393 static int hf_radiotap_ht_aggregation
;
394 static int hf_radiotap_ht_stbc
;
395 static int hf_radiotap_ht_feccoding
;
396 static int hf_radiotap_ht_short_gi
;
397 static int hf_radiotap_ht_ness
;
398 static int hf_radiotap_ht_crc
;
399 static int hf_radiotap_ht_tail
;
402 static int hf_radiotap_vht_bw
;
403 static int hf_radiotap_vht_stbc
;
404 static int hf_radiotap_vht_group_id
;
405 static int hf_radiotap_vht_su_nsts
;
406 static int hf_radiotap_vht_su_partial_aid
;
407 static int hf_radiotap_vht_u0_nsts
;
408 static int hf_radiotap_vht_u1_nsts
;
409 static int hf_radiotap_vht_u2_nsts
;
410 static int hf_radiotap_vht_u3_nsts
;
411 static int hf_radiotap_vht_txop_ps_not_allowed
;
414 static int hf_radiotap_vht_short_gi
;
415 static int hf_radiotap_vht_short_gi_nsym_disambig
;
416 static int hf_radiotap_vht_su_coding_type
;
417 static int hf_radiotap_vht_u0_coding_type
;
418 static int hf_radiotap_vht_ldpc_ofdmsymbol
;
419 static int hf_radiotap_vht_su_mcs
;
420 static int hf_radiotap_vht_beamformed
;
421 static int hf_radiotap_vht_u1_coding_type
;
422 static int hf_radiotap_vht_u2_coding_type
;
423 static int hf_radiotap_vht_u3_coding_type
;
424 static int hf_radiotap_vht_crc
;
425 static int hf_radiotap_vht_tail
;
428 static int hf_radiotap_vht_su_sig_b_length_20_mhz
;
429 static int hf_radiotap_vht_su_sig_b_length_40_mhz
;
430 static int hf_radiotap_vht_su_sig_b_length_80_160_mhz
;
431 static int hf_radiotap_vht_mu_sig_b_length_20_mhz
;
432 static int hf_radiotap_vht_mu_mcs_20_mhz
;
433 static int hf_radiotap_vht_mu_sig_b_length_40_mhz
;
434 static int hf_radiotap_vht_mu_mcs_40_mhz
;
435 static int hf_radiotap_vht_mu_sig_b_length_80_160_mhz
;
436 static int hf_radiotap_vht_mu_mcs_80_160_mhz
;
438 static int hf_radiotap_rfid
;
440 static int hf_radiotap_l2_l4_info
;
442 static int hf_radiotap_bssid
;
444 static int hf_radiotap_clientidvalid
;
445 static int hf_radiotap_bssidvalid
;
446 static int hf_radiotap_unicastormulticast
;
448 /*static int hf_radiotap_wlantype; */
450 static int hf_radiotap_tid
;
451 static int hf_radiotap_ac
;
452 static int hf_radiotap_l4idvalid
;
453 static int hf_radiotap_containshtfield
;
454 static int hf_radiotap_istypeqos
;
455 static int hf_radiotap_flowvalid
;
457 static int hf_radiotap_payloaddecode
;
459 static int hf_radiotap_vw_info_rx
;
460 static int hf_radiotap_vw_info_rx_crypto_wep_encoded
;
461 static int hf_radiotap_vw_info_rx_crypto_tkip_encoded
;
462 static int hf_radiotap_vw_info_rx_crypto_rx_tkip_tsc_seqskip
;
463 static int hf_radiotap_vw_info_rx_crypto_rx_ccmp_pn_seqskip
;
464 static int hf_radiotap_vw_info_rx_tkip_not_full_msdu
;
465 static int hf_radiotap_vw_info_rx_mpdu_length_gt_mpdu_octets
;
466 static int hf_radiotap_vw_info_rx_tkip_ccmp_tsc_seqerr
;
467 static int hf_radiotap_vw_info_rx_ack_withheld_from_frame
;
468 static int hf_radiotap_vw_info_rx_client_bssid_matched
;
469 static int hf_radiotap_vw_info_rx_mpdu_of_a_mpdu
;
470 static int hf_radiotap_vw_info_rx_first_mpdu_of_a_mpdu
;
471 static int hf_radiotap_vw_info_rx_last_mpdu_of_a_mpdu
;
472 static int hf_radiotap_vw_info_rx_msdu_of_a_msdu
;
473 static int hf_radiotap_vw_info_rx_first_msdu_of_a_msdu
;
474 static int hf_radiotap_vw_info_rx_last_msdu_of_a_msdu
;
475 static int hf_radiotap_vw_info_rx_layer_1_info_0
;
476 static int hf_radiotap_vw_info_rx_layer_1_info_1
;
477 static int hf_radiotap_vw_info_rx_vht_frame_received_with_vht_sig_b_length
;
478 static int hf_radiotap_vw_info_rx_vht_frame_received_without_vht_sig_b_length
;
479 static int hf_radiotap_vw_info_rx_factory_internal
;
480 static int * const radiotap_info_rx_fields
[] = {
481 &hf_radiotap_vw_info_rx_crypto_wep_encoded
,
482 &hf_radiotap_vw_info_rx_crypto_tkip_encoded
,
483 &hf_radiotap_vw_info_rx_crypto_rx_tkip_tsc_seqskip
,
484 &hf_radiotap_vw_info_rx_crypto_rx_ccmp_pn_seqskip
,
485 &hf_radiotap_vw_info_rx_tkip_not_full_msdu
,
486 &hf_radiotap_vw_info_rx_mpdu_length_gt_mpdu_octets
,
487 &hf_radiotap_vw_info_rx_tkip_ccmp_tsc_seqerr
,
488 &hf_radiotap_vw_info_rx_ack_withheld_from_frame
,
489 &hf_radiotap_vw_info_rx_client_bssid_matched
,
490 &hf_radiotap_vw_info_rx_mpdu_of_a_mpdu
,
491 &hf_radiotap_vw_info_rx_first_mpdu_of_a_mpdu
,
492 &hf_radiotap_vw_info_rx_last_mpdu_of_a_mpdu
,
493 &hf_radiotap_vw_info_rx_msdu_of_a_msdu
,
494 &hf_radiotap_vw_info_rx_first_msdu_of_a_msdu
,
495 &hf_radiotap_vw_info_rx_last_msdu_of_a_msdu
,
496 &hf_radiotap_vw_info_rx_layer_1_info_0
,
497 &hf_radiotap_vw_info_rx_layer_1_info_1
,
498 &hf_radiotap_vw_info_rx_vht_frame_received_with_vht_sig_b_length
,
499 &hf_radiotap_vw_info_rx_vht_frame_received_without_vht_sig_b_length
,
500 &hf_radiotap_vw_info_rx_factory_internal
,
504 static int hf_radiotap_vw_info_tx
;
505 static int hf_radiotap_vw_info_tx_crypto_wep_encoded
;
506 static int hf_radiotap_vw_info_tx_crypto_tkip_encoded
;
507 static int hf_radiotap_vw_info_tx_crypto_c_bit_error
;
508 static int hf_radiotap_vw_info_tx_crypto_tkip_not_full_msdu
;
509 static int hf_radiotap_vw_info_tx_crypto_software_error
;
510 static int hf_radiotap_vw_info_tx_crypto_short_fault
;
511 static int hf_radiotap_vw_info_tx_crypto_payload_length_fault
;
512 static int hf_radiotap_vw_info_tx_sent_rts_before_data
;
513 static int hf_radiotap_vw_info_tx_sent_cts_to_self_before_data
;
514 static int hf_radiotap_vw_info_tx_mpdu_of_a_mpdu
;
515 static int hf_radiotap_vw_info_tx_first_mpdu_of_a_mpdu
;
516 static int hf_radiotap_vw_info_tx_last_mpdu_of_a_mpdu
;
517 static int hf_radiotap_vw_info_tx_msdu_of_a_msdu
;
518 static int hf_radiotap_vw_info_tx_first_msdu_of_a_msdu
;
519 static int hf_radiotap_vw_info_tx_last_msdu_of_a_msdu
;
520 static int * const radiotap_info_tx_fields
[] = {
521 &hf_radiotap_vw_info_tx_crypto_wep_encoded
,
522 &hf_radiotap_vw_info_tx_crypto_tkip_encoded
,
523 &hf_radiotap_vw_info_tx_crypto_c_bit_error
,
524 &hf_radiotap_vw_info_tx_crypto_tkip_not_full_msdu
,
525 &hf_radiotap_vw_info_tx_crypto_software_error
,
526 &hf_radiotap_vw_info_tx_crypto_short_fault
,
527 &hf_radiotap_vw_info_tx_crypto_payload_length_fault
,
528 &hf_radiotap_vw_info_tx_sent_rts_before_data
,
529 &hf_radiotap_vw_info_tx_sent_cts_to_self_before_data
,
530 &hf_radiotap_vw_info_tx_mpdu_of_a_mpdu
,
531 &hf_radiotap_vw_info_tx_first_mpdu_of_a_mpdu
,
532 &hf_radiotap_vw_info_tx_last_mpdu_of_a_mpdu
,
533 &hf_radiotap_vw_info_tx_msdu_of_a_msdu
,
534 &hf_radiotap_vw_info_tx_first_msdu_of_a_msdu
,
535 &hf_radiotap_vw_info_tx_last_msdu_of_a_msdu
,
539 static int hf_radiotap_vw_errors_rx_sig_field_crc_parity_error
;
540 static int hf_radiotap_vw_errors_rx_non_supported_service_field
;
541 static int hf_radiotap_vw_errors_rx_frame_length_error
;
542 static int hf_radiotap_vw_errors_rx_vht_sig_ab_crc_error
;
543 static int hf_radiotap_vw_errors_rx_crc32_error
;
544 static int hf_radiotap_vw_errors_rx_l2_de_aggregation_error
;
545 static int hf_radiotap_vw_errors_rx_duplicate_mpdu
;
546 static int hf_radiotap_vw_errors_rx_bad_flow_magic_number
;
547 static int hf_radiotap_vw_errors_rx_bad_flow_payload_checksum
;
548 static int hf_radiotap_vw_errors_rx_illegal_vht_sig_value
;
549 static int hf_radiotap_vw_errors_rx_ip_checksum_error
;
550 static int hf_radiotap_vw_errors_rx_l4_checksum_error
;
551 static int hf_radiotap_vw_errors_rx_l1_unsupported_feature
;
552 static int hf_radiotap_vw_errors_rx_l1_packet_termination
;
553 static int hf_radiotap_vw_errors_rx_internal_error_bit15
;
554 static int hf_radiotap_vw_errors_rx_wep_mic_miscompare
;
555 static int hf_radiotap_vw_errors_rx_wep_tkip_rate_exceeded
;
556 static int hf_radiotap_vw_errors_rx_crypto_short_error
;
557 static int hf_radiotap_vw_errors_rx_extiv_fault_a
;
558 static int hf_radiotap_vw_errors_rx_extiv_fault_b
;
559 static int hf_radiotap_vw_errors_rx_internal_error_bit21
;
560 static int hf_radiotap_vw_errors_rx_protected_fault_a
;
561 static int hf_radiotap_vw_errors_rx_rx_mac_crypto_incompatibility
;
562 static int hf_radiotap_vw_errors_rx_factory_debug
;
563 static int hf_radiotap_vw_errors_rx_internal_error_bit32
;
565 static int hf_radiotap_vw_errors_tx_packet_fcs_error
;
566 static int hf_radiotap_vw_errors_tx_ip_checksum_error
;
568 static int hf_radiotap_vw_tx_retrycount
;
569 static int hf_radiotap_vw_tx_factorydebug
;
571 static int ett_radiotap_info
;
572 static int ett_radiotap_errors
;
573 static int ett_radiotap_times
;
574 static int ett_radiotap_layer1
;
575 static int ett_radiotap_layer2to4
;
576 static int ett_radiotap_rf
;
577 static int ett_radiotap_plcp
;
578 static int ett_radiotap_infoc
;
579 static int ett_radiotap_contextp
;
580 static int ett_rf_info
;
582 static int ett_commontap
;
583 static int ett_commontap_times
;
584 static int ett_ethernettap_info
;
585 static int ett_ethernettap_error
;
586 static int ett_ethernettap_flags
;
588 static int ett_radiotap_flags
;
590 static dissector_handle_t ieee80211_radio_handle
;
592 static dissector_handle_t ixveriwave_handle
;
594 #define ALIGN_OFFSET(offset, width) \
595 ( (((offset) + ((width) - 1)) & (~((width) - 1))) - offset )
598 dissect_ixveriwave(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
600 bool is_octo
= false;
602 proto_tree
*common_tree
= NULL
;
603 proto_item
*ti
= NULL
;
604 proto_item
*vw_times_ti
= NULL
;
605 proto_tree
*vw_times_tree
= NULL
;
606 proto_item
*rf_infot
= NULL
;
607 proto_tree
*rf_info_tree
= NULL
;
610 unsigned length_remaining
;
611 uint64_t vw_startt
=0, vw_endt
=0;
612 uint32_t true_length
;
613 uint32_t vw_latency
, vw_pktdur
;
614 uint32_t vw_msdu_length
=0;
616 ifg_info
*p_ifg_info
;
617 uint8_t ixport_type
,cmd_type
, mgmt_byte
= 0;
618 uint8_t frameformat
, legacy_type
;
620 int8_t noisevalida
, noisevalidb
, noisevalidc
, noisevalidd
, pfevalida
, pfevalidb
, pfevalidc
, pfevalidd
;
621 uint16_t vw_info_ifg
;
623 proto_tree
*vwrft
, *vw_rfinfo_tree
= NULL
, *rfinfo_contextp_tree
;
625 static int * const context_a_flags
[] = {
626 &hf_radiotap_rfinfo_contextpA_snr_noise_valid
,
627 &hf_radiotap_rfinfo_contextpA_pfe_valid
,
628 &hf_radiotap_rfinfo_contextpA_pfe_is_cck
,
629 &hf_radiotap_rfinfo_contextpA_agc_idle2iqrdy_no_gain_change
,
630 &hf_radiotap_rfinfo_contextpA_agc_high_pwr_terminated
,
631 &hf_radiotap_rfinfo_contextpA_agc_high_pwr_terminator
,
633 &hf_radiotap_rfinfo_contextpA_frame_format,
634 &hf_radiotap_rfinfo_contextpA_ofdm_or_cck,
635 &hf_radiotap_rfinfo_contextpA_sigbandwidth_of_evm,
637 &hf_radiotap_rfinfo_contextpA_qam_modulation
,
640 static int * const context_b_flags
[] = {
641 &hf_radiotap_rfinfo_contextpB_snr_noise_valid
,
642 &hf_radiotap_rfinfo_contextpB_pfe_valid
,
643 &hf_radiotap_rfinfo_contextpB_pfe_is_cck
,
644 &hf_radiotap_rfinfo_contextpB_agc_idle2iqrdy_no_gain_change
,
645 &hf_radiotap_rfinfo_contextpB_agc_high_pwr_terminated
,
646 &hf_radiotap_rfinfo_contextpB_agc_high_pwr_terminator
,
648 &hf_radiotap_rfinfo_contextpB_bit8,
649 &hf_radiotap_rfinfo_contextpB_bit10,
650 &hf_radiotap_rfinfo_contextpB_bit11,
652 &hf_radiotap_rfinfo_contextpB_qam_modulation
,
655 static int * const context_c_flags
[] = {
656 &hf_radiotap_rfinfo_contextpC_snr_noise_valid
,
657 &hf_radiotap_rfinfo_contextpC_pfe_valid
,
658 &hf_radiotap_rfinfo_contextpC_pfe_is_cck
,
659 &hf_radiotap_rfinfo_contextpC_agc_idle2iqrdy_no_gain_change
,
660 &hf_radiotap_rfinfo_contextpC_agc_high_pwr_terminated
,
661 &hf_radiotap_rfinfo_contextpC_agc_high_pwr_terminator
,
663 &hf_radiotap_rfinfo_contextpC_bit8,
664 &hf_radiotap_rfinfo_contextpC_bit10,
665 &hf_radiotap_rfinfo_contextpC_bit11,
667 &hf_radiotap_rfinfo_contextpC_qam_modulation
,
670 static int * const context_d_flags
[] = {
671 &hf_radiotap_rfinfo_contextpD_snr_noise_valid
,
672 &hf_radiotap_rfinfo_contextpD_pfe_valid
,
673 &hf_radiotap_rfinfo_contextpD_pfe_is_cck
,
674 &hf_radiotap_rfinfo_contextpD_agc_idle2iqrdy_no_gain_change
,
675 &hf_radiotap_rfinfo_contextpD_agc_high_pwr_terminated
,
676 &hf_radiotap_rfinfo_contextpD_agc_high_pwr_terminator
,
678 &hf_radiotap_rfinfo_contextpD_bit8,
679 &hf_radiotap_rfinfo_contextpD_bit10,
680 &hf_radiotap_rfinfo_contextpD_bit11,
682 &hf_radiotap_rfinfo_contextpD_qam_modulation
,
687 //mgmt_bytes = tvb_get_letohs(tvb, offset);
688 //1st octet are as command type((7..4 bits)which indicates as Tx, Rx or RF frame) & port type((3..0 bits)ethernet or wlantap).
689 //Command type Rx = 0, Tx = 1, RF = 3 , RF_RX = 4
690 //2nd octet are as Reduce logging(7..4 bits) & fpga version(3..0 bits).
691 //log mode = 0 is normal capture and 1 is reduced capture
692 //FPGA version = 1 for OCTO versions
693 //OCTO version like 48, 61, 83
694 ixport_type
= tvb_get_uint8(tvb
, offset
);
695 cmd_type
= (ixport_type
& 0xf0) >> 4;
699 * If the command type is non-zero, this is from an OCTO board.
706 mgmt_byte
= tvb_get_uint8(tvb
, offset
+1);
707 log_mode
= (mgmt_byte
& 0xf0) >> 4;
717 * If it's zero, it could *still* be from an octo board, if the
718 * command type is Rx.
720 mgmt_byte
= tvb_get_uint8(tvb
, offset
+1);
721 if ((mgmt_byte
& 0x0f) != 0)
723 log_mode
= (mgmt_byte
& 0xf0) >> 4;
726 length
= tvb_get_letohs(tvb
, offset
+ COMMON_LENGTH_OFFSET
);
728 col_add_str(pinfo
->cinfo
, COL_PROTOCOL
, ixport_type
? "ETH" : "WLAN");
729 col_clear(pinfo
->cinfo
, COL_INFO
);
731 true_length
= pinfo
->fd
->pkt_len
- length
- tvb_get_letohs(tvb
, offset
+ length
) + 4; /* add FCS length into captured length */
733 col_add_fstr(pinfo
->cinfo
, COL_INFO
, "%s Capture, Length %u",
734 ixport_type
? "IxVeriWave Ethernet Tap" : "IxVeriWave Radio Tap", length
);
736 /* Dissect the packet */
737 ti
= proto_tree_add_protocol_format(tree
, proto_ixveriwave
,
738 tvb
, 0, length
, "%s Header",
739 ixport_type
? "IxVeriWave Ethernet Tap" : "IxVeriWave Radio Tap");
740 common_tree
= proto_item_add_subtree(ti
, ett_commontap
);
742 //checked for only RF frames should be skipped from the other logging details.
746 * Pre-OCTO common header.
748 /* common header length */
749 proto_tree_add_uint(common_tree
, hf_ixveriwave_frame_length
,
750 tvb
, 4, 2, true_length
);
751 length_remaining
= length
;
754 length_remaining
-=4;
757 if (length_remaining
>= 2) {
759 proto_tree_add_item_ret_uint(common_tree
, hf_ixveriwave_vw_msdu_length
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
, &vw_msdu_length
);
761 length_remaining
-=2;
764 /*extract flow id , 4bytes*/
765 if (length_remaining
>= 4) {
766 proto_tree_add_item(common_tree
, hf_ixveriwave_vw_flowid
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
769 length_remaining
-=4;
772 /*extract client id, 2bytes*/
773 if (length_remaining
>= 2) {
774 proto_tree_add_item(common_tree
, hf_ixveriwave_vw_vcid
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
777 length_remaining
-=2;
780 /*extract sequence number , 2bytes*/
781 if (length_remaining
>= 2) {
783 proto_tree_add_item(common_tree
, hf_ixveriwave_vw_seqnum
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
786 length_remaining
-=2;
789 /*extract latency, 4 bytes*/
790 if (length_remaining
>= 4) {
791 vw_latency
= tvb_get_letohl(tvb
, offset
);
793 /* start a tree going for the various packet times */
794 if (vw_latency
!= 0) {
795 vw_times_ti
= proto_tree_add_float_format(common_tree
,
796 hf_ixveriwave_vw_mslatency
,
797 tvb
, offset
, 4, (float)(vw_latency
/1000000.0),
798 "Frame timestamp values: (latency %.3f msec)",
799 (float)(vw_latency
/1000000.0));
800 vw_times_tree
= proto_item_add_subtree(vw_times_ti
, ett_commontap_times
);
802 proto_tree_add_uint(vw_times_tree
, hf_ixveriwave_vw_latency
, tvb
, offset
, 4, vw_latency
);
806 vw_times_ti
= proto_tree_add_float_format(common_tree
,
807 hf_ixveriwave_vw_mslatency
,
808 tvb
, offset
, 4, (float)(vw_latency
/1000000.0),
809 "Frame timestamp values:");
810 vw_times_tree
= proto_item_add_subtree(vw_times_ti
, ett_commontap_times
);
812 proto_tree_add_uint_format_value(vw_times_tree
, hf_ixveriwave_vw_latency
,
813 tvb
, offset
, 4, vw_latency
, "N/A");
817 length_remaining
-=4;
820 /*extract signature timestamp, 4 bytes (32 LSBs only, nsec)*/
821 if (length_remaining
>= 4) {
822 /* TODO: what should this fieldname be? */
823 proto_tree_add_item(vw_times_tree
, hf_ixveriwave_vw_sig_ts
,
824 tvb
, offset
, 4, ENC_BIG_ENDIAN
);
826 length_remaining
-=4;
829 /*extract frame start timestamp, 8 bytes (nsec)*/
830 if (length_remaining
>= 8) {
831 proto_tree_add_item_ret_uint64(vw_times_tree
, hf_ixveriwave_vw_startt
,
832 tvb
, offset
, 8, ENC_LITTLE_ENDIAN
, &vw_startt
);
835 length_remaining
-=8;
838 /* extract frame end timestamp, 8 bytes (nsec)*/
839 if (length_remaining
>= 8) {
840 proto_tree_add_item_ret_uint64(vw_times_tree
, hf_ixveriwave_vw_endt
,
841 tvb
, offset
, 8, ENC_LITTLE_ENDIAN
, &vw_endt
);
844 length_remaining
-=8;
847 /*extract frame duration , 4 bytes*/
848 if (length_remaining
>= 4) {
849 vw_pktdur
= tvb_get_letohl(tvb
, offset
);
851 if (vw_endt
>= vw_startt
) {
852 /* Add to root summary */
853 if (ixport_type
== ETHERNET_PORT
) {
854 proto_item_append_text(vw_times_ti
, " (Frame duration=%u nsecs)", vw_pktdur
);
855 proto_tree_add_uint(vw_times_tree
, hf_ixveriwave_vw_pktdur
,
856 tvb
, offset
-16, 16, vw_pktdur
);
859 proto_item_append_text(vw_times_ti
, " (Frame duration=%u usecs)", vw_pktdur
);
860 proto_tree_add_uint(vw_times_tree
, hf_ixveriwave_vw_pktdur
,
861 tvb
, offset
-16, 16, vw_pktdur
);
865 proto_tree_add_uint_format_value(vw_times_tree
, hf_ixveriwave_vw_pktdur
,
866 tvb
, offset
, 0, vw_pktdur
, "N/A");
868 /* Add to root summary */
869 proto_item_append_text(vw_times_ti
, " (Frame duration=N/A)");
875 } else { //Rather then the legacy it takes care to show the Time Header for RadioTapHeader in new format
879 length_remaining
= length
;
882 length_remaining
-=4;
883 /* XXX - not if the command is 3 */
884 /*extract latency, 4 bytes*/
885 if (length_remaining
>= 4) {
886 vw_latency
= tvb_get_letohl(tvb
, offset
);
888 /* start a tree going for the various packet times */
889 if (vw_latency
!= 0) {
890 vw_times_ti
= proto_tree_add_float_format(common_tree
,
891 hf_ixveriwave_vw_mslatency
,
892 tvb
, offset
, 4, (float)(vw_latency
/1000000.0),
893 "Time Header(latency %.3f msec)",
894 (float)(vw_latency
/1000000.0));
895 vw_times_tree
= proto_item_add_subtree(vw_times_ti
, ett_commontap_times
);
897 proto_tree_add_uint(vw_times_tree
, hf_ixveriwave_vw_latency
, tvb
, offset
, 4, vw_latency
);
901 vw_times_ti
= proto_tree_add_float_format(common_tree
,
902 hf_ixveriwave_vw_mslatency
,
903 tvb
, offset
, 4, (float)(vw_latency
/1000000.0),
905 vw_times_tree
= proto_item_add_subtree(vw_times_ti
, ett_commontap_times
);
908 proto_tree_add_uint_format_value(vw_times_tree
, hf_ixveriwave_vw_latency
,
909 tvb
, offset
, 4, vw_latency
, "N/A");
913 length_remaining
-=4;
916 /*extract signature timestamp, 4 bytes (32 LSBs only, nsec)*/
917 if (length_remaining
>= 4) {
918 /* TODO: what should this fieldname be? */
920 proto_tree_add_item(vw_times_tree
, hf_ixveriwave_vw_sig_ts
,
921 tvb
, offset
, 4, ENC_BIG_ENDIAN
);
923 proto_tree_add_item(vw_times_tree
, hf_ixveriwave_vw_delay
,
924 tvb
, offset
, 4, ENC_BIG_ENDIAN
);
926 length_remaining
-=4;
929 /*extract frame start timestamp, 8 bytes (nsec)*/
930 if (length_remaining
>= 8) {
931 proto_tree_add_item_ret_uint64(vw_times_tree
, hf_ixveriwave_vw_startt
,
932 tvb
, offset
, 8, ENC_LITTLE_ENDIAN
, &vw_startt
);
935 length_remaining
-=8;
938 /* extract frame end timestamp, 8 bytes (nsec)*/
939 if (length_remaining
>= 8) {
940 proto_tree_add_item_ret_uint64(vw_times_tree
, hf_ixveriwave_vw_endt
,
941 tvb
, offset
, 8, ENC_LITTLE_ENDIAN
, &vw_endt
);
944 length_remaining
-=8;
947 /*extract frame duration , 4 bytes*/
948 if (length_remaining
>= 4) {
949 vw_pktdur
= tvb_get_letohl(tvb
, offset
);
951 if (vw_endt
>= vw_startt
) {
952 /* Add to root summary */
953 if (ixport_type
== ETHERNET_PORT
) {
954 proto_item_append_text(vw_times_ti
, " (Frame duration=%u nsecs)", vw_pktdur
);
955 proto_tree_add_uint(vw_times_tree
, hf_ixveriwave_vw_pktdur
,
956 tvb
, offset
-16, 16, vw_pktdur
);
959 proto_item_append_text(vw_times_ti
, " (Frame duration=%u usecs)", vw_pktdur
);
960 proto_tree_add_uint(vw_times_tree
, hf_ixveriwave_vw_pktdur
,
961 tvb
, offset
, 4, vw_pktdur
);
965 proto_tree_add_uint_format_value(vw_times_tree
, hf_ixveriwave_vw_pktdur
,
966 tvb
, offset
, 0, vw_pktdur
, "N/A");
968 /* Add to root summary */
969 proto_item_append_text(vw_times_ti
, " (Frame duration=N/A)");
978 * Check for an existing ifg value associated with the frame
980 p_ifg_info
= (ifg_info
*)p_get_proto_data(wmem_file_scope(), pinfo
, proto_ixveriwave
, 0);
983 /* allocate the space */
984 p_ifg_info
= wmem_new0(wmem_file_scope(), struct ifg_info
);
986 /* Doesn't exist, so we need to calculate the value */
987 if (previous_frame_data
.previous_frame_num
!=0 && (pinfo
->num
- previous_frame_data
.previous_frame_num
== 1))
989 p_ifg_info
->ifg
= (uint32_t)(vw_startt
- previous_frame_data
.previous_end_time
);
990 p_ifg_info
->previous_end_time
= previous_frame_data
.previous_end_time
;
995 p_ifg_info
->previous_end_time
= 0;
998 /* Store current data into the static structure */
999 previous_frame_data
.previous_end_time
= vw_endt
;
1000 previous_frame_data
.previous_frame_num
= pinfo
->num
;
1002 /* Record the current start time */
1003 p_ifg_info
->current_start_time
= vw_startt
;
1005 /* Add the ifg onto the frame */
1006 p_add_proto_data(wmem_file_scope(), pinfo
, proto_ixveriwave
, 0, p_ifg_info
);
1010 p_ifg_info
= (struct ifg_info
*) p_get_proto_data(wmem_file_scope(), pinfo
, proto_ixveriwave
, 0);
1013 vw_info_ifg
= tvb_get_ntohs(tvb
, offset
+ VW_INFO_OFF
);
1014 if ((vw_info_ifg
& 0x0004) && !(vw_info_ifg
& 0x0008)) /* If the packet is part of an A-MPDU but not the first MPDU */
1020 vw_info_ifg
= tvb_get_letohs(tvb
, offset
+ VW_INFO_OFF
);
1021 if ((vw_info_ifg
& 0x0400) && !(vw_info_ifg
& 0x0800)) /* If the packet is part of an A-MPDU but not the first MPDU */
1028 vw_info_ifg
= tvb_get_ntohs(tvb
, offset
+ VW_INFO_OFF
+ OCTO_MODIFIED_RF_LEN
);
1029 if ((vw_info_ifg
& 0x0004) && !(vw_info_ifg
& 0x0008)) /* If the packet is part of an A-MPDU but not the first MPDU */
1039 if (ifg_flag
== 1) /* If the packet is part of an A-MPDU but not the first MPDU */
1040 ti
= proto_tree_add_uint(common_tree
, hf_ixveriwave_vw_ifg
, tvb
, 18, 0, 0);
1042 /*** if (p_ifg_info->ifg < IFG_MAX_VAL) ***/
1043 if ((int32_t) p_ifg_info
->ifg
>= 0)
1044 ti
= proto_tree_add_uint(common_tree
, hf_ixveriwave_vw_ifg
, tvb
, 18, 0, p_ifg_info
->ifg
);
1046 ti
= proto_tree_add_uint_format_value(common_tree
, hf_ixveriwave_vw_ifg
, tvb
, 18, 0, p_ifg_info
->ifg
, "Cannot be determined");
1049 proto_item_set_generated(ti
);
1052 if(cmd_type
==3 || cmd_type
==4)
1055 frameformat
= tvb_get_uint8(tvb
, offset
+33)& 0x03;
1056 legacy_type
= tvb_get_uint8(tvb
, offset
+33)& 0x04 >>2;
1061 // Only RF header implementation
1063 vwrft
= proto_tree_add_item(common_tree
, hf_radiotap_rf_info
,
1064 tvb
, offset
, 76, ENC_NA
);
1065 vw_rfinfo_tree
= proto_item_add_subtree(vwrft
, ett_radiotap_rf
);
1067 proto_tree_add_item_ret_uint(vw_rfinfo_tree
,
1068 hf_radiotap_rfinfo_rfid
, tvb
, offset
,
1069 1, ENC_LITTLE_ENDIAN
, &rfid
);
1070 proto_item_append_text(vwrft
, " (RFID = %u)", rfid
);
1073 noisevalida
= tvb_get_uint8(tvb
, offset
+65)& 0x01;
1074 noisevalidb
= tvb_get_uint8(tvb
, offset
+67)& 0x01;
1075 noisevalidc
= tvb_get_uint8(tvb
, offset
+69)& 0x01;
1076 noisevalidd
= tvb_get_uint8(tvb
, offset
+71)& 0x01;
1079 noisea = tvb_get_ntohis(tvb, offset);
1080 //noisevalida = tvb_get_uint8(tvb, offset+65)& 0x01;
1081 if (noisevalida == 1)
1082 rf_infot = proto_tree_add_float_format(vw_rfinfo_tree, hf_radiotap_rfinfo_noise,
1083 tvb, offset, 8, (float)(noisea/16.0),"Noise: A:%.2fdBm, ", (float)(noisea/16.0));
1084 //These are 16-bit signed numbers with four fraction bits representing NOISE in dBm. So 0xFFFF represents -1/16 dBm.
1086 rf_infot = proto_tree_add_float_format(vw_rfinfo_tree, hf_radiotap_rfinfo_noise,
1087 tvb, offset, 8, (float)(noisea/16.0),"Noise: A: N/A, ", (float)(noisea/16.0));
1088 rf_info_tree = proto_item_add_subtree(rf_infot, ett_rf_info);
1089 noiseb = tvb_get_ntohs(tvb, offset+2);
1090 noisevalidb = tvb_get_uint8(tvb, offset+67)& 0x01;
1091 if (noisevalidb == 1)
1092 proto_item_append_text(rf_infot, "B:%.2fdBm, ", (float)(noiseb/16.0));
1094 proto_item_append_text(rf_infot, "B: N/A, ", (float)(noiseb/16.0));
1095 noisec = tvb_get_ntohs(tvb, offset+4);
1096 noisevalidc = tvb_get_uint8(tvb, offset+69)& 0x01;
1097 if (noisevalidc == 1)
1098 proto_item_append_text(rf_infot, "C:%.2fdBm, ", (float)(noisec/16.0));
1100 proto_item_append_text(rf_infot, "C: N/A, ", (float)(noisec/16.0));
1101 noised = tvb_get_ntohs(tvb, offset+6);
1102 noisevalidd = tvb_get_uint8(tvb, offset+71)& 0x01;
1103 if (noisevalidd == 1)
1104 proto_item_append_text(rf_infot, "D:%.2fdBm", (float)(noised/16.0));
1106 proto_item_append_text(rf_infot, "D: N/A", (float)(noised/16.0));
1111 //These are 16-bit signed numbers with four fraction bits in units of dB . So 0xFFFF represents -1/16 dB.
1112 rf_infot
= proto_tree_add_none_format(vw_rfinfo_tree
, hf_radiotap_rfinfo_snr
, tvb
, offset
, 8, "SNR: ");
1113 rf_info_tree
= proto_item_add_subtree(rf_infot
, ett_rf_info
);
1115 flttmp
= (float)round(tvb_get_ntohs(tvb
, offset
) / 16.0f
);
1116 if (noisevalida
== 1)
1118 proto_tree_add_float(rf_info_tree
, hf_radiotap_rfinfo_snr_anta
, tvb
, offset
, 2, flttmp
);
1119 proto_item_append_text(rf_infot
, "A:%.0fdB, ", flttmp
);
1123 proto_tree_add_float_format_value(rf_info_tree
, hf_radiotap_rfinfo_snr_anta
, tvb
, offset
, 2, flttmp
, "N/A");
1124 proto_item_append_text(rf_infot
, "A:N/A, ");
1127 flttmp
= (float)round(tvb_get_ntohs(tvb
, offset
) / 16.0f
);
1128 if (noisevalidb
== 1)
1130 proto_tree_add_float(rf_info_tree
, hf_radiotap_rfinfo_snr_antb
, tvb
, offset
, 2, flttmp
);
1131 proto_item_append_text(rf_infot
, "B:%.0fdB, ", flttmp
);
1135 proto_tree_add_float_format_value(rf_info_tree
, hf_radiotap_rfinfo_snr_antb
, tvb
, offset
, 2, flttmp
, "N/A");
1136 proto_item_append_text(rf_infot
, "B:N/A, ");
1139 flttmp
= (float)round(tvb_get_ntohs(tvb
, offset
) / 16.0f
);
1140 if (noisevalidc
== 1)
1142 proto_tree_add_float(rf_info_tree
, hf_radiotap_rfinfo_snr_antc
, tvb
, offset
, 2, flttmp
);
1143 proto_item_append_text(rf_infot
, "C:%.0fdB, ", flttmp
);
1147 proto_tree_add_float_format_value(rf_info_tree
, hf_radiotap_rfinfo_snr_antc
, tvb
, offset
, 2, flttmp
, "N/A");
1148 proto_item_append_text(rf_infot
, "C:N/A, ");
1151 flttmp
= (float)round(tvb_get_ntohs(tvb
, offset
) / 16.0f
);
1152 if (noisevalidd
== 1)
1154 proto_tree_add_float(rf_info_tree
, hf_radiotap_rfinfo_snr_antd
, tvb
, offset
, 2, flttmp
);
1155 proto_item_append_text(rf_infot
, "D:%.0fdB", flttmp
);
1159 proto_tree_add_float_format_value(rf_info_tree
, hf_radiotap_rfinfo_snr_antd
, tvb
, offset
, 2, flttmp
, "N/A");
1160 proto_item_append_text(rf_infot
, "D:N/A");
1164 pfevalida
= (tvb_get_uint8(tvb
, offset
+49)& 0x02) >>1;
1165 pfevalidb
= (tvb_get_uint8(tvb
, offset
+51)& 0x02) >>1;
1166 pfevalidc
= (tvb_get_uint8(tvb
, offset
+53)& 0x02) >>1;
1167 pfevalidd
= (tvb_get_uint8(tvb
, offset
+55)& 0x02) >>1;
1168 rf_infot
= proto_tree_add_none_format(vw_rfinfo_tree
, hf_radiotap_rfinfo_pfe
,
1169 tvb
, offset
, 8, "PFE: ");
1170 rf_info_tree
= proto_item_add_subtree(rf_infot
, ett_rf_info
);
1171 if ((frameformat
== 0) && (legacy_type
== 0))
1173 //The basic unit of OFDM frequency error measurement is in units of 80 MHz/2^22.
1174 //This works out to approximately 19.073 Hz per measurement unit.
1175 flttmp
= (float)(tvb_get_ntohs(tvb
, offset
)*19.073);
1179 //The basic unit of CCK frequency error measurement is in units of 88 MHz/2^22.
1180 //This works out to approximately 20.981 Hz.
1181 flttmp
= (float)(tvb_get_ntohs(tvb
, offset
)*20.981);
1186 proto_item_append_text(rf_infot
, "SS#1:%.0fHz, ", flttmp
);
1187 proto_tree_add_float(rf_info_tree
, hf_radiotap_rfinfo_pfe_anta
,
1188 tvb
, offset
, 2, flttmp
);
1192 proto_item_append_text(rf_infot
, "SS#1:N/A, ");
1193 proto_tree_add_float_format_value(rf_info_tree
, hf_radiotap_rfinfo_pfe_anta
,
1194 tvb
, offset
, 2, flttmp
, "N/A");
1198 if ((frameformat
== 0) && (legacy_type
== 0))
1200 flttmp
= (float)(tvb_get_ntohs(tvb
, offset
)*19.073);
1204 flttmp
= (float)(tvb_get_ntohs(tvb
, offset
)*20.981);
1208 proto_item_append_text(rf_infot
, "SS#2:%.0fHz, ", flttmp
);
1209 proto_tree_add_float(rf_info_tree
, hf_radiotap_rfinfo_pfe_antb
,
1210 tvb
, offset
, 2, flttmp
);
1214 proto_item_append_text(rf_infot
, "SS#2:N/A, ");
1215 proto_tree_add_float_format_value(rf_info_tree
, hf_radiotap_rfinfo_pfe_antb
,
1216 tvb
, offset
, 2, flttmp
, "N/A");
1220 if ((frameformat
== 0) && (legacy_type
== 0))
1222 flttmp
= (float)(tvb_get_ntohs(tvb
, offset
)*19.073);
1226 flttmp
= (float)(tvb_get_ntohs(tvb
, offset
)*20.981);
1230 proto_item_append_text(rf_infot
, "SS#3:%.0fHz, ", flttmp
);
1231 proto_tree_add_float(rf_info_tree
, hf_radiotap_rfinfo_pfe_antc
,
1232 tvb
, offset
, 2, flttmp
);
1236 proto_item_append_text(rf_infot
, "SS#3:N/A, ");
1237 proto_tree_add_float_format_value(rf_info_tree
, hf_radiotap_rfinfo_pfe_antc
,
1238 tvb
, offset
, 2, flttmp
, "N/A");
1242 if ((frameformat
== 0) && (legacy_type
== 0))
1244 flttmp
= (float)(tvb_get_ntohs(tvb
, offset
)*19.073);
1248 flttmp
= (float)(tvb_get_ntohs(tvb
, offset
)*20.981);
1252 proto_item_append_text(rf_infot
, "SS#4:%.0fHz", flttmp
);
1253 proto_tree_add_float(rf_info_tree
, hf_radiotap_rfinfo_pfe_antd
,
1254 tvb
, offset
, 2, flttmp
);
1258 proto_item_append_text(rf_infot
, "SS#4:N/A");
1259 proto_tree_add_float_format_value(rf_info_tree
, hf_radiotap_rfinfo_pfe_antd
,
1260 tvb
, offset
, 2, flttmp
, "N/A");
1265 rf_infot
= proto_tree_add_none_format(vw_rfinfo_tree
, hf_radiotap_rfinfo_sigdata
, tvb
, offset
, 8, "AVG EVM SIG Data: ");
1266 rf_info_tree
= proto_item_add_subtree(rf_infot
, ett_rf_info
);
1268 flttmp
= (float)(tvb_get_ntohs(tvb
, offset
)/512.0);
1269 proto_item_append_text(rf_infot
, "SS#1:%.1f%%, ", flttmp
);
1270 proto_tree_add_float_format_value(rf_info_tree
, hf_radiotap_rfinfo_avg_evm_sd_siga
,
1271 tvb
, offset
, 2, flttmp
, "%.1f%%", flttmp
);
1274 flttmp
= (float)(tvb_get_ntohs(tvb
, offset
)/512.0);
1275 proto_item_append_text(rf_infot
, "SS#2:%.1f%%, ", flttmp
);
1276 proto_tree_add_float_format_value(rf_info_tree
, hf_radiotap_rfinfo_avg_evm_sd_sigb
,
1277 tvb
, offset
, 2, flttmp
, "%.1f%%", flttmp
);
1280 flttmp
= (float)(tvb_get_ntohs(tvb
, offset
)/512.0);
1281 proto_item_append_text(rf_infot
, "SS#3:%.1f%%, ", flttmp
);
1282 proto_tree_add_float_format_value(rf_info_tree
, hf_radiotap_rfinfo_avg_evm_sd_sigc
,
1283 tvb
, offset
, 2, flttmp
, "%.1f%%", flttmp
);
1286 flttmp
= (float)(tvb_get_ntohs(tvb
, offset
)/512.0);
1287 proto_item_append_text(rf_infot
, "SS#4:%.1f%%", flttmp
);
1288 proto_tree_add_float_format_value(rf_info_tree
, hf_radiotap_rfinfo_avg_evm_sd_sigd
,
1289 tvb
, offset
, 2, flttmp
, "%.1f%%", flttmp
);
1293 rf_infot
= proto_tree_add_none_format(vw_rfinfo_tree
, hf_radiotap_rfinfo_sigpilot
, tvb
, offset
, 8, "AVG EVM SIG Pilot: ");
1294 rf_info_tree
= proto_item_add_subtree(rf_infot
, ett_rf_info
);
1296 flttmp
= (float)(tvb_get_ntohs(tvb
, offset
)/512.0);
1297 proto_item_append_text(rf_infot
, "SS#1:%.1f%%, ", flttmp
);
1298 proto_tree_add_float_format_value(rf_info_tree
, hf_radiotap_rfinfo_avg_evm_sp_siga
,
1299 tvb
, offset
, 2, flttmp
, "%.1f%%", flttmp
);
1302 flttmp
= (float)(tvb_get_ntohs(tvb
, offset
)/512.0);
1303 proto_item_append_text(rf_infot
, "SS#2:%.1f%%, ", flttmp
);
1304 proto_tree_add_float_format_value(rf_info_tree
, hf_radiotap_rfinfo_avg_evm_sp_sigb
,
1305 tvb
, offset
, 2, flttmp
, "%.1f%%", flttmp
);
1308 flttmp
= (float)(tvb_get_ntohs(tvb
, offset
)/512.0);
1309 proto_item_append_text(rf_infot
, "SS#3:%.1f%%, ", flttmp
);
1310 proto_tree_add_float_format_value(rf_info_tree
, hf_radiotap_rfinfo_avg_evm_sp_sigc
,
1311 tvb
, offset
, 2, flttmp
, "%.1f%%", flttmp
);
1314 flttmp
= (float)(tvb_get_ntohs(tvb
, offset
)/512.0);
1315 proto_item_append_text(rf_infot
, "SS#4:%.1f%%, ", flttmp
);
1316 proto_tree_add_float_format_value(rf_info_tree
, hf_radiotap_rfinfo_avg_evm_sp_sigd
,
1317 tvb
, offset
, 2, flttmp
, "%.1f%%", flttmp
);
1321 rf_infot
= proto_tree_add_none_format(vw_rfinfo_tree
, hf_radiotap_rfinfo_datadata
,
1322 tvb
, offset
, 8, "AVG EVM DATA Data: ");
1323 rf_info_tree
= proto_item_add_subtree(rf_infot
, ett_rf_info
);
1325 flttmp
= (float)(tvb_get_ntohs(tvb
, offset
)/512.0);
1326 proto_item_append_text(rf_infot
, "SS#1:%.1f%%, ", flttmp
);
1327 proto_tree_add_float_format_value(rf_info_tree
, hf_radiotap_rfinfo_avg_evm_dd_siga
,
1328 tvb
, offset
, 2, flttmp
, "%.1f%%", flttmp
);
1331 flttmp
= (float)(tvb_get_ntohs(tvb
, offset
)/512.0);
1332 proto_item_append_text(rf_infot
, "SS#2:%.1f%%, ", flttmp
);
1333 proto_tree_add_float_format_value(rf_info_tree
, hf_radiotap_rfinfo_avg_evm_dd_sigb
,
1334 tvb
, offset
, 2, flttmp
, "%.1f%%", flttmp
);
1337 flttmp
= (float)(tvb_get_ntohs(tvb
, offset
)/512.0);
1338 proto_item_append_text(rf_infot
, "SS#3:%.1f%%, ", flttmp
);
1339 proto_tree_add_float_format_value(rf_info_tree
, hf_radiotap_rfinfo_avg_evm_dd_sigc
,
1340 tvb
, offset
, 2, flttmp
, "%.1f%%", flttmp
);
1343 flttmp
= (float)(tvb_get_ntohs(tvb
, offset
)/512.0);
1344 proto_item_append_text(rf_infot
, "SS#4:%.1f%%, ", flttmp
);
1345 proto_tree_add_float_format_value(rf_info_tree
, hf_radiotap_rfinfo_avg_evm_dd_sigd
,
1346 tvb
, offset
, 2, flttmp
, "%.1f%%", flttmp
);
1349 //AVG EVM DATA Pilot
1350 rf_infot
= proto_tree_add_none_format(vw_rfinfo_tree
, hf_radiotap_rfinfo_datapilot
,
1351 tvb
, offset
, 8, "AVG EVM DATA Pilot: ");
1352 rf_info_tree
= proto_item_add_subtree(rf_infot
, ett_rf_info
);
1354 flttmp
= (float)(tvb_get_ntohs(tvb
, offset
)/512.0);
1355 proto_item_append_text(rf_infot
, "SS#1:%.1f%%, ", flttmp
);
1356 proto_tree_add_float_format_value(rf_info_tree
, hf_radiotap_rfinfo_avg_evm_dp_siga
,
1357 tvb
, offset
, 2, flttmp
, "%.1f%%", flttmp
);
1360 flttmp
= (float)(tvb_get_ntohs(tvb
, offset
)/512.0);
1361 proto_item_append_text(rf_infot
, "SS#2:%.1f%%, ", flttmp
);
1362 proto_tree_add_float_format_value(rf_info_tree
, hf_radiotap_rfinfo_avg_evm_dp_sigb
,
1363 tvb
, offset
, 2, flttmp
, "%.1f%%", flttmp
);
1366 flttmp
= (float)(tvb_get_ntohs(tvb
, offset
)/512.0);
1367 proto_item_append_text(rf_infot
, "SS#3:%.1f%%, ", flttmp
);
1368 proto_tree_add_float_format_value(rf_info_tree
, hf_radiotap_rfinfo_avg_evm_dp_sigc
,
1369 tvb
, offset
, 2, flttmp
, "%.1f%%", flttmp
);
1372 flttmp
= (float)(tvb_get_ntohs(tvb
, offset
)/512.0);
1373 proto_item_append_text(rf_infot
, "SS#4:%.1f%%", flttmp
);
1374 proto_tree_add_float_format_value(rf_info_tree
, hf_radiotap_rfinfo_avg_evm_dp_sigd
,
1375 tvb
, offset
, 2, flttmp
, "%.1f%%", flttmp
);
1379 rf_infot
= proto_tree_add_item(vw_rfinfo_tree
, hf_radiotap_rfinfo_avg_ws_symbol
,
1380 tvb
, offset
, 8, ENC_NA
);
1381 rf_info_tree
= proto_item_add_subtree(rf_infot
, ett_rf_info
);
1383 proto_tree_add_item(rf_info_tree
, hf_radiotap_rfinfo_avg_evm_ws_siga
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1384 proto_item_append_text(rf_infot
, ": SS#1:%u%%, ", tvb_get_ntohs(tvb
, offset
));
1387 proto_tree_add_item(rf_info_tree
, hf_radiotap_rfinfo_avg_evm_ws_sigb
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1388 proto_item_append_text(rf_infot
, "SS#2:%u%%, ", tvb_get_ntohs(tvb
, offset
));
1391 proto_tree_add_item(rf_info_tree
, hf_radiotap_rfinfo_avg_evm_ws_sigc
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1392 proto_item_append_text(rf_infot
, "SS#3:%u%%, ", tvb_get_ntohs(tvb
, offset
));
1395 proto_tree_add_item(rf_info_tree
, hf_radiotap_rfinfo_avg_evm_ws_sigd
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1396 proto_item_append_text(rf_infot
, "SS#4:%u%%", tvb_get_ntohs(tvb
, offset
));
1400 ti
= proto_tree_add_bitmask(rf_info_tree
, tvb
, offset
, hf_radiotap_rfinfo_contextpa
, ett_radiotap_contextp
, context_a_flags
, ENC_BIG_ENDIAN
);
1401 rfinfo_contextp_tree
= proto_item_add_subtree(ti
, ett_radiotap_contextp
);
1403 frameformat
= tvb_get_uint8(tvb
, offset
)& 0x03;
1404 if (frameformat
== 0)
1406 proto_tree_add_item(rfinfo_contextp_tree
, hf_radiotap_rfinfo_legacytypeA
, tvb
, offset
, 1, ENC_NA
);
1410 proto_tree_add_item(rfinfo_contextp_tree
, hf_radiotap_rfinfo_frameformatA
, tvb
, offset
, 1, ENC_NA
);
1413 proto_tree_add_item(rfinfo_contextp_tree
, hf_radiotap_rfinfo_sigbwevmA
, tvb
, offset
, 1, ENC_NA
);
1417 ti
= proto_tree_add_bitmask(rf_info_tree
, tvb
, offset
, hf_radiotap_rfinfo_contextpb
, ett_radiotap_contextp
, context_b_flags
, ENC_BIG_ENDIAN
);
1418 rfinfo_contextp_tree
= proto_item_add_subtree(ti
, ett_radiotap_contextp
);
1420 frameformat
= tvb_get_uint8(tvb
, offset
)& 0x03;
1421 if (frameformat
== 0)
1423 proto_tree_add_item(rfinfo_contextp_tree
, hf_radiotap_rfinfo_legacytypeB
, tvb
, offset
, 1, ENC_NA
);
1427 proto_tree_add_item(rfinfo_contextp_tree
, hf_radiotap_rfinfo_frameformatB
, tvb
, offset
, 1, ENC_NA
);
1430 proto_tree_add_item(rfinfo_contextp_tree
, hf_radiotap_rfinfo_sigbwevmB
, tvb
, offset
, 1, ENC_NA
);
1434 ti
= proto_tree_add_bitmask(vw_rfinfo_tree
, tvb
, offset
, hf_radiotap_rfinfo_contextpc
, ett_radiotap_contextp
, context_c_flags
, ENC_BIG_ENDIAN
);
1435 rfinfo_contextp_tree
= proto_item_add_subtree(ti
, ett_radiotap_contextp
);
1437 frameformat
= tvb_get_uint8(tvb
, offset
)& 0x03;
1438 if (frameformat
== 0)
1440 proto_tree_add_item(rfinfo_contextp_tree
, hf_radiotap_rfinfo_legacytypeC
, tvb
, offset
, 1, ENC_NA
);
1444 proto_tree_add_item(rfinfo_contextp_tree
, hf_radiotap_rfinfo_frameformatC
, tvb
, offset
, 1, ENC_NA
);
1447 proto_tree_add_item(rfinfo_contextp_tree
, hf_radiotap_rfinfo_sigbwevmC
, tvb
, offset
, 1, ENC_NA
);
1451 ti
= proto_tree_add_bitmask(vw_rfinfo_tree
, tvb
, offset
, hf_radiotap_rfinfo_contextpd
, ett_radiotap_contextp
, context_d_flags
, ENC_BIG_ENDIAN
);
1452 rfinfo_contextp_tree
= proto_item_add_subtree(ti
, ett_radiotap_contextp
);
1454 frameformat
= tvb_get_uint8(tvb
, offset
)& 0x03;
1455 if (frameformat
== 0)
1457 proto_tree_add_item(rfinfo_contextp_tree
, hf_radiotap_rfinfo_legacytypeD
, tvb
, offset
, 1, ENC_NA
);
1461 proto_tree_add_item(rfinfo_contextp_tree
, hf_radiotap_rfinfo_frameformatD
, tvb
, offset
, 1, ENC_NA
);
1464 proto_tree_add_item(rfinfo_contextp_tree
, hf_radiotap_rfinfo_sigbwevmD
, tvb
, offset
, 1, ENC_NA
);
1468 if (cmd_type
!=3) //only RF
1470 proto_item_set_len(vw_times_ti
, 28);
1472 /* Grab the rest of the frame. */
1475 next_tvb
= tvb_new_subset_remaining(tvb
, length
);
1479 if (cmd_type
==4) //RF+Rx
1480 next_tvb
= tvb_new_subset_remaining(tvb
, 108);
1482 next_tvb
= tvb_new_subset_remaining(tvb
, 32);
1485 /* dissect the ethernet or wlan header next */
1486 if (ixport_type
== ETHERNET_PORT
)
1487 ethernettap_dissect(next_tvb
, pinfo
, tree
, common_tree
);
1490 wlantap_dissect_octo(next_tvb
, pinfo
, tree
, common_tree
,
1491 cmd_type
, log_mode
);
1493 wlantap_dissect(next_tvb
, pinfo
, tree
, common_tree
,
1498 return tvb_captured_length(tvb
);
1502 * Returns the amount required to align "offset" with "width"
1504 #define ALIGN_OFFSET(offset, width) \
1505 ( (((offset) + ((width) - 1)) & (~((width) - 1))) - offset )
1508 ethernettap_dissect(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, proto_tree
*tap_tree
)
1510 proto_tree
*vwift
,*vw_infoFlags_tree
= NULL
;
1513 unsigned length
, length_remaining
;
1514 bool vwf_txf
= false;
1515 ifg_info
*p_ifg_info
;
1518 /* First add the IFG information */
1519 p_ifg_info
= (struct ifg_info
*) p_get_proto_data(wmem_file_scope(), pinfo
, proto_ixveriwave
, 0);
1520 ti
= proto_tree_add_uint(tap_tree
, hf_ixveriwave_vw_ifg
,
1521 tvb
, offset
, 0, p_ifg_info
->ifg
);
1522 proto_item_set_generated(ti
);
1524 length
= tvb_get_letohs(tvb
, offset
);
1525 length_remaining
= length
;
1528 length_remaining
-= 2;
1530 /* extract flags (currently use only TX/RX and FCS error flag) */
1532 proto_tree_add_item_ret_boolean(tap_tree
, hf_ixveriwave_vwf_txf
,
1533 tvb
, offset
, 2, ENC_LITTLE_ENDIAN
, &vwf_txf
);
1534 proto_tree_add_item(tap_tree
, hf_ixveriwave_vwf_fcserr
,
1535 tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
1538 length_remaining
-= 2;
1541 /*extract info flags , 2bytes*/
1543 if (length_remaining
>= 2) {
1544 vwift
= proto_tree_add_item(tap_tree
, hf_ixveriwave_vw_info
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
1545 vw_infoFlags_tree
= proto_item_add_subtree(vwift
, ett_ethernettap_info
);
1548 /* then it's an rx case */
1549 proto_tree_add_item(vw_infoFlags_tree
, hf_ixveriwave_vw_info_go_no_flow
,
1550 tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
1551 proto_tree_add_item(vw_infoFlags_tree
, hf_ixveriwave_vw_info_go_with_flow
,
1552 tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
1554 /* it's a tx case */
1555 proto_tree_add_item(vw_infoFlags_tree
, hf_ixveriwave_vw_info_retry_count
,
1556 tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
1560 length_remaining
-=2;
1563 /*extract error , 4bytes*/
1564 if (length_remaining
>= 4) {
1566 /* then it's an rx case */
1567 static int * const vw_error_rx_flags
[] = {
1568 &hf_ixveriwave_vw_error_1_alignment_error
,
1569 &hf_ixveriwave_vw_error_1_packet_fcs_error
,
1570 &hf_ixveriwave_vw_error_1_bad_magic_byte_signature
,
1571 &hf_ixveriwave_vw_error_1_bad_payload_checksum
,
1572 &hf_ixveriwave_vw_error_1_frame_too_long
,
1573 &hf_ixveriwave_vw_error_1_ip_checksum_error
,
1574 &hf_ixveriwave_vw_error_1_l4_checksum_error
,
1575 &hf_ixveriwave_vw_error_1_id_mismatch
,
1576 &hf_ixveriwave_vw_error_1_length_error
,
1577 &hf_ixveriwave_vw_error_1_underflow
,
1581 proto_tree_add_bitmask(tap_tree
, tvb
, offset
, hf_ixveriwave_vw_error
, ett_ethernettap_error
, vw_error_rx_flags
, ENC_LITTLE_ENDIAN
);
1583 /* it's a tx case */
1584 static int * const vw_error_tx_flags
[] = {
1585 &hf_ixveriwave_vw_error_1_packet_fcs_error
,
1586 &hf_ixveriwave_vw_error_1_ip_checksum_error
,
1587 &hf_ixveriwave_vw_error_1_underflow
,
1588 &hf_ixveriwave_vw_error_1_late_collision
,
1589 &hf_ixveriwave_vw_error_1_excessive_collisions
,
1593 proto_tree_add_bitmask(tap_tree
, tvb
, offset
, hf_ixveriwave_vw_error
, ett_ethernettap_error
, vw_error_tx_flags
, ENC_LITTLE_ENDIAN
);
1597 length_remaining
-=4;
1599 /*extract l4id , 4bytes*/
1600 if (length_remaining
>= 4) {
1601 proto_tree_add_item(tap_tree
, hf_ixveriwave_vw_l4id
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
1603 length_remaining
-=4;
1606 /*extract pad, 4bytes*/
1607 if (length_remaining
>= 4) {
1608 /* throw away pad */
1611 /* Grab the rest of the frame. */
1612 next_tvb
= tvb_new_subset_remaining(tvb
, length
);
1614 /* dissect the ethernet header next */
1615 call_dissector(ethernet_handle
, next_tvb
, pinfo
, tree
);
1619 decode_ofdm_signal(proto_tree
*tree
, tvbuff_t
*tvb
, int offset
)
1621 proto_tree_add_item(tree
, hf_radiotap_ofdm_rate
,
1622 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
);
1623 proto_tree_add_item(tree
, hf_radiotap_ofdm_length
,
1624 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
);
1625 proto_tree_add_item(tree
, hf_radiotap_ofdm_parity
,
1626 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
);
1627 proto_tree_add_item(tree
, hf_radiotap_ofdm_tail
,
1628 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
);
1633 decode_ht_sig(proto_tree
*tree
, tvbuff_t
*tvb
, int offset
,
1634 struct ieee_802_11_phdr
*phdr
)
1637 unsigned stbc_streams
;
1643 proto_tree_add_item(tree
, hf_radiotap_ht_mcsindex
,
1644 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
);
1645 proto_tree_add_item_ret_uint(tree
, hf_radiotap_ht_bw
,
1646 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
,
1650 * XXX - how to distinguish between 20 MHz, 20+20U, and
1651 * 20+20L if the bit is not set?
1653 * Or is this something that radiotap only sets for transmitted
1654 * packets, so you only get the total bandwidth for received
1659 phdr
->phy_info
.info_11n
.has_bandwidth
= true;
1660 phdr
->phy_info
.info_11n
.bandwidth
= PHDR_802_11_BANDWIDTH_40_MHZ
;
1662 proto_tree_add_item(tree
, hf_radiotap_ht_length
,
1663 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
);
1667 proto_tree_add_item(tree
, hf_radiotap_ht_smoothing
,
1668 tvb
, offset
, 1, ENC_LITTLE_ENDIAN
);
1669 proto_tree_add_item(tree
, hf_radiotap_ht_notsounding
,
1670 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
);
1671 proto_tree_add_item(tree
, hf_radiotap_ht_aggregation
,
1672 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
);
1673 proto_tree_add_item_ret_uint(tree
, hf_radiotap_ht_stbc
,
1674 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
,
1676 phdr
->phy_info
.info_11n
.has_stbc_streams
= true;
1677 phdr
->phy_info
.info_11n
.stbc_streams
= stbc_streams
;
1678 proto_tree_add_item_ret_uint(tree
, hf_radiotap_ht_feccoding
,
1679 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
,
1681 phdr
->phy_info
.info_11n
.has_fec
= true;
1682 phdr
->phy_info
.info_11n
.fec
= feccoding
;
1683 proto_tree_add_item_ret_boolean(tree
, hf_radiotap_ht_short_gi
,
1684 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
,
1686 phdr
->phy_info
.info_11n
.has_short_gi
= true;
1687 phdr
->phy_info
.info_11n
.short_gi
= short_gi
;
1688 proto_tree_add_item_ret_uint(tree
, hf_radiotap_ht_ness
,
1689 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
,
1691 phdr
->phy_info
.info_11n
.has_ness
= true;
1692 phdr
->phy_info
.info_11n
.ness
= ness
;
1693 proto_tree_add_item(tree
, hf_radiotap_ht_crc
,
1694 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
);
1695 proto_tree_add_item(tree
, hf_radiotap_ht_tail
,
1696 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
);
1703 decode_vht_sig(proto_tree
*tree
, tvbuff_t
*tvb
, int offset
,
1704 struct ieee_802_11_phdr
*phdr
)
1709 unsigned partial_aid
;
1710 bool txop_ps_not_allowed
;
1712 bool short_gi_nsym_disambig
;
1713 bool ldpc_ofdmsymbol
;
1717 proto_tree_add_item_ret_uint(tree
, hf_radiotap_vht_bw
,
1718 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
,
1723 phdr
->phy_info
.info_11ac
.has_bandwidth
= true;
1724 phdr
->phy_info
.info_11ac
.bandwidth
= PHDR_802_11_BANDWIDTH_20_MHZ
;
1728 phdr
->phy_info
.info_11ac
.has_bandwidth
= true;
1729 phdr
->phy_info
.info_11ac
.bandwidth
= PHDR_802_11_BANDWIDTH_40_MHZ
;
1733 phdr
->phy_info
.info_11ac
.has_bandwidth
= true;
1734 phdr
->phy_info
.info_11ac
.bandwidth
= PHDR_802_11_BANDWIDTH_80_MHZ
;
1738 /* XXX - how to distinguish between 160 MHz and 80+80 MHz? */
1741 proto_tree_add_item_ret_boolean(tree
, hf_radiotap_vht_stbc
,
1742 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
,
1744 phdr
->phy_info
.info_11ac
.has_stbc
= true;
1745 phdr
->phy_info
.info_11ac
.stbc
= stbc
;
1746 proto_tree_add_item_ret_uint(tree
, hf_radiotap_vht_group_id
,
1747 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
,
1749 phdr
->phy_info
.info_11ac
.has_group_id
= true;
1750 phdr
->phy_info
.info_11ac
.group_id
= group_id
;
1751 if ((group_id
== 0) || (group_id
== 63)) // SU VHT type
1753 proto_tree_add_item(tree
, hf_radiotap_vht_su_nsts
,
1754 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
);
1755 proto_tree_add_item_ret_uint(tree
, hf_radiotap_vht_su_partial_aid
,
1756 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
,
1758 phdr
->phy_info
.info_11ac
.has_partial_aid
= true;
1759 phdr
->phy_info
.info_11ac
.partial_aid
= partial_aid
;
1763 // The below is MU VHT type*
1764 proto_tree_add_item(tree
, hf_radiotap_vht_u0_nsts
,
1765 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
);
1766 proto_tree_add_item(tree
, hf_radiotap_vht_u1_nsts
,
1767 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
);
1768 proto_tree_add_item(tree
, hf_radiotap_vht_u2_nsts
,
1769 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
);
1770 proto_tree_add_item(tree
, hf_radiotap_vht_u3_nsts
,
1771 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
);
1773 proto_tree_add_item_ret_boolean(tree
, hf_radiotap_vht_txop_ps_not_allowed
,
1774 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
,
1775 &txop_ps_not_allowed
);
1776 phdr
->phy_info
.info_11ac
.has_txop_ps_not_allowed
= true;
1777 phdr
->phy_info
.info_11ac
.txop_ps_not_allowed
= txop_ps_not_allowed
;
1781 proto_tree_add_item_ret_boolean(tree
, hf_radiotap_vht_short_gi
,
1782 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
,
1784 phdr
->phy_info
.info_11ac
.has_short_gi
= true;
1785 phdr
->phy_info
.info_11ac
.short_gi
= short_gi
;
1786 proto_tree_add_item_ret_boolean(tree
, hf_radiotap_vht_short_gi_nsym_disambig
,
1787 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
,
1788 &short_gi_nsym_disambig
);
1789 phdr
->phy_info
.info_11ac
.has_short_gi_nsym_disambig
= true;
1790 phdr
->phy_info
.info_11ac
.short_gi_nsym_disambig
= short_gi_nsym_disambig
;
1791 if ((group_id
== 0) || (group_id
== 63)) // SU VHT type
1793 proto_tree_add_item(tree
, hf_radiotap_vht_su_coding_type
,
1794 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
);
1798 // it is MU MIMO type BCC coding
1799 // extract U0 Coding
1800 proto_tree_add_item(tree
, hf_radiotap_vht_u0_coding_type
,
1801 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
);
1803 proto_tree_add_item_ret_boolean(tree
, hf_radiotap_vht_ldpc_ofdmsymbol
,
1804 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
,
1806 phdr
->phy_info
.info_11ac
.has_ldpc_extra_ofdm_symbol
= true;
1807 phdr
->phy_info
.info_11ac
.ldpc_extra_ofdm_symbol
= ldpc_ofdmsymbol
;
1808 if ((group_id
== 0) || (group_id
== 63)) // SU VHT type
1810 proto_tree_add_item(tree
, hf_radiotap_vht_su_mcs
,
1811 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
);
1812 proto_tree_add_item_ret_boolean(tree
, hf_radiotap_vht_beamformed
,
1813 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
,
1815 phdr
->phy_info
.info_11ac
.has_beamformed
= true;
1816 phdr
->phy_info
.info_11ac
.beamformed
= beamformed
;
1820 // extract U1 Coding type
1821 proto_tree_add_item(tree
, hf_radiotap_vht_u1_coding_type
,
1822 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
);
1824 // extract U2 Coding type
1825 proto_tree_add_item(tree
, hf_radiotap_vht_u2_coding_type
,
1826 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
);
1828 // extract U3 Coding type
1829 proto_tree_add_item(tree
, hf_radiotap_vht_u3_coding_type
,
1830 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
);
1833 proto_tree_add_item(tree
, hf_radiotap_vht_crc
,
1834 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
);
1835 proto_tree_add_item(tree
, hf_radiotap_vht_tail
,
1836 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
);
1840 if ((group_id
== 0) || (group_id
== 63)) // SU VHT type
1845 proto_tree_add_item(tree
, hf_radiotap_vht_su_sig_b_length_20_mhz
,
1846 tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
1850 proto_tree_add_item(tree
, hf_radiotap_vht_su_sig_b_length_40_mhz
,
1851 tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
1855 case VHT_BW_160_MHZ
:
1856 proto_tree_add_item(tree
, hf_radiotap_vht_su_sig_b_length_80_160_mhz
,
1857 tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
1866 proto_tree_add_item(tree
, hf_radiotap_vht_mu_sig_b_length_20_mhz
,
1867 tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
1868 proto_tree_add_item(tree
, hf_radiotap_vht_mu_mcs_20_mhz
,
1869 tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
1873 proto_tree_add_item(tree
, hf_radiotap_vht_mu_sig_b_length_40_mhz
,
1874 tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
1875 proto_tree_add_item(tree
, hf_radiotap_vht_mu_mcs_40_mhz
,
1876 tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
1880 case VHT_BW_160_MHZ
:
1881 proto_tree_add_item(tree
, hf_radiotap_vht_mu_sig_b_length_80_160_mhz
,
1882 tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
1883 proto_tree_add_item(tree
, hf_radiotap_vht_mu_mcs_80_160_mhz
,
1884 tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
1894 wlantap_dissect(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
,
1895 proto_tree
*tap_tree
, uint16_t vw_msdu_length
)
1897 proto_tree
*ft
, *flags_tree
= NULL
;
1898 int align_offset
, offset
;
1902 uint8_t rate_mcs_index
= 0;
1904 uint8_t vht_ndp_flag
, vht_mu_mimo_flg
;
1907 proto_tree
*vweft
, *vw_errorFlags_tree
= NULL
;
1908 uint16_t vw_info
, vw_chanflags
, vw_flags
, vw_ht_length
, vw_rflags
;
1910 uint8_t vht_user_pos
;
1912 ifg_info
*p_ifg_info
;
1914 bool short_preamble
;
1917 struct ieee_802_11_phdr phdr
;
1919 /* We don't have any 802.11 metadata yet. */
1920 memset(&phdr
, 0, sizeof(phdr
));
1922 phdr
.decrypted
= false;
1923 phdr
.datapad
= false;
1924 phdr
.phy
= PHDR_802_11_PHY_UNKNOWN
;
1926 //Command type Rx = 0, Tx = 1, RF = 3, RF_RX = 4
1927 //log mode = 0 is normal capture and 1 is reduced capture
1930 /* First add the IFG information, need to grab the info bit field here */
1931 vw_info
= tvb_get_letohs(tvb
, 20);
1932 p_ifg_info
= (struct ifg_info
*) p_get_proto_data(wmem_file_scope(), pinfo
, proto_ixveriwave
, 0);
1933 if ((vw_info
& INFO_MPDU_OF_A_MPDU
) && !(vw_info
& INFO_FIRST_MPDU_OF_A_MPDU
)) /* If the packet is part of an A-MPDU but not the first MPDU */
1934 ti
= proto_tree_add_uint(tap_tree
, hf_ixveriwave_vw_ifg
, tvb
, 18, 0, 0);
1936 ti
= proto_tree_add_uint(tap_tree
, hf_ixveriwave_vw_ifg
, tvb
, 18, 0, p_ifg_info
->ifg
);
1937 proto_item_set_generated(ti
);
1941 length
= tvb_get_letohs(tvb
, offset
);
1945 vw_rflags
= tvb_get_letohs(tvb
, offset
);
1948 ft
= proto_tree_add_item(tap_tree
, hf_radiotap_flags
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
1949 flags_tree
= proto_item_add_subtree(ft
, ett_radiotap_flags
);
1950 proto_tree_add_item_ret_boolean(flags_tree
, hf_radiotap_flags_preamble
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
, &short_preamble
);
1951 proto_tree_add_item(flags_tree
, hf_radiotap_flags_wep
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
1952 if ( vw_rflags
& FLAGS_CHAN_HT
) {
1953 proto_tree_add_item(flags_tree
, hf_radiotap_flags_ht
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
1954 proto_tree_add_item(flags_tree
, hf_radiotap_flags_40mhz
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
1955 proto_tree_add_item(flags_tree
, hf_radiotap_flags_short_gi
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
1957 if ( vw_rflags
& FLAGS_CHAN_VHT
) {
1958 proto_tree_add_item(flags_tree
, hf_radiotap_flags_vht
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
1959 proto_tree_add_item(flags_tree
, hf_radiotap_flags_short_gi
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
1960 proto_tree_add_item(flags_tree
, hf_radiotap_flags_40mhz
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
1961 proto_tree_add_item(flags_tree
, hf_radiotap_flags_80mhz
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
1966 vw_chanflags
= tvb_get_letohs(tvb
, offset
);
1970 phyRate
= (float)tvb_get_letohs(tvb
, offset
) / 10;
1974 plcp_type
= tvb_get_uint8(tvb
,offset
) & 0x03;
1975 vht_ndp_flag
= tvb_get_uint8(tvb
,offset
) & 0x80;
1978 /* Rate/MCS index */
1979 rate_mcs_index
= tvb_get_uint8(tvb
, offset
);
1982 /* number of spatial streams */
1983 nss
= tvb_get_uint8(tvb
, offset
);
1986 if ((vw_rflags
& FLAGS_CHAN_HT
) || (vw_rflags
& FLAGS_CHAN_VHT
)) {
1987 if (vw_rflags
& FLAGS_CHAN_VHT
) {
1988 phdr
.phy
= PHDR_802_11_PHY_11AC
;
1989 phdr
.phy_info
.info_11ac
.has_short_gi
= true;
1990 phdr
.phy_info
.info_11ac
.short_gi
= ((vw_rflags
& FLAGS_CHAN_SHORTGI
) != 0);
1992 * XXX - this probably has only one user, so only one MCS index
1995 phdr
.phy_info
.info_11ac
.nss
[0] = nss
;
1996 phdr
.phy_info
.info_11ac
.mcs
[0] = rate_mcs_index
;
1999 * XXX - where's the number of extension spatial streams?
2000 * The code in wiretap/vwr.c doesn't seem to provide it.
2001 * It could dig it out of the HT PLCP header in HT-SIG.
2003 phdr
.phy
= PHDR_802_11_PHY_11N
;
2004 phdr
.phy_info
.info_11n
.has_mcs_index
= true;
2005 phdr
.phy_info
.info_11n
.mcs_index
= rate_mcs_index
;
2007 phdr
.phy_info
.info_11n
.has_short_gi
= true;
2008 phdr
.phy_info
.info_11n
.short_gi
= ((vw_rflags
& FLAGS_CHAN_SHORTGI
) != 0);
2010 phdr
.phy_info
.info_11n
.has_greenfield
= true;
2011 phdr
.phy_info
.info_11n
.greenfield
= (plcp_type
== PLCP_TYPE_GREENFIELD
);
2014 proto_tree_add_item(tap_tree
, hf_radiotap_mcsindex
,
2015 tvb
, offset
- 2, 1, ENC_BIG_ENDIAN
);
2017 proto_tree_add_item(tap_tree
, hf_radiotap_nss
,
2018 tvb
, offset
- 1, 1, ENC_BIG_ENDIAN
);
2020 proto_tree_add_uint_format_value(tap_tree
, hf_radiotap_datarate
,
2021 tvb
, offset
- 5, 2, tvb_get_letohs(tvb
, offset
-5),
2022 "%.1f (MCS %d)", phyRate
, rate_mcs_index
);
2025 * XXX - CHAN_OFDM could be 11a or 11g. Unfortunately, we don't
2026 * have the frequency, or anything else, to distinguish between
2029 if (vw_chanflags
& CHAN_CCK
) {
2030 phdr
.phy
= PHDR_802_11_PHY_11B
;
2031 phdr
.phy_info
.info_11b
.has_short_preamble
= true;
2032 phdr
.phy_info
.info_11b
.short_preamble
= short_preamble
;
2034 phdr
.has_data_rate
= true;
2035 phdr
.data_rate
= tvb_get_letohs(tvb
, offset
-5) / 5;
2037 proto_tree_add_uint_format_value(tap_tree
, hf_radiotap_datarate
,
2038 tvb
, offset
- 5, 2, tvb_get_letohs(tvb
, offset
-5),
2039 "%.1f Mb/s", phyRate
);
2041 col_add_fstr(pinfo
->cinfo
, COL_TX_RATE
, "%.1f", phyRate
);
2043 /* RSSI/antenna A RSSI */
2044 dbm
= tvb_get_int8(tvb
, offset
);
2045 phdr
.has_signal_dbm
= true;
2046 phdr
.signal_dbm
= dbm
;
2047 col_add_fstr(pinfo
->cinfo
, COL_RSSI
, "%d dBm", dbm
);
2048 proto_tree_add_item(tap_tree
, hf_radiotap_dbm_anta
, tvb
, offset
, 1, ENC_NA
);
2051 /* Antenna B RSSI, or 100 if absent */
2052 dbm
= tvb_get_int8(tvb
, offset
);
2054 proto_tree_add_item(tap_tree
, hf_radiotap_dbm_antb
, tvb
, offset
, 1, ENC_NA
);
2058 /* Antenna C RSSI, or 100 if absent */
2059 dbm
= tvb_get_int8(tvb
, offset
);
2061 proto_tree_add_item(tap_tree
, hf_radiotap_dbm_antc
, tvb
, offset
, 1, ENC_NA
);
2065 /* Antenna D RSSI, or 100 if absent */
2066 dbm
= tvb_get_int8(tvb
, offset
);
2068 proto_tree_add_item(tap_tree
, hf_radiotap_dbm_antd
, tvb
, offset
, 1, ENC_NA
);
2070 offset
+=2; /* also skips padding octet */
2072 /* VeriWave flags */
2073 vw_flags
= tvb_get_letohs(tvb
, offset
);
2075 if ((vw_rflags
& FLAGS_CHAN_HT
) || (vw_rflags
& FLAGS_CHAN_VHT
)) {
2076 if (plcp_type
== PLCP_TYPE_VHT_MIXED
) {
2077 if (!(vw_flags
& VW_RADIOTAPF_TXF
) && (vht_ndp_flag
== 0x80)) {
2078 /*** VHT-NDP rx frame and ndp_flag is set***/
2079 proto_tree_add_uint(tap_tree
, hf_radiotap_plcptype
,
2080 tvb
, offset
-3, 1, plcp_type
);
2082 /*** VHT-NDP transmitted frame ***/
2083 if (vw_msdu_length
== 4) { /*** Transmit frame and msdu_length = 4***/
2084 proto_tree_add_uint(tap_tree
, hf_radiotap_plcptype
,
2085 tvb
, offset
-3, 1, plcp_type
);
2091 proto_tree_add_item(tap_tree
, hf_radiotap_vwf_txf
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
2092 proto_tree_add_item(tap_tree
, hf_radiotap_vwf_fcserr
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
2093 proto_tree_add_item(tap_tree
, hf_radiotap_vwf_dcrerr
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
2094 proto_tree_add_item(tap_tree
, hf_radiotap_vwf_retrerr
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
2095 proto_tree_add_item(tap_tree
, hf_radiotap_vwf_enctype
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
2099 /* XXX - this should do nothing */
2100 align_offset
= ALIGN_OFFSET(offset
, 2);
2101 offset
+= align_offset
;
2104 vw_ht_length
= tvb_get_letohs(tvb
, offset
);
2105 if ((vw_ht_length
!= 0)) {
2106 proto_tree_add_uint_format_value(tap_tree
, hf_radiotap_vw_ht_length
,
2107 tvb
, offset
, 2, vw_ht_length
, "%u (includes the sum of the pieces of the aggregate and their respective Start_Spacing + Delimiter + MPDU + Padding)",
2110 if (plcp_type
== PLCP_TYPE_VHT_MIXED
)
2112 proto_tree_add_uint_format(tap_tree
, hf_radiotap_vw_ht_length
,
2113 tvb
, offset
, 2, vw_ht_length
, "VHT length: %u (includes the sum of the pieces of the aggregate and their respective Start_Spacing + Delimiter + MPDU + Padding)",
2118 proto_tree_add_uint_format(tap_tree
, hf_radiotap_vw_ht_length
,
2119 tvb
, offset
, 2, vw_ht_length
, "HT length: %u (includes the sum of the pieces of the aggregate and their respective Start_Spacing + Delimiter + MPDU + Padding)",
2126 align_offset
= ALIGN_OFFSET(offset
, 2);
2127 offset
+= align_offset
;
2130 if (!(vw_flags
& VW_RADIOTAPF_TXF
)) { /* then it's an rx case */
2131 /*FPGA_VER_vVW510021 version decodes */
2132 static int * const vw_info_rx_2_flags
[] = {
2133 &hf_radiotap_vw_info_2_ack_withheld_from_frame
,
2134 &hf_radiotap_vw_info_2_sent_cts_to_self_before_data
,
2135 &hf_radiotap_vw_info_2_mpdu_of_a_mpdu
,
2136 &hf_radiotap_vw_info_2_first_mpdu_of_a_mpdu
,
2137 &hf_radiotap_vw_info_2_last_pdu_of_a_mpdu
,
2138 &hf_radiotap_vw_info_2_msdu_of_a_msdu
,
2139 &hf_radiotap_vw_info_2_first_msdu_of_a_msdu
,
2140 &hf_radiotap_vw_info_2_last_msdu_of_a_msdu
,
2144 proto_tree_add_bitmask(tap_tree
, tvb
, offset
, hf_radiotap_vw_info
, ett_radiotap_info
, vw_info_rx_2_flags
, ENC_LITTLE_ENDIAN
);
2146 } else { /* it's a tx case */
2147 static int * const vw_info_tx_2_flags
[] = {
2148 &hf_radiotap_vw_info_2_mpdu_of_a_mpdu
,
2149 &hf_radiotap_vw_info_2_first_mpdu_of_a_mpdu
,
2150 &hf_radiotap_vw_info_2_last_pdu_of_a_mpdu
,
2151 &hf_radiotap_vw_info_2_msdu_of_a_msdu
,
2152 &hf_radiotap_vw_info_2_first_msdu_of_a_msdu
,
2153 &hf_radiotap_vw_info_2_last_msdu_of_a_msdu
,
2157 /* FPGA_VER_vVW510021 and VW_FPGA_VER_vVW510006 tx info decodes same*/
2158 proto_tree_add_bitmask(tap_tree
, tvb
, offset
, hf_radiotap_vw_info
, ett_radiotap_info
, vw_info_tx_2_flags
, ENC_LITTLE_ENDIAN
);
2163 vw_errors
= tvb_get_letohl(tvb
, offset
);
2165 vweft
= proto_tree_add_uint(tap_tree
, hf_radiotap_vw_errors
,
2166 tvb
, offset
, 4, vw_errors
);
2167 vw_errorFlags_tree
= proto_item_add_subtree(vweft
, ett_radiotap_errors
);
2169 /* build the individual subtrees for the various types of error flags */
2170 /* NOTE: as the upper 16 bits aren't used at the moment, we pretend that */
2171 /* the error flags field is only 16 bits (instead of 32) to save space */
2172 if (!(vw_flags
& VW_RADIOTAPF_TXF
)) {
2173 /* then it's an rx case */
2175 /*FPGA_VER_vVW510021 version decodes */
2176 proto_tree_add_item(vw_errorFlags_tree
,
2177 hf_radiotap_vw_errors_rx_2_crc16_or_parity_error
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
2178 proto_tree_add_item(vw_errorFlags_tree
,
2179 hf_radiotap_vw_errors_rx_2_non_supported_rate_or_service_field
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
2180 proto_tree_add_item(vw_errorFlags_tree
,
2181 hf_radiotap_vw_errors_rx_2_short_frame
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
2183 /* veriwave removed 8-2007, don't display reserved bit*/
2185 proto_tree_add_item(vw_errorFlags_tree
,
2186 hf_radiotap_vw_errors_rx_2_fcs_error
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
2187 proto_tree_add_item(vw_errorFlags_tree
,
2188 hf_radiotap_vw_errors_rx_2_l2_de_aggregation_error
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
2189 proto_tree_add_item(vw_errorFlags_tree
,
2190 hf_radiotap_vw_errors_rx_2_duplicate_mpdu
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
2191 proto_tree_add_item(vw_errorFlags_tree
,
2192 hf_radiotap_vw_errors_rx_2_bad_flow_magic_number
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
2193 proto_tree_add_item(vw_errorFlags_tree
,
2194 hf_radiotap_vw_errors_rx_2_flow_payload_checksum_error
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
2196 proto_tree_add_item(vw_errorFlags_tree
,
2197 hf_radiotap_vw_errors_rx_2_ip_checksum_error
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
2198 proto_tree_add_item(vw_errorFlags_tree
,
2199 hf_radiotap_vw_errors_rx_2_l4_checksum_error
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
2201 } else { /* it's a tx case */
2202 /* FPGA_VER_vVW510021 and VW_FPGA_VER_vVW510006 tx error decodes same*/
2204 proto_tree_add_item(vw_errorFlags_tree
,
2205 hf_radiotap_vw_errors_tx_packet_fcs_error
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
2207 proto_tree_add_item(vw_errorFlags_tree
,
2208 hf_radiotap_vw_errors_tx_ip_checksum_error
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
2213 /*** POPULATE THE AMSDU VHT MIXED MODE CONTAINER FORMAT ***/
2214 /* XXX - what about other modes? PLCP here? */
2215 if ((vw_rflags
& FLAGS_CHAN_VHT
) && vw_ht_length
!= 0)
2217 if (plcp_type
== PLCP_TYPE_VHT_MIXED
) //If the frame is VHT type
2219 offset
+= 4; /*** 4 bytes of ERROR ***/
2221 /*** Extract SU/MU MIMO flag from RX L1 Info ***/
2222 vht_user_pos
= tvb_get_uint8(tvb
, offset
);
2223 vht_mu_mimo_flg
= (vht_user_pos
& 0x08) >> 3;
2225 if (vht_mu_mimo_flg
== 1) {
2226 proto_tree_add_item(tap_tree
, hf_radiotap_vht_mu_mimo_flg
, tvb
, offset
, 1, ENC_NA
);
2228 /*** extract user Position in case of mu-mimo ***/
2229 proto_tree_add_item(tap_tree
, hf_radiotap_vht_user_pos
, tvb
, offset
, 1, ENC_NA
);
2232 proto_tree_add_item(tap_tree
, hf_radiotap_vht_su_mimo_flg
, tvb
, offset
, 1, ENC_NA
);
2234 offset
+= 1; /*** skip the RX L1 Info byte ****/
2237 offset
= decode_ofdm_signal(tap_tree
, tvb
, offset
);
2240 /* XXX - does this include VHT-SIG-B? */
2241 decode_vht_sig(tap_tree
, tvb
, offset
, &phdr
);
2245 /* Grab the rest of the frame. */
2246 if (plcp_type
== PLCP_TYPE_VHT_MIXED
) {
2247 length
= length
+ 17; /*** 16 bytes of PLCP + 1 byte of L1InfoC(UserPos) **/
2250 next_tvb
= tvb_new_subset_remaining(tvb
, length
);
2252 /* dissect the 802.11 radio information and header next */
2253 call_dissector_with_data(ieee80211_radio_handle
, next_tvb
, pinfo
, tree
, &phdr
);
2258 wlantap_dissect_octo(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
,
2259 proto_tree
*tap_tree
, uint8_t cmd_type
, int log_mode
)
2265 uint8_t rate_mcs_index
= 0, vw_bssid
;
2267 uint8_t vht_ndp_flag
, vht_mu_mimo_flg
;
2270 proto_tree
*vwict
, *vw_infoC_tree
= NULL
;
2271 uint16_t vw_vcid
, mpdu_length
;
2273 uint32_t vht_user_pos
;
2274 uint8_t plcp_default
;
2277 proto_tree
*vw_l1info_tree
= NULL
, *vwl2l4t
,*vw_l2l4info_tree
= NULL
, *vwplt
,*vw_plcpinfo_tree
= NULL
;
2278 bool direction
, short_preamble
;
2279 uint8_t nss
, sigbw
, cidv
, bssidv
, flowv
, l4idv
;
2281 struct ieee_802_11_phdr phdr
;
2283 /* We don't have any 802.11 metadata yet. */
2284 memset(&phdr
, 0, sizeof(phdr
));
2286 phdr
.decrypted
= false;
2287 phdr
.datapad
= false;
2288 phdr
.phy
= PHDR_802_11_PHY_UNKNOWN
;
2290 //Command type Rx = 0, Tx = 1, RF = 3, RF_RX = 4
2291 //log mode = 0 is normal capture and 1 is reduced capture
2294 * FPGA version is non-zero, meaning this is OCTO.
2295 * The first part is a timestamp header.
2297 //RadioTapHeader New format for L1Info
2300 length
= tvb_get_letohs(tvb
, offset
);
2303 vwl1i
= proto_tree_add_item(tap_tree
, hf_radiotap_l1info
, tvb
, offset
, 12, ENC_NA
);
2304 vw_l1info_tree
= proto_item_add_subtree(vwl1i
, ett_radiotap_layer1
);
2306 plcp_type
= tvb_get_uint8(tvb
, offset
+4) & 0x0f;
2311 case PLCP_TYPE_LEGACY
: /* Legacy (pre-HT - 11b/11a/11g) */
2313 * XXX - CHAN_OFDM could be 11a or 11g. Unfortunately, we don't
2314 * have the frequency, or anything else, to distinguish between
2317 short_preamble
= !(tvb_get_uint8(tvb
, offset
) & 0x40);
2318 proto_tree_add_boolean(vw_l1info_tree
, hf_radiotap_l1info_preamble
,
2319 tvb
, offset
, 1, short_preamble
);
2320 rate_mcs_index
= tvb_get_uint8(tvb
, offset
) & 0x3f;
2321 proto_tree_add_uint(vw_l1info_tree
, hf_radiotap_l1info_rateindex
,
2322 tvb
, offset
, 1, rate_mcs_index
);
2323 if (rate_mcs_index
< 4)
2326 phdr
.phy
= PHDR_802_11_PHY_11B
;
2327 phdr
.phy_info
.info_11b
.has_short_preamble
= true;
2328 phdr
.phy_info
.info_11b
.short_preamble
= short_preamble
;
2332 case PLCP_TYPE_MIXED
: /* HT Mixed */
2333 case PLCP_TYPE_GREENFIELD
: /* HT Greenfield */
2334 rate_mcs_index
= tvb_get_uint8(tvb
, offset
) & 0x3f;
2335 proto_tree_add_uint(vw_l1info_tree
, hf_radiotap_l1info_ht_mcsindex
,
2336 tvb
, offset
, 1, rate_mcs_index
);
2337 phdr
.phy
= PHDR_802_11_PHY_11N
;
2338 phdr
.phy_info
.info_11n
.has_mcs_index
= true;
2339 phdr
.phy_info
.info_11n
.mcs_index
= rate_mcs_index
;
2340 phdr
.phy_info
.info_11n
.has_greenfield
= true;
2341 phdr
.phy_info
.info_11n
.greenfield
= (plcp_type
== PLCP_TYPE_GREENFIELD
);
2344 case PLCP_TYPE_VHT_MIXED
: /* VHT Mixed */
2345 rate_mcs_index
= tvb_get_uint8(tvb
, offset
) & 0x0f;
2346 proto_tree_add_uint(vw_l1info_tree
, hf_radiotap_l1info_vht_mcsindex
,
2347 tvb
, offset
, 1, rate_mcs_index
);
2348 phdr
.phy
= PHDR_802_11_PHY_11AC
;
2350 * XXX - this probably has only one user, so only one MCS index.
2352 phdr
.phy_info
.info_11ac
.mcs
[0] = rate_mcs_index
;
2356 /* NSS and direction octet */
2359 case PLCP_TYPE_LEGACY
: /* Legacy (pre-HT - 11b/11a/11g) */
2362 case PLCP_TYPE_MIXED
: /* HT Mixed */
2363 case PLCP_TYPE_GREENFIELD
: /* HT Greenfield (Not supported) */
2364 nss
= (tvb_get_uint8(tvb
, offset
) & 0xf0) >> 4;
2365 proto_tree_add_uint(vw_l1info_tree
, hf_radiotap_l1info_nss
,
2366 tvb
, offset
, 1, nss
);
2369 case PLCP_TYPE_VHT_MIXED
: /* VHT Mixed */
2370 nss
= (tvb_get_uint8(tvb
, offset
) & 0xf0) >> 4;
2371 proto_tree_add_uint(vw_l1info_tree
, hf_radiotap_l1info_nss
,
2372 tvb
, offset
, 1, nss
);
2374 * XXX - this probably has only one user, so only one NSS.
2376 phdr
.phy_info
.info_11ac
.nss
[0] = nss
;
2379 direction
= ((tvb_get_uint8(tvb
, offset
) & 0x01) != 0);
2380 proto_tree_add_boolean(vw_l1info_tree
, hf_radiotap_l1info_transmitted
,
2381 tvb
, offset
, 1, direction
);
2382 proto_item_append_text(vwl1i
, " (Direction=%s)",
2383 direction
? "Transmit" : "Receive");
2386 /* New pieces of lines for
2387 * #802.11 radio information#
2388 * Referred from code changes done for old FPGA version
2390 phdr
.fcs_len
= (log_mode
== 3) ? 0 : 4;
2394 case PLCP_TYPE_LEGACY
: /* Legacy (pre-HT - 11b/11a/11g) */
2395 phdr
.has_data_rate
= true;
2396 phdr
.data_rate
= tvb_get_letohs(tvb
, offset
) / 5;
2399 case PLCP_TYPE_MIXED
: /* HT Mixed */
2400 case PLCP_TYPE_GREENFIELD
: /* HT Greenfield (Not supported) */
2401 case PLCP_TYPE_VHT_MIXED
: /* VHT Mixed */
2405 phyRate
= (float)tvb_get_letohs(tvb
, offset
) / 10;
2406 proto_tree_add_uint_format_value(vw_l1info_tree
, hf_radiotap_datarate
,
2407 tvb
, offset
, 2, tvb_get_letohs(tvb
, offset
),
2408 "%.1f Mb/s", phyRate
);
2409 offset
= offset
+ 2;
2410 col_add_fstr(pinfo
->cinfo
, COL_TX_RATE
, "%.1f", phyRate
);
2412 sigbw
= (tvb_get_uint8(tvb
, offset
) & 0xf0) >> 4;
2413 plcp_type
= tvb_get_uint8(tvb
, offset
) & 0x0f;
2414 proto_tree_add_uint(vw_l1info_tree
,
2415 hf_radiotap_sigbandwidth
, tvb
, offset
, 1, sigbw
);
2417 if (plcp_type
!= PLCP_TYPE_LEGACY
)
2420 proto_tree_add_uint(vw_l1info_tree
,
2421 hf_radiotap_modulation
, tvb
, offset
, 1, plcp_type
);
2426 if (rate_mcs_index
< 4)
2427 proto_tree_add_uint_format_value(vw_l1info_tree
, hf_radiotap_modulation
,
2428 tvb
, offset
, 1, plcp_type
, "CCK (%u)", plcp_type
);
2430 proto_tree_add_uint_format_value(vw_l1info_tree
, hf_radiotap_modulation
,
2431 tvb
, offset
, 1, plcp_type
, "OFDM (%u)", plcp_type
);
2435 dbm
= tvb_get_int8(tvb
, offset
);
2437 phdr
.has_signal_dbm
= true;
2438 phdr
.signal_dbm
= dbm
;
2440 col_add_fstr(pinfo
->cinfo
, COL_RSSI
, "%d dBm", dbm
);
2443 proto_tree_add_item(vw_l1info_tree
, hf_radiotap_dbm_anta
,
2444 tvb
, offset
, 1, ENC_NA
);
2446 proto_tree_add_item(vw_l1info_tree
, hf_radiotap_dbm_tx_anta
,
2447 tvb
, offset
, 1, ENC_NA
);
2450 dbm
= tvb_get_int8(tvb
, offset
);
2453 proto_tree_add_item(vw_l1info_tree
, hf_radiotap_dbm_antb
,
2454 tvb
, offset
, 1, ENC_NA
);
2456 proto_tree_add_item(vw_l1info_tree
,
2457 hf_radiotap_dbm_tx_antb
,
2458 tvb
, offset
, 1, ENC_NA
);
2462 dbm
= tvb_get_int8(tvb
, offset
);
2465 proto_tree_add_item(vw_l1info_tree
, hf_radiotap_dbm_antc
,
2466 tvb
, offset
, 1, ENC_NA
);
2468 proto_tree_add_item(vw_l1info_tree
, hf_radiotap_dbm_tx_antc
,
2469 tvb
, offset
, 1, ENC_NA
);
2473 dbm
= tvb_get_int8(tvb
, offset
);
2476 proto_tree_add_item(vw_l1info_tree
, hf_radiotap_dbm_antd
,
2477 tvb
, offset
, 1, ENC_NA
);
2479 proto_tree_add_item(vw_l1info_tree
,
2480 hf_radiotap_dbm_tx_antd
,
2481 tvb
, offset
, 1, ENC_NA
);
2485 proto_tree_add_item(vw_l1info_tree
, hf_radiotap_sigbandwidthmask
, tvb
, offset
, 1, ENC_NA
);
2490 proto_tree_add_item(vw_l1info_tree
, hf_radiotap_antennaportenergydetect
, tvb
, offset
, 1, ENC_NA
);
2494 proto_tree_add_item(vw_l1info_tree
, hf_radiotap_tx_antennaselect
, tvb
, offset
, 1, ENC_NA
);
2495 proto_tree_add_item(vw_l1info_tree
, hf_radiotap_tx_stbcselect
, tvb
, offset
, 1, ENC_NA
);
2497 if (plcp_type
== PLCP_TYPE_VHT_MIXED
)
2499 proto_tree_add_item(vw_l1info_tree
, hf_radiotap_mumask
, tvb
, offset
, 1, ENC_NA
);
2503 if (plcp_type
== PLCP_TYPE_VHT_MIXED
)
2505 // Extract SU/MU MIMO flag from RX L1 Info
2506 vht_user_pos
= tvb_get_uint8(tvb
, offset
);
2507 vwict
= proto_tree_add_item(vw_l1info_tree
,
2508 hf_radiotap_l1infoc
, tvb
, offset
, 1, ENC_NA
);
2509 vw_infoC_tree
= proto_item_add_subtree(vwict
, ett_radiotap_infoc
);
2511 vht_ndp_flag
= (vht_user_pos
& 0x80) >> 7;
2512 vht_mu_mimo_flg
= (vht_user_pos
& 0x08) >> 3;
2513 proto_tree_add_item(vw_infoC_tree
, hf_radiotap_vht_ndp_flg
, tvb
, offset
, 1, ENC_NA
);
2514 if (vht_ndp_flag
== 0)
2516 if (vht_mu_mimo_flg
== 1) {
2517 proto_tree_add_uint(vw_infoC_tree
, hf_radiotap_vht_mu_mimo_flg
,
2518 tvb
, offset
, 1, vht_mu_mimo_flg
);
2520 // extract user Position in case of mu-mimo
2521 proto_tree_add_item(vw_infoC_tree
, hf_radiotap_vht_user_pos
, tvb
, offset
, 1, ENC_NA
);
2524 proto_tree_add_item(vw_infoC_tree
, hf_radiotap_vht_su_mimo_flg
, tvb
, offset
, 1, ENC_NA
);
2530 mpdu_length
= tvb_get_letohs(tvb
, offset
);
2531 if (cmd_type
!= 1) //Checking for Rx and Tx
2533 proto_tree_add_item(vw_l1info_tree
, hf_ixveriwave_frame_length
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
2537 //RadioTapHeader New format for PLCP section
2538 //vw_plcp_info = tvb_get_uint8(tvb, offset);
2540 vwplt
= proto_tree_add_item(tap_tree
, hf_radiotap_plcp_info
, tvb
, offset
, 16, ENC_NA
);
2541 vw_plcpinfo_tree
= proto_item_add_subtree(vwplt
, ett_radiotap_plcp
);
2545 case PLCP_TYPE_LEGACY
:
2546 if (rate_mcs_index
< 4)
2549 * From IEEE Std 802.11-2012:
2551 * According to section 17.2.2 "PPDU format", the PLCP header
2552 * for the High Rate DSSS PHY (11b) has a SIGNAL field that's
2553 * 8 bits, followed by a SERVICE field that's 8 bits, followed
2554 * by a LENGTH field that's 16 bits, followed by a CRC field
2555 * that's 16 bits. The PSDU follows it. Section 17.2.3 "PPDU
2556 * field definitions" describes those fields.
2558 * According to section 19.3.2 "PPDU format", the frames for the
2559 * Extended Rate PHY (11g) either extend the 11b format, using
2560 * additional bits in the SERVICE field, or extend the 11a
2563 proto_tree_add_uint_format(vw_plcpinfo_tree
, hf_radiotap_plcp_type
,
2564 tvb
, offset
-10, 1, plcp_type
, "Format: Legacy CCK ");
2565 proto_tree_add_item(vw_plcpinfo_tree
, hf_radiotap_plcp_signal
,
2566 tvb
, offset
, 1, ENC_LITTLE_ENDIAN
);
2569 proto_tree_add_item(vw_plcpinfo_tree
, hf_radiotap_plcp_locked_clocks
,
2570 tvb
, offset
, 1, ENC_LITTLE_ENDIAN
);
2571 proto_tree_add_item(vw_plcpinfo_tree
, hf_radiotap_plcp_modulation
,
2572 tvb
, offset
, 1, ENC_LITTLE_ENDIAN
);
2573 proto_tree_add_item(vw_plcpinfo_tree
, hf_radiotap_plcp_length_extension
,
2574 tvb
, offset
, 1, ENC_LITTLE_ENDIAN
);
2577 proto_tree_add_item(vw_plcpinfo_tree
, hf_radiotap_plcp_length
,
2578 tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
2581 proto_tree_add_item(vw_plcpinfo_tree
, hf_radiotap_plcp_crc16
,
2582 tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
2585 /* Presumably padding */
2591 * From IEEE Std 802.11-2012:
2593 * According to sections 18.3.2 "PLCP frame format" and 18.3.4
2594 * "SIGNAL field", the PLCP for the OFDM PHY (11a) has a SIGNAL
2595 * field that's 24 bits, followed by a service field that's
2596 * 16 bits, followed by the PSDU. Section 18.3.5.2 "SERVICE
2597 * field" describes the SERVICE field.
2599 * According to section 19.3.2 "PPDU format", the frames for the
2600 * Extended Rate PHY (11g) either extend the 11b format, using
2601 * additional bits in the SERVICE field, or extend the 11a
2604 proto_tree_add_uint_format(vw_plcpinfo_tree
, hf_radiotap_plcp_default
,
2605 tvb
, offset
, 1, plcp_type
, "Format: Legacy OFDM ");
2608 offset
= decode_ofdm_signal(vw_plcpinfo_tree
, tvb
, offset
);
2611 proto_tree_add_item(vw_plcpinfo_tree
, hf_radiotap_ofdm_service
,
2612 tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
2615 /* Presumably just padding */
2620 case PLCP_TYPE_MIXED
:
2622 * From IEEE Std 802.11-2012:
2624 * According to section 20.3.2 "PPDU format", the HT-mixed
2625 * PLCP header has a "Non-HT SIGNAL field" (L-SIG), which
2626 * looks like an 11a SIGNAL field, followed by an HT SIGNAL
2627 * field (HT-SIG) described in section 20.3.9.4.3 "HT-SIG
2630 proto_tree_add_uint_format(vw_plcpinfo_tree
, hf_radiotap_plcp_default
,
2631 tvb
, offset
, 1, plcp_type
, "Format: HT ");
2634 offset
= decode_ofdm_signal(vw_plcpinfo_tree
, tvb
, offset
);
2637 offset
= decode_ht_sig(vw_plcpinfo_tree
, tvb
, offset
, &phdr
);
2639 proto_tree_add_item(vw_plcpinfo_tree
, hf_radiotap_ofdm_service
,
2640 tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
2643 /* Are these 4 bytes significant, or are they just padding? */
2647 case PLCP_TYPE_GREENFIELD
:
2649 * From IEEE Std 802.11-2012:
2651 * According to section 20.3.2 "PPDU format", the HT-greenfield
2652 * PLCP header just has the HT SIGNAL field (HT-SIG) above, with
2656 offset
= decode_ht_sig(vw_plcpinfo_tree
, tvb
, offset
, &phdr
);
2659 * XXX - does this follow the PLCP header for HT greenfield?
2660 * It immediately follows the PLCP header for other PHYs.
2662 proto_tree_add_item(vw_plcpinfo_tree
, hf_radiotap_ofdm_service
,
2663 tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
2667 * XXX - if so, is this padding, or significant?
2672 case PLCP_TYPE_VHT_MIXED
:
2674 * According to section 22.3.2 "VHT PPDU format" of IEEE Std
2675 * 802.11ac-2013, the VHT PLCP header has a "non-HT SIGNAL field"
2676 * (L-SIG), which looks like an 11a SIGNAL field, followed by
2677 * a VHT Signal A field (VHT-SIG-A) described in section
2678 * 22.3.8.3.3 "VHT-SIG-A definition", with training fields
2679 * between it and a VHT Signal B field (VHT-SIG-B) described
2680 * in section 22.3.8.3.6 "VHT-SIG-B definition", followed by
2683 proto_tree_add_uint_format(vw_plcpinfo_tree
, hf_radiotap_plcp_default
,
2684 tvb
, offset
, 1, plcp_type
, "Format: VHT ");
2687 offset
= decode_ofdm_signal(vw_plcpinfo_tree
, tvb
, offset
);
2690 offset
= decode_vht_sig(vw_plcpinfo_tree
, tvb
, offset
, &phdr
);
2694 proto_tree_add_uint_format(vw_plcpinfo_tree
, hf_radiotap_plcp_default
,
2695 tvb
, offset
, 1, plcp_type
, "Format: Null ");
2696 plcp_default
= tvb_get_uint8(tvb
, offset
);
2697 proto_tree_add_uint_format(vw_plcpinfo_tree
, hf_radiotap_plcp_default
,
2698 tvb
, offset
, 1, plcp_default
, "PLCP0: %u ", plcp_default
);
2699 offset
= offset
+ 1;
2700 plcp_default
= tvb_get_uint8(tvb
, offset
);
2701 proto_tree_add_uint_format(vw_plcpinfo_tree
, hf_radiotap_plcp_default
,
2702 tvb
, offset
, 1, plcp_default
, "PLCP1: %u ", plcp_default
);
2703 offset
= offset
+ 1;
2704 plcp_default
= tvb_get_uint8(tvb
, offset
);
2705 proto_tree_add_uint_format(vw_plcpinfo_tree
, hf_radiotap_plcp_default
,
2706 tvb
, offset
, 1, plcp_default
, "PLCP2: %u ", plcp_default
);
2707 offset
= offset
+ 1;
2708 plcp_default
= tvb_get_uint8(tvb
, offset
);
2709 proto_tree_add_uint_format(vw_plcpinfo_tree
, hf_radiotap_plcp_default
,
2710 tvb
, offset
, 1, plcp_default
, "PLCP3: %u ", plcp_default
);
2711 offset
= offset
+ 1;
2712 plcp_default
= tvb_get_uint8(tvb
, offset
);
2713 proto_tree_add_uint_format(vw_plcpinfo_tree
, hf_radiotap_plcp_default
,
2714 tvb
, offset
, 1, plcp_default
, "PLCP4: %u ", plcp_default
);
2715 offset
= offset
+ 1;
2716 plcp_default
= tvb_get_uint8(tvb
, offset
);
2717 proto_tree_add_uint_format(vw_plcpinfo_tree
, hf_radiotap_plcp_default
,
2718 tvb
, offset
, 1, plcp_default
, "PLCP5: %u ", plcp_default
);
2719 offset
= offset
+ 1;
2720 plcp_default
= tvb_get_uint8(tvb
, offset
);
2721 proto_tree_add_uint_format(vw_plcpinfo_tree
, hf_radiotap_plcp_default
,
2722 tvb
, offset
, 1, plcp_default
, "PLCP6: %u ", plcp_default
);
2723 offset
= offset
+ 1;
2724 plcp_default
= tvb_get_uint8(tvb
, offset
);
2725 proto_tree_add_uint_format(vw_plcpinfo_tree
, hf_radiotap_plcp_default
,
2726 tvb
, offset
, 1, plcp_default
, "PLCP7: %u ", plcp_default
);
2727 offset
= offset
+ 1;
2728 plcp_default
= tvb_get_uint8(tvb
, offset
);
2729 proto_tree_add_uint_format(vw_plcpinfo_tree
, hf_radiotap_plcp_default
,
2730 tvb
, offset
, 1, plcp_default
, "PLCP8: %u ", plcp_default
);
2731 offset
= offset
+ 1;
2732 plcp_default
= tvb_get_uint8(tvb
, offset
);
2733 proto_tree_add_uint_format(vw_plcpinfo_tree
, hf_radiotap_plcp_default
,
2734 tvb
, offset
, 1, plcp_default
, "PLCP9: %u ", plcp_default
);
2735 offset
= offset
+ 1;
2736 plcp_default
= tvb_get_uint8(tvb
, offset
);
2737 proto_tree_add_uint_format(vw_plcpinfo_tree
, hf_radiotap_plcp_default
,
2738 tvb
, offset
, 1, plcp_default
, "PLCP10: %u ", plcp_default
);
2739 offset
= offset
+ 1;
2740 plcp_default
= tvb_get_uint8(tvb
, offset
);
2741 proto_tree_add_uint_format(vw_plcpinfo_tree
, hf_radiotap_plcp_default
,
2742 tvb
, offset
, 1, plcp_default
, "PLCP11: %u ", plcp_default
);
2743 offset
= offset
+ 1;
2744 plcp_default
= tvb_get_uint8(tvb
, offset
);
2745 proto_tree_add_uint_format(vw_plcpinfo_tree
, hf_radiotap_plcp_default
,
2746 tvb
, offset
, 1, plcp_default
, "PLCP12: %u ", plcp_default
);
2747 offset
= offset
+ 1;
2748 plcp_default
= tvb_get_uint8(tvb
, offset
);
2749 proto_tree_add_uint_format(vw_plcpinfo_tree
, hf_radiotap_plcp_default
,
2750 tvb
, offset
, 1, plcp_default
, "PLCP13: %u ", plcp_default
);
2751 offset
= offset
+ 1;
2752 plcp_default
= tvb_get_uint8(tvb
, offset
);
2753 proto_tree_add_uint_format(vw_plcpinfo_tree
, hf_radiotap_plcp_default
,
2754 tvb
, offset
, 1, plcp_default
, "PLCP14: %u ", plcp_default
);
2755 offset
= offset
+ 1;
2758 proto_tree_add_item(vw_plcpinfo_tree
, hf_radiotap_rfid
,
2759 tvb
, offset
, 1, ENC_LITTLE_ENDIAN
);
2762 //RadioTapHeader New format for L2-L4_Info
2763 vwl2l4t
= proto_tree_add_item(tap_tree
, hf_radiotap_l2_l4_info
,
2764 tvb
, offset
, 23, ENC_NA
);
2765 vw_l2l4info_tree
= proto_item_add_subtree(vwl2l4t
, ett_radiotap_layer2to4
);
2766 cidv
= ((tvb_get_uint8(tvb
, offset
+3)& 0x20) >> 5);
2767 bssidv
= ((tvb_get_uint8(tvb
, offset
+3)& 0x40) >> 6);
2770 vw_vcid
= (tvb_get_letohs(tvb
, offset
)) &0x0fff;
2773 proto_tree_add_uint(vw_l2l4info_tree
, hf_ixveriwave_vw_vcid
, tvb
, offset
, 2, vw_vcid
);
2777 proto_tree_add_uint_format_value(vw_l2l4info_tree
, hf_ixveriwave_vw_vcid
,
2778 tvb
, offset
, 2, vw_vcid
, "Invalid");
2782 vw_bssid
= ((tvb_get_letohs(tvb
, offset
)) &0x0ff0)>>4;
2785 proto_tree_add_uint(vw_l2l4info_tree
, hf_radiotap_bssid
,
2786 tvb
, offset
, 2, vw_bssid
);
2790 proto_tree_add_uint_format_value(vw_l2l4info_tree
, hf_radiotap_bssid
,
2791 tvb
, offset
, 2, vw_bssid
, "Invalid");
2795 proto_tree_add_item(vw_l2l4info_tree
, hf_radiotap_clientidvalid
, tvb
, offset
, 1, ENC_NA
);
2796 proto_tree_add_item(vw_l2l4info_tree
, hf_radiotap_bssidvalid
, tvb
, offset
, 1, ENC_NA
);
2797 proto_tree_add_item(vw_l2l4info_tree
, hf_radiotap_unicastormulticast
, tvb
, offset
, 1, ENC_NA
);
2804 proto_tree_add_item(vw_l2l4info_tree
, hf_ixveriwave_vw_vcid
,
2805 tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
2809 vw_vcid
= tvb_get_letohs(tvb
, offset
);
2810 proto_tree_add_uint_format_value(vw_l2l4info_tree
, hf_ixveriwave_vw_vcid
,
2811 tvb
, offset
, 2, vw_vcid
, "Invalid");
2815 proto_tree_add_item(vw_l2l4info_tree
, hf_radiotap_clientidvalid
, tvb
, offset
, 1, ENC_NA
);
2819 wlantype = tvb_get_uint8(tvb, offset)& 0x3f;
2820 proto_tree_add_uint(vw_l2l4info_tree, hf_radiotap_wlantype,
2821 tvb, offset, 1, wlantype);
2823 proto_tree_add_item(vw_l2l4info_tree
, hf_radiotap_tid
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
2827 proto_tree_add_item(vw_l2l4info_tree
, hf_radiotap_ac
, tvb
, offset
, 1, ENC_NA
);
2829 l4idv
= (tvb_get_uint8(tvb
, offset
)& 0x10) >> 4;
2830 proto_tree_add_item(vw_l2l4info_tree
, hf_radiotap_l4idvalid
, tvb
, offset
, 1, ENC_NA
);
2831 proto_tree_add_item(vw_l2l4info_tree
, hf_radiotap_containshtfield
, tvb
, offset
, 1, ENC_NA
);
2832 proto_tree_add_item(vw_l2l4info_tree
, hf_radiotap_istypeqos
, tvb
, offset
, 1, ENC_NA
);
2833 flowv
= (tvb_get_uint8(tvb
, offset
)& 0x80) >> 7;
2834 proto_tree_add_item(vw_l2l4info_tree
, hf_radiotap_flowvalid
, tvb
, offset
, 1, ENC_NA
);
2837 proto_tree_add_item_ret_uint(vw_l2l4info_tree
, hf_ixveriwave_vw_seqnum
,
2838 tvb
, offset
, 1, ENC_NA
, &vw_seqnum
);
2842 proto_tree_add_item(vw_l2l4info_tree
, hf_ixveriwave_vw_flowid
,
2843 tvb
, offset
, 3, ENC_LITTLE_ENDIAN
);
2847 proto_tree_add_uint_format_value(vw_l2l4info_tree
, hf_ixveriwave_vw_flowid
,
2848 tvb
, offset
, 2, tvb_get_letohl(tvb
, offset
) & 0xffffff, "Invalid");
2853 proto_tree_add_item(vw_l2l4info_tree
, hf_ixveriwave_vw_l4id
,
2854 tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
2858 proto_tree_add_uint_format_value(vw_l2l4info_tree
, hf_ixveriwave_vw_l4id
,
2859 tvb
, offset
, 2, tvb_get_letohs(tvb
, offset
), "Invalid");
2862 proto_tree_add_item(vw_l2l4info_tree
, hf_radiotap_payloaddecode
, tvb
, offset
, 4, ENC_LITTLE_ENDIAN
);
2865 if (cmd_type
!= 1) { /* then it's an rx case */
2866 /*FPGA_VER_vVW510021 version decodes */
2867 proto_tree_add_bitmask(vw_l2l4info_tree
, tvb
, offset
, hf_radiotap_vw_info_rx
, ett_radiotap_info
, radiotap_info_rx_fields
, ENC_LITTLE_ENDIAN
);
2869 } else { /* it's a tx case */
2870 /* FPGA_VER_vVW510021 and VW_FPGA_VER_vVW510006 tx info decodes same*/
2871 proto_tree_add_bitmask(vw_l2l4info_tree
, tvb
, offset
, hf_radiotap_vw_info_tx
, ett_radiotap_info
, radiotap_info_tx_fields
, ENC_LITTLE_ENDIAN
);
2876 /* build the individual subtrees for the various types of error flags */
2877 /* NOTE: as the upper 16 bits aren't used at the moment, we pretend that */
2878 /* the error flags field is only 16 bits (instead of 32) to save space */
2879 if (cmd_type
!= 1) {
2880 /* then it's an rx case */
2881 static int * const vw_errors_rx_flags
[] = {
2882 &hf_radiotap_vw_errors_rx_sig_field_crc_parity_error
,
2883 &hf_radiotap_vw_errors_rx_non_supported_service_field
,
2884 &hf_radiotap_vw_errors_rx_frame_length_error
,
2885 &hf_radiotap_vw_errors_rx_vht_sig_ab_crc_error
,
2886 &hf_radiotap_vw_errors_rx_crc32_error
,
2887 &hf_radiotap_vw_errors_rx_l2_de_aggregation_error
,
2888 &hf_radiotap_vw_errors_rx_duplicate_mpdu
,
2889 &hf_radiotap_vw_errors_rx_bad_flow_magic_number
,
2890 &hf_radiotap_vw_errors_rx_bad_flow_payload_checksum
,
2891 &hf_radiotap_vw_errors_rx_illegal_vht_sig_value
,
2892 &hf_radiotap_vw_errors_rx_ip_checksum_error
,
2893 &hf_radiotap_vw_errors_rx_l4_checksum_error
,
2894 &hf_radiotap_vw_errors_rx_l1_unsupported_feature
,
2895 &hf_radiotap_vw_errors_rx_l1_packet_termination
,
2896 &hf_radiotap_vw_errors_rx_internal_error_bit15
,
2897 &hf_radiotap_vw_errors_rx_wep_mic_miscompare
,
2898 &hf_radiotap_vw_errors_rx_wep_tkip_rate_exceeded
,
2899 &hf_radiotap_vw_errors_rx_crypto_short_error
,
2900 &hf_radiotap_vw_errors_rx_extiv_fault_a
,
2901 &hf_radiotap_vw_errors_rx_extiv_fault_b
,
2902 &hf_radiotap_vw_errors_rx_internal_error_bit21
,
2903 &hf_radiotap_vw_errors_rx_protected_fault_a
,
2904 &hf_radiotap_vw_errors_rx_rx_mac_crypto_incompatibility
,
2905 &hf_radiotap_vw_errors_rx_factory_debug
,
2906 &hf_radiotap_vw_errors_rx_internal_error_bit32
,
2910 proto_tree_add_bitmask(vw_l2l4info_tree
, tvb
, offset
, hf_radiotap_vw_errors
, ett_radiotap_errors
, vw_errors_rx_flags
, ENC_LITTLE_ENDIAN
);
2912 } else { /* it's a tx case */
2913 static int * const vw_errors_tx_flags
[] = {
2914 &hf_radiotap_vw_errors_tx_2_crc32_error
,
2915 &hf_radiotap_vw_errors_tx_2_ip_checksum_error
,
2916 &hf_radiotap_vw_errors_tx_2_ack_timeout
,
2917 &hf_radiotap_vw_errors_tx_2_cts_timeout
,
2918 &hf_radiotap_vw_errors_tx_2_last_retry_attempt
,
2919 &hf_radiotap_vw_errors_tx_2_internal_error
,
2923 /* FPGA_VER_vVW510021 and VW_FPGA_VER_vVW510006 tx error decodes same*/
2924 proto_tree_add_bitmask(vw_l2l4info_tree
, tvb
, offset
, hf_radiotap_vw_errors
, ett_radiotap_errors
, vw_errors_tx_flags
, ENC_LITTLE_ENDIAN
);
2926 // proto_tree_add_item(vw_l2l4info_tree, hf_ixveriwave_vw_seqnum,
2927 // tvb, offset, 1, vw_seqnum);
2929 proto_tree_add_item(vw_l2l4info_tree
, hf_radiotap_vw_tx_retrycount
, tvb
, offset
+2, 1, ENC_NA
);
2930 proto_tree_add_item(vw_l2l4info_tree
, hf_radiotap_vw_tx_factorydebug
, tvb
, offset
+2, 2, ENC_LITTLE_ENDIAN
);
2934 if (vwl2l4t
&& log_mode
)
2935 proto_item_append_text(vwl2l4t
, " (Reduced)");
2938 proto_item_set_len(tap_tree
, length
+ OCTO_TIMESTAMP_FIELDS_LEN
);
2940 proto_item_set_len(tap_tree
, length
+ OCTO_TIMESTAMP_FIELDS_LEN
+ OCTO_MODIFIED_RF_LEN
);
2942 if (mpdu_length
!= 0) {
2943 /* There's data to dissect; grab the rest of the frame. */
2944 next_tvb
= tvb_new_subset_remaining(tvb
, length
);
2946 /* dissect the 802.11 radio information and header next */
2947 call_dissector_with_data(ieee80211_radio_handle
, next_tvb
, pinfo
, tree
, &phdr
);
2951 void proto_register_ixveriwave(void)
2953 /* true_false_strings for TX/RX and FCS error flags */
2954 static const true_false_string tfs_tx_rx_type
= { "Transmitted", "Received" };
2955 static const true_false_string tfs_fcserr_type
= { "Incorrect", "Correct" };
2956 static const true_false_string tfs_preamble_type
= { "Short", "Long", };
2958 /* true_false_string for decrypt error flag */
2959 static const true_false_string tfs_decrypterr_type
= { "Decrypt Failed", "Decrypt Succeeded" };
2961 /* true_false_string for excess retry error flag */
2962 static const true_false_string tfs_retryerr_type
= {"Excess retry abort", "Retry limit not reached" };
2964 static const true_false_string tfs_legacy_type
= {"802.11b LEGACY CCK", "LEGACY OFDM"};
2966 static const value_string signal_vals
[] = {
2969 { 0x37, "5.5 Mb/s" },
2970 { 0x6e, "11 Mb/s" },
2971 { 0xdc, "22 Mb/s" },
2972 { 0x1e, "DSSS-OFDM" },
2975 static const value_string modulation_vals
[] = {
2980 static const value_string fec_encoding_vals
[] = {
2985 static const value_string modulation_type
[] = {
2988 { 2, "HT-Greenfield" },
2992 static const value_string sbw_type
[] = {
3004 static const value_string mcs
[] = {
3007 { 2, "CCK (4bits)" },
3008 { 3, "CCK (8bits)" },
3009 { 4, "BPSK (1/2)" },
3010 { 5, "BPSK (3/4)" },
3011 { 6, "QPSK (1/2)" },
3012 { 7, "QPSK (3/4)" },
3013 { 8, "16-QAM (1/2)" },
3014 { 9, "16-QAM (3/4)" },
3015 { 10, "64-QAM (1/2)" },
3016 { 11, "64-QAM (3/4)" },
3020 /* Added value_string for encryption type field */
3021 static const value_string encrypt_type
[] = {
3022 { 0, "No encryption" },
3023 { 1, "WEP encryption" },
3024 { 2, "TKIP encryption" },
3025 { 3, "AES-CCMP encryption" },
3029 static const value_string bmbit
[] = {
3035 static const value_string sbw_evm
[] = {
3036 { VHT_BW_20_MHZ
, "20 MHz" },
3037 { VHT_BW_40_MHZ
, "40 MHz" },
3038 { VHT_BW_80_MHZ
, "80 MHz" },
3039 { VHT_BW_160_MHZ
, "160 MHz" },
3042 static const value_string frameformat_type
[] = {
3049 static const value_string crypto_TKIP_type
[] = {
3051 { 0x1, "TKIP Encapped" },
3052 { 0x2, "CCMP Encapped" },
3053 { 0x3, "BIP Encapped" },
3057 static hf_register_info hf
[] = {
3058 { &hf_ixveriwave_frame_length
,
3059 { "Actual frame length", "ixveriwave.frame_length",
3060 FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
3062 { &hf_ixveriwave_vw_msdu_length
,
3063 { "MSDU length", "ixveriwave.msdu_length",
3064 FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
3066 { &hf_ixveriwave_vw_flowid
,
3067 { "Flow ID", "ixveriwave.flowid",
3068 FT_UINT32
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
3070 { &hf_ixveriwave_vw_vcid
,
3071 { "Client ID", "ixveriwave.clientid",
3072 FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
3074 { &hf_ixveriwave_vw_seqnum
,
3075 { "Sequence number", "ixveriwave.seqnum",
3076 FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
3078 { &hf_ixveriwave_vw_mslatency
,
3079 { "Msec latency", "ixveriwave.mslatency",
3080 FT_FLOAT
, 0, NULL
, 0x0, NULL
, HFILL
} },
3082 { &hf_ixveriwave_vw_latency
,
3083 { "Frame latency", "ixveriwave.latency",
3084 FT_UINT32
, BASE_DEC
|BASE_UNIT_STRING
, UNS(&units_nanoseconds
), 0x0, NULL
, HFILL
} },
3086 { &hf_ixveriwave_vw_sig_ts
,
3087 { "Frame Signature Timestamp(32 LSBs)", "ixveriwave.sig_ts",
3088 FT_UINT32
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
3090 { &hf_ixveriwave_vw_delay
,
3091 { "Frame Queue Delay (32 LSBs)", "ixveriwave.delay_ts",
3092 FT_UINT32
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
3094 { &hf_ixveriwave_vw_startt
,
3095 { "Frame start timestamp", "ixveriwave.startt",
3096 FT_UINT64
, BASE_DEC
|BASE_UNIT_STRING
, UNS(&units_microseconds
), 0x0, NULL
, HFILL
} },
3098 { &hf_ixveriwave_vw_endt
,
3099 { "Frame end timestamp", "ixveriwave.endt",
3100 FT_UINT64
, BASE_DEC
|BASE_UNIT_STRING
, UNS(&units_microseconds
), 0x0, NULL
, HFILL
} },
3102 { &hf_ixveriwave_vw_pktdur
,
3103 { "Frame duration", "ixveriwave.pktdur",
3104 FT_UINT32
, BASE_DEC
|BASE_UNIT_STRING
, UNS(&units_nanoseconds
), 0x0, NULL
, HFILL
} },
3106 { &hf_ixveriwave_vw_ifg
,
3107 { "Inter-frame gap (usecs)", "ixveriwave.ifg",
3108 FT_UINT32
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
3111 { &hf_radiotap_rf_info
,
3112 { "RF Header", "ixveriwave.RFInfo",
3113 FT_NONE
, BASE_NONE
, NULL
, 0, NULL
, HFILL
} },
3115 { &hf_radiotap_rfinfo_rfid
,
3116 { "RF_ID", "ixveriwave.rfinfo.rfid",
3117 FT_UINT8
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
3120 { &hf_radiotap_rfinfo_noise
,
3121 { "Noise", "ixveriwave.rfinfo.noise",
3122 FT_FLOAT
, 0, NULL
, 0x0, NULL
, HFILL
} },
3123 { &hf_radiotap_rfinfo_noise_anta
,
3124 { "Noise Antenna A", "ixveriwave.noise_anta",
3125 FT_INT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
3126 { &hf_radiotap_rfinfo_noise_antb
,
3127 { "Noise Antenna B", "ixveriwave.noise_antb",
3128 FT_INT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
3129 { &hf_radiotap_rfinfo_noise_antc
,
3130 { "Noise Antenna C", "ixveriwave.noise_antc",
3131 FT_INT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
3132 { &hf_radiotap_rfinfo_noise_antd
,
3133 { "Noise Antenna D", "ixveriwave.noise_antd",
3134 FT_INT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
3137 { &hf_radiotap_rfinfo_snr
,
3138 { "SNR", "ixveriwave.snr",
3139 FT_NONE
, BASE_NONE
, NULL
, 0x0, "Signal-to-noise ratio", HFILL
} },
3140 { &hf_radiotap_rfinfo_snr_anta
,
3141 { "SNR Antenna A", "ixveriwave.snr_anta",
3142 FT_FLOAT
, BASE_NONE
|BASE_UNIT_STRING
, UNS(&units_decibels
), 0x0, "Signal-to-noise ratio", HFILL
} },
3143 { &hf_radiotap_rfinfo_snr_antb
,
3144 { "SNR Antenna B", "ixveriwave.snr_antb",
3145 FT_FLOAT
, BASE_NONE
|BASE_UNIT_STRING
, UNS(&units_decibels
), 0x0, "Signal-to-noise ratio", HFILL
} },
3146 { &hf_radiotap_rfinfo_snr_antc
,
3147 { "SNR Antenna C", "ixveriwave.snr_antc",
3148 FT_FLOAT
, BASE_NONE
|BASE_UNIT_STRING
, UNS(&units_decibels
), 0x0, "Signal-to-noise ratio", HFILL
} },
3149 { &hf_radiotap_rfinfo_snr_antd
,
3150 { "SNR Antenna D", "ixveriwave.snr_antd",
3151 FT_FLOAT
, BASE_NONE
|BASE_UNIT_STRING
, UNS(&units_decibels
), 0x0, "Signal-to-noise ratio", HFILL
} },
3153 { &hf_radiotap_rfinfo_pfe
,
3154 { "PFE", "ixveriwave.rfinfo.pfe",
3155 FT_NONE
, BASE_NONE
, NULL
, 0x0, "Preamble Frequency Error metric", HFILL
} },
3156 { &hf_radiotap_rfinfo_pfe_anta
,
3157 { "PFE SS#1", "ixveriwave.pfe_anta",
3158 FT_FLOAT
, BASE_NONE
|BASE_UNIT_STRING
, UNS(&units_hz
), 0x0, "Preamble Frequency Error metric", HFILL
} },
3159 { &hf_radiotap_rfinfo_pfe_antb
,
3160 { "PFE SS#2", "ixveriwave.pfe_antb",
3161 FT_FLOAT
, BASE_NONE
|BASE_UNIT_STRING
, UNS(&units_hz
), 0x0, "Preamble Frequency Error metric", HFILL
} },
3162 { &hf_radiotap_rfinfo_pfe_antc
,
3163 { "PFE SS#3", "ixveriwave.pfe_antc",
3164 FT_FLOAT
, BASE_NONE
|BASE_UNIT_STRING
, UNS(&units_hz
), 0x0, "Preamble Frequency Error metric", HFILL
} },
3165 { &hf_radiotap_rfinfo_pfe_antd
,
3166 { "PFE SS#4", "ixveriwave.pfe_antd",
3167 FT_FLOAT
, BASE_NONE
|BASE_UNIT_STRING
, UNS(&units_hz
), 0x0, "Preamble Frequency Error metric", HFILL
} },
3169 { &hf_radiotap_rfinfo_sigdata
,
3170 { "AVG EVM SIG Data", "ixveriwave.rfinfo.sigdata",
3171 FT_NONE
, BASE_NONE
, NULL
, 0x0, "Average EVM for DATA SUBCARRIERS for all SIG symbols of the frame", HFILL
} },
3172 { &hf_radiotap_rfinfo_avg_evm_sd_siga
,
3173 { "AVG EVM SIG Data SS#1", "ixveriwave.avg_evm_sda",
3174 FT_FLOAT
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
3175 { &hf_radiotap_rfinfo_avg_evm_sd_sigb
,
3176 { "AVG EVM SIG Data SS#2", "ixveriwave.avg_evm_sdb",
3177 FT_FLOAT
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
3178 { &hf_radiotap_rfinfo_avg_evm_sd_sigc
,
3179 { "AVG EVM SIG Data SS#3", "ixveriwave.avg_evm_sdc",
3180 FT_FLOAT
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
3181 { &hf_radiotap_rfinfo_avg_evm_sd_sigd
,
3182 { "AVG EVM SIG Data SS#4", "ixveriwave.avg_evm_sdd",
3183 FT_FLOAT
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
3185 { &hf_radiotap_rfinfo_sigpilot
,
3186 { "AVG EVM SIG Pilot", "ixveriwave.rfinfo.sigpilot",
3187 FT_NONE
, BASE_NONE
, NULL
, 0x0, "Average EVM for PILOT SUBCARRIERS for all SIG symbols of the frame", HFILL
} },
3188 { &hf_radiotap_rfinfo_avg_evm_sp_siga
,
3189 { "AVG EVM SIG Pilot SS#1", "ixveriwave.avg_evm_spa",
3190 FT_FLOAT
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
3191 { &hf_radiotap_rfinfo_avg_evm_sp_sigb
,
3192 { "AVG EVM SIG Pilot SS#2", "ixveriwave.avg_evm_spb",
3193 FT_FLOAT
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
3194 { &hf_radiotap_rfinfo_avg_evm_sp_sigc
,
3195 { "AVG EVM SIG Pilot SS#3", "ixveriwave.avg_evm_spc",
3196 FT_FLOAT
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
3197 { &hf_radiotap_rfinfo_avg_evm_sp_sigd
,
3198 { "AVG EVM SIG Pilot SS#4", "ixveriwave.avg_evm_spd",
3199 FT_FLOAT
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
3201 { &hf_radiotap_rfinfo_datadata
,
3202 { "AVG EVM DATA Data", "ixveriwave.rfinfo.datadata",
3203 FT_NONE
, BASE_NONE
, NULL
, 0x0, "Average EVM for DATA SUBCARRIERS for all DATA symbols of the frame", HFILL
} },
3204 { &hf_radiotap_rfinfo_avg_evm_dd_siga
,
3205 { "AVG EVM DATA Data SS#1", "ixveriwave.avg_evm_dda",
3206 FT_FLOAT
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
3207 { &hf_radiotap_rfinfo_avg_evm_dd_sigb
,
3208 { "AVG EVM DATA Data SS#2", "ixveriwave.avg_evm_ddb",
3209 FT_FLOAT
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
3210 { &hf_radiotap_rfinfo_avg_evm_dd_sigc
,
3211 { "AVG EVM DATA Data SS#3", "ixveriwave.avg_evm_ddc",
3212 FT_FLOAT
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
3213 { &hf_radiotap_rfinfo_avg_evm_dd_sigd
,
3214 { "AVG EVM DATA Data SS#4", "ixveriwave.avg_evm_ddd",
3215 FT_FLOAT
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
3217 { &hf_radiotap_rfinfo_datapilot
,
3218 { "AVG EVM DATA Pilot", "ixveriwave.rfinfo.datapilot",
3219 FT_NONE
, BASE_NONE
, NULL
, 0x0, "Average EVM for PILOT SUBCARRIERS for all DATA symbols of the frame", HFILL
} },
3220 { &hf_radiotap_rfinfo_avg_evm_dp_siga
,
3221 { "AVG EVM DATA Pilot SSI-1", "ixveriwave.avg_evm_dpa",
3222 FT_FLOAT
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
3223 { &hf_radiotap_rfinfo_avg_evm_dp_sigb
,
3224 { "AVG EVM DATA Pilot SSI-2", "ixveriwave.avg_evm_dpb",
3225 FT_FLOAT
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
3226 { &hf_radiotap_rfinfo_avg_evm_dp_sigc
,
3227 { "AVG EVM DATA Pilot SSI-3", "ixveriwave.avg_evm_dpc",
3228 FT_FLOAT
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
3229 { &hf_radiotap_rfinfo_avg_evm_dp_sigd
,
3230 { "AVG EVM DATA Pilot SSI-4", "ixveriwave.avg_evm_dpd",
3231 FT_FLOAT
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
3233 { &hf_radiotap_rfinfo_avg_ws_symbol
,
3234 { "EVM Worst Symbol", "ixveriwave.wssymbol",
3235 FT_NONE
, BASE_NONE
, NULL
, 0, "WORST-CASE SYMBOL", HFILL
} },
3236 { &hf_radiotap_rfinfo_avg_evm_ws_siga
,
3237 { "EVM Worst Symbol SS#1", "ixveriwave.avg_evm_wsa",
3238 FT_UINT16
, BASE_DEC
|BASE_UNIT_STRING
, UNS(&units_percent
), 0, NULL
, HFILL
} },
3239 { &hf_radiotap_rfinfo_avg_evm_ws_sigb
,
3240 { "EVM Worst Symbol SS#2", "ixveriwave.avg_evm_wsb",
3241 FT_UINT16
, BASE_DEC
|BASE_UNIT_STRING
, UNS(&units_percent
), 0, NULL
, HFILL
} },
3242 { &hf_radiotap_rfinfo_avg_evm_ws_sigc
,
3243 { "EVM Worst Symbol SS#3", "ixveriwave.avg_evm_wsc",
3244 FT_UINT16
, BASE_DEC
|BASE_UNIT_STRING
, UNS(&units_percent
), 0, NULL
, HFILL
} },
3245 { &hf_radiotap_rfinfo_avg_evm_ws_sigd
,
3246 { "EVM Worst Symbol SS#4", "ixveriwave.avg_evm_wsd",
3247 FT_UINT16
, BASE_DEC
|BASE_UNIT_STRING
, UNS(&units_percent
), 0, NULL
, HFILL
} },
3249 { &hf_radiotap_rfinfo_contextpa
,
3250 { "CONTEXT_A", "ixveriwave.contextpa",
3251 FT_UINT16
, BASE_HEX
, NULL
, 0, NULL
, HFILL
} },
3252 { &hf_radiotap_rfinfo_contextpA_snr_noise_valid
,
3253 { "SNR_NOISE_valid", "ixveriwave.contextpA.snr_noise_valid",
3254 FT_BOOLEAN
, 16, NULL
, 0x0001, NULL
, HFILL
} },
3255 { &hf_radiotap_rfinfo_contextpA_pfe_valid
,
3256 { "PFE_valid", "ixveriwave.contextpA.pfe_valid",
3257 FT_BOOLEAN
, 16, NULL
, 0x0002, NULL
, HFILL
} },
3258 { &hf_radiotap_rfinfo_contextpA_pfe_is_cck
,
3259 { "PFE_is_CCK", "ixveriwave.contextpA.pfe_is_cck",
3260 FT_BOOLEAN
, 16, NULL
, 0x0004, NULL
, HFILL
} },
3261 { &hf_radiotap_rfinfo_contextpA_agc_idle2iqrdy_no_gain_change
,
3262 { "AGC 3", "ixveriwave.contextpA.agc_idle2iqrdy_no_gain_change",
3263 FT_BOOLEAN
, 16, NULL
, 0x0008, "Automatic Gain Control-[3] agc_idle2iqrdy_no_gain_change", HFILL
} },
3264 { &hf_radiotap_rfinfo_contextpA_agc_high_pwr_terminated
,
3265 { "AGC 4", "ixveriwave.contextpA.agc_high_pwr_terminated",
3266 FT_BOOLEAN
, 16, NULL
, 0x0010, "Automatic Gain Control-[4] agc_high_pwr_terminated", HFILL
} },
3267 { &hf_radiotap_rfinfo_contextpA_agc_high_pwr_terminator
,
3268 { "AGC 5", "ixveriwave.contextpA.agc_high_pwr_terminator",
3269 FT_BOOLEAN
, 16, NULL
, 0x0020, "Automatic Gain Control-[5] agc_high_pwr_terminator", HFILL
} },
3271 { &hf_radiotap_rfinfo_contextpA_frame_format
,
3272 { "Frame format", "ixveriwave.contextp.frame_format",
3273 FT_UINT16
, BASE_DEC
, VALS(frameformat_type
), 0x0300, "0: LEGACY. 1:HT. 3:-VHT.", HFILL
} },
3274 { &hf_radiotap_rfinfo_contextpA_ofdm_or_cck
,
3275 { "OFDM or CCK", "ixveriwave.contextp.ofdm_or_cck",
3276 FT_BOOLEAN
, 16, TFS(&tfs_legacy_type
), 0x0400, "0: LEGACY OFDM 1: 802.11b LEGACY CCK", HFILL
} },
3277 { &hf_radiotap_rfinfo_contextpA_sigbandwidth_of_evm
,
3278 { "SigBandWidth of EVM", "ixveriwave.contextp.sigbandwidth_of_evm",
3279 FT_UINT16
, BASE_DEC
, VALS(sbw_evm
), 0x1800, "Signal Bandwidth of EVM measurement", HFILL
} },
3281 { &hf_radiotap_rfinfo_contextpA_qam_modulation
,
3282 { "QAM modulation", "ixveriwave.contextpA.qam_modulation",
3283 FT_UINT16
, BASE_DEC
, NULL
, 0xe000, NULL
, HFILL
} },
3285 { &hf_radiotap_rfinfo_contextpb
,
3286 { "CONTEXT_B", "ixveriwave.contextpb",
3287 FT_UINT16
, BASE_HEX
, NULL
, 0, NULL
, HFILL
} },
3288 { &hf_radiotap_rfinfo_contextpc
,
3289 { "CONTEXT_C", "ixveriwave.contextpc",
3290 FT_UINT16
, BASE_HEX
, NULL
, 0, NULL
, HFILL
} },
3291 { &hf_radiotap_rfinfo_contextpd
,
3292 { "CONTEXT_D", "ixveriwave.contextpd",
3293 FT_UINT16
, BASE_HEX
, NULL
, 0, NULL
, HFILL
} },
3295 { &hf_radiotap_rfinfo_contextpB_snr_noise_valid
,
3296 { "SNR_NOISE_valid", "ixveriwave.contextpB.snr_noise_valid",
3297 FT_BOOLEAN
, 16, NULL
, 0x0001, NULL
, HFILL
} },
3298 { &hf_radiotap_rfinfo_contextpB_pfe_valid
,
3299 { "PFE_valid", "ixveriwave.contextpB.pfe_valid",
3300 FT_BOOLEAN
, 16, NULL
, 0x0002, NULL
, HFILL
} },
3301 { &hf_radiotap_rfinfo_contextpB_pfe_is_cck
,
3302 { "PFE_is_CCK", "ixveriwave.contextpB.pfe_is_cck",
3303 FT_BOOLEAN
, 16, NULL
, 0x0004, NULL
, HFILL
} },
3304 { &hf_radiotap_rfinfo_contextpB_agc_idle2iqrdy_no_gain_change
,
3305 { "AGC 3", "ixveriwave.contextpB.agc_idle2iqrdy_no_gain_change",
3306 FT_BOOLEAN
, 16, NULL
, 0x0008, "Automatic Gain Control-[3] agc_idle2iqrdy_no_gain_change", HFILL
} },
3307 { &hf_radiotap_rfinfo_contextpB_agc_high_pwr_terminated
,
3308 { "AGC 4", "ixveriwave.contextpB.agc_high_pwr_terminated",
3309 FT_BOOLEAN
, 16, NULL
, 0x0010, "Automatic Gain Control-[4] agc_high_pwr_terminated", HFILL
} },
3310 { &hf_radiotap_rfinfo_contextpB_agc_high_pwr_terminator
,
3311 { "AGC 5", "ixveriwave.contextpB.agc_high_pwr_terminator",
3312 FT_BOOLEAN
, 16, NULL
, 0x0020, "Automatic Gain Control-[5] agc_high_pwr_terminator", HFILL
} },
3313 { &hf_radiotap_rfinfo_contextpB_qam_modulation
,
3314 { "QAM modulation", "ixveriwave.contextpB.qam_modulation",
3315 FT_UINT16
, BASE_DEC
, NULL
, 0xe000, NULL
, HFILL
} },
3317 { &hf_radiotap_rfinfo_contextpC_snr_noise_valid
,
3318 { "SNR_NOISE_valid", "ixveriwave.contextpC.snr_noise_valid",
3319 FT_BOOLEAN
, 16, NULL
, 0x0001, NULL
, HFILL
} },
3320 { &hf_radiotap_rfinfo_contextpC_pfe_valid
,
3321 { "PFE_valid", "ixveriwave.contextpC.pfe_valid",
3322 FT_BOOLEAN
, 16, NULL
, 0x0002, NULL
, HFILL
} },
3323 { &hf_radiotap_rfinfo_contextpC_pfe_is_cck
,
3324 { "PFE_is_CCK", "ixveriwave.contextpC.pfe_is_cck",
3325 FT_BOOLEAN
, 16, NULL
, 0x0004, NULL
, HFILL
} },
3326 { &hf_radiotap_rfinfo_contextpC_agc_idle2iqrdy_no_gain_change
,
3327 { "AGC 3", "ixveriwave.contextpC.agc_idle2iqrdy_no_gain_change",
3328 FT_BOOLEAN
, 16, NULL
, 0x0008, "Automatic Gain Control-[3] agc_idle2iqrdy_no_gain_change", HFILL
} },
3329 { &hf_radiotap_rfinfo_contextpC_agc_high_pwr_terminated
,
3330 { "AGC 4", "ixveriwave.contextpC.agc_high_pwr_terminated",
3331 FT_BOOLEAN
, 16, NULL
, 0x0010, "Automatic Gain Control-[4] agc_high_pwr_terminated", HFILL
} },
3332 { &hf_radiotap_rfinfo_contextpC_agc_high_pwr_terminator
,
3333 { "AGC 5", "ixveriwave.contextpC.agc_high_pwr_terminator",
3334 FT_BOOLEAN
, 16, NULL
, 0x0020, "Automatic Gain Control-[5] agc_high_pwr_terminator", HFILL
} },
3335 { &hf_radiotap_rfinfo_contextpC_qam_modulation
,
3336 { "QAM modulation", "ixveriwave.contextpC.qam_modulation",
3337 FT_UINT16
, BASE_DEC
, NULL
, 0xe000, NULL
, HFILL
} },
3339 { &hf_radiotap_rfinfo_contextpD_snr_noise_valid
,
3340 { "SNR_NOISE_valid", "ixveriwave.contextpD.snr_noise_valid",
3341 FT_BOOLEAN
, 16, NULL
, 0x0001, NULL
, HFILL
} },
3342 { &hf_radiotap_rfinfo_contextpD_pfe_valid
,
3343 { "PFE_valid", "ixveriwave.contextpD.pfe_valid",
3344 FT_BOOLEAN
, 16, NULL
, 0x0002, NULL
, HFILL
} },
3345 { &hf_radiotap_rfinfo_contextpD_pfe_is_cck
,
3346 { "PFE_is_CCK", "ixveriwave.contextpD.pfe_is_cck",
3347 FT_BOOLEAN
, 16, NULL
, 0x0004, NULL
, HFILL
} },
3348 { &hf_radiotap_rfinfo_contextpD_agc_idle2iqrdy_no_gain_change
,
3349 { "AGC 3", "ixveriwave.contextpD.agc_idle2iqrdy_no_gain_change",
3350 FT_BOOLEAN
, 16, NULL
, 0x0008, "Automatic Gain Control-[3] agc_idle2iqrdy_no_gain_change", HFILL
} },
3351 { &hf_radiotap_rfinfo_contextpD_agc_high_pwr_terminated
,
3352 { "AGC 4", "ixveriwave.contextpD.agc_high_pwr_terminated",
3353 FT_BOOLEAN
, 16, NULL
, 0x0010, "Automatic Gain Control-[4] agc_high_pwr_terminated", HFILL
} },
3354 { &hf_radiotap_rfinfo_contextpD_agc_high_pwr_terminator
,
3355 { "AGC 5", "ixveriwave.contextpD.agc_high_pwr_terminator",
3356 FT_BOOLEAN
, 16, NULL
, 0x0020, "Automatic Gain Control-[5] agc_high_pwr_terminator", HFILL
} },
3357 { &hf_radiotap_rfinfo_contextpD_qam_modulation
,
3358 { "QAM modulation", "ixveriwave.contextpD.qam_modulation",
3359 FT_UINT16
, BASE_DEC
, NULL
, 0xe000, NULL
, HFILL
} },
3361 { &hf_radiotap_rfinfo_frameformatA
,
3362 { "Frame format", "ixveriwave.rfinfo.frameformatA",
3363 FT_UINT8
, BASE_DEC
, VALS(frameformat_type
), 0x03, NULL
, HFILL
} },
3364 { &hf_radiotap_rfinfo_frameformatB
,
3365 { "Frame format", "ixveriwave.rfinfo.frameformatB",
3366 FT_UINT8
, BASE_DEC
, VALS(frameformat_type
), 0x03, NULL
, HFILL
} },
3367 { &hf_radiotap_rfinfo_frameformatC
,
3368 { "Frame format", "ixveriwave.rfinfo.frameformatC",
3369 FT_UINT8
, BASE_DEC
, VALS(frameformat_type
), 0x03, NULL
, HFILL
} },
3370 { &hf_radiotap_rfinfo_frameformatD
,
3371 { "Frame format", "ixveriwave.rfinfo.frameformatD",
3372 FT_UINT8
, BASE_DEC
, VALS(frameformat_type
), 0x03, NULL
, HFILL
} },
3373 { &hf_radiotap_rfinfo_legacytypeA
,
3374 { "Frame format", "ixveriwave.rfinfo.legacytypeA",
3375 FT_BOOLEAN
, 8, TFS(&tfs_legacy_type
), 0x04, NULL
, HFILL
} },
3376 { &hf_radiotap_rfinfo_legacytypeB
,
3377 { "Frame format", "ixveriwave.rfinfo.legacytypeB",
3378 FT_BOOLEAN
, 8, TFS(&tfs_legacy_type
), 0x04, NULL
, HFILL
} },
3379 { &hf_radiotap_rfinfo_legacytypeC
,
3380 { "Frame format", "ixveriwave.rfinfo.legacytypeC",
3381 FT_BOOLEAN
, 8, TFS(&tfs_legacy_type
), 0x04, NULL
, HFILL
} },
3382 { &hf_radiotap_rfinfo_legacytypeD
,
3383 { "Frame format", "ixveriwave.rfinfo.legacytypeD",
3384 FT_BOOLEAN
, 8, TFS(&tfs_legacy_type
), 0x04, NULL
, HFILL
} },
3385 { &hf_radiotap_rfinfo_sigbwevmA
,
3386 { "SigBandWidth of EVM", "ixveriwave.rfinfo.sigbwevmA",
3387 FT_UINT8
, BASE_DEC
, VALS(sbw_evm
), 0x18, NULL
, HFILL
} },
3388 { &hf_radiotap_rfinfo_sigbwevmB
,
3389 { "SigBandWidth of EVM", "ixveriwave.rfinfo.sigbwevmB",
3390 FT_UINT8
, BASE_DEC
, VALS(sbw_evm
), 0x18, NULL
, HFILL
} },
3391 { &hf_radiotap_rfinfo_sigbwevmC
,
3392 { "SigBandWidth of EVM", "ixveriwave.rfinfo.sigbwevmC",
3393 FT_UINT8
, BASE_DEC
, VALS(sbw_evm
), 0x18, NULL
, HFILL
} },
3394 { &hf_radiotap_rfinfo_sigbwevmD
,
3395 { "SigBandWidth of EVM", "ixveriwave.rfinfo.sigbwevmD",
3396 FT_UINT8
, BASE_DEC
, VALS(sbw_evm
), 0x18, NULL
, HFILL
} },
3398 { &hf_radiotap_rfinfo_tbd
,
3399 { "RF_TBD", "ixveriwave.rfinfo.tbd",
3400 FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
3403 /* Fields for both Ethernet and WLAN */
3405 { &hf_ixveriwave_vw_l4id
,
3406 { "Layer 4 ID", "ixveriwave.layer4id",
3407 FT_UINT32
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
3409 /* Ethernet fields */
3411 { &hf_ixveriwave_vwf_txf
,
3412 { "Frame direction", "ixveriwave.vwflags.txframe",
3413 FT_BOOLEAN
, 8, TFS(&tfs_tx_rx_type
), ETHERNETTAP_VWF_TXF
, NULL
, HFILL
} },
3415 { &hf_ixveriwave_vwf_fcserr
,
3416 { "MAC FCS check", "ixveriwave.vwflags.fcserr",
3417 FT_BOOLEAN
, 8, TFS(&tfs_fcserr_type
), ETHERNETTAP_VWF_FCSERR
, NULL
, HFILL
} },
3419 { &hf_ixveriwave_vw_info
,
3420 { "Info field", "ixveriwave.eth_info",
3421 FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
3423 /* rx info decodes for fpga ver VW510024 */
3424 /*all are reserved*/
3426 /* rx info decodes for fpga ver VW510012 */
3427 { &hf_ixveriwave_vw_info_go_no_flow
,
3428 { "Go no flow", "ixveriwave.eth_info.go_no_flow",
3429 FT_BOOLEAN
, 16, NULL
, 0x0100, NULL
, HFILL
} },
3430 { &hf_ixveriwave_vw_info_go_with_flow
,
3431 { "Go with flow", "ixveriwave.eth_info.go_with_flow",
3432 FT_BOOLEAN
, 16, NULL
, 0x0200, NULL
, HFILL
} },
3434 /* tx info decodes for VW510024 and 510012 */
3435 /* we don't need to enumerate through these, basically for both,
3436 info is the retry count. for 510024, the 15th bit indicates if
3437 the frame was impressed on the enet tx media with one or more octets having tx_en
3438 framing signal deasserted. this is caused by software setting the drain all register bit.
3440 { &hf_ixveriwave_vw_info_retry_count
,
3441 { "Retry count", "ixveriwave.eth_info.retry_count",
3442 FT_UINT16
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
3444 { &hf_ixveriwave_vw_error
,
3445 { "Errors", "ixveriwave.eth_error",
3446 FT_UINT32
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
3448 /* rx error decodes for fpga ver VW510012 and VW510024 */
3449 /* tx error decodes for VW510024 and previous versions */
3451 { &hf_ixveriwave_vw_error_1_alignment_error
,
3452 { "Alignment error", "ixveriwave.eth_error.rx_alignment_error",
3453 FT_BOOLEAN
, 12, NULL
, 0x001, NULL
, HFILL
} },
3455 { &hf_ixveriwave_vw_error_1_packet_fcs_error
,
3456 { "Packet FCS error", "ixveriwave.eth_error.rx_packet_fcs_error",
3457 FT_BOOLEAN
, 12, NULL
, 0x002, NULL
, HFILL
} },
3459 { &hf_ixveriwave_vw_error_1_bad_magic_byte_signature
,
3460 { "Bad magic byte signature", "ixveriwave.eth_error.rx_bad_magic_byte_signature",
3461 FT_BOOLEAN
, 12, NULL
, 0x004, NULL
, HFILL
} },
3463 { &hf_ixveriwave_vw_error_1_bad_payload_checksum
,
3464 { "Bad payload checksum", "ixveriwave.eth_error.rx_bad_payload_checksum",
3465 FT_BOOLEAN
, 12, NULL
, 0x008, NULL
, HFILL
} },
3467 { &hf_ixveriwave_vw_error_1_frame_too_long
,
3468 { "Frame too long error", "ixveriwave.eth_error.rx_frame_too_long",
3469 FT_BOOLEAN
, 12, NULL
, 0x010, NULL
, HFILL
} },
3471 { &hf_ixveriwave_vw_error_1_ip_checksum_error
,
3472 { "IP checksum error", "ixveriwave.eth_error.rx_ip_checksum_error",
3473 FT_BOOLEAN
, 12, NULL
, 0x020, NULL
, HFILL
} },
3475 { &hf_ixveriwave_vw_error_1_l4_checksum_error
,
3476 { "L4 (TCP/ICMP/IGMP/UDP) checksum error", "ixveriwave.eth_error.rx_l4_checksum_error",
3477 FT_BOOLEAN
, 12, NULL
, 0x040, NULL
, HFILL
} },
3479 { &hf_ixveriwave_vw_error_1_id_mismatch
,
3480 { "ID mismatch(for fpga510012)", "ixveriwave.eth_error.rx_id_mismatch",
3481 FT_BOOLEAN
, 12, NULL
, 0x080, NULL
, HFILL
} },
3483 { &hf_ixveriwave_vw_error_1_length_error
,
3484 { "Length error", "ixveriwave.eth_error.rx_length_error",
3485 FT_BOOLEAN
, 12, NULL
, 0x100, NULL
, HFILL
} },
3487 { &hf_ixveriwave_vw_error_1_underflow
,
3488 { "Underflow", "ixveriwave.eth_error.rx_underflow",
3489 FT_BOOLEAN
, 12, NULL
, 0x200, NULL
, HFILL
} },
3491 { &hf_ixveriwave_vw_error_1_late_collision
,
3492 { "Late collision", "ixveriwave.eth_error.late_collision",
3493 FT_BOOLEAN
, 12, NULL
, 0x400, NULL
, HFILL
} },
3494 { &hf_ixveriwave_vw_error_1_excessive_collisions
,
3495 { "Excessive collisions", "ixveriwave.eth_error.excessive_collisions",
3496 FT_BOOLEAN
, 12, NULL
, 0x800, NULL
, HFILL
} },
3497 /*all other bits are reserved */
3500 { &hf_radiotap_flags
,
3501 { "Flags", "ixveriwave.flags",
3502 FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
3504 { &hf_radiotap_flags_preamble
,
3505 { "Preamble", "ixveriwave.flags.preamble",
3506 FT_BOOLEAN
, 12, TFS(&tfs_preamble_type
), FLAGS_SHORTPRE
,
3507 "Sent/Received with short preamble", HFILL
} },
3508 { &hf_radiotap_flags_wep
,
3509 { "WEP", "ixveriwave.flags.wep",
3510 FT_BOOLEAN
, 12, NULL
, FLAGS_WEP
,
3511 "Sent/Received with WEP encryption", HFILL
} },
3512 { &hf_radiotap_flags_ht
,
3513 { "HT frame", "ixveriwave.flags.ht",
3514 FT_BOOLEAN
, 12, NULL
, FLAGS_CHAN_HT
, NULL
, HFILL
} },
3515 { &hf_radiotap_flags_vht
,
3516 { "VHT frame", "ixveriwave.flags.vht",
3517 FT_BOOLEAN
, 12, NULL
, FLAGS_CHAN_VHT
, NULL
, HFILL
} },
3518 { &hf_radiotap_flags_short_gi
,
3519 { "Short guard interval", "ixveriwave.flags.short_gi",
3520 FT_BOOLEAN
, 12, NULL
, FLAGS_CHAN_SHORTGI
, NULL
, HFILL
} },
3521 { &hf_radiotap_flags_40mhz
,
3522 { "40 MHz channel bandwidth", "ixveriwave.flags.40mhz",
3523 FT_BOOLEAN
, 12, NULL
, FLAGS_CHAN_40MHZ
, NULL
, HFILL
} },
3524 { &hf_radiotap_flags_80mhz
,
3525 { "80 MHz channel bandwidth", "ixveriwave.flags.80mhz",
3526 FT_BOOLEAN
, 12, NULL
, FLAGS_CHAN_80MHZ
, NULL
, HFILL
} },
3528 { &hf_radiotap_datarate
,
3529 { "Data rate", "ixveriwave.datarate",
3530 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
3531 "Speed this frame was sent/received at", HFILL
} },
3533 { &hf_radiotap_mcsindex
,
3534 { "MCS index", "ixveriwave.mcs",
3535 FT_UINT8
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
3538 { "Number of spatial streams", "ixveriwave.nss",
3539 FT_UINT8
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
3541 { &hf_radiotap_dbm_anta
,
3542 { "SSI Signal for Antenna A", "ixveriwave.dbm_anta",
3543 FT_INT32
, BASE_DEC
|BASE_UNIT_STRING
, UNS(&units_dbm
), 0x0,
3544 "RF signal power at the antenna from a fixed, arbitrary value in decibels from one milliwatt", HFILL
} },
3545 { &hf_radiotap_dbm_antb
,
3546 { "SSI Signal for Antenna B", "ixveriwave.dbm_antb",
3547 FT_INT32
, BASE_DEC
|BASE_UNIT_STRING
, UNS(&units_dbm
), 0x0,
3548 "RF signal power at the antenna from a fixed, arbitrary value in decibels from one milliwatt", HFILL
} },
3549 { &hf_radiotap_dbm_antc
,
3550 { "SSI Signal for Antenna C", "ixveriwave.dbm_antc",
3551 FT_INT32
, BASE_DEC
|BASE_UNIT_STRING
, UNS(&units_dbm
), 0x0,
3552 "RF signal power at the antenna from a fixed, arbitrary value in decibels from one milliwatt", HFILL
} },
3553 { &hf_radiotap_dbm_antd
,
3554 { "SSI Signal for Antenna D", "ixveriwave.dbm_antd",
3555 FT_INT32
, BASE_DEC
|BASE_UNIT_STRING
, UNS(&units_dbm
), 0x0,
3556 "RF signal power at the antenna from a fixed, arbitrary value in decibels from one milliwatt", HFILL
} },
3558 /* All other enumerations are reserved.*/
3560 { &hf_radiotap_plcptype
,
3561 { "VHT_NDP", "ixveriwave.plcptype",
3562 FT_UINT8
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
3564 /* VeriWave-specific flags */
3565 { &hf_radiotap_vwf_txf
,
3566 { "Frame direction", "ixveriwave.vwflags.txframe",
3567 FT_BOOLEAN
, 16, TFS(&tfs_tx_rx_type
), VW_RADIOTAPF_TXF
, NULL
, HFILL
} },
3568 { &hf_radiotap_vwf_fcserr
,
3569 { "MAC FCS check", "ixveriwave.vwflags.fcserr",
3570 FT_BOOLEAN
, 16, TFS(&tfs_fcserr_type
), VW_RADIOTAPF_FCSERR
, NULL
, HFILL
} },
3571 { &hf_radiotap_vwf_dcrerr
,
3572 { "Decryption error", "ixveriwave.vwflags.decrypterr",
3573 FT_BOOLEAN
, 16, TFS(&tfs_decrypterr_type
), VW_RADIOTAPF_DCRERR
, NULL
, HFILL
} },
3574 { &hf_radiotap_vwf_retrerr
,
3575 { "TX retry limit", "ixveriwave.vwflags.retryerr",
3576 FT_BOOLEAN
, 16, TFS(&tfs_retryerr_type
), VW_RADIOTAPF_RETRERR
, NULL
, HFILL
} },
3577 { &hf_radiotap_vwf_enctype
,
3578 { "Encryption type", "ixveriwave.vwflags.encrypt",
3579 FT_UINT16
, BASE_DEC
, VALS(encrypt_type
), VW_RADIOTAPF_ENCMSK
, NULL
, HFILL
} },
3581 { &hf_radiotap_vw_ht_length
,
3582 { "HT length", "ixveriwave.ht_length",
3583 FT_UINT16
, BASE_DEC
, NULL
, 0x0, "Total IP length (incl all pieces of an aggregate)", HFILL
} },
3585 { &hf_radiotap_vw_info
,
3586 { "Info field", "ixveriwave.wlan_info",
3587 FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
3589 /*v510006 uses bits */
3591 { &hf_radiotap_vw_info_2_ack_withheld_from_frame
,
3592 { "ACK withheld from frame", "ixveriwave.wlan_info.ack_withheld_from_frame",
3593 FT_BOOLEAN
, 16, NULL
, 0x0100, NULL
, HFILL
} },
3594 { &hf_radiotap_vw_info_2_sent_cts_to_self_before_data
,
3595 { "Sent CTS to self before data", "ixveriwave.wlan_info.sent_cts_to_self_before_data",
3596 FT_BOOLEAN
, 16, NULL
, 0x0200, NULL
, HFILL
} },
3597 { &hf_radiotap_vw_info_2_mpdu_of_a_mpdu
,
3598 { "MPDU of A-MPDU", "ixveriwave.wlan_info.mpdu_of_a_mpdu",
3599 FT_BOOLEAN
, 16, NULL
, INFO_MPDU_OF_A_MPDU
, NULL
, HFILL
} },
3600 { &hf_radiotap_vw_info_2_first_mpdu_of_a_mpdu
,
3601 { "First MPDU of A-MPDU", "ixveriwave.wlan_info.first_mpdu_of_a_mpdu",
3602 FT_BOOLEAN
, 16, NULL
, INFO_FIRST_MPDU_OF_A_MPDU
, NULL
, HFILL
} },
3603 { &hf_radiotap_vw_info_2_last_pdu_of_a_mpdu
,
3604 { "Last MPDU of A-MPDU", "ixveriwave.wlan_info.last_pdu_of_a_mpdu",
3605 FT_BOOLEAN
, 16, NULL
, INFO_LAST_MPDU_OF_A_MPDU
, NULL
, HFILL
} },
3606 { &hf_radiotap_vw_info_2_msdu_of_a_msdu
,
3607 { "MSDU of A-MSDU", "ixveriwave.wlan_info.msdu_of_a_msdu",
3608 FT_BOOLEAN
, 16, NULL
, INFO_MSDU_OF_A_MSDU
, NULL
, HFILL
} },
3609 { &hf_radiotap_vw_info_2_first_msdu_of_a_msdu
,
3610 { "First MSDU of A-MSDU", "ixveriwave.wlan_info.first_msdu_of_a_msdu",
3611 FT_BOOLEAN
, 16, NULL
, INFO_FIRST_MSDU_OF_A_MSDU
, NULL
, HFILL
} },
3612 { &hf_radiotap_vw_info_2_last_msdu_of_a_msdu
,
3613 { "Last MSDU of A-MSDU", "ixveriwave.wlan_info.last_msdu_of_a_msdu",
3614 FT_BOOLEAN
, 16, NULL
, INFO_LAST_MSDU_OF_A_MSDU
, NULL
, HFILL
} },
3616 { &hf_radiotap_vw_errors
,
3617 { "Errors", "ixveriwave.errors",
3618 FT_UINT32
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
3620 /* rx error decodes for fpga ver VW510021 */
3621 { &hf_radiotap_vw_errors_rx_2_crc16_or_parity_error
,
3622 { "CRC16 or parity error", "ixveriwave.errors.crc16_or_parity_error",
3623 FT_BOOLEAN
, 16, NULL
, 0x0001, "error bit 0", HFILL
} },
3624 { &hf_radiotap_vw_errors_rx_2_non_supported_rate_or_service_field
,
3625 { "Non-supported rate or service field", "ixveriwave.errors.supported_rate_or_service_field",
3626 FT_BOOLEAN
, 16, NULL
, 0x0002, NULL
, HFILL
} },
3627 { &hf_radiotap_vw_errors_rx_2_short_frame
,
3628 { "Short frame error. Frame is shorter than length.", "ixveriwave.errors.short_frame",
3629 FT_BOOLEAN
, 16, NULL
, 0x0004, NULL
, HFILL
} },
3630 { &hf_radiotap_vw_errors_rx_2_fcs_error
,
3631 { "FCS error", "ixveriwave.errors.fcs_error",
3632 FT_BOOLEAN
, 16, NULL
, 0x0010, NULL
, HFILL
} },
3633 { &hf_radiotap_vw_errors_rx_2_l2_de_aggregation_error
,
3634 { "L2 de-aggregation error", "ixveriwave.errors.de_aggregation_error",
3635 FT_BOOLEAN
, 16, NULL
, 0x0020, NULL
, HFILL
} },
3636 { &hf_radiotap_vw_errors_rx_2_duplicate_mpdu
,
3637 { "Duplicate MPDU", "ixveriwave.errors.duplicate_mpdu",
3638 FT_BOOLEAN
, 16, NULL
, 0x0040, NULL
, HFILL
} },
3639 { &hf_radiotap_vw_errors_rx_2_bad_flow_magic_number
,
3640 { "Bad_Sig: Bad flow magic number (includes bad flow crc16)", "ixveriwave.errors.bad_flow_magic_number",
3641 FT_BOOLEAN
, 16, NULL
, 0x0080, NULL
, HFILL
} },
3642 { &hf_radiotap_vw_errors_rx_2_flow_payload_checksum_error
,
3643 { "Bad flow payload checksum", "ixveriwave.errors.flow_payload_checksum_error",
3644 FT_BOOLEAN
, 16, NULL
, 0x0100, NULL
, HFILL
} },
3645 { &hf_radiotap_vw_errors_rx_2_ip_checksum_error
,
3646 { "IP checksum error", "ixveriwave.errors.ip_checksum_error",
3647 FT_BOOLEAN
, 16, NULL
, 0x0400, NULL
, HFILL
} },
3648 { &hf_radiotap_vw_errors_rx_2_l4_checksum_error
,
3649 { "L4 (TCP/ICMP/IGMP/UDP) checksum error", "ixveriwave.errors.l4_checksum_error",
3650 FT_BOOLEAN
, 16, NULL
, 0x0800, NULL
, HFILL
} },
3652 /* tx error decodes for fpga ver VW510021 */
3653 { &hf_radiotap_vw_errors_tx_2_crc32_error
,
3654 { "CRC32 Error", "ixveriwave.errors.crc32_error",
3655 FT_BOOLEAN
, 32, NULL
, 0x00000002, NULL
, HFILL
} },
3656 { &hf_radiotap_vw_errors_tx_2_ip_checksum_error
,
3657 { "IP Checksum Error", "ixveriwave.errors.ip_checksum_error",
3658 FT_BOOLEAN
, 32, NULL
, 0x00000020, NULL
, HFILL
} },
3659 { &hf_radiotap_vw_errors_tx_2_ack_timeout
,
3660 { "ACK Timeout", "ixveriwave.errors.ack_timeout",
3661 FT_BOOLEAN
, 32, NULL
, 0x00000100, NULL
, HFILL
} },
3662 { &hf_radiotap_vw_errors_tx_2_cts_timeout
,
3663 { "CTS Timeout", "ixveriwave.errors.cts_timeout",
3664 FT_BOOLEAN
, 32, NULL
, 0x00000200, NULL
, HFILL
} },
3665 { &hf_radiotap_vw_errors_tx_2_last_retry_attempt
,
3666 { "Last Retry Attempt for this MPDU", "ixveriwave.errors.last_retry_attempt",
3667 FT_BOOLEAN
, 32, NULL
, 0x00000400, NULL
, HFILL
} },
3668 { &hf_radiotap_vw_errors_tx_2_internal_error
,
3669 { "Internal Error", "ixveriwave.errors.internal_error",
3670 FT_BOOLEAN
, 32, NULL
, 0x80000000, NULL
, HFILL
} },
3672 { &hf_radiotap_vht_mu_mimo_flg
,
3673 { "VHT MU MIMO", "ixveriwave.VHT_mu_mimo_flg",
3674 FT_UINT8
, BASE_DEC
, NULL
, 0x08, NULL
, HFILL
} },
3675 { &hf_radiotap_vht_user_pos
,
3676 { "VHT User Pos", "ixveriwave.VHT_user_pos",
3677 FT_UINT8
, BASE_DEC
, NULL
, 0x03, NULL
, HFILL
} },
3678 { &hf_radiotap_vht_su_mimo_flg
,
3679 { "VHT SU MIMO", "ixveriwave.VHT_su_mimo_flg",
3680 FT_UINT8
, BASE_DEC
, NULL
, 0x04, NULL
, HFILL
} },
3682 { &hf_radiotap_l1info
,
3683 { "Layer 1 Header", "ixveriwave.l1info",
3684 FT_NONE
, BASE_NONE
, NULL
, 0, NULL
, HFILL
} },
3686 { &hf_radiotap_l1info_preamble
,
3687 { "Preamble", "ixveriwave.l1info.preamble",
3688 FT_BOOLEAN
, BASE_NONE
, TFS(&tfs_preamble_type
), 0x0,
3689 "Sent/Received with short preamble", HFILL
} },
3691 { &hf_radiotap_l1info_rateindex
,
3692 { "Rate index", "ixveriwave.l1info.rate",
3693 FT_UINT8
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
3695 { &hf_radiotap_l1info_ht_mcsindex
,
3696 { "MCS index", "ixveriwave.mcs",
3697 FT_UINT8
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
3699 { &hf_radiotap_l1info_vht_mcsindex
,
3700 { "MCS index", "ixveriwave.mcs",
3701 FT_UINT8
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
3703 { &hf_radiotap_l1info_nss
,
3704 { "Number of spatial streams", "ixveriwave.nss",
3705 FT_UINT8
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
3707 { &hf_radiotap_l1info_transmitted
,
3708 { "Frame direction", "ixveriwave.txframe",
3709 FT_BOOLEAN
, BASE_NONE
, TFS(&tfs_tx_rx_type
), 0x0, NULL
, HFILL
} },
3711 { &hf_radiotap_sigbandwidth
,
3712 { "Signaling Band Width", "ixveriwave.sigbandwidth",
3713 FT_UINT8
, BASE_DEC
, VALS(sbw_type
), 0x0, NULL
, HFILL
} },
3716 { "RSSI", "ixveriwave.rssi",
3717 FT_UINT32
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
3719 { &hf_radiotap_modulation
,
3720 { "Modulation", "ixveriwave.Modulation",
3721 FT_UINT8
, BASE_DEC
, VALS(modulation_type
), 0x0, NULL
, HFILL
} },
3723 { &hf_radiotap_dbm_tx_anta
,
3724 { "TX Power for Antenna A", "ixveriwave.dbm_anta",
3725 FT_INT32
, BASE_DEC
|BASE_UNIT_STRING
, UNS(&units_dbm
), 0x0,
3726 "RF signal power at the antenna from a fixed, arbitrary value in decibels from one milliwatt", HFILL
} },
3727 { &hf_radiotap_dbm_tx_antb
,
3728 { "TX Power for Antenna B", "ixveriwave.dbm_antb",
3729 FT_INT32
, BASE_DEC
, NULL
, 0x0,
3730 "RF signal power at the antenna from a fixed, arbitrary value in decibels from one milliwatt", HFILL
} },
3731 { &hf_radiotap_dbm_tx_antc
,
3732 { "TX Power for Antenna C", "ixveriwave.dbm_antc",
3733 FT_INT32
, BASE_DEC
, NULL
, 0x0,
3734 "RF signal power at the antenna from a fixed, arbitrary value in decibels from one milliwatt", HFILL
} },
3735 { &hf_radiotap_dbm_tx_antd
,
3736 { "TX Power for Antenna D", "ixveriwave.dbm_antd",
3737 FT_INT32
, BASE_DEC
, NULL
, 0x0,
3738 "RF signal power at the antenna from a fixed, arbitrary value in decibels from one milliwatt", HFILL
} },
3740 { &hf_radiotap_sigbandwidthmask
,
3741 { "Signaling Band Width Mask", "ixveriwave.sigbandwidthmask",
3742 FT_UINT8
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
3743 { &hf_radiotap_antennaportenergydetect
,
3744 { "Antenna Port Energy Detect", "ixveriwave.antennaportenergydetect",
3745 FT_UINT8
, BASE_HEX
, NULL
, 0x0F, NULL
, HFILL
} },
3746 { &hf_radiotap_tx_antennaselect
,
3747 { "Antenna Select", "ixveriwave.tx.antennaselect",
3748 FT_UINT8
, BASE_HEX
, NULL
, 0x07, NULL
, HFILL
} },
3749 { &hf_radiotap_tx_stbcselect
,
3750 { "STBC Select", "ixveriwave.tx.stbcselect",
3751 FT_UINT8
, BASE_HEX
, NULL
, 0x18, NULL
, HFILL
} },
3752 { &hf_radiotap_mumask
,
3753 { "MU_MASK", "ixveriwave.mumask",
3754 FT_UINT8
, BASE_HEX
, NULL
, 0xF0, NULL
, HFILL
} },
3756 {&hf_radiotap_l1infoc
,
3757 {"L1InfoC", "ixveriwave.l1InfoC",
3758 FT_NONE
, BASE_NONE
, NULL
, 0x0, NULL
, HFILL
} },
3759 { &hf_radiotap_vht_ndp_flg
,
3760 { "NDP", "ixveriwave.VHT_ndp_flg",
3761 FT_UINT8
, BASE_HEX
, NULL
, 0x80, NULL
, HFILL
} },
3763 { &hf_radiotap_plcp_info
,
3764 {"PLCP Header", "ixveriwave.plcp_info",
3765 FT_NONE
, BASE_NONE
, NULL
, 0, NULL
, HFILL
} },
3766 { &hf_radiotap_plcp_type
,
3767 { "PLCP_TYPE", "ixveriwave.plcp.type",
3768 FT_UINT8
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
3769 { &hf_radiotap_plcp_default
,
3770 { "PLCP", "ixveriwave.plcp",
3771 FT_UINT8
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
3773 { &hf_radiotap_plcp_signal
,
3774 { "Signal", "ixveriwave.plcp.signal",
3775 FT_UINT8
, BASE_HEX
, VALS(signal_vals
), 0x0, NULL
, HFILL
} },
3776 { &hf_radiotap_plcp_locked_clocks
,
3777 { "Locked clocks", "ixveriwave.plcp.locked_clocks",
3778 FT_BOOLEAN
, 8, NULL
, 0x04, NULL
, HFILL
} },
3779 { &hf_radiotap_plcp_modulation
,
3780 { "Modulation", "ixveriwave.plcp.modulation",
3781 FT_UINT8
, BASE_DEC
, VALS(modulation_vals
), 0x08, NULL
, HFILL
} },
3782 { &hf_radiotap_plcp_length_extension
,
3783 { "Length extension", "ixveriwave.plcp.length_extension",
3784 FT_UINT8
, BASE_DEC
, NULL
, 0xe0, NULL
, HFILL
} },
3785 { &hf_radiotap_plcp_length
,
3786 { "PLCP Length", "ixveriwave.plcp.length",
3787 FT_UINT24
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
3788 { &hf_radiotap_plcp_crc16
,
3789 { "PLCP CRC-16", "ixveriwave.plcp.crc16",
3790 FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
3792 { &hf_radiotap_ofdm_service
,
3793 { "Service", "ixveriwave.ofdm.service",
3794 FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
3796 /* SIGNAL (11a)/L-SIG (11n, 11ac) */
3797 { &hf_radiotap_ofdm_rate
,
3798 { "Rate", "ixveriwave.ofdm.rate",
3799 FT_UINT24
, BASE_HEX
, NULL
, 0x00000f, NULL
, HFILL
} },
3800 { &hf_radiotap_ofdm_length
,
3801 { "PLCP Length", "ixveriwave.ofdm.length",
3802 FT_UINT24
, BASE_DEC
, NULL
, 0x01ffe0, NULL
, HFILL
} },
3803 { &hf_radiotap_ofdm_parity
,
3804 { "Parity", "ixveriwave.ofdm.parity",
3805 FT_UINT24
, BASE_DEC
, NULL
, 0x020000, NULL
, HFILL
} },
3806 { &hf_radiotap_ofdm_tail
,
3807 { "Tail", "ixveriwave.ofdm.tail",
3808 FT_UINT24
, BASE_HEX
, NULL
, 0xfc0000, NULL
, HFILL
} },
3811 { &hf_radiotap_ht_mcsindex
,
3812 { "MCS index", "ixveriwave.ht.mcs",
3813 FT_UINT24
, BASE_DEC
, NULL
, 0x00007f, NULL
, HFILL
} },
3814 { &hf_radiotap_ht_bw
,
3815 { "CBW 20/40", "ixveriwave.ht.bw",
3816 FT_UINT24
, BASE_HEX
, NULL
, 0x000080, NULL
, HFILL
} },
3817 { &hf_radiotap_ht_length
,
3818 { "HT Length", "ixveriwave.ht.length",
3819 FT_UINT24
, BASE_DEC
, NULL
, 0xffff00, NULL
, HFILL
} },
3822 { &hf_radiotap_ht_smoothing
,
3823 { "Smoothing", "ixveriwave.ht.smoothing",
3824 FT_BOOLEAN
, 24, NULL
, 0x000001, NULL
, HFILL
} },
3825 { &hf_radiotap_ht_notsounding
,
3826 { "Not Sounding", "ixveriwave.ht.notsounding",
3827 FT_BOOLEAN
, 24, NULL
, 0x000002, NULL
, HFILL
} },
3828 { &hf_radiotap_ht_aggregation
,
3829 { "Aggregation", "ixveriwave.ht.aggregation",
3830 FT_BOOLEAN
, 24, NULL
, 0x000008, NULL
, HFILL
} },
3831 { &hf_radiotap_ht_stbc
,
3832 { "STBC", "ixveriwave.ht.stbc",
3833 FT_UINT24
, BASE_DEC
, NULL
, 0x000030, NULL
, HFILL
} },
3834 { &hf_radiotap_ht_feccoding
,
3835 { "FEC Coding", "ixveriwave.ht.feccoding",
3836 FT_UINT24
, BASE_DEC
, VALS(fec_encoding_vals
), 0x000040, NULL
, HFILL
} },
3837 { &hf_radiotap_ht_short_gi
,
3838 { "Short GI", "ixveriwave.ht.short_gi",
3839 FT_BOOLEAN
, 24, NULL
, 0x000080, NULL
, HFILL
} },
3840 { &hf_radiotap_ht_ness
,
3841 { "Number of Extension Spatial Streams", "ixveriwave.ness",
3842 FT_UINT24
, BASE_DEC
, NULL
, 0x000300, NULL
, HFILL
} },
3843 { &hf_radiotap_ht_crc
,
3844 { "CRC", "ixveriwave.ht.crc",
3845 FT_UINT24
, BASE_HEX
, NULL
, 0x03fc00, NULL
, HFILL
} },
3846 { &hf_radiotap_ht_tail
,
3847 { "Tail Bits", "ixveriwave.ht.tail",
3848 FT_UINT24
, BASE_HEX
, NULL
, 0xfc0000, NULL
, HFILL
} },
3851 { &hf_radiotap_vht_bw
,
3852 { "BW", "ixveriwave.vht.bw",
3853 FT_UINT24
, BASE_HEX
, VALS(sbw_evm
), 0x000003, NULL
, HFILL
} },
3854 { &hf_radiotap_vht_stbc
,
3855 { "STBC", "ixveriwave.vht.stbc",
3856 FT_BOOLEAN
, 24, NULL
, 0x000008, NULL
, HFILL
} },
3857 { &hf_radiotap_vht_group_id
,
3858 { "Group Id", "ixveriwave.vht.group_id",
3859 FT_UINT24
, BASE_DEC
, NULL
, 0x0003f0, NULL
, HFILL
} },
3860 { &hf_radiotap_vht_su_nsts
,
3861 { "SU NSTS", "ixveriwave.vht.su_nsts",
3862 FT_UINT24
, BASE_DEC
, NULL
, 0x001c00, NULL
, HFILL
} },
3863 { &hf_radiotap_vht_su_partial_aid
,
3864 { "SU Partial AID", "ixveriwave.vht.su_partial_aid",
3865 FT_UINT24
, BASE_HEX
, NULL
, 0x3fe000, NULL
, HFILL
} },
3866 { &hf_radiotap_vht_u0_nsts
,
3867 { "MU[0] NSTS", "ixveriwave.vht.u0_nsts",
3868 FT_UINT24
, BASE_DEC
, NULL
, 0x001c00, NULL
, HFILL
} },
3869 { &hf_radiotap_vht_u1_nsts
,
3870 { "MU[1] NSTS", "ixveriwave.vht.u1_nsts",
3871 FT_UINT24
, BASE_DEC
, NULL
, 0x00e000, NULL
, HFILL
} },
3872 { &hf_radiotap_vht_u2_nsts
,
3873 { "MU[2] NSTS", "ixveriwave.vht.u2_nsts",
3874 FT_UINT24
, BASE_DEC
, NULL
, 0x070000, NULL
, HFILL
} },
3875 { &hf_radiotap_vht_u3_nsts
,
3876 { "MU[3] NSTS", "ixveriwave.vht.u3_nsts",
3877 FT_UINT24
, BASE_DEC
, NULL
, 0x380000, NULL
, HFILL
} },
3878 { &hf_radiotap_vht_txop_ps_not_allowed
,
3879 { "TXOP_PS_NOT_ALLOWED", "ixveriwave.vht.txop_ps_not_allowed",
3880 FT_BOOLEAN
, 24, NULL
, 0x400000, NULL
, HFILL
} },
3883 { &hf_radiotap_vht_short_gi
,
3884 { "Short GI", "ixveriwave.short_gi",
3885 FT_BOOLEAN
, 24, NULL
, 0x000001, NULL
, HFILL
} },
3886 { &hf_radiotap_vht_short_gi_nsym_disambig
,
3887 { "Short GI NSYM Disambiguation", "ixveriwave.short_gi_nsym_disambig",
3888 FT_BOOLEAN
, 24, NULL
, 0x000002, NULL
, HFILL
} },
3889 { &hf_radiotap_vht_su_coding_type
,
3890 { "SU Coding Type", "ixveriwave.vht.su_coding_type",
3891 FT_UINT24
, BASE_DEC
, VALS(fec_encoding_vals
), 0x000004, NULL
, HFILL
} },
3892 { &hf_radiotap_vht_u0_coding_type
,
3893 { "MU[0] Coding Type", "ixveriwave.vht.u0_coding_type",
3894 FT_UINT24
, BASE_DEC
, VALS(fec_encoding_vals
), 0x000004, NULL
, HFILL
} },
3895 { &hf_radiotap_vht_ldpc_ofdmsymbol
,
3896 { "LDPC Extra OFDM Symbol", "ixveriwave.vht.ldpc_ofdmsymbol",
3897 FT_BOOLEAN
, 24, NULL
, 0x000008, NULL
, HFILL
} },
3898 { &hf_radiotap_vht_su_mcs
,
3899 { "VHT MCS", "ixveriwave.vht.su_mcs",
3900 FT_UINT24
, BASE_DEC
, NULL
, 0x0000f0, NULL
, HFILL
} },
3901 { &hf_radiotap_vht_u1_coding_type
,
3902 { "MU[1] Coding Type", "ixveriwave.vht.u1_coding_type",
3903 FT_UINT24
, BASE_DEC
, VALS(fec_encoding_vals
), 0x000010, NULL
, HFILL
} },
3904 { &hf_radiotap_vht_u2_coding_type
,
3905 { "MU[2] Coding Type", "ixveriwave.vht.u2_coding_type",
3906 FT_UINT24
, BASE_DEC
, VALS(fec_encoding_vals
), 0x000020, NULL
, HFILL
} },
3907 { &hf_radiotap_vht_u3_coding_type
,
3908 { "MU[3] Coding Type", "ixveriwave.vht.u3_coding_type",
3909 FT_UINT24
, BASE_DEC
, VALS(fec_encoding_vals
), 0x000040, NULL
, HFILL
} },
3910 { &hf_radiotap_vht_beamformed
,
3911 { "Beamformed", "ixveriwave.vht.beamformed",
3912 FT_BOOLEAN
, 24, NULL
, 0x000100, NULL
, HFILL
} },
3913 { &hf_radiotap_vht_crc
,
3914 { "CRC8", "ixveriwave.vht.crc",
3915 FT_UINT24
, BASE_HEX
, NULL
, 0x03fc00, NULL
, HFILL
} },
3916 { &hf_radiotap_vht_tail
,
3917 { "Tail", "ixveriwave.vht.tail",
3918 FT_UINT24
, BASE_HEX
, NULL
, 0xfc0000, NULL
, HFILL
} },
3921 { &hf_radiotap_vht_su_sig_b_length_20_mhz
,
3922 { "SIG-B Length", "ixveriwave.vht.sig_b_length",
3923 FT_UINT32
, BASE_DEC
, NULL
, 0x0001ffff, NULL
, HFILL
} },
3924 { &hf_radiotap_vht_su_sig_b_length_40_mhz
,
3925 { "SIG-B Length", "ixveriwave.vht.sig_b_length",
3926 FT_UINT32
, BASE_DEC
, NULL
, 0x0007ffff, NULL
, HFILL
} },
3927 { &hf_radiotap_vht_su_sig_b_length_80_160_mhz
,
3928 { "SIG-B Length", "ixveriwave.vht.sig_b_length",
3929 FT_UINT32
, BASE_DEC
, NULL
, 0x001fffff, NULL
, HFILL
} },
3930 { &hf_radiotap_vht_mu_sig_b_length_20_mhz
,
3931 { "SIG-B Length", "ixveriwave.vht.sig_b_length",
3932 FT_UINT32
, BASE_DEC
, NULL
, 0x0000ffff, NULL
, HFILL
} },
3933 { &hf_radiotap_vht_mu_mcs_20_mhz
,
3934 { "MCS index", "ixveriwave.vht.mcs",
3935 FT_UINT32
, BASE_DEC
, NULL
, 0x000f0000, NULL
, HFILL
} },
3936 { &hf_radiotap_vht_mu_sig_b_length_40_mhz
,
3937 { "SIG-B Length", "ixveriwave.vht.sig_b_length",
3938 FT_UINT32
, BASE_DEC
, NULL
, 0x0001ffff, NULL
, HFILL
} },
3939 { &hf_radiotap_vht_mu_mcs_40_mhz
,
3940 { "MCS index", "ixveriwave.vht.mcs",
3941 FT_UINT32
, BASE_DEC
, NULL
, 0x001e0000, NULL
, HFILL
} },
3942 { &hf_radiotap_vht_mu_sig_b_length_80_160_mhz
,
3943 { "SIG-B Length", "ixveriwave.vht.sig_b_length",
3944 FT_UINT32
, BASE_DEC
, NULL
, 0x0007ffff, NULL
, HFILL
} },
3945 { &hf_radiotap_vht_mu_mcs_80_160_mhz
,
3946 { "MCS index", "ixveriwave.vht.mcs",
3947 FT_UINT32
, BASE_DEC
, NULL
, 0x00780000, NULL
, HFILL
} },
3949 { &hf_radiotap_rfid
,
3950 { "RFID", "ixveriwave.rfid",
3951 FT_UINT8
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
3953 { &hf_radiotap_l2_l4_info
,
3954 {"Layer 2-4 Header", "ixveriwave.l2_l4info",
3955 FT_NONE
, BASE_NONE
, NULL
, 0, NULL
, HFILL
} },
3957 { &hf_radiotap_bssid
,
3958 {"BSS ID", "ixveriwave.bssid",
3959 FT_UINT8
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
3961 { &hf_radiotap_clientidvalid
,
3962 { "Client Id Valid", "ixveriwave.clientidvalid",
3963 FT_BOOLEAN
, 8, TFS(&tfs_yes_no
), 0x20, NULL
, HFILL
} },
3964 { &hf_radiotap_bssidvalid
,
3965 { "BSS ID Valid", "ixveriwave.bssidvalid",
3966 FT_BOOLEAN
, 8, TFS(&tfs_yes_no
), 0x40, NULL
, HFILL
} },
3967 { &hf_radiotap_unicastormulticast
,
3968 { "Unicast/Multicast", "ixveriwave.unicastormulticast",
3969 FT_UINT8
, BASE_DEC
, VALS(bmbit
), 0x80, NULL
, HFILL
} },
3972 { &hf_radiotap_wlantype
,
3973 { "WLAN Type", "ixveriwave.wlantype",
3974 FT_UINT8
, BASE_DEC
, NULL
, 0x0, NULL
, HFILL
} },
3978 { "TID", "ixveriwave.tid",
3979 FT_UINT16
, BASE_HEX
, NULL
, 0x01c0, NULL
, HFILL
} },
3981 { "AC", "ixveriwave.tx.ac",
3982 FT_UINT8
, BASE_HEX
, NULL
, 0x0e, NULL
, HFILL
} },
3983 { &hf_radiotap_l4idvalid
,
3984 { "Layer 4 Id Valid", "ixveriwave.l4idvalid",
3985 FT_BOOLEAN
, 8, TFS(&tfs_yes_no
), 0x10, NULL
, HFILL
} },
3986 { &hf_radiotap_containshtfield
,
3987 { "Contains HT Field", "ixveriwave.containshtfield",
3988 FT_BOOLEAN
, 8, TFS(&tfs_yes_no
), 0x20, NULL
, HFILL
} },
3989 { &hf_radiotap_istypeqos
,
3990 { "Is Type QOS", "ixveriwave.istypeqos",
3991 FT_BOOLEAN
, 8, TFS(&tfs_yes_no
), 0x40, NULL
, HFILL
} },
3992 { &hf_radiotap_flowvalid
,
3993 { "Flow Id Valid", "ixveriwave.flowvalid",
3994 FT_BOOLEAN
, 8, TFS(&tfs_yes_no
), 0x80, NULL
, HFILL
} },
3996 { &hf_radiotap_payloaddecode
,
3997 { "Payload Decode", "ixveriwave.payloaddecode",
3998 FT_UINT32
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
4000 { &hf_radiotap_vw_info_rx
,
4001 { "Info field", "ixveriwave.info",
4002 FT_UINT24
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
4004 /* rx info decodes for fpga ver VW510021 */
4005 { &hf_radiotap_vw_info_rx_crypto_wep_encoded
,
4006 { "Crypto WEP Encoded", "ixveriwave.info.crypto_wep_encoded",
4007 FT_BOOLEAN
, 24, NULL
, 0x000001, NULL
, HFILL
} },
4008 { &hf_radiotap_vw_info_rx_crypto_tkip_encoded
,
4009 { "Crypto TKIP Encoded", "ixveriwave.info.crypto_tkip_encoded",
4010 FT_UINT24
, BASE_DEC
, VALS(crypto_TKIP_type
), 0x000006, NULL
, HFILL
} },
4011 { &hf_radiotap_vw_info_rx_crypto_rx_tkip_tsc_seqskip
,
4012 { "Crypto RX TKIP TSC SEQSKIP", "ixveriwave.info.crypto_rx_tkip_tsc_seqskip",
4013 FT_BOOLEAN
, 24, NULL
, 0x000008, NULL
, HFILL
} },
4014 { &hf_radiotap_vw_info_rx_crypto_rx_ccmp_pn_seqskip
,
4015 { "Crypto RX CCMP PN SEQSKIP", "ixveriwave.info.crypto_rx_ccmp_pn_seqskip",
4016 FT_BOOLEAN
, 24, NULL
, 0x000010, NULL
, HFILL
} },
4017 { &hf_radiotap_vw_info_rx_tkip_not_full_msdu
,
4018 { "TKIP not full MSDU", "ixveriwave.info.tkip_not_full_msdu",
4019 FT_BOOLEAN
, 24, NULL
, 0x000020, NULL
, HFILL
} },
4020 { &hf_radiotap_vw_info_rx_mpdu_length_gt_mpdu_octets
,
4021 { "MPDU Length field is greater than MPDU octets", "ixveriwave.info.mpdu_length_gt_mpdu_octets",
4022 FT_BOOLEAN
, 24, NULL
, 0x000040, NULL
, HFILL
} },
4023 { &hf_radiotap_vw_info_rx_tkip_ccmp_tsc_seqerr
,
4024 { "RX TKIP / CCMP TSC SEQERR", "ixveriwave.info.tkip_ccmp_tsc_seqerr",
4025 FT_BOOLEAN
, 24, NULL
, 0x000080, NULL
, HFILL
} },
4026 { &hf_radiotap_vw_info_rx_ack_withheld_from_frame
,
4027 { "ACK withheld from frame", "ixveriwave.info.ack_withheld_from_frame",
4028 FT_BOOLEAN
, 24, NULL
, 0x000100, NULL
, HFILL
} },
4029 { &hf_radiotap_vw_info_rx_client_bssid_matched
,
4030 { "Client BSSID matched", "ixveriwave.info.client_bssid_matched",
4031 FT_BOOLEAN
, 24, NULL
, 0x000200, NULL
, HFILL
} },
4032 { &hf_radiotap_vw_info_rx_mpdu_of_a_mpdu
,
4033 { "MPDU of A-MPDU", "ixveriwave.info.mpdu_of_a_mpdu",
4034 FT_BOOLEAN
, 24, NULL
, 0x000400, NULL
, HFILL
} },
4035 { &hf_radiotap_vw_info_rx_first_mpdu_of_a_mpdu
,
4036 { "First MPDU of A-MPDU", "ixveriwave.info.first_mpdu_of_a_mpdu",
4037 FT_BOOLEAN
, 24, NULL
, 0x000800, NULL
, HFILL
} },
4038 { &hf_radiotap_vw_info_rx_last_mpdu_of_a_mpdu
,
4039 { "Last MPDU of A-MPDU", "ixveriwave.info.last_mpdu_of_a_mpdu",
4040 FT_BOOLEAN
, 24, NULL
, 0x001000, NULL
, HFILL
} },
4041 { &hf_radiotap_vw_info_rx_msdu_of_a_msdu
,
4042 { "MSDU of A-MSDU", "ixveriwave.info.msdu_of_a_msdu",
4043 FT_BOOLEAN
, 24, NULL
, 0x002000, NULL
, HFILL
} },
4044 { &hf_radiotap_vw_info_rx_first_msdu_of_a_msdu
,
4045 { "First MSDU of A-MSDU", "ixveriwave.info.first_msdu_of_a_msdu",
4046 FT_BOOLEAN
, 24, NULL
, 0x004000, NULL
, HFILL
} },
4047 { &hf_radiotap_vw_info_rx_last_msdu_of_a_msdu
,
4048 { "Last MSDU of A-MSDU", "ixveriwave.info.last_msdu_of_a_msdu",
4049 FT_BOOLEAN
, 24, NULL
, 0x008000, NULL
, HFILL
} },
4050 { &hf_radiotap_vw_info_rx_layer_1_info_0
,
4051 { "Layer 1 Info[0]", "ixveriwave.info.layer_1_info_0",
4052 FT_UINT24
, BASE_DEC
, NULL
, 0x010000, NULL
, HFILL
} },
4053 { &hf_radiotap_vw_info_rx_layer_1_info_1
,
4054 { "Layer 1 Info[1]", "ixveriwave.info.layer_1_info_1",
4055 FT_UINT24
, BASE_DEC
, NULL
, 0x020000, NULL
, HFILL
} },
4056 { &hf_radiotap_vw_info_rx_vht_frame_received_with_vht_sig_b_length
,
4057 { "VHT frame received with the use of the VHT_SIG_B.LENGTH", "ixveriwave.info.vht_frame_received_with_vht_sig_b_length",
4058 FT_BOOLEAN
, 24, NULL
, 0x040000, NULL
, HFILL
} },
4059 { &hf_radiotap_vw_info_rx_vht_frame_received_without_vht_sig_b_length
,
4060 { "VHT frame received without the use of VHT_SIG_B.LENGTH", "ixveriwave.info.vht_frame_received_without_vht_sig_b_length",
4061 FT_BOOLEAN
, 24, NULL
, 0x080000, NULL
, HFILL
} },
4062 { &hf_radiotap_vw_info_rx_factory_internal
,
4063 { "Factory Internal", "ixveriwave.info.factory_internal",
4064 FT_UINT24
, BASE_DEC
, NULL
, 0xf00000, NULL
, HFILL
} },
4066 { &hf_radiotap_vw_info_tx
,
4067 { "Info field", "ixveriwave.info",
4068 FT_UINT16
, BASE_HEX
, NULL
, 0x0, NULL
, HFILL
} },
4070 /* tx info decodes for VW510021 and previous versions */
4071 { &hf_radiotap_vw_info_tx_crypto_wep_encoded
,
4072 { "Crypto WEP Encoded", "ixveriwave.info.crypto_wep_encoded",
4073 FT_BOOLEAN
, 16, NULL
, 0x0001, NULL
, HFILL
} },
4074 { &hf_radiotap_vw_info_tx_crypto_tkip_encoded
,
4075 { "Crypto TKIP Encoded", "ixveriwave.info.crypto_tkip_encoded",
4076 FT_UINT16
, BASE_DEC
, VALS(crypto_TKIP_type
), 0x0006, NULL
, HFILL
} },
4077 { &hf_radiotap_vw_info_tx_crypto_c_bit_error
,
4078 { "Crypto C bit Error", "ixveriwave.info.crypto_c_bit_error",
4079 FT_BOOLEAN
, 16, NULL
, 0x0008, NULL
, HFILL
} },
4080 { &hf_radiotap_vw_info_tx_crypto_tkip_not_full_msdu
,
4081 { "Crypto TKIP not full MSDU", "ixveriwave.info.crypto_tkip_not_full_msdu",
4082 FT_BOOLEAN
, 16, NULL
, 0x0010, NULL
, HFILL
} },
4083 { &hf_radiotap_vw_info_tx_crypto_software_error
,
4084 { "Crypto Software Error", "ixveriwave.info.crypto_software_error",
4085 FT_BOOLEAN
, 16, NULL
, 0x0020, NULL
, HFILL
} },
4086 { &hf_radiotap_vw_info_tx_crypto_short_fault
,
4087 { "Crypto Short Fault", "ixveriwave.info.crypto_short_fault",
4088 FT_BOOLEAN
, 16, NULL
, 0x0040, NULL
, HFILL
} },
4089 { &hf_radiotap_vw_info_tx_crypto_payload_length_fault
,
4090 { "Crypto Payload Length Fault", "ixveriwave.info.crypto_payload_length_fault",
4091 FT_BOOLEAN
, 16, NULL
, 0x0080, NULL
, HFILL
} },
4092 { &hf_radiotap_vw_info_tx_sent_rts_before_data
,
4093 { "Sent RTS before Data", "ixveriwave.info.sent_rts_before_data",
4094 FT_BOOLEAN
, 16, NULL
, 0x0100, NULL
, HFILL
} },
4095 { &hf_radiotap_vw_info_tx_sent_cts_to_self_before_data
,
4096 { "Sent CTS to Self before Data", "ixveriwave.info.sent_cts_to_self_before_data",
4097 FT_BOOLEAN
, 16, NULL
, 0x0200, NULL
, HFILL
} },
4098 { &hf_radiotap_vw_info_tx_mpdu_of_a_mpdu
,
4099 { "MPDU of A-MPDU", "ixveriwave.info.tx_mpdu_of_a_mpdu",
4100 FT_BOOLEAN
, 16, NULL
, INFO_MPDU_OF_A_MPDU
, NULL
, HFILL
} },
4101 { &hf_radiotap_vw_info_tx_first_mpdu_of_a_mpdu
,
4102 { "First MPDU of A-MPDU", "ixveriwave.info.first_mpdu_of_a_mpdu",
4103 FT_BOOLEAN
, 16, NULL
, INFO_FIRST_MPDU_OF_A_MPDU
, NULL
, HFILL
} },
4104 { &hf_radiotap_vw_info_tx_last_mpdu_of_a_mpdu
,
4105 { "Last MPDU of A-MPDU", "ixveriwave.info.last_mpdu_of_a_mpdu",
4106 FT_BOOLEAN
, 16, NULL
, INFO_LAST_MPDU_OF_A_MPDU
, NULL
, HFILL
} },
4107 { &hf_radiotap_vw_info_tx_msdu_of_a_msdu
,
4108 { "MSDU of A-MSDU", "ixveriwave.info.msdu_of_a_msdu",
4109 FT_BOOLEAN
, 16, NULL
, INFO_MSDU_OF_A_MSDU
, NULL
, HFILL
} },
4110 { &hf_radiotap_vw_info_tx_first_msdu_of_a_msdu
,
4111 { "First MSDU of A-MSDU", "ixveriwave.info.first_msdu_of_a_msdu",
4112 FT_BOOLEAN
, 16, NULL
, INFO_FIRST_MSDU_OF_A_MSDU
, NULL
, HFILL
} },
4113 { &hf_radiotap_vw_info_tx_last_msdu_of_a_msdu
,
4114 { "Last MSDU of A-MSDU", "ixveriwave.info.last_msdu_of_a_msdu",
4115 FT_BOOLEAN
, 16, NULL
, INFO_LAST_MSDU_OF_A_MSDU
, NULL
, HFILL
} },
4117 { &hf_radiotap_vw_errors_rx_sig_field_crc_parity_error
,
4118 { "SIG Field CRC/Parity Error", "ixveriwave.errors.sig_field_crc_parity_error",
4119 FT_BOOLEAN
, 32, NULL
, 0x00000001, NULL
, HFILL
} },
4120 { &hf_radiotap_vw_errors_rx_non_supported_service_field
,
4121 { "Non-supported service field", "ixveriwave.errors.non_supported_service_field",
4122 FT_BOOLEAN
, 32, NULL
, 0x00000002, NULL
, HFILL
} },
4123 { &hf_radiotap_vw_errors_rx_frame_length_error
,
4124 { "Frame Length Error", "ixveriwave.errors.frame_length_error",
4125 FT_BOOLEAN
, 32, NULL
, 0x00000004, NULL
, HFILL
} },
4126 { &hf_radiotap_vw_errors_rx_vht_sig_ab_crc_error
,
4127 { "VHT_SIG_A/B CRC Error", "ixveriwave.errors.vht_sig_ab_crc_error",
4128 FT_BOOLEAN
, 32, NULL
, 0x00000008, NULL
, HFILL
} },
4129 { &hf_radiotap_vw_errors_rx_crc32_error
,
4130 { "CRC32 Error", "ixveriwave.errors.crc32_error",
4131 FT_BOOLEAN
, 32, NULL
, 0x00000010, NULL
, HFILL
} },
4132 { &hf_radiotap_vw_errors_rx_l2_de_aggregation_error
,
4133 { "L2 de-aggregation error", "ixveriwave.errors.l2_de_aggregation_error",
4134 FT_BOOLEAN
, 32, NULL
, 0x00000020, NULL
, HFILL
} },
4135 { &hf_radiotap_vw_errors_rx_duplicate_mpdu
,
4136 { "Duplicate MPDU", "ixveriwave.errors.duplicate_mpdu",
4137 FT_BOOLEAN
, 32, NULL
, 0x00000040, NULL
, HFILL
} },
4138 { &hf_radiotap_vw_errors_rx_bad_flow_magic_number
,
4139 { "Bad flow magic number", "ixveriwave.errors.bad_flow_magic_number",
4140 FT_BOOLEAN
, 32, NULL
, 0x00000080, NULL
, HFILL
} },
4141 { &hf_radiotap_vw_errors_rx_bad_flow_payload_checksum
,
4142 { "Bad flow payload checksum", "ixveriwave.errors.bad_flow_payload_checksum",
4143 FT_BOOLEAN
, 32, NULL
, 0x00000100, NULL
, HFILL
} },
4144 { &hf_radiotap_vw_errors_rx_illegal_vht_sig_value
,
4145 { "Illegal VHT_SIG Value", "ixveriwave.errors.illegal_vht_sig_value",
4146 FT_BOOLEAN
, 32, NULL
, 0x00000200, NULL
, HFILL
} },
4147 { &hf_radiotap_vw_errors_rx_ip_checksum_error
,
4148 { "IP checksum error", "ixveriwave.errors.ip_checksum_error",
4149 FT_BOOLEAN
, 32, NULL
, 0x00000400, NULL
, HFILL
} },
4150 { &hf_radiotap_vw_errors_rx_l4_checksum_error
,
4151 { "L4 (TCP/ICMP/IGMP/UDP) checksum error", "ixveriwave.errors.l4_checksum_error",
4152 FT_BOOLEAN
, 32, NULL
, 0x00000800, NULL
, HFILL
} },
4153 { &hf_radiotap_vw_errors_rx_l1_unsupported_feature
,
4154 { "Layer 1 Unsupported Feature", "ixveriwave.errors.l1_unsupported_feature",
4155 FT_BOOLEAN
, 32, NULL
, 0x00001000, NULL
, HFILL
} },
4156 { &hf_radiotap_vw_errors_rx_l1_packet_termination
,
4157 { "Layer 1 Packet Termination", "ixveriwave.errors.l1_packet_termination",
4158 FT_BOOLEAN
, 32, NULL
, 0x00004000, NULL
, HFILL
} },
4159 { &hf_radiotap_vw_errors_rx_internal_error_bit15
,
4160 { "Internal Error", "ixveriwave.errors.internal_error",
4161 FT_BOOLEAN
, 32, NULL
, 0x00008000, NULL
, HFILL
} },
4162 { &hf_radiotap_vw_errors_rx_wep_mic_miscompare
,
4163 { "WEP IVC/TKIP/CCMP/BIP MIC Miscompare", "ixveriwave.errors.wep_mic_miscompare",
4164 FT_BOOLEAN
, 32, NULL
, 0x00010000, NULL
, HFILL
} },
4165 { &hf_radiotap_vw_errors_rx_wep_tkip_rate_exceeded
,
4166 { "WEP/TKIP Rate Exceeded", "ixveriwave.errors.wep_tkip_rate_exceeded",
4167 FT_BOOLEAN
, 32, NULL
, 0x00020000, NULL
, HFILL
} },
4168 { &hf_radiotap_vw_errors_rx_crypto_short_error
,
4169 { "Crypto Short Error", "ixveriwave.errors.crypto_short_error",
4170 FT_BOOLEAN
, 32, NULL
, 0x00040000, NULL
, HFILL
} },
4171 { &hf_radiotap_vw_errors_rx_extiv_fault_a
,
4172 { "EXTIV Fault A", "ixveriwave.errors.extiv_fault_a",
4173 FT_BOOLEAN
, 32, NULL
, 0x00080000, NULL
, HFILL
} },
4174 { &hf_radiotap_vw_errors_rx_extiv_fault_b
,
4175 { "EXTIV Fault B", "ixveriwave.errors.extiv_fault_b",
4176 FT_BOOLEAN
, 32, NULL
, 0x00100000, NULL
, HFILL
} },
4177 { &hf_radiotap_vw_errors_rx_internal_error_bit21
,
4178 { "Internal Error", "ixveriwave.errors.internal_error",
4179 FT_BOOLEAN
, 32, NULL
, 0x00200000, NULL
, HFILL
} },
4180 { &hf_radiotap_vw_errors_rx_protected_fault_a
,
4181 { "Protected Fault A", "ixveriwave.errors.protected_fault_a",
4182 FT_BOOLEAN
, 32, NULL
, 0x00400000, NULL
, HFILL
} },
4183 { &hf_radiotap_vw_errors_rx_rx_mac_crypto_incompatibility
,
4184 { "RX MAC Crypto Incompatibility", "ixveriwave.errors.rx_mac_crypto_incompatibility",
4185 FT_BOOLEAN
, 32, NULL
, 0x00800000, NULL
, HFILL
} },
4186 { &hf_radiotap_vw_errors_rx_factory_debug
,
4187 { "Factory Debug", "ixveriwave.errors.factory_debug",
4188 FT_UINT32
, BASE_HEX
, NULL
, 0x7F000000, NULL
, HFILL
} },
4189 { &hf_radiotap_vw_errors_rx_internal_error_bit32
,
4190 { "Internal Error", "ixveriwave.errors.internal_error",
4191 FT_BOOLEAN
, 32, NULL
, 0x80000000, NULL
, HFILL
} },
4193 { &hf_radiotap_vw_errors_tx_packet_fcs_error
,
4194 { "Packet FCS error", "ixveriwave.errors.packet_fcs_error",
4195 FT_BOOLEAN
, 16, NULL
, 0x0002, NULL
, HFILL
} },
4196 { &hf_radiotap_vw_errors_tx_ip_checksum_error
,
4197 { "IP checksum error", "ixveriwave.errors.ip_checksum_error",
4198 FT_BOOLEAN
, 16, NULL
, 0x0020, NULL
, HFILL
} },
4200 { &hf_radiotap_vw_tx_retrycount
,
4201 { "Retry Count", "ixveriwave.tx.retrycount",
4202 FT_UINT8
, BASE_DEC
, NULL
, 0x1f, NULL
, HFILL
} },
4203 { &hf_radiotap_vw_tx_factorydebug
,
4204 { "Factory Debug", "ixveriwave.tx.factorydebug",
4205 FT_UINT16
, BASE_HEX
, NULL
, 0x7f80, NULL
, HFILL
} },
4208 static int *ett
[] = {
4210 &ett_commontap_times
,
4211 &ett_ethernettap_info
,
4212 &ett_ethernettap_error
,
4213 &ett_ethernettap_flags
,
4214 &ett_radiotap_flags
,
4216 &ett_radiotap_times
,
4217 &ett_radiotap_errors
,
4218 &ett_radiotap_layer1
,
4219 &ett_radiotap_layer2to4
,
4222 &ett_radiotap_infoc
,
4224 &ett_radiotap_contextp
,
4227 proto_ixveriwave
= proto_register_protocol("ixveriwave", "ixveriwave", "ixveriwave");
4228 proto_register_field_array(proto_ixveriwave
, hf
, array_length(hf
));
4229 proto_register_subtree_array(ett
, array_length(ett
));
4231 ixveriwave_handle
= register_dissector("ixveriwave", dissect_ixveriwave
, proto_ixveriwave
);
4234 void proto_reg_handoff_ixveriwave(void)
4236 /* handle for ethertype dissector */
4237 ethernet_handle
= find_dissector_add_dependency("eth_withoutfcs", proto_ixveriwave
);
4238 /* handle for 802.11+radio information dissector */
4239 ieee80211_radio_handle
= find_dissector_add_dependency("wlan_radio", proto_ixveriwave
);
4241 dissector_add_uint("wtap_encap", WTAP_ENCAP_IXVERIWAVE
, ixveriwave_handle
);
4245 * Editor modelines - https://www.wireshark.org/tools/modelines.html
4250 * indent-tabs-mode: nil
4253 * vi: set shiftwidth=4 tabstop=8 expandtab:
4254 * :indentSize=4:tabSize=8:noTabs=true: