new mavl is working now
FossilOrigin-Name: 65a4eefffea57509c0d7fd573e53b15bf4a730ce297b7db182aaac796ea92448
This commit is contained in:
742
src/ac/ac_main.c
742
src/ac/ac_main.c
@ -52,208 +52,367 @@
|
||||
int ac_run();
|
||||
|
||||
|
||||
static void *alive_thread(void *data)
|
||||
static void *alive_thread (void *data)
|
||||
{
|
||||
/* Ping the database every 5 seconds */
|
||||
while (1) {
|
||||
sleep(5);
|
||||
sleep (5);
|
||||
db_ping();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#include <getopt.h>
|
||||
static int parse_args(int argc, char *argv[])
|
||||
static int parse_args (int argc, char *argv[])
|
||||
{
|
||||
// int getopt_ret;
|
||||
int option_index;
|
||||
|
||||
|
||||
static struct option long_options[] = {
|
||||
{"version", optional_argument, NULL, 'v'},
|
||||
{0, 0, 0, 0}
|
||||
};
|
||||
int o;
|
||||
while ((o = getopt_long(argc, argv, "v", long_options, &option_index)) != -1) {
|
||||
|
||||
while ( (o = getopt_long (argc, argv, "v", long_options, &option_index)) != -1) {
|
||||
switch (o) {
|
||||
case 0:
|
||||
break;
|
||||
|
||||
case 'v':
|
||||
printf("AC-Tube 0.01, %s\n", SYS_ARCH);
|
||||
exit(0);
|
||||
printf ("AC-Tube 0.01, %s\n", SYS_ARCH);
|
||||
exit (0);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#include "cw/mod.h"
|
||||
extern struct cw_Mod * cw_get_mod_ac(const char *name);
|
||||
extern struct cw_Mod * cw_get_mod_ac (const char *name);
|
||||
|
||||
#include "cw/mlist.h"
|
||||
|
||||
|
||||
extern void test_sets();
|
||||
#include "cw/file.h"
|
||||
#include "cw/cw_types.h"
|
||||
#include "cw/kvt.h"
|
||||
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
struct mykv {
|
||||
int key;
|
||||
int value;
|
||||
};
|
||||
|
||||
int mycmp (void *e1, void *e2)
|
||||
{
|
||||
/* mavl_t kv;
|
||||
mavliter_t kviter;
|
||||
uint8_t bytes[] = { 99,4,5,7 };
|
||||
struct mykv * k1 = e1;
|
||||
struct mykv * k2 = e2;
|
||||
|
||||
//printf("My CMP: %d and %d\n", k1->key, k2->key);
|
||||
|
||||
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);
|
||||
if (k1->key > k2->key)
|
||||
return 1;
|
||||
|
||||
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);
|
||||
}
|
||||
if (k1->key < k2->key)
|
||||
return -1;
|
||||
|
||||
mavl_destroy(im);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void mavl_walk (struct mavlnode * node)
|
||||
{
|
||||
struct mykv * kv;
|
||||
|
||||
if (!node) {
|
||||
printf ("\n");
|
||||
return;
|
||||
}
|
||||
|
||||
kv = mavlnode_dataptr (node);
|
||||
printf ("KV %d\n", kv->key);
|
||||
|
||||
printf ("go left:");
|
||||
mavl_walk (node->left);
|
||||
printf ("go right:");
|
||||
mavl_walk (node->right);
|
||||
|
||||
}
|
||||
|
||||
int stcmp (const void * sa1, const void *sa2)
|
||||
{
|
||||
const char **s1 = sa1;
|
||||
const char **s2 = sa2;
|
||||
int rc;
|
||||
rc = strcmp (*s1, *s2);
|
||||
|
||||
printf ("CMP %s, %s = %d\n", *s1, *s2, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
mavl_t tree;
|
||||
int i;
|
||||
mavliter_t it;
|
||||
|
||||
|
||||
/*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;
|
||||
|
||||
|
||||
/* parse arguments */
|
||||
parse_args(argc, argv);
|
||||
|
||||
parse_args (argc, argv);
|
||||
|
||||
cw_log_name = "AC-Tube";
|
||||
|
||||
if (!read_config("ac.conf"))
|
||||
|
||||
if (!read_config ("ac.conf"))
|
||||
return 1;
|
||||
|
||||
|
||||
|
||||
|
||||
/* Show debug options if there are any set */
|
||||
if (cw_dbg_opt_level)
|
||||
cw_log(LOG_INFO, "Debug Options: %08X", cw_dbg_opt_level);
|
||||
|
||||
cw_log (LOG_INFO, "Debug Options: %08X", cw_dbg_opt_level);
|
||||
|
||||
/* XXX Hard coded debug settigns, set it by config in the future */
|
||||
cw_dbg_opt_display = DBG_DISP_ASC_DMP | DBG_DISP_COLORS;
|
||||
|
||||
/* Warn, if the "secret" debugging feature for
|
||||
|
||||
/* Warn, if the "secret" debugging feature for
|
||||
developers is turned on ;) */
|
||||
// DBGX("Attention! %s", "DBG X is ON!");
|
||||
|
||||
// cw_mod_set_mod_path("../../lib/actube");
|
||||
//cw_mod_load("capwap");
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* Initialize the database */
|
||||
if (!db_init())
|
||||
goto errX;
|
||||
|
||||
|
||||
/* Start the database */
|
||||
if (!db_start())
|
||||
goto errX;
|
||||
|
||||
|
||||
db_ping();
|
||||
|
||||
|
||||
|
||||
|
||||
/* Start a database "pinger thread", which inserts
|
||||
every xx seconds a timestamp into the DB */
|
||||
pthread_t alth;
|
||||
pthread_create(&alth, NULL, alive_thread, NULL);
|
||||
|
||||
pthread_create (&alth, NULL, alive_thread, NULL);
|
||||
|
||||
/* Init DTLS library */
|
||||
dtls_init();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
ac_global_init();
|
||||
|
||||
if (!socklist_init())
|
||||
goto errX;
|
||||
|
||||
|
||||
if (!wtplist_init())
|
||||
goto errX;
|
||||
|
||||
|
||||
if (!dataman_list_init())
|
||||
goto errX;
|
||||
|
||||
|
||||
cw_log(LOG_INFO, "Starting AC-Tube, Name=%s, ID=%s", conf_acname, conf_acid);
|
||||
|
||||
|
||||
cw_log (LOG_INFO, "Starting AC-Tube, Name=%s, ID=%s", conf_acname, conf_acid);
|
||||
rc = ac_run();
|
||||
errX:
|
||||
errX:
|
||||
/* XXX There is more cleanup to do */
|
||||
wtplist_destroy();
|
||||
socklist_destroy();
|
||||
@ -266,297 +425,315 @@ int main(int argc, char *argv[])
|
||||
|
||||
|
||||
|
||||
void process_ctrl_packet(int index, struct sockaddr *addr, uint8_t * buffer, int len);
|
||||
void process_ctrl_packet (int index, struct sockaddr *addr, uint8_t * buffer, int len);
|
||||
|
||||
void process_cw_data_packet(int index, struct sockaddr *addr, uint8_t * buffer, int len);
|
||||
void process_cw_data_packet (int index, struct sockaddr *addr, uint8_t * buffer, int len);
|
||||
|
||||
|
||||
int ac_run()
|
||||
{
|
||||
|
||||
if (!conf_listen_addrs_len) {
|
||||
cw_log(LOG_ERR, "Fatal error: No listen addresses found.");
|
||||
cw_log (LOG_ERR, "Fatal error: No listen addresses found.");
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* it is important to create the unicast sockets first,
|
||||
* because when we create the mcast an bcast sockets next
|
||||
|
||||
|
||||
|
||||
/* it is important to create the unicast sockets first,
|
||||
* because when we create the mcast an bcast sockets next
|
||||
* we will look for already created sockets to find a
|
||||
* good unicast reply socket */
|
||||
|
||||
|
||||
int i;
|
||||
|
||||
for (i = 0; i < conf_listen_addrs_len; i++) {
|
||||
char addr[100];
|
||||
char port[50];
|
||||
int proto;
|
||||
|
||||
conf_parse_listen_addr(conf_listen_addrs[i], addr, port, &proto);
|
||||
|
||||
|
||||
|
||||
conf_parse_listen_addr (conf_listen_addrs[i], addr, port, &proto);
|
||||
|
||||
|
||||
//struct sockaddr sa;
|
||||
|
||||
|
||||
socklist_add_unicast(addr, port,proto);
|
||||
|
||||
|
||||
|
||||
socklist_add_unicast (addr, port, proto);
|
||||
|
||||
//#ifdef WITH_LWAPP
|
||||
// if (conf_lwapp)
|
||||
// socklist_add_unicast(conf_listen_addrs[i], conf_lw_control_port,
|
||||
// AC_PROTO_LWAPP);
|
||||
//#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (socklist_len == 0) {
|
||||
cw_log(LOG_ERR, "Fatal error: Could not setup any listen socket");
|
||||
cw_log (LOG_ERR, "Fatal error: Could not setup any listen socket");
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/* create multicast sockets */
|
||||
for (i = 0; i < conf_mcast_groups_len; i++) {
|
||||
|
||||
socklist_add_multicast(conf_mcast_groups[i], conf_control_port,
|
||||
AC_PROTO_CAPWAP);
|
||||
|
||||
socklist_add_multicast (conf_mcast_groups[i], conf_control_port,
|
||||
AC_PROTO_CAPWAP);
|
||||
#ifdef WITH_LWAPP
|
||||
|
||||
if (conf_lwapp)
|
||||
socklist_add_multicast(conf_mcast_groups[i], conf_lw_control_port,
|
||||
AC_PROTO_LWAPP);
|
||||
socklist_add_multicast (conf_mcast_groups[i], conf_lw_control_port,
|
||||
AC_PROTO_LWAPP);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* broadcast socket ipv4 only */
|
||||
for (i = 0; i < conf_bcast_addrs_len; i++) {
|
||||
|
||||
char addr[50],port[50];
|
||||
|
||||
char addr[50], port[50];
|
||||
int proto;
|
||||
conf_parse_listen_addr(conf_bcast_addrs[i], addr, port, &proto);
|
||||
|
||||
socklist_add_broadcast(addr,port,proto);
|
||||
conf_parse_listen_addr (conf_bcast_addrs[i], addr, port, &proto);
|
||||
|
||||
socklist_add_broadcast (addr, port, proto);
|
||||
#ifdef WITH_LWAPP
|
||||
|
||||
// printf("Adding %d\n",socklist_len);
|
||||
if (conf_lwapp)
|
||||
socklist_add_broadcast(conf_bcast_addrs[i], conf_lw_control_port,
|
||||
AC_PROTO_LWAPP);
|
||||
socklist_add_broadcast (conf_bcast_addrs[i], conf_lw_control_port,
|
||||
AC_PROTO_LWAPP);
|
||||
|
||||
// printf ("SI %d, PROTO: %d\n",socklist_len-1,socklist[socklist_len-1].ac_proto);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//get_acinfo();
|
||||
|
||||
|
||||
|
||||
|
||||
while (1) {
|
||||
|
||||
|
||||
/* prepare fdset */
|
||||
fd_set fset;
|
||||
int max = 0;
|
||||
FD_ZERO(&fset);
|
||||
FD_ZERO (&fset);
|
||||
|
||||
for (i = 0; i < socklist_len; i++) {
|
||||
FD_SET(socklist[i].sockfd, &fset);
|
||||
FD_SET (socklist[i].sockfd, &fset);
|
||||
|
||||
if (socklist[i].sockfd > max)
|
||||
max = socklist[i].sockfd;
|
||||
|
||||
if (socklist[i].data_sockfd) {
|
||||
FD_SET(socklist[i].data_sockfd,&fset);
|
||||
FD_SET (socklist[i].data_sockfd, &fset);
|
||||
|
||||
if (socklist[i].sockfd > max)
|
||||
max = socklist[i].sockfd;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* wait for an event */
|
||||
int n;
|
||||
while ((n = select(max + 1, &fset, NULL, NULL, NULL)) < 0) {
|
||||
|
||||
while ( (n = select (max + 1, &fset, NULL, NULL, NULL)) < 0) {
|
||||
if (errno != EINTR)
|
||||
return n;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* process the received packet */
|
||||
for (i = 0; i < socklist_len; i++) {
|
||||
uint8_t buffer[4096];
|
||||
struct sockaddr_storage srcaddr;
|
||||
socklen_t srcaddrlen;
|
||||
|
||||
|
||||
if (FD_ISSET(socklist[i].data_sockfd, &fset)){
|
||||
|
||||
int len = sock_receive(socklist[i].data_sockfd,
|
||||
buffer, sizeof(buffer),
|
||||
0,
|
||||
(struct sockaddr *) &srcaddr,
|
||||
&srcaddrlen);
|
||||
|
||||
process_cw_data_packet(i, (struct sockaddr *) &srcaddr, buffer, len);
|
||||
|
||||
if (FD_ISSET (socklist[i].data_sockfd, &fset)) {
|
||||
|
||||
int len = sock_receive (socklist[i].data_sockfd,
|
||||
buffer, sizeof (buffer),
|
||||
0,
|
||||
(struct sockaddr *) &srcaddr,
|
||||
&srcaddrlen);
|
||||
|
||||
process_cw_data_packet (i, (struct sockaddr *) &srcaddr, buffer, len);
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (FD_ISSET(socklist[i].sockfd, &fset)){
|
||||
|
||||
int len = sock_receive(socklist[i].sockfd,
|
||||
buffer, sizeof(buffer),
|
||||
0,
|
||||
(struct sockaddr *) &srcaddr,
|
||||
&srcaddrlen);
|
||||
|
||||
process_ctrl_packet(i, (struct sockaddr *) &srcaddr, buffer, len);
|
||||
|
||||
if (FD_ISSET (socklist[i].sockfd, &fset)) {
|
||||
|
||||
int len = sock_receive (socklist[i].sockfd,
|
||||
buffer, sizeof (buffer),
|
||||
0,
|
||||
(struct sockaddr *) &srcaddr,
|
||||
&srcaddrlen);
|
||||
|
||||
process_ctrl_packet (i, (struct sockaddr *) &srcaddr, buffer, len);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void process_cw_data_packet(int index, struct sockaddr *addr, uint8_t * buffer, int len)
|
||||
void process_cw_data_packet (int index, struct sockaddr *addr, uint8_t * buffer, int len)
|
||||
{
|
||||
char sock_buf[SOCK_ADDR_BUFSIZE];
|
||||
cw_dbg(DBG_X, "There is a data packet now");
|
||||
|
||||
cw_dbg (DBG_X, "There is a data packet now");
|
||||
|
||||
dataman_list_lock();
|
||||
cw_dbg(DBG_X, "Dataman list locked, now getting");
|
||||
struct dataman * dm = dataman_list_get(socklist[index].data_sockfd,addr);
|
||||
cw_dbg(DBG_X, "Dataman list locked, now gotted");
|
||||
|
||||
cw_dbg(DBG_INFO,"Packet for dataman %s,%d",sock_addr2str_p(addr,sock_buf),socklist[index].data_sockfd);
|
||||
cw_dbg (DBG_X, "Dataman list locked, now getting");
|
||||
struct dataman * dm = dataman_list_get (socklist[index].data_sockfd, addr);
|
||||
cw_dbg (DBG_X, "Dataman list locked, now gotted");
|
||||
|
||||
cw_dbg (DBG_INFO, "Packet for dataman %s,%d", sock_addr2str_p (addr, sock_buf), socklist[index].data_sockfd);
|
||||
|
||||
if (!dm) {
|
||||
cw_dbg(DBG_INFO,"No dataman %s,%d",sock_addr2str_p(addr,sock_buf),socklist[index].data_sockfd);
|
||||
dm = dataman_create(socklist[index].data_sockfd,addr);
|
||||
if (!dm){
|
||||
cw_log(LOG_ERR,"Can't create dataman for packet from %s",sock_addr2str_p(addr,sock_buf));
|
||||
cw_dbg (DBG_INFO, "No dataman %s,%d", sock_addr2str_p (addr, sock_buf), socklist[index].data_sockfd);
|
||||
dm = dataman_create (socklist[index].data_sockfd, addr);
|
||||
|
||||
if (!dm) {
|
||||
cw_log (LOG_ERR, "Can't create dataman for packet from %s", sock_addr2str_p (addr, sock_buf));
|
||||
return;
|
||||
}
|
||||
dataman_list_add(dm);
|
||||
|
||||
dataman_start(dm);
|
||||
|
||||
|
||||
|
||||
dataman_list_add (dm);
|
||||
|
||||
dataman_start (dm);
|
||||
|
||||
|
||||
}
|
||||
|
||||
dataman_list_unlock();
|
||||
|
||||
dataman_add_packet(dm,buffer,len);
|
||||
|
||||
|
||||
dataman_add_packet (dm, buffer, len);
|
||||
|
||||
return;
|
||||
|
||||
exit(0);
|
||||
|
||||
|
||||
|
||||
|
||||
printf("Data packet received len = %d\n",len);
|
||||
exit(0);
|
||||
struct wtpman *wtpman = wtplist_get(addr);
|
||||
if (!wtpman){
|
||||
cw_dbg(DBG_PKT_ERR,"Discarding packet on data channel from %s - No wtpman found.",sock_addr2str(addr,sock_buf));
|
||||
|
||||
exit (0);
|
||||
|
||||
|
||||
|
||||
|
||||
printf ("Data packet received len = %d\n", len);
|
||||
exit (0);
|
||||
struct wtpman *wtpman = wtplist_get (addr);
|
||||
|
||||
if (!wtpman) {
|
||||
cw_dbg (DBG_PKT_ERR, "Discarding packet on data channel from %s - No wtpman found.", sock_addr2str (addr, sock_buf));
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
wtpman_addpacket(wtpman, buffer, len);
|
||||
|
||||
|
||||
wtpman_addpacket (wtpman, buffer, len);
|
||||
}
|
||||
|
||||
|
||||
void process_cw_ctrl_packet(int index, struct sockaddr *addr, uint8_t * buffer, int len)
|
||||
void process_cw_ctrl_packet (int index, struct sockaddr *addr, uint8_t * buffer, int len)
|
||||
{
|
||||
char sock_buf[SOCK_ADDR_BUFSIZE];
|
||||
|
||||
|
||||
/* first of all check preamble */
|
||||
int preamble = cw_get_hdr_preamble(buffer);
|
||||
|
||||
int preamble = cw_get_hdr_preamble (buffer);
|
||||
|
||||
if (preamble != CAPWAP_PACKET_PREAMBLE && preamble != CAPWAP_DTLS_PACKET_PREAMBLE) {
|
||||
cw_dbg(DBG_PKT_ERR,
|
||||
"Discarding packet from %s, wrong preamble, preamble = 0x%01X",
|
||||
sock_addr2str(addr,sock_buf), preamble);
|
||||
cw_dbg (DBG_PKT_ERR,
|
||||
"Discarding packet from %s, wrong preamble, preamble = 0x%01X",
|
||||
sock_addr2str (addr, sock_buf), preamble);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
wtplist_lock();
|
||||
struct wtpman *wtpman = wtplist_get(addr);
|
||||
struct wtpman *wtpman = wtplist_get (addr);
|
||||
|
||||
if (!wtpman) {
|
||||
|
||||
wtpman = wtpman_create(index, addr);
|
||||
|
||||
|
||||
|
||||
wtpman = wtpman_create (index, addr);
|
||||
|
||||
|
||||
if (!wtpman) {
|
||||
cw_log(LOG_ERR, "Error creating wtpman: %s", strerror(errno));
|
||||
cw_log (LOG_ERR, "Error creating wtpman: %s", strerror (errno));
|
||||
wtplist_unlock();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (!wtplist_add(wtpman)) {
|
||||
cw_log(LOG_ERR, "Error adding wtpman: Too many wtp connections");
|
||||
wtpman_destroy(wtpman);
|
||||
|
||||
|
||||
if (!wtplist_add (wtpman)) {
|
||||
cw_log (LOG_ERR, "Error adding wtpman: Too many wtp connections");
|
||||
wtpman_destroy (wtpman);
|
||||
wtplist_unlock();
|
||||
return;
|
||||
};
|
||||
|
||||
wtpman_start(wtpman, preamble & 0xf);
|
||||
|
||||
wtpman_start (wtpman, preamble & 0xf);
|
||||
}
|
||||
|
||||
|
||||
wtpman_addpacket(wtpman, buffer, len);
|
||||
|
||||
|
||||
wtpman_addpacket (wtpman, buffer, len);
|
||||
wtplist_unlock();
|
||||
}
|
||||
|
||||
|
||||
|
||||
void process_lw_ctrl_packet(int index, struct sockaddr *addr, uint8_t * buffer, int len)
|
||||
void process_lw_ctrl_packet (int index, struct sockaddr *addr, uint8_t * buffer, int len)
|
||||
{
|
||||
//int sock = socklist[index].reply_sockfd;
|
||||
|
||||
|
||||
uint8_t *m = buffer + 6;
|
||||
uint32_t val = ntohl(*((uint32_t *) (m)));
|
||||
|
||||
|
||||
printf("VAL: %08X\n", val);
|
||||
|
||||
|
||||
|
||||
uint32_t val = ntohl (* ( (uint32_t *) (m)));
|
||||
|
||||
|
||||
printf ("VAL: %08X\n", val);
|
||||
|
||||
|
||||
|
||||
/* first of all check preamble */
|
||||
int version = LWTH_GET_VERSION(m);
|
||||
|
||||
int version = LWTH_GET_VERSION (m);
|
||||
|
||||
if (version != LW_VERSION) {
|
||||
// cw_log_debug1("Discarding LWAPP packet, wrong verson");
|
||||
return;
|
||||
}
|
||||
|
||||
int l = LWTH_GET_LENGTH(m);
|
||||
printf("LEN = %d\n", l);
|
||||
|
||||
|
||||
int l = LWTH_GET_LENGTH (m);
|
||||
printf ("LEN = %d\n", l);
|
||||
|
||||
if (l + 12 != len) {
|
||||
// cw_log_debug1("Discarding LWAPP packet, wrong length");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
wtplist_lock();
|
||||
struct wtpman *wtpman = wtplist_get(addr);
|
||||
struct wtpman *wtpman = wtplist_get (addr);
|
||||
|
||||
if (!wtpman) {
|
||||
|
||||
wtpman = wtpman_create(index, addr);
|
||||
|
||||
|
||||
wtpman = wtpman_create (index, addr);
|
||||
|
||||
if (!wtpman) {
|
||||
cw_log(LOG_ERR, "Error creating wtpman: %s", strerror(errno));
|
||||
cw_log (LOG_ERR, "Error creating wtpman: %s", strerror (errno));
|
||||
wtplist_unlock();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (!wtplist_add(wtpman)) {
|
||||
cw_log(LOG_ERR, "Error adding wtpman: Too many wtp connections");
|
||||
wtpman_destroy(wtpman);
|
||||
|
||||
|
||||
if (!wtplist_add (wtpman)) {
|
||||
cw_log (LOG_ERR, "Error adding wtpman: Too many wtp connections");
|
||||
wtpman_destroy (wtpman);
|
||||
wtplist_unlock();
|
||||
return;
|
||||
};
|
||||
|
||||
|
||||
//wtpman_lw_start(wtpman);
|
||||
}
|
||||
|
||||
//wtpman_lw_addpacket(wtpman,buffer,len);
|
||||
wtplist_unlock();
|
||||
}
|
||||
@ -565,14 +742,15 @@ void process_lw_ctrl_packet(int index, struct sockaddr *addr, uint8_t * buffer,
|
||||
|
||||
|
||||
|
||||
void process_ctrl_packet(int index, struct sockaddr *addr, uint8_t * buffer, int len)
|
||||
void process_ctrl_packet (int index, struct sockaddr *addr, uint8_t * buffer, int len)
|
||||
{
|
||||
switch (socklist[index].ac_proto) {
|
||||
case AC_PROTO_CAPWAP:
|
||||
process_cw_ctrl_packet(index, addr, buffer, len);
|
||||
process_cw_ctrl_packet (index, addr, buffer, len);
|
||||
return;
|
||||
|
||||
case AC_PROTO_LWAPP:
|
||||
process_lw_ctrl_packet(index, addr, buffer, len);
|
||||
process_lw_ctrl_packet (index, addr, buffer, len);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
147
src/ac/conf.c
147
src/ac/conf.c
@ -38,7 +38,6 @@ uint8_t conf_macaddress_len = 0;
|
||||
|
||||
long conf_strict_capwap = 1;
|
||||
long conf_strict_headers = 0;
|
||||
//char *conf_capwap_mode_str = NULL;
|
||||
int conf_capwap_mode = CW_MODE_CAPWAP;
|
||||
|
||||
|
||||
@ -79,8 +78,6 @@ char *conf_sslkeypass = NULL;
|
||||
char *conf_sslcipher = NULL;
|
||||
char *conf_dtls_psk = NULL;
|
||||
|
||||
//char * conf_ac_hardware_version=NULL;
|
||||
//char * conf_ac_software_version=NULL;
|
||||
int conf_security = 0;
|
||||
long conf_vendor_id = CONF_DEFAULT_VENDOR_ID;
|
||||
|
||||
@ -92,11 +89,6 @@ bstr_t conf_cisco_hardware_version = NULL;
|
||||
bstr_t conf_cisco_software_version = NULL;
|
||||
|
||||
|
||||
//int conf_hardware_version_len=0;
|
||||
|
||||
//int conf_software_version_len=0;
|
||||
|
||||
|
||||
int conf_use_loopback = 0;
|
||||
|
||||
long conf_debug_level = -1;
|
||||
@ -140,7 +132,9 @@ static int init_acname()
|
||||
|
||||
static int init_acid()
|
||||
{
|
||||
|
||||
int i;
|
||||
char *s;
|
||||
|
||||
if (conf_acid != NULL)
|
||||
return 1;
|
||||
|
||||
@ -165,11 +159,11 @@ static int init_acid()
|
||||
return 0;
|
||||
};
|
||||
|
||||
int i;
|
||||
|
||||
|
||||
|
||||
conf_acid = malloc(2 * conf_macaddress_len + 1);
|
||||
char *s = conf_acid;
|
||||
s = conf_acid;
|
||||
|
||||
for (i = 0; i < conf_macaddress_len; i++) {
|
||||
s += sprintf(s, "%02X", conf_macaddress[i]);
|
||||
@ -178,10 +172,13 @@ static int init_acid()
|
||||
|
||||
}
|
||||
|
||||
|
||||
static int init_dtls()
|
||||
{
|
||||
if (conf_dtls_psk != NULL) {
|
||||
// conf_security=CW_SECURITY_FLAGS_S;
|
||||
/*
|
||||
// conf_security=CW_SECURITY_FLAGS_S;
|
||||
*/
|
||||
}
|
||||
|
||||
return 1;
|
||||
@ -260,17 +257,21 @@ static int init_control_port()
|
||||
|
||||
static int init_listen_addrs()
|
||||
{
|
||||
struct ifaddrs *ifap, *ifa;
|
||||
int rc;
|
||||
int ctr;
|
||||
|
||||
if (conf_listen_addrs != 0)
|
||||
return 1;
|
||||
|
||||
struct ifaddrs *ifap, *ifa;
|
||||
|
||||
int rc = getifaddrs(&ifap);
|
||||
|
||||
rc = getifaddrs(&ifap);
|
||||
if (rc == -1)
|
||||
return 0;
|
||||
|
||||
/* count the addresses */
|
||||
int ctr = 0;
|
||||
ctr = 0;
|
||||
for (ifa = ifap; ifa != 0; ifa = ifa->ifa_next) {
|
||||
if (!ifa->ifa_addr)
|
||||
continue;
|
||||
@ -307,8 +308,7 @@ static int init_listen_addrs()
|
||||
|
||||
if (ifa->ifa_addr->sa_family == AF_INET && conf_ipv4) {
|
||||
sock_addrtostr(ifa->ifa_addr, str, 100,0);
|
||||
// printf("The converter has %s\n",str);
|
||||
// *strchr(str, ':') = 0;
|
||||
|
||||
conf_listen_addrs[ctr] =
|
||||
(char *) cw_setstr((uint8_t **) & conf_listen_addrs[ctr],
|
||||
(uint8_t *) str, strlen(str));
|
||||
@ -346,6 +346,7 @@ static char *conf_default_mcast_groups_ipv4[] = {
|
||||
|
||||
#ifdef WITH_IPV6
|
||||
static char *conf_default_mcast_groups_ipv6[] = {
|
||||
"ff01:0:0:0:0:0:0:18c",
|
||||
/* "ff01:0:0:0:0:0:0:18c",
|
||||
"ff02:0:0:0:0:0:0:18c%em0",
|
||||
"ff03:0:0:0:0:0:0:18c",
|
||||
@ -356,11 +357,8 @@ static char *conf_default_mcast_groups_ipv6[] = {
|
||||
};
|
||||
#endif
|
||||
|
||||
//#include "avltree"
|
||||
//#include "cw/stravltree.h"
|
||||
|
||||
|
||||
|
||||
/*
|
||||
static int add_bcast_addr(void *priv, void *addr)
|
||||
{
|
||||
printf("Callback Called\n");
|
||||
@ -374,12 +372,17 @@ static int add_bcast_addr(void *priv, void *addr)
|
||||
conf_bcast_addrs_len++;
|
||||
return 1;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* Initialize broadcast addresses (ipv4 only)
|
||||
*/
|
||||
int init_bcast_addrs()
|
||||
{
|
||||
int rc;
|
||||
char str[100];
|
||||
struct ifaddrs *ifa0, *ifa;
|
||||
mavl_t t;
|
||||
mavliter_t it;
|
||||
|
||||
@ -389,17 +392,17 @@ int init_bcast_addrs()
|
||||
if (!conf_ipv4)
|
||||
return 1;
|
||||
|
||||
t = mavl_create(mavl_cmp_str,mavl_free_str);
|
||||
if (!t)
|
||||
t = mavl_create_str();
|
||||
if (t==NULL)
|
||||
return 0;
|
||||
|
||||
/* add the default broadast address */
|
||||
mavl_add_strdup(t, "255.255.255.255");
|
||||
mavl_add_str(t, cw_strdup("255.255.255.255"));
|
||||
|
||||
|
||||
/* add all other local broadcast addresses */
|
||||
struct ifaddrs *ifa0, *ifa;
|
||||
int rc = getifaddrs(&ifa0);
|
||||
|
||||
rc = getifaddrs(&ifa0);
|
||||
if (rc == -1)
|
||||
return 0;
|
||||
|
||||
@ -421,24 +424,22 @@ int init_bcast_addrs()
|
||||
if (sa->sa_family != AF_INET)
|
||||
continue;
|
||||
|
||||
char str[100];
|
||||
|
||||
if (ifa->ifa_broadaddr) {
|
||||
sock_addrtostr(ifa->ifa_broadaddr, str, 100,1);
|
||||
*strchr(str, ':') = 0;
|
||||
mavl_add_strdup(t, str);
|
||||
mavl_add_str(t, cw_strdup(str));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
conf_bcast_addrs = malloc(t->count * sizeof(char *));
|
||||
|
||||
//mavl_foreach_asc(t, add_bcast_addr, 0);
|
||||
|
||||
mavliter_init(&it,t);
|
||||
mavliter_foreach(&it){
|
||||
union mavldata * d;
|
||||
d = mavliter_get(&it);
|
||||
conf_bcast_addrs[conf_bcast_addrs_len] = strdup(d->str);
|
||||
char * d;
|
||||
d = mavliter_get_str(&it);
|
||||
conf_bcast_addrs[conf_bcast_addrs_len] = cw_strdup(d);
|
||||
if (conf_bcast_addrs[conf_bcast_addrs_len] != 0)
|
||||
conf_bcast_addrs_len++;
|
||||
|
||||
@ -454,19 +455,23 @@ int init_bcast_addrs()
|
||||
|
||||
int init_mcast_groups()
|
||||
{
|
||||
if (conf_mcast_groups)
|
||||
return 1;
|
||||
|
||||
int ctr;
|
||||
int i;
|
||||
|
||||
int n = 0;
|
||||
int n4 = 0, n6 = 0;
|
||||
|
||||
if (conf_mcast_groups)
|
||||
return 1;
|
||||
|
||||
if (conf_ipv4) {
|
||||
n4 = sizeof(conf_default_mcast_groups_ipv4) / sizeof(char *);
|
||||
}
|
||||
#ifdef WITH_IPV6
|
||||
|
||||
if (conf_ipv6) {
|
||||
n6 = sizeof(conf_default_mcast_groups_ipv6) / sizeof(char *);
|
||||
}
|
||||
#endif
|
||||
|
||||
n = n4 + n6;
|
||||
if (n == 0)
|
||||
return 1;
|
||||
@ -476,8 +481,8 @@ int init_mcast_groups()
|
||||
return 0;
|
||||
memset(conf_mcast_groups, 0, n * sizeof(char *));
|
||||
|
||||
int ctr = 0;
|
||||
int i;
|
||||
ctr = 0;
|
||||
|
||||
for (i = 0; i < n4; i++) {
|
||||
uint8_t *g = (uint8_t *) conf_default_mcast_groups_ipv4[i];
|
||||
conf_mcast_groups[ctr] =
|
||||
@ -546,8 +551,8 @@ static int conf_read_dbg_level(cfg_t * cfg)
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
char *str = cfg_getnstr(cfg, name, i);
|
||||
//int u = cw_log_str2dbglevel(str);
|
||||
int b = cw_strlist_get_id(cw_dbg_strings, str); //cw_log_str2dbglevel(str);
|
||||
int b = cw_strlist_get_id(cw_dbg_strings, str);
|
||||
|
||||
|
||||
cw_dbg_set_level(b, 1);
|
||||
|
||||
@ -555,34 +560,9 @@ static int conf_read_dbg_level(cfg_t * cfg)
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
struct cw_Mod ** conf_mods; //[10];
|
||||
struct cw_Mod ** conf_mods;
|
||||
char *conf_mods_dir = NULL;
|
||||
|
||||
|
||||
static int init_mods()
|
||||
{
|
||||
|
||||
/* conf_mods[0]=modload_ac("cisco");
|
||||
conf_mods[1]=modload_ac("fortinet");
|
||||
// conf_mods[2]=modload_ac("zyxel");
|
||||
conf_mods[2]=modload_ac("cipwap");
|
||||
conf_mods[3]=modload_ac("capwap");
|
||||
conf_mods[4]=modload_ac("capwap80211");
|
||||
conf_mods[5]=NULL;
|
||||
*/
|
||||
int i;
|
||||
for(i=0; conf_mods[i]; i++){
|
||||
if (conf_mods[i]->init){
|
||||
conf_mods[i]->init();
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Read the module names from config file
|
||||
*/
|
||||
@ -626,6 +606,10 @@ void conf_init_capwap_mode()
|
||||
|
||||
int conf_parse_listen_addr(const char *addrstr, char *saddr, char *port, int *proto)
|
||||
{
|
||||
char *b;
|
||||
int c;
|
||||
int i, l;
|
||||
char *ctrlport;
|
||||
char *p = strchr(addrstr, '/');
|
||||
if (!p)
|
||||
*proto = AC_PROTO_CAPWAP;
|
||||
@ -638,7 +622,7 @@ int conf_parse_listen_addr(const char *addrstr, char *saddr, char *port, int *pr
|
||||
*proto = AC_PROTO_UNKNOWN;
|
||||
}
|
||||
|
||||
char *ctrlport;
|
||||
|
||||
switch (*proto) {
|
||||
case AC_PROTO_CAPWAP:
|
||||
ctrlport = CAPWAP_CONTROL_PORT_STR;
|
||||
@ -651,8 +635,8 @@ int conf_parse_listen_addr(const char *addrstr, char *saddr, char *port, int *pr
|
||||
}
|
||||
|
||||
|
||||
int i, l;
|
||||
int c = 0;
|
||||
|
||||
c = 0;
|
||||
|
||||
if (p)
|
||||
l = p - addrstr;
|
||||
@ -684,7 +668,7 @@ int conf_parse_listen_addr(const char *addrstr, char *saddr, char *port, int *pr
|
||||
}
|
||||
|
||||
/* we assume now, its ipv6 */
|
||||
char *b = strstr(addrstr, "]:");
|
||||
b = strstr(addrstr, "]:");
|
||||
if (!b) {
|
||||
/* ippv6 w/o port */
|
||||
strncpy(saddr, addrstr, l);
|
||||
@ -716,9 +700,6 @@ int read_config(const char *filename)
|
||||
{
|
||||
int i, n;
|
||||
|
||||
if (!init_control_port())
|
||||
return 0;
|
||||
|
||||
cfg_opt_t opts[] = {
|
||||
CFG_STR_LIST("mods", "{}", CFGF_NONE),
|
||||
CFG_SIMPLE_STR("mods_dir", &conf_mods_dir),
|
||||
@ -733,7 +714,7 @@ int read_config(const char *filename)
|
||||
CFG_SIMPLE_BOOL("strict_capwap", &conf_strict_capwap),
|
||||
CFG_SIMPLE_BOOL("strict_headers", &conf_strict_headers),
|
||||
CFG_SIMPLE_BOOL("use_loopback", &conf_use_loopback),
|
||||
// CFG_SIMPLE_STR("capwap_mode", &conf_capwap_mode_str),
|
||||
/*// CFG_SIMPLE_STR("capwap_mode", &conf_capwap_mode_str),*/
|
||||
|
||||
|
||||
#ifdef WITH_LWAPP
|
||||
@ -765,12 +746,17 @@ int read_config(const char *filename)
|
||||
CFG_SIMPLE_BOOL("dtls_verify_peer", &conf_dtls_verify_peer),
|
||||
CFG_SIMPLE_BOOL("ipv4", &conf_ipv4),
|
||||
CFG_SIMPLE_BOOL("ipv6", &conf_ipv6),
|
||||
CFG_SIMPLE_STR("db_file", conf_db_file),
|
||||
CFG_SIMPLE_STR("db_file", &conf_db_file),
|
||||
CFG_SIMPLE_STR("image_dir", &conf_image_dir),
|
||||
|
||||
CFG_END()
|
||||
};
|
||||
cfg_t *cfg;
|
||||
|
||||
if (!init_control_port())
|
||||
return 0;
|
||||
|
||||
|
||||
cfg = cfg_init(opts, CFGF_NONE);
|
||||
cfg_set_error_function(cfg, errfunc);
|
||||
|
||||
@ -838,18 +824,13 @@ int read_config(const char *filename)
|
||||
if (!conf_image_dir)
|
||||
conf_image_dir = CONF_DEFAULT_IMAGE_DIR;
|
||||
|
||||
//printf("INIT MODS\n");
|
||||
// init_mods();
|
||||
//printf("done init mods");
|
||||
|
||||
// conf_init_capwap_mode();
|
||||
|
||||
|
||||
init_listen_addrs();
|
||||
init_mcast_groups();
|
||||
init_bcast_addrs();
|
||||
|
||||
//printf("Yea all mods inited\n");
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -33,7 +33,7 @@ static int cmp(const void *d1, const void *d2)
|
||||
|
||||
int dataman_list_init()
|
||||
{
|
||||
dataman_list = mavl_create(cmp, NULL);
|
||||
dataman_list = mavl_create_ptr(cmp, NULL);
|
||||
if (!dataman_list)
|
||||
return 0;
|
||||
|
||||
@ -85,7 +85,7 @@ struct dataman *dataman_list_add(struct dataman *dm)
|
||||
{
|
||||
|
||||
cw_dbg(DBG_X,"Adding dataman %p\n",dm);
|
||||
return mavl_add(dataman_list, dm);
|
||||
return mavl_add(dataman_list, dm,NULL);
|
||||
}
|
||||
|
||||
|
||||
|
@ -24,7 +24,6 @@
|
||||
#include <sys/types.h>
|
||||
#include <netinet/in.h>
|
||||
|
||||
|
||||
#define MAX_WTPS 200
|
||||
|
||||
#include <stdio.h>
|
||||
|
@ -41,7 +41,7 @@
|
||||
#include "socklist.h"
|
||||
#include "wtpman.h"
|
||||
#include "wtplist.h"
|
||||
|
||||
#include "cw/kvt.h"
|
||||
|
||||
static void reset_echointerval_timer(struct wtpman *wtpman)
|
||||
{
|
||||
@ -94,10 +94,10 @@ static void wtpman_run_discovery(void *arg)
|
||||
wtpman->conn->capwap_state = CAPWAP_STATE_DISCOVERY;
|
||||
// wtpman->conn->actions = &capwap_actions;
|
||||
|
||||
wtpman->conn->outgoing = mbag_create();
|
||||
/* wtpman->conn->outgoing = mbag_create();
|
||||
wtpman->conn->incomming = mbag_create();
|
||||
|
||||
wtpman->conn->remote_cfg = mavl_create(mavl_cmp_kv,NULL);
|
||||
*/
|
||||
wtpman->conn->remote_cfg = cw_kvt_create(); //mavl_cmp_kv,NULL,1312);
|
||||
|
||||
while (!cw_timer_timeout(timer)
|
||||
&& wtpman->conn->capwap_state == CAPWAP_STATE_DISCOVERY) {
|
||||
|
Reference in New Issue
Block a user