diff --git a/src/ac/ac_dfa_run.c b/src/ac/ac_dfa_run.c index 0841e37..480ab06 100644 --- a/src/ac/ac_dfa_run.c +++ b/src/ac/ac_dfa_run.c @@ -158,6 +158,12 @@ int ac_dfa_state_run(struct ac_session_t* session, struct capwap_parsed_packet* capwap_set_timeout(AC_MAX_ECHO_INTERVAL, &session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION); break; } + + case CAPWAP_IEEE80211_WLAN_CONFIGURATION_RESPONSE: { + /* TODO */ + capwap_set_timeout(AC_MAX_ECHO_INTERVAL, &session->timeout, CAPWAP_TIMER_CONTROL_CONNECTION); + break; + } } } } else { diff --git a/src/common/capwap_protocol.c b/src/common/capwap_protocol.c index 8069c3a..4008f84 100644 --- a/src/common/capwap_protocol.c +++ b/src/common/capwap_protocol.c @@ -164,13 +164,16 @@ int capwap_check_message_type(struct capwap_packet_rxmng* rxmngpacket) { if (rxmngpacket->isctrlpacket && rxmngpacket->fragmentlist->first) { struct capwap_fragment_packet_item* packet = (struct capwap_fragment_packet_item*)rxmngpacket->fragmentlist->first->item; struct capwap_header* header = (struct capwap_header*)packet->buffer; + unsigned short binding = GET_WBID_HEADER(rxmngpacket->header); lengthpayload = packet->offset - GET_HLEN_HEADER(header) * 4; if (lengthpayload >= sizeof(struct capwap_control_message)) { - if ((rxmngpacket->ctrlmsg.type >= CAPWAP_FIRST_MESSAGE_TYPE) && (rxmngpacket->ctrlmsg.type <= CAPWAP_LAST_MESSAGE_TYPE)) { + if (CAPWAP_VALID_MESSAGE_TYPE(rxmngpacket->ctrlmsg.type)) { + return VALID_MESSAGE_TYPE; + } else if ((binding == CAPWAP_WIRELESS_BINDING_IEEE80211) && CAPWAP_VALID_IEEE80211_MESSAGE_TYPE(rxmngpacket->ctrlmsg.type)) { return VALID_MESSAGE_TYPE; } - + /* Unknown message type */ if ((rxmngpacket->ctrlmsg.type % 2) != 0) { return INVALID_REQUEST_MESSAGE_TYPE; diff --git a/src/common/capwap_rfc.h b/src/common/capwap_rfc.h index 4941852..4d3dcc4 100644 --- a/src/common/capwap_rfc.h +++ b/src/common/capwap_rfc.h @@ -116,6 +116,13 @@ struct capwap_message_element { #define CAPWAP_STATION_CONFIGURATION_REQUEST 25 #define CAPWAP_STATION_CONFIGURATION_RESPONSE 26 #define CAPWAP_LAST_MESSAGE_TYPE 26 +#define CAPWAP_VALID_MESSAGE_TYPE(x) (((x) >= CAPWAP_FIRST_MESSAGE_TYPE) && ((x) <= CAPWAP_LAST_MESSAGE_TYPE)) + +#define CAPWAP_IEEE80211_FIRST_MESSAGE_TYPE 3398913 +#define CAPWAP_IEEE80211_WLAN_CONFIGURATION_REQUEST 3398913 +#define CAPWAP_IEEE80211_WLAN_CONFIGURATION_RESPONSE 3398914 +#define CAPWAP_IEEE80211_LAST_MESSAGE_TYPE 3398914 +#define CAPWAP_VALID_IEEE80211_MESSAGE_TYPE(x) (((x) >= CAPWAP_IEEE80211_FIRST_MESSAGE_TYPE) && ((x) <= CAPWAP_IEEE80211_LAST_MESSAGE_TYPE)) /* Control Message */ #define CAPWAP_CONTROL_MESSAGE_MIN_LENGTH 3 diff --git a/src/wtp/wtp_dfa_run.c b/src/wtp/wtp_dfa_run.c index 2694f8e..5fa27e3 100644 --- a/src/wtp/wtp_dfa_run.c +++ b/src/wtp/wtp_dfa_run.c @@ -158,6 +158,11 @@ int wtp_dfa_state_run(struct capwap_parsed_packet* packet, struct timeout_contro status = WTP_DFA_NO_PACKET; break; } + + case CAPWAP_IEEE80211_WLAN_CONFIGURATION_REQUEST: { + /* TODO */ + break; + } } } } else {