From 177eb3611557cac8c11401d5a372d5ca1454e2cc Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Mon, 16 Mar 2015 20:41:33 +0000 Subject: [PATCH] Some code re-organisation. FossilOrigin-Name: 22587c59c55ef6ceff826dd8056ed18f39a223e6d722664b4205e045daaf4903 --- doc/capwap_cisco.txt | 4 +- src/ac/conf.h | 2 +- src/ac/wtpman.c | 16 ++++---- src/capwap/Makefile | 12 ++++-- src/capwap/acinfo.c | 1 + src/capwap/capwap.h | 12 ++++-- src/capwap/conn.h | 4 ++ src/capwap/conn_get_message.c | 1 + src/capwap/cw_ianavendoridtostr.c | 13 +++++- src/capwap/cw_log.h | 21 +++++----- src/capwap/cw_log_str2dbglevel.c | 1 + src/capwap/cw_readelem_capwap_local_ip_addr.c | 1 - src/capwap/cw_send_echo_response.c | 41 +++++++++++++++---- src/capwap/cw_util.h | 6 +++ src/capwap/lwapp.h | 2 + src/capwap/process_join_request.c | 2 +- 16 files changed, 99 insertions(+), 40 deletions(-) diff --git a/doc/capwap_cisco.txt b/doc/capwap_cisco.txt index a7133a41..9fd0d85a 100644 --- a/doc/capwap_cisco.txt +++ b/doc/capwap_cisco.txt @@ -20,13 +20,13 @@ Length: 16 207. Cisco Board Data Options - The Cisco Board Data element is present in Discover Request and + The Cisco Board Data element is present in Discovery Request and Join Request messages sent by the WTP. 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - | ANT Type | Rserved | AP Type | Join Priority | + | ANT Type | Reserved | AP Type | Join Priority | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Type: 207 diff --git a/src/ac/conf.h b/src/ac/conf.h index f5157dfe..67961f8f 100644 --- a/src/ac/conf.h +++ b/src/ac/conf.h @@ -59,7 +59,7 @@ #endif #define CONF_DEFAULT_CISCO_HARDWARE_VERSION ".x01000001" -#define CONF_DEFAULT_CISCO_SOFTWARE_VERSION ".x08006E00" +#define CONF_DEFAULT_CISCO_SOFTWARE_VERSION ".x06006E00" #ifndef CONF_DEFAULT_CONTROL_PORT diff --git a/src/ac/wtpman.c b/src/ac/wtpman.c index d41fed56..5b20b1da 100644 --- a/src/ac/wtpman.c +++ b/src/ac/wtpman.c @@ -37,7 +37,7 @@ /* macro to convert our client ip to a string */ #define CLIENT_IP (sock_addrtostr((struct sockaddr*)&wtpman->conn->addr, (char[64]){0},64)) - +/* int conn_handle_echo_request(void * d) { struct conn * conn = (struct conn *)d; @@ -45,6 +45,7 @@ int conn_handle_echo_request(void * d) cwsend_echo_response(conn,cwrmsg->seqnum,0); return 0; } +*/ void conn_handle_change_state_event_request(struct conn * conn) @@ -52,7 +53,7 @@ void conn_handle_change_state_event_request(struct conn * conn) } -static struct cwrmsg * conn_wait_for_message(struct conn * conn, time_t timer) +static struct cwrmsg * xconn_wait_for_message(struct conn * conn, time_t timer) { struct cwrmsg * cwrmsg; @@ -158,7 +159,7 @@ static struct cwrmsg * conn_wait_for_request(struct conn * conn, int *msglist, t -struct cwrmsg * conn_send_request(struct conn * conn) +struct cwrmsg * xconn_send_request(struct conn * conn) { int i; @@ -201,7 +202,7 @@ int wtpman_handle_request(void *p) struct cwrmsg * cwrmsg = &conn->cwrmsg; switch(conn->cwrmsg.type){ case CWMSG_ECHO_REQUEST: - conn_handle_echo_request(conn); + cw_handle_echo_request(conn); break; case CWMSG_CHANGE_STATE_EVENT_REQUEST: cwread_change_state_event_request(&wtpman->wtpinfo,cwrmsg->msgelems,cwrmsg->msgelems_len); @@ -237,7 +238,7 @@ void send_image_file(struct conn * conn,const char * filename) data.data = buffer; - conn->request_handler = conn_handle_echo_request; + conn->request_handler = cw_handle_echo_request; conn->request_handler_param = conn; int bl=0; @@ -616,7 +617,6 @@ static void wtpman_run(void *arg) int cfg_status_msgs[] = { CWMSG_IMAGE_DATA_REQUEST, CWMSG_CONFIGURATION_STATUS_REQUEST, -1 }; cwrmsg = conn_wait_for_request(wtpman->conn, cfg_status_msgs, timer); -printf("Have a message (con status req)\n"); if (!cwrmsg){ cw_dbg(DBG_CW_MSG_ERR,"No config uration status request from %s after %d seconds, WTP died.", @@ -624,7 +624,7 @@ printf("Have a message (con status req)\n"); wtpman_remove(wtpman); return; } -printf("Con Stat Req waitr\n"); +printf("Have Masseg %d\n",cwrmsg->type); cwread_configuration_status_request(&wtpman->wtpinfo,cwrmsg->msgelems, cwrmsg->msgelems_len); int result_code=0; struct ac_info *acinfo = get_acinfo(); @@ -634,7 +634,7 @@ printf("Send the respi but sleep\n"); printf("Next thoing\n"); - int change_status_msgs[] = { CWMSG_CHANGE_STATE_EVENT_REQUEST, -1 }; + int change_status_msgs[] = { CWMSG_IMAGE_DATA_REQUEST,CWMSG_CHANGE_STATE_EVENT_REQUEST, -1 }; cwrmsg = conn_wait_for_request(wtpman->conn, change_status_msgs, timer); printf("Done\n"); diff --git a/src/capwap/Makefile b/src/capwap/Makefile index 5ce53815..bfb87325 100644 --- a/src/capwap/Makefile +++ b/src/capwap/Makefile @@ -88,8 +88,10 @@ CAPWAPOBJS= \ cwsend_join_request.o \ cwsend_join_response.o \ cwread_join_response.o \ - cwsend_echo_request.o \ - cwsend_echo_response.o \ + cwsend_echo_request.o \ + cw_send_echo_response.o \ + cw_send_image_file.o \ + cw_handle_echo_request.o \ cwsend_conf_status_response.o\ cwread_configuration_status_request.o\ cwread_discovery_request.o\ @@ -185,7 +187,11 @@ CONNOBJS= conn.o \ conn_get_response.o \ conn_prepare_configuration_update_request.o \ conn_prepare_request.o \ - conn_prepare_image_data_request.o + conn_prepare_image_data_request.o \ + conn_send_request.o \ + conn_wait_for_message.o + + BSTROBJS= bstr_create.o \ bstr_create_from_cfgstr.o \ diff --git a/src/capwap/acinfo.c b/src/capwap/acinfo.c index 6ab39780..8ece11e0 100644 --- a/src/capwap/acinfo.c +++ b/src/capwap/acinfo.c @@ -40,6 +40,7 @@ int acinfo_readelem_ac_name(struct ac_info * acinfo,int type, uint8_t *msgelem, } */ + int acinfo_readelem_ac_descriptor(struct ac_info * acinfo,int type, uint8_t *msgelem, int len) { if (type != CWMSGELEM_AC_DESCRIPTOR) diff --git a/src/capwap/capwap.h b/src/capwap/capwap.h index 9a01f2b3..5e878e30 100644 --- a/src/capwap/capwap.h +++ b/src/capwap/capwap.h @@ -393,7 +393,6 @@ extern void process_join_request(struct wtpinfo * wtpinfo, uint8_t * msg, int le 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); -extern int cwsend_echo_response(struct conn * conn,int seqnum,struct radioinfo * radioinfo); //,struct wtpinfo * wtpinfo extern void cwread_image_data_request(struct ac_info * acinfo, uint8_t * msg, int len); extern void cwsend_image_data_response(struct conn * conn,int seqnum, int rc); extern int cwsend_image_data_request(struct conn * conn, struct image_data * data, struct image_identifier *id ); @@ -406,10 +405,7 @@ extern void cwsend_conf_status_response(struct conn * conn,int seqnum, int rc, s extern void cwsend_unknown_response(struct conn * conn,int seqnum, int unknow_request); -extern const char * cw_msgelemtostr(int elem); -extern const char * cw_msgtostr(int type); -extern const char * cw_ianavendoridtostr(int id); extern int hdr_print(char *str, uint8_t *packet, int len); extern int cw_readelem_ecn_support(uint8_t *ecn_support, int type, uint8_t * msgelem, int len); @@ -480,4 +476,12 @@ extern int cw_readelem_vendor_specific_payload(void * data, int msgtype, int ele */ +extern int cw_readelem_ac_descriptor(struct ac_info * acinfo,int type, uint8_t *msgelem, int len); +extern int cw_readelem_capwap_local_ip_addr(struct sockaddr * local_ip, int type, uint8_t * msgelem, int len); + + + +extern int cw_send_echo_response(struct conn * conn,int seqnum,struct radioinfo * radioinfo); +extern int cw_handle_echo_request(void * d); + #endif diff --git a/src/capwap/conn.h b/src/capwap/conn.h index bbc45fb2..5c0d91da 100644 --- a/src/capwap/conn.h +++ b/src/capwap/conn.h @@ -186,6 +186,10 @@ struct image_data; extern void conn_prepare_request(struct conn * conn, int type); extern int conn_prepare_image_data_request(struct conn * conn, struct image_data *, struct image_identifier *id ); 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); + + #define conn_is_error(conn) (conn->dtls_error) diff --git a/src/capwap/conn_get_message.c b/src/capwap/conn_get_message.c index 233c62e2..145d4c5e 100644 --- a/src/capwap/conn_get_message.c +++ b/src/capwap/conn_get_message.c @@ -9,6 +9,7 @@ #include "cw_log.h" #include "capwap.h" #include "sock.h" +#include "cw_util.h" struct args { struct conn *conn; diff --git a/src/capwap/cw_ianavendoridtostr.c b/src/capwap/cw_ianavendoridtostr.c index 23909b38..d0571b18 100644 --- a/src/capwap/cw_ianavendoridtostr.c +++ b/src/capwap/cw_ianavendoridtostr.c @@ -16,10 +16,21 @@ */ +/** + * @file + * @brief cw_iananvendoridtostr + */ #include "capwap.h" -/* definition of some iana assigned vendor id's */ +/** + * Convert IANA vendor ID to string + * @param id the ID + * @return a pointer to the string + * + * Defines of only a view number of IDs. If the ID is unknown + * the string "Unknown" is returned. + */ const char * cw_ianavendoridtostr(int id){ switch(id){ case CW_VENDOR_ID_ZYXEL: diff --git a/src/capwap/cw_log.h b/src/capwap/cw_log.h index 129676e6..e2e75640 100644 --- a/src/capwap/cw_log.h +++ b/src/capwap/cw_log.h @@ -33,18 +33,19 @@ * @{ */ -#define DBG_CW_MSG 0x00000001 -#define DBG_CW_MSGELEM 0x00000002 -#define DBG_CW_MSGELEM_DMP 0x00000004 -#define DBG_CW_INFO 0x00000008 -#define DBG_CW_RFC 0x00000010 +#define DBG_CW_MSG 0x00000001 /* CAPWAP messages */ +#define DBG_CW_MSGELEM 0x00000002 /* CAPWAP message elements */ +#define DBG_CW_MSGELEM_DMP 0x00000004 /* Dump CAPWAP message elements */ +#define DBG_CW_INFO 0x00000008 +#define DBG_CW_RFC 0x00000010 /* RCF-realted CAPWAP errors */ #define DBG_CW_STRICT 0x00000010 -#define DBG_CW_PKT_IN 0x00000020 -#define DBG_CW_PKT_OUT 0x00000040 -#define DBG_CW_PKT_DMP 0x00000080 -#define DBG_CW_PKT_DTL 0x00000100 +#define DBG_CW_PKT_IN 0x00000020 /* Headers of incoming CAPWAP packets */ +#define DBG_CW_PKT_OUT 0x00000040 /* Headers of outgoing CAPWAP packets */ +#define DBG_CW_PKT_DMP 0x00000080 /* Dump packts */ +#define DBG_CW_PKT_DTL 0x00000100 #define DBG_CW_PKT_ERR 0x00000200 -#define DBG_CW_MSG_ERR 0x00000400 +#define DBG_CW_MSG_ERR 0x00000400 /* Errors in CAPWAP messages */ +#define DBG_CW_IMG_DTL 0x00000800 /* Detail about image transfer */ /* driver specific debugs */ #define DBG_DRV 0x00010000 diff --git a/src/capwap/cw_log_str2dbglevel.c b/src/capwap/cw_log_str2dbglevel.c index 6b7011cd..cbe779bf 100644 --- a/src/capwap/cw_log_str2dbglevel.c +++ b/src/capwap/cw_log_str2dbglevel.c @@ -35,6 +35,7 @@ struct cw_dbg_cfgstrs cw_dbg_cfgstrs[] = { {"pkt_dmp",DBG_CW_PKT_DMP}, {"pkt_err",DBG_CW_PKT_ERR}, {"msg_err",DBG_CW_MSG_ERR}, + {"img_dtl",DBG_CW_IMG_DTL}, {"dtls",DBG_DTLS}, {"dtls_dietail",DBG_DTLS_DETAIL}, diff --git a/src/capwap/cw_readelem_capwap_local_ip_addr.c b/src/capwap/cw_readelem_capwap_local_ip_addr.c index 9ab8daae..c461be30 100644 --- a/src/capwap/cw_readelem_capwap_local_ip_addr.c +++ b/src/capwap/cw_readelem_capwap_local_ip_addr.c @@ -3,7 +3,6 @@ #include #include #include -# #include "capwap.h" int cw_readelem_capwap_local_ip_addr(struct sockaddr * local_ip, int type, uint8_t * msgelem, int len) diff --git a/src/capwap/cw_send_echo_response.c b/src/capwap/cw_send_echo_response.c index 6a4196f7..64035c8d 100644 --- a/src/capwap/cw_send_echo_response.c +++ b/src/capwap/cw_send_echo_response.c @@ -1,17 +1,40 @@ -#include "capwap.h" -#include "conn.h" -#include "cwmsg.h" +/* + This file is part of libcapwap. -int cwsend_echo_response(struct conn * conn,int seqnum,struct radioinfo * radioinfo) //,struct wtpinfo * wtpinfo) + 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 . + +*/ +/** + * @file + * @brief Implnts send echo response + */ + +#include "capwap.h" + +/** + * Send an echo response message + * @param conn connection, see #conn + * @param seqnum sequence number to use + * @param radioinfo radioinfo to use, should me NULL + * @return 1=Success\nOtherwise Error. + */ + +int cw_send_echo_response(struct conn * conn,int seqnum,struct radioinfo * radioinfo) { - //uint8_t buffer[CWMSG_MAX_SIZE]; struct cwmsg * cwmsg = &conn->resp_msg; cwmsg_init(cwmsg,conn->resp_buffer,CWMSG_ECHO_RESPONSE,seqnum,radioinfo); conn_send_response(conn,cwmsg,seqnum); return 1; - - //cwmsg_init(&cwmsg,buffer,CWMSG_ECHO_REQUEST,conn_get_next_seqnum(conn),radioinfo); - // return conn_send_cwmsg(conn,&cwmsg); - } diff --git a/src/capwap/cw_util.h b/src/capwap/cw_util.h index e76ffac8..6cacdc4c 100644 --- a/src/capwap/cw_util.h +++ b/src/capwap/cw_util.h @@ -31,6 +31,7 @@ extern int cw_format_version(char *s, bstr_t version, uint32_t vendor, char * def); extern int cw_is_printable(const uint8_t * s,int len); +extern const char * cw_ianavendoridtostr(int id); @@ -59,4 +60,9 @@ void cw_mand_elem_found(int *l,int type); int cw_is_missing_mand_elems(int *l); void cw_get_missing_mand_elems(char *dst, int *l); + + +extern const char * cw_msgelemtostr(int elem); +extern const char * cw_msgtostr(int type); + #endif diff --git a/src/capwap/lwapp.h b/src/capwap/lwapp.h index ac2be28d..e515a1fe 100644 --- a/src/capwap/lwapp.h +++ b/src/capwap/lwapp.h @@ -22,6 +22,8 @@ #include #include +#include "wtpinfo.h" + /* version */ #define LW_VERSION 0 diff --git a/src/capwap/process_join_request.c b/src/capwap/process_join_request.c index 3305c3d7..4e6a9ec0 100644 --- a/src/capwap/process_join_request.c +++ b/src/capwap/process_join_request.c @@ -70,7 +70,7 @@ static int process_elem(void *eparm,int type,uint8_t* msgelem,int len) if (wtpinfo_readelem_ecn_support(wtpinfo,type,msgelem,len)) goto foundX; - if (cw_readelem_capwap_local_ip_addr(&wtpinfo->local_ip,type,msgelem,len)){ + if (cw_readelem_capwap_local_ip_addr((struct sockaddr*)&wtpinfo->local_ip,type,msgelem,len)){ cw_mand_elem_found(e->mand, XCWMSGELEM_CAPWAP_LOCAL_IP_ADDRESS); return 1; }