From d85ef39abe5219f87c4582b4962a02ed5a68cbc1 Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Fri, 4 Mar 2016 21:32:01 +0000 Subject: [PATCH] mod_capwap sends correct wtp descriptor now. FossilOrigin-Name: b1f651a31ae1205d51b70d058e975756b6a302d5c75b5a98e441f3369d5fe5d2 --- src/Config.mak | 2 ++ src/cw/bstr.h | 6 ++++-- src/cw/mbag.h | 4 ++-- src/mod/Mod.mak | 2 +- src/mod/capwap/capwap_out_wtp_descriptor.c | 10 ++++++++++ src/wtp/conf_uci.c | 8 ++++---- src/wtp/wtp_main.c | 22 +++++++++++++++++----- 7 files changed, 40 insertions(+), 14 deletions(-) diff --git a/src/Config.mak b/src/Config.mak index 05110677..bd720bbe 100644 --- a/src/Config.mak +++ b/src/Config.mak @@ -20,3 +20,5 @@ CC=clang +COMPDEFS=-DWITH_CW_LOG +COMPDEFS+=-DWITH_CW_LOG_DEBUG diff --git a/src/cw/bstr.h b/src/cw/bstr.h index 8290385a..8a8019fa 100644 --- a/src/cw/bstr.h +++ b/src/cw/bstr.h @@ -111,8 +111,8 @@ typedef uint8_t *bstr16_t; #define bstr16_data(s) (((uint8_t*)s)+2) /** - * Return the actual size of a bstr16_t string. That's the - * this objects needs in memory to be stored. + * Return the actual size of a bstr16_t string. That's the + * size this objects needs in memory to be stored. */ #define bstr16_size(l) (l+2) /** @@ -143,6 +143,8 @@ static inline uint8_t * bstr16_create(uint8_t *data, uint16_t len) uint8_t * bstr16_create_from_str(const char *s); extern uint8_t * bstr16_create_from_cfgstr(const char * s); +#define bstr16_replace bstr_replace + /** *@addtogroup BSTRTypes diff --git a/src/cw/mbag.h b/src/cw/mbag.h index 0f8d9f2e..5ec4a665 100644 --- a/src/cw/mbag.h +++ b/src/cw/mbag.h @@ -219,14 +219,14 @@ static inline int mbag_set_data(mbag_t s, const char *id, const struct mbag_type static inline bstrv_t mbag_set_bstrv(mbag_t s, const char *id, uint32_t vendor_id, - uint8_t * bstrv, int len) + uint8_t * version, int len) { mbag_item_t *i = mbag_item_create(s, id); if (!i) return NULL; i->type = MBAG_VENDORSTR; - i->data = bstrv_create(vendor_id,bstrv,len); + i->data = bstrv_create(vendor_id,version,len); return i->data; } diff --git a/src/mod/Mod.mak b/src/mod/Mod.mak index a253207e..fd53de40 100644 --- a/src/mod/Mod.mak +++ b/src/mod/Mod.mak @@ -5,7 +5,7 @@ include ../../Config.mak OBJS:=$(patsubst %.o,$(ARCH)/%.o,$(OBJS)) -CFLAGS = -Wall -g -O0 -D_REENTRANT -DWITH_IPV6 -DWITH_RMAC_SUPPORT -I ../../ -I../ +CFLAGS = -Wall -g -O0 -D_REENTRANT -DWITH_IPV6 $(COMPDEFS) -DWITH_RMAC_SUPPORT -I ../../ -I../ LIBDIR=../../lib/$(ARCH) diff --git a/src/mod/capwap/capwap_out_wtp_descriptor.c b/src/mod/capwap/capwap_out_wtp_descriptor.c index 822a98ba..d8a1c11a 100644 --- a/src/mod/capwap/capwap_out_wtp_descriptor.c +++ b/src/mod/capwap/capwap_out_wtp_descriptor.c @@ -45,7 +45,9 @@ int capwap_out_wtp_descriptor(struct conn *conn, struct cw_action_out *a, uint8_ cw_log(LOG_ERR, "Can't send Hardware Version in WTP Descriptor, not set."); } + i = mbag_get(mbag,CW_ITEM_WTP_SOFTWARE_VERSION); + if ( i ) { d += cw_put_version(d,CW_SUBELEM_WTP_SOFTWARE_VERSION,i->data); } @@ -53,6 +55,14 @@ int capwap_out_wtp_descriptor(struct conn *conn, struct cw_action_out *a, uint8_ cw_log(LOG_ERR, "Can't send Software Version in WTP descriptor, not set."); } + i = mbag_get(mbag,CW_ITEM_WTP_BOOTLOADER_VERSION); + if ( i ) { + d += cw_put_version(d,CW_SUBELEM_WTP_BOOTLOADER_VERSION,i->data); + } + else { + cw_log(LOG_ERR, "Can't send Software Version in WTP descriptor, not set."); + } + int len = d-dst-4; return len + cw_put_elem_hdr(dst,a->elem_id,len); diff --git a/src/wtp/conf_uci.c b/src/wtp/conf_uci.c index 6cc9b007..3a95c3e8 100644 --- a/src/wtp/conf_uci.c +++ b/src/wtp/conf_uci.c @@ -179,8 +179,8 @@ int read_config(const char * filename){ str = uci_lookup_option_string(ctx,section,"software_version"); if (str){ - uint8_t * s = bstr_create_from_cfgstr(str); - bstr_replace(&conf_software_version,s); + uint8_t * s = bstr16_create_from_cfgstr(str); + bstr16_replace(&conf_software_version,s); } str = uci_lookup_option_string(ctx,section,"hardware_version"); @@ -191,8 +191,8 @@ int read_config(const char * filename){ str = uci_lookup_option_string(ctx,section,"bootloader_version"); if (str){ - uint8_t * s = bstr_create_from_cfgstr(str); - bstr_replace(&conf_bootloader_version,s); + uint8_t * s = bstr16_create_from_cfgstr(str); + bstr16_replace(&conf_bootloader_version,s); } diff --git a/src/wtp/wtp_main.c b/src/wtp/wtp_main.c index 3e11b8b4..5e72d9ae 100644 --- a/src/wtp/wtp_main.c +++ b/src/wtp/wtp_main.c @@ -172,13 +172,25 @@ mavl_destroy(b); mbag_set_mbag(conn->config, CW_ITEM_WTP_BOARD_DATA, board_data); - bstrv_t hw = - bstrv_create(conf_vendor_id, bstr16_data(conf_hardware_version), - bstr16_len(conf_hardware_version)); + + mbag_set_bstrv(conn->config, CW_ITEM_WTP_HARDWARE_VERSION, + 0, + bstr16_data(conf_hardware_version), + bstr16_len(conf_hardware_version)); + + mbag_set_bstrv(conn->config, CW_ITEM_WTP_SOFTWARE_VERSION, + 0, + bstr16_data(conf_software_version), + bstr16_len(conf_software_version)); + + mbag_set_bstrv(conn->config, CW_ITEM_WTP_BOOTLOADER_VERSION, + 0, + bstr16_data(conf_bootloader_version), + bstr16_len(conf_bootloader_version)); - mbag_set_bstr16(conn->config, CW_ITEM_WTP_HARDWARE_VERSION, hw); - //mbag_set_bstr16(conn->config, CW_ITEM_WTP_SOFTWARE_VERSION,conf_software_version); + +// mbag_set_bstrv(conn->config, CW_ITEM_WTP_SOFTWARE_VERSION, sw); printf("Board_data %p\n", board_data);