nexmon – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | #ifndef __RADIOTAP_ITER_H |
2 | #define __RADIOTAP_ITER_H |
||
3 | |||
4 | #include <stdint.h> |
||
5 | #include "radiotap.h" |
||
6 | |||
7 | /* Radiotap header iteration |
||
8 | * implemented in radiotap.c |
||
9 | */ |
||
10 | |||
11 | struct radiotap_override { |
||
12 | uint8_t field; |
||
13 | uint8_t align:4, size:4; |
||
14 | }; |
||
15 | |||
16 | struct radiotap_align_size { |
||
17 | uint8_t align:4, size:4; |
||
18 | }; |
||
19 | |||
20 | struct ieee80211_radiotap_namespace { |
||
21 | const struct radiotap_align_size *align_size; |
||
22 | int n_bits; |
||
23 | uint32_t oui; |
||
24 | uint8_t subns; |
||
25 | }; |
||
26 | |||
27 | struct ieee80211_radiotap_vendor_namespaces { |
||
28 | const struct ieee80211_radiotap_namespace *ns; |
||
29 | int n_ns; |
||
30 | }; |
||
31 | |||
32 | /** |
||
33 | * struct ieee80211_radiotap_iterator - tracks walk thru present radiotap args |
||
34 | * @this_arg_index: index of current arg, valid after each successful call |
||
35 | * to ieee80211_radiotap_iterator_next() |
||
36 | * @this_arg: pointer to current radiotap arg; it is valid after each |
||
37 | * call to ieee80211_radiotap_iterator_next() but also after |
||
38 | * ieee80211_radiotap_iterator_init() where it will point to |
||
39 | * the beginning of the actual data portion |
||
40 | * @this_arg_size: length of the current arg, for convenience |
||
41 | * @current_namespace: pointer to the current namespace definition |
||
42 | * (or internally %NULL if the current namespace is unknown) |
||
43 | * @is_radiotap_ns: indicates whether the current namespace is the default |
||
44 | * radiotap namespace or not |
||
45 | * |
||
46 | * @overrides: override standard radiotap fields |
||
47 | * @n_overrides: number of overrides |
||
48 | * |
||
49 | * @_rtheader: pointer to the radiotap header we are walking through |
||
50 | * @_max_length: length of radiotap header in cpu byte ordering |
||
51 | * @_arg_index: next argument index |
||
52 | * @_arg: next argument pointer |
||
53 | * @_next_bitmap: internal pointer to next present u32 |
||
54 | * @_bitmap_shifter: internal shifter for curr u32 bitmap, b0 set == arg present |
||
55 | * @_vns: vendor namespace definitions |
||
56 | * @_next_ns_data: beginning of the next namespace's data |
||
57 | * @_reset_on_ext: internal; reset the arg index to 0 when going to the |
||
58 | * next bitmap word |
||
59 | * |
||
60 | * Describes the radiotap parser state. Fields prefixed with an underscore |
||
61 | * must not be used by users of the parser, only by the parser internally. |
||
62 | */ |
||
63 | |||
64 | struct ieee80211_radiotap_iterator { |
||
65 | struct ieee80211_radiotap_header *_rtheader; |
||
66 | const struct ieee80211_radiotap_vendor_namespaces *_vns; |
||
67 | const struct ieee80211_radiotap_namespace *current_namespace; |
||
68 | |||
69 | unsigned char *_arg, *_next_ns_data; |
||
70 | uint32_t *_next_bitmap; |
||
71 | |||
72 | unsigned char *this_arg; |
||
73 | #ifdef RADIOTAP_SUPPORT_OVERRIDES |
||
74 | const struct radiotap_override *overrides; |
||
75 | int n_overrides; |
||
76 | #endif |
||
77 | int this_arg_index; |
||
78 | int this_arg_size; |
||
79 | |||
80 | int is_radiotap_ns; |
||
81 | |||
82 | int _max_length; |
||
83 | int _arg_index; |
||
84 | uint32_t _bitmap_shifter; |
||
85 | int _reset_on_ext; |
||
86 | }; |
||
87 | |||
88 | extern int ieee80211_radiotap_iterator_init( |
||
89 | struct ieee80211_radiotap_iterator *iterator, |
||
90 | struct ieee80211_radiotap_header *radiotap_header, |
||
91 | int max_length, const struct ieee80211_radiotap_vendor_namespaces *vns); |
||
92 | |||
93 | extern int ieee80211_radiotap_iterator_next( |
||
94 | struct ieee80211_radiotap_iterator *iterator); |
||
95 | |||
96 | #endif /* __RADIOTAP_ITER_H */ |