diff --git a/src/mod/cisco/Makefile b/src/mod/cisco/Makefile
index 1c4788ba..59e0db76 100644
--- a/src/mod/cisco/Makefile
+++ b/src/mod/cisco/Makefile
@@ -8,7 +8,12 @@ OBJS=\
cisco_in_wtp_descriptor.o \
cisco_out_wtp_descriptor.o \
cisco_in_ac_descriptor.o\
+ cisco_out_ac_descriptor.o\
cisco_out_radio_generic.o\
+ cisco_out_ap_timesync.o\
+ cisco_in_spam_vendor_specific.o\
+ cisco_out_lw_path_mtu.o\
+ cisco_out_capwap_local_ip_address.o
# cisco80211.o \
diff --git a/src/mod/cisco/capwap_cisco.h b/src/mod/cisco/capwap_cisco.h
index c5e42485..e29f2eaa 100644
--- a/src/mod/cisco/capwap_cisco.h
+++ b/src/mod/cisco/capwap_cisco.h
@@ -73,7 +73,7 @@
#define CW_CISCO_AC_NAME_WITH_INDEX 91
#define CW_CISCO_SPAM_DOMAIN_SECRET 96
-#define CW_CISCO_SPAM_VENDOR_SPECIFIC 104
+#define CISCO_ELEM_SPAM_VENDOR_SPECIFIC 104
#define CW_CISCO_AP_UPTIME 108
diff --git a/src/mod/cisco/cisco_actions_ac.c b/src/mod/cisco/cisco_actions_ac.c
index 84b81efa..175aea28 100644
--- a/src/mod/cisco/cisco_actions_ac.c
+++ b/src/mod/cisco/cisco_actions_ac.c
@@ -22,6 +22,8 @@
#include "cw/msgset.h"
#include "cw/ktv.h"
#include "cw/keys.h"
+#include "cw/proto.h"
+#include "lwapp_cisco.h"
#include "capwap_cisco.h"
#include "mod_cisco.h"
@@ -49,6 +51,19 @@ static cw_KTVStruct_t ap_time_sync[] = {
{NULL,NULL,0,0}
};
+static cw_KTVStruct_t mwar_addr[] = {
+ {CW_TYPE_BYTE, "mwar-type", 1,-1},
+ {CW_TYPE_IPADDRESS, "address", 4,-1},
+ {CW_TYPE_WORD, "unknown", 2,-1},
+ {NULL,NULL,0,0}
+};
+
+static cw_KTVStruct_t cisco_lw_path_mtu[] = {
+ {CW_TYPE_WORD, "max", 2,-1},
+ {CW_TYPE_WORD, "len", 2,-1},
+};
+
+
static struct cw_ElemHandler handlers[] = {
{
"WTP Descriptor (Draft 7)", /* name */
@@ -69,7 +84,7 @@ static struct cw_ElemHandler handlers[] = {
NULL, /* type */
"ac-descriptor", /* Key */
cisco_in_ac_descriptor, /* get */
- NULL, /*cisco_out_ac_descriptor */ /* put */
+ cisco_out_ac_descriptor /* put */
}
,
{
@@ -102,7 +117,7 @@ static struct cw_ElemHandler handlers[] = {
ap_time_sync, /* type */
"cisco/ap-timesync", /* Key */
cw_in_generic_struct, /* handler */
- NULL /* put */
+ cisco_out_ap_timesync /* put */
}
,
@@ -128,6 +143,86 @@ static struct cw_ElemHandler handlers[] = {
cisco_out_radio_generic /* put */
}
,
+ {
+ "Session ID (Cisco min len = 4)", /* name */
+ CAPWAP_ELEM_SESSION_ID, /* Element ID */
+ 0,0, /* Vendor / Proto */
+ 4,CAPWAP_SESSION_ID_LEN, /* min/max length */
+ CW_TYPE_BSTR16, /* type */
+ "session-id", /* Key */
+ cw_in_generic, /* get */
+ cw_out_generic /* put */
+ }
+ ,
+
+ {
+ "AP Group Name", /* name */
+ CISCO_ELEM_AP_GROUP_NAME, /* Element ID */
+ CW_VENDOR_ID_CISCO,0, /* Vendor / Proto */
+ 1,512, /* min/max length */
+ CW_TYPE_BSTR16, /* type */
+ "cisco/ap-group-name", /* Key */
+ cw_in_generic, /* get */
+ cw_out_generic /* put */
+ }
+ ,
+
+ {
+ "MWAR Addr", /* name */
+ CISCO_ELEM_MWAR_ADDR, /* Element ID */
+ CW_VENDOR_ID_CISCO,0, /* Vendor / Proto */
+ 7,7, /* min/max length */
+ mwar_addr, /* type */
+ "cisco/mwar-addr", /* Key */
+ cw_in_generic_struct, /* get */
+ cw_out_generic_struct /* put */
+ }
+ ,
+ {
+ "WTP IPv4 Address (Draft 7)", /* name */
+ CAPWAP_ELEM_WTP_IPV4_IP_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 */
+ cisco_out_capwap_local_ip_address /* put */
+ }
+ ,
+
+ {
+ "WTP IPv6 Address (Draft 7)", /* name */
+ CAPWAP_ELEM_WTP_IPV6_IP_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 */
+ cisco_out_capwap_local_ip_address /* put */
+ }
+ ,
+ {
+ "SPAM Vendor Specific", /* name */
+ CISCO_ELEM_SPAM_VENDOR_SPECIFIC, /* Element ID */
+ CW_VENDOR_ID_CISCO,0, /* Vendor / Proto */
+ 0,0, /* min/max length */
+ NULL, /* type */
+ "cisco_spam_vendor_specific", /* Key */
+ cisco_in_spam_vendor_specific, /* get */
+ NULL /* put */
+ }
+ ,
+ {
+ "Path MTU", /* name */
+ CISCO_LWELEM_PATH_MTU, /* Element ID */
+ CW_VENDOR_ID_CISCO,CW_PROTO_LWAPP, /* Vendor / Proto */
+ 0,0, /* min/max length */
+ cisco_lw_path_mtu, /* type */
+ "cisco/lw_path_mtu", /* Key */
+ cw_in_generic_struct, /* get */
+ cisco_out_lw_path_mtu /* put */
+ }
+ ,
{0,0,0,0,0,0,0,0}
};
@@ -152,6 +247,28 @@ static struct cw_ElemDef discovery_response_elements[] ={
};
+static int join_request_states[] = {CAPWAP_STATE_JOIN,0};
+static struct cw_ElemDef join_request_elements[] ={
+ {0,CW_VENDOR_ID_CISCO, CW_CISCO_BOARD_DATA_OPTIONS, 1, 0},
+ {0,CW_VENDOR_ID_CISCO, CISCO_ELEM_AP_GROUP_NAME, 1, 0},
+ {0,CW_VENDOR_ID_CISCO, CISCO_ELEM_MWAR_ADDR, 1, 0},
+ {0,CW_VENDOR_ID_CISCO, CISCO_ELEM_SPAM_VENDOR_SPECIFIC,1, CW_IGNORE},
+ {CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO, CISCO_LWELEM_PATH_MTU, 0, 0},
+
+
+ {0,0, CAPWAP_ELEM_WTP_IPV4_IP_ADDRESS,1,0},
+ {0,0, CAPWAP_ELEM_WTP_IPV6_IP_ADDRESS,1,0},
+
+ {0,0,CAPWAP_ELEM_CAPWAP_LOCAL_IPV4_ADDRESS, 0, CW_DELETE},
+ {0,0,CAPWAP_ELEM_CAPWAP_LOCAL_IPV6_ADDRESS, 0, CW_DELETE},
+ {0,0, CAPWAP_ELEM_ECN_SUPPORT, 0, CW_DELETE},
+
+
+ {0,0,0,00}
+
+};
+
+
static struct cw_MsgDef messages[] = {
{
@@ -168,6 +285,13 @@ static struct cw_MsgDef messages[] = {
discovery_response_states,
discovery_response_elements
},
+ {
+ NULL, /* name */
+ CAPWAP_MSG_JOIN_REQUEST, /* type */
+ CW_ROLE_AC,
+ join_request_states,
+ join_request_elements
+ },
{0,0,0,0}
};
diff --git a/src/mod/cisco/cisco_actions_wtp.c b/src/mod/cisco/cisco_actions_wtp.c
index 65382cd0..e6a525e6 100644
--- a/src/mod/cisco/cisco_actions_wtp.c
+++ b/src/mod/cisco/cisco_actions_wtp.c
@@ -129,7 +129,7 @@ static cw_action_in_t actions_in[] = {
.capwap_state = CW_STATE_RUN,
.vendor_id = CW_VENDOR_ID_CISCO,
.msg_id = CAPWAP_MSG_CONFIGURATION_UPDATE_REQUEST,
- .elem_id = CW_CISCO_AP_GROUP_NAME,
+ .elem_id = CISCO_ELEM_AP_GROUP_NAME,
.item_id = CIPWAP_ITEM_WTP_GROUP_NAME,
.start = cw_in_generic,
.min_len = 0,
@@ -222,7 +222,7 @@ static cw_action_in_t actions_in[] = {
.capwap_state = CW_STATE_CONFIGURE,
.msg_id = CAPWAP_MSG_CONFIGURATION_STATUS_RESPONSE,
.vendor_id = CW_VENDOR_ID_CISCO,
- .elem_id = CW_CISCO_SPAM_VENDOR_SPECIFIC,
+ .elem_id = CISCO_ELEM_SPAM_VENDOR_SPECIFIC,
.start = lw_in_vendor_specific,
}
@@ -232,7 +232,7 @@ static cw_action_in_t actions_in[] = {
.capwap_state = CW_STATE_RUN,
.msg_id = CAPWAP_MSG_CONFIGURATION_UPDATE_REQUEST,
.vendor_id = CW_VENDOR_ID_CISCO,
- .elem_id = CW_CISCO_SPAM_VENDOR_SPECIFIC,
+ .elem_id = CISCO_ELEM_SPAM_VENDOR_SPECIFIC,
.start = lw_in_vendor_specific,
}
,
@@ -317,7 +317,7 @@ static cw_action_out_t actions_out[]={
{
.msg_id = CAPWAP_MSG_JOIN_REQUEST,
.vendor_id = CW_VENDOR_ID_CISCO,
- .elem_id = CW_CISCO_AP_GROUP_NAME,
+ .elem_id = CISCO_ELEM_AP_GROUP_NAME,
.item_id = CIPWAP_ITEM_WTP_GROUP_NAME,
.out = cw_out_generic,
/*.get = cw_out_get_config,*/
diff --git a/src/mod/cisco/cisco_in_lw_path_mtu.c b/src/mod/cisco/cisco_in_lw_path_mtu.c
deleted file mode 100644
index e69de29b..00000000
diff --git a/src/mod/cisco/cisco_in_spam_vendor_specific.c b/src/mod/cisco/cisco_in_spam_vendor_specific.c
index 5102cecd..d9e8c666 100644
--- a/src/mod/cisco/cisco_in_spam_vendor_specific.c
+++ b/src/mod/cisco/cisco_in_spam_vendor_specific.c
@@ -1,13 +1,29 @@
-#include "cw/action.h"
#include "cw/lw.h"
#include "cw/dbg.h"
+#include "cw/proto.h"
-int cisco_in_spam_vendor_specific(struct conn *conn, struct cw_action_in *a, uint8_t * data, int len,
- struct sockaddr *from)
+int cisco_in_spam_vendor_specific(struct cw_ElemHandler *eh,
+ struct cw_ElemHandlerParams *params,
+ uint8_t * data, int len)
{
+ struct cw_ElemHandler *vhandler;
+ uint32_t vendor_id, elem_id;
+
+ vendor_id = cw_get_dword(data);
+ elem_id = cw_get_word(data + 4);
- return lw_in_vendor_specific(conn,a,data+6,len-6,from);
- cw_dbg(DBG_X,"Cwin vendor spam");
- return 0;
+ vhandler = cw_msgset_get_elemhandler(params->conn->msgset,CW_PROTO_LWAPP,vendor_id,elem_id);
+
+
+ if (!vhandler) {
+ cw_dbg(DBG_WARN,
+ "Can't handle Vendor Specific LWAPP Payload %s/%d, in msg %d (%s) in %s state.",
+ cw_strvendor(vendor_id), elem_id, params->msgdata->type,
+ params->msgdata->name, cw_strstate(params->conn->capwap_state));
+ return 0;
+
+ }
+
+ return cw_process_element(params,CW_PROTO_LWAPP,vendor_id,elem_id,data+6,len-6);
}
diff --git a/src/mod/cisco/cisco_out_ac_descriptor.c b/src/mod/cisco/cisco_out_ac_descriptor.c
index f6e14b4d..ca6182a8 100644
--- a/src/mod/cisco/cisco_out_ac_descriptor.c
+++ b/src/mod/cisco/cisco_out_ac_descriptor.c
@@ -1,73 +1,86 @@
-/*
- This file is part of actube.
-
- actube 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.
-
- actube 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 .
-
-*/
#include "cw/log.h"
+#include "cw/dbg.h"
#include "cw/conn.h"
+#include "cw/capwap.h"
#include "cw/cw.h"
+#include "cw/ktv.h"
+#include "cw/keys.h"
-extern mbag_t cisco_config;
-int cisco_out_ac_descriptor(struct conn *conn,struct cw_action_out * a,uint8_t *dst)
-{
- uint8_t *d = dst+4;
- struct mbag_item * i;
- i = mbag_get(conn->local,CW_ITEM_AC_STATUS);
+static int put_ac_status(mavl_t global, mavl_t local, uint8_t *dst, const char * parent_key){
+
+ uint8_t *d = dst;
+ uint8_t security;
+
+ char key[CW_KTV_MAX_KEY_LEN];
- if (!i) {
- cw_log(LOG_ERR,"Can't send AC Descriptor, no AC Status Item found");
- return 0;
- }
- d+=cw_put_ac_status(d ,(struct cw_ac_status*)(i->u2.data),conn);
-
-
- i = mbag_get(cisco_config,CW_ITEM_AC_SOFTWARE_VERSION);
-
- if (!i){
- /* Send back the same software version as the WTP has,
- otherwise the AP wants us to send an image */
- i = mbag_get(conn->incomming,CW_ITEM_WTP_SOFTWARE_VERSION);
- }
+ d += cw_put_word(d,cw_ktv_get_word(global,"ac-descriptor/stations",0));
+ d += cw_put_word(d,cw_ktv_get_word(global,"ac-descriptor/station-limit",0));
+ d += cw_put_word(d,cw_ktv_get_word(global,"ac-descriptor/active-wtps",0));
+ d += cw_put_word(d,cw_ktv_get_word(global,"ac-descriptor/max-wtps",0));
+
+ d += cw_put_byte(d,cw_ktv_get_byte(global,"ac-descriptor/security",0));
/*
- if ( i ) {
- d += cw_put_version(d,1,i->u2.data);
- }
- else {
- cw_log(LOG_ERR, "Can't set Cisco Software Version in AC descriptor, No value defined.");
- }
+ security = 0;
+ if (cw_ktv_get(local,"dtls-cert-file",CW_TYPE_BSTR16))
+ security |= CAPWAP_FLAG_AC_SECURITY_X;
+
+ if (cw_ktv_get(local,"dtls-psk",CW_TYPE_BSTR16))
+ security |= CAPWAP_FLAG_AC_SECURITY_S;
- i = mbag_get(cisco_config, CW_ITEM_AC_HARDWARE_VERSION);
- if ( i ) {
- d += cw_put_version(d,0,i->u2.data);
+ if (security == 0){
+ cw_log(LOG_WARNING,"No AC security selected");
}
- else {
- cw_log(LOG_ERR, "Can't set Cisco Hardware Version in AC descriptor, No value defined.");
- }
-*/
-
- int len = d-dst-4;
+ d += cw_put_byte(dst,security);
+*/
+ sprintf(key,"%s/%s",parent_key,"ac-descriptor/r-mac-field");
+ d += cw_put_byte(d,cw_ktv_get_byte(global,"ac-descriptor/r-mac-field",0));
+ /*d += cw_put_byte(d,3);*/
- return len + cw_put_elem_hdr(dst,a->elem_id,len);
+ d += cw_put_byte(d,0);
+
+
+ sprintf(key,"%s/%s",parent_key,CW_SKEY_DTLS_POLICY);
+ d += cw_put_byte(d,cw_ktv_get_byte(local,key,0));
+
+ return d - dst;
}
+int cisco_out_ac_descriptor(struct cw_ElemHandler * eh,
+ struct cw_ElemHandlerParams * params, uint8_t * dst)
+{
+ int len,l;
+ uint8_t *d = dst+4;
+ char key[CW_KTV_MAX_KEY_LEN];
+ d+=put_ac_status(params->conn->local_cfg,
+ params->conn->global_cfg,
+ d, eh->key);
+
+ /* it is important to send software version first,
+ * because APs don't check the type */
+ sprintf(key,"%s/%s",eh->key,CW_SKEY_SOFTWARE);
+ d+=cw_write_descriptor_subelem (d, params->conn->local_cfg,
+ 1, key);
+
+ sprintf(key,"%s/%s",eh->key,CW_SKEY_HARDWARE);
+ d+=cw_write_descriptor_subelem (d, params->conn->local_cfg,
+ 0, key);
+
+
+
+ len = d-dst-4;
+
+ l = len + cw_put_elem_hdr(dst,eh->id,len);
+ cw_dbg_elem(DBG_ELEM_OUT,params->conn,params->msgdata->type,eh,dst,l);
+
+ return l;
+
+}
diff --git a/src/mod/cisco/cisco_out_ap_timesync.c b/src/mod/cisco/cisco_out_ap_timesync.c
index 3ee4bd53..61df3e20 100644
--- a/src/mod/cisco/cisco_out_ap_timesync.c
+++ b/src/mod/cisco/cisco_out_ap_timesync.c
@@ -1,12 +1,20 @@
+#include
#include
-#include "cisco.h"
-#include "cw/capwap_cisco.h"
-int cisco_out_ap_timesync(struct conn *conn,struct cw_action_out * a,uint8_t *dst)
+#include "cw/msgset.h"
+#include "cw/cw.h"
+
+
+
+
+int cisco_out_ap_timesync(struct cw_ElemHandler * eh,
+ struct cw_ElemHandlerParams * params, uint8_t * dst)
{
- int l = cw_put_cisco_ap_timesync(dst+10,time(NULL),0);
- return l + cw_put_elem_vendor_hdr(dst, a->vendor_id, a->elem_id, l);
+ cw_set_dword(dst+10 , time(NULL));
+ cw_set_byte(dst+10 + 4, 0);
+
+ return 5 + cw_put_elem_vendor_hdr(dst, eh->vendor , eh->id, 5);
}
diff --git a/src/mod/cisco/cisco_out_capwap_local_ip_address.c b/src/mod/cisco/cisco_out_capwap_local_ip_address.c
index e69de29b..468e656c 100644
--- a/src/mod/cisco/cisco_out_capwap_local_ip_address.c
+++ b/src/mod/cisco/cisco_out_capwap_local_ip_address.c
@@ -0,0 +1,16 @@
+#include "mod_cisco.h"
+#include "cw/cw.h"
+
+int cisco_out_capwap_local_ip_address(struct cw_ElemHandler * eh,
+ struct cw_ElemHandlerParams * params, uint8_t * dst)
+{
+ cw_KTV_t * ip;
+ ip = cw_ktv_get(params->conn->local_cfg,eh->key,CW_TYPE_IPADDRESS);
+ if (ip==NULL){
+ return 0;
+ }
+ return cw_put_local_ip_address(dst,eh->id,
+ CAPWAP_ELEM_WTP_IPV4_IP_ADDRESS,
+ CAPWAP_ELEM_WTP_IPV6_IP_ADDRESS,
+ ip->type->data(ip),ip->type->len(ip));
+}
diff --git a/src/mod/cisco/cisco_out_lw_path_mtu.c b/src/mod/cisco/cisco_out_lw_path_mtu.c
index e69de29b..29ddf345 100644
--- a/src/mod/cisco/cisco_out_lw_path_mtu.c
+++ b/src/mod/cisco/cisco_out_lw_path_mtu.c
@@ -0,0 +1,31 @@
+#include "cw/lw.h"
+#include "cw/cw.h"
+
+#include "capwap_cisco.h"
+#include "mod_cisco.h"
+
+
+
+int cisco_out_lw_path_mtu(struct cw_ElemHandler * eh,
+ struct cw_ElemHandlerParams * params, uint8_t * dst)
+{
+ char key[CW_KTV_MAX_KEY_LEN];
+ int len,max;
+
+ sprintf(key,"%s/%s",eh->key,"len");
+ len = cw_ktv_get_word(params->conn->local_cfg,key,0);
+ if (len == 0)
+ return 0;
+ sprintf(key,"%s/%s",eh->key,"max");
+ max = cw_ktv_get_word(params->conn->local_cfg,key,0);
+
+ lw_set_word(dst+16,max);
+ lw_set_word(dst+16+2,len);
+ memset(dst+16+4,0,len-4);
+
+ /* put the lwap elem header */
+ lw_set_dword(dst + 10, eh->vendor);
+ lw_set_word(dst + 14, eh->id);
+
+ return len + 6 + cw_put_elem_vendor_hdr(dst, eh->vendor, CISCO_ELEM_SPAM_VENDOR_SPECIFIC, len+6);
+}
diff --git a/src/mod/cisco/cisco_out_manager_ip_addr.c b/src/mod/cisco/cisco_out_manager_ip_addr.c
index aa301ecf..04d402fc 100644
--- a/src/mod/cisco/cisco_out_manager_ip_addr.c
+++ b/src/mod/cisco/cisco_out_manager_ip_addr.c
@@ -25,7 +25,7 @@ uint8_t arr1[] = {
int l=sizeof(arr1);
l = l + lw_put_vendor(dst+10, LW_VENDOR_ID_CISCO, LW_CISCO_DOT11R_WLC_MAC_AND_IP, l);
- return l+cw_put_elem_vendor_hdr(dst,CW_VENDOR_ID_CISCO,CW_CISCO_SPAM_VENDOR_SPECIFIC,l);
+ return l+cw_put_elem_vendor_hdr(dst,CW_VENDOR_ID_CISCO,CISCO_ELEM_SPAM_VENDOR_SPECIFIC,l);
@@ -37,6 +37,6 @@ uint8_t arr1[] = {
memcpy(d,&(((struct sockaddr_in *) &ss)->sin_addr),4);
l=4;
l = l + lw_put_vendor(dst+10, LW_VENDOR_ID_CISCO, LW_CISCO_MANAGER_IP_ADDR, l);
- return l+cw_put_elem_vendor_hdr(dst,CW_VENDOR_ID_CISCO,CW_CISCO_SPAM_VENDOR_SPECIFIC,l);
+ return l+cw_put_elem_vendor_hdr(dst,CW_VENDOR_ID_CISCO,CISCO_ELEM_SPAM_VENDOR_SPECIFIC,l);
}
diff --git a/src/mod/cisco/cisco_out_telnet_ssh.c b/src/mod/cisco/cisco_out_telnet_ssh.c
index 2e338bed..4fabd6eb 100644
--- a/src/mod/cisco/cisco_out_telnet_ssh.c
+++ b/src/mod/cisco/cisco_out_telnet_ssh.c
@@ -50,7 +50,7 @@ int cw_cisco_put_telnet_ssh(struct conn *conn,uint8_t type,const char * item_id,
if (l==0)
return 0;
cw_dbg(DBG_X,"CISL = %d",l);
- return l + cw_put_elem_vendor_hdr(dst, CW_VENDOR_ID_CISCO, CW_CISCO_SPAM_VENDOR_SPECIFIC, l);
+ return l + cw_put_elem_vendor_hdr(dst, CW_VENDOR_ID_CISCO, CISCO_ELEM_SPAM_VENDOR_SPECIFIC, l);
}
diff --git a/src/mod/cisco/lwapp_cisco.h b/src/mod/cisco/lwapp_cisco.h
index 438b750c..111fa15d 100644
--- a/src/mod/cisco/lwapp_cisco.h
+++ b/src/mod/cisco/lwapp_cisco.h
@@ -21,7 +21,7 @@
#include
-#include "lwapp.h"
+#include "cw/lwapp.h"
/**
@@ -42,7 +42,7 @@
#define LW_CISCO_PRIMED_DISCOVERY_TIMEOUT 50
#define LW_CISCO_DELETE_WLAN 52
-#define LW_CISCO_PATH_MTU 73
+#define CISCO_LWELEM_PATH_MTU 73
#define LW_CISCO_PRIMED_JOIN_TIMEOUT 85
#define LW_CISCO_AP_DTLS_DATA_CFG 74
diff --git a/src/mod/cisco/mod_cisco.h b/src/mod/cisco/mod_cisco.h
index 8c58814d..b9c99ee8 100644
--- a/src/mod/cisco/mod_cisco.h
+++ b/src/mod/cisco/mod_cisco.h
@@ -1,6 +1,8 @@
#ifndef __MOD_CISCO_H
#define __MOD_CISCO_H
+#include
+#include "cw/msgset.h"
int cisco_in_wtp_descriptor(struct cw_ElemHandler *eh, struct cw_ElemHandlerParams * params, uint8_t * data,
int len);
@@ -11,10 +13,32 @@ int cisco_out_wtp_descriptor(struct cw_ElemHandler * handler, struct cw_ElemHand
int cisco_in_ac_descriptor(struct cw_ElemHandler *eh,
struct cw_ElemHandlerParams *params,
uint8_t * data, int len);
+
+int cisco_out_ac_descriptor(struct cw_ElemHandler * eh,
+ struct cw_ElemHandlerParams * params, uint8_t * dst);
int cisco_out_radio_generic(struct cw_ElemHandler * handler, struct cw_ElemHandlerParams * params
, uint8_t * dst);
+int cisco_out_ap_timesync(struct cw_ElemHandler * eh,
+ struct cw_ElemHandlerParams * params, uint8_t * dst);
+
+int cisco_in_spam_vendor_specific(struct cw_ElemHandler *eh,
+ struct cw_ElemHandlerParams *params,
+ uint8_t * data, int len);
+
+int cisco_in_lw_path_mtu(struct cw_ElemHandler *eh,
+ struct cw_ElemHandlerParams *params,
+ uint8_t * data, int len);
+
+int cisco_out_capwap_local_ip_address(struct cw_ElemHandler * eh,
+ struct cw_ElemHandlerParams * params, uint8_t * dst);
+
+int cisco_out_lw_path_mtu(struct cw_ElemHandler * eh,
+ struct cw_ElemHandlerParams * params, uint8_t * dst);
+
struct cw_MsgSet * cisco_register_msg_set(struct cw_MsgSet * set, int mode);
+
+
#endif
diff --git a/src/mod/cisco/mod_cisco_ac.c b/src/mod/cisco/mod_cisco_ac.c
index 4e47ac0c..292db821 100644
--- a/src/mod/cisco/mod_cisco_ac.c
+++ b/src/mod/cisco/mod_cisco_ac.c
@@ -195,6 +195,7 @@ int static setup_cfg(struct conn * conn)
{
int security;
+
security = cw_setup_dtls(conn,conn->local_cfg,"cisco",CAPWAP_CIPHER);
cw_ktv_set_byte(conn->local_cfg,"ac-descriptor/security",security);