esp32: add sniffer filter api

Add sniffer filter to filter specified packets
pull/560/merge
Liu Zhi Fu 2017-05-26 14:11:16 +08:00
rodzic 1cbdb35e1e
commit f40be8eb77
2 zmienionych plików z 38 dodań i 2 usunięć

Wyświetl plik

@ -610,6 +610,31 @@ esp_err_t esp_wifi_set_promiscuous(bool en);
*/ */
esp_err_t esp_wifi_get_promiscuous(bool *en); esp_err_t esp_wifi_get_promiscuous(bool *en);
/**
* @brief Enable the promiscuous filter.
*
* @attention 1. The default filter is to filter all packets except WIFI_PKT_MISC
*
* @param filter the packet type filtered by promisucous
*
* @return
* - ESP_OK: succeed
* - ESP_ERR_WIFI_NOT_INIT: WiFi is not initialized by eps_wifi_init
*/
esp_err_t esp_wifi_set_promiscuous_filter(const wifi_promiscuous_filter_t *filter);
/**
* @brief Get the promiscuous filter.
*
* @param[out] filter store the current status of promiscuous filter
*
* @return
* - ESP_OK: succeed
* - ESP_ERR_WIFI_NOT_INIT: WiFi is not initialized by eps_wifi_init
* - ESP_ERR_WIFI_ARG: invalid argument
*/
esp_err_t esp_wifi_get_promiscuous_filter(wifi_promiscuous_filter_t *filter);
/** /**
* @brief Set the configuration of the ESP32 STA or AP * @brief Set the configuration of the ESP32 STA or AP
* *

Wyświetl plik

@ -246,12 +246,23 @@ typedef struct {
* *
*/ */
typedef enum { typedef enum {
WIFI_PKT_CTRL, /**< control type, receive packet buf is wifi_promiscuous_pkt_t */
WIFI_PKT_MGMT, /**< management type, receive packet buf is wifi_promiscuous_pkt_t */ WIFI_PKT_MGMT, /**< management type, receive packet buf is wifi_promiscuous_pkt_t */
WIFI_PKT_DATA, /**< data type, receive packet buf is wifi_promiscuous_pkt_t */ WIFI_PKT_DATA, /**< data type, receive packet buf is wifi_promiscuous_pkt_t */
WIFI_PKT_MISC, /**< other type, receive packet buf is wifi_promiscuous_pkt_t */ WIFI_PKT_MISC, /**< other type, such as MIMO etc, receive packet buf is wifi_promiscuous_pkt_t but the payload is NULL!!! */
} wifi_promiscuous_pkt_type_t; } wifi_promiscuous_pkt_type_t;
#define WIFI_PROMIS_FILTER_MASK_ALL (0xFFFFFFFF) /**< filter all packets */
#define WIFI_PROMIS_FILTER_MASK_MGMT (1) /**< filter the packets with type of WIFI_PKT_MGMT */
#define WIFI_PROMIS_FILTER_MASK_DATA (1<<1) /**< filter the packets with type of WIFI_PKT_DATA */
#define WIFI_PROMIS_FILTER_MASK_MISC (1<<2) /**< filter the packets with type of WIFI_PKT_MISC */
#define WIFI_PROMIS_FILTER_MASK_DATA_MPDU (1<<3) /**< filter the MPDU which is a kind of WIFI_PKT_DATA */
#define WIFI_PROMIS_FILTER_MASK_DATA_AMPDU (1<<4) /**< filter the AMPDU which is a kind of WIFI_PKT_DATA */
typedef struct {
uint32_t filter_mask;
} wifi_promiscuous_filter_t;
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif