Some work on wtp and ktv config files
FossilOrigin-Name: 3747732055809fd587f96cff65c389a0878a09a197947c1e68a76f605bdb44a0
This commit is contained in:
141
src/wtp/Makefile
141
src/wtp/Makefile
@ -1,56 +1,19 @@
|
||||
include ../Config.mak
|
||||
include ../WtpConfig.mak
|
||||
-include ../Config.local.mak
|
||||
-include ../WtpConfig.local.mak
|
||||
include ../Macros.mak
|
||||
|
||||
ifndef CC
|
||||
CC=gcc
|
||||
endif
|
||||
|
||||
|
||||
V=0
|
||||
|
||||
CFLAGS+=-DWITH_RMAC_SUPPORT
|
||||
CFLAGS+=-DWITH_IPV6
|
||||
CFLAGS+=-DWITH_CW_LOG
|
||||
CFLAGS+=-DWITH_CW_LOG_DEBUG
|
||||
CFLAGS+=-DWITH_DTLS
|
||||
|
||||
|
||||
ifndef ARCH
|
||||
ARCH = $(shell $(CC) -dumpmachine)
|
||||
endif
|
||||
|
||||
|
||||
CFLAGS += -O0 -Wall -Wno-unused-variable -Werror -g
|
||||
#CFLAGS += -Os -Wall
|
||||
LDFLAGS += -L../contrib/jsmn -L../../src/lib/$(ARCH)
|
||||
|
||||
|
||||
CONFOBJS = wtp_conf.o
|
||||
|
||||
|
||||
LIBS+=-lcapwap
|
||||
LIBS+=-lcapwap80211
|
||||
LIBS+=-lcipwap
|
||||
LIBS+=-lcisco
|
||||
LIBS+=-lfortinet
|
||||
LIBS+=-lcw
|
||||
LIBS+=-lnl-3
|
||||
LIBS+=-lnl-genl-3
|
||||
LIBS+=-ljsmn
|
||||
|
||||
|
||||
|
||||
ifeq ($(CONF_LIBRARY),UCI)
|
||||
CFLAGS+=-DWITH_UCI
|
||||
LIBS+=-luci -lubox
|
||||
CONFOBJS += conf_uci.o
|
||||
else
|
||||
LIBS+=-lconfuse
|
||||
CONFOBJS += wtp_conf_confuse.o
|
||||
endif
|
||||
|
||||
|
||||
LIBDIR := ../../lib
|
||||
LIBARCHDIR := $(LIBDIR)/$(ARCH)
|
||||
OBJDIR := ../../obj/wtp/$(ARCH)
|
||||
EXENAME := ./wtp
|
||||
|
||||
LIBS := -lcw
|
||||
#STATICLIBS := $(LIBDIR)/$(ARCH)/libcw.a
|
||||
LDFLAGS += -L$(LIBARCHDIR)
|
||||
|
||||
ifeq ($(SSL_LIBRARY),GNUTLS)
|
||||
CFLAGS+=-DWITH_GNUTLS
|
||||
@ -67,76 +30,34 @@ LIBS+=$(OPENSSL_LIBS)
|
||||
endif
|
||||
|
||||
|
||||
#SRC=$(wildcard *.c)
|
||||
SRC=wtp_main.c
|
||||
|
||||
OBJS=$(patsubst %.c,%.o,$(SRC))
|
||||
OBJS:=$(patsubst %.o,$(OBJDIR)/%.o,$(OBJS))
|
||||
|
||||
#HA_FILES += ../contrib/hostap/src/drivers/driver_nl80211.o
|
||||
|
||||
HA_INCS += -I$(INCLUDE_DIR)/libnl-tiny
|
||||
HA_INCS += -I../contrib/hostap/src/utils
|
||||
HA_INCS += -I../contrib/hostap/src
|
||||
|
||||
CFLAGS += $(HA_INCS)
|
||||
|
||||
|
||||
#CFLAGS += -I../src
|
||||
#CFLAGS += -I../src/utils
|
||||
CFLAGS += -I../../src -I /usr/local/include -I ../contrib/jsmn
|
||||
|
||||
#CFLAGS += -I/usr/local/include
|
||||
|
||||
|
||||
|
||||
|
||||
OBJS += wtp_main.o
|
||||
OBJS += image_update.o
|
||||
OBJS += cfg.o
|
||||
|
||||
|
||||
#OBJS += wtp_conf.o
|
||||
|
||||
|
||||
OBJS += discovery.o
|
||||
OBJS += wtp_interface.o
|
||||
OBJS += wtpdrv.o
|
||||
OBJS += dot11.o
|
||||
OBJS += join.o
|
||||
OBJS += run.o
|
||||
OBJS += sulking.o
|
||||
OBJS += configure.o
|
||||
OBJS += changestate.o
|
||||
OBJS += setup_conf.o
|
||||
OBJS += $(CONFOBJS)
|
||||
|
||||
|
||||
OBJS += nlt_attrnames.o
|
||||
OBJS += nlt_cmdnames.o
|
||||
OBJS += nlt.o
|
||||
|
||||
#OBJS += $(HA_FILES)
|
||||
|
||||
ALL=wtp
|
||||
ALL=$(EXENAME)
|
||||
|
||||
all: $(ALL)
|
||||
|
||||
Q=@
|
||||
E=echo
|
||||
ifeq ($(V), 1)
|
||||
Q=
|
||||
E=true
|
||||
endif
|
||||
|
||||
%.o: %.c
|
||||
@$(E) " CC " $<
|
||||
$(Q)$(CC) -c -o $@ $(CFLAGS) $<
|
||||
$(OBJDIR)/%.o:%.c
|
||||
@mkdir -p $(OBJDIR)
|
||||
@echo " $(CC) "$<
|
||||
@$(CC) -c $(CFLAGS) $< -o $@
|
||||
|
||||
$(EXENAME): $(OBJS)
|
||||
@echo " $(LD) $(EXENAME)"
|
||||
@$(LD) $(LDFLAGS) -o $(EXENAME) $(OBJS) $(LIBS) $(STATICLIBS)
|
||||
|
||||
|
||||
wtp: $(OBJS)
|
||||
$(Q)$(CC) $(OBJS) ../mod/modload_wtp.o -o wtp $(LDFLAGS) $(LIBS)
|
||||
@$(E) " LD " $@
|
||||
clean:
|
||||
$(RM) $(OBJDIR)/*
|
||||
$(RM) $(EXENAME)
|
||||
|
||||
clean:
|
||||
# $(MAKE) -C ../src clean
|
||||
rm -f *.o
|
||||
rm -f *.d
|
||||
deps:
|
||||
echo "# DO NOT DELETE THIS LINE -- make depend depends on it." > .depend
|
||||
makedepend $(SRC) -f.depend -p$(OBJDIR)/
|
||||
|
||||
-include $(OBJS:%.o=%.d)
|
||||
|
||||
-include .depend
|
||||
|
@ -1,233 +1,110 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
|
||||
#include "cw/capwap.h"
|
||||
#include "cw/cipwap.h"
|
||||
#include "cw/capwap_items.h"
|
||||
#include "cw/conn.h"
|
||||
#include "cw/log.h"
|
||||
#include "cw/dtls.h"
|
||||
#include "cw/acpriolist.h"
|
||||
//#include "cw/capwap_80211.h"
|
||||
#include "cw/radio.h"
|
||||
#include "cw/capwap80211_items.h"
|
||||
|
||||
#include "cw/mod.h"
|
||||
|
||||
|
||||
#include "wtp.h"
|
||||
#include "wtp_conf.h"
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
\
|
||||
|
||||
#include "cw/ktv.h"
|
||||
#include "cw/dbg.h"
|
||||
#include "cw/mavl.h"
|
||||
#include "cw/log.h"
|
||||
#include "cw/msgset.h"
|
||||
|
||||
#include "jsmn.h"
|
||||
struct bootcfg{
|
||||
const char * modname;
|
||||
const char * modpath;
|
||||
const char * cfgfilename;
|
||||
};
|
||||
|
||||
#include "cfg.h"
|
||||
|
||||
|
||||
#include "../mod/modload.h"
|
||||
|
||||
|
||||
|
||||
/** The one and only connection object */
|
||||
struct conn *the_conn;
|
||||
struct cw_actiondef capwap_actions;
|
||||
|
||||
|
||||
|
||||
|
||||
const char *t = CW_ITEM_WTP_NAME;
|
||||
|
||||
#include <signal.h>
|
||||
|
||||
|
||||
|
||||
void update_reboot_stats(struct conn * conn, int cause)
|
||||
static int parse_args (int argc, char *argv[], struct bootcfg * bootcfg)
|
||||
{
|
||||
|
||||
|
||||
mbag_t rs = mbag_get_mbag(conn->config,CW_ITEM_WTP_REBOOT_STATISTICS,NULL);
|
||||
|
||||
switch (cause){
|
||||
case CW_REBOOT_TYPE_NOT_SUPPORTED:
|
||||
break;
|
||||
case CW_REBOOT_TYPE_AC_INITIATED:
|
||||
mbag_inc_word(rs,CW_ITEM_REBOOT_AC_INITIATED_COUNT,1);
|
||||
break;
|
||||
case CW_REBOOT_TYPE_OTHER_FAILURE:
|
||||
mbag_inc_word(rs,CW_ITEM_REBOOT_OTHER_FAILURE_COUNT,1);
|
||||
break;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
mbag_inc_word(rs,CW_ITEM_REBOOT_COUNT,1);
|
||||
mbag_set_byte(rs,CW_ITEM_REBOOT_LAST_FAILURE_TYPE,cause);
|
||||
cfg_to_json();
|
||||
}
|
||||
|
||||
|
||||
static void sig_handler(int sig)
|
||||
{
|
||||
struct conn * conn = the_conn; //get_conn();
|
||||
|
||||
update_reboot_stats(conn, CW_REBOOT_TYPE_OTHER_FAILURE);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
#include "cw/dot11.h"
|
||||
#include "cw/format.h"
|
||||
|
||||
#include "cw/capwap80211_types.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
|
||||
signal (SIGINT, sig_handler);
|
||||
|
||||
wtpconf_preinit();
|
||||
|
||||
if (!read_config("./wtp_uci.conf")) {
|
||||
return 1;
|
||||
}
|
||||
// cw_dbg_opt_level = conf_dbg_level;
|
||||
|
||||
|
||||
if (!wtpconf_init()){
|
||||
return 1;
|
||||
};
|
||||
|
||||
cw_dbg_opt_display = DBG_DISP_ASC_DMP | DBG_DISP_COLORS;
|
||||
|
||||
dtls_init();
|
||||
|
||||
|
||||
the_conn = conn_create_noq(-1, NULL);
|
||||
struct conn *conn = the_conn;
|
||||
|
||||
conn->radios = mbag_i_create();
|
||||
conn->radios_upd=mbag_i_create();
|
||||
|
||||
mbag_i_set_mbag(conn->radios,0,mbag_create());
|
||||
mbag_i_set_mbag(conn->radios_upd,0,mbag_create());
|
||||
|
||||
|
||||
|
||||
#define CWMOD "cisco"
|
||||
#define CWBIND "cisco"
|
||||
//#define CWMOD "capwap"
|
||||
//#define CWBIND "capwap80211"
|
||||
|
||||
|
||||
struct cw_Mod *mod = modload_wtp(CWMOD);
|
||||
if (!mod) {
|
||||
printf("Can't load mod capwap\n");
|
||||
exit(0);
|
||||
}
|
||||
mod->init();
|
||||
|
||||
mod->register_actions(&capwap_actions,CW_MOD_MODE_CAPWAP);
|
||||
mod = modload_wtp(CWBIND);
|
||||
if (!mod) {
|
||||
printf("Can't load mod capwap80211\n");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
int rc = mod->register_actions(&capwap_actions,MOD_MODE_BINDINGS);
|
||||
|
||||
conn->detected = 1;
|
||||
conn->dtls_verify_peer=0;
|
||||
conn->dtls_mtu = 12000;
|
||||
|
||||
|
||||
conn->actions = &capwap_actions;
|
||||
|
||||
conn->outgoing = mbag_create();
|
||||
conn->incomming = mbag_create();
|
||||
conn->local = mbag_create();
|
||||
conn->config = mbag_create();
|
||||
|
||||
the_conn->strict_capwap = 0;
|
||||
|
||||
cfg_from_json(conn);
|
||||
setup_conf(conn);
|
||||
|
||||
mbag_t r;
|
||||
// r = mbag_i_get_mbag(conn->radios,0,NULL);
|
||||
r = conn->radios;
|
||||
MAVLITER_DEFINE(it,r);
|
||||
mavliter_foreach(&it){
|
||||
struct mbag_item *i=mavliter_get(&it);
|
||||
printf("RID = %d\n",i->iid);
|
||||
printf("DATA: %p\n",i->data);
|
||||
mbag_t radio= (mbag_t)i->data;
|
||||
struct mbag_item *mri = mbag_get(radio,CW_RADIOITEM80211_WTP_RADIO_INFORMATION);
|
||||
|
||||
if (!mri){
|
||||
printf("Setting to 8 %p %p\n",mri,r);
|
||||
mbag_set_dword(radio,CW_RADIOITEM80211_WTP_RADIO_INFORMATION,1);
|
||||
}
|
||||
else{
|
||||
printf("MRI %p\n",mri);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
int c;
|
||||
opterr = 1;
|
||||
|
||||
|
||||
|
||||
|
||||
mod_init_config(mod,conn->config);
|
||||
cfg_to_json();
|
||||
|
||||
mbag_t mb = mbag_get_mbag(conn->config, CW_ITEM_WTP_BOARD_DATA, NULL);
|
||||
printf("mbag %p\n", mb);
|
||||
|
||||
|
||||
cw_acpriolist_t acprios = cw_acpriolist_create();
|
||||
cw_acpriolist_set(acprios, "Master AC", strlen("Master AC"), 1);
|
||||
cw_acpriolist_set(acprios, "AC8new", strlen("AC8new"), 12);
|
||||
|
||||
|
||||
|
||||
mbag_set_byte(conn->local, CW_ITEM_WTP_MAC_TYPE, CAPWAP_WTP_MAC_TYPE_SPLIT);
|
||||
mbag_set_byte(conn->local, CW_ITEM_WTP_FRAME_TUNNEL_MODE, CW_WTP_FRAME_TUNNEL_MODE_E);
|
||||
conn->wbid=1;
|
||||
|
||||
|
||||
|
||||
|
||||
// cw_set_msg_end_callback(conn->actions,CW_STATE_RUN,CW_MSG_CONFIGURATION_UPDATE_REQUEST,handle_update_req);
|
||||
|
||||
|
||||
if (!discovery())
|
||||
return -1;
|
||||
if (!join())
|
||||
return -1;
|
||||
|
||||
if (!configure())
|
||||
return -1;
|
||||
|
||||
cw_dbg(DBG_X,"Saveing config 0");
|
||||
|
||||
cfg_to_json();
|
||||
|
||||
changestate();
|
||||
|
||||
|
||||
run();
|
||||
|
||||
//image_update();
|
||||
|
||||
bootcfg->modname = "cisco";
|
||||
bootcfg->cfgfilename = "config.ktv";
|
||||
|
||||
while ( (c = getopt (argc, argv, "p:d:vc:m:h")) != -1) {
|
||||
|
||||
switch (c) {
|
||||
case 'v':
|
||||
printf("WFAT version 0.0.1\n");
|
||||
exit(EXIT_SUCCESS);
|
||||
break;
|
||||
case 'd':{
|
||||
int b = cw_strlist_get_id(cw_dbg_strings, optarg);
|
||||
if (b==-1){
|
||||
fprintf(stderr,"Invalid debug option: %s\n",optarg);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
cw_dbg_set_level(b, 1);
|
||||
break;
|
||||
}
|
||||
case 'm':
|
||||
bootcfg->modname = optarg;
|
||||
break;
|
||||
case 'p':
|
||||
cw_mod_set_path(optarg);
|
||||
break;
|
||||
case 'c':
|
||||
bootcfg->cfgfilename = optarg;
|
||||
case '?':
|
||||
exit(EXIT_FAILURE);
|
||||
default:
|
||||
case 'h':
|
||||
printf("%s: -vcmh\n",argv[0]);
|
||||
exit(EXIT_SUCCESS);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
struct conn *get_conn()
|
||||
int main (int argc, char **argv)
|
||||
{
|
||||
return the_conn;
|
||||
mavl_t types;
|
||||
mavliter_t it;
|
||||
struct bootcfg bootcfg;
|
||||
struct cw_Mod * mod;
|
||||
struct cw_MsgSet * msgset;
|
||||
|
||||
parse_args(argc,argv, &bootcfg);
|
||||
|
||||
|
||||
msgset = cw_msgset_create();
|
||||
if (msgset==NULL){
|
||||
cw_log(LOG_ERR, "Error creating msgset: %s", strerror(errno));
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
mod = cw_mod_load(bootcfg.modname);
|
||||
if (mod == NULL){
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
mod->register_messages(msgset, CW_MOD_MODE_CAPWAP);
|
||||
mod->register_messages(msgset, CW_MOD_MODE_BINDINGS);
|
||||
|
||||
|
||||
|
||||
types = cw_ktv_create_types_tree();
|
||||
if (types == NULL){
|
||||
perror("Error creating types tree");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
mavl_add_ptr(types,CW_TYPE_BSTR16);
|
||||
mavl_add_ptr(types,CW_TYPE_DWORD);
|
||||
|
||||
mavliter_init(&it,types);
|
||||
mavliter_foreach(&it){
|
||||
struct cw_Type * t = mavliter_get_ptr(&it);
|
||||
printf("The Type is %s\n",t->name);
|
||||
}
|
||||
|
||||
return (EXIT_SUCCESS);
|
||||
}
|
||||
|
Reference in New Issue
Block a user