diff --git a/src/ac/wtpman.c b/src/ac/wtpman.c index 2e1b6e5b..668fbad3 100644 --- a/src/ac/wtpman.c +++ b/src/ac/wtpman.c @@ -350,7 +350,7 @@ void config_to_sql(struct conn *conn) db_put_wtp_prop(wtp_id,-1,cwi->id,str); } else{ - cw_log(LOG_ERR,"Can_'t converto to str"); + cw_log(LOG_ERR,"Can't converto to str"); } @@ -456,7 +456,6 @@ static void wtpman_run(void *arg) if ( conn->outgoing->count ) { rc = cw_send_request(conn, CW_MSG_CONFIGURATION_UPDATE_REQUEST); - DBGX("CU RC: %d",rc); DBGX("MAV MERGE",""); mavl_merge(conn->config,conn->outgoing); diff --git a/src/ac/wtpman.h b/src/ac/wtpman.h index 966838de..cdc3ad19 100644 --- a/src/ac/wtpman.h +++ b/src/ac/wtpman.h @@ -28,7 +28,7 @@ struct wtpman{ uint8_t * session_id; uint8_t wtp_mactype; - struct wtpinfo wtpinfo; + //struct wtpinfo wtpinfo; int socklistindex; diff --git a/src/capwap/Makefile b/src/capwap/Makefile index 6b5c3f45..d093c229 100644 --- a/src/capwap/Makefile +++ b/src/capwap/Makefile @@ -49,8 +49,9 @@ LOGOBJS=log.o \ WTPINFOOBJS =\ - wtpinfo_set_location.o \ - wtpinfo_print.o + #wtpinfo_print.o + #wtpinfo_set_location.o \ + wtpinfo_lwreadelem_wtp_descriptor.o \ UTILOBJS= \ cw_setstr.o \ @@ -86,7 +87,6 @@ LWAPPOBJS = \ lw_checksum.o \ lw_put_ac_descriptor.o \ lw_put_cisco_path_mtu.o \ - lw_put_80211_wtp_wlan_radio_configuration.o \ lw_readelem_vendor_specific.o \ lw_elem_id_to_str.o \ lw_msg_id_to_str.o \ @@ -94,6 +94,7 @@ LWAPPOBJS = \ lw_put_sockaddr.o \ lw_put_image_data.o + #lw_put_80211_wtp_wlan_radio_configuration.o \ # lw_readelem_wtp_name.o \ lw_readelem_wtp_board_data.o \ cw_log_debug.o \ @@ -112,7 +113,6 @@ LWAPPCISCOOBJS = \ CAPWAPOBJS= \ aciplist.o \ lwmsg_init.o \ - wtpinfo_lwreadelem_wtp_descriptor.o \ hdr_print.o \ cw_cisco_id_to_str.o\ cw_strlist_get_str.o \ @@ -233,6 +233,7 @@ CWACTION=action.o \ cw_put_image_data.o \ cisco.o \ mbag.o\ + mbag_type_word.o\ radio.o \ cw_out_radio_info.o \ capwap_items.o \ diff --git a/src/capwap/capwap.h b/src/capwap/capwap.h index 8f63dd90..89bb127a 100644 --- a/src/capwap/capwap.h +++ b/src/capwap/capwap.h @@ -337,7 +337,7 @@ CW_MSG_MAXMSG = 26 #define CW_SUBELEM_AC_SOFTWARE_VERSION 5 -#include "wtpinfo.h" +//#include "wtpinfo.h" //#include "acinfo.h" /* Frame tunnnel mode bits */ @@ -348,7 +348,7 @@ CW_MSG_MAXMSG = 26 #include "radioinfo.h" -#include "wtpinfo.h" +//#include "wtpinfo.h" #define CW_DISCOVERY_TYPE_UNKNOWN 0 @@ -360,8 +360,8 @@ CW_MSG_MAXMSG = 26 /* wtpinfo methods */ -extern void wtpinfo_set_location(struct wtpinfo *wtpinfo, uint8_t * str, int len); -extern int wtpinfo_set_radioinfo(struct wtpinfo *wtpinfo, uint8_t * msgelem, int len); +//extern void wtpinfo_set_location(struct wtpinfo *wtpinfo, uint8_t * str, int len); +//extern int wtpinfo_set_radioinfo(struct wtpinfo *wtpinfo, uint8_t * msgelem, int len); /* wtp mac types */ @@ -467,8 +467,8 @@ extern void cwsend_join_response(struct conn *conn, int seqnum, int rc, */ //extern void cwread_discovery_request(struct wtpinfo *wtpinfo, uint8_t * msg, int len); -extern void process_join_request(struct wtpinfo *wtpinfo, uint8_t * msg, int len); -extern void process_conf_status_request(struct wtpinfo *wtpinfo, uint8_t * msg, int len); +//extern void process_join_request(struct wtpinfo *wtpinfo, uint8_t * msg, int len); +//extern void process_conf_status_request(struct wtpinfo *wtpinfo, uint8_t * msg, int len); /* extern void cwread_discovery_response(struct ac_info *acinfo, uint8_t * msg, int len); @@ -497,8 +497,8 @@ extern int cw_readelem_ecn_support(uint8_t * ecn_support, int type, uint8_t * ms extern int cw_readelem_maximum_message_length(uint16_t * dst, int type, uint8_t * msgelem, int len); extern int cw_readelem_ac_name(uint8_t ** dst, int type, uint8_t * msgelem, int len); -extern int cw_readelem_wtp_reboot_statistics(struct wtp_reboot_statistics *s, int type, - uint8_t * msgelem, int len); +//extern int cw_readelem_wtp_reboot_statistics(struct wtp_reboot_statistics *s, int type, +// uint8_t * msgelem, int len); extern int cw_readelem_cw_local_ip_addr(struct sockaddr *local_ip, int type, uint8_t * msgelem, int len); //extern int cw_readelem_radio_administrative_state(struct radioinfo *radioinfo, int type, @@ -895,6 +895,7 @@ static inline int cw_addelem_radio_operational_state(uint8_t * dst, struct radio cw_put_data(dst+10,data,len)) */ +/* extern int cw_addelem_vendor_specific_payload(uint8_t * dst, uint32_t vendorid, uint16_t elemid, uint8_t * data, uint16_t len); @@ -909,7 +910,7 @@ extern void cw_prepare_change_state_event_request(struct conn *conn, extern int cw_send_configuration_update_response(struct conn *conn, int seqnum, struct radioinfo *radioinfo); - +*/ #define cw_addelem_ac_name(dst,name) \ cw_addelem(dst,CW_ELEM_AC_NAME,name,strlen((char*)(name))) diff --git a/src/capwap/capwap_cisco.h b/src/capwap/capwap_cisco.h index 0a0f915b..2a4bb83a 100644 --- a/src/capwap/capwap_cisco.h +++ b/src/capwap/capwap_cisco.h @@ -128,11 +128,11 @@ int cw_out_cisco_ap_timesync(struct conn *conn,struct cw_action_out * a,uint8_t * @param name RAD name, zero terminated * @return number of bytes put */ -static inline int cw_addelem_cisco_rad_name(uint8_t * dst, uint8_t * name) -{ - return cw_addelem_vendor_specific_payload(dst, CW_VENDOR_ID_CISCO, CW_CISCO_RAD_NAME, name, - strlen((char *) name)); -} +//static inline int cw_addelem_cisco_rad_name(uint8_t * dst, uint8_t * name) +//{ +// return cw_addelem_vendor_specific_payload(dst, CW_VENDOR_ID_CISCO, CW_CISCO_RAD_NAME, name, +// strlen((char *) name)); +//} /** * Add a Cisco Group Name message element to buffer @@ -140,12 +140,14 @@ static inline int cw_addelem_cisco_rad_name(uint8_t * dst, uint8_t * name) * @param name Group name, zero terminated * @return number of bytes put */ +/* + static inline int cw_addelem_cisco_ap_group_name(uint8_t * dst, uint8_t * name){ return cw_addelem_vendor_specific_payload(dst, CW_VENDOR_ID_CISCO, CW_CISCO_AP_GROUP_NAME, name, strlen((char *) name)); } - +*/ static inline int cw_addelem_cisco_ap_regulatory_domain(uint8_t *dst, struct radioinfo * ri){ uint8_t *d=dst+10; diff --git a/src/capwap/capwap_items.c b/src/capwap/capwap_items.c index d21a032a..05863ef2 100644 --- a/src/capwap/capwap_items.c +++ b/src/capwap/capwap_items.c @@ -98,14 +98,17 @@ struct cw_itemdef capwap_itemdefs[] = { {CW_ITEM_WTP_NAME,CW_ITEM_NONE,MBAG_STR}, {CW_ITEM_LOCATION_DATA,CW_ITEM_NONE,MBAG_STR}, -{CW_ITEM_WTP_GROUP_NAME,CW_ITEM_NONE,MBAG_STR}, {CW_ITEM_WTP_HARDWARE_VERSION,CW_ITEM_NONE,MBAG_VENDORSTR}, {CW_ITEM_WTP_SOFTWARE_VERSION,CW_ITEM_NONE,MBAG_VENDORSTR}, - +{CW_ITEM_WTP_GROUP_NAME,CW_ITEM_NONE,MBAG_STR}, {CW_ITEM_WTP_BOARD_DATA,CW_ITEM_NONE,MBAG_MBAG}, {CW_ITEM_WTP_BOARD_DATA,CW_ITEM_WTP_BOARD_VENDOR,MBAG_VENDORSTR}, +{CW_ITEM_AP_MODE_AND_TYPE,CW_ITEM_NONE,MBAG_WORD}, +{CW_ITEM_WTP_BOARD_DATA,CW_ITEM_WTP_BOARD_VENDOR}, + + {CW_ITEM_NONE} diff --git a/src/capwap/conn.h b/src/capwap/conn.h index 800ff917..246184ce 100644 --- a/src/capwap/conn.h +++ b/src/capwap/conn.h @@ -31,7 +31,7 @@ #include "fragman.h" #include "cwmsg.h" -#include "wtpinfo.h" +//#include "wtpinfo.h" #include "action.h" @@ -240,7 +240,7 @@ struct cwimage_data; extern void conn_prepare_request(struct conn *conn, int type); extern int conn_prepare_image_data_request(struct conn *conn, struct cwimage_data *, struct image_identifier *id); -extern void conn_detect_capwap(struct conn *conn, struct wtpinfo *wtpinfo); +//extern void conn_detect_capwap(struct conn *conn, struct wtpinfo *wtpinfo); struct cwrmsg *conn_send_request(struct conn *conn); struct cwrmsg *conn_wait_for_message(struct conn *conn, time_t timer); diff --git a/src/capwap/cw_in_wtp_board_data.c b/src/capwap/cw_in_wtp_board_data.c index 98a3a0fa..5847b3c9 100644 --- a/src/capwap/cw_in_wtp_board_data.c +++ b/src/capwap/cw_in_wtp_board_data.c @@ -21,7 +21,6 @@ #include -#include "wtpinfo.h" #include "capwap.h" #include "capwap_items.h" diff --git a/src/capwap/cw_in_wtp_descriptor.c b/src/capwap/cw_in_wtp_descriptor.c index c2c285e1..9adafcae 100644 --- a/src/capwap/cw_in_wtp_descriptor.c +++ b/src/capwap/cw_in_wtp_descriptor.c @@ -20,7 +20,6 @@ #include "capwap.h" #include "capwap_items.h" -#include "wtpinfo.h" #include "cw_util.h" #include "dbg.h" diff --git a/src/capwap/cw_put_msg.c b/src/capwap/cw_put_msg.c index 37ff70cb..5f0571ed 100644 --- a/src/capwap/cw_put_msg.c +++ b/src/capwap/cw_put_msg.c @@ -63,8 +63,101 @@ int cw_put_msg(struct conn *conn, uint8_t * rawout) return -1; } -DBGX("Found am %p %p",am,am->item_id); -DBGX("Teh ELEM ID found '%s'",am->item_id); + cw_action_out_t *ae; + int len = 0; + while(NULL != (ae=avliter_next(&i))) { + + DBGX("Put %d %i %p\n",ae->msg_id,ae->elem_id,ae->item_id); + DBGX("Elem ID %s",ae->item_id); + if ( ae->item_id ) { + DBGX("Item ID: %s %p",ae->item_id,CW_ITEM_NONE); + } + + if (ae->msg_id != as.msg_id) { + /* Element is from next msg, close action */ + break; + } + if (ae->out) { + int l=0; + l= ae->out(conn, ae, dst+len); + len +=l; +// cw_dbg_elem_colored(DBG_ELEM, conn, ae->msg_id, ae->elem_id, +// dst+len-l,l); + + } + +//cw_dbg_elem_colored(DBG_ELEM,"Adding element %d to msg %d, len = %d",ae->msg_id,ae->elem_id,l); + + }; + + + cw_set_msg_elems_len(msgptr, len); + + if (as.msg_id & 1) { + /* It's a request, so we have to set seqnum */ + int s = conn_get_next_seqnum(conn); + cw_set_msg_seqnum(msgptr,s); +// printf("Set seqnum to : %d\n",s); + + } + + + return len; +} + + + +/** + * Put a message to a buffer + * This functions assumes, that a message header with is + * alread initilaized in buffer + * Message alements are taken fom actiondef in #conn->action + */ +int cw_put_custum_msg(struct conn *conn, uint8_t * rawout, mbag_t elems) +{ + /* rawout is already initialized, so we can get + msg type from buffer */ + uint8_t *msgptr = rawout + cw_get_hdr_msg_offset(rawout); + int msg_id = cw_get_msg_type(msgptr); + + MAVLITER_DEFINE(it,elems); + mavliter_foreach(&it){ + mavliter_get(&it); + + + cw_action_out_t as; + + as.item_id = CW_ITEM_NONE; + as.vendor_id = 0; + + + + } + + + + + + + + + /* create search paramaters */ + cw_action_out_t as; + + as.item_id = CW_ITEM_NONE; + as.vendor_id = 0; + + uint8_t *dst = msgptr+8; + + DEFINE_AVLITER(i,conn->actions->out); + + cw_action_out_t *am; + + if (! (am=avliter_seek(&i,&as))){ + cw_log(LOG_ERR,"Error: Can't create message of type %d (%s) - no definition found.", + as.msg_id,cw_strmsg(as.msg_id)); + return -1; + } cw_action_out_t *ae; int len = 0; diff --git a/src/capwap/cwmsg.h b/src/capwap/cwmsg.h index dd1f39e1..49071a55 100644 --- a/src/capwap/cwmsg.h +++ b/src/capwap/cwmsg.h @@ -5,7 +5,7 @@ #include "radioinfo.h" //#include "acinfo.h" -#include "wtpinfo.h" +//#include "wtpinfo.h" struct cwmsg{ uint8_t * buffer; diff --git a/src/capwap/lwapp.h b/src/capwap/lwapp.h index 2aee75a6..4b81a6ba 100644 --- a/src/capwap/lwapp.h +++ b/src/capwap/lwapp.h @@ -27,7 +27,7 @@ #include "bstr.h" -#include "wtpinfo.h" +//#include "wtpinfo.h" @@ -261,11 +261,11 @@ extern int lw_put_cisco_path_mtu(uint8_t *dst, uint16_t max, uint16_t padding); /* function proto types */ extern uint16_t lw_checksum(uint8_t *d,int len); -extern int lw_readelem_wtp_board_data(struct wtpinfo *wtpinfo, int type, uint8_t *msgelem, int len); +//extern int lw_readelem_wtp_board_data(struct wtpinfo *wtpinfo, int type, uint8_t *msgelem, int len); extern int lw_readelem_wtp_name(bstr_t * dst, int type, uint8_t * msgelem, int len); -extern int lw_put_80211_wtp_wlan_radio_configuration(uint8_t*dst,struct radioinfo *ri); +//extern int lw_put_80211_wtp_wlan_radio_configuration(uint8_t*dst,struct radioinfo *ri); extern const char * lw_vendor_id_to_str(uint32_t vendor_id); extern const char * lw_elem_id_to_str(int elem_id); diff --git a/src/capwap/mbag.c b/src/capwap/mbag.c index 2e70f455..89ceb459 100644 --- a/src/capwap/mbag.c +++ b/src/capwap/mbag.c @@ -1,7 +1,12 @@ #include "mbag.h" #include "capwap.h" #include "format.h" - +/** + * @file + * @MBAG functions + * @addtogroup MbagFunctions + * @{ + */ static int mbag_bstr16str(void *item,char *dst) { @@ -47,9 +52,11 @@ const struct mbag_typedef mbag_type_byte = { "byte",NULL }; +/* const struct mbag_typedef mbag_type_word = { "word",NULL }; +*/ const struct mbag_typedef mbag_type_dword = { "dword",NULL @@ -214,3 +221,4 @@ struct mbag_item *strmbag_item_create(mbag_t s, char *name) */ +/**@}*/ diff --git a/src/capwap/send.c b/src/capwap/send.c index 82d261de..66852e27 100644 --- a/src/capwap/send.c +++ b/src/capwap/send.c @@ -118,7 +118,7 @@ int cw_send_request(struct conn *conn,int msg_id) // XXX find a better name for this function -int cw_send_request_2() +int cw_send_custom_request_2(struct conn *conn,int msg_id) { diff --git a/src/capwap/strlist.h b/src/capwap/strlist.h index dfdead78..23d6f6af 100644 --- a/src/capwap/strlist.h +++ b/src/capwap/strlist.h @@ -9,13 +9,16 @@ #include "stdio.h" -/** Key/String pair, used for string tables. */ +/** + *Key/String pair, used for string tables, + *to display message element names and so on... + */ struct cw_str { int id; const char *str; }; -/** Stopper, indicates the laste element in a strlist */ +/** Stopper, indicates the last element in a strlist */ #define CW_STR_STOP 0xffffffff diff --git a/src/capwap/wtpinfo.h b/src/capwap/wtpinfo.h deleted file mode 100644 index 90614df0..00000000 --- a/src/capwap/wtpinfo.h +++ /dev/null @@ -1,128 +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 . - -*/ - -#ifndef __WTPINFO_H -#define __WTPINFO_H - -#include -#include - -#include "radioinfo.h" -#include "bstr.h" - - -struct wtp_reboot_statistics{ - int reboot_count; - int ac_initiated_count; - int link_failure_count; - int sw_failure_count; - int hw_failure_count; - int other_failure_count; - int unknown_failure_count; - int last_failure_type; -}; - - -/* structure to hold info about a wtp */ -struct wtpinfo{ - - - - uint8_t *ac_name; - uint8_t *name; - uint8_t *group; - - uint8_t * location; - - uint32_t vendor_id; - uint8_t* model_no; - uint8_t* serial_no; - - bstr_t board_id; - bstr_t board_revision; - - uint16_t statistics_timer; - - int max_radios; - int radios_in_use; - uint8_t frame_tunnel_mode; - - uint8_t mac_type; - - - bstr_t session_id; - - - - - struct radioinfo radioinfo[31]; - - - uint8_t * hardware_version; - int hardware_version_len; - uint32_t hardware_vendor_id; - uint8_t * software_version; - int software_version_len; - uint32_t software_vendor_id; - uint8_t * bootloader_version; - int bootloader_version_len; - uint32_t bootloader_vendor_id; - - - uint16_t encryption_cap; - - - /** Base MAC address */ - bstr_t base_mac; - - - uint8_t * macaddress; - int macaddress_len; - uint8_t ecn_support; - - uint16_t max_msg_len; - uint8_t discovery_type; - - struct sockaddr_storage local_ip; - struct wtp_reboot_statistics reboot_statistics; - -}; - -extern int wtpinfo_readelem_wtp_board_data(struct wtpinfo *wtpinfo, int type, uint8_t *msgelem, int len); -extern int wtpinfo_readelem_wtp_mac_type(struct wtpinfo * wtpinfo, int type, uint8_t * msgelem, int len); -extern int wtpinfo_readelem_wtp_radio_info(struct wtpinfo * wtpinfo,int type,uint8_t *msgelem, int len); -extern int wtpinfo_readelem_wtp_descriptor(struct wtpinfo * wtpinfo, int type, uint8_t *msgelem, int len); -extern int wtpinfo_readelem_wtp_frame_tunnel_mode(struct wtpinfo * wtpinfo, int type, uint8_t * msgelem, int len); -extern int wtpinfo_readelem_discovery_type(struct wtpinfo * wtpinfo, int type, uint8_t * msgelem, int len); -extern int wtpinfo_readelem_location_data(struct wtpinfo * wtpinfo, int type, uint8_t * msgelem, int len); -extern int wtpinfo_readelem_wtp_name(struct wtpinfo * wtpinfo, int type, uint8_t * msgelem, int len); -extern int wtpinfo_readelem_session_id(struct wtpinfo * wtpinfo, int type, uint8_t * msgelem, int len); -//extern int wtpinfo_readelem_ecn_support(struct wtpinfo * wtpinfo, int type, uint8_t * msgelem, int len); -extern int wtpinfo_readelem_cw_local_ip_addr(struct wtpinfo * wtpinfo, int type, uint8_t * msgelem, int len); -extern int wtpinfo_print(char *str, struct wtpinfo * wtpinfo); - -#define wtpinfo_readelem_ecn_support(wtpinfo,type,msg,len) cw_readelem_ecn_support(&wtpinfo->ecn_support,type,msg,len) - - - -extern int wtpinfo_lwreadelem_wtp_descriptor(struct wtpinfo * wtpinfo, int type, uint8_t *msgelem, int len); - -#define wtpinfo_readelem_ac_name(wtpinfo,type,msg,len) cw_readelem_ac_name(&wtpinfo->ac_name,type,msg,len) - - -#endif diff --git a/src/wtp/cfg.json b/src/wtp/cfg.json index cf5cacb1..32398de1 100644 --- a/src/wtp/cfg.json +++ b/src/wtp/cfg.json @@ -11,6 +11,7 @@ }, "bssid":"", "capwap_timers":"2590", + "cisco_ap_mode_and_type":"516", "idle_timeout":"300", "location_data":"Germany", "radios":{ @@ -35,5 +36,5 @@ "wtp_frame_tunnel_mode":"4", "wtp_group_name":"tobias", "wtp_mac_type":"1", - "wtp_name":"Kaffe-Point" + "wtp_name":"hihihi" } \ No newline at end of file diff --git a/src/wtp/discovery.c b/src/wtp/discovery.c index 5b514e45..b201ad51 100644 --- a/src/wtp/discovery.c +++ b/src/wtp/discovery.c @@ -27,7 +27,6 @@ #include "capwap/capwap.h" #include "capwap/capwap_items.h" #include "capwap/log.h" -#include "capwap/wtpinfo.h" #include "capwap/sock.h" #include "capwap/cw_util.h" #include "capwap/aciplist.h" diff --git a/src/wtp/wtp_interface.c b/src/wtp/wtp_interface.c index 39d0708f..4b4bbc73 100644 --- a/src/wtp/wtp_interface.c +++ b/src/wtp/wtp_interface.c @@ -2,7 +2,6 @@ #include -#include "capwap/wtpinfo.h" #include "capwap/conn.h" #include "capwap/capwap_80211.h" #include "capwap/log.h" diff --git a/src/wtp/wtp_interface.h b/src/wtp/wtp_interface.h index cf50a297..c1387bac 100644 --- a/src/wtp/wtp_interface.h +++ b/src/wtp/wtp_interface.h @@ -1,8 +1,6 @@ #ifndef __WTP_INTERFACE_H #define __WTP_INTERFACE_H -#include "capwap/wtpinfo.h" -extern struct wtpinfo * get_wtpinfo(); extern struct conn * get_conn(); #endif