From 5edd4ab6216ed865c8ee2f606fe91bdceb72a7d4 Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Sat, 17 Mar 2018 15:21:23 +0000 Subject: [PATCH] Some improvemts for the ktv file parser FossilOrigin-Name: 51c8ae52f86aa8fc824e07fe22d35b7ba5e82f5e4d7506cb5ff9c302ef87056a --- ac.project | 1 + actube.workspace | 4 +- libcw.project | 1 - mod_capwap.project | 1 + src/cw/capwap.h | 131 ++++------------------------------ src/cw/cw.h | 3 + src/cw/cw_ktv_read_file.c | 35 ++++----- src/cw/lw_put_ac_descriptor.c | 10 +-- src/cw/mavl.h | 6 +- src/cw/mavliter_next.c | 2 +- src/cw/mavliter_seek.c | 2 +- src/cw/mavliter_seek_set.c | 2 +- src/wtp/discovery.c | 1 + src/wtp/image_update.c | 2 +- src/wtp/wtp_main.c | 19 +++-- wtp.project | 1 - 16 files changed, 61 insertions(+), 160 deletions(-) diff --git a/ac.project b/ac.project index 89e35b07..f5cbdfed 100644 --- a/ac.project +++ b/ac.project @@ -22,6 +22,7 @@ + diff --git a/actube.workspace b/actube.workspace index 07586c53..e0162c79 100644 --- a/actube.workspace +++ b/actube.workspace @@ -1,11 +1,11 @@ - + - + diff --git a/libcw.project b/libcw.project index 793e3f9d..6ae58eb3 100644 --- a/libcw.project +++ b/libcw.project @@ -327,7 +327,6 @@ - diff --git a/mod_capwap.project b/mod_capwap.project index e2502307..09c568d8 100644 --- a/mod_capwap.project +++ b/mod_capwap.project @@ -20,6 +20,7 @@ + diff --git a/src/cw/capwap.h b/src/cw/capwap.h index 4ad0c8f8..cf78cc8b 100644 --- a/src/cw/capwap.h +++ b/src/cw/capwap.h @@ -413,70 +413,6 @@ -struct cwimage_data { - uint8_t *data; - uint8_t type; - int len; - uint32_t vendor_id; - uint8_t *identifier; -}; - -/* -struct cwimage_identifier{ - uint32_t vendor_id; - char *name; -}; -*/ - - -/* -//extern void cwmsg_addelem_wtp_radio_infos(struct cwmsg * cwmsg,struct wtpinfo * wtpinfo); -*/ - -/* -extern void cwmsg_addelem_wtp_radio_infos(struct cwmsg *msg, - struct radioinfo *radioinfos);*/ - -/* -//extern void cwmsg_addelem_result_code(struct cwmsg *msg, int rc); -*/ -/* -extern void cwmsg_addelem_vendor_specific_payload(struct cwmsg *msg, int vendor_id, - int type, uint8_t * payload, int len); -*/ - -/* -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); -*/ - /* -//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_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, -// uint8_t * msgelem, int len); -//extern int cw_readelem_radio_operational_state(struct radioinfo *radioinfo, int type, -// uint8_t * msgelem, int len); -*/ - -/* -extern int cw_readelem_statistics_timer(uint16_t * timer, int type, uint8_t * msgelem, - int len); -extern int cw_readelem_result_code(uint32_t * result_code, int type, uint8_t * msgelem, - int len); - -extern int cw_readelem_vendor_specific_payload(void *data, int msgtype, int elemtype, - uint8_t * msgelem, int len); - -*/ @@ -585,14 +521,21 @@ enum cw_reboot_failure_types { */ + + + + +struct cwimage_data { + uint8_t *data; + uint8_t type; + int len; + uint32_t vendor_id; + uint8_t *identifier; +}; + extern void cw_read_image_data_request(struct cwimage_data *, uint8_t * msg, int len); -/* -//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, @@ -651,54 +594,6 @@ const char *cw_strelemp_(cw_strheap_t h, int msg_id); #define cw_strelemp(p,id) cw_strelemp_((p)->strelem,id) - - -/* -//int cw_process_msg(struct conn *conn, uint8_t * rawmsg, int len); -*/ - -/* -extern int cw_in_vendor_specific_payload(struct conn *conn, struct cw_action_in *a, - uint8_t * data, int len,struct sockaddr *from); -*/ - -/* -extern int cw_in_wtp_name(struct conn *conn, struct cw_action_in *a, uint8_t * data, - int len,struct sockaddr *from); -extern int cw_in_wtp_board_data(struct conn *conn, struct cw_action_in *a, uint8_t * data, - int len,struct sockaddr *from); -extern int cw_in_wtp_descriptor(struct conn *conn, struct cw_action_in *a, uint8_t * data, - int len,struct sockaddr *from); -*/ - -/* -//extern int cw_out_generic(struct conn *conn,struct cw_action_in * a,uint8_t *data,int len); -*/ - -/* -extern int cw_out_generic(struct conn *conn, struct cw_action_out *a, uint8_t * dst); -*/ - -/* -//extern int cw_out_ac_descriptor(struct conn *conn, uint32_t elem_id, uint8_t * dst, - //struct mbag_item *item); -*/ - -/* -//extern int cw_out_capwap_control_ip_addrs(struct conn *conn, uint32_t elem_id, -// uint8_t * dst, struct mbag_item *item); -*/ - -/* -extern int cw_out_capwap_control_ip_addr_list(struct conn *conn, struct cw_action_out *a, - uint8_t * dst); -*/ - -/* -extern int cw_put_msg(struct conn *conn, uint8_t * rawout); -int cw_out_image_data(struct conn *conn, struct cw_action_out *a, uint8_t * dst); -*/ - struct cw_ac_status { int stations; int limit; diff --git a/src/cw/cw.h b/src/cw/cw.h index 112c0ea2..47f6c754 100644 --- a/src/cw/cw.h +++ b/src/cw/cw.h @@ -436,6 +436,8 @@ extern int cw_put_local_ip_address(int sock, uint8_t * dst, int ipv4elem_id, extern int cw_put_radio_operational_states(mbag_t radios, uint8_t * dst, int *nerror, int d7mode); +void cw_init_request(struct conn *conn, int msg_id); + /** * @} @@ -463,6 +465,7 @@ int cw_out_radio_generic(struct conn *conn, struct cw_action_out *a, uint8_t * d int cw_put_elem_session_id(uint8_t *dst, uint8_t *session_id, int len); int cw_result_is_ok( int rc ); +int cw_put_msg(struct conn *conn, uint8_t * rawout); /** * @} diff --git a/src/cw/cw_ktv_read_file.c b/src/cw/cw_ktv_read_file.c index a85ea421..690ce7f7 100644 --- a/src/cw/cw_ktv_read_file.c +++ b/src/cw/cw_ktv_read_file.c @@ -1,10 +1,11 @@ #include "ktv.h" + int cw_ktv_read_file(FILE * file, mavl_t ktv, mavl_t types) { - char key[256]; - char xtype[256]; + char key[CW_KTV_MAX_KEY_LEN]; + char type[256]; char val[2048]; @@ -13,38 +14,26 @@ int cw_ktv_read_file(FILE * file, mavl_t ktv, mavl_t types) do { - cw_KTV_t nktv, *nres; - - rc = cw_ktv_read_line(file,key,xtype,val); - if (rc == 0){ - printf("Got a line %s:%s:%s\n",key,xtype,val); - + + rc = cw_ktv_read_line(file,key,type,val); + if (rc != 0){ + continue; } - - typesearch.name=xtype; - /* printf("Searching for type: '%s'\n",xtype);*/ + + typesearch.name=type; + cwtype = mavl_get_ptr(types,&typesearch); if (cwtype != NULL){ - // printf("Yes! I know the type: %s\n",cwtype->name); + /*// printf("Yes! I know the type: %s\n",cwtype->name);*/ } else { printf("Unknown type: %s\n",typesearch.name); continue; } - - - + cw_ktv_add_from_str(ktv,key,cwtype,val); -/* nres = cwtype->from_str(&nktv,val); - if (nres !=NULL ){ - // printf("Yea, created from string\n"); - - nktv.key=cw_strdup(key); - mavl_add(ktv, &nktv, NULL); - } -*/ }while(rc==0); return 0; diff --git a/src/cw/lw_put_ac_descriptor.c b/src/cw/lw_put_ac_descriptor.c index 9ca2746b..9d1f518a 100644 --- a/src/cw/lw_put_ac_descriptor.c +++ b/src/cw/lw_put_ac_descriptor.c @@ -6,15 +6,17 @@ int lw_put_ac_descriptor(uint8_t * dst) { - uint8_t *d=dst; - d+=lw_put_byte(d,0); /* Cisco MWAR type */ +/* uint8_t *d=dst; + d+=lw_put_byte(d,0); / Cisco MWAR type / -// d+=lw_put_bstr(d,acinfo->hardware_version); /* length must be 4 */ -// d+=lw_put_bstr(d,acinfo->software_version); /* length must be 4 */ +// d+=lw_put_bstr(d,acinfo->hardware_version); / length must be 4 +// d+=lw_put_bstr(d,acinfo->software_version); / length must be 4 d+=lw_put_word(d,200); d+=lw_put_word(d,1000); d+=lw_put_word(d,2); d+=lw_put_word(d,2); //d+=lw_put_byte(d,acinfo->security); return d-dst; + */ + return 0; } diff --git a/src/cw/mavl.h b/src/cw/mavl.h index 002c829b..7ae4cc2d 100644 --- a/src/cw/mavl.h +++ b/src/cw/mavl.h @@ -181,9 +181,9 @@ struct mavliter { typedef struct mavliter mavliter_t; -union mavldata * mavliter_next ( mavliter_t *i ); +void * mavliter_next ( mavliter_t *i ); -union mavldata * mavliter_seek_set ( struct mavliter *i ); +void * mavliter_seek_set ( struct mavliter *i ); void mavliter_init ( mavliter_t *i, mavl_t t ); @@ -192,7 +192,7 @@ void * mavliter_get ( mavliter_t *i ); void * mavliter_get_ptr(mavliter_t *i); -extern union mavldata * mavliter_seek ( mavliter_t *i, void *d ); +void * mavliter_seek ( mavliter_t *i, void *d ); /** * Define a AVL Iterator varialble and accociate it with diff --git a/src/cw/mavliter_next.c b/src/cw/mavliter_next.c index 7a9f6e3d..117eb4a9 100644 --- a/src/cw/mavliter_next.c +++ b/src/cw/mavliter_next.c @@ -29,7 +29,7 @@ * @return the element or NULL if there is no next elemeent. */ -union mavldata * mavliter_next ( mavliter_t *i ) +void * mavliter_next ( mavliter_t *i ) { while ( i->stack_ptr ) { i->stack_ptr--; diff --git a/src/cw/mavliter_seek.c b/src/cw/mavliter_seek.c index 3467b54d..ac3cfb06 100644 --- a/src/cw/mavliter_seek.c +++ b/src/cw/mavliter_seek.c @@ -31,7 +31,7 @@ * @param d element to search for * @return element found or NULL if not found */ -union mavldata * mavliter_seek(mavliter_t *i,void *d) +void * mavliter_seek(mavliter_t *i,void *d) { int rc; if (!i->root) diff --git a/src/cw/mavliter_seek_set.c b/src/cw/mavliter_seek_set.c index d808c417..d841a60b 100644 --- a/src/cw/mavliter_seek_set.c +++ b/src/cw/mavliter_seek_set.c @@ -1,6 +1,6 @@ #include "mavl.h" -union mavldata * mavliter_seek_set ( struct mavliter *i ) +void * mavliter_seek_set ( struct mavliter *i ) { i->stack_ptr = 0; i->cur = i->root; diff --git a/src/wtp/discovery.c b/src/wtp/discovery.c index 645433c1..45107a09 100644 --- a/src/wtp/discovery.c +++ b/src/wtp/discovery.c @@ -10,6 +10,7 @@ #include "cw/log.h" #include "cw/dbg.h" #include "cw/timer.h" +#include "cw/cw.h" #include "wtp.h" diff --git a/src/wtp/image_update.c b/src/wtp/image_update.c index 19a2b4a2..d29a2725 100644 --- a/src/wtp/image_update.c +++ b/src/wtp/image_update.c @@ -24,7 +24,7 @@ int image_update() int rc = cw_send_request(conn, CAPWAP_MSG_IMAGE_DATA_REQUEST); - if (rc < 0) { + if (rc < 0) {h } if (rc != 0) { diff --git a/src/wtp/wtp_main.c b/src/wtp/wtp_main.c index 8082512b..ca891035 100644 --- a/src/wtp/wtp_main.c +++ b/src/wtp/wtp_main.c @@ -76,23 +76,32 @@ int main (int argc, char **argv) mavl_t global_cfg, types_tree; const cw_Type_t ** ti; + /* read command line args, results are in bootcfg */ parse_args(argc,argv, &bootcfg); + /* create an empty message set */ msgset = cw_msgset_create(); if (msgset==NULL){ cw_log(LOG_ERR, "Error creating msgset: %s", strerror(errno)); exit(EXIT_FAILURE); } - - global_cfg=cw_ktv_create(); - /* create types tree with default types */ + /* create an empty global config */ + global_cfg=cw_ktv_create(); + if (msgset==NULL){ + cw_log(LOG_ERR, "Error creating global_cfg: %s", strerror(errno)); + exit(EXIT_FAILURE); + } + + + /* create a types tree with default types */ types_tree = cw_ktv_create_types_tree(); for (ti=CW_KTV_STD_TYPES;*ti;ti++){ mavl_add_ptr(types_tree,*ti); } - + + /* read the initial config file */ file = fopen(bootcfg.cfgfilename,"r"); if (file == NULL){ cw_log(LOG_ERR,"Cant open file '%s':%s", strerror(errno)); @@ -100,6 +109,7 @@ int main (int argc, char **argv) } cw_ktv_read_file(file,global_cfg,types_tree); + cw_ktv_dump(global_cfg,DBG_INFO,"----- global cfg start -----","","----- global cfg end -----"); @@ -119,6 +129,7 @@ int main (int argc, char **argv) exit(EXIT_FAILURE); } + conn->detected = 1; conn->dtls_verify_peer=0; conn->dtls_mtu = 12000; diff --git a/wtp.project b/wtp.project index f35c1a13..3f566325 100644 --- a/wtp.project +++ b/wtp.project @@ -14,7 +14,6 @@ -