libtins  4.0
Classes | Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | List of all members
Tins::Dot11 Class Reference

Class representing an 802.11 frame. More...

#include <dot11_base.h>

Inheritance diagram for Tins::Dot11:
Tins::PDU Tins::Dot11Control Tins::Dot11Data Tins::Dot11ManagementFrame Tins::Dot11Ack Tins::Dot11ControlTA Tins::Dot11QoSData Tins::Dot11AssocRequest Tins::Dot11AssocResponse Tins::Dot11Authentication Tins::Dot11Beacon Tins::Dot11Deauthentication Tins::Dot11Disassoc Tins::Dot11ProbeRequest Tins::Dot11ProbeResponse Tins::Dot11ReAssocRequest Tins::Dot11ReAssocResponse

Classes

struct  dot11_header
 

Public Types

enum  Types { MANAGEMENT = 0, CONTROL = 1, DATA = 2 }
 Enum for the different types of 802.11 frames.
 
enum  OptionTypes {
  SSID, SUPPORTED_RATES, FH_SET, DS_SET,
  CF_SET, TIM, IBSS_SET, COUNTRY,
  HOPPING_PATTERN_PARAMS, HOPPING_PATTERN_TABLE, REQUEST_INFORMATION, BSS_LOAD,
  EDCA, TSPEC, TCLAS, SCHEDULE,
  CHALLENGE_TEXT, POWER_CONSTRAINT = 32, POWER_CAPABILITY, TPC_REQUEST,
  TPC_REPORT, SUPPORTED_CHANNELS, CHANNEL_SWITCH, MEASUREMENT_REQUEST,
  MEASUREMENT_REPORT, QUIET, IBSS_DFS, ERP_INFORMATION,
  TS_DELAY, TCLAS_PROCESSING, QOS_CAPABILITY = 46, RSN = 48,
  EXT_SUPPORTED_RATES = 50, VENDOR_SPECIFIC = 221
}
 Enum for the different types of tagged options.
 
enum  ManagementSubtypes {
  ASSOC_REQ = 0, ASSOC_RESP = 1, REASSOC_REQ = 2, REASSOC_RESP = 3,
  PROBE_REQ = 4, PROBE_RESP = 5, BEACON = 8, ATIM = 9,
  DISASSOC = 10, AUTH = 11, DEAUTH = 12
}
 Enum for the different subtypes of 802.11 management frames.
 
enum  ControlSubtypes {
  BLOCK_ACK_REQ = 8, BLOCK_ACK = 9, PS = 10, RTS = 11,
  CTS = 12, ACK = 13, CF_END = 14, CF_END_ACK = 15
}
 Enum for the different subtypes of 802.11 control frames.
 
enum  DataSubtypes {
  DATA_DATA = 0, DATA_CF_ACK = 1, DATA_CF_POLL = 2, DATA_CF_ACK_POLL = 3,
  DATA_NULL = 4, CF_ACK = 5, CF_POLL = 6, CF_ACK_POLL = 7,
  QOS_DATA_DATA = 8, QOS_DATA_CF_ACK = 9, QOS_DATA_CF_POLL = 10, QOS_DATA_CF_ACK_POLL = 11,
  QOS_DATA_NULL = 12
}
 Enum fro the different subtypes of 802.11 data frames.
 
typedef HWAddress< 6 > address_type
 
typedef PDUOption< uint8_t, Dot11option
 IEEE 802.11 options struct.
 
typedef std::vector< optionoptions_type
 
- Public Types inherited from Tins::PDU
enum  endian_type { BE, LE }
 
enum  PDUType {
  RAW, ETHERNET_II, IEEE802_3, DOT3 = IEEE802_3,
  RADIOTAP, DOT11, DOT11_ACK, DOT11_ASSOC_REQ,
  DOT11_ASSOC_RESP, DOT11_AUTH, DOT11_BEACON, DOT11_BLOCK_ACK,
  DOT11_BLOCK_ACK_REQ, DOT11_CF_END, DOT11_DATA, DOT11_CONTROL,
  DOT11_DEAUTH, DOT11_DIASSOC, DOT11_END_CF_ACK, DOT11_MANAGEMENT,
  DOT11_PROBE_REQ, DOT11_PROBE_RESP, DOT11_PS_POLL, DOT11_REASSOC_REQ,
  DOT11_REASSOC_RESP, DOT11_RTS, DOT11_QOS_DATA, LLC,
  SNAP, IP, ARP, TCP,
  UDP, ICMP, BOOTP, DHCP,
  EAPOL, RC4EAPOL, RSNEAPOL, DNS,
  LOOPBACK, IPv6, ICMPv6, SLL,
  DHCPv6, DOT1Q, PPPOE, STP,
  PPI, IPSEC_AH, IPSEC_ESP, PKTAP,
  MPLS, UNKNOWN = 999, USER_DEFINED_PDU = 1000
}
 Enum which identifies each type of PDU. More...
 
