77 lines
1.9 KiB
C
77 lines
1.9 KiB
C
#ifndef FRAME_PARSER_H
|
|
#define FRAME_PARSER_H
|
|
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
|
|
/**
|
|
* @brief 802.11 Frame types
|
|
*/
|
|
typedef enum {
|
|
FRAME_TYPE_MANAGEMENT = 0,
|
|
FRAME_TYPE_CONTROL = 1,
|
|
FRAME_TYPE_DATA = 2,
|
|
FRAME_TYPE_RESERVED = 3
|
|
} wifi_frame_type_t;
|
|
|
|
/**
|
|
* @brief Parsed 802.11 frame information (similar to ESP32 wifi_frame_info_t)
|
|
*/
|
|
typedef struct {
|
|
// Frame Control
|
|
uint16_t frame_control;
|
|
uint8_t type;
|
|
uint8_t subtype;
|
|
bool to_ds;
|
|
bool from_ds;
|
|
bool retry;
|
|
|
|
// Duration/ID (NAV)
|
|
uint16_t duration_id;
|
|
|
|
// MAC Addresses
|
|
uint8_t addr1[6]; // Receiver Address (RA)
|
|
uint8_t addr2[6]; // Transmitter Address (TA)
|
|
uint8_t addr3[6]; // BSSID/SA/DA
|
|
uint8_t addr4[6]; // Optional Address 4
|
|
bool has_addr4;
|
|
|
|
// Sequence Control
|
|
uint16_t seq_ctrl;
|
|
uint16_t fragment_num;
|
|
uint16_t sequence_num;
|
|
|
|
// PHY info (from radiotap header if available)
|
|
int8_t rssi;
|
|
uint8_t mcs;
|
|
uint8_t spatial_streams; // NSS
|
|
uint8_t bandwidth; // 0=20MHz, 1=40MHz, 2=80MHz, 3=160MHz
|
|
bool sgi; // Short Guard Interval
|
|
uint32_t phy_rate_kbps;
|
|
|
|
// Frame size
|
|
uint16_t frame_len;
|
|
} wifi_frame_info_t;
|
|
|
|
/**
|
|
* @brief Parse 802.11 frame header
|
|
* @param packet Raw packet data (including radiotap header if present)
|
|
* @param len Packet length
|
|
* @param frame_info Output: parsed frame information
|
|
* @return 0 on success, -1 on error
|
|
*/
|
|
int parse_80211_frame(const uint8_t *packet, size_t len, wifi_frame_info_t *frame_info);
|
|
|
|
/**
|
|
* @brief Get human-readable frame type name
|
|
*/
|
|
const char *get_frame_type_name(uint8_t type, uint8_t subtype);
|
|
|
|
/**
|
|
* @brief Print frame information (for verification/comparison with ESP32)
|
|
*/
|
|
void print_frame_info(const wifi_frame_info_t *frame_info, uint64_t timestamp_us);
|
|
|
|
#endif /* FRAME_PARSER_H */
|