Separating cipwap/capwap/...
FossilOrigin-Name: b1ce08cd3e7e9389bef7f6f2b038cd5fc95c31150341b17b78b8a116594cb4cb
This commit is contained in:
parent
9915c579c8
commit
da9f2ca6af
@ -15,9 +15,9 @@ CFLAGS += -Wall -g -O0 -D_REENTRANT -DIPV6 -I/usr/local/include -I../ -DSYS_ARCH
|
|||||||
|
|
||||||
|
|
||||||
LIBS+=-lcapwap
|
LIBS+=-lcapwap
|
||||||
|
LIBS+=-lcipwap
|
||||||
LIBS+=-lcisco
|
LIBS+=-lcisco
|
||||||
LIBS+=-lfortinet
|
LIBS+=-lfortinet
|
||||||
LIBS+=-lcipwap
|
|
||||||
LIBS+=-lcapwap80211
|
LIBS+=-lcapwap80211
|
||||||
LIBS+=-lcw
|
LIBS+=-lcw
|
||||||
LIBS+=-lrt
|
LIBS+=-lrt
|
||||||
|
@ -8,6 +8,9 @@
|
|||||||
#include "cw/aciplist.h"
|
#include "cw/aciplist.h"
|
||||||
#include "socklist.h"
|
#include "socklist.h"
|
||||||
#include "cw/sock.h"
|
#include "cw/sock.h"
|
||||||
|
#include "cw/dbg.h"
|
||||||
|
|
||||||
|
#include "wtpman.h"
|
||||||
|
|
||||||
struct cw_ac_status ac_status;
|
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()
|
int ac_global_init()
|
||||||
{
|
{
|
||||||
|
// mod_set_actions_registered_cb(setup_actions);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ac_config = mbag_create();
|
ac_config = mbag_create();
|
||||||
mbag_set_str(ac_config, CW_ITEM_AC_NAME, conf_acname);
|
mbag_set_str(ac_config, CW_ITEM_AC_NAME, conf_acname);
|
||||||
mbag_set_ptr(ac_config, CW_ITEM_AC_STATUS, &ac_status);
|
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/capwap_items.h"
|
||||||
#include "cw/conn.h"
|
#include "cw/conn.h"
|
||||||
#include "cw/item.h"
|
#include "cw/item.h"
|
||||||
|
#include "cw/mbag.h"
|
||||||
|
|
||||||
#include "conf.h"
|
#include "conf.h"
|
||||||
|
|
||||||
@ -88,6 +89,8 @@ static sqlite3_stmt * put_wtp_prop_stmt;
|
|||||||
|
|
||||||
static sqlite3_stmt * get_tasks_stmt;
|
static sqlite3_stmt * get_tasks_stmt;
|
||||||
|
|
||||||
|
static sqlite3_stmt * stmt_get_radio_tasks;
|
||||||
|
|
||||||
static sqlite3_stmt * stmt_ping_wtp;
|
static sqlite3_stmt * stmt_ping_wtp;
|
||||||
static sqlite3_stmt * stmt_put_radio_prop;
|
static sqlite3_stmt * stmt_put_radio_prop;
|
||||||
|
|
||||||
@ -145,6 +148,11 @@ int db_start()
|
|||||||
goto errX;
|
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;
|
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))
|
if(sqlite3_bind_text(get_tasks_stmt,1,wtpid,-1,SQLITE_STATIC))
|
||||||
goto errX;
|
goto errX;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//rc = sqlite3_step(get_tasks_stmt);
|
|
||||||
while (SQLITE_ROW == sqlite3_step(get_tasks_stmt)) {
|
while (SQLITE_ROW == sqlite3_step(get_tasks_stmt)) {
|
||||||
|
|
||||||
int ii;
|
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);
|
const char *id = (const char*)sqlite3_column_text(get_tasks_stmt,1);
|
||||||
if (!id) {
|
if (!id) {
|
||||||
//DBGX("::::::::::::::::::::::::::::::::::::::::::::::::::::NULL ID!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!","");
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -367,7 +370,6 @@ mavl_conststr_t db_get_update_tasks(struct conn * conn,const char * wtpid)
|
|||||||
if (r->count)
|
if (r->count)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
|
|
||||||
mavl_destroy(r);
|
mavl_destroy(r);
|
||||||
return NULL;
|
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);
|
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);
|
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
|
#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);
|
mbag_item_t *i = mavliter_get(&it);
|
||||||
|
|
||||||
const struct cw_itemdef *cwi =
|
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) {
|
if (cwi) {
|
||||||
char str[4096];
|
char str[4096];
|
||||||
if (i->type->to_str) {
|
if (i->type->to_str) {
|
||||||
@ -376,11 +376,11 @@ void wtpman_run_data(void *wtpman_arg)
|
|||||||
uint8_t data[1001];
|
uint8_t data[1001];
|
||||||
memset(data, 0, 1000);
|
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) {
|
while (1) {
|
||||||
sleep(5);
|
sleep(5);
|
||||||
conn->write_data(conn, data, 100);
|
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,11 +489,9 @@ static void wtpman_run(void *arg)
|
|||||||
|
|
||||||
mavl_del_all(conn->outgoing);
|
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 (!r)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (!conn->outgoing->count)
|
if (!conn->outgoing->count)
|
||||||
continue;
|
continue;
|
||||||
@ -507,6 +505,34 @@ static void wtpman_run(void *arg)
|
|||||||
config_to_sql(conn);
|
config_to_sql(conn);
|
||||||
radios_to_sql(conn);
|
radios_to_sql(conn);
|
||||||
mavl_destroy(r);
|
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();
|
||||||
|
|
||||||
|
|
||||||
|
radios_to_sql(conn);
|
||||||
|
|
||||||
|
/*
|
||||||
|
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_capwap = conf_strict_capwap;
|
||||||
wtpman->conn->strict_hdr = conf_strict_headers;
|
wtpman->conn->strict_hdr = conf_strict_headers;
|
||||||
wtpman->conn->radios = mbag_i_create();
|
wtpman->conn->radios = mbag_i_create();
|
||||||
|
wtpman->conn->radios_upd = mbag_i_create();
|
||||||
wtpman->conn->local = ac_config;
|
wtpman->conn->local = ac_config;
|
||||||
//wtpman->conn->capwap_mode=0; //CW_MODE_STD; //CISCO;
|
//wtpman->conn->capwap_mode=0; //CW_MODE_STD; //CISCO;
|
||||||
wtpman->conn->capwap_mode = CW_MODE_CISCO;
|
wtpman->conn->capwap_mode = CW_MODE_CISCO;
|
||||||
|
@ -514,6 +514,10 @@ enum cw_reboot_failure_types {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define CW_RADIO_ADMIN_STATE_DISABLED 1
|
||||||
|
#define CW_RADIO_ADMIN_STATE_ENABLED 2
|
||||||
|
|
||||||
|
|
||||||
extern void cw_read_image_data_request(struct cwimage_data *, uint8_t * msg, int len);
|
extern void cw_read_image_data_request(struct cwimage_data *, uint8_t * msg, int len);
|
||||||
|
|
||||||
//extern int cw_readelem_ac_descriptor(struct ac_info *acinfo, int type, uint8_t * msgelem,
|
//extern int cw_readelem_ac_descriptor(struct ac_info *acinfo, int type, uint8_t * msgelem,
|
||||||
|
@ -4,16 +4,25 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
const char CW_ITEM80211_SUPPORTED_RATES[]="802.11 supported_rates";
|
|
||||||
const char CW_ITEM80211_WTP_RADIO_INFORMATION[]="802.11 radio_info";
|
|
||||||
|
|
||||||
|
|
||||||
struct cw_itemdef capwap80211_itemdefs[] = {
|
struct cw_itemdef capwap80211_itemdefs[] = {
|
||||||
|
|
||||||
{CW_ITEM80211_SUPPORTED_RATES,CW_ITEM_NONE,CAPWAP80211_TYPE_RATESET},
|
|
||||||
{CW_ITEM80211_WTP_RADIO_INFORMATION,CW_ITEM_NONE,MBAG_DWORD},
|
|
||||||
{CW_ITEM_NONE}
|
{CW_ITEM_NONE}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const char CW_RADIOITEM80211_SUPPORTED_RATES[]="802.11 supported_rates";
|
||||||
|
const char CW_RADIOITEM80211_WTP_RADIO_INFORMATION[]="802.11 radio_info";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
struct cw_itemdef capwap80211_radioitemdefs[] = {
|
||||||
|
|
||||||
|
{CW_RADIOITEM80211_SUPPORTED_RATES,CW_ITEM_NONE,CAPWAP80211_TYPE_RATESET},
|
||||||
|
{CW_RADIOITEM80211_WTP_RADIO_INFORMATION,CW_ITEM_NONE,MBAG_DWORD},
|
||||||
|
{CW_ITEM_NONE}
|
||||||
|
};
|
||||||
|
@ -3,10 +3,12 @@
|
|||||||
|
|
||||||
#include "item.h"
|
#include "item.h"
|
||||||
|
|
||||||
extern const char CW_ITEM80211_SUPPORTED_RATES[];
|
extern const char CW_RADIOITEM80211_SUPPORTED_RATES[];
|
||||||
extern const char CW_ITEM80211_WTP_RADIO_INFORMATION[];
|
extern const char CW_RADIOITEM80211_WTP_RADIO_INFORMATION[];
|
||||||
|
|
||||||
extern struct cw_itemdef capwap80211_itemdefs[];
|
extern struct cw_itemdef capwap80211_itemdefs[];
|
||||||
|
extern struct cw_itemdef capwap80211_radioitemdefs[];
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -15,9 +15,6 @@ const char CW_ITEM_WTP_FRAME_TUNNEL_MODE[]="wtp_frame_tunnel_mode";
|
|||||||
const char CW_ITEM_WTP_RADIOS_IN_USE[]="max_radios";
|
const char CW_ITEM_WTP_RADIOS_IN_USE[]="max_radios";
|
||||||
const char CW_ITEM_WTP_MAX_RADIOS[]="radios_in_use";
|
const char CW_ITEM_WTP_MAX_RADIOS[]="radios_in_use";
|
||||||
|
|
||||||
const char CW_ITEM_SSH_ENABLE[]="ssh_enable";
|
|
||||||
const char CW_ITEM_TELNET_ENABLE[]="telnet_enable";
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
const char CW_ITEM_WTP_HARDWARE_VENDOR=
|
const char CW_ITEM_WTP_HARDWARE_VENDOR=
|
||||||
*/
|
*/
|
||||||
@ -42,7 +39,7 @@ const char CW_ITEM_WTP_OTHERSOFTWARE_VERSION,
|
|||||||
const char CW_ITEM_WTP_BOARD_DATA[]="wtp_board_data";
|
const char CW_ITEM_WTP_BOARD_DATA[]="wtp_board_data";
|
||||||
const char CW_ITEM_WTP_DESCRIPTOR[]="0wtp_descriptor";
|
const char CW_ITEM_WTP_DESCRIPTOR[]="0wtp_descriptor";
|
||||||
const char CW_ITEM_CAPWAP_TIMERS[]="capwap_timers";
|
const char CW_ITEM_CAPWAP_TIMERS[]="capwap_timers";
|
||||||
const char CW_ITEM_RADIO_ADMINISTRATIVE_STATE[]="radio_admin_state";
|
//const char CW_ITEM_RADIO_ADMINISTRATIVE_STATE[]="radio_admin_state";
|
||||||
|
|
||||||
const char CW_ITEM_AC_NAME[]="ac_name";
|
const char CW_ITEM_AC_NAME[]="ac_name";
|
||||||
const char CW_ITEM_AC_DESCRIPTOR[]="ac_descriptor";
|
const char CW_ITEM_AC_DESCRIPTOR[]="ac_descriptor";
|
||||||
@ -104,10 +101,6 @@ struct cw_itemdef capwap_itemdefs[] = {
|
|||||||
|
|
||||||
{CW_ITEM_CAPWAP_TRANSPORT_PROTOCOL,CW_ITEM_NONE,MBAG_BYTE},
|
{CW_ITEM_CAPWAP_TRANSPORT_PROTOCOL,CW_ITEM_NONE,MBAG_BYTE},
|
||||||
|
|
||||||
{CW_ITEM_TELNET_ENABLE,CW_ITEM_NONE,MBAG_BYTE},
|
|
||||||
{CW_ITEM_SSH_ENABLE,CW_ITEM_NONE,MBAG_BYTE},
|
|
||||||
|
|
||||||
|
|
||||||
{CW_ITEM_WTP_NAME,CW_ITEM_NONE,MBAG_STR},
|
{CW_ITEM_WTP_NAME,CW_ITEM_NONE,MBAG_STR},
|
||||||
{CW_ITEM_WTP_MAC_TYPE,CW_ITEM_NONE,MBAG_BYTE},
|
{CW_ITEM_WTP_MAC_TYPE,CW_ITEM_NONE,MBAG_BYTE},
|
||||||
{CW_ITEM_WTP_FRAME_TUNNEL_MODE,CW_ITEM_NONE,MBAG_BYTE},
|
{CW_ITEM_WTP_FRAME_TUNNEL_MODE,CW_ITEM_NONE,MBAG_BYTE},
|
||||||
@ -158,10 +151,13 @@ cisco_items or so */
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const char CW_RADIOITEM_ADMIN_STATE[]="admin_state";
|
||||||
|
const char CW_RADIOITEM_OPER_STATE[]="oper_state";
|
||||||
|
|
||||||
|
|
||||||
struct cw_itemdef capwap_radiodefs[] = {
|
struct cw_itemdef capwap_radiodefs[] = {
|
||||||
|
{CW_RADIOITEM_ADMIN_STATE,CW_ITEM_NONE,MBAG_BYTE},
|
||||||
|
{CW_RADIOITEM_OPER_STATE,CW_ITEM_NONE,MBAG_WORD},
|
||||||
|
|
||||||
{CW_ITEM_NONE}
|
{CW_ITEM_NONE}
|
||||||
};
|
};
|
||||||
|
@ -176,8 +176,8 @@ extern const char CW_ITEM_RADIO_INFOS[];
|
|||||||
extern const char CW_ITEM_ECN_SUPPORT[];
|
extern const char CW_ITEM_ECN_SUPPORT[];
|
||||||
|
|
||||||
|
|
||||||
extern const char CW_ITEM_SSH_ENABLE[];
|
//extern const char CW_ITEM_SSH_ENABLE[];
|
||||||
extern const char CW_ITEM_TELNET_ENABLE[];
|
//extern const char CW_ITEM_TELNET_ENABLE[];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -192,7 +192,12 @@ extern const char CW_ITEM_TELNET_ENABLE[];
|
|||||||
#define CW_ITEM_REBOOT_LAST_FAILURE_TYPE "last_failure"
|
#define CW_ITEM_REBOOT_LAST_FAILURE_TYPE "last_failure"
|
||||||
|
|
||||||
|
|
||||||
|
extern const char CW_RADIOITEM_ADMIN_STATE[];
|
||||||
|
extern const char CW_RADIOITEM_OPER_STATE[];
|
||||||
|
|
||||||
|
|
||||||
extern struct cw_itemdef capwap_itemdefs[];
|
extern struct cw_itemdef capwap_itemdefs[];
|
||||||
|
extern struct cw_itemdef capwap_radiodefs[];
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -63,8 +63,11 @@ struct conn {
|
|||||||
mbag_t incomming;
|
mbag_t incomming;
|
||||||
mbag_t remote;
|
mbag_t remote;
|
||||||
mbag_t local;
|
mbag_t local;
|
||||||
|
|
||||||
mbag_t radios;
|
mbag_t radios;
|
||||||
|
mbag_t radios_upd;
|
||||||
mbag_t config;
|
mbag_t config;
|
||||||
|
mbag_t config_upd;
|
||||||
|
|
||||||
|
|
||||||
/** base_mac */
|
/** base_mac */
|
||||||
|
14
src/cw/cw.h
14
src/cw/cw.h
@ -524,6 +524,20 @@ extern int cw_put_radio_operational_states(mbag_t radios, uint8_t * dst, int *ne
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @defgroup CAPWAP_RADIO Radio Operations
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
extern int cw_radio_set_admin_state(mbag_t radios,int rid, int state, int cause);
|
||||||
|
extern int cw_put_elem_radio_administrative_state(uint8_t *dst,int radio_id,mbag_t radio);
|
||||||
|
extern int cw_put_elem_radio_operational_state(uint8_t * dst, int rid, int os, int d7mode);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -15,7 +15,7 @@ int cw_in_radio_generic(struct conn *conn, struct cw_action_in *a, uint8_t * dat
|
|||||||
int len, struct sockaddr *from)
|
int len, struct sockaddr *from)
|
||||||
{
|
{
|
||||||
|
|
||||||
const cw_itemdef_t * idef = cw_itemdef_get(conn->actions->items,a->item_id,CW_ITEM_NONE);
|
const cw_itemdef_t * idef = cw_itemdef_get(conn->actions->radioitems,a->item_id,CW_ITEM_NONE);
|
||||||
if (!idef){
|
if (!idef){
|
||||||
cw_log(LOG_ERR,"No definition found for %s",a->item_id);
|
cw_log(LOG_ERR,"No definition found for %s",a->item_id);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -16,19 +16,12 @@
|
|||||||
int cw_put_elem_radio_info(uint8_t*dst,int radio_id,mbag_t radio)
|
int cw_put_elem_radio_info(uint8_t*dst,int radio_id,mbag_t radio)
|
||||||
{
|
{
|
||||||
cw_put_byte(dst+4,radio_id);
|
cw_put_byte(dst+4,radio_id);
|
||||||
cw_put_dword(dst+5,mbag_get_dword(radio,CW_ITEM80211_WTP_RADIO_INFORMATION,0));
|
cw_put_dword(dst+5,mbag_get_dword(radio,CW_RADIOITEM80211_WTP_RADIO_INFORMATION,0));
|
||||||
return 5 + cw_put_elem_hdr(dst,CW_ELEM80211_WTP_RADIO_INFORMATION,5);
|
return 5 + cw_put_elem_hdr(dst,CW_ELEM80211_WTP_RADIO_INFORMATION,5);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int cw_put_elem_radio_administrative_state(uint8_t *dst,int radio_id,mbag_t radio)
|
|
||||||
{
|
|
||||||
cw_put_byte(dst+4,radio_id);
|
|
||||||
cw_put_byte(dst+5,mbag_get_byte(radio,CW_RADIO_ADMIN_STATE,9));
|
|
||||||
return 2 + cw_put_elem_hdr(dst,CW_ELEM_RADIO_ADMINISTRATIVE_STATE,2);
|
|
||||||
}
|
|
||||||
|
|
||||||
int cw_out_radio_infos(struct conn *conn, struct cw_action_out *a, uint8_t * dst)
|
int cw_out_radio_infos(struct conn *conn, struct cw_action_out *a, uint8_t * dst)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -46,21 +39,6 @@ int cw_out_radio_infos(struct conn *conn, struct cw_action_out *a, uint8_t * dst
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int cw_out_radio_administrative_states(struct conn *conn, struct cw_action_out *a, uint8_t * dst)
|
|
||||||
{
|
|
||||||
int l=0;
|
|
||||||
MAVLITER_DEFINE(it,conn->radios);
|
|
||||||
mavliter_foreach(&it){
|
|
||||||
struct mbag_item *i = mavliter_get(&it);
|
|
||||||
if ( i->type != MBAG_MBAG ) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
l+=cw_put_elem_radio_administrative_state(dst+l,i->iid,i->data);
|
|
||||||
|
|
||||||
}
|
|
||||||
return l;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ int cw_put_radio_operational_states(mbag_t radios, uint8_t * dst, int *nerror, i
|
|||||||
mavliter_foreach(&it){
|
mavliter_foreach(&it){
|
||||||
|
|
||||||
mbag_item_t * radioitem = mavliter_get(&it);
|
mbag_item_t * radioitem = mavliter_get(&it);
|
||||||
mbag_item_t *ositem = mbag_get(radioitem->data,CW_RADIO_OPER_STATE);
|
mbag_item_t *ositem = mbag_get(radioitem->data,CW_RADIOITEM_OPER_STATE);
|
||||||
if (!ositem){
|
if (!ositem){
|
||||||
(*nerror)++;
|
(*nerror)++;
|
||||||
continue;
|
continue;
|
||||||
@ -77,7 +77,7 @@ int cw_put_radio_operational_states(mbag_t radios, uint8_t * dst, int *nerror, i
|
|||||||
/* delete the operational state item, so it won't be
|
/* delete the operational state item, so it won't be
|
||||||
sent again, until it is set by a change through
|
sent again, until it is set by a change through
|
||||||
Set Radio Admin State */
|
Set Radio Admin State */
|
||||||
mbag_del(radioitem->data,CW_RADIO_OPER_STATE);
|
mbag_del(radioitem->data,CW_RADIOITEM_OPER_STATE);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,6 +36,8 @@ struct cw_itemdef {
|
|||||||
/** Type */
|
/** Type */
|
||||||
mbagtype_t type;
|
mbagtype_t type;
|
||||||
|
|
||||||
|
const char *meta_id;
|
||||||
|
|
||||||
};
|
};
|
||||||
typedef struct cw_itemdef cw_itemdef_t;
|
typedef struct cw_itemdef cw_itemdef_t;
|
||||||
|
|
||||||
|
@ -63,26 +63,6 @@ int cw_radio_update_oper_states(mbag_t radios,int cause)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
int cw_radio_set_admin_state(mbag_t radios,int rid, int state, int cause)
|
|
||||||
{
|
|
||||||
mbag_t radio = mbag_i_get_mbag(radios,rid,NULL);
|
|
||||||
if (!radio) {
|
|
||||||
cw_dbg(DBG_ELEM_ERR,"Can't set radio administrative state for radio %d - radio does't exists",rid);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
mbag_set_byte(radio,CW_RADIO_ADMIN_STATE,state);
|
|
||||||
|
|
||||||
if (cause < 0)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
|
|
||||||
/* Set operational state for next config update response. */
|
|
||||||
|
|
||||||
mbag_set_word(radio,CW_RADIO_OPER_STATE, (state<<8) | 3);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int cw_radio_set_all_admin_states(mbag_t radios,int state, int cause)
|
int cw_radio_set_all_admin_states(mbag_t radios,int state, int cause)
|
||||||
{
|
{
|
||||||
|
@ -8,8 +8,8 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
extern const char CW_RADIO_ADMIN_STATE[];
|
//extern const char CW_RADIO_ADMIN_STATE[];
|
||||||
extern const char CW_RADIO_OPER_STATE[];
|
//extern const char CW_RADIO_OPER_STATE[];
|
||||||
|
|
||||||
extern const char CW_RADIO_SUPPORTED_RATES[];
|
extern const char CW_RADIO_SUPPORTED_RATES[];
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ static cw_action_in_t actions_in[] = {
|
|||||||
.msg_id = CW_MSG_DISCOVERY_REQUEST,
|
.msg_id = CW_MSG_DISCOVERY_REQUEST,
|
||||||
.elem_id = CW_ELEM_WTP_MAC_TYPE,
|
.elem_id = CW_ELEM_WTP_MAC_TYPE,
|
||||||
.start = cw_in_generic2,
|
.start = cw_in_generic2,
|
||||||
.item_id = "wtp_mac_type",
|
.item_id = CW_ITEM_WTP_MAC_TYPE,
|
||||||
.mand = 1,
|
.mand = 1,
|
||||||
.min_len = 1,
|
.min_len = 1,
|
||||||
.max_len = 1
|
.max_len = 1
|
||||||
@ -314,7 +314,7 @@ static cw_action_in_t actions_in[] = {
|
|||||||
|
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------
|
||||||
* Configuration Status Request
|
* Configuration Status Request - IN
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
.capwap_state = CW_STATE_CONFIGURE,
|
.capwap_state = CW_STATE_CONFIGURE,
|
||||||
@ -342,7 +342,7 @@ static cw_action_in_t actions_in[] = {
|
|||||||
.capwap_state = CW_STATE_CONFIGURE,
|
.capwap_state = CW_STATE_CONFIGURE,
|
||||||
.msg_id = CW_MSG_CONFIGURATION_STATUS_REQUEST,
|
.msg_id = CW_MSG_CONFIGURATION_STATUS_REQUEST,
|
||||||
.elem_id = CW_ELEM_RADIO_ADMINISTRATIVE_STATE,
|
.elem_id = CW_ELEM_RADIO_ADMINISTRATIVE_STATE,
|
||||||
.item_id = CW_ITEM_RADIO_ADMINISTRATIVE_STATE,
|
.item_id = CW_RADIOITEM_ADMIN_STATE,
|
||||||
.start = cw_in_radio_administrative_state,
|
.start = cw_in_radio_administrative_state,
|
||||||
.mand = 1
|
.mand = 1
|
||||||
|
|
||||||
@ -417,8 +417,8 @@ static cw_action_in_t actions_in[] = {
|
|||||||
.capwap_state = CW_STATE_CONFIGURE,
|
.capwap_state = CW_STATE_CONFIGURE,
|
||||||
.msg_id= CW_MSG_CHANGE_STATE_EVENT_REQUEST,
|
.msg_id= CW_MSG_CHANGE_STATE_EVENT_REQUEST,
|
||||||
.elem_id = CW_ELEM_RADIO_OPERATIONAL_STATE,
|
.elem_id = CW_ELEM_RADIO_OPERATIONAL_STATE,
|
||||||
.item_id = CW_RADIO_OPER_STATE,
|
.item_id = CW_RADIOITEM_OPER_STATE,
|
||||||
.start = cw_in_radio_operational_state,
|
.start = cw_in_radio_generic, //operational_state,
|
||||||
.min_len=3,
|
.min_len=3,
|
||||||
.max_len=3,
|
.max_len=3,
|
||||||
.mand = 0
|
.mand = 0
|
||||||
@ -465,7 +465,7 @@ static cw_action_in_t actions_in[] = {
|
|||||||
.capwap_state = CW_STATE_RUN,
|
.capwap_state = CW_STATE_RUN,
|
||||||
.msg_id= CW_MSG_CHANGE_STATE_EVENT_REQUEST,
|
.msg_id= CW_MSG_CHANGE_STATE_EVENT_REQUEST,
|
||||||
.elem_id = CW_ELEM_RADIO_OPERATIONAL_STATE,
|
.elem_id = CW_ELEM_RADIO_OPERATIONAL_STATE,
|
||||||
.item_id = CW_RADIO_OPER_STATE,
|
.item_id = CW_RADIOITEM_OPER_STATE,
|
||||||
.start = cw_in_radio_operational_state,
|
.start = cw_in_radio_operational_state,
|
||||||
.min_len=3,
|
.min_len=3,
|
||||||
.max_len=3,
|
.max_len=3,
|
||||||
@ -730,6 +730,17 @@ static cw_action_out_t actions_out[]={
|
|||||||
}
|
}
|
||||||
,
|
,
|
||||||
|
|
||||||
|
/* Radio Administrative State - OUT */
|
||||||
|
{
|
||||||
|
.msg_id = CW_MSG_CONFIGURATION_UPDATE_REQUEST,
|
||||||
|
.elem_id = CW_ELEM_RADIO_ADMINISTRATIVE_STATE,
|
||||||
|
.item_id = CW_RADIOITEM_ADMIN_STATE,
|
||||||
|
.out = cw_out_radio_administrative_states,
|
||||||
|
.get = cw_out_get_outgoing,
|
||||||
|
.mand = 0
|
||||||
|
}
|
||||||
|
,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -772,7 +783,7 @@ int capwap_register_actions_ac(struct cw_actiondef *def)
|
|||||||
rc += cw_strheap_register_strings(def->strelem, capwap_strings_elem);
|
rc += cw_strheap_register_strings(def->strelem, capwap_strings_elem);
|
||||||
|
|
||||||
rc += cw_itemdefheap_register(def->items, capwap_itemdefs);
|
rc += cw_itemdefheap_register(def->items, capwap_itemdefs);
|
||||||
rc += cw_itemdefheap_register(def->radioitems, capwap_radioitemdefs);
|
rc += cw_itemdefheap_register(def->radioitems, capwap_radiodefs);
|
||||||
|
|
||||||
intavltree_add(def->wbids, 0);
|
intavltree_add(def->wbids, 0);
|
||||||
|
|
||||||
|
@ -353,9 +353,9 @@ static cw_action_in_t actions_in[] = {
|
|||||||
.capwap_state = CW_STATE_RUN,
|
.capwap_state = CW_STATE_RUN,
|
||||||
.msg_id = CW_MSG_CONFIGURATION_UPDATE_REQUEST,
|
.msg_id = CW_MSG_CONFIGURATION_UPDATE_REQUEST,
|
||||||
.elem_id = CW_ELEM_RADIO_ADMINISTRATIVE_STATE,
|
.elem_id = CW_ELEM_RADIO_ADMINISTRATIVE_STATE,
|
||||||
.item_id = CW_ITEM_RADIO_ADMINISTRATIVE_STATE,
|
.item_id = CW_RADIOITEM_ADMIN_STATE,
|
||||||
.start = cw_in_radio_administrative_state,
|
.start = cw_in_radio_administrative_state,
|
||||||
.mand = 1
|
.mand = 0
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
|
|
||||||
@ -568,7 +568,7 @@ static cw_action_out_t actions_out[] = {
|
|||||||
/* Radio Admin State - Config Status Request */
|
/* Radio Admin State - Config Status Request */
|
||||||
{
|
{
|
||||||
.msg_id = CW_MSG_CONFIGURATION_STATUS_REQUEST,
|
.msg_id = CW_MSG_CONFIGURATION_STATUS_REQUEST,
|
||||||
.item_id = CW_ITEM_RADIO_ADMINISTRATIVE_STATE,
|
.item_id = CW_RADIOITEM_ADMIN_STATE,
|
||||||
.out = cw_out_radio_administrative_states,
|
.out = cw_out_radio_administrative_states,
|
||||||
.get = cw_out_get_config,
|
.get = cw_out_get_config,
|
||||||
.mand = 1
|
.mand = 1
|
||||||
|
@ -29,7 +29,7 @@ static cw_action_in_t actions_ac_in[] = {
|
|||||||
.capwap_state = CW_STATE_DISCOVERY,
|
.capwap_state = CW_STATE_DISCOVERY,
|
||||||
.msg_id = CW_MSG_DISCOVERY_REQUEST,
|
.msg_id = CW_MSG_DISCOVERY_REQUEST,
|
||||||
.elem_id = CW_ELEM80211_WTP_RADIO_INFORMATION,
|
.elem_id = CW_ELEM80211_WTP_RADIO_INFORMATION,
|
||||||
.item_id = CW_ITEM80211_WTP_RADIO_INFORMATION,
|
.item_id = CW_RADIOITEM80211_WTP_RADIO_INFORMATION,
|
||||||
.start = cw_in_radio_generic,
|
.start = cw_in_radio_generic,
|
||||||
.mand = 1,
|
.mand = 1,
|
||||||
.min_len = 5,
|
.min_len = 5,
|
||||||
@ -47,7 +47,7 @@ static cw_action_in_t actions_ac_in[] = {
|
|||||||
.capwap_state = CW_STATE_JOIN,
|
.capwap_state = CW_STATE_JOIN,
|
||||||
.msg_id = CW_MSG_JOIN_REQUEST,
|
.msg_id = CW_MSG_JOIN_REQUEST,
|
||||||
.elem_id = CW_ELEM80211_WTP_RADIO_INFORMATION,
|
.elem_id = CW_ELEM80211_WTP_RADIO_INFORMATION,
|
||||||
.item_id = CW_ITEM80211_WTP_RADIO_INFORMATION,
|
.item_id = CW_RADIOITEM80211_WTP_RADIO_INFORMATION,
|
||||||
.start = cw_in_radio_generic,
|
.start = cw_in_radio_generic,
|
||||||
.mand = 1,
|
.mand = 1,
|
||||||
.min_len = 5,
|
.min_len = 5,
|
||||||
@ -64,7 +64,7 @@ static cw_action_in_t actions_ac_in[] = {
|
|||||||
.capwap_state = CW_STATE_CONFIGURE,
|
.capwap_state = CW_STATE_CONFIGURE,
|
||||||
.msg_id = CW_MSG_CONFIGURATION_STATUS_REQUEST,
|
.msg_id = CW_MSG_CONFIGURATION_STATUS_REQUEST,
|
||||||
.elem_id = CW_ELEM80211_SUPPORTED_RATES,
|
.elem_id = CW_ELEM80211_SUPPORTED_RATES,
|
||||||
.item_id = CW_ITEM80211_SUPPORTED_RATES,
|
.item_id = CW_RADIOITEM80211_SUPPORTED_RATES,
|
||||||
.start = cw_in_radio_generic,
|
.start = cw_in_radio_generic,
|
||||||
.mand = 0,
|
.mand = 0,
|
||||||
.min_len = 3,
|
.min_len = 3,
|
||||||
@ -90,8 +90,8 @@ cw_action_out_t actions_ac_out[]={
|
|||||||
/* 802.11 Radio Information - Discovery Response */
|
/* 802.11 Radio Information - Discovery Response */
|
||||||
{
|
{
|
||||||
.msg_id = CW_MSG_DISCOVERY_RESPONSE,
|
.msg_id = CW_MSG_DISCOVERY_RESPONSE,
|
||||||
.item_id = CW_ITEM80211_WTP_RADIO_INFORMATION ,
|
|
||||||
.elem_id = CW_ELEM80211_WTP_RADIO_INFORMATION,
|
.elem_id = CW_ELEM80211_WTP_RADIO_INFORMATION,
|
||||||
|
.item_id = CW_RADIOITEM80211_WTP_RADIO_INFORMATION ,
|
||||||
.out = cw_out_radio_infos,
|
.out = cw_out_radio_infos,
|
||||||
.mand = 1
|
.mand = 1
|
||||||
}
|
}
|
||||||
@ -105,8 +105,8 @@ cw_action_out_t actions_ac_out[]={
|
|||||||
/* 802.11 Radio Information - Discovery Response */
|
/* 802.11 Radio Information - Discovery Response */
|
||||||
{
|
{
|
||||||
.msg_id = CW_MSG_JOIN_RESPONSE,
|
.msg_id = CW_MSG_JOIN_RESPONSE,
|
||||||
.item_id = CW_ITEM80211_WTP_RADIO_INFORMATION,
|
|
||||||
.elem_id = CW_ELEM80211_WTP_RADIO_INFORMATION,
|
.elem_id = CW_ELEM80211_WTP_RADIO_INFORMATION,
|
||||||
|
.item_id = CW_RADIOITEM80211_WTP_RADIO_INFORMATION,
|
||||||
.out = cw_out_radio_infos,
|
.out = cw_out_radio_infos,
|
||||||
.mand = 1
|
.mand = 1
|
||||||
}
|
}
|
||||||
@ -135,6 +135,7 @@ int capwap80211_register_actions_ac(struct cw_actiondef *def)
|
|||||||
rc+= cw_strheap_register_strings(def->strelem, capwap_strings_elem80211);
|
rc+= cw_strheap_register_strings(def->strelem, capwap_strings_elem80211);
|
||||||
|
|
||||||
rc += cw_itemdefheap_register(def->items,capwap80211_itemdefs);
|
rc += cw_itemdefheap_register(def->items,capwap80211_itemdefs);
|
||||||
|
rc += cw_itemdefheap_register(def->radioitems,capwap80211_radioitemdefs);
|
||||||
|
|
||||||
/*rc += cw_strheap_register_strings(def->strelem, capwap_strings_elem);
|
/*rc += cw_strheap_register_strings(def->strelem, capwap_strings_elem);
|
||||||
*/
|
*/
|
||||||
|
@ -8,12 +8,6 @@
|
|||||||
#include "cw/capwap80211_items.h"
|
#include "cw/capwap80211_items.h"
|
||||||
#include "cw/radio.h"
|
#include "cw/radio.h"
|
||||||
|
|
||||||
//#include "capwap_80211_actions.h"
|
|
||||||
//#include "capwap_80211.h"
|
|
||||||
//#include "capwap.h"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -28,7 +22,7 @@ static cw_action_in_t actions_wtp_in[] = {
|
|||||||
.capwap_state = CW_STATE_DISCOVERY,
|
.capwap_state = CW_STATE_DISCOVERY,
|
||||||
.msg_id = CW_MSG_DISCOVERY_RESPONSE,
|
.msg_id = CW_MSG_DISCOVERY_RESPONSE,
|
||||||
.elem_id = CW_ELEM80211_WTP_RADIO_INFORMATION,
|
.elem_id = CW_ELEM80211_WTP_RADIO_INFORMATION,
|
||||||
.item_id = CW_ITEM80211_WTP_RADIO_INFORMATION,
|
.item_id = CW_RADIOITEM80211_WTP_RADIO_INFORMATION,
|
||||||
// .start = cw_in_radio_generic,
|
// .start = cw_in_radio_generic,
|
||||||
.mand = 1,
|
.mand = 1,
|
||||||
.min_len = 5,
|
.min_len = 5,
|
||||||
@ -45,7 +39,7 @@ static cw_action_in_t actions_wtp_in[] = {
|
|||||||
.capwap_state = CW_STATE_JOIN,
|
.capwap_state = CW_STATE_JOIN,
|
||||||
.msg_id = CW_MSG_JOIN_RESPONSE,
|
.msg_id = CW_MSG_JOIN_RESPONSE,
|
||||||
.elem_id = CW_ELEM80211_WTP_RADIO_INFORMATION,
|
.elem_id = CW_ELEM80211_WTP_RADIO_INFORMATION,
|
||||||
.item_id = CW_ITEM80211_WTP_RADIO_INFORMATION,
|
.item_id = CW_RADIOITEM80211_WTP_RADIO_INFORMATION,
|
||||||
// .start = cw_in_radio_generic,
|
// .start = cw_in_radio_generic,
|
||||||
.mand = 1,
|
.mand = 1,
|
||||||
.min_len = 5,
|
.min_len = 5,
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
|
|
||||||
OBJS=\
|
OBJS=\
|
||||||
mod_cipwap_ac.o
|
mod_cipwap_ac.o \
|
||||||
|
cipwap_actions_ac.o
|
||||||
|
|
||||||
|
|
||||||
NAME=libcipwap.a
|
NAME=libcipwap.a
|
||||||
|
|
||||||
|
62
src/mod/cipwap/cipwap_actions_ac.c
Normal file
62
src/mod/cipwap/cipwap_actions_ac.c
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
This file is part of libcapwap.
|
||||||
|
|
||||||
|
libcapwap is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
libcapwap is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with Foobar. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "cw/cw.h"
|
||||||
|
#include "cw/action.h"
|
||||||
|
#include "cw/cipwap_items.h"
|
||||||
|
#include "cw/strheap.h"
|
||||||
|
#include "cw/radio.h"
|
||||||
|
|
||||||
|
|
||||||
|
#include "mod_cipwap.h"
|
||||||
|
|
||||||
|
static cw_action_in_t actions_in[] = {
|
||||||
|
|
||||||
|
/* End of list */
|
||||||
|
{0, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
static cw_action_out_t actions_out[]={
|
||||||
|
|
||||||
|
/* End of list */
|
||||||
|
{0,0}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int cipwap_register_actions_ac(struct cw_actiondef *def)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
rc = cw_actionlist_in_register_actions(def->in, actions_in);
|
||||||
|
rc += cw_actionlist_out_register_actions(def->out, actions_out);
|
||||||
|
/*
|
||||||
|
rc += cw_strheap_register_strings(def->strmsg, capwap_strings_msg);
|
||||||
|
rc += cw_strheap_register_strings(def->strelem, capwap_strings_elem);
|
||||||
|
*/
|
||||||
|
rc += cw_itemdefheap_register(def->items, cipwap_itemdefs);
|
||||||
|
|
||||||
|
/* rc += cw_itemdefheap_register(def->radioitems, capwap_radiodefs);
|
||||||
|
intavltree_add(def->wbids, 0);
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
@ -2,5 +2,6 @@
|
|||||||
#define __MOD_CIPWAP_H
|
#define __MOD_CIPWAP_H
|
||||||
|
|
||||||
struct mod_ac * mod_cipwap_ac();
|
struct mod_ac * mod_cipwap_ac();
|
||||||
|
extern int cipwap_register_actions_ac(struct cw_actiondef *def);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
#include "../modload.h"
|
||||||
|
|
||||||
#include "cw/mod.h"
|
#include "cw/mod.h"
|
||||||
#include "cw/log.h"
|
#include "cw/log.h"
|
||||||
#include "cw/dbg.h"
|
#include "cw/dbg.h"
|
||||||
@ -15,11 +18,53 @@ int cipwap_init()
|
|||||||
|
|
||||||
static int detect(struct conn *conn,const uint8_t *rawmsg, int rawlen,int elems_len, struct sockaddr *from, int mode)
|
static int detect(struct conn *conn,const uint8_t *rawmsg, int rawlen,int elems_len, struct sockaddr *from, int mode)
|
||||||
{
|
{
|
||||||
if (mode != MOD_MODE_CAPWAP)
|
if (mode == MOD_MODE_CAPWAP)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int register_actions(struct cw_actiondef *actions, int mode)
|
||||||
|
{
|
||||||
|
switch (mode) {
|
||||||
|
case MOD_MODE_CAPWAP:
|
||||||
|
{
|
||||||
|
|
||||||
|
struct mod_ac *cmod = modload_ac("capwap");
|
||||||
|
if (!cmod) {
|
||||||
|
cw_log(LOG_ERR,
|
||||||
|
"Can't initialize mod_cisco, failed to load base mod mod_capwap");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
cmod->register_actions(actions, MOD_MODE_CAPWAP);
|
||||||
|
int rc = cipwap_register_actions_ac(actions);
|
||||||
|
cw_dbg(DBG_INFO, "Initialized mod_cisco with %d actions", rc);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
case MOD_MODE_BINDINGS:
|
||||||
|
{
|
||||||
|
struct mod_ac *cmod = modload_ac("capwap80211");
|
||||||
|
if (!cmod) {
|
||||||
|
cw_log(LOG_ERR,
|
||||||
|
"Can't initialize mod_cisco, failed to load base mod mod_capwap80211");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
cmod->register_actions(actions, MOD_MODE_BINDINGS);
|
||||||
|
int rc = cipwap_register_actions80211_ac(actions);
|
||||||
|
cw_dbg(DBG_INFO, "Initialized mod_cisco 80211 with %d actions", rc);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
cw_dbg(DBG_MOD,"CIPWAP detected: no");
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -27,7 +72,8 @@ static int detect(struct conn *conn,const uint8_t *rawmsg, int rawlen,int elems_
|
|||||||
static struct mod_ac cipwap_ac = {
|
static struct mod_ac cipwap_ac = {
|
||||||
.name ="cipwap",
|
.name ="cipwap",
|
||||||
.init = cipwap_init,
|
.init = cipwap_init,
|
||||||
.detect = detect
|
.detect = detect,
|
||||||
|
.register_actions=register_actions
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@ OBJS=\
|
|||||||
cisco_in_radio_administrative_state.o \
|
cisco_in_radio_administrative_state.o \
|
||||||
cisco_in_spam_vendor_specific.o \
|
cisco_in_spam_vendor_specific.o \
|
||||||
cisco_in_telnet_ssh.o \
|
cisco_in_telnet_ssh.o \
|
||||||
|
cisco_out_radio_administrative_states.o
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -31,4 +31,8 @@ int cisco_in_telnet_ssh(struct conn *conn, struct cw_action_in *a, uint8_t * dat
|
|||||||
|
|
||||||
int cisco_out_telnet_ssh(struct conn *conn,struct cw_action_out * a,uint8_t *dst);
|
int cisco_out_telnet_ssh(struct conn *conn,struct cw_action_out * a,uint8_t *dst);
|
||||||
|
|
||||||
|
int cisco_out_radio_administrative_states(struct conn *conn, struct cw_action_out *a, uint8_t * dst);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -300,6 +300,17 @@ static cw_action_out_t actions_out[]={
|
|||||||
}
|
}
|
||||||
,
|
,
|
||||||
|
|
||||||
|
/* Radio Administrative State - OUT */
|
||||||
|
{
|
||||||
|
.msg_id = CW_MSG_CONFIGURATION_UPDATE_REQUEST,
|
||||||
|
.elem_id = CW_ELEM_RADIO_ADMINISTRATIVE_STATE,
|
||||||
|
.item_id = CW_RADIOITEM_ADMIN_STATE,
|
||||||
|
.out = cisco_out_radio_administrative_states,
|
||||||
|
.get = cw_out_get_outgoing,
|
||||||
|
.mand = 0
|
||||||
|
}
|
||||||
|
,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -320,7 +331,7 @@ static cw_action_in_t actions80211_in[] = {
|
|||||||
.capwap_state = CW_STATE_DISCOVERY,
|
.capwap_state = CW_STATE_DISCOVERY,
|
||||||
.msg_id = CW_MSG_DISCOVERY_REQUEST,
|
.msg_id = CW_MSG_DISCOVERY_REQUEST,
|
||||||
.elem_id = CW_ELEM80211_WTP_RADIO_INFORMATION,
|
.elem_id = CW_ELEM80211_WTP_RADIO_INFORMATION,
|
||||||
.item_id = CW_ITEM80211_WTP_RADIO_INFORMATION,
|
.item_id = CW_RADIOITEM80211_WTP_RADIO_INFORMATION,
|
||||||
.start = cw_in_radio_generic,
|
.start = cw_in_radio_generic,
|
||||||
.mand = 0,
|
.mand = 0,
|
||||||
.min_len = 5,
|
.min_len = 5,
|
||||||
@ -333,7 +344,7 @@ static cw_action_in_t actions80211_in[] = {
|
|||||||
.vendor_id = CW_VENDOR_ID_CISCO,
|
.vendor_id = CW_VENDOR_ID_CISCO,
|
||||||
.msg_id = CW_MSG_CONFIGURATION_STATUS_REQUEST,
|
.msg_id = CW_MSG_CONFIGURATION_STATUS_REQUEST,
|
||||||
.elem_id = CW_CISCO_SUPPORTED_RATES,
|
.elem_id = CW_CISCO_SUPPORTED_RATES,
|
||||||
.item_id = CW_ITEM80211_SUPPORTED_RATES,
|
.item_id = CW_RADIOITEM80211_SUPPORTED_RATES,
|
||||||
.start = cw_in_radio_generic,
|
.start = cw_in_radio_generic,
|
||||||
.mand = 0,
|
.mand = 0,
|
||||||
.min_len = 5,
|
.min_len = 5,
|
||||||
@ -345,6 +356,7 @@ static cw_action_in_t actions80211_in[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include "cw/item.h"
|
#include "cw/item.h"
|
||||||
|
|
||||||
static struct cw_itemdef _capwap_itemdefs[] = {
|
static struct cw_itemdef _capwap_itemdefs[] = {
|
||||||
|
@ -125,7 +125,7 @@ static cw_action_in_t actions_in[] = {
|
|||||||
.capwap_state = CW_STATE_RUN,
|
.capwap_state = CW_STATE_RUN,
|
||||||
.msg_id = CW_MSG_CONFIGURATION_UPDATE_REQUEST,
|
.msg_id = CW_MSG_CONFIGURATION_UPDATE_REQUEST,
|
||||||
.elem_id = CW_ELEM_RADIO_ADMINISTRATIVE_STATE,
|
.elem_id = CW_ELEM_RADIO_ADMINISTRATIVE_STATE,
|
||||||
.item_id = CW_ITEM_RADIO_ADMINISTRATIVE_STATE,
|
.item_id = CW_RADIOITEM_ADMIN_STATE,
|
||||||
.start = cisco_in_radio_administrative_state_wtp,
|
.start = cisco_in_radio_administrative_state_wtp,
|
||||||
.mand = 1
|
.mand = 1
|
||||||
}
|
}
|
||||||
@ -238,7 +238,7 @@ static cw_action_out_t actions_out[]={
|
|||||||
.vendor_id = CW_VENDOR_ID_CISCO,
|
.vendor_id = CW_VENDOR_ID_CISCO,
|
||||||
.msg_id = CW_MSG_CONFIGURATION_STATUS_REQUEST,
|
.msg_id = CW_MSG_CONFIGURATION_STATUS_REQUEST,
|
||||||
.elem_id = CW_ELEM80211_WTP_RADIO_INFORMATION,
|
.elem_id = CW_ELEM80211_WTP_RADIO_INFORMATION,
|
||||||
.item_id = CW_ITEM80211_WTP_RADIO_INFORMATION,
|
.item_id = CW_RADIOITEM80211_WTP_RADIO_INFORMATION,
|
||||||
.out = cisco_out_80211_wtp_radio_cfg,
|
.out = cisco_out_80211_wtp_radio_cfg,
|
||||||
.get = cw_out_get_config,
|
.get = cw_out_get_config,
|
||||||
.mand = 1
|
.mand = 1
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "cisco.h"
|
#include "cisco.h"
|
||||||
#include "cw/capwap_items.h"
|
#include "cw/cipwap_items.h"
|
||||||
#include "cw/cw.h"
|
#include "cw/cw.h"
|
||||||
#include "cw/dbg.h"
|
#include "cw/dbg.h"
|
||||||
|
|
||||||
@ -14,10 +14,10 @@ int cisco_in_telnet_ssh(struct conn *conn, struct cw_action_in *a, uint8_t * dat
|
|||||||
|
|
||||||
switch (type){
|
switch (type){
|
||||||
case 0:
|
case 0:
|
||||||
mbag_set_byte(conn->incomming,CW_ITEM_TELNET_ENABLE,enable);
|
mbag_set_byte(conn->incomming,CIPWAP_ITEM_TELNET_ENABLE,enable);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
mbag_set_byte(conn->incomming,CW_ITEM_SSH_ENABLE,enable);
|
mbag_set_byte(conn->incomming,CIPWAP_ITEM_SSH_ENABLE,enable);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
cw_dbg(DBG_ELEM_ERR,"Unknown Telnet/SSH Type: %d",type);
|
cw_dbg(DBG_ELEM_ERR,"Unknown Telnet/SSH Type: %d",type);
|
||||||
|
24
src/mod/cisco/cisco_out_radio_administrative_states.c
Normal file
24
src/mod/cisco/cisco_out_radio_administrative_states.c
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#include "cw/cw.h"
|
||||||
|
#include "cw/dbg.h"
|
||||||
|
#include "cw/capwap_items.h"
|
||||||
|
|
||||||
|
|
||||||
|
int cisco_out_radio_administrative_states(struct conn *conn, struct cw_action_out *a, uint8_t * dst)
|
||||||
|
{
|
||||||
|
int l=0;
|
||||||
|
MAVLITER_DEFINE(it,conn->radios_upd);
|
||||||
|
mavliter_foreach(&it){
|
||||||
|
struct mbag_item *i = mavliter_get(&it);
|
||||||
|
if ( i->type != MBAG_MBAG ) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
int state = mbag_get_byte(i->data,CW_RADIOITEM_ADMIN_STATE,CW_RADIO_ADMIN_STATE_DISABLED);
|
||||||
|
l+=cw_put_elem_radio_administrative_state(dst+l,i->iid,i->data);
|
||||||
|
// l+=cw_put_elem_radio_operational_state(dst+l,i->iid,state<<8,0);
|
||||||
|
|
||||||
|
}
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
|||||||
|
|
||||||
#include "cisco.h"
|
#include "cisco.h"
|
||||||
#include "cw/capwap_items.h"
|
#include "cw/capwap_items.h"
|
||||||
|
#include "cw/cipwap_items.h"
|
||||||
|
|
||||||
#include "cw/lwapp.h"
|
#include "cw/lwapp.h"
|
||||||
#include "cw/cw.h"
|
#include "cw/cw.h"
|
||||||
#include "cw/dbg.h"
|
#include "cw/dbg.h"
|
||||||
@ -56,8 +58,8 @@ int cw_cisco_put_telnet_ssh(struct conn *conn,uint8_t type,const char * item_id,
|
|||||||
int cisco_out_telnet_ssh(struct conn *conn,struct cw_action_out * a,uint8_t *dst)
|
int cisco_out_telnet_ssh(struct conn *conn,struct cw_action_out * a,uint8_t *dst)
|
||||||
{
|
{
|
||||||
int l;
|
int l;
|
||||||
l=cw_cisco_put_telnet_ssh(conn,0,CW_ITEM_TELNET_ENABLE,dst);
|
l=cw_cisco_put_telnet_ssh(conn,0,CIPWAP_ITEM_TELNET_ENABLE,dst);
|
||||||
l+=cw_cisco_put_telnet_ssh(conn,1,CW_ITEM_SSH_ENABLE,dst+l);
|
l+=cw_cisco_put_telnet_ssh(conn,1,CIPWAP_ITEM_SSH_ENABLE,dst+l);
|
||||||
return l;
|
return l;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -21,10 +21,10 @@ static int register_actions(struct cw_actiondef *actions, int mode)
|
|||||||
case MOD_MODE_CAPWAP:
|
case MOD_MODE_CAPWAP:
|
||||||
{
|
{
|
||||||
|
|
||||||
struct mod_ac *cmod = modload_ac("capwap");
|
struct mod_ac *cmod = modload_ac("cipwap");
|
||||||
if (!cmod) {
|
if (!cmod) {
|
||||||
cw_log(LOG_ERR,
|
cw_log(LOG_ERR,
|
||||||
"Can't initialize mod_cisco, failed to load base mod mod_capwap");
|
"Can't initialize mod_cisco, failed to load base mod mod_cipwap");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
cmod->register_actions(actions, MOD_MODE_CAPWAP);
|
cmod->register_actions(actions, MOD_MODE_CAPWAP);
|
||||||
|
@ -136,7 +136,7 @@ static int scn_radios(char *js, jsmntok_t * t)
|
|||||||
|
|
||||||
printf("Radio id %d\n",rid);
|
printf("Radio id %d\n",rid);
|
||||||
mbag_t radio=mbag_i_get_mbag_c(conn->radios,rid,mbag_create);
|
mbag_t radio=mbag_i_get_mbag_c(conn->radios,rid,mbag_create);
|
||||||
scn_obj(js,to+1,radio,conn->actions->items /*radioitems*/,NULL);
|
scn_obj(js,to+1,radio,conn->actions->radioitems /*radioitems*/,NULL);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#ifndef __DOT11_H
|
#ifndef __DOT11X_H
|
||||||
#define __DOT11_H
|
#define __DOT11X_H
|
||||||
|
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
@ -114,7 +114,7 @@ int run_join_d(struct sockaddr *sa)
|
|||||||
|
|
||||||
/* we call connect to bind this socket to a local IP address,
|
/* we call connect to bind this socket to a local IP address,
|
||||||
* which we can later obtain by getsockname */
|
* which we can later obtain by getsockname */
|
||||||
rc = connect(sockfd, (struct sockaddr *) sa,
|
/* rc = connect(sockfd, (struct sockaddr *) sa,
|
||||||
sock_addrlen((struct sockaddr *) sa));
|
sock_addrlen((struct sockaddr *) sa));
|
||||||
|
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
@ -123,7 +123,7 @@ int run_join_d(struct sockaddr *sa)
|
|||||||
close(sockfd);
|
close(sockfd);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
cw_dbg(DBG_DTLS, "Establishing DTLS session with %s", sock_addr2str(sa));
|
cw_dbg(DBG_DTLS, "Establishing DTLS session with %s", sock_addr2str(sa));
|
||||||
|
|
||||||
|
@ -132,16 +132,17 @@ int main()
|
|||||||
struct conn *conn = the_conn;
|
struct conn *conn = the_conn;
|
||||||
|
|
||||||
conn->radios = mbag_i_create();
|
conn->radios = mbag_i_create();
|
||||||
|
conn->radios_upd=conn->radios;
|
||||||
mbag_i_set_mbag(conn->radios,0,mbag_create());
|
mbag_i_set_mbag(conn->radios,0,mbag_create());
|
||||||
// mbag_i_set_mbag(conn->radios,1,mbag_create());
|
// mbag_i_set_mbag(conn->radios,1,mbag_create());
|
||||||
// mbag_set_mbag(conn->radios,0xff,mbag_create());
|
// mbag_set_mbag(conn->radios,0xff,mbag_create());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define CWMOD "cisco"
|
//#define CWMOD "cisco"
|
||||||
#define CWBIND "cisco"
|
//#define CWBIND "cisco"
|
||||||
//#define CWMOD "capwap"
|
#define CWMOD "capwap"
|
||||||
//#define CWBIND "capwap80211"
|
#define CWBIND "capwap80211"
|
||||||
|
|
||||||
|
|
||||||
struct mod_wtp *mod = modload_wtp(CWMOD);
|
struct mod_wtp *mod = modload_wtp(CWMOD);
|
||||||
@ -206,11 +207,11 @@ int main()
|
|||||||
printf("RID = %d\n",i->iid);
|
printf("RID = %d\n",i->iid);
|
||||||
printf("DATA: %p\n",i->data);
|
printf("DATA: %p\n",i->data);
|
||||||
mbag_t radio= (mbag_t)i->data;
|
mbag_t radio= (mbag_t)i->data;
|
||||||
struct mbag_item *mri = mbag_get(radio,CW_ITEM80211_WTP_RADIO_INFORMATION);
|
struct mbag_item *mri = mbag_get(radio,CW_RADIOITEM80211_WTP_RADIO_INFORMATION);
|
||||||
|
|
||||||
if (!mri){
|
if (!mri){
|
||||||
printf("Setting to 8 %p %p\n",mri,r);
|
printf("Setting to 8 %p %p\n",mri,r);
|
||||||
mbag_set_dword(radio,CW_ITEM80211_WTP_RADIO_INFORMATION,8);
|
mbag_set_dword(radio,CW_RADIOITEM80211_WTP_RADIO_INFORMATION,1);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
printf("MRI %p\n",mri);
|
printf("MRI %p\n",mri);
|
||||||
|
@ -1,4 +1,9 @@
|
|||||||
|
|
||||||
|
|
||||||
int wtpdrv_get_num_radios();
|
//int wtpdrv_get_num_radios();
|
||||||
|
|
||||||
|
struct wtpdrv
|
||||||
|
{
|
||||||
|
int (*get_num_raadios)();
|
||||||
|
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user