00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef WIFI_STATS_ON_OFF_DATA_HH_
00023 # define WIFI_STATS_ON_OFF_DATA_HH_
00024
00025 # include <wipal/wifi/stats/module.hh>
00026
00027 namespace wpl
00028 {
00029
00030 namespace wifi
00031 {
00032
00033 namespace stats
00034 {
00035
00036 struct on_off_data: public module
00037 {
00038 on_off_data(const void* other_modules = 0);
00039
00040 template <class Frame>
00041 void
00042 account_frame(const Frame& frame,
00043 const size_t& len80211,
00044 const type::frame_type& type,
00045 const unsigned& subtype,
00046 const bool& retx,
00047 const addr* const& receiver,
00048 const addr* const& transmitter,
00049 const bool& from_ap);
00050
00051 void restart();
00052 std::ostream& print(std::ostream& os) const;
00053
00054 tool::microseconds time_on(const addr& sta) const;
00055
00056 private:
00057
00058 struct state
00059 {
00060 enum
00061 {
00070 lifetime = 3 * 60 * 1000 * 1000
00071 };
00072
00073 state(const tool::microseconds& first_seen);
00074
00075 tool::microseconds last_seen;
00076 std::vector<tool::microseconds> events;
00077 };
00078
00079 typedef std::pair<unsigned, addr> state_id;
00080 typedef std::map<state_id, state> states;
00081
00082 unsigned trace_;
00083 std::vector<tool::microseconds> last_stamps_;
00084 states states_;
00085 };
00086
00087
00088 }
00089
00090 }
00091
00092 }
00093
00094 # include "on_off_data.hxx"
00095
00096 #endif // ! WIFI_STATS_ON_OFF_DATA_HH_