Separating cipwap/capwap/...
FossilOrigin-Name: b1ce08cd3e7e9389bef7f6f2b038cd5fc95c31150341b17b78b8a116594cb4cb
This commit is contained in:
		@ -15,9 +15,9 @@ CFLAGS += -Wall -g -O0 -D_REENTRANT -DIPV6 -I/usr/local/include -I../ -DSYS_ARCH
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
LIBS+=-lcapwap
 | 
			
		||||
LIBS+=-lcipwap
 | 
			
		||||
LIBS+=-lcisco
 | 
			
		||||
LIBS+=-lfortinet
 | 
			
		||||
LIBS+=-lcipwap
 | 
			
		||||
LIBS+=-lcapwap80211
 | 
			
		||||
LIBS+=-lcw
 | 
			
		||||
LIBS+=-lrt
 | 
			
		||||
 | 
			
		||||
@ -8,6 +8,9 @@
 | 
			
		||||
#include "cw/aciplist.h"
 | 
			
		||||
#include "socklist.h"
 | 
			
		||||
#include "cw/sock.h"
 | 
			
		||||
#include "cw/dbg.h"
 | 
			
		||||
 | 
			
		||||
#include "wtpman.h"
 | 
			
		||||
 | 
			
		||||
struct cw_ac_status ac_status;
 | 
			
		||||
 | 
			
		||||
