Compare commits
	
		
			4 Commits
		
	
	
		
			66db979fdb
			...
			8a8381731f
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 8a8381731f | |||
| 6f4ba62080 | |||
| 0eb3e16932 | |||
| ca4a6b9996 | 
@ -5,3 +5,8 @@ Open Source CAPWAP WLC + WTP
 | 
				
			|||||||
Current status: early development.
 | 
					Current status: early development.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
See also http://7u83.cauwersin.com/?cat=28
 | 
					See also http://7u83.cauwersin.com/?cat=28
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					What you can do so far ...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Compile as stated in INSTALL.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -125,11 +125,22 @@ static int parse_args (int argc, char *argv[], struct bootcfg * bootcfg)
 | 
				
			|||||||
				exit(EXIT_FAILURE);
 | 
									exit(EXIT_FAILURE);
 | 
				
			||||||
			default:
 | 
								default:
 | 
				
			||||||
			case 'h': 
 | 
								case 'h': 
 | 
				
			||||||
				printf("%s: -vcmh\n",argv[0]);
 | 
								{
 | 
				
			||||||
 | 
									FILE *out = stdout;
 | 
				
			||||||
 | 
									fprintf(out, "Usage:");
 | 
				
			||||||
 | 
									fprintf(out, "%s [ options ] ",argv[0]);
 | 
				
			||||||
 | 
									fprintf(out, "\nOptions are:\n");
 | 
				
			||||||
 | 
									fprintf(out, "  -c <file>:  specify a config file\n");
 | 
				
			||||||
 | 
									fprintf(out, "  -p <path>:  specify a path where to search for modules\n");
 | 
				
			||||||
 | 
									fprintf(out, "  -v:         print version information\n");
 | 
				
			||||||
 | 
									fprintf(out, "  -d <level>: set debug level, multiple -d's are possible\n"); 
 | 
				
			||||||
 | 
									fprintf(out, "    <level> can be one of these:\n");
 | 
				
			||||||
 | 
									cw_dbg_print_help(out,"    ");
 | 
				
			||||||
				exit(EXIT_SUCCESS);
 | 
									exit(EXIT_SUCCESS);
 | 
				
			||||||
				break;
 | 
									break;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -700,7 +700,6 @@ struct wtpman *wtpman_create(int socklistindex, struct sockaddr *srcaddr,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void wtpman_addpacket(struct wtpman *wtpman, uint8_t * packet, int len)
 | 
					void wtpman_addpacket(struct wtpman *wtpman, uint8_t * packet, int len)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	cw_dbg(DBG_X,"ADD PACKET DETECTED %d",wtpman->conn->detected);
 | 
					 | 
				
			||||||
	conn_q_add_packet(wtpman->conn, packet, len);
 | 
						conn_q_add_packet(wtpman->conn, packet, len);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -7,8 +7,6 @@ CWSRC=\
 | 
				
			|||||||
	cw_check_missing_mand.c\
 | 
						cw_check_missing_mand.c\
 | 
				
			||||||
	cw_clock_lap.c\
 | 
						cw_clock_lap.c\
 | 
				
			||||||
	cw_dbg_elem.c\
 | 
						cw_dbg_elem.c\
 | 
				
			||||||
	cw_dbg_set_level.c\
 | 
					 | 
				
			||||||
	cw_dbg_set_level_from_str.c\
 | 
					 | 
				
			||||||
	cw_filename.c\
 | 
						cw_filename.c\
 | 
				
			||||||
	cw_format_dump.c\
 | 
						cw_format_dump.c\
 | 
				
			||||||
	cw_format_pkt_hdr.c\
 | 
						cw_format_pkt_hdr.c\
 | 
				
			||||||
@ -136,7 +134,8 @@ LOGSRC=\
 | 
				
			|||||||
	log_errno.c\
 | 
						log_errno.c\
 | 
				
			||||||
	log_syslog.c\
 | 
						log_syslog.c\
 | 
				
			||||||
	dbg.c\
 | 
						dbg.c\
 | 
				
			||||||
	dbg_strings.c\
 | 
					
 | 
				
			||||||
 | 
					#	dbg_strings.c\
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MISCSRC=\
 | 
					MISCSRC=\
 | 
				
			||||||
	bstr16_create.c\
 | 
						bstr16_create.c\
 | 
				
			||||||
 | 
				
			|||||||
@ -1,26 +0,0 @@
 | 
				
			|||||||
 | 
					 | 
				
			||||||
#include "dbg.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
  * Set debug level
 | 
					 | 
				
			||||||
  * @param level debug level to set, allowed values are enumberated in #cw_dbg_levels structure.
 | 
					 | 
				
			||||||
  * @param on 1: turns the specified debug level on, 0: turns the specified debug level off.
 | 
					 | 
				
			||||||
  */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void cw_dbg_set_level (int level, int on)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	switch (level) {
 | 
					 | 
				
			||||||
		case DBG_ALL:
 | 
					 | 
				
			||||||
			if (on)
 | 
					 | 
				
			||||||
				cw_dbg_opt_level = 0xffffffff;
 | 
					 | 
				
			||||||
			else
 | 
					 | 
				
			||||||
				cw_dbg_opt_level = 0;
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		default:
 | 
					 | 
				
			||||||
			if (on)
 | 
					 | 
				
			||||||
				cw_dbg_opt_level |= (level);
 | 
					 | 
				
			||||||
			else 
 | 
					 | 
				
			||||||
				cw_dbg_opt_level &= (0xffffffff) ^ (level);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@ -1,31 +0,0 @@
 | 
				
			|||||||
 | 
					 | 
				
			||||||
#include "dbg.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int cw_dbg_set_level_from_str(const char *level)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int blevel,on;
 | 
					 | 
				
			||||||
	const char *slevel;
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	switch(*level){
 | 
					 | 
				
			||||||
		case '-':
 | 
					 | 
				
			||||||
		case '!':
 | 
					 | 
				
			||||||
		case '~':
 | 
					 | 
				
			||||||
			on =0;
 | 
					 | 
				
			||||||
			slevel=level+1;
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		case '+':
 | 
					 | 
				
			||||||
			slevel=level+1;
 | 
					 | 
				
			||||||
			on=1;
 | 
					 | 
				
			||||||
			break;
 | 
					 | 
				
			||||||
		default:
 | 
					 | 
				
			||||||
			slevel=level;
 | 
					 | 
				
			||||||
			on=1;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	blevel = cw_strlist_get_id(cw_dbg_strings, slevel);
 | 
					 | 
				
			||||||
	if (blevel==-1)
 | 
					 | 
				
			||||||
		return 0;
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
	cw_dbg_set_level(blevel,on);
 | 
					 | 
				
			||||||
	return 1;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -37,16 +37,13 @@ static int read_struct(cw_Cfg_t * cfg,const cw_ValStruct_t * stru, const char *p
 | 
				
			|||||||
				break;
 | 
									break;
 | 
				
			||||||
			default:
 | 
								default:
 | 
				
			||||||
				l = stru[i].len;
 | 
									l = stru[i].len;
 | 
				
			||||||
				cw_dbg(DBG_X,"pos: %d, l:%d. len: %d",pos,l,len); 
 | 
					 | 
				
			||||||
				if (pos+l > len){
 | 
									if (pos+l > len){
 | 
				
			||||||
					l = pos<len ? len-pos : 0 ;
 | 
										l = pos<len ? len-pos : 0 ;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		cw_dbg(DBG_X,"This is l %d",l);
 | 
					 | 
				
			||||||
		l=stru[i].type->read(cfg,key,data+pos,l,stru[i].valguard);
 | 
							l=stru[i].type->read(cfg,key,data+pos,l,stru[i].valguard);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		
 | 
					 | 
				
			||||||
//		printf("READ STRUCT (%d): %s: %s\n",pos,key,dbstr);
 | 
					//		printf("READ STRUCT (%d): %s: %s\n",pos,key,dbstr);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		if (stru[i].len==-1){
 | 
							if (stru[i].len==-1){
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										232
									
								
								src/cw/dbg.c
									
									
									
									
									
								
							
							
						
						
									
										232
									
								
								src/cw/dbg.c
									
									
									
									
									
								
							@ -47,7 +47,114 @@ uint32_t cw_dbg_opt_display = DBG_DISP_COLORS;
 | 
				
			|||||||
/**
 | 
					/**
 | 
				
			||||||
 * Current debug level
 | 
					 * Current debug level
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
uint32_t cw_dbg_opt_level = 0;
 | 
					//static uint32_t cw_dbg_opt_level = 0;
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					static struct mavl * cw_dbg_opt_level = NULL;
 | 
				
			||||||
 | 
					static int dbg_cmp(const void *a, const void*b)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return (*((int*)a)-*((int*)b));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct cw_DbgStr {
 | 
				
			||||||
 | 
						int level;
 | 
				
			||||||
 | 
						const char *str;
 | 
				
			||||||
 | 
						const char ** str_list;
 | 
				
			||||||
 | 
						const char *descr;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const char * dbg_level_msg[] = {
 | 
				
			||||||
 | 
						"msg_in", "msg_out", NULL
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const char * dbg_level_pkt[] = {
 | 
				
			||||||
 | 
						"pkt_in", "pkt_out",  NULL
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const char * dbg_level_elem[]={
 | 
				
			||||||
 | 
						"elem_in","elem_out",NULL
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const char * dbg_level_elem_detail[] = {
 | 
				
			||||||
 | 
						"elem_detail_in", "elem_detail_out", NULL
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					static const char * dbg_level_elem_all[] = {
 | 
				
			||||||
 | 
						"elem", "elem_dmp", "elem_detail",NULL
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const char * dbg_level_std[] = {
 | 
				
			||||||
 | 
						"msg","elem","msg_err", "elem_err", "pkt_err", "rfc", "warn", "state", "info", NULL
 | 
				
			||||||
 | 
					/*		
 | 
				
			||||||
 | 
						DBG_MSG_IN, DBG_MSG_OUT,
 | 
				
			||||||
 | 
						DBG_ELEM_IN, DBG_ELEM_OUT,
 | 
				
			||||||
 | 
						DBG_MSG_ERR, DBG_ELEM_ERR,
 | 
				
			||||||
 | 
						DBG_PKT_ERR, DBG_RFC, DBG_WARN,
 | 
				
			||||||
 | 
						DBG_STATE, DBG_INFO,
 | 
				
			||||||
 | 
						0*/
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Debug strings
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct cw_DbgStr cw_dbg_strings[] = {
 | 
				
			||||||
 | 
						{ 0, 			"std", dbg_level_std, "some useful standard options to debug CAPWAP"},
 | 
				
			||||||
 | 
						{ 0,			"msg", dbg_level_msg, "messages headers" },
 | 
				
			||||||
 | 
						{ 0,			"pkt", dbg_level_pkt, "packet headers" },
 | 
				
			||||||
 | 
						{ 0,			"elem", dbg_level_elem, "message elemenst" },
 | 
				
			||||||
 | 
						{ 0, 			"elem_detail", dbg_level_elem_detail, "details for message elements"},
 | 
				
			||||||
 | 
						{ 0, 			"elem_all", dbg_level_elem_all,"all possible elem options"},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						{ DBG_WARN,		"warn", NULL, "warnings" },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						{ DBG_ELEM_ERR, 	"elem_err", NULL, "errors in elements" },
 | 
				
			||||||
 | 
						{ DBG_PKT_ERR,		"pkt_err", NULL, "packets with errors which are usually would be discard" },
 | 
				
			||||||
 | 
						{ DBG_MSG_ERR,		"msg_err", NULL, "message errors"},
 | 
				
			||||||
 | 
						{ DBG_RFC,		"rfc", NULL, "errors related to RFC5415/RFC5416 viloations" },
 | 
				
			||||||
 | 
						{ DBG_CFG_UPDATES, 	"cfg_updates",NULL, "show configuration aupdates" },
 | 
				
			||||||
 | 
						{ DBG_MOD,		"mod",NULL, "module related"},
 | 
				
			||||||
 | 
						{ DBG_MOD_DETAIL,	"mod_detail",NULL, "module related details"},
 | 
				
			||||||
 | 
						{ DBG_STATE,		"state",NULL, "CAWPAP states" },
 | 
				
			||||||
 | 
						{ DBG_MSG_COMPOSE,	"msg_compose",NULL,"message composing details" },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						{ DBG_INFO,		"info", NULL, "several infos are displayed" },
 | 
				
			||||||
 | 
						{ DBG_PKT_IN,		"pkt_in",NULL, "headers of incomming packets."  },
 | 
				
			||||||
 | 
						{ DBG_PKT_OUT,		"pkt_out",NULL, "headers out outgoing packets." },
 | 
				
			||||||
 | 
						{ DBG_PKT_DMP_IN,	"pkt_dmp_in",NULL, "hex-dump incomming packets" },
 | 
				
			||||||
 | 
						{ DBG_PKT_DMP_OUT,	"pkt_dmp_out",NULL, "hex-dump outgoing packets"  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						{ DBG_MSG_IN,		"msg_in", NULL, "incomming messages" },
 | 
				
			||||||
 | 
						{ DBG_MSG_OUT,		"msg_out", NULL, "outgoing messages" },
 | 
				
			||||||
 | 
						{ DBG_MSG_DMP_IN,	"msg_dmp_in", NULL, "hex-dump incomming messages" },
 | 
				
			||||||
 | 
						{ DBG_MSG_DMP_OUT,	"msg_dmp_out", NULL,"hex-dump of outgong messages"  },
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						{ DBG_ELEM_IN,  	"elem_in", NULL, "elements of incomming messages"},
 | 
				
			||||||
 | 
						{ DBG_ELEM_OUT, 	"elem_out", NULL, "elements of outgoing messages"},
 | 
				
			||||||
 | 
						{ DBG_ELEM_DETAIL_IN, 	"elem_detail_in", NULL, "details of incomming message elements" },
 | 
				
			||||||
 | 
						{ DBG_ELEM_DETAIL_OUT, 	"elem_detail_out",NULL, "details of outgoing message elememnts" },
 | 
				
			||||||
 | 
						{ DBG_ELEM_DMP, 	"elem_dmp", NULL, "hex-dump of each message element"},
 | 
				
			||||||
 | 
						{ DBG_ELEM_VNDR,	"elem_vndr", NULL, "expand vendor specific payloads"},	
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						{ DBG_DTLS, 		"dtls",NULL, "DTLS related stuff"},
 | 
				
			||||||
 | 
						{ DBG_DTLS_BIO,		"dtls_bio",NULL, "DTLS BIO releated" },
 | 
				
			||||||
 | 
						{ DBG_DTLS_BIO_DMP,	"dtls_bio_dmp",NULL, "hex-dump dtls packets" },
 | 
				
			||||||
 | 
						{ DBG_DTLS_DETAIL, 	"dtls_detail",NULL, "DTLS detailed messages"},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						{ DBG_X,		"x", NULL, "only for developers" },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						{ DBG_ALL, 		"all", NULL, "all debug levels at once"},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						{ 0, NULL } 
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 *@}
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -185,13 +292,19 @@ const char *get_dbg_color_ontext(int level)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int cw_dbg_is_level(int level)
 | 
					int cw_dbg_is_level(int level)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (level > 1 && (level &1))
 | 
						if (cw_dbg_opt_level == NULL)
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return mavl_get(cw_dbg_opt_level,&level) == NULL ? 0:1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//	if (level > 1 && (level &1))
 | 
				
			||||||
		return 1;
 | 
							return 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*	if (level >= DBG_ALL ){
 | 
					/*	if (level >= DBG_ALL ){
 | 
				
			||||||
		return 1;
 | 
							return 1;
 | 
				
			||||||
	}*/
 | 
						}*/
 | 
				
			||||||
	return (cw_dbg_opt_level & (level));
 | 
					//	return (cw_dbg_opt_level & (level));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -428,10 +541,123 @@ void cw_dbg_elem(int level, struct cw_Conn *conn, int msg,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					  * Set debug level
 | 
				
			||||||
 | 
					  * @param level debug level to set, allowed values are enumberated in #cw_dbg_levels structure.
 | 
				
			||||||
 | 
					  * @param on 1: turns the specified debug level on, 0: turns the specified debug level off.
 | 
				
			||||||
 | 
					  */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void cw_dbg_set_level (int level, int on)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int exists;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (cw_dbg_opt_level == NULL){
 | 
				
			||||||
 | 
							cw_dbg_opt_level = mavl_create(dbg_cmp,NULL,sizeof(int));
 | 
				
			||||||
 | 
							if (cw_dbg_opt_level == NULL)
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (on){
 | 
				
			||||||
 | 
							mavl_insert(cw_dbg_opt_level,&level,&exists);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else 
 | 
				
			||||||
 | 
							mavl_del(cw_dbg_opt_level,&level);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
						switch (level) {
 | 
				
			||||||
 | 
							case DBG_ALL:
 | 
				
			||||||
 | 
								if (on)
 | 
				
			||||||
 | 
									cw_dbg_opt_level = 0xffffffff;
 | 
				
			||||||
 | 
								else
 | 
				
			||||||
 | 
									cw_dbg_opt_level = 0;
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							default:
 | 
				
			||||||
 | 
								if (on)
 | 
				
			||||||
 | 
									cw_dbg_opt_level |= (level);
 | 
				
			||||||
 | 
								else 
 | 
				
			||||||
 | 
									cw_dbg_opt_level &= (0xffffffff) ^ (level);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						*/
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int cw_dbg_set_level_from_str0(const char *level,int on)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int i,all;
 | 
				
			||||||
 | 
						all = strcmp(level,"all")==0 ? 1: 0;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						for(i=0; cw_dbg_strings[i].str != NULL; i++){
 | 
				
			||||||
 | 
							if (strcmp(cw_dbg_strings[i].str,level)==0 || all){
 | 
				
			||||||
 | 
								if (cw_dbg_strings[i].str_list==NULL)
 | 
				
			||||||
 | 
									cw_dbg_set_level(cw_dbg_strings[i].level,on);
 | 
				
			||||||
 | 
								else {
 | 
				
			||||||
 | 
									const char **l;
 | 
				
			||||||
 | 
									for (l=cw_dbg_strings[i].str_list; *l; l++){
 | 
				
			||||||
 | 
										if (!cw_dbg_set_level_from_str0(*l,on)){
 | 
				
			||||||
 | 
											stop();
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if (!all)
 | 
				
			||||||
 | 
									return 1;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}	
 | 
				
			||||||
 | 
						if (all)
 | 
				
			||||||
 | 
							return 1;
 | 
				
			||||||
 | 
					/*	blevel = cw_strlist_get_id(cw_dbg_strings, slevel);
 | 
				
			||||||
 | 
						if (blevel==-1)
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
					*/		
 | 
				
			||||||
 | 
					//	cw_dbg_set_level(blevel,on);
 | 
				
			||||||
 | 
					//	return 1;
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int cw_dbg_set_level_from_str(const char *level)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int on;
 | 
				
			||||||
 | 
						const char *slevel;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						switch(*level){
 | 
				
			||||||
 | 
							case '-':
 | 
				
			||||||
 | 
							case '!':
 | 
				
			||||||
 | 
							case '~':
 | 
				
			||||||
 | 
								on =0;
 | 
				
			||||||
 | 
								slevel=level+1;
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							case '+':
 | 
				
			||||||
 | 
								slevel=level+1;
 | 
				
			||||||
 | 
								on=1;
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							default:
 | 
				
			||||||
 | 
								slevel=level;
 | 
				
			||||||
 | 
								on=1;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return cw_dbg_set_level_from_str0(slevel,on);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void cw_dbg_print_help(FILE *out, const char * prefix)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct cw_DbgStr *s;
 | 
				
			||||||
 | 
						for (s=cw_dbg_strings; s->str != NULL; s++){
 | 
				
			||||||
 | 
							const char * descr = s->descr!=NULL ? s->descr : "";
 | 
				
			||||||
 | 
							fprintf(out,"%s%s: %s",prefix,s->str,descr);
 | 
				
			||||||
 | 
							if (s->str_list != NULL){
 | 
				
			||||||
 | 
								const char **l;
 | 
				
			||||||
 | 
								char *sp="";
 | 
				
			||||||
 | 
								fprintf(out," (");
 | 
				
			||||||
 | 
								for(l = s->str_list; *l!=NULL; l++){
 | 
				
			||||||
 | 
									fprintf(out,"%s%s",sp,*l);
 | 
				
			||||||
 | 
									sp=" ";
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								fprintf(out,")");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							fprintf(out,"\n");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
void dbg_istore_dmp(mbag_t s)
 | 
					void dbg_istore_dmp(mbag_t s)
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										76
									
								
								src/cw/dbg.h
									
									
									
									
									
								
							
							
						
						
									
										76
									
								
								src/cw/dbg.h
									
									
									
									
									
								
							@ -48,91 +48,91 @@
 | 
				
			|||||||
 */ 
 | 
					 */ 
 | 
				
			||||||
enum cw_dbg_levels{
 | 
					enum cw_dbg_levels{
 | 
				
			||||||
	/** Show headers of incomming/outgoing CAPWAP packets */
 | 
						/** Show headers of incomming/outgoing CAPWAP packets */
 | 
				
			||||||
	DBG_PKT_IN 	= (1<<0), 
 | 
						DBG_PKT_IN 	= 1, 
 | 
				
			||||||
	DBG_PKT_OUT 	= (1<<1),	
 | 
						DBG_PKT_OUT,	
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/** Hex-dump incomming/outgoing CAPWAP packets */
 | 
						/** Hex-dump incomming/outgoing CAPWAP packets */
 | 
				
			||||||
	DBG_PKT_DMP_IN	= (1<<3),
 | 
						DBG_PKT_DMP_IN,
 | 
				
			||||||
	DBG_PKT_DMP_OUT = (1<<4),
 | 
						DBG_PKT_DMP_OUT,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/** Incomming CAPWAP packets with errors, wich would
 | 
						/** Incomming CAPWAP packets with errors, wich would
 | 
				
			||||||
	    usually silently discarded */ 
 | 
						    usually silently discarded */ 
 | 
				
			||||||
	DBG_PKT_ERR	= (1<<5),
 | 
						DBG_PKT_ERR,
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/** Display incomming/outgoing CAPWAP/LWAPP messages */
 | 
						/** Display incomming/outgoing CAPWAP/LWAPP messages */
 | 
				
			||||||
	DBG_MSG_IN	= (1<<6),
 | 
						DBG_MSG_IN,
 | 
				
			||||||
	DBG_MSG_OUT	= (1<<7),
 | 
						DBG_MSG_OUT,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/** Show hex-dump of messages */
 | 
						/** Show hex-dump of messages */
 | 
				
			||||||
	DBG_MSG_DMP_IN	= (1<<8),
 | 
						DBG_MSG_DMP_IN,
 | 
				
			||||||
	DBG_MSG_DMP_OUT	= (1<<9),
 | 
						DBG_MSG_DMP_OUT,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/** Message errors */
 | 
						/** Message errors */
 | 
				
			||||||
	DBG_MSG_ERR	= (1<<10),
 | 
						DBG_MSG_ERR,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/** Show message elements in incomming/outgoing messages */
 | 
						/** Show message elements in incomming/outgoing messages */
 | 
				
			||||||
	DBG_ELEM_IN	= (1<<11),
 | 
						DBG_ELEM_IN,
 | 
				
			||||||
	DBG_ELEM_OUT	= (1<<12),
 | 
						DBG_ELEM_OUT,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/** Show message element details  */
 | 
						/** Show message element details  */
 | 
				
			||||||
	DBG_ELEM_DETAIL_IN = (1<<13),
 | 
						DBG_ELEM_DETAIL_IN,
 | 
				
			||||||
	DBG_ELEM_DETAIL_OUT = (1<<14),
 | 
						DBG_ELEM_DETAIL_OUT,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/** Error in msg elements */
 | 
						/** Error in msg elements */
 | 
				
			||||||
	DBG_ELEM_ERR	= (1<<15),
 | 
						DBG_ELEM_ERR,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/** hex dump elements */	
 | 
						/** hex dump elements */	
 | 
				
			||||||
	DBG_ELEM_DMP	= (1<<16),
 | 
						DBG_ELEM_DMP,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/** General infos, like CAPWAP state */
 | 
						/** General infos, like CAPWAP state */
 | 
				
			||||||
	DBG_INFO	= (1<<17),	
 | 
						DBG_INFO,	
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/** Misc. warnings */
 | 
						/** Misc. warnings */
 | 
				
			||||||
	DBG_WARN	= (1<<18),
 | 
						DBG_WARN,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/** RFC related */
 | 
						/** RFC related */
 | 
				
			||||||
	DBG_RFC		= (1<<19),
 | 
						DBG_RFC,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/** DTLS related messages */
 | 
						/** DTLS related messages */
 | 
				
			||||||
	DBG_DTLS	= (1<<20),
 | 
						DBG_DTLS,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/** DTLS BIOs in/out */
 | 
						/** DTLS BIOs in/out */
 | 
				
			||||||
	DBG_DTLS_BIO	= (1<<21),
 | 
						DBG_DTLS_BIO,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/** Dump DTLS BIO i/o */
 | 
						/** Dump DTLS BIO i/o */
 | 
				
			||||||
	DBG_DTLS_BIO_DMP = (1<<22),
 | 
						DBG_DTLS_BIO_DMP,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/** Show DTLS Details */
 | 
						/** Show DTLS Details */
 | 
				
			||||||
	DBG_DTLS_DETAIL	= (1<<23),
 | 
						DBG_DTLS_DETAIL,
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
//	DBG_CFG_DMP	= (1<<20),
 | 
					//	DBG_CFG_DMP,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//	DBG_CFG_SET	= (1<<21),
 | 
					//	DBG_CFG_SET,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/** Debug Mods */
 | 
						/** Debug Mods */
 | 
				
			||||||
	DBG_MOD		= (1<<24),
 | 
						DBG_MOD,
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
       	/**Debug State machine */
 | 
					       	/**Debug State machine */
 | 
				
			||||||
	DBG_STATE	= (1<<25),
 | 
						DBG_STATE,
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	DBG_MSG_COMPOSE	= (1<<26),
 | 
						DBG_MSG_COMPOSE,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	DBG_CFG_UPDATES	= (1<<27),
 | 
						DBG_CFG_UPDATES,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	DBG_ELEM_VNDR	= (1<<28),
 | 
						DBG_ELEM_VNDR,
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	DBG_X		= (1<<30),
 | 
						DBG_X,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	DBG_MOD_DETAIL	= (1<<31),
 | 
						DBG_MOD_DETAIL,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	DBG_ALL 	= (0x7fffffff),
 | 
						DBG_ALL,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	DBG_ELEM_DMP_IN	= 7,
 | 
						DBG_ELEM_DMP_IN,
 | 
				
			||||||
	DBG_ELEM_DMP_OUT = 9,
 | 
						DBG_ELEM_DMP_OUT,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@ -192,8 +192,8 @@ void cw_dbg_dmp(int level, const uint8_t * data, int len, const char *format, ..
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern uint32_t cw_dbg_opt_display;
 | 
					extern uint32_t cw_dbg_opt_display;
 | 
				
			||||||
extern uint32_t cw_dbg_opt_level;
 | 
					//extern uint32_t cw_dbg_opt_level;
 | 
				
			||||||
extern struct cw_StrListElem cw_dbg_strings[];
 | 
					//extern struct cw_StrListElem cw_dbg_strings[];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
#define cw_dbg cw_dbg_colored
 | 
					#define cw_dbg cw_dbg_colored
 | 
				
			||||||
@ -243,6 +243,8 @@ void cw_dbg_ktv_dump(mavl_t ktv, uint32_t dbglevel,
 | 
				
			|||||||
*/
 | 
					*/
 | 
				
			||||||
int cw_dbg_is_level(int level);
 | 
					int cw_dbg_is_level(int level);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void cw_dbg_print_help(FILE *out, const char * prefix);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define stop() printf("STOP IN %s:%d - %s\n", __FILE__, __LINE__, __FUNCTION__); exit(1)
 | 
					#define stop() printf("STOP IN %s:%d - %s\n", __FILE__, __LINE__, __FUNCTION__); exit(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -45,7 +45,6 @@ char *format_s_hex_bytes(char *dst, const char *format, const char *delim,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
int cw_format_scan_hex_bytes(uint8_t *dst,const char *s, int len);
 | 
					int cw_format_scan_hex_bytes(uint8_t *dst,const char *s, int len);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct avltree;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Format bytes as a hex string. Hexadecimal letters are lower-case.
 | 
					 * Format bytes as a hex string. Hexadecimal letters are lower-case.
 | 
				
			||||||
 | 
				
			|||||||
@ -137,7 +137,7 @@
 | 
				
			|||||||
#define LW_ELEM_DIRECT_SEQUENCE_CONTROL			14
 | 
					#define LW_ELEM_DIRECT_SEQUENCE_CONTROL			14
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define LW_ELEM_CHANGE_STATE_EVENT			26
 | 
					#define LW_ELEM_CHANGE_STATE_EVENT			26
 | 
				
			||||||
#define LW_ELEM_80211_DELETE_WLAN			28
 | 
					#define LWAPP_ELEM_80211_DELETE_WLAN			28
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define LW_ELEM_AC_NAME					31
 | 
					#define LW_ELEM_AC_NAME					31
 | 
				
			||||||
#define LW_ELEM_LOCATION_DATA				35
 | 
					#define LW_ELEM_LOCATION_DATA				35
 | 
				
			||||||
 | 
				
			|||||||
@ -56,8 +56,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#define CISCO_ELEM_RRM_LOAD			25					/* 25 */
 | 
					#define CISCO_ELEM_RRM_LOAD			25					/* 25 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define CISCO_ELEM_DELETE_WLAN			LWAPP_ELEM_80211_DELETE_WLAN		/* 28 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CW_CISCO_80211_DELETE_WLAN		LW_ELEM_80211_DELETE_WLAN		/* 28 */
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CW_CISCO_MWAR_NAME			LW_ELEM_AC_NAME				/* 31 */
 | 
					#define CW_CISCO_MWAR_NAME			LW_ELEM_AC_NAME				/* 31 */
 | 
				
			||||||
#define CISCO_ELEM_33				33
 | 
					#define CISCO_ELEM_33				33
 | 
				
			||||||
@ -77,6 +77,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#define CISCO_ELEM_WTP_BOARD_DATA		LW_ELEM_WTP_BOARD_DATA			/* 50 */
 | 
					#define CISCO_ELEM_WTP_BOARD_DATA		LW_ELEM_WTP_BOARD_DATA			/* 50 */
 | 
				
			||||||
#define CISCO_ELEM_BCAST_SSID_MODE		LWAPP_ELEM_BCAST_SSID_MODE		/* 51 */
 | 
					#define CISCO_ELEM_BCAST_SSID_MODE		LWAPP_ELEM_BCAST_SSID_MODE		/* 51 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CISCO_ELEM_AP_MODE_AND_TYPE		LW_ELEM_80211_WTP_MODE_AND_TYPE		/* 54 */
 | 
					#define CISCO_ELEM_AP_MODE_AND_TYPE		LW_ELEM_80211_WTP_MODE_AND_TYPE		/* 54 */
 | 
				
			||||||
#define CISCO_ELEM_AP_QOS			LW_ELEM_QOS				/* 57 */
 | 
					#define CISCO_ELEM_AP_QOS			LW_ELEM_QOS				/* 57 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -31,6 +31,7 @@
 | 
				
			|||||||
#define CISCO_LWELEM_9				9
 | 
					#define CISCO_LWELEM_9				9
 | 
				
			||||||
#define CISCO_LWELEM_AP_MFP_CAP_SUBTYPE		11
 | 
					#define CISCO_LWELEM_AP_MFP_CAP_SUBTYPE		11
 | 
				
			||||||
#define CISCO_LWELEM_AP_MFP_CONFIG_SUBTYPE	14
 | 
					#define CISCO_LWELEM_AP_MFP_CONFIG_SUBTYPE	14
 | 
				
			||||||
 | 
					#define CISCO_LWELEM_15				15
 | 
				
			||||||
#define CISCO_LWELEM_AP_USERNAME_PASSWORD	18
 | 
					#define CISCO_LWELEM_AP_USERNAME_PASSWORD	18
 | 
				
			||||||
#define LW_CISCO_MANAGER_IP_ADDR		19
 | 
					#define LW_CISCO_MANAGER_IP_ADDR		19
 | 
				
			||||||
#define CISCO_LWELEM_DISCOVERY_PROTOCOL		20
 | 
					#define CISCO_LWELEM_DISCOVERY_PROTOCOL		20
 | 
				
			||||||
@ -43,6 +44,7 @@
 | 
				
			|||||||
#define CISCO_LWELEM_33				33
 | 
					#define CISCO_LWELEM_33				33
 | 
				
			||||||
#define CISCO_LWELEM_AP_ETHERNET_PORT_SUBTYPE	34
 | 
					#define CISCO_LWELEM_AP_ETHERNET_PORT_SUBTYPE	34
 | 
				
			||||||
#define CISCO_LWELEM_AP_LOGHOST_CONFIG		36
 | 
					#define CISCO_LWELEM_AP_LOGHOST_CONFIG		36
 | 
				
			||||||
 | 
					#define CISCO_LWELEM_37				37
 | 
				
			||||||
#define CISCO_LWELEM_MCAST_MGID_INFO		39
 | 
					#define CISCO_LWELEM_MCAST_MGID_INFO		39
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define CISCO_LWELEM_AP_TELNET_SSH		44
 | 
					#define CISCO_LWELEM_AP_TELNET_SSH		44
 | 
				
			||||||
 | 
				
			|||||||
@ -434,7 +434,7 @@ static cw_ValStruct_t cisco_wtp_radio_config73[]={
 | 
				
			|||||||
	{CW_TYPE_WORD,"@cisco/occupancy-limit",2,-1},
 | 
						{CW_TYPE_WORD,"@cisco/occupancy-limit",2,-1},
 | 
				
			||||||
	{CW_TYPE_BYTE,"@cisco/cfg-period",1,-1},
 | 
						{CW_TYPE_BYTE,"@cisco/cfg-period",1,-1},
 | 
				
			||||||
	{CW_TYPE_WORD,"@cisco/cfp-maximum-duration",2,-1},
 | 
						{CW_TYPE_WORD,"@cisco/cfp-maximum-duration",2,-1},
 | 
				
			||||||
	{CW_TYPE_BSTR16,"bssid",6,-1},
 | 
						{CW_TYPE_BSTR16,"capwap80211/bssid",6,-1},
 | 
				
			||||||
	{CW_TYPE_WORD,"beacon-period",2,-1},
 | 
						{CW_TYPE_WORD,"beacon-period",2,-1},
 | 
				
			||||||
	{CW_TYPE_STR,"@cisco/country-string",3,-1},
 | 
						{CW_TYPE_STR,"@cisco/country-string",3,-1},
 | 
				
			||||||
	{CW_TYPE_STR,"country-string",2,-1},
 | 
						{CW_TYPE_STR,"country-string",2,-1},
 | 
				
			||||||
@ -535,6 +535,53 @@ static cw_ValStruct_t cisco_station_cfg_stru[]={
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static cw_ValStruct_t cisco_ap_qos73[]={
 | 
				
			||||||
 | 
						{CW_TYPE_BYTE,"tag-packets",1,-1},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						{CW_TYPE_BYTE,"uranium-queue-depth",1,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_WORD,"uranium-cwmin",2,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_WORD,"uranium-cwmax",2,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_BYTE,"uranium-aifs",1,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_WORD,"uranium-cbr",2,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_BYTE,"uranium-dot1p-tag",1,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_BYTE,"uranium-dscp-tag",1,-1},
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						{CW_TYPE_BYTE,"platinum-queue-depth",1,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_WORD,"platinum-cwmin",2,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_WORD,"platinum-cwmax",2,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_BYTE,"platinum-aifs",1,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_WORD,"platinum-cbr",2,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_BYTE,"platinum-dot1p-tag",1,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_BYTE,"platinum-dscp-tag",1,-1},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						{CW_TYPE_BYTE,"gold-queue-depth",1,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_WORD,"gold-cwmin",2,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_WORD,"gold-cwmax",2,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_BYTE,"gold-aifs",1,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_WORD,"gold-cbr",2,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_BYTE,"gold-dot1p-tag",1,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_BYTE,"gold-dscp-tag",1,-1},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						{CW_TYPE_BYTE,"silver-queue-depth",1,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_WORD,"silver-cwmin",2,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_WORD,"silver-cwmax",2,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_BYTE,"silver-aifs",1,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_WORD,"silver-cbr",2,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_BYTE,"silver-dot1p-tag",1,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_BYTE,"silver-dscp-tag",1,-1},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						{CW_TYPE_BYTE,"bronze-queue-depth",1,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_WORD,"bronze-cwmin",2,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_WORD,"bronze-cwmax",2,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_BYTE,"bronze-aifs",1,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_WORD,"bronze-cbr",2,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_BYTE,"bronze-dot1p-tag",1,-1},
 | 
				
			||||||
 | 
						{CW_TYPE_BYTE,"bronze-dscp-tag",1,-1},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						{CW_TYPE_BSTR16, "rest", -1, -1},
 | 
				
			||||||
 | 
						{NULL,NULL,0,0}
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static cw_ValStruct_t cisco_ap_qos[]={
 | 
					static cw_ValStruct_t cisco_ap_qos[]={
 | 
				
			||||||
	{CW_TYPE_BYTE,"tag-packets",1,-1},
 | 
						{CW_TYPE_BYTE,"tag-packets",1,-1},
 | 
				
			||||||
	{CW_TYPE_BYTE,"uranium-queue-depth",1,-1},
 | 
						{CW_TYPE_BYTE,"uranium-queue-depth",1,-1},
 | 
				
			||||||
@ -580,6 +627,12 @@ static cw_ValStruct_t cisco_ap_qos[]={
 | 
				
			|||||||
	{NULL,NULL,0,0}
 | 
						{NULL,NULL,0,0}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static cw_ValStruct_t cisco_ap_core_dump[]={
 | 
					static cw_ValStruct_t cisco_ap_core_dump[]={
 | 
				
			||||||
	{CW_TYPE_IPADDRESS,"tftp-server",4,-1},
 | 
						{CW_TYPE_IPADDRESS,"tftp-server",4,-1},
 | 
				
			||||||
	{CW_TYPE_BOOL,"compression",1,16},
 | 
						{CW_TYPE_BOOL,"compression",1,16},
 | 
				
			||||||
@ -614,6 +667,9 @@ static cw_ValStruct_t cisco_rouge_detections[]={
 | 
				
			|||||||
	{NULL,NULL,0,0}
 | 
						{NULL,NULL,0,0}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static cw_ValStruct_t cisco_ap_venue_settings[]={
 | 
					static cw_ValStruct_t cisco_ap_venue_settings[]={
 | 
				
			||||||
	{CW_TYPE_WORD,"group",2,-1},
 | 
						{CW_TYPE_WORD,"group",2,-1},
 | 
				
			||||||
	{CW_TYPE_BYTE,"type",1,-1},
 | 
						{CW_TYPE_BYTE,"type",1,-1},
 | 
				
			||||||
@ -662,7 +718,6 @@ static cw_ValStruct_t cisco_add_wlan70[]={
 | 
				
			|||||||
	{CW_TYPE_STR,"cisco/profile-name",30,441},
 | 
						{CW_TYPE_STR,"cisco/profile-name",30,441},
 | 
				
			||||||
	{CW_TYPE_STR, "capwap80211/ssid",33,474},
 | 
						{CW_TYPE_STR, "capwap80211/ssid",33,474},
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	{NULL,NULL,0,0}
 | 
						{NULL,NULL,0,0}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
static int cisco_add_wlan_mkkey70(const char *pkey, uint8_t*data, int len, char *dst)
 | 
					static int cisco_add_wlan_mkkey70(const char *pkey, uint8_t*data, int len, char *dst)
 | 
				
			||||||
@ -690,7 +745,7 @@ static cw_ValStruct_t cisco_add_wlan73[]={
 | 
				
			|||||||
	{CW_TYPE_STR, "cisco/profile-name",30,545},
 | 
						{CW_TYPE_STR, "cisco/profile-name",30,545},
 | 
				
			||||||
	{CW_TYPE_BYTE, "cisco/allow-aaa-override",1,578},
 | 
						{CW_TYPE_BYTE, "cisco/allow-aaa-override",1,578},
 | 
				
			||||||
	{CW_TYPE_BYTE, "cisco/max-stations",1,580},
 | 
						{CW_TYPE_BYTE, "cisco/max-stations",1,580},
 | 
				
			||||||
	{CW_TYPE_STR, "capwap80211/ssid", 512 , 583},
 | 
						{CW_TYPE_STR, "capwap80211/ssid", -1 , 583},
 | 
				
			||||||
	{NULL,NULL,0,0}
 | 
						{NULL,NULL,0,0}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
static int cisco_add_wlan_mkkey73(const char *pkey, uint8_t*data, int len, char *dst)
 | 
					static int cisco_add_wlan_mkkey73(const char *pkey, uint8_t*data, int len, char *dst)
 | 
				
			||||||
@ -702,12 +757,7 @@ static int cisco_add_wlan_mkkey73(const char *pkey, uint8_t*data, int len, char
 | 
				
			|||||||
        return 1;
 | 
					        return 1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int cisco_in_del_wlan(struct cw_ElemHandler *eh, 
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static int cisco_in_lw_del_wlan(struct cw_ElemHandler *eh, 
 | 
					 | 
				
			||||||
		struct cw_ElemHandlerParams *params, 
 | 
							struct cw_ElemHandlerParams *params, 
 | 
				
			||||||
			uint8_t * data,	 int len)
 | 
								uint8_t * data,	 int len)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -777,6 +827,7 @@ static cw_ValStruct_t cisco_add_lwwlan73[]={
 | 
				
			|||||||
static int cisoc_add_lwwlan_mkkey73(const char *pkey, uint8_t*data, int len, char *dst)
 | 
					static int cisoc_add_lwwlan_mkkey73(const char *pkey, uint8_t*data, int len, char *dst)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int wlan_id,radio_id;
 | 
						int wlan_id,radio_id;
 | 
				
			||||||
 | 
						sprintf(dst,"update-wlan");
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
	stop();	
 | 
						stop();	
 | 
				
			||||||
	radio_id = cw_get_byte(data);
 | 
						radio_id = cw_get_byte(data);
 | 
				
			||||||
@ -1769,6 +1820,19 @@ static struct cw_ElemHandler handlers70[] = {
 | 
				
			|||||||
		cisco_phy_ht_control_stru
 | 
							cisco_phy_ht_control_stru
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						{ 
 | 
				
			||||||
 | 
							"Cisco LWAP Elem 15",			/* name */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							CISCO_LWELEM_15,				/* Element ID */
 | 
				
			||||||
 | 
							CW_VENDOR_ID_CISCO,CW_PROTO_LWAPP,	/* Vendor / Proto */
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							1,1024,					/* min/max length */
 | 
				
			||||||
 | 
							CW_TYPE_BSTR16,				/* type */
 | 
				
			||||||
 | 
							"cisco/lwelem15",			/* Key */
 | 
				
			||||||
 | 
							cw_in_radio_generic,				/* get */
 | 
				
			||||||
 | 
							cw_out_radio_generic				/* put */
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{ 
 | 
						{ 
 | 
				
			||||||
@ -1784,6 +1848,19 @@ static struct cw_ElemHandler handlers70[] = {
 | 
				
			|||||||
		cw_out_generic				/* put */
 | 
							cw_out_generic				/* put */
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						{ 
 | 
				
			||||||
 | 
							"Cisco LWAPP Elem 37 (Diagnostic Channel?)",			/* name */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							CISCO_LWELEM_37,				/* Element ID */
 | 
				
			||||||
 | 
							CW_VENDOR_ID_CISCO,CW_PROTO_LWAPP,	/* Vendor / Proto */
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							1,1024,					/* min/max length */
 | 
				
			||||||
 | 
							CW_TYPE_BSTR16,				/* type */
 | 
				
			||||||
 | 
							"cisco/lwelem37",			/* Key */
 | 
				
			||||||
 | 
							cw_in_generic,				/* get */
 | 
				
			||||||
 | 
							cw_out_generic				/* put */
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{ 
 | 
						{ 
 | 
				
			||||||
		"Cisco LWAP Elem 48",			/* name */
 | 
							"Cisco LWAP Elem 48",			/* name */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2109,14 +2186,26 @@ static struct cw_ElemHandler handlers70[] = {
 | 
				
			|||||||
		CISCO_LWELEM_DELETE_WLAN,		/* Element ID */
 | 
							CISCO_LWELEM_DELETE_WLAN,		/* Element ID */
 | 
				
			||||||
		CW_VENDOR_ID_CISCO,CW_PROTO_LWAPP,	/* Vendor / Proto */
 | 
							CW_VENDOR_ID_CISCO,CW_PROTO_LWAPP,	/* Vendor / Proto */
 | 
				
			||||||
		4,4,					/* min/max length */
 | 
							4,4,					/* min/max length */
 | 
				
			||||||
		NULL,					/* type */
 | 
							CW_TYPE_BSTR16,				/* type */
 | 
				
			||||||
		"cisco-del-wlan",			/* Key */
 | 
							"cisco-del-wlan",			/* Key */
 | 
				
			||||||
		cisco_in_lw_del_wlan,			/* get */
 | 
							cw_in_generic,				/* get */
 | 
				
			||||||
		NULL,					/* put */
 | 
							cw_out_generic,				/* put */
 | 
				
			||||||
		NULL
 | 
							NULL
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	,
 | 
						,
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						{ 
 | 
				
			||||||
 | 
							"Cisco Delete WLAN ",			/* name */
 | 
				
			||||||
 | 
							CISCO_ELEM_DELETE_WLAN,			/* Element ID */
 | 
				
			||||||
 | 
							CW_VENDOR_ID_CISCO,0,			/* Vendor / Proto */
 | 
				
			||||||
 | 
							3,3,					/* min/max length */
 | 
				
			||||||
 | 
							NULL,					/* type */
 | 
				
			||||||
 | 
							"cisco-del-wlan",			/* Key */
 | 
				
			||||||
 | 
							cisco_in_del_wlan,			/* get */
 | 
				
			||||||
 | 
							NULL,					/* put */
 | 
				
			||||||
 | 
							NULL
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						,
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
	{ 
 | 
						{ 
 | 
				
			||||||
		"Radio Operational State (Draft 7)",	/* name */
 | 
							"Radio Operational State (Draft 7)",	/* name */
 | 
				
			||||||
@ -2302,6 +2391,8 @@ static struct cw_ElemDef discovery_request_elements[] ={
 | 
				
			|||||||
	 * requests and no WTP Board Data element, so we make them 
 | 
						 * requests and no WTP Board Data element, so we make them 
 | 
				
			||||||
	 * non-mandatory here */
 | 
						 * non-mandatory here */
 | 
				
			||||||
	{0,0,			CAPWAP80211_ELEM_WTP_RADIO_INFORMATION,	0, 0},
 | 
						{0,0,			CAPWAP80211_ELEM_WTP_RADIO_INFORMATION,	0, 0},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{0,0,			CAPWAP_ELEM_WTP_BOARD_DATA,		0, 0},
 | 
						{0,0,			CAPWAP_ELEM_WTP_BOARD_DATA,		0, 0},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Instead of WTP Board Data we get Board Data Options from 
 | 
						/* Instead of WTP Board Data we get Board Data Options from 
 | 
				
			||||||
@ -2312,7 +2403,6 @@ static struct cw_ElemDef discovery_request_elements[] ={
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*static uint16_t discovery_response_states[] = {CAPWAP_STATE_DISCOVERY,0};*/
 | 
					 | 
				
			||||||
static struct cw_ElemDef discovery_response_elements[] ={
 | 
					static struct cw_ElemDef discovery_response_elements[] ={
 | 
				
			||||||
	{0,CW_VENDOR_ID_CISCO,	CISCO_ELEM_AP_TIMESYNC,			1, 0},
 | 
						{0,CW_VENDOR_ID_CISCO,	CISCO_ELEM_AP_TIMESYNC,			1, 0},
 | 
				
			||||||
	{0,CW_VENDOR_ID_CISCO,	CISCO_ELEM_MWAR_TYPE,			0, 0},
 | 
						{0,CW_VENDOR_ID_CISCO,	CISCO_ELEM_MWAR_TYPE,			0, 0},
 | 
				
			||||||
@ -2393,7 +2483,9 @@ static struct cw_ElemDef configuration_status_request_elements70[] ={
 | 
				
			|||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_PHY_HT_CAP,	0, 0},	
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_PHY_HT_CAP,	0, 0},	
 | 
				
			||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_28,	0, 0},	
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_28,	0, 0},	
 | 
				
			||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_PHY_HT_CONTROL,	0, 0},	
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_PHY_HT_CONTROL,	0, 0},	
 | 
				
			||||||
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_15,			0, 0},	/* 15 */
 | 
				
			||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_33,			0, 0},	
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_33,			0, 0},	
 | 
				
			||||||
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_37,			0, 0},	
 | 
				
			||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_48,			0, 0},	
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_48,			0, 0},	
 | 
				
			||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_55,			0, 0},	
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_55,			0, 0},	
 | 
				
			||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_105,			0, 0},	
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_105,			0, 0},	
 | 
				
			||||||
@ -2403,6 +2495,7 @@ static struct cw_ElemDef configuration_status_request_elements70[] ={
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_AP_UPTIME,			0, 0},
 | 
						{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_AP_UPTIME,			0, 0},
 | 
				
			||||||
 | 
						{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_AP_QOS,			0, 0},
 | 
				
			||||||
	{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_AP_LED_STATE_CONFIG,		0, 0},
 | 
						{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_AP_LED_STATE_CONFIG,		0, 0},
 | 
				
			||||||
	{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_AP_LOG_FACILITY,		0, 0},
 | 
						{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_AP_LOG_FACILITY,		0, 0},
 | 
				
			||||||
	{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_MULTI_DOMAIN_CAPABILITY,	0, 0},
 | 
						{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_MULTI_DOMAIN_CAPABILITY,	0, 0},
 | 
				
			||||||
@ -2480,7 +2573,9 @@ static struct cw_ElemDef configuration_status_response_elements[] ={
 | 
				
			|||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_PHY_HT_CAP,	0, 0},	
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_PHY_HT_CAP,	0, 0},	
 | 
				
			||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_28,	0, 0},	
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_28,	0, 0},	
 | 
				
			||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_PHY_HT_CONTROL,	0, 0},	
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_PHY_HT_CONTROL,	0, 0},	
 | 
				
			||||||
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_15,			0, 0},	/* 15 */
 | 
				
			||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_33,	0, 0},	
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_33,	0, 0},	
 | 
				
			||||||
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_37,			0, 0},	
 | 
				
			||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_48,	0, 0},	
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_48,	0, 0},	
 | 
				
			||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_55,	0, 0},	
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_55,	0, 0},	
 | 
				
			||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_105,	0, 0},	
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_105,	0, 0},	
 | 
				
			||||||
@ -2509,8 +2604,8 @@ static struct cw_ElemDef configuration_status_response_elements[] ={
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_SPAM_DOMAIN_SECRET,		0, 0},	
 | 
						{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_SPAM_DOMAIN_SECRET,		0, 0},	
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_SSC_HASH_VALIDATION,	1, 0},
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_SSC_HASH_VALIDATION,	0, 0},
 | 
				
			||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_MWAR_HASH_VALUE,		1, 0},
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_MWAR_HASH_VALUE,		0, 0},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{0,0,0,0}
 | 
						{0,0,0,0}
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
@ -2518,6 +2613,12 @@ static struct cw_ElemDef configuration_status_response_elements[] ={
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static struct cw_ElemDef configuration_update_request_elements[] ={
 | 
					static struct cw_ElemDef configuration_update_request_elements[] ={
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_SPAM_VENDOR_SPECIFIC,			0, CW_IGNORE},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						{0, 		 CW_VENDOR_ID_CISCO,	CISCO_ELEM_DELETE_WLAN,			0, 0},
 | 
				
			||||||
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_DELETE_WLAN,		0, 0},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{0, 0,	CAPWAP_ELEM_RADIO_ADMINISTRATIVE_STATE,					0, 0},
 | 
						{0, 0,	CAPWAP_ELEM_RADIO_ADMINISTRATIVE_STATE,					0, 0},
 | 
				
			||||||
	{0, 0,	CAPWAP_ELEM_RADIO_OPERATIONAL_STATE,					0, 0},
 | 
						{0, 0,	CAPWAP_ELEM_RADIO_OPERATIONAL_STATE,					0, 0},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2526,7 +2627,6 @@ static struct cw_ElemDef configuration_update_request_elements[] ={
 | 
				
			|||||||
	{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_BCAST_SSID_MODE,				0, 0},	
 | 
						{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_BCAST_SSID_MODE,				0, 0},	
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_SPAM_VENDOR_SPECIFIC,0, CW_IGNORE},
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_15,						0, 0},	
 | 
						{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_15,						0, 0},	
 | 
				
			||||||
	{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_SUPPORTED_RATES,				0, 0},	
 | 
						{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_SUPPORTED_RATES,				0, 0},	
 | 
				
			||||||
@ -2551,7 +2651,9 @@ static struct cw_ElemDef configuration_update_request_elements[] ={
 | 
				
			|||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_PHY_HT_CAP,	0, 0},	
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_PHY_HT_CAP,	0, 0},	
 | 
				
			||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_28,	0, 0},	
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_28,	0, 0},	
 | 
				
			||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_PHY_HT_CONTROL,	0, 0},	
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_PHY_HT_CONTROL,	0, 0},	
 | 
				
			||||||
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_15,			0, 0},	/* 15 */
 | 
				
			||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_33,	0, 0},	
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_33,	0, 0},	
 | 
				
			||||||
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_37,			0, 0},	
 | 
				
			||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_48,	0, 0},	
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_48,	0, 0},	
 | 
				
			||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_55,	0, 0},	
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_55,	0, 0},	
 | 
				
			||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_105,	0, 0},	
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_105,	0, 0},	
 | 
				
			||||||
@ -2566,6 +2668,7 @@ static struct cw_ElemDef configuration_update_request_elements[] ={
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_AP_UPTIME,			0, 0},
 | 
						{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_AP_UPTIME,			0, 0},
 | 
				
			||||||
 | 
						{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_AP_QOS,			0, 0},
 | 
				
			||||||
	{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_AP_LED_STATE_CONFIG,		0, 0},
 | 
						{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_AP_LED_STATE_CONFIG,		0, 0},
 | 
				
			||||||
	{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_AP_LOG_FACILITY,		0, 0},
 | 
						{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_AP_LOG_FACILITY,		0, 0},
 | 
				
			||||||
	{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_MULTI_DOMAIN_CAPABILITY,	0, 0},
 | 
						{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_MULTI_DOMAIN_CAPABILITY,	0, 0},
 | 
				
			||||||
@ -2618,7 +2721,6 @@ static struct cw_ElemDef configuration_update_request_elements[] ={
 | 
				
			|||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_SSC_HASH,			0, 0},
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_SSC_HASH,			0, 0},
 | 
				
			||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_DISCOVERY_PROTOCOL,	0, 0},
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_DISCOVERY_PROTOCOL,	0, 0},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_DELETE_WLAN,		0, 0},
 | 
					 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_TCP_ADJUST_MSS,		0, 0},
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_TCP_ADJUST_MSS,		0, 0},
 | 
				
			||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_ROUGE_DETECTION,		0, 0},
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_ROUGE_DETECTION,		0, 0},
 | 
				
			||||||
