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/libcw.project b/libcw.project
index abe48ee1..bf601779 100644
--- a/libcw.project
+++ b/libcw.project
@@ -299,6 +299,7 @@
+
diff --git a/mod_capwap.project b/mod_capwap.project
index 09c568d8..94872f52 100644
--- a/mod_capwap.project
+++ b/mod_capwap.project
@@ -21,6 +21,7 @@
+
diff --git a/src/ac/ac_main.c b/src/ac/ac_main.c
index 50f739b1..e93b7b79 100644
--- a/src/ac/ac_main.c
+++ b/src/ac/ac_main.c
@@ -229,15 +229,10 @@ int main (int argc, char *argv[])
actube_global_cfg = global_cfg;
cw_dbg_opt_level=0xffffffff;
- cw_dbg(DBG_INFO,"Hello world\n");
+ cw_dbg(DBG_INFO,"Hello world");
+
cw_dbg_ktv_dump(global_cfg,DBG_INFO,NULL,"CFG:",NULL);
- printf("Dumped\n");
- exit(0);
-
-
-
-
cw_log_name = "AC-Tube";
diff --git a/src/cw/cw_ktv_readline.c b/src/cw/cw_ktv_readline.c
index 19fb90d3..89735511 100644
--- a/src/cw/cw_ktv_readline.c
+++ b/src/cw/cw_ktv_readline.c
@@ -74,7 +74,7 @@ static int read_key (FILE *f, char *key, int max_len, struct parser * p)
n=0;
while(c!=EOF && nip);
- d+=cw_put_word(d,acip->index);
-
- int fam = sock_addrfamily(&acip->ip);
- int elem_id=-1;
- switch (fam) {
- case AF_INET:
- elem_id = CW_ELEM_CAPWAP_CONTROL_IPV4_ADDRESS;
- break;
- case AF_INET6:
- elem_id = CW_ELEM_CAPWAP_CONTROL_IPV6_ADDRESS;
- break;
- default:
- cw_log(LOG_ERR,"Unknown adress family %d",fam);
- break;
- }
-
- if (elem_id ==-1)
- return 0;
-
- d+=cw_put_elem_hdr(dst,elem_id,d-dst-4);
-// return 0;
-// *dptr = d-4;
-
-
- return d-4-dst;
-
-// return 1;
-}
-
-/*
-int cw_out_capwap_control_ip_addr_list(struct conn *conn,struct cw_action_out *a,uint8_t *dst)
-{
- struct mbag_item * item = mbag_get(conn->local,a->item_id);
-
- if ( !item ) {
- cw_log(LOG_ERR, "Can't send CAPWAP Local IPv4/IPv6 Address, not found");
- return 0;
- }
-
-
- cw_aciplist_t aciplist = (cw_aciplist_t) mbag_item_get_data_ptr(item);
-
-
- uint8_t *d = dst;
-
- MAVLITER_DEFINE(i,aciplist);
- mavliter_foreach(&i){
- struct cw_acip * acip = mavliter_get(&i);
-
- d+=put_ip(d,acip);
-
- }
-
-
-// cw_aciplist_foreach(aciplist, put_ip, &d);
-
- mbag_item_release_data_ptr(item,aciplist);
- return d-dst;
-}
-
-*/
\ No newline at end of file
diff --git a/src/cw/ktv.h b/src/cw/ktv.h
index d0230238..9f9c28e1 100644
--- a/src/cw/ktv.h
+++ b/src/cw/ktv.h
@@ -113,6 +113,9 @@ int cw_ktv_read_file(FILE * file, mavl_t ktv, mavl_t types);
cw_KTV_t * cw_ktv_get(mavl_t ktv, const char *key, const cw_Type_t * type);
uint8_t cw_ktv_get_byte(mavl_t ktv,const char *key, uint8_t def);
uint16_t cw_ktv_get_word(mavl_t ktv,const char *key, uint16_t def);
+
+cw_KTV_t * cw_ktv_idx_get(mavl_t ktv, const char *key, int idx, const cw_Type_t * type);
+
extern const cw_Type_t * cw_ktv_std_types[];
#define CW_KTV_STD_TYPES cw_ktv_std_types
diff --git a/src/mod/capwap/Makefile b/src/mod/capwap/Makefile
index 4a5e46c3..2bdf0a2e 100644
--- a/src/mod/capwap/Makefile
+++ b/src/mod/capwap/Makefile
@@ -14,7 +14,8 @@ OBJS=\
capwap_out_ac_ip_list.o \
capwap_in_session_id.o \
capwap_in_vendor_specific_payload.o \
- capwap_in_mtu_discovery_padding.o
+ capwap_in_mtu_discovery_padding.o \
+ capwap_out_capwap_control_ip_address.o
LIBDIR := ../../../lib
diff --git a/src/mod/capwap/capwap_actions_ac.c b/src/mod/capwap/capwap_actions_ac.c
index 09f65d5c..ef8edbb8 100644
--- a/src/mod/capwap/capwap_actions_ac.c
+++ b/src/mod/capwap/capwap_actions_ac.c
@@ -132,6 +132,29 @@ static struct cw_ElemHandler handlers[] = {
}
,
+ {
+ "CAPWAP Control IPv4 Address", /* name */
+ CW_ELEM_CAPWAP_CONTROL_IPV4_ADDRESS, /* Element ID */
+ 0,0, /* Vendor / Proto */
+ 0,0, /* min/max length */
+ CW_TYPE_BSTR16, /* type */
+ "capwap-control-ip-address", /* Key */
+ NULL, /* get */
+ capwap_out_capwap_control_ip_address /* put */
+ },
+
+ {
+ "CAPWAP Control IPv6 Address", /* name */
+ CW_ELEM_CAPWAP_CONTROL_IPV6_ADDRESS, /* Element ID */
+ 0,0, /* Vendor / Proto */
+ 0,0, /* min/max length */
+ CW_TYPE_BSTR16, /* type */
+ "capwap-control-ip-address", /* Key */
+ NULL, /* get */
+ capwap_out_capwap_control_ip_address /* put */
+ }
+
+ ,
{0,0,0,0,0,0,0,0}
@@ -156,8 +179,8 @@ static int discovery_response_states[] = {CAPWAP_STATE_DISCOVERY,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_AC_IPV4_LIST, 1, 0},
- {0,0,CAPWAP_ELEM_AC_IPV6_LIST, 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}
diff --git a/src/mod/capwap/mod_capwap.h b/src/mod/capwap/mod_capwap.h
index 76c4e9ca..6904fb6a 100644
--- a/src/mod/capwap/mod_capwap.h
+++ b/src/mod/capwap/mod_capwap.h
@@ -20,7 +20,8 @@ int capwap_out_wtp_descriptor(struct cw_ElemHandler * eh,
int capwap_out_ac_descriptor(struct cw_ElemHandler * eh,
struct cw_ElemHandlerParams * params, uint8_t * dst);
-
+int capwap_out_capwap_control_ip_address(struct cw_ElemHandler * eh,
+ struct cw_ElemHandlerParams * params, uint8_t * dst);