typedef byte_array serialization_type
 

Public Member Functions

 Dot11 (const address_type &dst_hw_addr=address_type())
 Constructs an 802.11 PDU. More...
 
 Dot11 (const uint8_t *buffer, uint32_t total_sz)
 Constructs 802.11 PDU from a buffer and adds all identifiable PDUs found in the buffer as children of this one. More...
 
small_uint< 2 > protocol () const
 Getter for the protocol version field. More...
 
small_uint< 2 > type () const
 Getter for the Type field. More...
 
small_uint< 4 > subtype () const
 Getter for the Subtype field. More...
 
small_uint< 1 > to_ds () const
 Getter for the To-DS field. More...
 
small_uint< 1 > from_ds () const
 Getter for the From-DS field. More...
 
small_uint< 1 > more_frag () const
 Getter for the More-Frag field. More...
 
small_uint< 1 > retry () const
 Getter for the Retry field. More...
 
small_uint< 1 > power_mgmt () const
 Getter for the Power-Management field. More...
 
small_uint< 1 > more_data () const
 Getter for the More Data field. More...
 
small_uint< 1 > wep () const
 Getter for the WEP field. More...
 
small_uint< 1 > order () const
 Getter for the Order field. More...
 
uint16_t duration_id () const
 Getter for the Duration-ID field. More...
 
address_type addr1 () const
 Getter for the first address. More...
 
void protocol (small_uint< 2 > new_proto)
 Setter for the protocol version field. More...
 
void type (small_uint< 2 > new_type)
 Setter for the type field. More...
 
void subtype (small_uint< 4 > new_subtype)
 Setter for the subtype field. More...
 
void to_ds (small_uint< 1 > new_value)
 Setter for the To-DS field. More...
 
void from_ds (small_uint< 1 > new_value)
 Setter for the From-DS field. More...
 
void more_frag (small_uint< 1 > new_value)
 Setter for the More-Frag field. More...
 
void retry (small_uint< 1 > new_value)
 Setter for the Retry field. More...
 
void power_mgmt (small_uint< 1 > new_value)
 Setter for the Power-Management field. More...
 
void more_data (small_uint< 1 > new_value)
 Setter for the More Data field. More...
 
void wep (small_uint< 1 > new_value)
 Setter for the WEP field. More...
 
void order (small_uint< 1 > new_value)
 Setter for the Order field. More...
 
void duration_id (uint16_t new_duration_id)
 Setter for the Duration-ID field. More...
 
void addr1 (const address_type &new_addr1)
 Setter for the first address. More...
 
uint32_t header_size () const
 Returns the 802.11 frame's header length. More...
 
void send (PacketSender &sender, const NetworkInterface &iface)
 
void add_option (const option &opt)
 Adds a new option to this Dot11 PDU. More...
 
void add_option (option &&opt)
 Adds a new option to this Dot11 PDU. More...
 
bool remove_option (OptionTypes type)
 Removes a Dot11 option. More...
 
const optionsearch_option (OptionTypes type) const
 Looks up a tagged option in the option list. More...
 
PDUType pdu_type () const
 Getter for the PDU's type. More...
 
Dot11clone () const
 
bool matches_flag (PDUType flag) const
 Check whether this PDU matches the specified flag. More...
 
const options_typeoptions () const
 Getter for the option list. More...
 
- Public Member Functions inherited from Tins::PDU
 PDU ()
 Default constructor.
 
 PDU (PDU &&rhs) TINS_NOEXCEPT
 Move constructor. More...
 
PDUoperator= (PDU &&rhs) TINS_NOEXCEPT
 Move assignment operator. More...
 
virtual ~PDU ()
 PDU destructor. More...
 
virtual uint32_t trailer_size () const
 Trailer's size. More...
 
uint32_t size () const
 The whole chain of PDU's size, including this one. More...
 
PDUinner_pdu () const
 Getter for the inner PDU. More...
 
PDUparent_pdu () const
 
PDUrelease_inner_pdu ()
 Releases the inner PDU. More...
 
void inner_pdu (PDU *next_pdu)
 Sets the child PDU. More...
 
void inner_pdu (const PDU &next_pdu)
 Sets the child PDU. More...
 
serialization_type serialize ()
 Serializes the whole chain of PDU's, including this one. More...
 
template<typename T >
T * find_pdu (PDUType type=T::pdu_flag)
 Finds and returns the first PDU that matches the given flag. More...
 
