diff --git a/actube.workspace b/actube.workspace
index e0162c79..b8870938 100644
--- a/actube.workspace
+++ b/actube.workspace
@@ -3,9 +3,9 @@
-
+
-
+
diff --git a/src/cw/capwap.h b/src/cw/capwap.h
index d6f06274..6362f521 100644
--- a/src/cw/capwap.h
+++ b/src/cw/capwap.h
@@ -246,7 +246,7 @@
#define CAPWAP_ELEM_MTU_DISCOVERY_PADDING 52
#define CW_ELEM_RADIO_ADMINISTRATIVE_STATE 31
#define CW_ELEM_RADIO_OPERATIONAL_STATE 32
-#define CW_ELEM_RESULT_CODE 33
+#define CAPWAP_ELEM_RESULT_CODE 33
#define CW_ELEM_RETURNED_MESSAGE_ELEMENT 34
#define CAPWAP_ELEM_SESSION_ID 35
#define CW_ELEM_STATISTICS_TIMER 36
diff --git a/src/cw/capwap_strings_elem.c b/src/cw/capwap_strings_elem.c
index e968a086..32f56e1d 100644
--- a/src/cw/capwap_strings_elem.c
+++ b/src/cw/capwap_strings_elem.c
@@ -40,7 +40,7 @@ struct cw_StrListElem capwap_strings_elem[] = {
{CAPWAP_ELEM_MTU_DISCOVERY_PADDING, "MTU Discovery Padding"},
{CW_ELEM_RADIO_ADMINISTRATIVE_STATE, "Radio Administrative State"},
{CW_ELEM_RADIO_OPERATIONAL_STATE, "Radio Operational State"},
- {CW_ELEM_RESULT_CODE, "Result Code"},
+ {CAPWAP_ELEM_RESULT_CODE, "Result Code"},
{CW_ELEM_RETURNED_MESSAGE_ELEMENT, "Returned Message Element"},
{CAPWAP_ELEM_SESSION_ID, "Session ID"},
{CW_ELEM_STATISTICS_TIMER, "Statistics Timer"},
diff --git a/src/cw/conn_process_packet.c b/src/cw/conn_process_packet.c
index fc04f13c..7401e552 100644
--- a/src/cw/conn_process_packet.c
+++ b/src/cw/conn_process_packet.c
@@ -476,7 +476,7 @@ static int process_elements(struct conn *conn, uint8_t * rawmsg, int len,
cw_send_error_response(conn, rawmsg, result_code);
} else if (result_code == 0) {
- /*cw_ktv_add_word(conn->local_cfg,"result_code")*/
+ cw_ktv_set_dword(conn->local_cfg,"result-code",result_code);
/* All is ok, send regular response message */
cw_send_response(conn, rawmsg, len);
diff --git a/src/cw/cw_inline.c b/src/cw/cw_inline.c
index 8cd41d72..8696c5d8 100644
--- a/src/cw/cw_inline.c
+++ b/src/cw/cw_inline.c
@@ -167,7 +167,7 @@ int cw_addelem_bstr(uint8_t * dst, uint16_t type, const bstr_t bstr)
int cw_put_elem_result_code(uint8_t * dst, uint32_t code)
{
cw_set_dword(dst + 4, code);
- return 4 + cw_put_elem_hdr(dst, CW_ELEM_RESULT_CODE, 4);
+ return 4 + cw_put_elem_hdr(dst, CAPWAP_ELEM_RESULT_CODE, 4);
}
diff --git a/src/mod/capwap/capwap_actions_ac.c b/src/mod/capwap/capwap_actions_ac.c
index 0827fe33..87ea2dda 100644
--- a/src/mod/capwap/capwap_actions_ac.c
+++ b/src/mod/capwap/capwap_actions_ac.c
@@ -191,6 +191,29 @@ static struct cw_ElemHandler handlers[] = {
}
,
+ {
+ "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 */
+ }
+ ,
{0,0,0,0,0,0,0,0}
@@ -243,7 +266,20 @@ static struct cw_ElemDef join_request_elements[] ={
{0,0,0,0,0}
};
+static int join_response_states[] = {CAPWAP_STATE_JOIN,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_AC_DESCRIPTOR, 1, 0},
+ {0,0,CAPWAP_ELEM_AC_NAME, 1, 0},
+ {0,0,CW_ELEM_CAPWAP_CONTROL_IPV4_ADDRESS, 1, 0},
+ {0,0,CW_ELEM_CAPWAP_CONTROL_IPV6_ADDRESS, 1, 0},
+ {0,0,CAPWAP_ELEM_VENDOR_SPECIFIC_PAYLOAD, 0, CW_IGNORE},*/
+ {0,0,0,0,0}
+};
static struct cw_MsgDef messages[] = {
{
@@ -270,6 +306,15 @@ static struct cw_MsgDef messages[] = {
join_request_elements
},
+ {
+ "Join Response",
+ CAPWAP_MSG_JOIN_RESPONSE,
+ CW_ROLE_WTP,
+ join_response_states,
+ join_response_elements
+ },
+
+
/* {
diff --git a/src/mod/capwap/capwap_actions_wtp.c b/src/mod/capwap/capwap_actions_wtp.c
index 714a1313..5dac6bf8 100644
--- a/src/mod/capwap/capwap_actions_wtp.c
+++ b/src/mod/capwap/capwap_actions_wtp.c
@@ -87,7 +87,7 @@ static cw_action_in_t actions_in[] = {
*/
.capwap_state = CAPWAP_STATE_DISCOVERY,
.msg_id = CAPWAP_MSG_DISCOVERY_RESPONSE,
- .elem_id = CW_ELEM_RESULT_CODE,
+ .elem_id = CAPWAP_ELEM_RESULT_CODE,
.item_id = CW_ITEM_RESULT_CODE,
.start = cw_in_generic2,
.min_len = 4,
@@ -111,7 +111,7 @@ static cw_action_in_t actions_in[] = {
{
.capwap_state = CAPWAP_STATE_JOIN,
.msg_id = CAPWAP_MSG_JOIN_RESPONSE,
- .elem_id = CW_ELEM_RESULT_CODE,
+ .elem_id = CAPWAP_ELEM_RESULT_CODE,
.item_id = CW_ITEM_RESULT_CODE,
.start = cw_in_generic2,
.min_len = 4,
@@ -271,7 +271,7 @@ static cw_action_in_t actions_in[] = {
{
.capwap_state = CW_STATE_CONFIGURE,
.msg_id = CAPWAP_MSG_CONFIGURATION_STATUS_RESPONSE,
- .elem_id = CW_ELEM_RESULT_CODE,
+ .elem_id = CAPWAP_ELEM_RESULT_CODE,
.item_id = CW_ITEM_RESULT_CODE,
.start = cw_in_generic2,
.min_len = 4,
@@ -321,7 +321,7 @@ static cw_action_in_t actions_in[] = {
{
.capwap_state = CW_STATE_CONFIGURE,
.msg_id = CAPWAP_MSG_CHANGE_STATE_EVENT_RESPONSE,
- .elem_id = CW_ELEM_RESULT_CODE,
+ .elem_id = CAPWAP_ELEM_RESULT_CODE,
.item_id = CW_ITEM_RESULT_CODE,
.start = cw_in_generic2,
.min_len = 4,
@@ -344,7 +344,7 @@ static cw_action_in_t actions_in[] = {
{
.capwap_state = CW_STATE_RUN,
.msg_id = CAPWAP_MSG_CHANGE_STATE_EVENT_RESPONSE,
- .elem_id = CW_ELEM_RESULT_CODE,
+ .elem_id = CAPWAP_ELEM_RESULT_CODE,
.item_id = CW_ITEM_RESULT_CODE,
.start = cw_in_generic2,
.min_len = 4,
@@ -695,7 +695,7 @@ static cw_action_out_t actions_out[] = {
{
.msg_id = CAPWAP_MSG_CHANGE_STATE_EVENT_REQUEST,
- .elem_id = CW_ELEM_RESULT_CODE,
+ .elem_id = CAPWAP_ELEM_RESULT_CODE,
.item_id = CW_ITEM_RESULT_CODE,
.out = cw_out_generic,
.get = cw_out_get_outgoing,