2018-03-26 14:33:51 +02:00
|
|
|
|
|
|
|
#include "cw/capwap.h"
|
|
|
|
#include "cw/cw.h"
|
|
|
|
#include "cw/dbg.h"
|
2018-04-17 07:46:09 +02:00
|
|
|
#include "cw/dot11.h"
|
2018-03-26 14:33:51 +02:00
|
|
|
#include "cw/capwap80211.h"
|
|
|
|
|
|
|
|
|
|
|
|
#include "cw/msgset.h"
|
|
|
|
|
|
|
|
#include "mod_capwap80211.h"
|
|
|
|
|
2018-05-05 00:36:19 +02:00
|
|
|
/*static int capwap80211_in_crate_set(struct cw_ElemHandler *eh,
|
2018-04-17 07:46:09 +02:00
|
|
|
struct cw_ElemHandlerParams *params,
|
|
|
|
uint8_t * data, int len);
|
2018-05-05 00:36:19 +02:00
|
|
|
*/
|
2018-03-26 14:33:51 +02:00
|
|
|
|
2022-08-25 21:10:48 +02:00
|
|
|
|
|
|
|
char x[] = {'a','b'};
|
|
|
|
|
|
|
|
static cw_ValStruct_t capwap80211_antenna_stru[]={
|
|
|
|
{CW_TYPE_BOOL,"diversity",1,-1},
|
|
|
|
{CW_TYPE_BYTE,"combiner",1,-1},
|
|
|
|
{CW_TYPE_BYTE,"antenna-count",1,-1},
|
|
|
|
{NULL,"xxx",1,-1,x},
|
|
|
|
// {NULL,"xxx",1,-1,"a",}
|
|
|
|
{NULL,NULL,0,0}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2022-08-28 09:06:15 +02:00
|
|
|
static cw_ValStruct_t capwap80211_wtp_radio_cfg_stru[]={
|
|
|
|
{CW_TYPE_BYTE,"short-preamble",1,-1},
|
|
|
|
{CW_TYPE_BYTE,"num-of-bssids",1,-1},
|
|
|
|
{CW_TYPE_BYTE,"dtim-period",1,-1},
|
|
|
|
{CW_TYPE_BSTR16,"bssid",6,-1},
|
|
|
|
{CW_TYPE_WORD,"beacon-period",2,-1},
|
|
|
|
{CW_TYPE_STR,"country-string",2,-1,},
|
|
|
|
{CW_TYPE_BSTR16,"country-string-attr",1,-1,},
|
|
|
|
{CW_TYPE_BYTE,"country-string-reserved",1,-1,},
|
|
|
|
{NULL,NULL,0,0}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-03-26 14:33:51 +02:00
|
|
|
static struct cw_ElemHandler handlers[] = {
|
2018-03-26 20:50:18 +02:00
|
|
|
{
|
2022-08-25 21:10:48 +02:00
|
|
|
"IEEE 802.11 WTP Radio Information", /* name */
|
2018-03-27 07:07:14 +02:00
|
|
|
CAPWAP80211_ELEM_WTP_RADIO_INFORMATION, /* Element ID */
|
|
|
|
0, 0, /* Vendor / Proto */
|
|
|
|
0, 0, /* min/max length */
|
2018-03-28 09:36:15 +02:00
|
|
|
CW_TYPE_DWORD, /* type */
|
2022-08-25 21:10:48 +02:00
|
|
|
"capwap80211/wtp-radio-information", /* Key */
|
2018-03-27 18:38:24 +02:00
|
|
|
cw_in_radio_generic, /* get */
|
2018-03-27 07:07:14 +02:00
|
|
|
cw_out_radio_generic /* put */
|
|
|
|
}
|
|
|
|
,
|
2018-04-17 07:46:09 +02:00
|
|
|
{
|
|
|
|
"IEEE 802.11 Rate Set", /* name */
|
|
|
|
CAPWAP80211_ELEM_RATE_SET, /* Element ID */
|
|
|
|
0, 0, /* Vendor / Proto */
|
|
|
|
3, 0, /* min/max length */
|
2018-04-18 09:40:37 +02:00
|
|
|
CW_TYPE_BSTR16, /* type */
|
2022-08-25 21:10:48 +02:00
|
|
|
"capwap80211/rate-set", /* Key */
|
2018-05-05 00:36:19 +02:00
|
|
|
cw_in_radio_generic, /* get */
|
|
|
|
cw_out_radio_generic /* put */
|
2018-04-17 07:46:09 +02:00
|
|
|
}
|
|
|
|
,
|
2022-08-25 21:10:48 +02:00
|
|
|
{
|
|
|
|
"IEEE 802.11 Antenna", /* name */
|
|
|
|
CAPWAP80211_ELEM_ANTENNA, /* Element ID */
|
|
|
|
0, 0, /* Vendor / Proto */
|
|
|
|
3, 0, /* min/max length */
|
|
|
|
CW_TYPE_STRUCT, /* type */
|
|
|
|
"capwap80211/antenna", /* Key */
|
|
|
|
cw_in_radio_generic, /* get */
|
|
|
|
cw_out_radio_generic, /* put */
|
|
|
|
NULL,
|
|
|
|
NULL,
|
|
|
|
capwap80211_antenna_stru
|
|
|
|
|
|
|
|
}
|
|
|
|
,
|
2022-08-28 09:06:15 +02:00
|
|
|
|
|
|
|
{
|
|
|
|
"IEEE 802.11 WTP Radio Configuration", /* name */
|
|
|
|
CAPWAP80211_ELEM_WTP_RADIO_CONFIGURATION, /* Element ID */
|
|
|
|
0, 0, /* Vendor / Proto */
|
|
|
|
16, 16, /* min/max length */
|
|
|
|
CW_TYPE_STRUCT, /* type */
|
|
|
|
"capwap80211/wtp-radio-config", /* Key */
|
|
|
|
cw_in_radio_generic, /* get */
|
|
|
|
cw_out_radio_generic, /* put */
|
|
|
|
NULL,
|
|
|
|
NULL,
|
|
|
|
capwap80211_wtp_radio_cfg_stru
|
|
|
|
|
|
|
|
},
|
|
|
|
|
2018-03-26 20:50:18 +02:00
|
|
|
{NULL, 0, 0, 0, 0, 0, NULL, NULL, NULL, NULL}
|
|
|
|
|
2018-03-26 14:33:51 +02:00
|
|
|
};
|
|
|
|
|
2018-03-26 20:50:18 +02:00
|
|
|
static struct cw_ElemDef discovery_request_elements[] = {
|
|
|
|
{0, 0, CAPWAP80211_ELEM_WTP_RADIO_INFORMATION, 1, 0},
|
|
|
|
{0, 0, 0, 0, 0}
|
2018-03-26 14:33:51 +02:00
|
|
|
|
|
|
|
};
|
|
|
|
|
2022-08-26 06:46:18 +02:00
|
|
|
static struct cw_ElemDef discovery_response_elements[] = {
|
|
|
|
{0, 0, CAPWAP80211_ELEM_WTP_RADIO_INFORMATION, 1, 0},
|
|
|
|
{0, 0, 0, 0, 0}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
2018-04-07 19:28:22 +02:00
|
|
|
|
|
|
|
static struct cw_ElemDef join_request_elements[] = {
|
|
|
|
{0, 0, CAPWAP80211_ELEM_WTP_RADIO_INFORMATION, 1, 0},
|
|
|
|
{0, 0, 0, 0, 0}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
2018-04-07 21:47:35 +02:00
|
|
|
static struct cw_ElemDef join_response_elements[] = {
|
2022-08-26 06:46:18 +02:00
|
|
|
{0, 0, CAPWAP80211_ELEM_WTP_RADIO_INFORMATION, 1, 0},
|
2018-04-07 21:47:35 +02:00
|
|
|
{0, 0, 0, 0, 0}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
2018-04-17 07:46:09 +02:00
|
|
|
static struct cw_ElemDef configuration_status_response_elements[] = {
|
|
|
|
{0, 0, CAPWAP80211_ELEM_RATE_SET , 1, 0},
|
|
|
|
{0, 0, 0, 0, 0}
|
2018-04-07 19:28:22 +02:00
|
|
|
|
2018-04-17 07:46:09 +02:00
|
|
|
};
|
2018-03-26 14:33:51 +02:00
|
|
|
static struct cw_MsgDef messages[] = {
|
|
|
|
{
|
2018-04-17 07:46:09 +02:00
|
|
|
NULL,
|
|
|
|
CAPWAP_MSG_DISCOVERY_REQUEST,
|
|
|
|
CW_ROLE_AC,
|
2018-05-05 00:36:19 +02:00
|
|
|
NULL, /* states */
|
2018-04-17 07:46:09 +02:00
|
|
|
discovery_request_elements
|
2022-08-26 06:46:18 +02:00
|
|
|
}
|
|
|
|
,
|
|
|
|
{
|
|
|
|
NULL,
|
|
|
|
CAPWAP_MSG_DISCOVERY_RESPONSE,
|
|
|
|
CW_ROLE_WTP,
|
|
|
|
NULL, /* states */
|
|
|
|
discovery_response_elements
|
2018-03-27 07:07:14 +02:00
|
|
|
}
|
|
|
|
,
|
2018-04-07 19:28:22 +02:00
|
|
|
{
|
2018-05-05 00:36:19 +02:00
|
|
|
NULL, /* name */
|
|
|
|
CAPWAP_MSG_JOIN_REQUEST, /* type */
|
|
|
|
CW_ROLE_AC, /* role */
|
|
|
|
NULL, /* states */
|
|
|
|
join_request_elements /* elements */
|
2018-04-07 19:28:22 +02:00
|
|
|
}
|
|
|
|
,
|
2018-04-07 21:47:35 +02:00
|
|
|
{
|
2018-04-17 07:46:09 +02:00
|
|
|
NULL,
|
|
|
|
CAPWAP_MSG_JOIN_RESPONSE,
|
|
|
|
CW_ROLE_AC,
|
2018-05-05 00:36:19 +02:00
|
|
|
NULL,
|
2018-04-17 07:46:09 +02:00
|
|
|
join_response_elements
|
|
|
|
}
|
|
|
|
,
|
|
|
|
{
|
|
|
|
NULL,
|
|
|
|
CAPWAP_MSG_CONFIGURATION_STATUS_RESPONSE,
|
|
|
|
CW_ROLE_WTP,
|
2018-05-05 00:36:19 +02:00
|
|
|
NULL,
|
2018-04-17 07:46:09 +02:00
|
|
|
configuration_status_response_elements
|
2018-04-07 21:47:35 +02:00
|
|
|
}
|
|
|
|
,
|
2018-03-26 20:50:18 +02:00
|
|
|
{0, 0, 0, 0, 0}
|
2018-03-26 14:33:51 +02:00
|
|
|
};
|
|
|
|
|
2018-03-26 20:50:18 +02:00
|
|
|
struct cw_MsgSet *capwap80211_register_msgset(set, mode)
|
|
|
|
struct cw_MsgSet *set;
|
|
|
|
int mode;
|
2018-03-26 14:33:51 +02:00
|
|
|
{
|
|
|
|
if (mode != CW_MOD_MODE_BINDINGS)
|
|
|
|
return NULL;
|
2018-03-26 20:50:18 +02:00
|
|
|
|
|
|
|
cw_dbg(DBG_INFO, "CAPWAP80211: Register messages");
|
|
|
|
cw_msgset_add(set, messages, handlers);
|
|
|
|
cw_dbg(DBG_INFO, "CAPWAP0211: Done register messages");
|
|
|
|
|
2018-03-26 14:33:51 +02:00
|
|
|
return set;
|
|
|
|
}
|
2018-04-17 07:46:09 +02:00
|
|
|
|
|
|
|
|
2018-05-05 00:36:19 +02:00
|
|
|
/*
|
2018-04-17 07:46:09 +02:00
|
|
|
static int capwap80211_in_crate_set(struct cw_ElemHandler *eh,
|
|
|
|
struct cw_ElemHandlerParams *params,
|
|
|
|
uint8_t * data, int len)
|
|
|
|
{
|
2018-05-05 00:36:19 +02:00
|
|
|
int radio;
|
2018-04-17 07:46:09 +02:00
|
|
|
int i;
|
|
|
|
radio = cw_get_byte(data);
|
|
|
|
for (i=0; i<len-1; i++){
|
|
|
|
int rate = (data+1)[i];
|
2018-04-17 07:47:11 +02:00
|
|
|
sprintf(d,"%0.1f",dot11_rate2float(val & 0x7f));
|
2018-04-17 07:46:09 +02:00
|
|
|
}
|
2018-05-05 00:36:19 +02:00
|
|
|
|
2018-04-17 07:46:09 +02:00
|
|
|
|
|
|
|
}
|
2018-05-05 00:36:19 +02:00
|
|
|
*/
|