/* This file is part of actube. actube is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. libcapwap is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Foobar. If not, see . */ /** * @file * @brief module definitions */ #ifndef __MOD_H #define __MOD_H #include #include #include "sock.h" #include "conn.h" #include "cfg.h" enum { CW_MOD_MODE_CAPWAP, CW_MOD_MODE_BINDINGS }; struct cw_Mod { /** Name of the module */ const char *name; /** Initializion method */ int (*init) (struct cw_Mod *mod, cw_Cfg_t * global_cfg, int role); /** Detect capwap * This function is called after receiving and disassembling a complete * CAPWAP message. Either on Discovery Request or Join Request. * @param conn current connection * @return 0 if notdetected **/ int (*detect) (struct cw_Conn * conn, const uint8_t * rawmsg, int rawlen, int elems_len, struct sockaddr * from, int mode); struct cw_MsgSet * (*register_messages)(struct cw_MsgSet * set, int mode); /** * Handle returned by dlopen, if this module was loaded * dynamically with dlopen. If this module was statically * linked, dll_handle is NULL. */ void * dll_handle; /** used for private data */ void *data; int (*setup_cfg)(struct cw_Conn *conn); }; extern struct cw_Mod mod_null; #define MOD_NULL (&mod_null) /* struct cw_actiondef * mod_cache_add(struct cw_Conn *conn,struct cw_Mod *c, struct cw_Mod *b); */ #define mod_init_config(mod,cfg) (mod->init_config ? mod->init_config(cfg):1) /* void mod_set_actions_registered_cb(void (*fun) (struct cw_Mod *, struct cw_Mod *, struct cw_actiondef *)); */ extern int mod_caching; #define mod_set_caching(var) (mod_caching=var) #define mod_get_caching() (mod_caching) struct cw_Mod * cw_mod_load(const char * mod_name, cw_Cfg_t * global_cfg, int role); struct cw_Mod * cw_mod_add_to_list(struct cw_Mod * mod ); struct cw_Mod * cw_mod_detect(struct cw_Conn *conn, uint8_t * rawmsg, int len, int elems_len, struct sockaddr *from, int mode); struct cw_MsgSet *cw_mod_get_msg_set(struct cw_Conn *conn, struct cw_Mod * capwap_mod, struct cw_Mod *bindings_mod); void cw_mod_set_path(const char * path); #define CW_MOD_MAX_MOD_NAME_LEN 128 #define CW_MOD_INTERFACE_FUNCTION_NAME_SUFFIX "_get_interface" #endif