| #ifndef __RADIOTAP_ITER_H | 
 | #define __RADIOTAP_ITER_H | 
 |  | 
 | #include <stdint.h> | 
 | #include "radiotap.h" | 
 |  | 
 | /* Radiotap header iteration | 
 |  *   implemented in radiotap.c | 
 |  */ | 
 |  | 
 | struct radiotap_override { | 
 | 	uint8_t field; | 
 | 	uint8_t align:4, size:4; | 
 | }; | 
 |  | 
 | struct radiotap_align_size { | 
 | 	uint8_t align:4, size:4; | 
 | }; | 
 |  | 
 | struct ieee80211_radiotap_namespace { | 
 | 	const struct radiotap_align_size *align_size; | 
 | 	int n_bits; | 
 | 	uint32_t oui; | 
 | 	uint8_t subns; | 
 | }; | 
 |  | 
 | struct ieee80211_radiotap_vendor_namespaces { | 
 | 	const struct ieee80211_radiotap_namespace *ns; | 
 | 	int n_ns; | 
 | }; | 
 |  | 
 | /** | 
 |  * struct ieee80211_radiotap_iterator - tracks walk thru present radiotap args | 
 |  * @this_arg_index: index of current arg, valid after each successful call | 
 |  *	to ieee80211_radiotap_iterator_next() | 
 |  * @this_arg: pointer to current radiotap arg; it is valid after each | 
 |  *	call to ieee80211_radiotap_iterator_next() but also after | 
 |  *	ieee80211_radiotap_iterator_init() where it will point to | 
 |  *	the beginning of the actual data portion | 
 |  * @this_arg_size: length of the current arg, for convenience | 
 |  * @current_namespace: pointer to the current namespace definition | 
 |  *	(or internally %NULL if the current namespace is unknown) | 
 |  * @is_radiotap_ns: indicates whether the current namespace is the default | 
 |  *	radiotap namespace or not | 
 |  * | 
 |  * @overrides: override standard radiotap fields | 
 |  * @n_overrides: number of overrides | 
 |  * | 
 |  * @_rtheader: pointer to the radiotap header we are walking through | 
 |  * @_max_length: length of radiotap header in cpu byte ordering | 
 |  * @_arg_index: next argument index | 
 |  * @_arg: next argument pointer | 
 |  * @_next_bitmap: internal pointer to next present u32 | 
 |  * @_bitmap_shifter: internal shifter for curr u32 bitmap, b0 set == arg present | 
 |  * @_vns: vendor namespace definitions | 
 |  * @_next_ns_data: beginning of the next namespace's data | 
 |  * @_reset_on_ext: internal; reset the arg index to 0 when going to the | 
 |  *	next bitmap word | 
 |  * | 
 |  * Describes the radiotap parser state. Fields prefixed with an underscore | 
 |  * must not be used by users of the parser, only by the parser internally. | 
 |  */ | 
 |  | 
 | struct ieee80211_radiotap_iterator { | 
 | 	struct ieee80211_radiotap_header *_rtheader; | 
 | 	const struct ieee80211_radiotap_vendor_namespaces *_vns; | 
 | 	const struct ieee80211_radiotap_namespace *current_namespace; | 
 |  | 
 | 	unsigned char *_arg, *_next_ns_data; | 
 | 	le32 *_next_bitmap; | 
 |  | 
 | 	unsigned char *this_arg; | 
 | #ifdef RADIOTAP_SUPPORT_OVERRIDES | 
 | 	const struct radiotap_override *overrides; | 
 | 	int n_overrides; | 
 | #endif | 
 | 	int this_arg_index; | 
 | 	int this_arg_size; | 
 |  | 
 | 	int is_radiotap_ns; | 
 |  | 
 | 	int _max_length; | 
 | 	int _arg_index; | 
 | 	uint32_t _bitmap_shifter; | 
 | 	int _reset_on_ext; | 
 | }; | 
 |  | 
 | extern int ieee80211_radiotap_iterator_init( | 
 | 	struct ieee80211_radiotap_iterator *iterator, | 
 | 	struct ieee80211_radiotap_header *radiotap_header, | 
 | 	int max_length, const struct ieee80211_radiotap_vendor_namespaces *vns); | 
 |  | 
 | extern int ieee80211_radiotap_iterator_next( | 
 | 	struct ieee80211_radiotap_iterator *iterator); | 
 |  | 
 | #endif /* __RADIOTAP_ITER_H */ |