first features of mac80211 driver

This commit is contained in:
vemax78
2013-05-11 15:08:28 +02:00
parent bb449e7ec6
commit 0a2ae76acc
8 changed files with 320 additions and 46 deletions

View File

@ -155,7 +155,6 @@ int wtp_dfa_state_discovery(struct capwap_packet* packet, struct timeout_control
status = WTP_DFA_NO_PACKET;
} else {
int i;
int result;
struct capwap_build_packet* buildpacket;
@ -168,11 +167,11 @@ int wtp_dfa_state_discovery(struct capwap_packet* packet, struct timeout_control
} else {
/* Update status radio */
g_wtp.descriptor.radiosinuse = wtp_update_radio_in_use();
/* Build packet */
buildpacket = capwap_tx_packet_create(CAPWAP_RADIOID_NONE, g_wtp.binding);
buildpacket->isctrlmsg = 1;
/* Prepare discovery request */
capwap_build_packet_set_control_message_type(buildpacket, CAPWAP_DISCOVERY_REQUEST, g_wtp.localseqnumber++);
capwap_build_packet_add_message_element(buildpacket, CAPWAP_CREATE_DISCOVERYTYPE_ELEMENT(&g_wtp.discoverytype));
@ -180,19 +179,16 @@ int wtp_dfa_state_discovery(struct capwap_packet* packet, struct timeout_control
capwap_build_packet_add_message_element(buildpacket, CAPWAP_CREATE_WTPDESCRIPTOR_ELEMENT(&g_wtp.descriptor));
capwap_build_packet_add_message_element(buildpacket, CAPWAP_CREATE_WTPFRAMETUNNELMODE_ELEMENT(&g_wtp.mactunnel));
capwap_build_packet_add_message_element(buildpacket, CAPWAP_CREATE_WTPMACTYPE_ELEMENT(&g_wtp.mactype));
if (g_wtp.binding == CAPWAP_WIRELESS_BINDING_IEEE80211) {
for (i = 0; i < g_wtp.radios->count; i++) {
struct wtp_radio* radio = (struct wtp_radio*)capwap_array_get_item_pointer(g_wtp.radios, i);
capwap_build_packet_add_message_element(buildpacket, CAPWAP_CREATE_80211_WTPRADIOINFORMATION_ELEMENT(&radio->radioinformation));
}
wtp_create_80211_wtpradioinformation_element(buildpacket);
} else {
capwap_logging_debug("Unknown capwap binding");
}
/* CAPWAP_CREATE_MTUDISCOVERYPADDING_ELEMENT */ /* TODO */
/* CAPWAP_CREATE_VENDORSPECIFICPAYLOAD_ELEMENT */ /* TODO */
/* Create discovery request packet */
if (!capwap_build_packet_validate(buildpacket, NULL)) {
wtp_free_reference_last_request();
@ -206,7 +202,7 @@ int wtp_dfa_state_discovery(struct capwap_packet* packet, struct timeout_control
}
capwap_build_packet_free(buildpacket);
/* Send discovery request to AC */
if (result >= 0) {
int i;

View File

@ -68,14 +68,11 @@ int wtp_dfa_state_dtlsconnect_to_join(struct capwap_packet* packet, struct timeo
capwap_build_packet_add_message_element(buildpacket, CAPWAP_CREATE_WTPMACTYPE_ELEMENT(&g_wtp.mactype));
if (g_wtp.binding == CAPWAP_WIRELESS_BINDING_IEEE80211) {
for (i = 0; i < g_wtp.radios->count; i++) {
struct wtp_radio* radio = (struct wtp_radio*)capwap_array_get_item_pointer(g_wtp.radios, i);
capwap_build_packet_add_message_element(buildpacket, CAPWAP_CREATE_80211_WTPRADIOINFORMATION_ELEMENT(&radio->radioinformation));
}
wtp_create_80211_wtpradioinformation_element(buildpacket);
} else {
capwap_logging_debug("Unknown capwap binding");
}
capwap_build_packet_add_message_element(buildpacket, CAPWAP_CREATE_ECNSUPPORT_ELEMENT(&g_wtp.ecn));
if (g_wtp.wtpctrladdress.ss_family == AF_INET) {
@ -245,6 +242,12 @@ int wtp_dfa_state_join_to_configure(struct capwap_packet* packet, struct timeout
/* CAPWAP_CREATE_WTPSTATICIPADDRESS_ELEMENT */ /* TODO */
/* CAPWAP_CREATE_VENDORSPECIFICPAYLOAD_ELEMENT */ /* TODO */
if (g_wtp.binding == CAPWAP_WIRELESS_BINDING_IEEE80211) {
wtp_create_80211_wtpradioinformation_element(buildpacket);
} else {
capwap_logging_debug("Unknown capwap binding");
}
/* Create Configuration Status request packet */
if (!capwap_build_packet_validate(buildpacket, NULL)) {
wtp_free_reference_last_request();

View File

@ -0,0 +1,10 @@
#include "wtp.h"
void wtp_create_80211_wtpradioinformation_element(struct capwap_build_packet* buildpacket) {
int i;
for (i = 0; i < g_wtp.radios->count; i++) {
struct wtp_radio* radio = (struct wtp_radio*)capwap_array_get_item_pointer(g_wtp.radios, i);
capwap_build_packet_add_message_element(buildpacket, CAPWAP_CREATE_80211_WTPRADIOINFORMATION_ELEMENT(&radio->radioinformation));
}
}