@ -78,8 +81,33 @@ void release_iplist(void *arg,void *data)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
int handle_echo_req(struct conn *conn, struct cw_action_in *a, uint8_t * data,
 | 
			
		||||
		                      int len, struct sockaddr *from)
 | 
			
		||||
{
 | 
			
		||||
	cw_dbg(DBG_X,"Handle Echo Request %p",conn->data);
 | 
			
		||||
//	struct wtpman * wtpman = conn->data;
 | 
			
		||||
//	wtpman_echo_req(wtpman);
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/*static void setup_actions (struct mod_ac *c, struct mod_ac *b, struct cw_actiondef *actions)
 | 
			
		||||
{
 | 
			
		||||
	cw_dbg(DBG_X,"Setup Actions! Yea");
 | 
			
		||||
	cw_set_msg_end_callback(actions,CW_STATE_RUN,CW_MSG_ECHO_REQUEST,handle_echo_req);
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
int ac_global_init()
 | 
			
		||||
{
 | 
			
		||||
//	mod_set_actions_registered_cb(setup_actions);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	ac_config = mbag_create();
 | 
			
		||||
	mbag_set_str(ac_config, CW_ITEM_AC_NAME, conf_acname);
 | 
			
		||||
	mbag_set_ptr(ac_config, CW_ITEM_AC_STATUS, &ac_status);
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										106
									
								
								src/ac/db.c
									
									
									
									
									
								
							
							
						
						
									
										106
									
								
								src/ac/db.c
									
									
									
									
									
								
							@ -6,6 +6,7 @@
 | 
			
		||||
#include "cw/capwap_items.h"
 | 
			
		||||
#include "cw/conn.h"
 | 
			
		||||
#include "cw/item.h"
 | 
			
		||||
#include "cw/mbag.h"
 | 
			
		||||
 | 
			
		||||
#include "conf.h"
 | 
			
		||||
 | 
			
		||||
@ -88,6 +89,8 @@ static sqlite3_stmt * put_wtp_prop_stmt;
 | 
			
		||||
 | 
			
		||||
static sqlite3_stmt * get_tasks_stmt;
 | 
			
		||||
 | 
			
		||||
static sqlite3_stmt * stmt_get_radio_tasks;
 | 
			
		||||
 | 
			
		||||
static sqlite3_stmt * stmt_ping_wtp;
 | 
			
		||||
static sqlite3_stmt * stmt_put_radio_prop;
 | 
			
		||||
 | 
			
		||||
@ -145,6 +148,11 @@ int db_start()
 | 
			
		||||
		goto errX;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
	sql = "SELECT wtpid,rid,key,sub_key,val FROM radios WHERE upd>0 AND wtpid=?";
 | 
			
		||||
	rc = sqlite3_prepare_v2(handle, sql,-1, &stmt_get_radio_tasks,0);
 | 
			
		||||
	if (rc) 
 | 
			
		||||
		goto errX;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	return 1;
 | 
			
		||||
@ -315,10 +323,6 @@ mavl_conststr_t db_get_update_tasks(struct conn * conn,const char * wtpid)
 | 
			
		||||
	if(sqlite3_bind_text(get_tasks_stmt,1,wtpid,-1,SQLITE_STATIC))
 | 
			
		||||
		goto errX;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	//rc = sqlite3_step(get_tasks_stmt);
 | 
			
		||||
	while (SQLITE_ROW == sqlite3_step(get_tasks_stmt)) {
 | 
			
		||||
 | 
			
		||||
		int ii;
 | 
			
		||||
@ -332,7 +336,6 @@ mavl_conststr_t db_get_update_tasks(struct conn * conn,const char * wtpid)
 | 
			
		||||
 | 
			
		||||
		const char *id =  (const char*)sqlite3_column_text(get_tasks_stmt,1);
 | 
			
		||||
		if (!id) {
 | 
			
		||||
			//DBGX("::::::::::::::::::::::::::::::::::::::::::::::::::::NULL ID!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!","");
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@ -366,7 +369,6 @@ mavl_conststr_t db_get_update_tasks(struct conn * conn,const char * wtpid)
 | 
			
		||||
 | 
			
		||||
	if (r->count)
 | 
			
		||||
		return r;
 | 
			
		||||
 | 
			
		||||
	
 | 
			
		||||
	mavl_destroy(r);
 | 
			
		||||
	return NULL;
 | 
			
		||||
@ -388,4 +390,96 @@ errX:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
mavl_conststr_t db_get_radio_tasks(struct conn * conn,const char * wtpid)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
//cw_dbg(DBG_X,"Get Radio Tasks for  %s",wtpid);
 | 
			
		||||
 | 
			
		||||
	sqlite3_reset(stmt_get_radio_tasks);
 | 
			
		||||
	sqlite3_clear_bindings(stmt_get_radio_tasks);
 | 
			
		||||
 | 
			
		||||
	mavl_conststr_t r = mavl_create_conststr();
 | 
			
		||||
	if (!r)
 | 
			
		||||
		return NULL;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	int rc=0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	if(sqlite3_bind_text(stmt_get_radio_tasks,1,wtpid,-1,SQLITE_STATIC))
 | 
			
		||||
		goto errX;
 | 
			
		||||
 | 
			
		||||
	while (SQLITE_ROW == sqlite3_step(stmt_get_radio_tasks)) {
 | 
			
		||||
 | 
			
		||||
		int ii;
 | 
			
		||||
		//DBGX("-----------------------------------------------------","");
 | 
			
		||||
		for (ii=0; ii<6; ii++){
 | 
			
		||||
 | 
			
		||||
			DBGX("CVALL: %s",(const char*)sqlite3_column_text(stmt_get_radio_tasks,ii));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
		const char *strrid=  (const char*)sqlite3_column_text(stmt_get_radio_tasks,1);
 | 
			
		||||
 | 
			
		||||
		const char *id =  (const char*)sqlite3_column_text(stmt_get_radio_tasks,2);
 | 
			
		||||
		if (!id) {
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		const char *sub_id =  (const char*)sqlite3_column_text(stmt_get_radio_tasks,3);
 | 
			
		||||
 | 
			
		||||
		const char *val =  (const char*)sqlite3_column_text(stmt_get_radio_tasks,4);
 | 
			
		||||
 | 
			
		||||
		//DBGX("ID: (%s), SubID (%s), Val (%s)",id,sub_id,val);
 | 
			
		||||
	
 | 
			
		||||
		const struct cw_itemdef * cwi = cw_itemdef_get(conn->actions->radioitems,id,sub_id);
 | 
			
		||||
		if (!cwi) {
 | 
			
		||||
			DBGX("No item definition found for: %s/%s",id,sub_id);
 | 
			
		||||
			continue;	
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		if (!cwi->type->from_str) {
 | 
			
		||||
			cw_log(LOG_ERR,"Can't convert from string %s/%s - No method defined.",id,sub_id);
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		mbag_item_t * i = cwi->type->from_str(val);
 | 
			
		||||
		i->id=cwi->id;
 | 
			
		||||
 | 
			
		||||
		int rid = atoi(strrid);			
 | 
			
		||||
		cw_dbg(DBG_X,"RID: %d",rid);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		mbag_t radio = mbag_i_get_mbag_c(conn->radios_upd,rid,mbag_create);
 | 
			
		||||
		mbag_set(radio,i);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		//mbag_set(conn->outgoing,i);
 | 
			
		||||
	
 | 
			
		||||
		mavl_add(r,(void*)cwi->id);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (r->count)
 | 
			
		||||
		return r;
 | 
			
		||||
	
 | 
			
		||||
	mavl_destroy(r);
 | 
			
		||||
	return NULL;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
errX:
 | 
			
		||||
	if (rc) {
 | 
			
		||||
		cw_log(LOG_ERR,"Can't get tasks: %d - %s",
 | 
			
		||||
			rc,sqlite3_errmsg(handle));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (r)
 | 
			
		||||
		mavl_destroy(r);
 | 
			
		||||
		
 | 
			
		||||
 | 
			
		||||
	return NULL;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -13,6 +13,7 @@ void db_put_wtp_prop(const char *wtp_id,const char * id,const char *sub_id,const
 | 
			
		||||
mavl_conststr_t db_get_update_tasks(struct conn * conn,const char * wtpid);
 | 
			
		||||
 | 
			
		||||
void db_put_radio_prop(const char *wtp_id,const char *rid, const char * key,const char *sub_key,const char * val);
 | 
			
		||||
extern mavl_conststr_t db_get_radio_tasks(struct conn * conn,const char * wtpid);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@ -317,7 +317,7 @@ void radio_to_sql(struct conn *conn, char *wtp_id, int rid, mbag_t radio)
 | 
			
		||||
		mbag_item_t *i = mavliter_get(&it);
 | 
			
		||||
 | 
			
		||||
		const struct cw_itemdef *cwi =
 | 
			
		||||
		    cw_itemdef_get(conn->actions->items, i->id, NULL);
 | 
			
		||||
		    cw_itemdef_get(conn->actions->radioitems, i->id, NULL);
 | 
			
		||||
		if (cwi) {
 | 
			
		||||
			char str[4096];
 | 
			
		||||
			if (i->type->to_str) {
 | 
			
		||||
@ -376,11 +376,11 @@ void wtpman_run_data(void *wtpman_arg)
 | 
			
		||||
	uint8_t data[1001];
 | 
			
		||||
	memset(data, 0, 1000);
 | 
			
		||||
 | 
			
		||||
	cw_log(LOG_ERR, "I am the data thread\n");
 | 
			
		||||
	cw_log(LOG_ERR, "I am the data thread**********************************************************************\n");
 | 
			
		||||
	while (1) {
 | 
			
		||||
		sleep(5);
 | 
			
		||||
		conn->write_data(conn, data, 100);
 | 
			
		||||
		cw_log(LOG_ERR, "O was the data thread\n");
 | 
			
		||||
		cw_log(LOG_ERR, "O was the data thread***********************************************************\n");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -489,24 +489,50 @@ static void wtpman_run(void *arg)
 | 
			
		||||
 | 
			
		||||
		mavl_del_all(conn->outgoing);
 | 
			
		||||
 | 
			
		||||
		mavl_conststr_t r = db_get_update_tasks(conn, sock_addr2str(&conn->addr));
 | 
			
		||||
		mavl_conststr_t r;
 | 
			
		||||
		r = db_get_update_tasks(conn, sock_addr2str(&conn->addr));
 | 
			
		||||
		if (r) {
 | 
			
		||||
 | 
			
		||||
			if (!conn->outgoing->count)
 | 
			
		||||
				continue;
 | 
			
		||||
 | 
			
		||||
			cw_dbg(DBG_INFO, "Updating WTP %s",sock_addr2str(&conn->addr));
 | 
			
		||||
 | 
			
		||||
			rc = cw_send_request(conn, CW_MSG_CONFIGURATION_UPDATE_REQUEST);
 | 
			
		||||
			mavl_merge(conn->config, conn->outgoing);
 | 
			
		||||
			mavl_destroy(conn->outgoing);
 | 
			
		||||
			conn->outgoing = mbag_create();
 | 
			
		||||
			config_to_sql(conn);
 | 
			
		||||
			radios_to_sql(conn);
 | 
			
		||||
			mavl_destroy(r);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		r = db_get_radio_tasks(conn, sock_addr2str(&conn->addr));
 | 
			
		||||
		if (r) {
 | 
			
		||||
 | 
			
		||||
			if (!conn->radios_upd->count)
 | 
			
		||||
				continue;
 | 
			
		||||
 | 
			
		||||
			cw_dbg(DBG_INFO, "Updating Radios for %s",sock_addr2str(&conn->addr));
 | 
			
		||||
			rc = cw_send_request(conn, CW_MSG_CONFIGURATION_UPDATE_REQUEST);
 | 
			
		||||
			mavl_destroy(conn->radios_upd);
 | 
			
		||||
			conn->radios_upd=mbag_i_create();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		if (!r)
 | 
			
		||||
			continue;
 | 
			
		||||
			radios_to_sql(conn);
 | 
			
		||||
 | 
			
		||||
		if (!conn->outgoing->count)
 | 
			
		||||
			continue;
 | 
			
		||||
			/*
 | 
			
		||||
			rc = cw_send_request(conn, CW_MSG_CONFIGURATION_UPDATE_REQUEST);
 | 
			
		||||
			mavl_merge(conn->config, conn->outgoing);
 | 
			
		||||
			mavl_destroy(conn->outgoing);
 | 
			
		||||
			conn->outgoing = mbag_create();
 | 
			
		||||
			config_to_sql(conn);
 | 
			
		||||
			radios_to_sql(conn);
 | 
			
		||||
			mavl_destroy(r);
 | 
			
		||||
			*/
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		cw_dbg(DBG_INFO, "Updating WTP %s",sock_addr2str(&conn->addr));
 | 
			
		||||
 | 
			
		||||
		rc = cw_send_request(conn, CW_MSG_CONFIGURATION_UPDATE_REQUEST);
 | 
			
		||||
		mavl_merge(conn->config, conn->outgoing);
 | 
			
		||||
		mavl_destroy(conn->outgoing);
 | 
			
		||||
		conn->outgoing = mbag_create();
 | 
			
		||||
		config_to_sql(conn);
 | 
			
		||||
		radios_to_sql(conn);
 | 
			
		||||
		mavl_destroy(r);
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -609,6 +635,7 @@ struct wtpman *wtpman_create(int socklistindex, struct sockaddr *srcaddr)
 | 
			
		||||
	wtpman->conn->strict_capwap = conf_strict_capwap;
 | 
			
		||||
	wtpman->conn->strict_hdr = conf_strict_headers;
 | 
			
		||||
	wtpman->conn->radios = mbag_i_create();
 | 
			
		||||
	wtpman->conn->radios_upd = mbag_i_create();
 | 
			
		||||
	wtpman->conn->local = ac_config;
 | 
			
		||||
//wtpman->conn->capwap_mode=0; //CW_MODE_STD; //CISCO;
 | 
			
		||||
	wtpman->conn->capwap_mode = CW_MODE_CISCO;
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user