| | 193 | void lcpf_deauth(struct lcpa_metapack *pack, uint8_t *src, uint8_t *dst, |
| | 194 | uint8_t *bssid, int framecontrol, |
| | 195 | int duration, int fragment, |
| | 196 | int sequence, int reasoncode) { |
| | 197 | uint8_t chunk[2]; |
| | 198 | uint16_t *ch16 = (uint16_t *) chunk; |
| | 199 | |
| | 200 | lcpf_80211headers(pack, 0, 12, framecontrol, duration, |
| | 201 | dst, src, bssid, NULL, fragment, sequence); |
| | 202 | |
| | 203 | *ch16 = reasoncode; |
| | 204 | lcpa_append_copy(pack, "REASONCODE", 2, chunk); |
| | 205 | } |
| | 206 | |
| | 259 | |
| | 260 | void lcpf_authreq(struct lcpa_metapack *pack, uint8_t *dst, uint8_t *src, |
| | 261 | uint8_t *bssid, int framecontrol, int duration, int fragment, |
| | 262 | int sequence, uint16_t authalgo, uint16_t auth_seq, |
| | 263 | uint16_t auth_status) |
| | 264 | { |
| | 265 | uint8_t chunk[2]; |
| | 266 | uint16_t *sixptr = (uint16_t *) chunk; |
| | 267 | |
| | 268 | lcpf_80211headers(pack, 0, 11, framecontrol, duration, |
| | 269 | dst, src, bssid, NULL, |
| | 270 | fragment, sequence); |
| | 271 | |
| | 272 | *sixptr = authalgo; |
| | 273 | pack = lcpa_append_copy(pack, "AUTHALGO", 2, chunk); |
| | 274 | *sixptr = auth_seq; |
| | 275 | pack = lcpa_append_copy(pack, "AUTHSEQ", 2, chunk); |
| | 276 | *sixptr = auth_status; |
| | 277 | pack = lcpa_append_copy(pack, "AUTHSTATUS", 2, chunk); |
| | 278 | |
| | 279 | } |
| | 280 | |
| | 281 | /* Authentication response is the same for open networks, with IE tags */ |
| | 282 | void lcpf_authresq(struct lcpa_metapack *pack, uint8_t *dst, uint8_t *src, |
| | 283 | uint8_t *bssid, int framecontrol, int duration, int fragment, |
| | 284 | int sequence, uint16_t authalgo, uint16_t auth_seq, |
| | 285 | uint16_t auth_status) |
| | 286 | { |
| | 287 | lcpf_authreq(pack, dst, src, bssid, framecontrol, duration, fragment, |
| | 288 | sequence, authalgo, auth_seq, auth_status); |
| | 289 | } |
| | 290 | |
| | 291 | void lcpf_assocreq(struct lcpa_metapack *pack, uint8_t *dst, uint8_t *src, |
| | 292 | uint8_t *bssid, int framecontrol, int duration, int fragment, |
| | 293 | int sequence, uint16_t capabilities, uint16_t listenint) |
| | 294 | { |
| | 295 | uint8_t chunk[2]; |
| | 296 | uint16_t *sixptr = (uint16_t *) chunk; |
| | 297 | |
| | 298 | lcpf_80211headers(pack, 0, 5, framecontrol, duration, |
| | 299 | dst, src, bssid, NULL, |
| | 300 | fragment, sequence); |
| | 301 | |
| | 302 | *sixptr = capabilities; |
| | 303 | pack = lcpa_append_copy(pack, "ASSOCREQCAPAB", 2, chunk); |
| | 304 | *sixptr = listenint; |
| | 305 | pack = lcpa_append_copy(pack, "ASSOCREQLI", 2, chunk); |
| | 306 | } |
| | 307 | |
| | 308 | void lcpf_assocresp(struct lcpa_metapack *pack, uint8_t *dst, uint8_t *src, |
| | 309 | uint8_t *bssid, int framecontrol, int duration, int fragment, |
| | 310 | int sequence, uint16_t capabilities, uint16_t status, |
| | 311 | uint16_t aid) |
| | 312 | { |
| | 313 | uint8_t chunk[2]; |
| | 314 | uint16_t *sixptr = (uint16_t *) chunk; |
| | 315 | |
| | 316 | lcpf_80211headers(pack, 0, 5, framecontrol, duration, |
| | 317 | dst, src, bssid, NULL, |
| | 318 | fragment, sequence); |
| | 319 | |
| | 320 | *sixptr = capabilities; |
| | 321 | pack = lcpa_append_copy(pack, "ASSOCRESPCAPAB", 2, chunk); |
| | 322 | *sixptr = status; |
| | 323 | pack = lcpa_append_copy(pack, "ASSOCRESPSTAT", 2, chunk); |
| | 324 | *sixptr = aid; |
| | 325 | pack = lcpa_append_copy(pack, "ASSOCRESPID", 2, chunk); |
| | 326 | } |
| | 327 | |