00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef WIFI_DISSECTOR_DEFAULT_HOOKS_HH_
00023 # define WIFI_DISSECTOR_DEFAULT_HOOKS_HH_
00024
00025 # include <wipal/wifi/mgt.hh>
00026 # include <wipal/wifi/ctl.hh>
00027 # include <wipal/wifi/data.hh>
00028 # include <wipal/wifi/dissector/status.hh>
00029
00030 namespace wpl
00031 {
00032
00033 namespace wifi
00034 {
00057 struct dissector_default_hooks
00058 {
00060 typedef dissector_status::status status;
00061
00062 protected:
00063
00064
00066
00068
00069 void invalid_type_or_subtype_hook(const void*, size_t, status);
00070 void invalid_type_hook(const void*, size_t);
00071 void invalid_subtype_hook(const void*, size_t, status);
00072 void invalid_management_subtype_hook(const mgt::header*, size_t);
00073 void invalid_control_subtype_hook(const void*, size_t);
00074 void invalid_data_subtype_hook(const void*, size_t, status);
00075
00077
00078
00079
00081
00083
00084
00086 void frame_hook(const void*, size_t);
00087
00094 void addr_hook(const void*, size_t, unsigned, const addr&);
00095
00102 void seq_ctl_hook(const void*, size_t,
00103 unsigned frag,
00104 unsigned seqno);
00105
00107 void qos_ctl_hook(const void*, size_t,
00108 unsigned tid,
00109 bool eosp,
00110 unsigned ackpolicy,
00111 unsigned lastfield);
00112
00114 void end_of_frame_headers_hook(const void*, size_t, const void*);
00115
00117 void end_of_frame_hook(const void*, size_t, status);
00118
00120 void management_hook(const mgt::header*, size_t);
00121
00123 void control_hook(const void*, size_t);
00124
00126 void data_hook(const void*, size_t);
00127
00129
00130
00131
00133
00135
00136 void truncated_frame_hook(const void*, size_t, status);
00137 void truncated_unknown_frame_hook(const void*, size_t);
00138 void truncated_management_frame_hook(const mgt::header*, size_t,
00139 status);
00140 void truncated_ps_poll_frame_hook(const ctl::ps_poll::header*,
00141 size_t, status);
00142 void truncated_rts_frame_hook(const ctl::rts::header*, size_t,
00143 status);
00144 void truncated_cf_end_frame_hook(const ctl::cf_end::header*, size_t,
00145 status);
00146 void truncated_cf_end_cf_ack_frame_hook(const ctl::cf_end_cf_ack::
00147 header*, size_t, status);
00148 void truncated_cts_frame_hook(const ctl::cts::header*, size_t);
00149 void truncated_ack_frame_hook(const ctl::ack::header*, size_t);
00150 void truncated_data_frame_hook(const void*, size_t, status);
00151
00152
00153
00154
00156
00158
00159
00160 void management_addr1_hook(const mgt::header*, size_t);
00161 void management_addr2_hook(const mgt::header*, size_t);
00162 void management_addr3_hook(const mgt::header*, size_t);
00163 void management_seq_ctl_hook(const mgt::header*, size_t,
00164 unsigned, unsigned);
00165
00166
00167 void beacon_hook(const mgt::header*, size_t);
00168 void assoc_req_hook(const mgt::header*, size_t);
00169 void assoc_resp_hook(const mgt::header*, size_t);
00170 void reassoc_req_hook(const mgt::header*, size_t);
00171 void reassoc_resp_hook(const mgt::header*, size_t);
00172 void probe_req_hook(const mgt::header*, size_t);
00173 void probe_resp_hook(const mgt::header*, size_t);
00174 void atim_hook(const mgt::header*, size_t);
00175 void disassoc_hook(const mgt::header*, size_t);
00176 void auth_hook(const mgt::header*, size_t);
00177 void deauth_hook(const mgt::header*, size_t);
00178
00180
00181
00182
00184
00186
00187
00188 void ps_poll_hook(const ctl::ps_poll::header*, size_t);
00189 void rts_hook(const ctl::rts::header*, size_t);
00190 void cf_end_hook(const ctl::cf_end::header*, size_t);
00191 void cf_end_cf_ack_hook(const ctl::cf_end_cf_ack::header*, size_t);
00192 void cts_hook(const ctl::cts::header*, size_t);
00193 void ack_hook(const ctl::ack::header*, size_t);
00194
00195
00196
00197
00198 void ps_poll_addr1_hook(const ctl::ps_poll::header*, size_t);
00199 void ps_poll_addr2_hook(const ctl::ps_poll::header*, size_t);
00200
00201
00202 void rts_addr1_hook(const ctl::rts::header*, size_t);
00203 void rts_addr2_hook(const ctl::rts::header*, size_t);
00204
00205
00206 void cf_end_addr1_hook(const ctl::cf_end::header*, size_t);
00207 void cf_end_addr2_hook(const ctl::cf_end::header*, size_t);
00208
00209
00210 void cf_end_cf_ack_addr1_hook(const ctl::cf_end_cf_ack::header*, size_t);
00211 void cf_end_cf_ack_addr2_hook(const ctl::cf_end_cf_ack::header*, size_t);
00212
00213
00214 void cts_addr1_hook(const ctl::cts::header*, size_t);
00215
00216
00217 void ack_addr1_hook(const ctl::ack::header*, size_t);
00218
00220
00221
00223
00225
00226
00227 void data_addr1_hook(const void*, size_t);
00228 void data_addr2_hook(const void*, size_t);
00229 void data_addr3_hook(const void*, size_t);
00230 void data_addr4_hook(const void*, size_t);
00231 void data_seq_ctl_hook(const void*, size_t, unsigned, unsigned);
00232
00233
00234 void data_only_hook(const void*, size_t, status);
00235 void data_cf_ack_hook(const void*, size_t, status);
00236 void data_cf_poll_hook(const void*, size_t, status);
00237 void data_cf_ack_cf_poll_hook(const void*, size_t, status);
00238 void null_hook(const void*, size_t, status);
00239 void cf_ack_hook(const void*, size_t, status);
00240 void cf_poll_hook(const void*, size_t, status);
00241 void cf_ack_cf_poll_hook(const void*, size_t, status);
00242
00243 void within_ibss_hook(const data::within_ibss::header*, size_t);
00244 void from_ds_hook(const data::from_ds::header*, size_t);
00245 void to_ds_hook(const data::to_ds::header*, size_t);
00246 void ap_to_ap_hook(const data::ap_to_ap::header*, size_t);
00247
00249
00250 };
00251
00252 }
00253
00254 }
00255
00256 # include "default_hooks.hxx"
00257
00258 #endif // ! WIFI_DISSECTOR_DEFAULT_HOOKS_HH_