From 5fc5523ccce3b7b66869a7dff388471b18e9e898 Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Fri, 11 Mar 2016 17:16:13 +0000 Subject: [PATCH] Working on reboot statistics FossilOrigin-Name: 134a5b893fbd0a7a240b1a60113a3f071ae7ce83811392a87f4abd782cf3070c --- src/cw/capwap.h | 14 +++++----- src/cw/capwap_items.c | 5 ++++ src/cw/capwap_items.h | 9 ++++++ src/cw/mbag.h | 12 ++++++++ src/mod/capwap/capwap_actions_ac.c | 4 ++- src/wtp/setup_conf.c | 17 +++++++++++ src/wtp/wtp_main.c | 45 ++++++++++++++++++++++++++++++ 7 files changed, 98 insertions(+), 8 deletions(-) diff --git a/src/cw/capwap.h b/src/cw/capwap.h index f6fd04e8..72ff45b2 100644 --- a/src/cw/capwap.h +++ b/src/cw/capwap.h @@ -450,13 +450,13 @@ extern int cw_readelem_vendor_specific_payload(void *data, int msgtype, int elem enum cw_reboot_failure_types { - CW_REBOOT_FAILURE_TYPE_NOT_SUPPORTED=0, - CW_REBOOT_FAILURE_TYPE_AC_INITIATED=1, - CW_REBOOT_FAILURE_TYPE_LINK_FAILURE=2, - CW_REBOOT_FAILURE_TYPE_SOFTWARE_FAILURE=3, - CW_REBOOT_FAILURE_TYPE_HARDWARE_FAILURE=4, - CW_REBOOT_FAILURE_TYPE_OTHER_FAILURE=5, - CW_REBOOT_FAILURE_ONKNOWN + CW_REBOOT_TYPE_NOT_SUPPORTED=0, + CW_REBOOT_TYPE_AC_INITIATED=1, + CW_REBOOT_TYPE_LINK_FAILURE=2, + CW_REBOOT_TYPE_SOFTWARE_FAILURE=3, + CW_REBOOT_TYPE_HARDWARE_FAILURE=4, + CW_REBOOT_TYPE_OTHER_FAILURE=5, + CW_REBOOT_TYPE_FAILURE_ONKNOWN }; diff --git a/src/cw/capwap_items.c b/src/cw/capwap_items.c index a54e207f..58755a70 100644 --- a/src/cw/capwap_items.c +++ b/src/cw/capwap_items.c @@ -133,6 +133,11 @@ cisco_items or so */ {CW_ITEM_CISCO_BOARD_DATA_OPTIONS,CW_ITEM_NONE,MBAG_BSTR16}, +{CW_ITEM_WTP_REBOOT_STATISTICS,CW_ITEM_REBOOT_COUNT,MBAG_WORD}, +{CW_ITEM_WTP_REBOOT_STATISTICS,CW_ITEM_REBOOT_AC_INITIATED_COUNT,MBAG_WORD}, +{CW_ITEM_WTP_REBOOT_STATISTICS,CW_ITEM_REBOOT_OTHER_FAILURE_COUNT,MBAG_WORD}, + + {CW_ITEM_NONE} diff --git a/src/cw/capwap_items.h b/src/cw/capwap_items.h index 1f78432d..a104eb1a 100644 --- a/src/cw/capwap_items.h +++ b/src/cw/capwap_items.h @@ -173,6 +173,15 @@ extern const char CW_ITEM_RADIO_INFOS[]; extern const char CW_ITEM_ECN_SUPPORT[]; +#define CW_ITEM_REBOOT_COUNT "reboot_count" +#define CW_ITEM_REBOOT_AC_INITIATED_COUNT "ac_initiated" +#define CW_ITEM_REBOOT_LINK_FAILURE_COUNT "link_failure" +#define CW_ITEM_REBOOT_SW_FAILURE_COUNT "sw_failure" +#define CW_ITEM_REBOOT_HW_FAILURE_COUNT "hw_failure" +#define CW_ITEM_REBOOT_OTHER_FAILURE_COUNT "other_failure" +#define CW_ITEM_REBOOT_UNKNOWN_FAILURE_COUNT "unknown_failure" +#define CW_ITEM_REBOOT_LAST_FAILURE_TYPE "last_failure" + extern struct cw_itemdef capwap_itemdefs[]; diff --git a/src/cw/mbag.h b/src/cw/mbag.h index dc0966c8..d38ad486 100644 --- a/src/cw/mbag.h +++ b/src/cw/mbag.h @@ -177,6 +177,7 @@ static inline int mbag_set_word(mbag_t s, const char *id, uint16_t word) + static inline struct mbag_item * mbag_set_dword(mbag_t s, const char *id, uint32_t dword) { struct mbag_item *i = mbag_item_create(s, id); @@ -440,6 +441,17 @@ static inline mavl_t mbag_get_mbag_c(mbag_t s, const char *id, return avltree; } + + +static inline int mbag_inc_word(mbag_t s, const char * id) +{ + uint16_t w = mbag_get_word(s,id,0); + mbag_set_word(s,id,w+1); + return 1; +} + + + static inline mavl_t mbag_i_get_mbag_c(mbag_t s, uint32_t iid, mavl_t (creator) ()) { diff --git a/src/mod/capwap/capwap_actions_ac.c b/src/mod/capwap/capwap_actions_ac.c index 8e794ebb..7123a77c 100644 --- a/src/mod/capwap/capwap_actions_ac.c +++ b/src/mod/capwap/capwap_actions_ac.c @@ -293,6 +293,7 @@ static cw_action_in_t actions_in[] = { } , + /* AC Name - Config Status Request */ { .capwap_state = CW_STATE_CONFIGURE, .msg_id = CW_MSG_CONFIGURATION_STATUS_REQUEST, @@ -306,6 +307,7 @@ static cw_action_in_t actions_in[] = { } , + /* Radio Admin State - Config Status Request */ { .capwap_state = CW_STATE_CONFIGURE, .msg_id = CW_MSG_CONFIGURATION_STATUS_REQUEST, @@ -317,7 +319,7 @@ static cw_action_in_t actions_in[] = { } , - /* Vendor Specific Payload - Echo Request*/ + /* Vendor Specific Payload - Config Status Request */ { .capwap_state = CW_STATE_CONFIGURE, .msg_id = CW_MSG_CONFIGURATION_STATUS_REQUEST, diff --git a/src/wtp/setup_conf.c b/src/wtp/setup_conf.c index 520c5fb5..164253d4 100644 --- a/src/wtp/setup_conf.c +++ b/src/wtp/setup_conf.c @@ -61,6 +61,23 @@ int setup_conf(struct conn * conn) mbag_set_byte(conn->config,CW_ITEM_ECN_SUPPORT,get_ecn_support()); + n = mbag_get(conn->config,CW_ITEM_WTP_REBOOT_STATISTICS); + if (!n){ + mbag_t rs =mbag_create(); + mbag_set_mbag(conn->config, CW_ITEM_WTP_REBOOT_STATISTICS,rs); + + + mbag_set_dword(rs,CW_ITEM_REBOOT_COUNT,0); + mbag_set_dword(rs,CW_ITEM_REBOOT_AC_INITIATED_COUNT,0); + mbag_set_dword(rs,CW_ITEM_REBOOT_LINK_FAILURE_COUNT,0); + mbag_set_dword(rs,CW_ITEM_REBOOT_SW_FAILURE_COUNT,0); + mbag_set_dword(rs,CW_ITEM_REBOOT_HW_FAILURE_COUNT,0); + mbag_set_dword(rs,CW_ITEM_REBOOT_OTHER_FAILURE_COUNT,0); + mbag_set_dword(rs,CW_ITEM_REBOOT_UNKNOWN_FAILURE_COUNT,0); + mbag_set_dword(rs,CW_ITEM_REBOOT_LAST_FAILURE_TYPE, CW_REBOOT_TYPE_NOT_SUPPORTED); + } + + return 0; } diff --git a/src/wtp/wtp_main.c b/src/wtp/wtp_main.c index 896bd878..0b67ec60 100644 --- a/src/wtp/wtp_main.c +++ b/src/wtp/wtp_main.c @@ -60,9 +60,50 @@ int handle_update_req(struct conn *conn, struct cw_action_in *a, uint8_t * data, const char *t = CW_ITEM_WTP_NAME; +#include + + + +void update_reboot_stats(struct conn * conn, int cause) +{ + + + mbag_t rs = mbag_get_mbag(conn->config,CW_ITEM_WTP_REBOOT_STATISTICS,NULL); + uint16_t rv; + + printf("Loaded mbag %p\n",rs); + switch (cause){ + case CW_REBOOT_TYPE_NOT_SUPPORTED: + break; + case CW_REBOOT_TYPE_AC_INITIATED: + mbag_inc_word(rs,CW_ITEM_REBOOT_AC_INITIATED_COUNT); + break; + case CW_REBOOT_TYPE_OTHER_FAILURE: + mbag_inc_word(rs,CW_ITEM_REBOOT_OTHER_FAILURE_COUNT); + break; + + + + } + cfg_to_json(); +} + + +static void sig_handler(int sig) +{ + struct conn * conn = the_conn; //get_conn(); + printf("Ctrl+C pressed, updating reboot statistics for %p\n",conn); + + update_reboot_stats(conn, CW_REBOOT_TYPE_OTHER_FAILURE); + exit(0); +} + int main() { + signal (SIGINT, sig_handler); + + wtpconf_preinit(); @@ -165,6 +206,10 @@ int main() mbag_set_mbag(conn->config, CW_ITEM_WTP_BOARD_DATA, board_data); + mbag_t reboot_statistics = mbag_create(); + mbag_set_mbag(conn->config, CW_ITEM_WTP_REBOOT_STATISTICS,reboot_statistics); + + // mbag_set_bstrv(conn->config, CW_ITEM_WTP_SOFTWARE_VERSION, sw);