00001 #ifndef __RADIOTAP_ITER_H 00002 #define __RADIOTAP_ITER_H 00003 00004 #include <stdint.h> 00005 #include "radiotap.h" 00006 00007 /* Radiotap header iteration 00008 * implemented in radiotap.c 00009 */ 00010 00011 struct radiotap_override { 00012 uint8_t field; 00013 uint8_t align:4, size:4; 00014 }; 00015 00016 struct radiotap_align_size { 00017 uint8_t align:4, size:4; 00018 }; 00019 00020 struct ieee80211_radiotap_namespace { 00021 const struct radiotap_align_size *align_size; 00022 int n_bits; 00023 uint32_t oui; 00024 uint8_t subns; 00025 }; 00026 00027 struct ieee80211_radiotap_vendor_namespaces { 00028 const struct ieee80211_radiotap_namespace *ns; 00029 int n_ns; 00030 }; 00031 00064 struct ieee80211_radiotap_iterator { 00065 struct ieee80211_radiotap_header *_rtheader; 00066 const struct ieee80211_radiotap_vendor_namespaces *_vns; 00067 const struct ieee80211_radiotap_namespace *current_namespace; 00068 00069 unsigned char *_arg, *_next_ns_data; 00070 uint32_t *_next_bitmap; 00071 00072 unsigned char *this_arg; 00073 #ifdef RADIOTAP_SUPPORT_OVERRIDES 00074 const struct radiotap_override *overrides; 00075 int n_overrides; 00076 #endif 00077 int this_arg_index; 00078 int this_arg_size; 00079 00080 int is_radiotap_ns; 00081 00082 int _max_length; 00083 int _arg_index; 00084 uint32_t _bitmap_shifter; 00085 int _reset_on_ext; 00086 }; 00087 00088 extern int ieee80211_radiotap_iterator_init( 00089 struct ieee80211_radiotap_iterator *iterator, 00090 struct ieee80211_radiotap_header *radiotap_header, 00091 int max_length, const struct ieee80211_radiotap_vendor_namespaces *vns); 00092 00093 extern int ieee80211_radiotap_iterator_next( 00094 struct ieee80211_radiotap_iterator *iterator); 00095 00096 #endif /* __RADIOTAP_ITER_H */