forked from osmocom/wireshark
296591399f
(Using sed : sed -i '/^ \* \$Id\$/,+1 d') Fix manually some typo (in export_object_dicom.c and crc16-plain.c) Change-Id: I4c1ae68d1c4afeace8cb195b53c715cf9e1227a8 Reviewed-on: https://code.wireshark.org/review/497 Reviewed-by: Anders Broman <a.broman58@gmail.com>
125 lines
4 KiB
C
125 lines
4 KiB
C
/*
|
|
* Radiotap parser
|
|
*
|
|
* Copyright 2007 Andy Green <andy@warmcat.com>
|
|
* Copyright 2009 Johannes Berg <johannes@sipsolutions.net>
|
|
*
|
|
* 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 */
|