![Evan Huus](/assets/img/avatar_default.png)
file containing what is actually the ISC license (BSD-like), so add that to the header for licensecheck's sake (and remove the confusing reference to the BSD license). This makes the code actually your choice of ISC and GPL2 (since it is used in the Linux kernel which is GPL2-only). ISC is already acceptable for us, so ISC \union * must be also, so add ISC+GPL2 to checlicenses' list. Upstream COPYING file, for reference: http://git.sipsolutions.net/?p=radiotap.git;a=blob;f=COPYING;hb=97478c8467ce7ab56b7c9e8fd7cdc0f4e2cb22ed svn path=/trunk/; revision=52879
127 lines
4 KiB
C
127 lines
4 KiB
C
/*
|
|
* Radiotap parser
|
|
*
|
|
* Copyright 2007 Andy Green <andy@warmcat.com>
|
|
* Copyright 2009 Johannes Berg <johannes@sipsolutions.net>
|
|
*
|
|
* $Id$
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* Alternatively, this software may be distributed under the terms of ISC
|
|
* license:
|
|
*
|
|
* Permission to use, copy, modify, and/or distribute this software for any
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
* copyright notice and this permission notice appear in all copies.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
*/
|
|
|
|
#ifndef __RADIOTAP_ITER_H
|
|
#define __RADIOTAP_ITER_H
|
|
|
|
#define RADIOTAP_SUPPORT_OVERRIDES
|
|
|
|
#include <glib.h>
|
|
#include "packet-ieee80211-radiotap-defs.h"
|
|
|
|
/* Radiotap header iteration
|
|
* implemented in radiotap.c
|
|
*/
|
|
|
|
struct radiotap_override {
|
|
guint8 field;
|
|
guint align:4, size:4;
|
|
};
|
|
|
|
struct radiotap_align_size {
|
|
guint align:4, size:4;
|
|
};
|
|
|
|
struct ieee80211_radiotap_namespace {
|
|
const struct radiotap_align_size *align_size;
|
|
int n_bits;
|
|
guint32 oui;
|
|
guint8 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;
|
|
guint32 *_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;
|
|
guint32 _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 */
|