Program Listing for File sniffer.h
↰ Return to documentation for file (components/wifi_sniffer/sniffer.h)
#pragma once
#include <stdint.h>
#include "esp_err.h"
// Sniffer Maximum packet size and ring buffer sizes
#define MAX_PACKET_SIZE 1536
// Ring buffer 슬롯 개수 (PSRAM 유무에 따라 다르게 설정)
#define RING_SLOTS_PSRAM 3072 // 약 5MB (3072 * 4+16+1536 = 5,018,112B)
#define RING_SLOTS_INTERNAL 256
// USB CDC Sync Magic and Packet Magic
#define SYNC_MAGIC 0xDEADBEEF // Stream and USB CDC Sync Magic
#define PACKET_HEADER_MAGIC 0xA5A5A5A5 // PACKET_PREFIX Magic number
/*
Ring Buffer + USB_CDC Format: ring_slot_hdr_t
- [SYNC_MAGIC(4B)][Ring Buffer(8)][PACKET_HEADER_MAGIC+PACKET_PREFIX(16B)][PAYLOAD]
USB_CDC Format: packet_prefix_t
- [SYNC_MAGIC(4B)][PACKET_HEADER_MAGIC+PACKET_PREFIX(16B)][PAYLOAD]
*/
/* on-wire prefix = 16B (packed) */
typedef struct __attribute__((packed)) {
uint32_t magic; /* PACKET_HEADER_MAGIC */
uint32_t ts_sec; /* epoch seconds */
uint32_t ts_usec; /* microseconds */
uint8_t channel; /* Wi-Fi channel */
int8_t rssi; /* RSSI dBm */
uint16_t len; /* payload length (<= MAX_PACKET_SIZE) */
}__attribute__((packed)) packet_prefix_t;
/* Initialization and start helpers */
void sniffer_init(void); // ring buffer + streamer task
void sniffer_enable_promiscuous(void); // filter + callback + promiscuous on
void sniffer_ring_reset(void); // ring buffer reset
void sniffer_print_stats(void); // print captured/dropped counts (for cmd)