template<typename T >
const T * find_pdu (PDUType type=T::pdu_flag) const
 Finds and returns the first PDU that matches the given flag. More...
 
template<typename T >
T & rfind_pdu (PDUType type=T::pdu_flag)
 Finds and returns the first PDU that matches the given flag. More...
 
template<typename T >
const T & rfind_pdu (PDUType type=T::pdu_flag) const
 Finds and returns the first PDU that matches the given flag. More...
 
virtual PDUrecv_response (PacketSender &sender, const NetworkInterface &iface)
 Receives a matching response for this packet. More...
 
virtual bool matches_response (const uint8_t *ptr, uint32_t total_sz) const
 Check whether ptr points to a valid response for this PDU. More...
 

Static Public Member Functions

static Dot11from_bytes (const uint8_t *buffer, uint32_t total_sz)
 Allocates an Dot11 PDU from a buffer. More...
 

Static Public Attributes

static const PDU::PDUType pdu_flag = PDU::DOT11
 This PDU's flag.
 
static const address_type BROADCAST = "ff:ff:ff:ff:ff:ff"
 Broadcast hardware address.
 
static const endian_type endianness = LE
 
- Static Public Attributes inherited from Tins::PDU
static const endian_type endianness = BE
 

Protected Member Functions

virtual void write_ext_header (Memory::OutputMemoryStream &stream)
 
virtual void write_fixed_parameters (Memory::OutputMemoryStream &stream)
 
void parse_tagged_parameters (Memory::InputMemoryStream &stream)
 
void add_tagged_option (OptionTypes opt, uint8_t len, const uint8_t *val)
 
- Protected Member Functions inherited from Tins::PDU
 PDU (const PDU &other)
 Copy constructor.
 
PDUoperator= (const PDU &other)
 Copy assignment operator.
 
void copy_inner_pdu (const PDU &pdu)
 Copy other PDU's inner PDU(if any). More...
 
virtual void prepare_for_serialize ()
 Prepares this PDU for serialization. More...
 
void serialize (uint8_t *buffer, uint32_t total_sz)
 Serializes this PDU and propagates this action to child PDUs. More...
 

Protected Attributes

TINS_BEGIN_PACK struct Tins::Dot11::dot11_header TINS_END_PACK
 

Detailed Description

Class representing an 802.11 frame.

Member Typedef Documentation

The type used to store hardware addresses.

typedef std::vector<option> Tins::Dot11::options_type

The type used to store tagged options.

Constructor & Destructor Documentation

Tins::Dot11::Dot11 ( const address_type dst_hw_addr = address_type())

Constructs an 802.11 PDU.

Parameters
dst_hw_addrThe destination hardware address.
Tins::Dot11::Dot11 ( const uint8_t *  buffer,
uint32_t  total_sz 
)

Constructs 802.11 PDU from a buffer and adds all identifiable PDUs found in the buffer as children of this one.

If the next PDU is not recognized, then a RawPDU is used.

If there is not enough size for a 802.11 header in the buffer, a malformed_packet exception is thrown.

Parameters
bufferThe buffer from which this PDU will be constructed.
total_szThe total size of the buffer.

Member Function Documentation

void Tins::Dot11::add_option ( const option opt)

Adds a new option to this Dot11 PDU.

Parameters
optThe option to be added.
void Tins::Dot11::add_option ( option &&  opt)
inline

Adds a new option to this Dot11 PDU.

The option is move-constructed

Parameters
optThe option to be added.
address_type Tins::Dot11::addr1 ( ) const
inline

Getter for the first address.

Returns
The stored first address.
void Tins::Dot11::addr1 ( const address_type new_addr1)

Setter for the first address.

Parameters
new_addr1The new first address.
Dot11* Tins::Dot11::clone ( ) const
inlinevirtual
uint16_t Tins::Dot11::duration_id ( ) const
inline

Getter for the Duration-ID field.

Returns
The stored Duration-ID field.
void Tins::Dot11::duration_id ( uint16_t  new_duration_id)

Setter for the Duration-ID field.

Parameters
new_duration_idThe new Duration-ID field value.
Dot11 * Tins::Dot11::from_bytes ( const uint8_t *  buffer,
uint32_t  total_sz 
)
static

Allocates an Dot11 PDU from a buffer.

This can be used somehow as a "virtual constructor". This method instantiates the appropriate subclass of Dot11 from the given buffer.

The allocated class' type will be figured out from the information provided in the buffer.

Parameters
bufferThe buffer from which to take the PDU data.
total_szThe total size of the buffer.
Returns
The allocated Dot11 PDU.
small_uint<1> Tins::Dot11::from_ds ( ) const
inline

Getter for the From-DS field.

