xref: /freebsd/contrib/wpa/src/utils/radiotap_iter.h (revision e28a4053b110e06768631ac8401ed4a3c05e68a5)
1*e28a4053SRui Paulo #ifndef __RADIOTAP_ITER_H
2*e28a4053SRui Paulo #define __RADIOTAP_ITER_H
3*e28a4053SRui Paulo 
4*e28a4053SRui Paulo #include "radiotap.h"
5*e28a4053SRui Paulo 
6*e28a4053SRui Paulo /* Radiotap header iteration
7*e28a4053SRui Paulo  *   implemented in radiotap.c
8*e28a4053SRui Paulo  */
9*e28a4053SRui Paulo /**
10*e28a4053SRui Paulo  * struct ieee80211_radiotap_iterator - tracks walk thru present radiotap args
11*e28a4053SRui Paulo  * @rtheader: pointer to the radiotap header we are walking through
12*e28a4053SRui Paulo  * @max_length: length of radiotap header in cpu byte ordering
13*e28a4053SRui Paulo  * @this_arg_index: IEEE80211_RADIOTAP_... index of current arg
14*e28a4053SRui Paulo  * @this_arg: pointer to current radiotap arg
15*e28a4053SRui Paulo  * @arg_index: internal next argument index
16*e28a4053SRui Paulo  * @arg: internal next argument pointer
17*e28a4053SRui Paulo  * @next_bitmap: internal pointer to next present u32
18*e28a4053SRui Paulo  * @bitmap_shifter: internal shifter for curr u32 bitmap, b0 set == arg present
19*e28a4053SRui Paulo  */
20*e28a4053SRui Paulo 
21*e28a4053SRui Paulo struct ieee80211_radiotap_iterator {
22*e28a4053SRui Paulo 	struct ieee80211_radiotap_header *rtheader;
23*e28a4053SRui Paulo 	int max_length;
24*e28a4053SRui Paulo 	int this_arg_index;
25*e28a4053SRui Paulo 	unsigned char *this_arg;
26*e28a4053SRui Paulo 
27*e28a4053SRui Paulo 	int arg_index;
28*e28a4053SRui Paulo 	unsigned char *arg;
29*e28a4053SRui Paulo 	uint32_t *next_bitmap;
30*e28a4053SRui Paulo 	uint32_t bitmap_shifter;
31*e28a4053SRui Paulo };
32*e28a4053SRui Paulo 
33*e28a4053SRui Paulo extern int ieee80211_radiotap_iterator_init(
34*e28a4053SRui Paulo    struct ieee80211_radiotap_iterator *iterator,
35*e28a4053SRui Paulo    struct ieee80211_radiotap_header *radiotap_header,
36*e28a4053SRui Paulo    int max_length);
37*e28a4053SRui Paulo 
38*e28a4053SRui Paulo extern int ieee80211_radiotap_iterator_next(
39*e28a4053SRui Paulo    struct ieee80211_radiotap_iterator *iterator);
40*e28a4053SRui Paulo 
41*e28a4053SRui Paulo #endif /* __RADIOTAP_ITER_H */
42