Big update with type fix and minor new function.
Complete the IEEE802.11 Station Association with interation of AC in LocalMAC mode. After the IEEE802.11 Authorization / Association is complete, the AC can now authorize the WTP to accept data station packets with Station Configuration Message.
This commit is contained in:
@ -662,7 +662,16 @@ int capwap_validate_parsed_packet(struct capwap_parsed_packet* packet, struct ca
|
||||
}
|
||||
|
||||
case CAPWAP_STATION_CONFIGURATION_REQUEST: {
|
||||
/* TODO */
|
||||
if (capwap_get_message_element(packet, CAPWAP_ELEMENT_ADDSTATION)) {
|
||||
if (binding == CAPWAP_WIRELESS_BINDING_IEEE80211) {
|
||||
if (capwap_get_message_element(packet, CAPWAP_ELEMENT_80211_STATION)) {
|
||||
return 0;
|
||||
}
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -11,7 +11,7 @@ struct capwap_write_message_elements_ops {
|
||||
int (*write_u8)(capwap_message_elements_handle handle, uint8_t data);
|
||||
int (*write_u16)(capwap_message_elements_handle handle, uint16_t data);
|
||||
int (*write_u32)(capwap_message_elements_handle handle, uint32_t data);
|
||||
int (*write_block)(capwap_message_elements_handle handle, uint8_t* data, unsigned short length);
|
||||
int (*write_block)(capwap_message_elements_handle handle, const uint8_t* data, unsigned short length);
|
||||
};
|
||||
|
||||
struct capwap_read_message_elements_ops {
|
||||
|
@ -25,7 +25,7 @@ static void capwap_80211_miccountermeasures_element_create(void* data, capwap_me
|
||||
|
||||
func->write_u8(handle, element->radioid);
|
||||
func->write_u8(handle, element->wlanid);
|
||||
func->write_block(handle, element->address, CAPWAP_MIC_COUNTERMEASURES_MACADDRESS_LENGTH);
|
||||
func->write_block(handle, element->address, MACADDRESS_EUI48_LENGTH);
|
||||
}
|
||||
|
||||
/* */
|
||||
@ -47,7 +47,7 @@ static void* capwap_80211_miccountermeasures_element_parsing(capwap_message_elem
|
||||
/* Retrieve data */
|
||||
func->read_u8(handle, &data->radioid);
|
||||
func->read_u8(handle, &data->wlanid);
|
||||
func->read_block(handle, data->address, CAPWAP_MIC_COUNTERMEASURES_MACADDRESS_LENGTH);
|
||||
func->read_block(handle, data->address, MACADDRESS_EUI48_LENGTH);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
@ -3,12 +3,10 @@
|
||||
|
||||
#define CAPWAP_ELEMENT_80211_MIC_COUNTERMEASURES 1031
|
||||
|
||||
#define CAPWAP_MIC_COUNTERMEASURES_MACADDRESS_LENGTH 6
|
||||
|
||||
struct capwap_80211_miccountermeasures_element {
|
||||
uint8_t radioid;
|
||||
uint8_t wlanid;
|
||||
uint8_t address[CAPWAP_MIC_COUNTERMEASURES_MACADDRESS_LENGTH];
|
||||
uint8_t address[MACADDRESS_EUI48_LENGTH];
|
||||
};
|
||||
|
||||
extern struct capwap_message_elements_ops capwap_element_80211_miccountermeasures_ops;
|
||||
|
@ -40,8 +40,8 @@ static void capwap_80211_rsnaerrorreport_element_create(void* data, capwap_messa
|
||||
|
||||
ASSERT(data != NULL);
|
||||
|
||||
func->write_block(handle, element->client, CAPWAP_RSNA_ERROR_REPORT_CLIENT_LENGTH);
|
||||
func->write_block(handle, element->bssid, CAPWAP_RSNA_ERROR_REPORT_BSSID_LENGTH);
|
||||
func->write_block(handle, element->client, MACADDRESS_EUI48_LENGTH);
|
||||
func->write_block(handle, element->bssid, MACADDRESS_EUI48_LENGTH);
|
||||
func->write_u8(handle, element->radioid);
|
||||
func->write_u8(handle, element->wlanid);
|
||||
func->write_u16(handle, 0);
|
||||
@ -70,8 +70,8 @@ static void* capwap_80211_rsnaerrorreport_element_parsing(capwap_message_element
|
||||
memset(data, 0, sizeof(struct capwap_80211_rsnaerrorreport_element));
|
||||
|
||||
/* Retrieve data */
|
||||
func->read_block(handle, data->client, CAPWAP_RSNA_ERROR_REPORT_CLIENT_LENGTH);
|
||||
func->read_block(handle, data->bssid, CAPWAP_RSNA_ERROR_REPORT_BSSID_LENGTH);
|
||||
func->read_block(handle, data->client, MACADDRESS_EUI48_LENGTH);
|
||||
func->read_block(handle, data->bssid, MACADDRESS_EUI48_LENGTH);
|
||||
func->read_u8(handle, &data->radioid);
|
||||
func->read_u8(handle, &data->wlanid);
|
||||
func->read_u16(handle, NULL);
|
||||
|
@ -3,12 +3,9 @@
|
||||
|
||||
#define CAPWAP_ELEMENT_80211_RSNA_ERROR_REPORT 1035
|
||||
|
||||
#define CAPWAP_RSNA_ERROR_REPORT_CLIENT_LENGTH 6
|
||||
#define CAPWAP_RSNA_ERROR_REPORT_BSSID_LENGTH 6
|
||||
|
||||
struct capwap_80211_rsnaerrorreport_element {
|
||||
uint8_t client[CAPWAP_RSNA_ERROR_REPORT_CLIENT_LENGTH];
|
||||
uint8_t bssid[CAPWAP_RSNA_ERROR_REPORT_BSSID_LENGTH];
|
||||
uint8_t client[MACADDRESS_EUI48_LENGTH];
|
||||
uint8_t bssid[MACADDRESS_EUI48_LENGTH];
|
||||
uint8_t radioid;
|
||||
uint8_t wlanid;
|
||||
uint32_t tkipicverrors;
|
||||
|
@ -30,7 +30,7 @@ static void capwap_80211_station_element_create(void* data, capwap_message_eleme
|
||||
func->write_u8(handle, element->radioid);
|
||||
func->write_u16(handle, element->associationid);
|
||||
func->write_u8(handle, element->flags);
|
||||
func->write_block(handle, element->address, CAPWAP_STATION_ADDRESS_LENGTH);
|
||||
func->write_block(handle, element->address, MACADDRESS_EUI48_LENGTH);
|
||||
func->write_u16(handle, element->capabilities);
|
||||
func->write_u8(handle, element->wlanid);
|
||||
func->write_block(handle, element->supportedrates, element->supportedratescount);
|
||||
@ -64,7 +64,7 @@ static void* capwap_80211_station_element_parsing(capwap_message_elements_handle
|
||||
func->read_u8(handle, &data->radioid);
|
||||
func->read_u16(handle, &data->associationid);
|
||||
func->read_u8(handle, &data->flags);
|
||||
func->read_block(handle, data->address, CAPWAP_STATION_ADDRESS_LENGTH);
|
||||
func->read_block(handle, data->address, MACADDRESS_EUI48_LENGTH);
|
||||
func->read_u16(handle, &data->capabilities);
|
||||
func->read_u8(handle, &data->wlanid);
|
||||
data->supportedratescount = length;
|
||||
|
@ -3,14 +3,13 @@
|
||||
|
||||
#define CAPWAP_ELEMENT_80211_STATION 1036
|
||||
|
||||
#define CAPWAP_STATION_ADDRESS_LENGTH 6
|
||||
#define CAPWAP_STATION_RATES_MAXLENGTH 128
|
||||
|
||||
struct capwap_80211_station_element {
|
||||
uint8_t radioid;
|
||||
uint16_t associationid;
|
||||
uint8_t flags;
|
||||
uint8_t address[CAPWAP_STATION_ADDRESS_LENGTH];
|
||||
uint8_t address[MACADDRESS_EUI48_LENGTH];
|
||||
uint16_t capabilities;
|
||||
uint8_t wlanid;
|
||||
uint8_t supportedratescount;
|
||||
|
@ -31,7 +31,7 @@ static void capwap_80211_stationkey_element_create(void* data, capwap_message_el
|
||||
|
||||
ASSERT(data != NULL);
|
||||
|
||||
func->write_block(handle, element->address, CAPWAP_STATION_SESSION_KEY_ADDRESS_LENGTH);
|
||||
func->write_block(handle, element->address, MACADDRESS_EUI48_LENGTH);
|
||||
func->write_u16(handle, element->flags);
|
||||
func->write_block(handle, element->pairwisetsc, CAPWAP_STATION_SESSION_KEY_PAIRWISE_TSC_LENGTH);
|
||||
func->write_block(handle, element->pairwisersc, CAPWAP_STATION_SESSION_KEY_PAIRWISE_RSC_LENGTH);
|
||||
@ -59,7 +59,7 @@ static void* capwap_80211_stationkey_element_parsing(capwap_message_elements_han
|
||||
memset(data, 0, sizeof(struct capwap_80211_stationkey_element));
|
||||
|
||||
/* Retrieve data */
|
||||
func->read_block(handle, data->address, CAPWAP_STATION_SESSION_KEY_ADDRESS_LENGTH);
|
||||
func->read_block(handle, data->address, MACADDRESS_EUI48_LENGTH);
|
||||
func->read_u16(handle, &data->flags);
|
||||
func->read_block(handle, data->pairwisetsc, CAPWAP_STATION_SESSION_KEY_PAIRWISE_TSC_LENGTH);
|
||||
func->read_block(handle, data->pairwisersc, CAPWAP_STATION_SESSION_KEY_PAIRWISE_RSC_LENGTH);
|
||||
|
@ -3,7 +3,6 @@
|
||||
|
||||
#define CAPWAP_ELEMENT_80211_STATION_SESSION_KEY_PROFILE 1038
|
||||
|
||||
#define CAPWAP_STATION_SESSION_KEY_ADDRESS_LENGTH 6
|
||||
#define CAPWAP_STATION_SESSION_KEY_PAIRWISE_TSC_LENGTH 6
|
||||
#define CAPWAP_STATION_SESSION_KEY_PAIRWISE_RSC_LENGTH 6
|
||||
|
||||
@ -11,7 +10,7 @@
|
||||
#define CAPWAP_STATION_SESSION_KEY_AC_ENCRYPT 0x4000
|
||||
|
||||
struct capwap_80211_stationkey_element {
|
||||
uint8_t address[CAPWAP_STATION_SESSION_KEY_ADDRESS_LENGTH];
|
||||
uint8_t address[MACADDRESS_EUI48_LENGTH];
|
||||
uint16_t flags;
|
||||
uint8_t pairwisetsc[CAPWAP_STATION_SESSION_KEY_PAIRWISE_TSC_LENGTH];
|
||||
uint8_t pairwisersc[CAPWAP_STATION_SESSION_KEY_PAIRWISE_RSC_LENGTH];
|
||||
|
@ -23,7 +23,7 @@ static void capwap_80211_stationqos_element_create(void* data, capwap_message_el
|
||||
|
||||
ASSERT(data != NULL);
|
||||
|
||||
func->write_block(handle, element->address, CAPWAP_STATION_QOS_ADDRESS_LENGTH);
|
||||
func->write_block(handle, element->address, MACADDRESS_EUI48_LENGTH);
|
||||
func->write_u8(handle, 0);
|
||||
func->write_u8(handle, element->priority);
|
||||
}
|
||||
@ -45,7 +45,7 @@ static void* capwap_80211_stationqos_element_parsing(capwap_message_elements_han
|
||||
memset(data, 0, sizeof(struct capwap_80211_stationqos_element));
|
||||
|
||||
/* Retrieve data */
|
||||
func->read_block(handle, data->address, CAPWAP_STATION_QOS_ADDRESS_LENGTH);
|
||||
func->read_block(handle, data->address, MACADDRESS_EUI48_LENGTH);
|
||||
func->read_u8(handle, NULL);
|
||||
func->read_u8(handle, &data->priority);
|
||||
|
||||
|
@ -3,10 +3,8 @@
|
||||
|
||||
#define CAPWAP_ELEMENT_80211_STATION_QOS_PROFILE 1037
|
||||
|
||||
#define CAPWAP_STATION_QOS_ADDRESS_LENGTH 6
|
||||
|
||||
struct capwap_80211_stationqos_element {
|
||||
uint8_t address[CAPWAP_STATION_QOS_ADDRESS_LENGTH];
|
||||
uint8_t address[MACADDRESS_EUI48_LENGTH];
|
||||
uint8_t priority;
|
||||
};
|
||||
|
||||
|
@ -31,7 +31,7 @@ static void capwap_80211_updatestationqos_element_create(void* data, capwap_mess
|
||||
ASSERT(data != NULL);
|
||||
|
||||
func->write_u8(handle, element->radioid);
|
||||
func->write_block(handle, element->address, CAPWAP_UPDATE_STATION_QOS_ADDRESS_LENGTH);
|
||||
func->write_block(handle, element->address, MACADDRESS_EUI48_LENGTH);
|
||||
for (i = 0; i < CAPWAP_UPDATE_STATION_QOS_SUBELEMENTS; i++) {
|
||||
func->write_u8(handle, element->qos[i].priority8021p & CAPWAP_UPDATE_STATION_QOS_PRIORIY_MASK);
|
||||
func->write_u8(handle, element->qos[i].dscp & CAPWAP_UPDATE_STATION_QOS_DSCP_MASK);
|
||||
|
@ -3,7 +3,6 @@
|
||||
|
||||
#define CAPWAP_ELEMENT_80211_UPDATE_STATION_QOS 1043
|
||||
|
||||
#define CAPWAP_UPDATE_STATION_QOS_ADDRESS_LENGTH 6
|
||||
#define CAPWAP_UPDATE_STATION_QOS_SUBELEMENTS 4
|
||||
|
||||
#define CAPWAP_UPDATE_STATION_QOS_PRIORIY_MASK 0x07
|
||||
@ -16,7 +15,7 @@ struct capwap_80211_updatestationqos_subelement {
|
||||
|
||||
struct capwap_80211_updatestationqos_element {
|
||||
uint8_t radioid;
|
||||
uint8_t address[CAPWAP_UPDATE_STATION_QOS_ADDRESS_LENGTH];
|
||||
uint8_t address[MACADDRESS_EUI48_LENGTH];
|
||||
struct capwap_80211_updatestationqos_subelement qos[CAPWAP_UPDATE_STATION_QOS_SUBELEMENTS];
|
||||
};
|
||||
|
||||
|
@ -31,7 +31,7 @@ static void capwap_80211_wtpradioconf_element_create(void* data, capwap_message_
|
||||
func->write_u8(handle, element->shortpreamble);
|
||||
func->write_u8(handle, element->maxbssid);
|
||||
func->write_u8(handle, element->dtimperiod);
|
||||
func->write_block(handle, element->bssid, CAPWAP_WTP_RADIO_CONF_BSSID_LENGTH);
|
||||
func->write_block(handle, element->bssid, MACADDRESS_EUI48_LENGTH);
|
||||
func->write_u16(handle, element->beaconperiod);
|
||||
func->write_block(handle, element->country, CAPWAP_WTP_RADIO_CONF_COUNTRY_LENGTH);
|
||||
}
|
||||
@ -57,7 +57,7 @@ static void* capwap_80211_wtpradioconf_element_parsing(capwap_message_elements_h
|
||||
func->read_u8(handle, &data->shortpreamble);
|
||||
func->read_u8(handle, &data->maxbssid);
|
||||
func->read_u8(handle, &data->dtimperiod);
|
||||
func->read_block(handle, data->bssid, CAPWAP_WTP_RADIO_CONF_BSSID_LENGTH);
|
||||
func->read_block(handle, data->bssid, MACADDRESS_EUI48_LENGTH);
|
||||
func->read_u16(handle, &data->beaconperiod);
|
||||
func->read_block(handle, data->country, CAPWAP_WTP_RADIO_CONF_COUNTRY_LENGTH);
|
||||
|
||||
|
@ -3,7 +3,6 @@
|
||||
|
||||
#define CAPWAP_ELEMENT_80211_WTP_RADIO_CONF 1046
|
||||
|
||||
#define CAPWAP_WTP_RADIO_CONF_BSSID_LENGTH 6
|
||||
#define CAPWAP_WTP_RADIO_CONF_COUNTRY_LENGTH 4
|
||||
|
||||
#define CAPWAP_WTP_RADIO_CONF_SHORTPREAMBLE_DISABLE 0
|
||||
@ -14,7 +13,7 @@ struct capwap_80211_wtpradioconf_element {
|
||||
uint8_t shortpreamble;
|
||||
uint8_t maxbssid;
|
||||
uint8_t dtimperiod;
|
||||
uint8_t bssid[CAPWAP_WTP_RADIO_CONF_BSSID_LENGTH];
|
||||
uint8_t bssid[MACADDRESS_EUI48_LENGTH];
|
||||
uint16_t beaconperiod;
|
||||
uint8_t country[CAPWAP_WTP_RADIO_CONF_COUNTRY_LENGTH];
|
||||
};
|
||||
|
@ -352,7 +352,7 @@ static struct capwap_list_item* capwap_packet_txmng_create_fragment_item(struct
|
||||
}
|
||||
|
||||
/* */
|
||||
static int capwap_fragment_write_block_from_pos(struct capwap_packet_txmng* txmngpacket, uint8_t* data, unsigned short length, struct write_block_from_pos* writepos) {
|
||||
static int capwap_fragment_write_block_from_pos(struct capwap_packet_txmng* txmngpacket, const uint8_t* data, unsigned short length, struct write_block_from_pos* writepos) {
|
||||
unsigned short packetpos;
|
||||
struct capwap_list_item* item;
|
||||
struct capwap_fragment_packet_item* fragmentpacket;
|
||||
@ -430,7 +430,7 @@ static int capwap_fragment_write_block_from_pos(struct capwap_packet_txmng* txmn
|
||||
}
|
||||
|
||||
/* */
|
||||
static int capwap_fragment_write_block(capwap_message_elements_handle handle, uint8_t* data, unsigned short length) {
|
||||
static int capwap_fragment_write_block(capwap_message_elements_handle handle, const uint8_t* data, unsigned short length) {
|
||||
struct capwap_packet_txmng* txmngpacket;
|
||||
struct write_block_from_pos writepos;
|
||||
|
||||
@ -611,7 +611,7 @@ struct capwap_packet_txmng* capwap_packet_txmng_create_data_message(struct capwa
|
||||
}
|
||||
|
||||
/* */
|
||||
void capwap_packet_txmng_add_data(struct capwap_packet_txmng* txmngpacket, uint8_t* data, unsigned short length) {
|
||||
void capwap_packet_txmng_add_data(struct capwap_packet_txmng* txmngpacket, const uint8_t* data, unsigned short length) {
|
||||
ASSERT(txmngpacket != NULL);
|
||||
ASSERT(txmngpacket->isctrlpacket == 0);
|
||||
|
||||
|
@ -65,7 +65,7 @@ struct capwap_packet_txmng {
|
||||
/* */
|
||||
struct capwap_packet_txmng* capwap_packet_txmng_create_ctrl_message(struct capwap_header_data* data, unsigned long type, unsigned char seq, unsigned short mtu);
|
||||
struct capwap_packet_txmng* capwap_packet_txmng_create_data_message(struct capwap_header_data* data, unsigned short mtu);
|
||||
void capwap_packet_txmng_add_data(struct capwap_packet_txmng* txmngpacket, uint8_t* data, unsigned short length);
|
||||
void capwap_packet_txmng_add_data(struct capwap_packet_txmng* txmngpacket, const uint8_t* data, unsigned short length);
|
||||
void capwap_packet_txmng_add_message_element(struct capwap_packet_txmng* txmngpacket, unsigned short type, void* data);
|
||||
void capwap_packet_txmng_get_fragment_packets(struct capwap_packet_txmng* txmngpacket, struct capwap_list* fragmentlist, unsigned short fragmentid);
|
||||
void capwap_packet_txmng_free(struct capwap_packet_txmng* txmngpacket);
|
||||
|
Reference in New Issue
Block a user