Deleted files

This commit is contained in:
7u83 2022-08-10 21:36:58 +02:00
parent 10b88b8f86
commit bf8a8c6d53
2 changed files with 0 additions and 1717 deletions

View File

@ -1,948 +0,0 @@
/*
This file is part of libcapwap.
libcapwap is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
libcapwap is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Foobar. If not, see <http://www.gnu.org/licenses/>.
*/
#include "cw/cw.h"
#include "cw/val.h"
#include "cw/log.h"
#include "cw/dbg.h"
#include "cw/msgset.h"
#include "cw/keys.h"
#include "mod_capwap.h"
#include "cw/mavltypes.h"
static int postprocess_join_request(struct cw_Conn *conn);
static cw_ValStruct_t wtp_reboot_statistics[] = {
{CW_TYPE_WORD, "reboot-count", 2,-1},
{CW_TYPE_WORD, "ac-initiated-count", 2,-1},
{CW_TYPE_WORD, "link-failure-count", 2,-1},
{CW_TYPE_WORD, "sw-failure-count", 2,-1},
{CW_TYPE_WORD, "hw-failure-count", 2,-1},
{CW_TYPE_WORD, "other-failure-count", 2,-1},
{CW_TYPE_WORD, "unknown-failure-count", 2,-1},
{CW_TYPE_BYTE, "last-failure-type", 1,-1},
{NULL,NULL,0,0}
};
static cw_ValStruct_t capwap_timers[] = {
{CW_TYPE_BYTE, "max-discovery-interval", 1,-1},
{CW_TYPE_BYTE, "echo-interval", 1,-1},
{NULL,NULL,0,0}
};
static cw_ValStruct_t radio_operational_state[] = {
{CW_TYPE_BYTE, "state", 1,-1},
{CW_TYPE_BYTE, "cause", 1,-1},
{NULL,NULL,0,0}
};
static cw_ValValRange_t radio_admin_state_valguard[]={
{0,0,"reserved"},
{1,1,"enabled"},
{2,2,"disabled"},
{0,0,NULL}
};
static cw_ValValRange_t discovery_types[]={
{0,0,"0 - Unknown"},
{1,1,"1 - Static Configuration"},
{2,2,"2 - DHCP"},
{3,3,"3 - DNS"},
{4,4,"4 - AC Referral"},
{0,0,NULL}
};
static cw_ValValRange_t mac_types[]={
{0,0,"0 - Local MAC"},
{1,1,"1 - Split MAC"},
{2,2,"2 - Both"},
{0,0,NULL}
};
static cw_ValStruct_t radio_admin_state[] = {
{CW_TYPE_BYTE, NULL, 1,-1, radio_admin_state_valguard},
{NULL,NULL,0,0}
};
static struct cw_ElemHandler handlers[] = {
{
"Discovery Type", /* name */
CAPWAP_ELEM_DISCOVERY_TYPE, /* Element ID */
0,0, /* Vendor / Proto */
1,1, /* min/max length */
CW_TYPE_BYTE, /* type */
"discovery-type", /* Key */
cw_in_generic, /* get */
cw_out_generic, /* put */
NULL,
NULL,
discovery_types,
}
,
{
"WTP Mac Type", /* name */
CAPWAP_ELEM_WTP_MAC_TYPE, /* Element ID */
0,0, /* Vendor / Proto */
1,1, /* min/max length */
CW_TYPE_BYTE, /* type */
"wtp-mac-type", /* Key */
cw_in_generic, /* get */
cw_out_generic, /* put */
NULL,
NULL,
mac_types
}
,
{
"WTP Board Data", /* name */
CAPWAP_ELEM_WTP_BOARD_DATA, /* Element ID */
0,0, /* Vendor / Proto */
14,1024, /* min/max length */
NULL, /* type */
CW_KEY_WTP_BOARD_DATA, /* Key */
capwap_in_wtp_board_data, /* get */
capwap_out_wtp_board_data /* put */
}
,
{
"WTP Descriptor", /* name */
CAPWAP_ELEM_WTP_DESCRIPTOR, /* Element ID */
0,0, /* Vendor / Proto */
33,1024, /* min/max length */
NULL, /* type */
CW_KEY_WTP_DESCRIPTOR, /* Key */
capwap_in_wtp_descriptor, /* get */
capwap_out_wtp_descriptor, /* put */
}
,
{
"WTP Frame Tunnel Mode", /* name */
CAPWAP_ELEM_WTP_FRAME_TUNNEL_MODE, /* Element ID */
0,0, /* Vendor / Proto */
1,1, /* min/max length */
CW_TYPE_BYTE, /* type */
CW_KEY_WTP_FRAME_TUNNEL_MODE, /* Key */
cw_in_generic, /* get */
cw_out_generic /* put */
}
,
{
"Vendor Specific Payload", /* name */
CAPWAP_ELEM_VENDOR_SPECIFIC_PAYLOAD, /* Element ID */
0,0, /* Vendor / Proto */
0,0, /* min/max length */
NULL, /* type */
"vendor_specific_payload", /* Key */
capwap_in_vendor_specific_payload, /* get */
NULL /* put */
}
,
{
"MTU Discovery Padding", /* name */
CAPWAP_ELEM_MTU_DISCOVERY_PADDING, /* Element ID */
0,0, /* Vendor / Proto */
0,0, /* min/max length */
NULL, /* type */
"mtu_discovery_padding", /* Key */
capwap_in_mtu_discovery_padding, /* get */
NULL /* put */
}
,
{
"AC Descriptor", /* name */
CAPWAP_ELEM_AC_DESCRIPTOR, /* Element ID */
0,0, /* Vendor / Proto */
0,0, /* min/max length */
NULL, /* type */
CW_KEY_AC_DESCRIPTOR, /* Key */
capwap_in_ac_descriptor, /* get */
capwap_out_ac_descriptor /* put */
}
,
{
"AC Name", /* name */
CAPWAP_ELEM_AC_NAME, /* Element ID */
0,0, /* Vendor / Proto */
1,CAPWAP_MAX_AC_NAME_LEN, /* min/max length */
CW_TYPE_BSTR16, /* type */
"ac-name", /* Key */
cw_in_generic, /* get */
cw_out_generic /* put */
}
,
{
"CAPWAP Control IPv4 Address", /* name */
CAPWAP_ELEM_CAPWAP_CONTROL_IPV4_ADDRESS, /* Element ID */
0,0, /* Vendor / Proto */
6,6, /* min/max length */
CW_TYPE_BSTR16, /* type */
"capwap-control-ip-address", /* Key */
capwap_in_capwap_control_ip_address, /* get */
capwap_out_capwap_control_ip_address /* put */
},
{
"CAPWAP Control IPv6 Address", /* name */
CAPWAP_ELEM_CAPWAP_CONTROL_IPV6_ADDRESS, /* Element ID */
0,0, /* Vendor / Proto */
18,18, /* min/max length */
CW_TYPE_BSTR16, /* type */
"capwap-control-ip-address", /* Key */
capwap_in_capwap_control_ip_address, /* get */
capwap_out_capwap_control_ip_address /* put */
}
,
{
"Location Data", /* name */
CAPWAP_ELEM_LOCATION_DATA, /* Element ID */
0,0, /* Vendor / Proto */
1,CAPWAP_MAX_LOCATION_DATA_LEN, /* min/max length */
CW_TYPE_BSTR16, /* type */
"location-data", /* Key */
cw_in_generic, /* get */
cw_out_generic /* put */
}
,
{
"WTP Name", /* name */
CAPWAP_ELEM_WTP_NAME, /* Element ID */
0,0, /* Vendor / Proto */
1,CAPWAP_MAX_WTP_NAME_LEN, /* min/max length */
CW_TYPE_BSTR16, /* type */
"wtp-name", /* Key */
cw_in_generic, /* get */
cw_out_generic /* put */
}
,
{
"Session ID", /* name */
CAPWAP_ELEM_SESSION_ID, /* Element ID */
0,0, /* Vendor / Proto */
CAPWAP_SESSION_ID_LEN,CAPWAP_SESSION_ID_LEN, /* min/max length */
CW_TYPE_BSTR16, /* type */
"session-id", /* Key */
cw_in_generic, /* get */
cw_out_generic /* put */
}
,
{
"Result Code", /* name */
CAPWAP_ELEM_RESULT_CODE, /* Element ID */
0,0, /* Vendor / Proto */
4,4, /* min/max length */
CW_TYPE_DWORD, /* type */
"result-code", /* Key */
cw_in_generic, /* get */
cw_out_generic /* put */
}
,
{
"ECN Support", /* name */
CAPWAP_ELEM_ECN_SUPPORT, /* Element ID */
0,0, /* Vendor / Proto */
1,1, /* min/max length */
CW_TYPE_BYTE, /* type */
"ecn-support", /* Key */
cw_in_generic, /* get */
cw_out_generic /* put */
}
,
{
"Maximum Message Length", /* name */
CAPWAP_ELEM_MAXIMUM_MESSAGE_LENGTH, /* Element ID */
0,0, /* Vendor / Proto */
2,2, /* min/max length */
CW_TYPE_WORD, /* type */
"maximum-message-length", /* Key */
cw_in_generic, /* get */
cw_out_generic /* put */
}
,
{
"CAPWAP Local IPv4 Address", /* name */
CAPWAP_ELEM_CAPWAP_LOCAL_IPV4_ADDRESS, /* Element ID */
0,0, /* Vendor / Proto */
4,4, /* min/max length */
CW_TYPE_IPADDRESS, /* type */
"capwap-local-ip-address", /* Key */
cw_in_generic, /* get */
capwap_out_capwap_local_ip_address /* put */
}
,
{
"CAPWAP Local IPv6 Address", /* name */
CAPWAP_ELEM_CAPWAP_LOCAL_IPV6_ADDRESS, /* Element ID */
0,0, /* Vendor / Proto */
16,16, /* min/max length */
CW_TYPE_IPADDRESS, /* type */
"capwap-local-ip-address", /* Key */
cw_in_generic, /* get */
capwap_out_capwap_local_ip_address /* put */
}
,
{
"Statitsics Timer", /* name */
CAPWAP_ELEM_STATISTICS_TIMER, /* Element ID */
0,0, /* Vendor / Proto */
2,2, /* min/max length */
CW_TYPE_WORD, /* type */
"statistics-timer", /* Key */
cw_in_generic, /* get */
cw_out_generic /* put */
}
,
{
"WTP Reboot Statistics", /* name */
CAPWAP_ELEM_WTP_REBOOT_STATISTICS, /* Element ID */
0,0, /* Vendor / Proto */
15,15, /* min/max length */
wtp_reboot_statistics, /* type */
"wtp-reboot-statistics", /* Key */
cw_in_generic_struct, /* handler */
cw_out_generic_struct /* put */
}
,
{
"Radio Administrative State", /* name */
CAPWAP_ELEM_RADIO_ADMINISTRATIVE_STATE, /* Element ID */
0, 0, /* Vendor / Proto */
2, 2, /* min/max length */
radio_admin_state, /* type */
"admin-state", /* Key */
cw_in_radio_generic_struct, /* get */
cw_out_radio_generic_struct /* put */
}
,
{
"CAPWAP Timers", /* name */
CAPWAP_ELEM_CAPWAP_TIMERS, /* Element ID */
0, 0, /* Vendor / Proto */
2, 2, /* min/max length */
capwap_timers, /* type */
"capwap-timers", /* Key */
cw_in_generic_struct, /* get */
cw_out_generic_struct /* put */
}
,
{
"Decryption Error Report Period", /* name */
CAPWAP_ELEM_DECRYPTION_ERROR_REPORT_PERIOD, /* Element ID */
0, 0, /* Vendor / Proto */
3, 3, /* min/max length */
CW_TYPE_WORD, /* type */
"decryption-error-report-period", /* Key */
cw_in_radio_generic, /* get */
cw_out_radio_generic /* put */
}
,
{
"Idle Timeout", /* name */
CAPWAP_ELEM_IDLE_TIMEOUT, /* Element ID */
0, 0, /* Vendor / Proto */
4, 4, /* min/max length */
CW_TYPE_DWORD, /* type */
"idle-timeout", /* Key */
cw_in_generic, /* get */
cw_out_generic /* put */
}
,
{
"WTP Fallback", /* name */
CAPWAP_ELEM_WTP_FALLBACK, /* Element ID */
0, 0, /* Vendor / Proto */
1, 1, /* min/max length */
CW_TYPE_BYTE, /* type */
"wtp-fallback", /* Key */
cw_in_generic, /* get */
cw_out_generic /* put */
}
,
{
"Radio Operational State", /* name */
CAPWAP_ELEM_RADIO_OPERATIONAL_STATE, /* Element ID */
0, 0, /* Vendor / Proto */
3, 3, /* min/max length */
radio_operational_state, /* type */
"operational-state", /* Key */
cw_in_radio_generic_struct, /* get */
cw_out_radio_generic_struct /* put */
}
,
{
"AC Name with Priority", /* name */
CAPWAP_ELEM_AC_NAME_WITH_PRIORITY, /* Element ID */
0,0, /* Vendor / Proto */
1,513, /* min/max length */
CW_TYPE_BSTR16, /* type */
"ac-name-with-index", /* Key */
cw_in_generic_with_index, /* get */
cw_out_generic_with_index /* put */
}
,
{0,0,0,0,0,0,0,0}
};
static cw_State_t discovery_request_states[] = {
{CAPWAP_STATE_DISCOVERY,CAPWAP_STATE_DISCOVERY},
{0,0}
};
static struct cw_ElemDef discovery_request_elements[] ={
{0,0,CAPWAP_ELEM_DISCOVERY_TYPE, 1, 0},
{0,0,CAPWAP_ELEM_WTP_BOARD_DATA, 1, 0},
{0,0,CAPWAP_ELEM_WTP_DESCRIPTOR, 1, 0},
{0,0,CAPWAP_ELEM_WTP_FRAME_TUNNEL_MODE, 1, 0},
{0,0,CAPWAP_ELEM_WTP_MAC_TYPE, 1, 0},
{0,0,CAPWAP_ELEM_MTU_DISCOVERY_PADDING, 0, 0},
{0,0,CAPWAP_ELEM_VENDOR_SPECIFIC_PAYLOAD, 0, CW_IGNORE},
{0,0,0,0,0}
};
static cw_State_t discovery_response_states[] = {
{CAPWAP_STATE_DISCOVERY,CAPWAP_STATE_DISCOVERY},
{0,0}
};
static struct cw_ElemDef discovery_response_elements[] ={
{0,0,CAPWAP_ELEM_AC_DESCRIPTOR, 1, 0},
{0,0,CAPWAP_ELEM_AC_NAME, 1, 0},
{0,0,CAPWAP_ELEM_CAPWAP_CONTROL_IPV4_ADDRESS, 1, 0},
{0,0,CAPWAP_ELEM_CAPWAP_CONTROL_IPV6_ADDRESS, 1, 0},
{0,0,CAPWAP_ELEM_VENDOR_SPECIFIC_PAYLOAD, 0, CW_IGNORE},
{0,0,0,0,0}
};
static cw_State_t join_request_states[] = {
{CAPWAP_STATE_JOIN, CAPWAP_STATE_JOIN},
{0,0}
};
static struct cw_ElemDef join_request_elements[] ={
{0,0,CAPWAP_ELEM_LOCATION_DATA, 1, 0},
{0,0,CAPWAP_ELEM_WTP_BOARD_DATA, 1, 0},
{0,0,CAPWAP_ELEM_WTP_DESCRIPTOR, 1, 0},
{0,0,CAPWAP_ELEM_WTP_NAME, 1, 0},
{0,0,CAPWAP_ELEM_SESSION_ID, 1, 0},
{0,0,CAPWAP_ELEM_WTP_FRAME_TUNNEL_MODE, 1, 0},
{0,0,CAPWAP_ELEM_WTP_MAC_TYPE, 1, 0},
{0,0,CAPWAP_ELEM_ECN_SUPPORT, 1, 0},
{0,0,CAPWAP_ELEM_CAPWAP_LOCAL_IPV4_ADDRESS, 1, 0},
{0,0,CAPWAP_ELEM_CAPWAP_LOCAL_IPV6_ADDRESS, 1, 0},
{0,0,CAPWAP_ELEM_MAXIMUM_MESSAGE_LENGTH, 0, 0},
{0,0,CAPWAP_ELEM_VENDOR_SPECIFIC_PAYLOAD, 0, CW_IGNORE},
{0,0,0,0,0}
};
static cw_State_t join_response_states[] = {
{CAPWAP_STATE_JOIN,CAPWAP_STATE_JOIN},
{0,0}
};
static struct cw_ElemDef join_response_elements[] ={
{0,0,CAPWAP_ELEM_RESULT_CODE, 1, 0},
{0,0,CAPWAP_ELEM_AC_DESCRIPTOR, 1, 0},
{0,0,CAPWAP_ELEM_AC_NAME, 1, 0},
{0,0,CAPWAP_ELEM_ECN_SUPPORT, 1, 0},
{0,0,CAPWAP_ELEM_CAPWAP_CONTROL_IPV4_ADDRESS, 1, 0},
{0,0,CAPWAP_ELEM_CAPWAP_CONTROL_IPV6_ADDRESS, 1, 0},
{0,0,CAPWAP_ELEM_CAPWAP_LOCAL_IPV4_ADDRESS, 1, 0},
{0,0,CAPWAP_ELEM_CAPWAP_LOCAL_IPV6_ADDRESS, 1, 0},
{0,0,CAPWAP_ELEM_MAXIMUM_MESSAGE_LENGTH, 0, 0},
{0,0,CAPWAP_ELEM_VENDOR_SPECIFIC_PAYLOAD, 0, CW_IGNORE},
{0,0,0,0,0}
};
static cw_State_t configuration_status_request_states[] = {
{CAPWAP_STATE_JOIN, CAPWAP_STATE_CONFIGURE},
{0,0}
};
static struct cw_ElemDef configuration_status_request_elements[] ={
{0,0,CAPWAP_ELEM_AC_NAME, 1, 0},
{0,0,CAPWAP_ELEM_RADIO_ADMINISTRATIVE_STATE, 1, 0},
{0,0,CAPWAP_ELEM_STATISTICS_TIMER, 1, 0},
{0,0,CAPWAP_ELEM_WTP_REBOOT_STATISTICS, 1, 0},
{0,0,CAPWAP_ELEM_AC_NAME_WITH_PRIORITY, 0, 0},
{0,0,CAPWAP_ELEM_VENDOR_SPECIFIC_PAYLOAD, 0, CW_IGNORE},
{0,0,0,0,0}
};
static cw_State_t configuration_status_response_states[] = {
{CAPWAP_STATE_JOIN,CAPWAP_STATE_JOIN},
{0,0}
};
static struct cw_ElemDef configuration_status_response_elements[] ={
{0,0,CAPWAP_ELEM_CAPWAP_TIMERS, 1, 0},
{0,0,CAPWAP_ELEM_DECRYPTION_ERROR_REPORT_PERIOD, 1, 0},
{0,0,CAPWAP_ELEM_IDLE_TIMEOUT, 1, 0},
{0,0,CAPWAP_ELEM_WTP_FALLBACK, 1, 0},
{0,0,CAPWAP_ELEM_VENDOR_SPECIFIC_PAYLOAD, 0, CW_IGNORE},
{0,0,0,0,0}
};
static cw_State_t configuration_update_request_states[] = {
{CAPWAP_STATE_RUN,CAPWAP_STATE_RUN},
{0,0}
};
static struct cw_ElemDef configuration_update_request_elements[] ={
{0,0,CAPWAP_ELEM_RADIO_ADMINISTRATIVE_STATE, 0, 0},
{0,0,CAPWAP_ELEM_STATISTICS_TIMER, 0, 0},
{0,0,CAPWAP_ELEM_VENDOR_SPECIFIC_PAYLOAD, 0, CW_IGNORE},
{0,0,0,0,0}
};
static cw_State_t configuration_update_response_states[] = {
{CAPWAP_STATE_RUN,CAPWAP_STATE_RUN},
{0,0}
};
static struct cw_ElemDef configuration_update_response_elements[] ={
{0,0,CAPWAP_ELEM_RESULT_CODE, 1, 0},
{0,0,0,0,0}
};
static cw_State_t change_state_event_request_states[] = {
{CAPWAP_STATE_CONFIGURE,CAPWAP_STATE_DATA_CHECK},
{CAPWAP_STATE_RUN,CAPWAP_STATE_RUN},
{0,0}
};
static struct cw_ElemDef change_state_event_request_elements[] ={
{0,0,CAPWAP_ELEM_RADIO_OPERATIONAL_STATE, 1,0},
{0,0,CAPWAP_ELEM_RESULT_CODE, 1,0},
{0,0,CAPWAP_ELEM_VENDOR_SPECIFIC_PAYLOAD, 0, CW_IGNORE},
{0,0,0,0,0}
};
static cw_State_t change_state_event_response_states[] = {
{CAPWAP_STATE_JOIN,CAPWAP_STATE_JOIN},
{CAPWAP_STATE_RUN,CAPWAP_STATE_RUN},
{0,0}
};
static struct cw_ElemDef change_state_event_response_elements[] ={
{0,0,CAPWAP_ELEM_RESULT_CODE, 1, 0},
{0,0,0,0,0}
};
static cw_State_t wtp_event_request_states[] = {
{CAPWAP_STATE_RUN,CAPWAP_STATE_RUN},
{0,0}
};
static struct cw_ElemDef wtp_event_request_elements[] ={
{0,0,CAPWAP_ELEM_VENDOR_SPECIFIC_PAYLOAD, 0, CW_IGNORE},
{0,0,0,0,0}
};
static cw_State_t wtp_event_response_states[] = {
{CAPWAP_STATE_JOIN,0},
{0,0}
};
static struct cw_ElemDef wtp_event_response_elements[] ={
{0,0,CAPWAP_ELEM_RESULT_CODE, 1, 0},
{0,0,0,0,0}
};
static cw_State_t echo_request_states[] = {
{CAPWAP_STATE_RUN,CAPWAP_STATE_RUN},
{0,0}
};
static struct cw_ElemDef echo_request_elements[] ={
{0,0,CAPWAP_ELEM_VENDOR_SPECIFIC_PAYLOAD, 0, CW_IGNORE},
{0,0,0,0,0}
};
static cw_State_t echo_response_states[] = {
{CAPWAP_STATE_RUN,0},
{0,0}
};
static struct cw_ElemDef echo_response_elements[] ={
{0,0,CAPWAP_ELEM_VENDOR_SPECIFIC_PAYLOAD, 0, CW_IGNORE},
{0,0,0,0,0}
};
static struct cw_MsgDef messages[] = {
{
"Discovery Request",
CAPWAP_MSG_DISCOVERY_REQUEST,
CW_ROLE_AC,
discovery_request_states,
discovery_request_elements
},
{
"Discovery Response",
CAPWAP_MSG_DISCOVERY_RESPONSE,
CW_ROLE_WTP,
discovery_response_states,
discovery_response_elements
},
{
"Primary Discovery Request",
CAPWAP_MSG_PRIMARY_DISCOVERY_REQUEST,
CW_ROLE_AC,
discovery_request_states,
discovery_request_elements
},
{
"Primary Discovery Response",
CAPWAP_MSG_PRIMARY_DISCOVERY_RESPONSE,
CW_ROLE_WTP,
discovery_response_states,
discovery_response_elements
},
{
"Join Request",
CAPWAP_MSG_JOIN_REQUEST,
CW_ROLE_AC,
join_request_states,
join_request_elements,
NULL,
postprocess_join_request,
},
{
"Join Response",
CAPWAP_MSG_JOIN_RESPONSE,
CW_ROLE_WTP,
join_response_states,
join_response_elements
},
{
"Configuration Status Request", /* name */
CAPWAP_MSG_CONFIGURATION_STATUS_REQUEST, /* msg type */
CW_ROLE_AC, /* role */
configuration_status_request_states, /* allowed states */
configuration_status_request_elements, /* msg elements */
NULL,
NULL,
},
{
"Configuration Status Response", /* name */
CAPWAP_MSG_CONFIGURATION_STATUS_RESPONSE, /* msg type */
CW_ROLE_WTP, /* role */
configuration_status_response_states, /* allowed states */
configuration_status_response_elements /* msg elements */
},
{
"Configuration Update Request", /* name */
CAPWAP_MSG_CONFIGURATION_UPDATE_REQUEST, /* msg type */
CW_ROLE_WTP, /* role */
configuration_update_request_states, /* allowed states */
configuration_update_request_elements /* msg elements */
},
{
"Configuration Update Reponse", /* name */
CAPWAP_MSG_CONFIGURATION_UPDATE_RESPONSE, /* msg type */
CW_ROLE_AC, /* role */
configuration_update_response_states, /* allowed states */
configuration_update_response_elements /* msg elements */
},
{
"Change State Event Request", /* name */
CAPWAP_MSG_CHANGE_STATE_EVENT_REQUEST, /* msg type */
CW_ROLE_AC, /* role */
change_state_event_request_states, /* allowed states */
change_state_event_request_elements, /* msg elements */
NULL,
NULL,
},
{
"Change State Event Reponse", /* name */
CAPWAP_MSG_CHANGE_STATE_EVENT_RESPONSE, /* msg type */
CW_ROLE_WTP, /* role */
change_state_event_response_states, /* allowed states */
change_state_event_response_elements /* msg elements */
},
{
"WTP Event Request", /* name */
CAPWAP_MSG_WTP_EVENT_REQUEST, /* msg type */
CW_ROLE_AC, /* role */
wtp_event_request_states, /* allowed states */
wtp_event_request_elements /* msg elements */
},
{
"WTP Event Reponse", /* name */
CAPWAP_MSG_WTP_EVENT_RESPONSE, /* msg type */
CW_ROLE_WTP, /* role */
wtp_event_response_states, /* allowed states */
wtp_event_response_elements /* msg elements */
},
{
"Echo Request", /* name */
CAPWAP_MSG_ECHO_REQUEST, /* msg type */
CW_ROLE_AC, /* role */
echo_request_states, /* allowed states */
echo_request_elements /* msg elements */
},
{
"Echo Response", /* name */
CAPWAP_MSG_ECHO_RESPONSE, /* msg type */
CW_ROLE_WTP, /* role */
echo_response_states, /* allowed states */
echo_response_elements /* msg elements */
},
{0,0,0,0}
};
static int postprocess_join_request(struct cw_Conn *conn)
{
cw_Val_t * result;
result = cw_ktv_get(conn->remote_cfg,"session-id",CW_TYPE_BSTR16);
if (result != NULL){
conn->session_id = result->val.ptr;
connlist_add_by_session_id(conn->connlist,conn);
}
return 1;
}
static cw_StateMachineState_t statemachine_states[]={
{
CAPWAP_STATE_DTLS_SETUP, CAPWAP_STATE_JOIN, /* transition */
"wait-join",CAPWAP_WAIT_JOIN, /* timer */
1 /* retval */
}
,
{
CAPWAP_STATE_JOIN,CAPWAP_STATE_TIMEOUT,
NULL,0,
0, "WTP Join timeout"
}
,
{
CAPWAP_STATE_JOIN, CAPWAP_STATE_JOIN,
NULL,0,
1, "WTP has joined"
}
,
{
CAPWAP_STATE_JOIN, CAPWAP_STATE_CONFIGURE,
"capwap-timers/change-state-pending-timer",CAPWAP_TIMER_CHANGE_STATE_PENDING_TIMER,
1, NULL
}
,
{
CAPWAP_STATE_CONFIGURE,CAPWAP_STATE_TIMEOUT,
NULL,0,
0, "WTP change state timeout"
}
,
{
CAPWAP_STATE_CONFIGURE,CAPWAP_STATE_DATA_CHECK,
"capwap-timers/data-check-timer",CAPWAP_TIMER_DATA_CHECK_TIMER,
1, NULL
}
,
{
CAPWAP_STATE_DATA_CHECK,CAPWAP_STATE_TIMEOUT,
NULL,0,
0, "WTP data check timeout"
}
,
{
CAPWAP_STATE_DATA_CHECK,CAPWAP_STATE_RUN,
"capwap-timers/echo-interval",CAPWAP_ECHO_INTERVAL,
1, NULL
}
,
{
CAPWAP_STATE_RUN,CAPWAP_STATE_RUN,
"capwap-timers/echo-interval",CAPWAP_ECHO_INTERVAL,
1, NULL
}
,
{
CAPWAP_STATE_RUN,CAPWAP_STATE_TIMEOUT,
NULL,0,
0, "WTP echo timout"
}
,
{0,0,0}
};
static int write_header(struct cw_ElemHandler * handler, uint8_t * dst, int len)
{
if (handler->vendor)
return len + cw_put_elem_vendor_hdr(dst, handler->vendor, handler->id, len);
return len + cw_put_elem_hdr(dst, handler->id, len);
}
static int header_len(struct cw_ElemHandler * handler)
{
return handler->vendor ? 10 : 4;
}
struct cw_MsgSet * capwap_register_msg_set(struct cw_MsgSet * set, int mode){
if (mode != CW_MOD_MODE_CAPWAP)
return NULL;
cw_dbg(DBG_INFO,"CAPWAP: Register messages");
cw_msgset_add(set,messages, handlers);
cw_msgset_add_states(set,statemachine_states);
set->write_header = write_header;
set->header_len = header_len;
cw_dbg(DBG_INFO,"CAPWAP: Done register messages");
return set;
}
void test_sets(){
struct cw_MsgSet * set = cw_msgset_create();
if (set==NULL){
cw_log(LOG_ERR,"No mem");
return;
}
cw_msgset_add(set,messages, handlers);
}
/*
cw_msgset_add(set,messages);
cw_elem_handler_t el;
memset(&el,0,sizeof(el));
el.id=CAPWAP_ELEM_DISCOVERY_TYPE;
cw_ElemDef_t search, *result;;
search.handler = &el;
result = mavl_find(set->all_elems,&search);
if (result!=NULL){
printf("Found: %d %s %d\n",
result->handler->id,
result->handler->name,
result->mand
);
}
else{
printf("not found\n");
}
mlist_t m;
m = cw_msgset_get_msg(set,CAPWAP_MSG_DISCOVERY_REQUEST);
printf("Hey: %p\n",m);
struct mlist_elem * i;
mlist_foreach(i,m){
cw_ElemDef_t * le = i->data;
printf("Element: %d %s\n",le->handler->id, le->handler->name, le->mand);
}
}
*/

