Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for the wifi monitor mode in the SDK #2204

Merged
merged 27 commits into from
Jan 10, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
98 changes: 98 additions & 0 deletions app/include/sys/network_80211.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
#define FRAME_TYPE_MANAGEMENT 0
#define FRAME_TYPE_CONTROL 1
#define FRAME_TYPE_DATA 2
#define FRAME_SUBTYPE_ASSOC_REQUEST 0x00
#define FRAME_SUBTYPE_ASSOC_RESPONSE 0x01
#define FRAME_SUBTYPE_REASSOC_REQUEST 0x02
#define FRAME_SUBTYPE_REASSOC_RESPONSE 0x03
#define FRAME_SUBTYPE_PROBE_REQUEST 0x04
#define FRAME_SUBTYPE_PROBE_RESPONSE 0x05
#define FRAME_SUBTYPE_BEACON 0x08
#define FRAME_SUBTYPE_ATIM 0x09
#define FRAME_SUBTYPE_DISASSOCIATION 0x0a
#define FRAME_SUBTYPE_AUTHENTICATION 0x0b
#define FRAME_SUBTYPE_DEAUTHENTICATION 0x0c
#define FRAME_SUBTYPE_DATA 0x14
typedef struct framectrl_80211
{
//buf[0]
u8 Protocol:2;
u8 Type:2;
u8 Subtype:4;
//buf[1]
u8 ToDS:1;
u8 FromDS:1;
u8 MoreFlag:1;
u8 Retry:1;
u8 PwrMgmt:1;
u8 MoreData:1;
u8 Protectedframe:1;
u8 Order:1;
} framectrl_80211,*lpframectrl_80211;

typedef struct management_80211
{
struct framectrl_80211 framectrl;
uint16 duration;
uint8 rdaddr[6];
uint8 tsaddr[6];
uint8 bssid[6];
uint16 number;
} management_request_t;

typedef struct
{
management_request_t hdr;
uint8 timestamp[8];
uint16 beacon_interval;
uint16 capability_info;
} wifi_beacon_t;

typedef struct tagged_parameter
{
/* SSID parameter */
uint8 tag_number;
uint8 tag_length;
} tagged_parameter, *ptagged_parameter;

struct RxControl {
signed rssi:8;//��ʾ�ð����ź�ǿ��
unsigned rate:4;
unsigned is_group:1;
unsigned:1;
unsigned sig_mode:2;//��ʾ�ð��Ƿ���11n�İ���0��ʾ��11n����0��ʾ11n
unsigned legacy_length:12;//�������11n�İ�������ʾ���ij���
unsigned damatch0:1;
unsigned damatch1:1;
unsigned bssidmatch0:1;
unsigned bssidmatch1:1;
unsigned MCS:7;//�����11n�İ�������ʾ���ĵ��Ʊ������У���Чֵ��0-76
unsigned CWB:1;//�����11n�İ�������ʾ�Ƿ�ΪHT40�İ�
unsigned HT_length:16;//�����11n�İ�������ʾ���ij���
unsigned Smoothing:1;
unsigned Not_Sounding:1;
unsigned:1;
unsigned Aggregation:1;
unsigned STBC:2;
unsigned FEC_CODING:1;//�����11n�İ�������ʾ�Ƿ�ΪLDPC�İ�
unsigned SGI:1;
unsigned rxend_state:8;
unsigned ampdu_cnt:8;
unsigned channel:4;//��ʾ�ð����ڵ��ŵ�
unsigned:12;
};

struct sniffer_buf2{
struct RxControl rx_ctrl;
u8 buf[112];//����ieee80211��ͷ
u16 cnt;//���ĸ���
u16 len[1];//���ij���
};

struct sniffer_buf{
struct RxControl rx_ctrl;
u8 buf[48];//����ieee80211��ͷ
u16 cnt;//���ĸ���
u16 len[1];//���ij���
};

1 change: 1 addition & 0 deletions app/include/user_modules.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@
//#define LUA_USE_MODULES_UCG
//#define LUA_USE_MODULES_WEBSOCKET
#define LUA_USE_MODULES_WIFI
//#define LUA_USE_MODULES_WIFI_MONITOR
//#define LUA_USE_MODULES_WPS
//#define LUA_USE_MODULES_WS2801
//#define LUA_USE_MODULES_WS2812
Expand Down
6 changes: 6 additions & 0 deletions app/modules/wifi.c
Original file line number Diff line number Diff line change
Expand Up @@ -1823,6 +1823,9 @@ static const LUA_REG_TYPE wifi_map[] = {
{ LSTRKEY( "ap" ), LROVAL( wifi_ap_map ) },
#if defined(WIFI_SDK_EVENT_MONITOR_ENABLE)
{ LSTRKEY( "eventmon" ), LROVAL( wifi_event_monitor_map ) }, //declared in wifi_eventmon.c
#endif
#if defined(LUA_USE_MODULES_WIFI_MONITOR)
{ LSTRKEY( "monitor" ), LROVAL( wifi_monitor_map ) }, //declared in wifi_monitor.c
#endif
{ LSTRKEY( "NULLMODE" ), LNUMVAL( NULL_MODE ) },
{ LSTRKEY( "STATION" ), LNUMVAL( STATION_MODE ) },
Expand Down Expand Up @@ -1898,6 +1901,9 @@ int luaopen_wifi( lua_State *L )
}
#if defined(WIFI_SDK_EVENT_MONITOR_ENABLE)
wifi_eventmon_init();
#endif
#if defined(LUA_USE_MODULES_WIFI_MONITOR)
wifi_monitor_init(L);
#endif
return 0;
}
Expand Down
5 changes: 5 additions & 0 deletions app/modules/wifi_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,4 +67,9 @@ enum wifi_suspension_state
int wifi_event_monitor_register(lua_State* L);
#endif

#ifdef LUA_USE_MODULES_WIFI_MONITOR
extern const LUA_REG_TYPE wifi_monitor_map[];
int wifi_monitor_init(lua_State *L);
#endif

#endif /* APP_MODULES_WIFI_COMMON_H_ */
14 changes: 14 additions & 0 deletions app/modules/wifi_eventmon.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,14 @@ static evt_queue_t *wifi_event_queue_head; //pointer to beginning of queue
static evt_queue_t *wifi_event_queue_tail; //pointer to end of queue
static int wifi_event_cb_ref[EVENT_MAX+1] = { [0 ... EVENT_MAX] = LUA_NOREF}; //holds references to registered Lua callbacks

#ifdef LUA_USE_MODULES_WIFI_MONITOR
static int (*hook_fn)(System_Event_t *);

void wifi_event_monitor_register_hook(int (*fn)(System_Event_t*)) {
hook_fn = fn;
}
#endif

// wifi.eventmon.register()
int wifi_event_monitor_register(lua_State* L)
{
Expand Down Expand Up @@ -58,6 +66,12 @@ static void wifi_event_monitor_handle_event_cb(System_Event_t *evt)
{
EVENT_DBG("\n\twifi_event_monitor_handle_event_cb is called\n");

#ifdef LUA_USE_MODULES_WIFI_MONITOR
if (hook_fn && hook_fn(evt)) {
return;
}
#endif

if((wifi_event_cb_ref[evt->event] != LUA_NOREF) || ((wifi_event_cb_ref[EVENT_MAX] != LUA_NOREF) &&
!(evt->event == EVENT_STAMODE_CONNECTED || evt->event == EVENT_STAMODE_DISCONNECTED ||
evt->event == EVENT_STAMODE_AUTHMODE_CHANGE || evt->event == EVENT_STAMODE_GOT_IP ||
Expand Down
Loading