diff --git a/src/cw/conn_process_packet.c b/src/cw/conn_process_packet.c index d1a24101..67f75a13 100644 --- a/src/cw/conn_process_packet.c +++ b/src/cw/conn_process_packet.c @@ -179,14 +179,14 @@ static struct cw_actiondef * load_mods(struct conn *conn, uint8_t * rawmsg, int 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) { cw_dbg(DBG_MSG_ERR, "Cant't find mod to handle connection from %s , discarding message", sock_addr2str_p(from)); 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); diff --git a/src/cw/mod.c b/src/cw/mod.c index 208f9535..018bb5ee 100644 --- a/src/cw/mod.c +++ b/src/cw/mod.c @@ -14,7 +14,7 @@ struct cache_item 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; } @@ -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)); if (c){ i->capwap=c->name; - c->register_actions(&(i->actions)); + c->register_actions(&(i->actions),MOD_MODE_CAPWAP); } if (b){ i->bindings=b->name; - b->register_actions(&(i->actions)); + b->register_actions(&(i->actions),MOD_MODE_BINDINGS); } mavl_add(cache,i); diff --git a/src/cw/mod.h b/src/cw/mod.h index 251ae31e..1868d64d 100644 --- a/src/cw/mod.h +++ b/src/cw/mod.h @@ -31,8 +31,8 @@ struct cw_actiondef; #define MOD_MAXMODS 8 enum { - MOD_DETECT_CAPWAP, - MOD_DETECT_BINDINGS + MOD_MODE_CAPWAP, + MOD_MODE_BINDINGS }; struct mod_ac { @@ -51,7 +51,7 @@ struct mod_ac { void *data; /** Register actions */ - int (*register_actions) (struct cw_actiondef * def); + int (*register_actions) (struct cw_actiondef * def,int mode); }; diff --git a/src/mod/capwap/mod_capwap_ac.c b/src/mod/capwap/mod_capwap_ac.c index 59dab493..e5387fe6 100644 --- a/src/mod/capwap/mod_capwap_ac.c +++ b/src/mod/capwap/mod_capwap_ac.c @@ -8,7 +8,7 @@ #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, struct sockaddr *from, int mode) { - if (mode != MOD_DETECT_CAPWAP) + if (mode != MOD_MODE_CAPWAP) return 0; cw_dbg(DBG_MOD,"CAPWAP detected: yes"); 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 = { .name = "capwap", .init = init, .detect = detect, - .register_actions = capwap_register_actions_ac + .register_actions = register_actions }; struct mod_ac *mod_capwap_ac() diff --git a/src/mod/capwap/mod_capwap_wtp.c b/src/mod/capwap/mod_capwap_wtp.c index bb1c0cc7..7c2f69d1 100644 --- a/src/mod/capwap/mod_capwap_wtp.c +++ b/src/mod/capwap/mod_capwap_wtp.c @@ -27,18 +27,25 @@ static int init() 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; conn->detected = 1; conn->actions = &actions; 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 = { .name = "capwap", .init = init, .detect = detect, - .register_actions = capwap_register_actions_wtp + .register_actions=register_actions }; struct mod_wtp *mod_capwap_wtp() diff --git a/src/mod/capwap80211/mod_capwap80211_ac.c b/src/mod/capwap80211/mod_capwap80211_ac.c index 36ba7ef8..2dcf0972 100644 --- a/src/mod/capwap80211/mod_capwap80211_ac.c +++ b/src/mod/capwap80211/mod_capwap80211_ac.c @@ -27,7 +27,7 @@ static int init() static int detect(struct conn *conn, const uint8_t * rawmsg, int rawlen, int elems_len, struct sockaddr *from, int mode) { - if (mode != MOD_DETECT_BINDINGS) + if (mode != MOD_MODE_BINDINGS) return 0; 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; } -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); } diff --git a/src/mod/capwap80211/mod_capwap80211_wtp.c b/src/mod/capwap80211/mod_capwap80211_wtp.c index add89492..69f5675e 100644 --- a/src/mod/capwap80211/mod_capwap80211_wtp.c +++ b/src/mod/capwap80211/mod_capwap80211_wtp.c @@ -26,15 +26,17 @@ static int init() static int detect(struct conn *conn, const uint8_t * rawmsg, int rawlen, int elems_len, struct sockaddr *from, int mode) { - if (mode != MOD_DETECT_BINDINGS) + if (mode != MOD_MODE_BINDINGS) return 0; cw_log(LOG_INFO, "Detecting WTP 80211"); 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); } diff --git a/src/mod/cipwap/mod_cipwap_ac.c b/src/mod/cipwap/mod_cipwap_ac.c index f1912a93..658626f7 100644 --- a/src/mod/cipwap/mod_cipwap_ac.c +++ b/src/mod/cipwap/mod_cipwap_ac.c @@ -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) { - if (mode != MOD_DETECT_CAPWAP) + if (mode != MOD_MODE_CAPWAP) return 0; cw_dbg(DBG_MOD,"CIPWAP detected: no"); diff --git a/src/mod/cisco/mod_cisco_ac.c b/src/mod/cisco/mod_cisco_ac.c index 75fdc340..6128fab1 100644 --- a/src/mod/cisco/mod_cisco_ac.c +++ b/src/mod/cisco/mod_cisco_ac.c @@ -16,15 +16,18 @@ static struct cw_actiondef actions; 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"); if (!cmod) { cw_log(LOG_ERR, "Can't initzialize mod_cisco, failed to load base mod mod_capwap"); return 1; } - cmod->register_actions(actions); + cmod->register_actions(actions,MOD_MODE_CAPWAP); int rc = cisco_register_actions_ac(actions); cw_dbg(DBG_INFO, "Initialized mod cisco with %d actions", rc); return 0; @@ -45,7 +48,7 @@ static int init() 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; diff --git a/src/wtp/wtp_main.c b/src/wtp/wtp_main.c index 8577b2c5..896bd878 100644 --- a/src/wtp/wtp_main.c +++ b/src/wtp/wtp_main.c @@ -103,7 +103,7 @@ int main() printf("Can't load mod capwap\n"); exit(0); } - mod->register_actions(&capwap_actions); + mod->register_actions(&capwap_actions,MOD_MODE_CAPWAP); mod = modload_wtp("capwap80211"); if (!mod) { printf("Can't load mod capwap80211\n"); @@ -111,7 +111,7 @@ int main() } 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);