From 009bc169087e4f596f8e3b0ee5a56d77ae961670 Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Tue, 12 Apr 2016 05:47:55 +0000 Subject: [PATCH] More work to get radio operational state working FossilOrigin-Name: 5a8166b800110991971de4c0d46c8c20e16981a41eeb45ab7c6a8b8819d0472a --- src/wtp/configure.c | 4 +++ src/wtp/join.c | 2 +- src/wtp/run.c | 83 +++++++++++++++++++++++++++++++++++++++++++ src/wtp/wtp_main.c | 86 ++++----------------------------------------- 4 files changed, 95 insertions(+), 80 deletions(-) diff --git a/src/wtp/configure.c b/src/wtp/configure.c index b79fe4a8..833bd1d5 100644 --- a/src/wtp/configure.c +++ b/src/wtp/configure.c @@ -20,8 +20,12 @@ int configure() mbag_set_str(conn->local,CW_ITEM_AC_NAME,"abc"); mbag_set_byte(conn->config,CW_ITEM_WTP_MAC_TYPE,WTP_MAC_TYPE_BOTH); + /* for config status request send the whole config */ + mbag_t radios_upd = conn->radios_upd; + conn->radios_upd=conn->radios; int rc = cw_send_request(conn, CW_MSG_CONFIGURATION_STATUS_REQUEST); + conn->radios_upd=radios_upd; if (!cw_rcok(rc)) { if (rc > 0) { diff --git a/src/wtp/join.c b/src/wtp/join.c index a182cd1e..3b80532b 100644 --- a/src/wtp/join.c +++ b/src/wtp/join.c @@ -107,7 +107,7 @@ int run_join_d(struct sockaddr *sa) cw_log(LOG_ERR, "Can't create socket: %s\n", strerror(errno)); return -1; } - sock_set_recvtimeout(sockfd, 1); + sock_set_recvtimeout(sockfd, 15); conn->sock = sockfd; sock_copyaddr(&conn->addr, sa); diff --git a/src/wtp/run.c b/src/wtp/run.c index f8f1fad1..638feba1 100644 --- a/src/wtp/run.c +++ b/src/wtp/run.c @@ -24,6 +24,81 @@ #include "cw/conn.h" #include "wtp_interface.h" +#include "cw/dbg.h" +#include "cfg.h" + +int update =0; + +int handle_update_req(struct conn *conn, struct cw_action_in *a, uint8_t * data, + int len, struct sockaddr *from) +{ + if (a->msg_id == CW_MSG_CONFIGURATION_UPDATE_REQUEST){ + update =1; + + } + + return 0; + + MAVLITER_DEFINE(it, conn->incomming); + + mavliter_foreach(&it) { + mbag_item_t *item = mavliter_get(&it); + + + } + cfg_to_json(); + + return 0; + +} + + + + + +static void update_radio(struct conn * conn, int rid, mbag_t radio_upd, mbag_t radio,mbag_t iresult ) +{ +// mbag_item * admin mbag_get(radio_upd,CW_ITEM_RADIO_ADMIN_STATE, + + + printf("Updating radio with rid %d\n",rid); +} + +static void update_radios(struct conn * conn, mbag_t result) +{ + MAVLITER_DEFINE (it,conn->radios_upd); + mavliter_foreach(&it){ + struct mbag_item * item = mavliter_get(&it); + int rid = item->iid; + mbag_t radio = mbag_i_get_mbag(conn->radios,rid,NULL); + if (!radio){ + cw_dbg(DBG_ELEM_ERR,"Can't find radio with id %d",rid); + continue; + } + + mbag_t iresult = mbag_create(); + mbag_i_set_mbag(result,rid,iresult); + update_radio(conn,rid,item->data,radio,iresult); + } + +} + + +static void do_update(struct conn * conn) +{ + if (!update) + return; + update=0; + + mbag_t result = mbag_create(); + update_radios(conn,result); + cw_dbg(DBG_INFO, "Saving configuration ..."); + cfg_to_json(); + +} + + + int run() { @@ -32,6 +107,8 @@ int run() struct conn *conn = get_conn(); conn->capwap_state = CW_STATE_RUN; + conn->msg_end=handle_update_req; + do { int echo_interval = mbag_get_word(conn->config,CW_ITEM_CAPWAP_TIMERS,CAPWAP_TIMERS)&0xff; @@ -50,6 +127,12 @@ int run() if ( !cw_rcok(rc)) break; + + cw_dbg(DBG_X,"We hav a message processed"); + + do_update(conn); + + } if (rc<0 && errno == EAGAIN){ rc = cw_send_request(conn,CW_MSG_ECHO_REQUEST); diff --git a/src/wtp/wtp_main.c b/src/wtp/wtp_main.c index 2f9dcbf4..31850111 100644 --- a/src/wtp/wtp_main.c +++ b/src/wtp/wtp_main.c @@ -38,29 +38,6 @@ struct cw_actiondef capwap_actions; -int handle_update_req(struct conn *conn, struct cw_action_in *a, uint8_t * data, - int len, struct sockaddr *from) -{ - MAVLITER_DEFINE(it, conn->incomming); - - mavliter_foreach(&it) { - mbag_item_t *item = mavliter_get(&it); - -// printf("MBAG ITEM GOT: %s\n",item->id); - if (item->id == CW_ITEM_LOCATION_DATA) { - printf("Location Data %s\n",mbag_get_str(conn->incomming,CW_ITEM_LOCATION_DATA,"ups")); - - } - - } - cw_dbg(DBG_INFO, "Saving configuration ..."); - cfg_to_json(); - -// exit(0); - return 0; - -} - const char *t = CW_ITEM_WTP_NAME; @@ -128,14 +105,15 @@ int main() dtls_init(); + the_conn = conn_create_noq(-1, NULL); struct conn *conn = the_conn; conn->radios = mbag_i_create(); - conn->radios_upd=conn->radios; + conn->radios_upd=mbag_i_create(); + mbag_i_set_mbag(conn->radios,0,mbag_create()); -// mbag_i_set_mbag(conn->radios,1,mbag_create()); -// mbag_set_mbag(conn->radios,0xff,mbag_create()); + mbag_i_set_mbag(conn->radios_upd,0,mbag_create()); @@ -159,42 +137,22 @@ int main() exit(0); } - printf("add capwap80211\n"); int rc = mod->register_actions(&capwap_actions,MOD_MODE_BINDINGS); - printf("Out reg = %d\n",rc); - conn->detected = 1; conn->dtls_verify_peer=0; conn->dtls_mtu = 2000; - -/* - MAVLITER_DEFINE(it,capwap_actions.strelem); - mavliter_foreach(&it){ - struct cw_str *s = mavliter_get(&it); - - } -*/ - - ////cw_register_actions_capwap_80211_wtp(&capwap_actions); - conn->actions = &capwap_actions; + conn->outgoing = mbag_create(); conn->incomming = mbag_create(); conn->local = mbag_create(); - -// conn->base_rmac = get_base_rmac(); - -// conn->capwap_mode = CW_MODE_CAPWAP; - //conn->capwap_mode = CW_MODE_CISCO; + conn->config = mbag_create(); the_conn->strict_capwap = 0; - - conn->config = mbag_create(); - cfg_from_json(conn); setup_conf(conn); @@ -226,29 +184,6 @@ printf("Setting to 8 %p %p\n",mri,r); mod_init_config(mod,conn->config); cfg_to_json(); -// mbag_t board_data = mbag_create(); -// mbag_set_dword(board_data, CW_ITEM_WTP_BOARD_VENDOR, conf_vendor_id); - - -// mbag_set_bstrn(board_data, CW_ITEM_WTP_BOARD_MACADDRESS, conf_macaddress, -// conf_macaddress_len); -// mbag_set_bstr16n(board_data, CW_ITEM_WTP_BOARD_SERIALNO, -// bstr_data(conf_serial_no), bstr_len(conf_serial_no)); - -// mbag_set_bstr16n(board_data, CW_ITEM_WTP_BOARD_MODELNO, bstr_data(conf_model_no), -// bstr_len(conf_model_no)); - - - -// mbag_set_mbag(conn->config, CW_ITEM_WTP_BOARD_DATA, board_data); - - - - -// mbag_set_bstrv(conn->config, CW_ITEM_WTP_SOFTWARE_VERSION, sw); - -// printf("Board_data %p\n", board_data); - mbag_t mb = mbag_get_mbag(conn->config, CW_ITEM_WTP_BOARD_DATA, NULL); printf("mbag %p\n", mb); @@ -258,20 +193,15 @@ printf("Setting to 8 %p %p\n",mri,r); cw_acpriolist_set(acprios, "AC8new", strlen("AC8new"), 12); - //mbag_set_str(conn->config,CW_ITEM_LOCATION_DATA,"Berlin"); - //mbag_set_str(conn->config,CW_ITEM_WTP_NAME,"WTP Tube"); mbag_set_byte(conn->local, CW_ITEM_WTP_MAC_TYPE, 0); mbag_set_byte(conn->local, CW_ITEM_WTP_FRAME_TUNNEL_MODE, 0); - conn->wbid=1; -cw_set_msg_end_callback(conn->actions,CW_STATE_RUN,CW_MSG_CONFIGURATION_UPDATE_REQUEST,handle_update_req); -//cw_set_msg_end_callback(conn,CW_STATE_CONFIGURE,CW_MSG_CONFIGURATION_STATUS_RESPONSE,handle_update_req); - +// cw_set_msg_end_callback(conn->actions,CW_STATE_RUN,CW_MSG_CONFIGURATION_UPDATE_REQUEST,handle_update_req); if (!discovery()) @@ -279,8 +209,6 @@ cw_set_msg_end_callback(conn->actions,CW_STATE_RUN,CW_MSG_CONFIGURATION_UPDATE_R if (!join()) return -1; -// mavl_del_all(conn->incomming); -// conn->incomming = conn->config; if (!configure()) return -1;