From 7b6bd52f48583e68c36cbf749f8c40187bc54216 Mon Sep 17 00:00:00 2001 From: vemax78 Date: Sun, 9 Jun 2013 21:49:43 +0200 Subject: [PATCH] Centralized control of the AC IP address into recv function --- src/wtp/wtp_dfa.c | 17 ++++++++++++++++- src/wtp/wtp_dfa_configure.c | 22 ++++++++++------------ src/wtp/wtp_dfa_datacheck.c | 36 +++++++++++++++++------------------- src/wtp/wtp_dfa_join.c | 20 +++++++++----------- 4 files changed, 52 insertions(+), 43 deletions(-) diff --git a/src/wtp/wtp_dfa.c b/src/wtp/wtp_dfa.c index 1c2cadd..2db0552 100644 --- a/src/wtp/wtp_dfa.c +++ b/src/wtp/wtp_dfa.c @@ -395,8 +395,23 @@ int wtp_dfa_running(void) { } else { int check; - /* Check of packet */ + /* Retrieve network information */ capwap_get_network_socket(&g_wtp.net, &socket, fds[index].fd); + + /* Check source */ + if (socket.isctrlsocket && (g_wtp.acctrladdress.ss_family != AF_UNSPEC)) { + if (capwap_compare_ip(&g_wtp.acctrladdress, &recvfromaddr)) { + /* Unknown source */ + continue; + } + } else if (!socket.isctrlsocket && (g_wtp.acdataaddress.ss_family != AF_UNSPEC)) { + if (capwap_compare_ip(&g_wtp.acdataaddress, &recvfromaddr)) { + /* Unknown source */ + continue; + } + } + + /* Check of packet */ check = capwap_sanity_check(socket.isctrlsocket, g_wtp.dfa.state, buffer, buffersize, g_wtp.ctrldtls.enable, g_wtp.datadtls.enable); if (check == CAPWAP_DTLS_PACKET) { struct capwap_dtls* dtls = (socket.isctrlsocket ? &g_wtp.ctrldtls : &g_wtp.datadtls); diff --git a/src/wtp/wtp_dfa_configure.c b/src/wtp/wtp_dfa_configure.c index 07af168..3b8b55f 100644 --- a/src/wtp/wtp_dfa_configure.c +++ b/src/wtp/wtp_dfa_configure.c @@ -26,19 +26,17 @@ int wtp_dfa_state_configure(struct capwap_parsed_packet* packet, struct timeout_ ASSERT(timeout != NULL); if (packet) { - if (!capwap_compare_ip(&g_wtp.acctrladdress, &packet->connection->remoteaddr)) { - unsigned short binding; - - /* */ - binding = GET_WBID_HEADER(packet->rxmngpacket->header); - if (packet->rxmngpacket->isctrlpacket && (binding == g_wtp.binding) && (packet->rxmngpacket->ctrlmsg.type == CAPWAP_CONFIGURATION_STATUS_RESPONSE) && ((g_wtp.localseqnumber - 1) == packet->rxmngpacket->ctrlmsg.seq)) { - /* Valid packet, free request packet */ - wtp_free_reference_last_request(); + unsigned short binding; + + /* */ + binding = GET_WBID_HEADER(packet->rxmngpacket->header); + if (packet->rxmngpacket->isctrlpacket && (binding == g_wtp.binding) && (packet->rxmngpacket->ctrlmsg.type == CAPWAP_CONFIGURATION_STATUS_RESPONSE) && ((g_wtp.localseqnumber - 1) == packet->rxmngpacket->ctrlmsg.seq)) { + /* Valid packet, free request packet */ + wtp_free_reference_last_request(); - /* Parsing response values */ - wtp_dfa_change_state(wtp_configure_ac(packet)); - status = WTP_DFA_NO_PACKET; - } + /* Parsing response values */ + wtp_dfa_change_state(wtp_configure_ac(packet)); + status = WTP_DFA_NO_PACKET; } } else { /* No Configuration status response received */ diff --git a/src/wtp/wtp_dfa_datacheck.c b/src/wtp/wtp_dfa_datacheck.c index a232912..fe1a4bf 100644 --- a/src/wtp/wtp_dfa_datacheck.c +++ b/src/wtp/wtp_dfa_datacheck.c @@ -17,33 +17,31 @@ int wtp_dfa_state_datacheck(struct capwap_parsed_packet* packet, struct timeout_ ASSERT(timeout != NULL); if (packet) { - if (!capwap_compare_ip(&g_wtp.acctrladdress, &packet->connection->remoteaddr)) { - unsigned short binding; + unsigned short binding; - /* */ - binding = GET_WBID_HEADER(packet->rxmngpacket->header); + /* */ + binding = GET_WBID_HEADER(packet->rxmngpacket->header); - if (packet->rxmngpacket->isctrlpacket) { - if (binding == g_wtp.binding) { - if (packet->rxmngpacket->ctrlmsg.type == CAPWAP_CHANGE_STATE_EVENT_RESPONSE) { - if ((g_wtp.localseqnumber - 1) == packet->rxmngpacket->ctrlmsg.seq) { - if (packet->rxmngpacket->packetlength > 0) { - int a = packet->rxmngpacket->packetlength; - a++; - } + if (packet->rxmngpacket->isctrlpacket) { + if (binding == g_wtp.binding) { + if (packet->rxmngpacket->ctrlmsg.type == CAPWAP_CHANGE_STATE_EVENT_RESPONSE) { + if ((g_wtp.localseqnumber - 1) == packet->rxmngpacket->ctrlmsg.seq) { + if (packet->rxmngpacket->packetlength > 0) { + int a = packet->rxmngpacket->packetlength; + a++; } } } } + } - if (packet->rxmngpacket->isctrlpacket && (binding == g_wtp.binding) && (packet->rxmngpacket->ctrlmsg.type == CAPWAP_CHANGE_STATE_EVENT_RESPONSE) && ((g_wtp.localseqnumber - 1) == packet->rxmngpacket->ctrlmsg.seq)) { - /* Valid packet, free request packet */ - wtp_free_reference_last_request(); + if (packet->rxmngpacket->isctrlpacket && (binding == g_wtp.binding) && (packet->rxmngpacket->ctrlmsg.type == CAPWAP_CHANGE_STATE_EVENT_RESPONSE) && ((g_wtp.localseqnumber - 1) == packet->rxmngpacket->ctrlmsg.seq)) { + /* Valid packet, free request packet */ + wtp_free_reference_last_request(); - /* Parsing response values */ - wtp_dfa_change_state(wtp_datacheck_ac(packet)); - status = WTP_DFA_NO_PACKET; - } + /* Parsing response values */ + wtp_dfa_change_state(wtp_datacheck_ac(packet)); + status = WTP_DFA_NO_PACKET; } } else { /* No change state response received */ diff --git a/src/wtp/wtp_dfa_join.c b/src/wtp/wtp_dfa_join.c index 174aa21..06c8b8a 100644 --- a/src/wtp/wtp_dfa_join.c +++ b/src/wtp/wtp_dfa_join.c @@ -126,19 +126,17 @@ int wtp_dfa_state_join(struct capwap_parsed_packet* packet, struct timeout_contr ASSERT(timeout != NULL); if (packet) { - if (!capwap_compare_ip(&g_wtp.acctrladdress, &packet->connection->remoteaddr)) { - unsigned short binding; + unsigned short binding; - /* */ - binding = GET_WBID_HEADER(packet->rxmngpacket->header); - if (packet->rxmngpacket->isctrlpacket && (binding == g_wtp.binding) && (packet->rxmngpacket->ctrlmsg.type == CAPWAP_JOIN_RESPONSE) && ((g_wtp.localseqnumber - 1) == packet->rxmngpacket->ctrlmsg.seq)) { - /* Valid packet, free request packet */ - wtp_free_reference_last_request(); + /* */ + binding = GET_WBID_HEADER(packet->rxmngpacket->header); + if (packet->rxmngpacket->isctrlpacket && (binding == g_wtp.binding) && (packet->rxmngpacket->ctrlmsg.type == CAPWAP_JOIN_RESPONSE) && ((g_wtp.localseqnumber - 1) == packet->rxmngpacket->ctrlmsg.seq)) { + /* Valid packet, free request packet */ + wtp_free_reference_last_request(); - /* Parsing response values */ - wtp_dfa_change_state(wtp_join_ac(packet)); - status = WTP_DFA_NO_PACKET; - } + /* Parsing response values */ + wtp_dfa_change_state(wtp_join_ac(packet)); + status = WTP_DFA_NO_PACKET; } } else { /* No Join response received */