Moved the management of the AP and Stations from nl80211 driver to generic wifi.

This commit is contained in:
vemax78
2014-04-21 23:16:56 +02:00
parent fbd717b779
commit 7668ab7c7c
16 changed files with 2195 additions and 2325 deletions

View File

@ -284,6 +284,38 @@ int ieee80211_is_broadcast_addr(const uint8_t* addr) {
return (((addr[0] == 0xff) && (addr[1] == 0xff) && (addr[2] == 0xff) && (addr[3] == 0xff) && (addr[4] == 0xff) && (addr[5] == 0xff)) ? 1 : 0);
}
/* */
const uint8_t* ieee80211_get_bssid_addr(const struct ieee80211_header* header) {
uint16_t framecontrol;
uint16_t framecontrol_type;
ASSERT(header);
/* Get type frame */
framecontrol = __le16_to_cpu(header->framecontrol);
framecontrol_type = IEEE80211_FRAME_CONTROL_GET_TYPE(framecontrol);
if (framecontrol_type == IEEE80211_FRAMECONTROL_TYPE_MGMT) {
return header->address3;
} else if (framecontrol_type == IEEE80211_FRAMECONTROL_TYPE_DATA) {
switch (framecontrol & (IEEE80211_FRAME_CONTROL_MASK_TODS | IEEE80211_FRAME_CONTROL_MASK_FROMDS)) {
case 0: {
return header->address3;
}
case IEEE80211_FRAME_CONTROL_MASK_TODS: {
return header->address1;
}
case IEEE80211_FRAME_CONTROL_MASK_FROMDS: {
return header->address2;
}
}
}
return NULL;
}
/* */
int ieee80211_is_valid_ssid(const char* ssid, struct ieee80211_ie_ssid* iessid, struct ieee80211_ie_ssid_list* isssidlist) {
int ssidlength;

View File

@ -99,9 +99,21 @@
#define IEEE80211_FRAMECONTROL_DATA_SUBTYPE_QOSCFACK_CFPOLL 15
/* */
#define IEEE80211_FRAME_CONTROL_MASK_PROTOCOL_VERSION 0x0003
#define IEEE80211_FRAME_CONTROL_MASK_TYPE 0x000c
#define IEEE80211_FRAME_CONTROL_MASK_SUBTYPE 0x00f0
#define IEEE80211_FRAME_CONTROL_MASK_TODS 0x0100
#define IEEE80211_FRAME_CONTROL_MASK_FROMDS 0x0200
#define IEEE80211_FRAME_CONTROL_MASK_MORE_FRAGMENT 0x0400
#define IEEE80211_FRAME_CONTROL_MASK_RETRY 0x0800
#define IEEE80211_FRAME_CONTROL_MASK_POWER_MANAGEMENT 0x1000
#define IEEE80211_FRAME_CONTROL_MASK_MORE_DATA 0x2000
#define IEEE80211_FRAME_CONTROL_MASK_PROTECTED_FRAME 0x4000
#define IEEE80211_FRAME_CONTROL_MASK_ORDER 0x8000
#define IEEE80211_FRAME_CONTROL(type, stype) __cpu_to_le16((type << 2) | (stype << 4))
#define IEEE80211_FRAME_CONTROL_GET_TYPE(framecontrol) (((framecontrol) & 0x000c) >> 2)
#define IEEE80211_FRAME_CONTROL_GET_SUBTYPE(framecontrol) (((framecontrol) & 0x00f0) >> 4)
#define IEEE80211_FRAME_CONTROL_GET_TYPE(framecontrol) (((framecontrol) & IEEE80211_FRAME_CONTROL_MASK_TYPE) >> 2)
#define IEEE80211_FRAME_CONTROL_GET_SUBTYPE(framecontrol) (((framecontrol) & IEEE80211_FRAME_CONTROL_MASK_SUBTYPE) >> 4)
/* IEEE802.11 Status Code */
#define IEEE80211_STATUS_SUCCESS 0
@ -572,6 +584,7 @@ int ieee80211_create_deauthentication(uint8_t* buffer, int length, struct ieee80
int ieee80211_retrieve_information_elements_position(struct ieee80211_ie_items* items, const uint8_t* data, int length);
unsigned long ieee80211_frequency_to_channel(uint32_t freq);
int ieee80211_is_broadcast_addr(const uint8_t* addr);
const uint8_t* ieee80211_get_bssid_addr(const struct ieee80211_header* header);
/* */
#define IEEE80211_VALID_SSID 1

View File

@ -39,6 +39,9 @@
#define min(a,b) ((a) <= (b) ? (a) : (b))
#endif
/* Opaque type */
#define DECLARE_OPAQUE_TYPE(name) struct name##__opaque__ { int unused; }; typedef struct name##__opaque__* name
/* UDPLite */
#ifdef HAVE_NETINET_UDPLITE_H
#include <netinet/udplite.h>
@ -55,6 +58,7 @@
#endif
/* standard include */
#include "capwap_rfc.h"
#include "capwap_logging.h"
#include "capwap_debug.h"
#include "capwap_error.h"

View File

@ -1,7 +1,6 @@
#ifndef __CAPWAP_ELEMENT_HEADER__
#define __CAPWAP_ELEMENT_HEADER__
#include "capwap_rfc.h"
#include "capwap_array.h"
#include "capwap_list.h"

View File

@ -1,7 +1,6 @@
#ifndef __CAPWAP_PROTOCOL_HEADER__
#define __CAPWAP_PROTOCOL_HEADER__
#include "capwap_rfc.h"
#include "capwap_element.h"
#include "capwap_network.h"
#include "capwap_dtls.h"