@ -2865,6 +2967,21 @@ static struct cw_ElemHandler handlers73[] = {
 | 
				
			|||||||
		cisco_wtp_radio_config73,
 | 
							cisco_wtp_radio_config73,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	,
 | 
						,
 | 
				
			||||||
 | 
						{ 
 | 
				
			||||||
 | 
							"AP Quality of Service (>=v7.3)",		/* name */
 | 
				
			||||||
 | 
							CISCO_ELEM_AP_QOS,			/* Element ID */
 | 
				
			||||||
 | 
							CW_VENDOR_ID_CISCO,0,			/* Vendor / Proto */
 | 
				
			||||||
 | 
							67,67,					/* min/max length */
 | 
				
			||||||
 | 
							CW_TYPE_STRUCT,				/* type */
 | 
				
			||||||
 | 
							"cisco/ap-qos",				/* Key */
 | 
				
			||||||
 | 
							cw_in_radio_generic,		/* get */
 | 
				
			||||||
 | 
							cw_out_radio_generic, /* put */
 | 
				
			||||||
 | 
							NULL,
 | 
				
			||||||
 | 
							NULL,
 | 
				
			||||||
 | 
							cisco_ap_qos73,
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
	{ 
 | 
						{ 
 | 
				
			||||||
		"AP Venue Settings",				/* name */
 | 
							"AP Venue Settings",				/* name */
 | 
				
			||||||
@ -2921,6 +3038,7 @@ static struct cw_ElemDef configuration_status_request_elements73[] ={
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct cw_ElemDef configuration_update_request_elements73[] ={
 | 
					static struct cw_ElemDef configuration_update_request_elements73[] ={
 | 
				
			||||||
 | 
						{0, CW_VENDOR_ID_CISCO,	CISCO_ELEM_AP_VENUE_SETTINGS,			0, 0},
 | 
				
			||||||
	{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_ADD_WLAN,		0, 0},
 | 
						{CW_PROTO_LWAPP, CW_VENDOR_ID_CISCO,	CISCO_LWELEM_ADD_WLAN,		0, 0},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{0,0,0,0,0}
 | 
						{0,0,0,0,0}
 | 
				
			||||||
 | 
				
			|||||||
@ -101,15 +101,23 @@ int main (int argc, char **argv)
 | 
				
			|||||||
	struct cw_DiscoveryResults * results;
 | 
						struct cw_DiscoveryResults * results;
 | 
				
			||||||
	const char *bind_addr, *disc_addr;
 | 
						const char *bind_addr, *disc_addr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*	
 | 
					/*	
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct cw_ValBit bits[] = {
 | 
						struct cw_ValBit bits[] = {
 | 
				
			||||||
		{0,"burtstag"},
 | 
							{0,"ess"},
 | 
				
			||||||
		{10,"windows"},
 | 
							{1,"ibss"},
 | 
				
			||||||
 | 
							{2,"cf-pollable"},
 | 
				
			||||||
 | 
							{3,"cf-poll-request"},
 | 
				
			||||||
 | 
							{4,"privacy"},
 | 
				
			||||||
 | 
							{5,"short-preamble"},
 | 
				
			||||||
 | 
							{2,"pbcc"},
 | 
				
			||||||
 | 
							{3,"cf-poll-request"},
 | 
				
			||||||
		{2,NULL}	
 | 
							{2,NULL}	
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
	uint16_t x;
 | 
						uint16_t x;
 | 
				
			||||||
	cw_set_word(&x,65534);
 | 
						cw_set_word(&x,1057);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	CW_TYPE_BITS->read(global_cfg,"hello",(uint8_t*)(&x),2,bits);
 | 
						CW_TYPE_BITS->read(global_cfg,"hello",(uint8_t*)(&x),2,bits);
 | 
				
			||||||
	exit(0);
 | 
						exit(0);
 | 
				
			||||||
@ -166,8 +174,6 @@ int main (int argc, char **argv)
 | 
				
			|||||||
		cw_dbg(DBG_INFO,"Local startup '%s' loaded.",bootcfg.local_startup_file);
 | 
							cw_dbg(DBG_INFO,"Local startup '%s' loaded.",bootcfg.local_startup_file);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cw_cfg_dump(global_cfg);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* Create a temp. cfg */
 | 
						/* Create a temp. cfg */
 | 
				
			||||||
	cfg = cw_cfg_create();
 | 
						cfg = cw_cfg_create();
 | 
				
			||||||
	if (cfg==NULL)
 | 
						if (cfg==NULL)
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user