From a3c2e52d3c755b4934dcae26c36d615e2651059d Mon Sep 17 00:00:00 2001 From: Andreas Schultz Date: Sat, 26 Mar 2016 21:08:25 +0100 Subject: [PATCH] reset WTP state when going into DTLS TD --- src/wtp/wtp.c | 4 ++-- src/wtp/wtp_dfa.c | 16 ++++++++++++++++ src/wtp/wtp_dfa.h | 2 ++ src/wtp/wtp_dfa_dtls.c | 4 +--- 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/wtp/wtp.c b/src/wtp/wtp.c index 7b07de8..77f8491 100644 --- a/src/wtp/wtp.c +++ b/src/wtp/wtp.c @@ -70,10 +70,10 @@ static int wtp_init(void) { g_wtp.validdtlsdatapolicy = CAPWAP_ACDESC_CLEAR_DATA_CHANNEL_ENABLED; /* Tx fragment packets */ - g_wtp.mtu = CAPWAP_MTU_DEFAULT; g_wtp.requestfragmentpacket = capwap_list_create(); g_wtp.responsefragmentpacket = capwap_list_create(); - g_wtp.remoteseqnumber = WTP_INIT_REMOTE_SEQUENCE; + + wtp_reset_state(); /* AC information */ g_wtp.discoverytype.type = CAPWAP_DISCOVERYTYPE_TYPE_UNKNOWN; diff --git a/src/wtp/wtp_dfa.c b/src/wtp/wtp_dfa.c index 0930fdc..5b4f727 100644 --- a/src/wtp/wtp_dfa.c +++ b/src/wtp/wtp_dfa.c @@ -560,3 +560,19 @@ void wtp_dfa_retransmition_timeout(struct capwap_timeout* timeout, unsigned long capwap_timeout_set(g_wtp.timeout, g_wtp.idtimercontrol, WTP_RETRANSMIT_INTERVAL, wtp_dfa_retransmition_timeout, NULL, NULL); } + +void wtp_reset_state(void) +{ + /* reset WTP state */ + + wtp_free_reference_last_request(); + wtp_free_reference_last_response(); + wtp_free_packet_rxmng(); + + g_wtp.mtu = CAPWAP_MTU_DEFAULT; + g_wtp.remotetype = 0; + g_wtp.remoteseqnumber = WTP_INIT_REMOTE_SEQUENCE; + + memset(&g_wtp.dtls.localaddr, 0, sizeof(g_wtp.dtls.localaddr)); + memset(&g_wtp.dtls.peeraddr, 0, sizeof(g_wtp.dtls.peeraddr)); +} diff --git a/src/wtp/wtp_dfa.h b/src/wtp/wtp_dfa.h index 1c94f5e..85a0397 100644 --- a/src/wtp/wtp_dfa.h +++ b/src/wtp/wtp_dfa.h @@ -70,4 +70,6 @@ void wtp_ieee80211_packet(uint8_t radioid, const struct ieee80211_header* header void wtp_recv_data_keepalive(void); void wtp_recv_data(uint8_t* buffer, int length); +void wtp_reset_state(void); + #endif /* __WTP_DFA_HEADER__ */ diff --git a/src/wtp/wtp_dfa_dtls.c b/src/wtp/wtp_dfa_dtls.c index 862720a..c6ae4f3 100644 --- a/src/wtp/wtp_dfa_dtls.c +++ b/src/wtp/wtp_dfa_dtls.c @@ -77,9 +77,7 @@ static void wtp_dfa_state_dtlsteardown_timeout(struct capwap_timeout* timeout, } /* */ - wtp_free_reference_last_request(); - wtp_free_reference_last_response(); - wtp_free_packet_rxmng(); + wtp_reset_state(); /* */ if (!g_wtp.running) {