From 8314c3aa98b27f8668c46b75f1a2a7393c52c4a1 Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Mon, 20 Apr 2015 19:28:22 +0000 Subject: [PATCH] WTP can save json now. FossilOrigin-Name: 9670c29689c90b8e4378e10b56682028dd690d58e1a69da0f584c4c770cd2110 --- src/capwap/Makefile | 2 +- src/capwap/action.c | 35 +++++++++++++++++++++++++++ src/capwap/action.h | 9 +++++++ src/capwap/capwap.h | 6 ++--- src/capwap/capwap_strings_result.c | 1 + src/capwap/cipwap_actions_wtp.c | 4 ++++ src/capwap/conn_process_packet.c | 2 +- src/capwap/cw_in_generic.c | 6 +++++ src/wtp/cfg.c | 5 ++-- src/wtp/cfg.json | 25 +++++++------------- src/wtp/wtp_main.c | 38 ++++++++++++++++++++++++++++++ 11 files changed, 108 insertions(+), 25 deletions(-) diff --git a/src/capwap/Makefile b/src/capwap/Makefile index ed8e914e..d7594156 100644 --- a/src/capwap/Makefile +++ b/src/capwap/Makefile @@ -109,7 +109,6 @@ LWAPPCISCOOBJS = \ CAPWAPOBJS= \ - wtpinfo.o \ aciplist.o \ lwmsg_init.o \ wtpinfo_lwreadelem_wtp_descriptor.o \ @@ -160,6 +159,7 @@ CAPWAPOBJS= \ avliter_seek.o \ + # wtpinfo.o \ diff --git a/src/capwap/action.c b/src/capwap/action.c index bf5f3a6d..e9faa8ee 100644 --- a/src/capwap/action.c +++ b/src/capwap/action.c @@ -59,6 +59,36 @@ static inline int cw_action_in_cmp(const void *elem1, const void *elem2) } + + +cw_action_fun_t cw_set_msg_end_callback(struct conn *conn, + int capwap_state,int msg_id, cw_action_fun_t callback) +{ + cw_action_in_t as; + /* prepare struct for search operation */ + as.capwap_state = capwap_state; + as.msg_id = msg_id; + as.vendor_id = 0; + as.elem_id = 0; + as.proto = 0; + + cw_action_in_t *af; + + + af = cw_actionlist_in_get(conn->actions->in, &as); + if (!af) + return NULL; + + cw_action_fun_t old = af->end; + af->end =callback; + return old; + + +} + + + + cw_action_in_t *cw_actionlist_in_add(cw_actionlist_in_t t, struct cw_action_in * a) { return cw_actionlist_add(t, a, sizeof(struct cw_action_in)); @@ -190,3 +220,8 @@ cw_action_in_t *cw_actionlist_in_set_msg_end_callback(cw_actionlist_in_t a, ar->end=fun; return ar; } + + + + + diff --git a/src/capwap/action.h b/src/capwap/action.h index 4450e24b..4eefa2dd 100644 --- a/src/capwap/action.h +++ b/src/capwap/action.h @@ -29,6 +29,8 @@ #include "intavltree.h" + + /* Generic functions and structs */ void * cw_actionlist_add(struct avltree *t, void *a, size_t s); @@ -51,9 +53,13 @@ struct cw_action_in{ uint8_t mand; }; +typedef int(*cw_action_fun_t)(struct conn *,struct cw_action_in *,uint8_t*,int ,struct sockaddr *); typedef struct cw_action_in cw_action_in_t; +extern cw_action_fun_t cw_set_msg_end_callback(struct conn *conn, + int capwap_state,int msg_id, cw_action_fun_t callback); + typedef struct avltree * cw_actionlist_in_t; @@ -69,6 +75,9 @@ extern cw_action_in_t *cw_actionlist_in_set_msg_end_callback(cw_actionlist_in_t int len,struct sockaddr *from)); +cw_action_fun_t cw_set_msg_end_callback(struct conn *conn, + int capwap_state,int msg_id, cw_action_fun_t callback); + /* Definitions for outgoing messages */ struct cw_action_out{ uint32_t msg_id; diff --git a/src/capwap/capwap.h b/src/capwap/capwap.h index 050a86a6..070decc8 100644 --- a/src/capwap/capwap.h +++ b/src/capwap/capwap.h @@ -542,10 +542,10 @@ extern int cw_readelem_vendor_specific_payload(void *data, int msgtype, int elem 13 Configuration Failure (Unable to Apply Requested Configuration - Service Not Provided) - - 14 Image Data Error (Invalid Checksum) - */ +#define CW_RESULT_IMAGE_DATA_INVALID_CHECKSUM 14 //Image Data Error (Invalid Checksum) + + #define CW_RESULT_IMAGE_DATA_IVALID_LENGTH 15 //Image Data Error (Invalid Data Length) #define CW_RESULT_IMAGE_DATA_ERROR 16 //Image Data Error (Other Error) diff --git a/src/capwap/capwap_strings_result.c b/src/capwap/capwap_strings_result.c index 19bf81bc..4c0d7510 100644 --- a/src/capwap/capwap_strings_result.c +++ b/src/capwap/capwap_strings_result.c @@ -6,6 +6,7 @@ struct cw_str capwap_strings_result[] = { {CW_RESULT_SUCCESS,"Success"}, /* 0 */ {CW_RESULT_MISSING_AC_LIST,"AC List Message Element MUST be Present"}, /* 1 */ {CW_RESULT_SUCCESS_NAT,"Success - NAT Detected"}, /* 2 */ + {CW_RESULT_IMAGE_DATA_INVALID_CHECKSUM,"Image Data Error (Invalid Checksum)"}, /* 14 */ {CW_RESULT_IMAGE_DATA_ERROR,"Image Data Error (Unspecified)"}, /* 16 */ {CW_RESULT_MISSING_MAND_ELEM,"Missing Mandatory Message Element"}, /* 20 */ diff --git a/src/capwap/cipwap_actions_wtp.c b/src/capwap/cipwap_actions_wtp.c index c6d4aee4..c9197a5d 100644 --- a/src/capwap/cipwap_actions_wtp.c +++ b/src/capwap/cipwap_actions_wtp.c @@ -28,6 +28,10 @@ cw_action_in_t cipwap_actions_wtp_in[] = { + {CW_VENDOR_ID_CISCO, 0, CW_STATE_RUN, CW_MSG_CONFIGURATION_UPDATE_REQUEST, CW_CISCO_RAD_NAME, + cw_in_generic, 0, MBAG_BSTR16,CW_ITEM_WTP_NAME,0,512} + , + {0, 0, 0} diff --git a/src/capwap/conn_process_packet.c b/src/capwap/conn_process_packet.c index 93a6dce5..aae9ff20 100644 --- a/src/capwap/conn_process_packet.c +++ b/src/capwap/conn_process_packet.c @@ -229,7 +229,7 @@ static int process_elements(struct conn *conn, uint8_t * rawmsg, int len,struct uint8_t *elems_ptr = cw_get_msg_elems_ptr(msg_ptr); uint8_t *elem; - /* avltree to bag the found mandatory elements */ + /* Create an avltree to catch the found mandatory elements */ conn->mand = intavltree_create(); /* iterate through message elements */ diff --git a/src/capwap/cw_in_generic.c b/src/capwap/cw_in_generic.c index 472a4473..e02fd178 100644 --- a/src/capwap/cw_in_generic.c +++ b/src/capwap/cw_in_generic.c @@ -47,6 +47,12 @@ int cw_in_generic(struct conn *conn, struct cw_action_in *a, uint8_t * data, int mbag_set_bstrn(itemstore, a->item_id, data, len); return 1; } + + if (a->itemtype == MBAG_BSTR16) { + mbag_set_bstr16n(itemstore, a->item_id, data, len); + return 1; + } + /* if (a->itemtype == MBAG_DATA) { mbag_set_data(itemstore, a->item_id, data, len); return 1; diff --git a/src/wtp/cfg.c b/src/wtp/cfg.c index 871270be..7c93f8a1 100644 --- a/src/wtp/cfg.c +++ b/src/wtp/cfg.c @@ -389,7 +389,7 @@ int mbag_tojson(char *dst, mbag_t m, struct mbag_itemdef *defs, int n) return d-dst; } -int tester() +int cfg_json_save() { struct conn * conn = get_conn(); char dst[4096]; @@ -398,8 +398,7 @@ int tester() printf("Json: %s\n",dst); - cw_save_file("cfg.save.json",dst,n); -exit(0); + cw_save_file("cfg.json",dst,n); } diff --git a/src/wtp/cfg.json b/src/wtp/cfg.json index bf80e154..418655be 100644 --- a/src/wtp/cfg.json +++ b/src/wtp/cfg.json @@ -1,21 +1,12 @@ { - "wtp_name":"TubeWTPx", + "wtp_name":"Tobias-zu-Hause", "hardware_version":["4232704",".x01000000"], "software_version":["4232704",".x08006e00"], + "wtp_board_data":{ + "vendor_id":"4232704", + "model_no":"AIR-LAP1131AG-E-K9", + "serial_no":"2045" + }, "location_data":"China", - "bssid": ".x003a9902fac0", - - "wtp_board_data" : { - "vendor_id": "4232704", - "model_no": "AIR-LAP1131AG-E-K9", - "serial_no": "2045" - }, - - - "acname_with_priority": { - "1":"Master-AC", - "2":"Cisco-AC" - }, - - -} + "bssid":"" +} \ No newline at end of file diff --git a/src/wtp/wtp_main.c b/src/wtp/wtp_main.c index 67cee526..19d5880e 100644 --- a/src/wtp/wtp_main.c +++ b/src/wtp/wtp_main.c @@ -17,6 +17,7 @@ #include "wtp_conf.h" #include "capwap/dbg.h" +#include "capwap/mavl.h" #include "jsmn.h" @@ -41,6 +42,33 @@ bstr_t get_base_rmac() } +int handle_update_req(struct conn *conn, struct cw_action_in *a, uint8_t * data, + int len,struct sockaddr *from) +{ + printf("There was an config update request\n"); + MAVLITER_DEFINE(it,conn->incomming); + printf("Here are the results\n"); + + mavliter_foreach(&it){ + mbag_item_t * item = mavliter_get(&it); + + printf("MBAG ITEM GOT: %d\n",item->id); + if (item->id == CW_ITEM_WTP_NAME) { + printf("Yea! WTP NAME\n"); + + printf("The name is %.*s\n",bstr16_len(item->data),bstr16_data(item->data)); + + } + + } + + cfg_json_save(); + return 0; + +} + + + int main() { @@ -133,11 +161,21 @@ conn->config=mbag_create(); mbag_set_byte(conn->local,CW_ITEM_WTP_FRAME_TUNNEL_MODE,0); + + +cw_set_msg_end_callback(conn,CW_STATE_RUN,CW_MSG_CONFIGURATION_UPDATE_REQUEST,handle_update_req); + + + the_conn->strict_capwap=0; discovery(); join(); configure(); changestate(); + +mavl_destroy(conn->incomming); +conn->incomming=conn->config; + run(); //image_update();