View File

@ -1,769 +0,0 @@
#include "cw/cw.h"
#include "cw/action.h"
#include "cw/capwap_items.h"
#include "mod_capwap.h"
static cw_action_in_t actions_in[] = {
/* Message Discovery Response */
{
.capwap_state = CAPWAP_STATE_DISCOVERY,
.msg_id = CAPWAP_MSG_DISCOVERY_RESPONSE,
.end = cw_in_check_disc_resp
}
,
/* AC Descriptor - Discovery Response */
{
.capwap_state = CAPWAP_STATE_DISCOVERY,
.msg_id = CAPWAP_MSG_DISCOVERY_RESPONSE,
.elem_id = CAPWAP_ELEM_AC_DESCRIPTOR,
.item_id = CW_ITEM_AC_DESCRIPTOR,
.start = cw_in_ac_descriptor,
.min_len = 12,
.max_len = 8192,
.mand = 1
}
,
/* AC Name - Discovery Response */
{
.capwap_state = CAPWAP_STATE_DISCOVERY,
.msg_id = CAPWAP_MSG_DISCOVERY_RESPONSE,
.elem_id = CAPWAP_ELEM_AC_NAME,
.item_id = CW_ITEM_AC_NAME,
.start = cw_in_generic2,
.min_len = 1,
.max_len = 512,
.mand = 1
}
,
/* CAPWAP Control IPv4 Address - Discovery Response*/
{
.capwap_state = CAPWAP_STATE_DISCOVERY,
.msg_id = CAPWAP_MSG_DISCOVERY_RESPONSE,
.elem_id = CAPWAP_ELEM_CAPWAP_CONTROL_IPV4_ADDRESS,
.item_id = CW_ITEM_CAPWAP_CONTROL_IP_ADDRESS_LIST,
.start = cw_in_capwap_control_ip_address,
.min_len = 6,
.max_len = 6,
.mand = 1
}
,
/* CAPWAP Control IPv6 Address - Discovery Response*/
{
.capwap_state = CAPWAP_STATE_DISCOVERY,
.msg_id = CAPWAP_MSG_DISCOVERY_RESPONSE,
.elem_id = CAPWAP_ELEM_CAPWAP_CONTROL_IPV6_ADDRESS,
.item_id = CW_ITEM_CAPWAP_CONTROL_IP_ADDRESS_LIST,
.start = cw_in_capwap_control_ip_address, // Change to v6 handler
.min_len = 18,
.max_len = 18,
.mand = 1
}
,
/* Vendor Specific Payload - Discovery Response*/
{
.capwap_state = CAPWAP_STATE_DISCOVERY,
.msg_id = CAPWAP_MSG_DISCOVERY_RESPONSE,
.elem_id = CAPWAP_ELEM_VENDOR_SPECIFIC_PAYLOAD,
.start = cw_in_vendor_specific_payload
}
,
/* Result Code - Discovery Response */
{
/*
* The Result Code is not defined as part
* of Discovery Response
*/
.capwap_state = CAPWAP_STATE_DISCOVERY,
.msg_id = CAPWAP_MSG_DISCOVERY_RESPONSE,
.elem_id = CAPWAP_ELEM_RESULT_CODE,
.item_id = CW_ITEM_RESULT_CODE,
.start = cw_in_generic2,
.min_len = 4,
.max_len = 4,
.mand = 0
}
,
/* ----------------------------------------------------------------
* Message Join Response
*/
{
.capwap_state = CAPWAP_STATE_JOIN,
.msg_id = CAPWAP_MSG_JOIN_RESPONSE,
.end = cw_in_check_generic_resp
}
,
/* Result Code - Join Response */
{
.capwap_state = CAPWAP_STATE_JOIN,
.msg_id = CAPWAP_MSG_JOIN_RESPONSE,
.elem_id = CAPWAP_ELEM_RESULT_CODE,
.item_id = CW_ITEM_RESULT_CODE,
.start = cw_in_generic2,
.min_len = 4,
.max_len = 4,
.mand = 1
}
,
/* AC Descriptor - Join Response */
{
.capwap_state = CAPWAP_STATE_JOIN,
.msg_id = CAPWAP_MSG_JOIN_RESPONSE,
.elem_id = CAPWAP_ELEM_AC_DESCRIPTOR,
.item_id = CW_ITEM_AC_DESCRIPTOR,
.start = cw_in_ac_descriptor,
.min_len = 12,
.max_len = 8192,
.mand = 1
}
,
/* AC Name - Join Response */
{
.capwap_state = CAPWAP_STATE_JOIN,
.msg_id = CAPWAP_MSG_JOIN_RESPONSE,
.elem_id = CAPWAP_ELEM_AC_NAME,
.item_id = CW_ITEM_AC_NAME,
.start = cw_in_generic2,
.min_len = 1,
.max_len = 512,
.mand = 1
}
,
/* ECN Support - Join Response */
{
.capwap_state = CAPWAP_STATE_JOIN,
.msg_id = CAPWAP_MSG_JOIN_RESPONSE,
.elem_id = CAPWAP_ELEM_ECN_SUPPORT,
.item_id = CW_ITEM_ECN_SUPPORT,
.start = cw_in_generic2,
.min_len = 1,
.max_len = 1,
.mand = 1
}
,
/* CAPWAP Control IPv4 Address - Join Response*/
{
.capwap_state = CAPWAP_STATE_JOIN,
.msg_id = CAPWAP_MSG_JOIN_RESPONSE,
.elem_id = CAPWAP_ELEM_CAPWAP_CONTROL_IPV4_ADDRESS,
.item_id = CW_ITEM_CAPWAP_CONTROL_IP_ADDRESS_LIST,
.start = cw_in_capwap_control_ip_address,
.min_len = 6,
.max_len = 6,
.mand = 1
}
,
/* CAPWAP Control IPv6 Address - Join Response*/
{
.capwap_state = CAPWAP_STATE_JOIN,
.msg_id = CAPWAP_MSG_JOIN_RESPONSE,
.elem_id = CAPWAP_ELEM_CAPWAP_CONTROL_IPV6_ADDRESS,
.item_id = CW_ITEM_CAPWAP_CONTROL_IP_ADDRESS_LIST,
.start = cw_in_capwap_control_ip_address, // Change to v6 handler
.min_len = 18,
.max_len = 18,
.mand = 1
}
,
/* Maximum Message Length - Join Response */
{
.capwap_state = CAPWAP_STATE_JOIN,
.msg_id = CAPWAP_MSG_JOIN_RESPONSE,
.elem_id = CAPWAP_ELEM_MAXIMUM_MESSAGE_LENGTH,
.start = cw_in_generic2,
.item_id = CW_ITEM_MAXIMUM_MESSAGE_LENGTH,
.min_len = 2,
.max_len = 2
}
,
/* ----------------------------------------------------------------
* Message Configuration Status Response - IN
*/
{
.capwap_state = CAPWAP_STATE_CONFIGURE,
.msg_id = CAPWAP_MSG_CONFIGURATION_STATUS_RESPONSE,
.end = cw_in_check_generic_resp
}
,
/* Capwap Timers - Config Status Resp */
{
.capwap_state = CAPWAP_STATE_CONFIGURE,
.msg_id = CAPWAP_MSG_CONFIGURATION_STATUS_RESPONSE,
.elem_id = CAPWAP_ELEM_CAPWAP_TIMERS,
.item_id = CW_ITEM_CAPWAP_TIMERS,
.start = cw_in_generic2,
.min_len = 2,
.max_len = 2,
.mand = 1
}
,
/* Decryption Error Report - Config Status Resp */
{
.capwap_state = CAPWAP_STATE_CONFIGURE,
.msg_id = CAPWAP_MSG_CONFIGURATION_STATUS_RESPONSE,
.elem_id = CAPWAP_ELEM_DECRYPTION_ERROR_REPORT_PERIOD,
.item_id = CW_RADIOITEM_DECRYPTION_ERROR_REPORT_PERIOD,
.start = cw_in_radio_generic,
.min_len = 3,
.max_len = 3,
.mand = 1
}
,
/* Idle Timeout - Config Status Resp */
{
.capwap_state = CAPWAP_STATE_CONFIGURE,
.msg_id = CAPWAP_MSG_CONFIGURATION_STATUS_RESPONSE,
.elem_id = CAPWAP_ELEM_IDLE_TIMEOUT,
.item_id = CW_ITEM_IDLE_TIMEOUT,
.start = cw_in_generic2,
.min_len = 4,
.max_len = 4,
.mand = 1
}
,
/* WTP Fallback - Config Status Resp */
{
.capwap_state = CAPWAP_STATE_CONFIGURE,
.msg_id = CAPWAP_MSG_CONFIGURATION_STATUS_RESPONSE,
.elem_id = CAPWAP_ELEM_WTP_FALLBACK,
.item_id = CW_ITEM_WTP_FALLBACK,
.start = cw_in_generic2,
.min_len = 1,
.max_len = 1,
.mand = 1
}
,
/* Result Code - Config Status Resp */
{
.capwap_state = CAPWAP_STATE_CONFIGURE,
.msg_id = CAPWAP_MSG_CONFIGURATION_STATUS_RESPONSE,
.elem_id = CAPWAP_ELEM_RESULT_CODE,
.item_id = CW_ITEM_RESULT_CODE,
.start = cw_in_generic2,
.min_len = 4,
.max_len = 4,
.mand = 0
}
,
/* AC IPv4 List - Config Status Resp */
{
.capwap_state = CAPWAP_STATE_CONFIGURE,
.msg_id = CAPWAP_MSG_CONFIGURATION_STATUS_RESPONSE,
.elem_id = CAPWAP_ELEM_AC_IPV4_LIST,
.item_id = CW_ITEM_AC_IP_LIST,
.start = NULL,
.min_len = 4,
.max_len = 1024*4,
.mand = 0
}
,
/* Vendor Specific Payload - Cponfig Status Resp */
{
.capwap_state = CAPWAP_STATE_CONFIGURE,
.msg_id = CAPWAP_MSG_CONFIGURATION_STATUS_RESPONSE,
.elem_id = CAPWAP_ELEM_VENDOR_SPECIFIC_PAYLOAD,
.start = cw_in_vendor_specific_payload
}
,
/* ----------------------------------------------------------------
* Change State Event Response - IN
*/
{
.capwap_state = CAPWAP_STATE_CONFIGURE,
.msg_id = CAPWAP_MSG_CHANGE_STATE_EVENT_RESPONSE,
.end = cw_in_check_cfg_update_req
}
,
{
.capwap_state = CAPWAP_STATE_CONFIGURE,
.msg_id = CAPWAP_MSG_CHANGE_STATE_EVENT_RESPONSE,
.elem_id = CAPWAP_ELEM_RESULT_CODE,
.item_id = CW_ITEM_RESULT_CODE,
.start = cw_in_generic2,
.min_len = 4,
.max_len = 4,
.mand = 1
}
,
/* ----------------------------------------------------------------
* Change State Event Response - IN Run State
*/
{
.capwap_state = CW_STATE_RUN,
.msg_id = CAPWAP_MSG_CHANGE_STATE_EVENT_RESPONSE,
.end = cw_in_check_cfg_update_req
}
,
{
.capwap_state = CW_STATE_RUN,
.msg_id = CAPWAP_MSG_CHANGE_STATE_EVENT_RESPONSE,
.elem_id = CAPWAP_ELEM_RESULT_CODE,
.item_id = CW_ITEM_RESULT_CODE,
.start = cw_in_generic2,
.min_len = 4,
.max_len = 4,
.mand = 1
}
,
/* ----------------------------------------------------------------
* Message Echo Response - IN
*/
{
.capwap_state = CW_STATE_RUN,
.msg_id = CAPWAP_MSG_ECHO_RESPONSE,
}
,
/* Vendor Specific Payload - Echo Response */
{
.capwap_state = CW_STATE_RUN,
.msg_id = CAPWAP_MSG_ECHO_RESPONSE,
.elem_id = CAPWAP_ELEM_VENDOR_SPECIFIC_PAYLOAD,
.start = cw_in_vendor_specific_payload
}
,
/* ----------------------------------------------------------------
* Configuration Update Request - IN
*/
{
.capwap_state = CW_STATE_RUN,
.msg_id = CAPWAP_MSG_CONFIGURATION_UPDATE_REQUEST,
}
,
/* WTP Name - Config Update Req */
{
.capwap_state = CW_STATE_RUN,
.msg_id = CAPWAP_MSG_CONFIGURATION_UPDATE_REQUEST,
.elem_id = CAPWAP_ELEM_WTP_NAME,
.item_id = CW_ITEM_WTP_NAME,
.start = cw_in_generic2,
.min_len = 1,
.max_len = 1024,
.mand = 0
}
,
/* Location Data - Config Update Req */
{
.capwap_state = CW_STATE_RUN,
.msg_id = CAPWAP_MSG_CONFIGURATION_UPDATE_REQUEST,
.elem_id = CAPWAP_ELEM_LOCATION_DATA,
.item_id = CW_ITEM_LOCATION_DATA,
.start = cw_in_generic2,
.min_len = 1,
.max_len = 1024,
.mand = 0
}
,
/* Radio Admin State - Config Update Request */
{
.capwap_state = CW_STATE_RUN,
.msg_id = CAPWAP_MSG_CONFIGURATION_UPDATE_REQUEST,
.elem_id = CAPWAP_ELEM_RADIO_ADMINISTRATIVE_STATE,
.item_id = CW_RADIOITEM_ADMIN_STATE,
.start = cw_in_radio_generic,
.min_len=2,
.max_len=2,
.mand = 0
}
,
/* Vendor Specific Payload - Config Update Req */
{
.capwap_state = CW_STATE_RUN,
.msg_id = CAPWAP_MSG_CONFIGURATION_UPDATE_REQUEST,
.elem_id = CAPWAP_ELEM_VENDOR_SPECIFIC_PAYLOAD,
.start = cw_in_vendor_specific_payload
}
,
};
static cw_action_out_t actions_out[] = {
/* ---------------------------------------------------------------
* Discovery Request - Out
*/
/* Discovery Type - Discovery Request */
{
.msg_id = CAPWAP_MSG_DISCOVERY_REQUEST,
.elem_id = CAPWAP_ELEM_DISCOVERY_TYPE,
.item_id = CW_ITEM_DISCOVERY_TYPE,
.out = cw_out_generic,
.get = cw_out_get_outgoing,
.mand = 1
}
,
/* WTP Board Data - Discovery Request */
{
.msg_id = CAPWAP_MSG_DISCOVERY_REQUEST,
.elem_id = CAPWAP_ELEM_WTP_BOARD_DATA,
.item_id = CW_ITEM_WTP_BOARD_DATA,
.out = cw_out_wtp_board_data,
.get = cw_out_get_config,
.mand = 1
}
,
/* WTP Descriptor - Discover Request */
{
.msg_id = CAPWAP_MSG_DISCOVERY_REQUEST,
.elem_id = CAPWAP_ELEM_WTP_DESCRIPTOR,
.item_id = CW_ITEM_WTP_DESCRIPTOR,
.out = capwap_out_wtp_descriptor,
//.get = cw_out_get_config,
.mand = 1
}
,
/* WTP Frame TunnelMode - Discovery Request */
{
.msg_id = CAPWAP_MSG_DISCOVERY_REQUEST,
.elem_id = CAPWAP_ELEM_WTP_FRAME_TUNNEL_MODE,
.item_id = CW_ITEM_WTP_FRAME_TUNNEL_MODE,
.out = cw_out_generic,
.get = cw_out_get_local,
.mand = 1
}
,
/* WTP Mac Type - Discovery Request */
{
.msg_id = CAPWAP_MSG_DISCOVERY_REQUEST,
.elem_id = CAPWAP_ELEM_WTP_MAC_TYPE,
.item_id = CW_ITEM_WTP_MAC_TYPE,
.out = cw_out_generic,
.get = cw_out_get_local,
.mand = 1
}
,
/* ---------------------------------------------------------------
* Join Request - Out
*/
/* Location Data - Join Request */
{
.msg_id = CAPWAP_MSG_JOIN_REQUEST,
.elem_id = CAPWAP_ELEM_LOCATION_DATA,
.item_id = CW_ITEM_LOCATION_DATA,
.out = cw_out_generic,
.get = cw_out_get_config,
.mand = 1
}
,
/* WTP Board Data - Join Request */
{
.msg_id = CAPWAP_MSG_JOIN_REQUEST,
.elem_id = CAPWAP_ELEM_WTP_BOARD_DATA,
.item_id = CW_ITEM_WTP_BOARD_DATA,
.out = cw_out_wtp_board_data,
.get = cw_out_get_config,
.mand = 1
}
,
/* WTP Descriptor - Join Request */
{
.msg_id = CAPWAP_MSG_JOIN_REQUEST,
.elem_id = CAPWAP_ELEM_WTP_DESCRIPTOR,
.item_id = CW_ITEM_WTP_DESCRIPTOR,
.out = cw_out_wtp_descriptor,
.mand = 1
}
,
/* WTP Name - Join Request */
{
.msg_id = CAPWAP_MSG_JOIN_REQUEST,
.elem_id = CAPWAP_ELEM_WTP_NAME,
.item_id = CW_ITEM_WTP_NAME,
.out = cw_out_generic,
.get = cw_out_get_config,
.mand = 1
}
,
/* Session ID - Join Request */
{
.msg_id = CAPWAP_MSG_JOIN_REQUEST,
.elem_id = CAPWAP_ELEM_SESSION_ID,
.item_id = CW_ITEM_SESSION_ID,
.out = cw_out_generic,
.get = cw_out_get_session_id,
.mand = 1
}
,
/* WTP Frame Tunnel Mode - Join Request */
{
.msg_id = CAPWAP_MSG_JOIN_REQUEST,
.elem_id = CAPWAP_ELEM_WTP_FRAME_TUNNEL_MODE,
.item_id = CW_ITEM_WTP_FRAME_TUNNEL_MODE,
.out = cw_out_generic,
.get = cw_out_get_local,
.mand = 1
}
,
/* WTP MAC Type - Join Request */
{
.msg_id = CAPWAP_MSG_JOIN_REQUEST,
.elem_id = CAPWAP_ELEM_WTP_MAC_TYPE,
.item_id = CW_ITEM_WTP_MAC_TYPE,
.out = cw_out_generic,
.get = cw_out_get_local,
.mand = 1
}
,
/* ECN Support - Join Request */
{
.msg_id = CAPWAP_MSG_JOIN_REQUEST,
.elem_id = CAPWAP_ELEM_ECN_SUPPORT,
.item_id = CW_ITEM_ECN_SUPPORT,
.out = cw_out_generic,
.get = cw_out_get_config,
.mand = 1
}
,
/* CAPWAP Local IP Address - Join Request */
{
.msg_id = CAPWAP_MSG_JOIN_REQUEST,
.item_id = CW_ITEM_CAPWAP_LOCAL_IP_ADDRESS,
.out = cw_out_capwap_local_ip_address,
.mand = 1
}
,
/* WTP Reboot Statistics - Join Request */
{
.msg_id = CAPWAP_MSG_JOIN_REQUEST,
.elem_id = CAPWAP_ELEM_WTP_REBOOT_STATISTICS,
.item_id = CW_ITEM_WTP_REBOOT_STATISTICS,
.out = cw_out_wtp_reboot_statistics,
.get = cw_out_get_config,
.mand = 0
}
,
/* ---------------------------------------------------------------
* Configuration Status Request - Out
*/
/* AC Name - Config Status Request - OUT */
{
.msg_id = CAPWAP_MSG_CONFIGURATION_STATUS_REQUEST,
.elem_id = CAPWAP_ELEM_AC_NAME,
.item_id = CW_ITEM_AC_NAME,
.out = cw_out_generic,
.get = cw_out_get_local,
.mand = 1
}
,
/* Radio Admin State - Config Status Request - OUT */
{
.msg_id = CAPWAP_MSG_CONFIGURATION_STATUS_REQUEST,
.elem_id = CAPWAP_ELEM_RADIO_ADMINISTRATIVE_STATE,
.item_id = CW_RADIOITEM_ADMIN_STATE,
.out = cw_out_radio_generic,
// .out = cw_out_radio_administrative_states,
// .get = cw_out_get_config,
.mand = 1
}
,
/* WTP Reboot Statistics - Config Status Request */
{
.msg_id = CAPWAP_MSG_CONFIGURATION_STATUS_REQUEST,
.elem_id = CAPWAP_ELEM_WTP_REBOOT_STATISTICS,
.item_id = CW_ITEM_WTP_REBOOT_STATISTICS,
.out = cw_out_wtp_reboot_statistics,
.get = cw_out_get_config,
.mand = 1
}
,
/* Statistics Timer - Join Request */
{
.msg_id = CAPWAP_MSG_CONFIGURATION_STATUS_REQUEST,
.elem_id = CAPWAP_ELEM_STATISTICS_TIMER,
.item_id = CW_ITEM_STATISTICS_TIMER,
.out = cw_out_generic,
.get = cw_out_get_config,
.mand = 1
}
,
/* ---------------------------------------------------------------
* Change State Event Request - Out
*/
/* Radio Operational State(s) - Change State Event */
{
.msg_id = CAPWAP_MSG_CHANGE_STATE_EVENT_REQUEST,
.elem_id = CAPWAP_ELEM_RADIO_OPERATIONAL_STATE,
.item_id = CW_RADIOITEM_OPER_STATE,
// .out = cw_out_radio_operational_state,
.out = cw_out_radio_generic,
.mand = 1
}
,
{
.msg_id = CAPWAP_MSG_CHANGE_STATE_EVENT_REQUEST,
.elem_id = CAPWAP_ELEM_RESULT_CODE,
.item_id = CW_ITEM_RESULT_CODE,
.out = cw_out_generic,
.get = cw_out_get_outgoing,
.mand = 1
}
,
/* ---------------------------------------------------------------
* Echo Request - Out
*/
/* Echo Request */
{
.msg_id = CAPWAP_MSG_ECHO_REQUEST,
}
,
/* ---------------------------------------------------------------
* Configuration Update REsponse - Out
*/
{
.msg_id = CAPWAP_MSG_CONFIGURATION_UPDATE_RESPONSE,
.mand = 1
}
,
/* Radio Ooerational State */
// {CW_MSG_CHANGE_STATE_EVENT_REQUEST, CW_ITEM_RADIO_OPER_STATE, 0,
// 0, NULL, cw_out_radio_operational_states, cw_out_get_config,1}
// ,
/* WTP Descriptor */
// {CW_MSG_JOIN_REQUEST, CW_ITEM_WTP_DESCRIPTOR, 0,
// CW_ELEM_WTP_DESCRIPTOR, NULL,cw_out_wtp_descriptor, NULL,1}
// ,
};
int capwap_register_actions_wtp(struct cw_actiondef *def)
{
def->in = cw_actionlist_in_create();
def->out = cw_actionlist_out_create();
def->strmsg = cw_strheap_create();
def->strelem = cw_strheap_create();
def->items = cw_itemdefheap_create();
def->radioitems = cw_itemdefheap_create();
int rc;
rc = cw_actionlist_in_register_actions(def->in, actions_in);
rc += cw_actionlist_out_register_actions(def->out, actions_out);
rc += cw_strheap_register_strings(def->strmsg, capwap_strings_msg);
rc += cw_strheap_register_strings(def->strelem, capwap_strings_elem);
rc += cw_itemdefheap_register(def->items,capwap_itemdefs);
rc += cw_itemdefheap_register(def->radioitems,capwap_radioitemdefs);
return rc;
}