Returns
The stored From-DS field.
void Tins::Dot11::from_ds ( small_uint< 1 >  new_value)

Setter for the From-DS field.

Parameters
new_valueThe new From-DS field value.
uint32_t Tins::Dot11::header_size ( ) const
virtual

Returns the 802.11 frame's header length.

Returns
An uint32_t with the header's size.
See also
PDU::header_size()

Implements Tins::PDU.

Reimplemented in Tins::Dot11ManagementFrame, Tins::Dot11BlockAck, Tins::Dot11BlockAckRequest, Tins::Dot11QoSData, Tins::Dot11Data, Tins::Dot11ProbeResponse, Tins::Dot11ControlTA, and Tins::Dot11Beacon.

bool Tins::Dot11::matches_flag ( PDUType  flag) const
inlinevirtual
small_uint<1> Tins::Dot11::more_data ( ) const
inline

Getter for the More Data field.

Returns
The stored More Data field.
void Tins::Dot11::more_data ( small_uint< 1 >  new_value)

Setter for the More Data field.

Parameters
new_valueThe new More Data field value.
small_uint<1> Tins::Dot11::more_frag ( ) const
inline

Getter for the More-Frag field.

Returns
The stored More-Frag field.
void Tins::Dot11::more_frag ( small_uint< 1 >  new_value)

Setter for the More-Frag field.

Parameters
new_valueThe new More-Frag field value.
const options_type& Tins::Dot11::options ( ) const
inline

Getter for the option list.

Returns
The options list.
small_uint<1> Tins::Dot11::order ( ) const
inline

Getter for the Order field.

Returns
The stored Order field.
void Tins::Dot11::order ( small_uint< 1 >  new_value)

Setter for the Order field.

Parameters
new_valueThe new Order field value.
PDUType Tins::Dot11::pdu_type ( ) const
inlinevirtual
small_uint<1> Tins::Dot11::power_mgmt ( ) const
inline

Getter for the Power-Management field.

Returns
The stored Power-Management field.
void Tins::Dot11::power_mgmt ( small_uint< 1 >  new_value)

Setter for the Power-Management field.

Parameters
new_valueThe new Power-Management field value.
small_uint<2> Tins::Dot11::protocol ( ) const
inline

Getter for the protocol version field.

Returns
The stored protocol version field.
void Tins::Dot11::protocol ( small_uint< 2 >  new_proto)

Setter for the protocol version field.

Parameters
new_protoThe new protocol version field value.
bool Tins::Dot11::remove_option ( OptionTypes  type)

Removes a Dot11 option.

If there are multiple options of the given type, only the first one will be removed.

Parameters
typeThe type of the option to be removed.
Returns
true if the option was removed, false otherwise.
small_uint<1> Tins::Dot11::retry ( ) const
inline

Getter for the Retry field.

Returns
The stored Retry field.
void Tins::Dot11::retry ( small_uint< 1 >  new_value)

Setter for the Retry field.

Parameters
new_valueThe new Retry field value.
const Dot11::option * Tins::Dot11::search_option ( OptionTypes  type) const

Looks up a tagged option in the option list.

The returned pointer must not be free'd.

Parameters
typeThe option identifier.
Returns
The option found, or 0 if no such option has been set.
void Tins::Dot11::send ( PacketSender sender,
const NetworkInterface iface 
)
virtual
See also
PDU::send()

Reimplemented from Tins::PDU.

small_uint<4> Tins::Dot11::subtype ( ) const
inline

Getter for the Subtype field.

Returns
The stored Subtype field.
void Tins::Dot11::subtype ( small_uint< 4 >  new_subtype)

Setter for the subtype field.

Parameters
new_subtypeThe new subtype field value.
small_uint<1> Tins::Dot11::to_ds ( ) const
inline

Getter for the To-DS field.

Returns
The stored To-DS field.
void Tins::Dot11::to_ds ( small_uint< 1 >  new_value)

Setter for the To-DS field.

Parameters
new_valueThe new To-DS field value.
small_uint<2> Tins::Dot11::type ( ) const
inline

Getter for the Type field.

Returns
The stored Type field.
void Tins::Dot11::type ( small_uint< 2 >  new_type)

Setter for the type field.

Parameters
new_typeThe new type field value.
small_uint<1> Tins::Dot11::wep ( ) const
inline

Getter for the WEP field.

Returns
The stored WEP field.
void Tins::Dot11::wep ( small_uint< 1 >  new_value)

Setter for the WEP field.

Parameters
new_valueThe new WEP field value.

Member Data Documentation

const endian_type Tins::Dot11::endianness = LE
static

The endianness used by Dot11.


The documentation for this class was generated from the following files: