Work in progress
FossilOrigin-Name: 155605fd55cbb193d4f5ac8c704930c050a11cda541f1a5cdb93c57a8c51534f
This commit is contained in:
16
src/ac/ac.h
16
src/ac/ac.h
@ -1,10 +1,15 @@
|
||||
#include "cw/capwap.h"
|
||||
#include "cw/mbag.h"
|
||||
#ifndef __ACTUBE_AC_H
|
||||
#define __ACTUBE_AC_H
|
||||
|
||||
#include "cw/mavl.h"
|
||||
|
||||
extern mavl_t actube_global_cfg;
|
||||
|
||||
|
||||
extern struct ac_status ac_global_status;
|
||||
extern int ac_global_init();
|
||||
extern mbag_t ac_config;
|
||||
extern struct cw_actiondef capwap_actions;
|
||||
|
||||
|
||||
int actube_global_init();
|
||||
|
||||
|
||||
/* the protocol we understand */
|
||||
@ -17,3 +22,4 @@ enum {
|
||||
|
||||
|
||||
|
||||
#endif
|
@ -17,8 +17,8 @@ struct cw_ac_status ac_status;
|
||||
|
||||
struct cw_actiondef capwap_actions;
|
||||
|
||||
mbag_t ac_config;
|
||||
|
||||
mavl_t actube_global_cfg;
|
||||
|
||||
cw_aciplist_t get_aciplist()
|
||||
{
|
||||
|
376
src/ac/ac_main.c
376
src/ac/ac_main.c
@ -21,7 +21,7 @@
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <stdint.h>
|
||||
//#include <netinet/in.h>
|
||||
|
||||
|
||||
#include "actube.h"
|
||||
#include "wtplist.h"
|
||||
@ -63,32 +63,69 @@ static void *alive_thread (void *data)
|
||||
|
||||
|
||||
#include <getopt.h>
|
||||
static int parse_args (int argc, char *argv[])
|
||||
|
||||
|
||||
|
||||
struct bootcfg {
|
||||
const char * cfgfilename;
|
||||
};
|
||||
|
||||
static int parse_args (int argc, char *argv[], struct bootcfg * bootcfg)
|
||||
{
|
||||
// int getopt_ret;
|
||||
int option_index;
|
||||
int c;
|
||||
opterr = 1;
|
||||
|
||||
static struct option long_options[] = {
|
||||
{"version", optional_argument, NULL, 'v'},
|
||||
{0, 0, 0, 0}
|
||||
};
|
||||
int o;
|
||||
bootcfg->cfgfilename = "config.ktv";
|
||||
|
||||
while ( (o = getopt_long (argc, argv, "v", long_options, &option_index)) != -1) {
|
||||
switch (o) {
|
||||
case 0:
|
||||
while ( (c = getopt (argc, argv, "vc:d:p:")) != -1) {
|
||||
|
||||
switch (c) {
|
||||
case 'c':
|
||||
bootcfg->cfgfilename = optarg;
|
||||
break;
|
||||
|
||||
case 'v':
|
||||
printf ("AC-Tube 0.01, %s\n", SYS_ARCH);
|
||||
exit (0);
|
||||
printf("AC-Tube version 0.0.1, %s\n", SYS_ARCH);
|
||||
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 'p':
|
||||
cw_mod_set_path(optarg);
|
||||
break;
|
||||
case '?':
|
||||
exit(EXIT_FAILURE);
|
||||
default:
|
||||
case 'h':
|
||||
printf("%s: -vcmh\n",argv[0]);
|
||||
exit(EXIT_SUCCESS);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#include "cw/mod.h"
|
||||
extern struct cw_Mod * cw_get_mod_ac (const char *name);
|
||||
|
||||
@ -151,274 +188,55 @@ int stcmp (const void * sa1, const void *sa2)
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
mlist_t list;
|
||||
mlistelem_t * elem;
|
||||
|
||||
list = mlist_create_conststr();
|
||||
|
||||
|
||||
mlist_append_ptr(list, "helo");
|
||||
mlist_append_ptr(list, "tobias");
|
||||
mlist_append_ptr(list, "nase");
|
||||
|
||||
|
||||
mlist_foreach(elem,list){
|
||||
// data = mlistelem_dataptr(elem);
|
||||
// char * str = ((char**)data)[0];
|
||||
// printf("%p %p\n",data,str);
|
||||
printf("String: %s\n", mlistelem_get_str(elem));
|
||||
}
|
||||
|
||||
mlist_destroy(list);
|
||||
|
||||
mlist_foreach(elem,list){
|
||||
// data = mlistelem_dataptr(elem);
|
||||
// char * str = ((char**)data)[0];
|
||||
// printf("%p %p\n",data,str);
|
||||
printf("String: %s\n", mlistelem_get_str(elem));
|
||||
}
|
||||
|
||||
//exit(0);
|
||||
|
||||
|
||||
/* mavl_t tree;
|
||||
int i;
|
||||
mavliter_t it;
|
||||
|
||||
|
||||
mlist_t list;
|
||||
struct mlistelem * elem;
|
||||
|
||||
int x;
|
||||
|
||||
list = mlist_create(NULL,sizeof(int));
|
||||
|
||||
x=8;
|
||||
mlist_append(list,&x);
|
||||
|
||||
x=13;
|
||||
mlist_append(list,&x);
|
||||
|
||||
x=11;
|
||||
mlist_append(list,&x);
|
||||
|
||||
for(i=0; i<100000000; i++){
|
||||
int val;
|
||||
val = i;
|
||||
mlistelem_t * result;
|
||||
result = mlist_append(list,&val);
|
||||
if (result == NULL){
|
||||
printf("error\n");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
printf("Count %d\n",list->count);
|
||||
mlist_foreach(elem,list){
|
||||
int * data = mlistelem_dataptr(elem);
|
||||
printf("Here is %d\n",*data);
|
||||
}
|
||||
|
||||
|
||||
exit(0);
|
||||
*/
|
||||
|
||||
/*tree = mavl_create_ptr( (int(*)(const void*,const void*))strcmp,free);
|
||||
*/
|
||||
|
||||
/*
|
||||
tree = mavl_create_ptr(mycmp,NULL);
|
||||
|
||||
struct mykv * mdata;
|
||||
|
||||
|
||||
mdata = malloc(sizeof(struct mykv));
|
||||
mdata->key=14;
|
||||
mdata->value=15;
|
||||
mavl_add_ptr(tree, mdata);
|
||||
|
||||
mdata = malloc(sizeof(struct mykv));
|
||||
mdata->key=16;
|
||||
mdata->value=17;
|
||||
mavl_add_ptr(tree, mdata);
|
||||
|
||||
mdata = malloc(sizeof(struct mykv));
|
||||
mdata->key=12;
|
||||
mdata->value=13;
|
||||
mavl_add_ptr(tree, mdata);
|
||||
|
||||
mavliter_init(&it,tree);
|
||||
mavliter_foreach(&it){
|
||||
mdata = mavliter_get_ptr(&it);
|
||||
printf("MAVLIT: %d %d\n",mdata->key,mdata->value);
|
||||
|
||||
struct mykv search;
|
||||
search.key=mdata->key;
|
||||
mdata = mavl_get_ptr(tree,&search);
|
||||
printf("Search T: %d %d\n",mdata->key,mdata->value);
|
||||
}
|
||||
|
||||
exit(0);
|
||||
*/
|
||||
|
||||
/*
|
||||
if (tree==NULL)
|
||||
return 0;
|
||||
|
||||
tree = mavl_create_str();
|
||||
|
||||
mavl_add_str(tree,cw_strdup("7u83"));
|
||||
mavl_add_str(tree,cw_strdup("Herre"));
|
||||
mavl_add_str(tree,cw_strdup("Tube"));
|
||||
mavl_add_str(tree,cw_strdup("Tobias"));
|
||||
printf("Count: %d\n", mavl_get_count(tree));
|
||||
mavliter_init(&it,tree);
|
||||
|
||||
mavliter_foreach(&it){
|
||||
|
||||
printf("iterWert %s\n",mavliter_get_str(&it));
|
||||
}
|
||||
*/
|
||||
/*
|
||||
tree = mavl_create (mycmp, NULL, sizeof (struct mykv));
|
||||
|
||||
struct mykv nwert;
|
||||
int result;
|
||||
struct mykv * mr;
|
||||
|
||||
nwert.key = 7;
|
||||
nwert.value = 777;
|
||||
mr = mavl_add_exists (tree, &nwert, &result);
|
||||
printf ("7Result %d: %d %d\n", result, mr->key, mr->value);
|
||||
|
||||
for (i = 0; i < 10; i++) {
|
||||
//cw_rand(&nwert.key,sizeof(nwert.key));
|
||||
// printf("Addwert: %u\n",nwert.key);
|
||||
// printf("add %u\n", i);
|
||||
nwert.key = 9 - i;
|
||||
nwert.value = 100 + i;
|
||||
result=0;
|
||||
mr = mavl_add_exists (tree, &nwert, &result);
|
||||
printf ("Result %d: %d %d\n", result, mr->key, mr->value);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
mavliter_init (&it, tree);
|
||||
|
||||
mavliter_foreach (&it) {
|
||||
struct mykv *kv;
|
||||
kv = mavliter_get (&it);
|
||||
printf ("iterWert %u\n", kv->key);
|
||||
}
|
||||
|
||||
exit (0);
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* mavl_t kv;
|
||||
mavliter_t kviter;
|
||||
uint8_t bytes[] = { 99,4,5,7 };
|
||||
|
||||
|
||||
kv = cw_types_mavl_create();
|
||||
//mavl_cmp_kv,cw_type_delete);
|
||||
|
||||
mavldata_t data, *result;
|
||||
|
||||
data.kv.key="wtp_board_data";
|
||||
result = cw_type_byte.get(&data,bytes,1);
|
||||
mavl_add(kv,result);
|
||||
|
||||
data.kv.key="wtp_next_data";
|
||||
result = cw_type_byte.get(&data,bytes+1,1);
|
||||
mavl_add(kv,result);
|
||||
|
||||
|
||||
mavliter_init(&kviter,kv);
|
||||
mavliter_foreach(&kviter){
|
||||
char value[500];
|
||||
mavldata_t * data;
|
||||
data = mavliter_get(&kviter);
|
||||
struct cw_Type * type = data->kv.priv;
|
||||
type->to_str(data,value,0);
|
||||
|
||||
printf("Got %s (%s): %s\n",data->kv.key,type->name, value);
|
||||
}
|
||||
|
||||
mavl_destroy(kv);
|
||||
exit(0);
|
||||
*/
|
||||
|
||||
|
||||
/* cw_log_init();
|
||||
cw_log(LOG_ERROR,"Hello Debug World222");
|
||||
exit(0);
|
||||
*/
|
||||
/*
|
||||
char * dump_data = "Eine kleine Mickey Maus zog sich mal die Hosen\
|
||||
aus, zog sie wieder an, und du bist dran. Dran bist du noch lange nicht\
|
||||
musst erst sagen, wie alt du bist.";
|
||||
|
||||
char * result = cw_format_dump(dump_data,strlen(dump_data),NULL);
|
||||
|
||||
printf("Dump Result:\n%s\n", result);
|
||||
exit(0);
|
||||
*/
|
||||
|
||||
/* char data[100];
|
||||
mavl_t im;
|
||||
mavldata_t * val, * val2,itt, itt2, * result, search ;
|
||||
mavliter_t myit;
|
||||
|
||||
im = mavl_create(mavl_cmp_dword,NULL);
|
||||
itt.dword = 7;
|
||||
itt2.dword = 7;
|
||||
|
||||
|
||||
val = mavl_add(im,&itt);
|
||||
val2 = mavl_add(im,&itt2);
|
||||
|
||||
search.dword = 7;
|
||||
result = mavl_get(im,&search);
|
||||
|
||||
printf("Result: (%p, %p) (%p, %p) (%p, %p)\n",val, &itt, val2, &itt2, result, &search);
|
||||
|
||||
exit(0);
|
||||
|
||||
|
||||
for (itt.dword=100; itt.dword>0; itt.dword--){
|
||||
printf("Copunting: %d\n",itt.dword);
|
||||
mavl_add(im,&itt);
|
||||
}
|
||||
|
||||
mavliter_init(&myit,im);
|
||||
mavliter_foreach(&myit){
|
||||
union mavldata * result;
|
||||
result = mavliter_get(&myit);
|
||||
printf("Got Value %d\n",result->dword);
|
||||
}
|
||||
|
||||
mavl_destroy(im);
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
int rc = 0;
|
||||
|
||||
struct bootcfg bootcfg;
|
||||
FILE * file;
|
||||
mavl_t types_tree, global_cfg;
|
||||
const cw_Type_t **ti;
|
||||
|
||||
/* parse arguments */
|
||||
parse_args (argc, argv);
|
||||
parse_args (argc, argv, &bootcfg);
|
||||
|
||||
/* open config file */
|
||||
file = fopen(bootcfg.cfgfilename,"r");
|
||||
if (file == NULL){
|
||||
cw_log(LOG_ERR,"Cant open config file '%s': %s",
|
||||
bootcfg.cfgfilename, strerror(errno));
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
/* create types tree with default types */
|
||||
types_tree = cw_ktv_create_types_tree();
|
||||
for (ti=CW_KTV_STD_TYPES;*ti;ti++){
|
||||
mavl_add_ptr(types_tree,*ti);
|
||||
}
|
||||
|
||||
global_cfg = cw_ktv_create();
|
||||
if (global_cfg == NULL){
|
||||
cw_log(LOG_ERR,"Can't create local_cfg: %s",strerror(errno));
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
cw_ktv_read_file(file,global_cfg,types_tree);
|
||||
|
||||
fclose(file);
|
||||
|
||||
cw_ktv_dump(global_cfg,DBG_INFO,NULL,"CFG:",NULL);
|
||||
actube_global_cfg = global_cfg;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
cw_log_name = "AC-Tube";
|
||||
|
||||
if (!read_config ("ac.conf"))
|
||||
|
@ -577,7 +577,8 @@ static int conf_read_mods(cfg_t *cfg){
|
||||
|
||||
for (i=0; i < n; i++){
|
||||
char *modname = cfg_getnstr(cfg, CFG_ENTRY_MODS, i);
|
||||
struct cw_Mod * mod = cw_mod_load(modname);
|
||||
struct cw_Mod * mod = cw_mod_load(modname, actube_global_cfg, CW_ROLE_AC);
|
||||
|
||||
if (!mod)
|
||||
return 0;
|
||||
cw_mod_add_to_list(mod);
|
||||
|
@ -751,11 +751,17 @@ struct wtpman *wtpman_create(int socklistindex, struct sockaddr *srcaddr)
|
||||
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->local = ac_config;
|
||||
//wtpman->conn->capwap_mode=0; //CW_MODE_STD; //CISCO;
|
||||
wtpman->conn->capwap_mode = CW_MODE_CISCO;
|
||||
//wtpman->conn->strict_capwap_hdr=0;
|
||||
|
||||
|
||||
|
||||
|
||||
wtpman->conn->local_cfg = cw_ktv_create();
|
||||
wtpman->conn->global_cfg = actube_global_cfg;
|
||||
|
||||
return wtpman;
|
||||
}
|
||||
|
||||
|
@ -29,7 +29,7 @@ struct wtpman{
|
||||
uint8_t * session_id;
|
||||
uint8_t wtp_mactype;
|
||||
|
||||
//struct wtpinfo wtpinfo;
|
||||
/* //struct wtpinfo wtpinfo;*/
|
||||
|
||||
|
||||
int socklistindex;
|
||||
|
Reference in New Issue
Block a user