Reads mods from config file

FossilOrigin-Name: 477bd1da9b17e7955dd1f5f345c92bbd2409ccd9857cb9a80efa263ae674cfde
This commit is contained in:
7u83@mail.ru 2018-02-18 20:48:42 +00:00
parent ede2b75f2a
commit 8834220439
2 changed files with 74 additions and 39 deletions

View File

@ -24,13 +24,12 @@
#include "cw/capwap.h"
#include "cw/sock.h"
#include "conf.h"
#include "cw/log.h"
#include "cw/dbg.h"
#include "cw/cw_util.h"
#include "cw/action.h"
#include "conf.h"
#include "ac.h"
uint8_t conf_macaddress[12];
@ -137,31 +136,7 @@ static int init_acname()
#include "../mod/modload.h"
struct mod_ac * conf_mods[10];
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;
}
static int init_acid()
{
@ -626,6 +601,56 @@ static int conf_read_dbg_level(cfg_t * cfg)
return 1;
}
struct mod_ac ** conf_mods; //[10];
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
*/
static int conf_read_mods(cfg_t *cfg){
int n, i;
n = cfg_size(cfg,CFG_ENTRY_MODS);
conf_mods = malloc(sizeof(struct mod_ac *)*(n+1));
for (i=0; i < n; i++){
char *modname = cfg_getnstr(cfg, CFG_ENTRY_MODS, i);
conf_mods[i] = modload_ac(modname);
if (!conf_mods[i]){
cw_log(LOG_ERR,"Can't load mod: %s",modname);
return 0;
}
}
conf_mods[i]=NULL;
return 1;
}
void conf_init_capwap_mode()
{
if (conf_capwap_mode_str == NULL)
@ -720,7 +745,16 @@ int conf_parse_listen_addr(const char *addrstr, char *saddr, char *port, int *pr
return 0;
}
static void errfunc(cfg_t *cfg, const char *fmt, va_list ap){
if (cfg && cfg->filename && cfg->line)
fprintf(stderr, "ERROR in %s:%d: ",
cfg->filename, cfg->line);
else if (cfg && cfg->filename)
fprintf(stderr, "ERROR in %s:", cfg->filename);
vfprintf(stderr, fmt, ap);
fprintf(stderr,"\n");
}
int read_config(const char *filename)
@ -730,13 +764,8 @@ int read_config(const char *filename)
if (!init_control_port())
return 0;
cfg_opt_t opts[] = {
CFG_STR_LIST("mods", "{}", CFGF_NONE),
CFG_STR_LIST("dbg", "{}", CFGF_NONE),
CFG_STR_LIST("listen", "{}", CFGF_NONE),
CFG_STR_LIST("mcast_groups", "{}", CFGF_NONE),
@ -785,9 +814,12 @@ int read_config(const char *filename)
CFG_END()
};
cfg_t *cfg;
cfg = cfg_init(opts, 0);
cfg = cfg_init(opts, CFGF_NONE);
cfg_set_error_function(cfg, errfunc);
cfg_parse(cfg, filename);
if (cfg_parse(cfg, filename))
return 0;
/* read debug options */
conf_read_dbg_level(cfg);
@ -803,10 +835,6 @@ int read_config(const char *filename)
conf_read_strings(cfg, "broadcast_listen", &conf_bcast_addrs, &conf_bcast_addrs_len);
/* read ac_ips */
n = cfg_size(cfg, "ac_ips");
if (!(conf_ac_ips = malloc(sizeof(struct sockaddr) * n)))
@ -822,6 +850,11 @@ int read_config(const char *filename)
perror(str);
}
}
if (!conf_read_mods(cfg)){
cfg_free(cfg);
return 0;
}
cfg_free(cfg);

View File

@ -33,7 +33,7 @@
#include "cw/vendors.h"
extern struct mod_ac * conf_mods[10];
extern struct mod_ac ** conf_mods;
#ifndef CONF_DEFAULT_ACNAME
#define CONF_DEFAULT_ACNAME "AC"
@ -139,5 +139,7 @@ extern int conf_capwap_mode;
extern int conf_parse_listen_addr(const char *addr, char *saddr, char *port, int *proto);
#define CFG_ENTRY_MODS "mods"
#endif