mod_register_actions now uses parameter mode.

FossilOrigin-Name: 7fccf33259836d6d1139d611825315e21428fbb88d7359d4176ef8ba258488fa
This commit is contained in:
7u83@mail.ru 2016-03-10 07:07:30 +00:00
parent c4f9bca1e6
commit fb74f28756
10 changed files with 47 additions and 23 deletions

View File

@ -179,14 +179,14 @@ static struct cw_actiondef * load_mods(struct conn *conn, uint8_t * rawmsg, int
int elems_len, struct sockaddr *from) int elems_len, struct sockaddr *from)
{ {
struct mod_ac * cmod = detect_mod(conn, rawmsg, len, elems_len, from, MOD_DETECT_CAPWAP); struct mod_ac * cmod = detect_mod(conn, rawmsg, len, elems_len, from, MOD_MODE_CAPWAP);
if (cmod == MOD_NULL) { if (cmod == MOD_NULL) {
cw_dbg(DBG_MSG_ERR, "Cant't find mod to handle connection from %s , discarding message", cw_dbg(DBG_MSG_ERR, "Cant't find mod to handle connection from %s , discarding message",
sock_addr2str_p(from)); sock_addr2str_p(from));
return NULL; return NULL;
} }
struct mod_ac * bmod = detect_mod(conn, rawmsg, len, elems_len, from, MOD_DETECT_BINDINGS); struct mod_ac * bmod = detect_mod(conn, rawmsg, len, elems_len, from, MOD_MODE_BINDINGS);
cw_dbg(DBG_INFO,"Mods deteced: %s,%s",cmod->name,bmod->name); cw_dbg(DBG_INFO,"Mods deteced: %s,%s",cmod->name,bmod->name);

View File

@ -14,7 +14,7 @@ struct cache_item
static struct mavl * cache = NULL; static struct mavl * cache = NULL;
static int mod_null_register_actions(struct cw_actiondef *def) static int mod_null_register_actions(struct cw_actiondef *def,int mode)
{ {
return 0; return 0;
} }
@ -73,11 +73,11 @@ struct cw_actiondef * mod_cache_add(struct mod_ac *c, struct mod_ac *b)
memset (i,0,sizeof(struct cache_item)); memset (i,0,sizeof(struct cache_item));
if (c){ if (c){
i->capwap=c->name; i->capwap=c->name;
c->register_actions(&(i->actions)); c->register_actions(&(i->actions),MOD_MODE_CAPWAP);
} }
if (b){ if (b){
i->bindings=b->name; i->bindings=b->name;
b->register_actions(&(i->actions)); b->register_actions(&(i->actions),MOD_MODE_BINDINGS);
} }
mavl_add(cache,i); mavl_add(cache,i);

View File

@ -31,8 +31,8 @@ struct cw_actiondef;
#define MOD_MAXMODS 8 #define MOD_MAXMODS 8
enum { enum {
MOD_DETECT_CAPWAP, MOD_MODE_CAPWAP,
MOD_DETECT_BINDINGS MOD_MODE_BINDINGS
}; };
struct mod_ac { struct mod_ac {
@ -51,7 +51,7 @@ struct mod_ac {
void *data; void *data;
/** Register actions */ /** Register actions */
int (*register_actions) (struct cw_actiondef * def); int (*register_actions) (struct cw_actiondef * def,int mode);
}; };

View File

@ -8,7 +8,7 @@
#include "mod_capwap.h" #include "mod_capwap.h"
static struct cw_actiondef actions; //static struct cw_actiondef actions;
@ -27,17 +27,26 @@ static int init()
static int detect(struct conn *conn, const uint8_t * rawmsg, int rawlen, int elems_len, static int detect(struct conn *conn, const uint8_t * rawmsg, int rawlen, int elems_len,
struct sockaddr *from, int mode) struct sockaddr *from, int mode)
{ {
if (mode != MOD_DETECT_CAPWAP) if (mode != MOD_MODE_CAPWAP)
return 0; return 0;
cw_dbg(DBG_MOD,"CAPWAP detected: yes"); cw_dbg(DBG_MOD,"CAPWAP detected: yes");
return 1; return 1;
} }
static int register_actions(struct cw_actiondef *def, int mode)
{
if (mode != MOD_MODE_CAPWAP)
return 0;
return capwap_register_actions_ac(def);
}
static struct mod_ac capwap_ac = { static struct mod_ac capwap_ac = {
.name = "capwap", .name = "capwap",
.init = init, .init = init,
.detect = detect, .detect = detect,
.register_actions = capwap_register_actions_ac .register_actions = register_actions
}; };
struct mod_ac *mod_capwap_ac() struct mod_ac *mod_capwap_ac()

View File

@ -27,18 +27,25 @@ static int init()
static int detect(struct conn *conn, const uint8_t * rawmsg, int rawlen, int elems_len, static int detect(struct conn *conn, const uint8_t * rawmsg, int rawlen, int elems_len,
struct sockaddr *from, int mode) struct sockaddr *from, int mode)
{ {
if (mode != MOD_DETECT_CAPWAP) if (mode != MOD_MODE_CAPWAP)
return 0; return 0;
conn->detected = 1; conn->detected = 1;
conn->actions = &actions; conn->actions = &actions;
return 1; return 1;
} }
static int register_actions(struct cw_actiondef *def, int mode)
{
if (mode != MOD_MODE_CAPWAP)
return 0;
return capwap_register_actions_wtp(def);
}
static struct mod_wtp capwap_wtp = { static struct mod_wtp capwap_wtp = {
.name = "capwap", .name = "capwap",
.init = init, .init = init,
.detect = detect, .detect = detect,
.register_actions = capwap_register_actions_wtp .register_actions=register_actions
}; };
struct mod_wtp *mod_capwap_wtp() struct mod_wtp *mod_capwap_wtp()

View File

@ -27,7 +27,7 @@ static int init()
static int detect(struct conn *conn, const uint8_t * rawmsg, int rawlen, int elems_len, static int detect(struct conn *conn, const uint8_t * rawmsg, int rawlen, int elems_len,
struct sockaddr *from, int mode) struct sockaddr *from, int mode)
{ {
if (mode != MOD_DETECT_BINDINGS) if (mode != MOD_MODE_BINDINGS)
return 0; return 0;
int wbid = cw_get_hdr_wbid(rawmsg); int wbid = cw_get_hdr_wbid(rawmsg);
@ -39,8 +39,11 @@ static int detect(struct conn *conn, const uint8_t * rawmsg, int rawlen, int ele
return 1; return 1;
} }
static int register_actions(struct cw_actiondef *actions) static int register_actions(struct cw_actiondef *actions, int mode)
{ {
if (mode != MOD_MODE_BINDINGS)
return 0;
return capwap80211_register_actions_ac(actions); return capwap80211_register_actions_ac(actions);
} }

View File

@ -26,15 +26,17 @@ static int init()
static int detect(struct conn *conn, const uint8_t * rawmsg, int rawlen, int elems_len, static int detect(struct conn *conn, const uint8_t * rawmsg, int rawlen, int elems_len,
struct sockaddr *from, int mode) struct sockaddr *from, int mode)
{ {
if (mode != MOD_DETECT_BINDINGS) if (mode != MOD_MODE_BINDINGS)
return 0; return 0;
cw_log(LOG_INFO, "Detecting WTP 80211"); cw_log(LOG_INFO, "Detecting WTP 80211");
return 1; return 1;
} }
static int register_actions(struct cw_actiondef *actions) static int register_actions(struct cw_actiondef *actions,int mode)
{ {
if (mode != MOD_MODE_BINDINGS)
return 0;
return capwap80211_register_actions_wtp(actions); return capwap80211_register_actions_wtp(actions);
} }

View File

@ -15,7 +15,7 @@ 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_DETECT_CAPWAP) if (mode != MOD_MODE_CAPWAP)
return 0; return 0;
cw_dbg(DBG_MOD,"CIPWAP detected: no"); cw_dbg(DBG_MOD,"CIPWAP detected: no");

View File

@ -16,15 +16,18 @@ static struct cw_actiondef actions;
extern int cisco_register_actions_ac(struct cw_actiondef *def); extern int cisco_register_actions_ac(struct cw_actiondef *def);
static int register_actions(struct cw_actiondef *actions) static int register_actions(struct cw_actiondef *actions,int mode)
{ {
if (mode != MOD_MODE_CAPWAP)
return 0;
struct mod_ac *cmod = modload_ac("capwap"); struct mod_ac *cmod = modload_ac("capwap");
if (!cmod) { if (!cmod) {
cw_log(LOG_ERR, cw_log(LOG_ERR,
"Can't initzialize mod_cisco, failed to load base mod mod_capwap"); "Can't initzialize mod_cisco, failed to load base mod mod_capwap");
return 1; return 1;
} }
cmod->register_actions(actions); cmod->register_actions(actions,MOD_MODE_CAPWAP);
int rc = cisco_register_actions_ac(actions); int rc = cisco_register_actions_ac(actions);
cw_dbg(DBG_INFO, "Initialized mod cisco with %d actions", rc); cw_dbg(DBG_INFO, "Initialized mod cisco with %d actions", rc);
return 0; return 0;
@ -45,7 +48,7 @@ static int init()
static int detect(struct conn *conn, const uint8_t * rawmsg, int rawlen, int elems_len, static int detect(struct conn *conn, const uint8_t * rawmsg, int rawlen, int elems_len,
struct sockaddr *from, int mode) struct sockaddr *from, int mode)
{ {
if (mode != MOD_DETECT_CAPWAP) if (mode != MOD_MODE_CAPWAP)
return 0; return 0;

View File

@ -103,7 +103,7 @@ int main()
printf("Can't load mod capwap\n"); printf("Can't load mod capwap\n");
exit(0); exit(0);
} }
mod->register_actions(&capwap_actions); mod->register_actions(&capwap_actions,MOD_MODE_CAPWAP);
mod = modload_wtp("capwap80211"); mod = modload_wtp("capwap80211");
if (!mod) { if (!mod) {
printf("Can't load mod capwap80211\n"); printf("Can't load mod capwap80211\n");
@ -111,7 +111,7 @@ int main()
} }
printf("add capwap80211\n"); printf("add capwap80211\n");
int rc = mod->register_actions(&capwap_actions); int rc = mod->register_actions(&capwap_actions,MOD_MODE_BINDINGS);
printf("Out reg = %d\n",rc); printf("Out reg = %d\n",rc);