Base class for all PHY headers. More...
#include <wipal/phy/phy.hh>
Public Types | |
typedef HIDDEN | exact_type |
typedef HIDDEN | time_type |
Public Member Functions | |
size_t | len (size_t caplen, bool swapped) const |
const void * | decapsulate (size_t caplen, bool swapped) const |
time_type | time_get (bool swapped) const |
void | time_set (const time_type &time, bool swapped) |
Downcast methods | |
const exact_type & | exact () const |
exact_type & | exact () |
const exact_type * | exact_ptr () const |
exact_type * | exact_ptr () |
Static Public Member Functions | |
template<class S1 , class S2 > | |
static bool | eq_80211 (const pkt::packet< S1 > &lhs, const pkt::packet< S2 > &rhs, tool::end::endianness phy_end=tool::end::guess) |
template<class S1 , class S2 > | |
static bool | eq_time_and_80211 (const pkt::packet< S1 > &lhs, const pkt::packet< S2 > &rhs, const unsigned precision, const tool::end::endianness phy_end=tool::end::guess) |
Base class for all PHY headers.
All PHY headers shall subclass this class. It provides a common interface so WiPal's internals work whatever the PHY header.
To subclass, you must define the time_type
virtual type, implement len_impl()
, time_get_impl()
, time_set_impl()
, and eq_time()
.
time_type
is the type of the PHY header's timing information. Use phy::empty_time if your PHY header has no timing information.
time_get_impl()
and time_set_impl()
retrieve and set this PHY header's timing information.
eq_time()
indicates whether two frames are equals with respect to timestamps. If no timestamps are available, implement it by comparing PCAP timestamps.
len_impl()
returns the size of the PHY header.
typedef HIDDEN wpl::phy::header< Bottom >::exact_type |
Exact type for this template instanciation.
Reimplemented from wpl::tool::static_base< Bottom >.
Reimplemented in wpl::avs::header, wpl::phy::empty_header< Bottom >, wpl::prism::header, and wpl::rtap::header.
const void * wpl::phy::header< B >::decapsulate | ( | size_t | caplen, | |
bool | swapped | |||
) | const [inline] |
bool wpl::phy::header< B >::eq_80211 | ( | const pkt::packet< S1 > & | lhs, | |
const pkt::packet< S2 > & | rhs, | |||
tool::end::endianness | phy_end = tool::end::guess | |||
) | [inline, static] |
Compare the IEEE 802.11 bytes beyond the PHY header.
Return whether the two IEEE 802.11 frames embedded inside the PHY headers are equals. This function does not compare the PHY headers.
In case there is not enough bytes to decide whether frames are equal (caplen < sizeof prism::header), consider they are not. This is a conservative approach: when merging two traces, this will lead to both frames having their entry in the merged trace.
This method relies on decapsulate()
. You should not need to override it if your subclasses define a proper decapsulate_impl()
.
bool wpl::phy::header< B >::eq_time_and_80211 | ( | const pkt::packet< S1 > & | lhs, | |
const pkt::packet< S2 > & | rhs, | |||
const unsigned | precision, | |||
const tool::end::endianness | phy_end = tool::end::guess | |||
) | [inline, static] |
Compare the IEEE 802.11 bytes beyond PHY headers, but also check timestamps.
Return whether the two IEEE 802.11 frames embedded inside the PHY headers are equals. Also compare the timestamps of PHY headers if available (or the PCAP timestamps else). When the time difference between each header's field is less than precision
, then consider the field equals.
In case there is not enough bytes to decide whether frames are equal (caplen < sizeof prism::header), consider they are not. This is a conservative approach: when merging two traces, this will lead to both frames having their entry in the merged trace.
This method relies on eq_time()
. You should not need to override it if your subclasses define a proper eq_time()
.
size_t wpl::phy::header< B >::len | ( | size_t | caplen, | |
bool | swapped | |||
) | const [inline] |
Get the PHY header length.
Never override this method. Define len_impl()
in subclasses instead.
header< B >::time_type wpl::phy::header< B >::time_get | ( | bool | swapped | ) | const [inline] |
Extract timing information from the PHY header.
Never override this method. Define time_get_impl()
in subclasses instead.
void wpl::phy::header< B >::time_set | ( | const time_type & | time, | |
bool | swapped | |||
) | [inline] |
Set the PHY header's timing information.
Never override this method. Define time_set_impl()
in subclasses instead.