diff options
Diffstat (limited to 'src/plugins/acl/public_inlines.h')
-rw-r--r-- | src/plugins/acl/public_inlines.h | 154 |
1 files changed, 15 insertions, 139 deletions
diff --git a/src/plugins/acl/public_inlines.h b/src/plugins/acl/public_inlines.h index b358f640ffb..f7d7abbec0a 100644 --- a/src/plugins/acl/public_inlines.h +++ b/src/plugins/acl/public_inlines.h @@ -18,128 +18,12 @@ #include <stdint.h> +#include <vlib/unix/plugin.h> #include <plugins/acl/acl.h> #include <plugins/acl/fa_node.h> #include <plugins/acl/hash_lookup_private.h> - -/* check if a given ACL exists */ - -#ifdef ACL_PLUGIN_EXTERNAL_EXPORTS - -/* - * Define a pointer to the acl_main which will be filled during the initialization. - */ -acl_main_t *p_acl_main = 0; - -/* - * If the file is included more than once, the symbol collision will make the problem obvious. - * If the include is done only once, it is just a lonely null var - * sitting around. - */ -void *ERROR_ACL_PLUGIN_EXPORTS_FILE_MUST_BE_INCLUDED_ONLY_IN_ONE_PLACE = 0; - -u8 (*acl_plugin_acl_exists) (u32 acl_index); -#else -u8 acl_plugin_acl_exists (u32 acl_index); -#endif - - -/* - * If you are using ACL plugin, get this unique ID first, - * so you can identify yourself when creating the lookup contexts. - */ - -#ifdef ACL_PLUGIN_EXTERNAL_EXPORTS -u32 (*acl_plugin_register_user_module) (char *caller_module_string, char *val1_label, char *val2_label); -#else -u32 acl_plugin_register_user_module (char *caller_module_string, char *val1_label, char *val2_label); -#endif - -/* - * Allocate a new lookup context index. - * Supply the id assigned to your module during registration, - * and two values of your choice identifying instances - * of use within your module. They are useful for debugging. - */ -#ifdef ACL_PLUGIN_EXTERNAL_EXPORTS -int (*acl_plugin_get_lookup_context_index) (u32 acl_user_id, u32 val1, u32 val2); -#else -int acl_plugin_get_lookup_context_index (u32 acl_user_id, u32 val1, u32 val2); -#endif - -/* - * Release the lookup context index and destroy - * any asssociated data structures. - */ -#ifdef ACL_PLUGIN_EXTERNAL_EXPORTS -void (*acl_plugin_put_lookup_context_index) (u32 lc_index); -#else -void acl_plugin_put_lookup_context_index (u32 lc_index); -#endif - -/* - * Prepare the sequential vector of ACL#s to lookup within a given context. - * Any existing list will be overwritten. acl_list is a vector. - */ -#ifdef ACL_PLUGIN_EXTERNAL_EXPORTS -int (*acl_plugin_set_acl_vec_for_context) (u32 lc_index, u32 *acl_list); -#else -int acl_plugin_set_acl_vec_for_context (u32 lc_index, u32 *acl_list); -#endif - -/* Fill the 5-tuple from the packet */ - -#ifdef ACL_PLUGIN_EXTERNAL_EXPORTS -void (*acl_plugin_fill_5tuple) (u32 lc_index, vlib_buffer_t * b0, int is_ip6, int is_input, - int is_l2_path, fa_5tuple_opaque_t * p5tuple_pkt); -#else -void acl_plugin_fill_5tuple (u32 lc_index, vlib_buffer_t * b0, int is_ip6, int is_input, - int is_l2_path, fa_5tuple_opaque_t * p5tuple_pkt); -#endif - -#ifdef ACL_PLUGIN_DEFINED_BELOW_IN_FILE -static inline -void acl_plugin_fill_5tuple_inline (u32 lc_index, vlib_buffer_t * b0, int is_ip6, int is_input, - int is_l2_path, fa_5tuple_opaque_t * p5tuple_pkt) { - /* FIXME: normally the inlined version of filling in the 5-tuple. But for now just call the non-inlined version */ - acl_plugin_fill_5tuple(lc_index, b0, is_ip6, is_input, is_l2_path, p5tuple_pkt); -} -#endif - - -#ifdef ACL_PLUGIN_EXTERNAL_EXPORTS -int (*acl_plugin_match_5tuple) (u32 lc_index, - fa_5tuple_opaque_t * pkt_5tuple, - int is_ip6, u8 * r_action, - u32 * r_acl_pos_p, - u32 * r_acl_match_p, - u32 * r_rule_match_p, - u32 * trace_bitmap); -#else -int acl_plugin_match_5tuple (u32 lc_index, - fa_5tuple_opaque_t * pkt_5tuple, - int is_ip6, u8 * r_action, - u32 * r_acl_pos_p, - u32 * r_acl_match_p, - u32 * r_rule_match_p, - u32 * trace_bitmap); -#endif - -#ifdef ACL_PLUGIN_DEFINED_BELOW_IN_FILE -static inline int -acl_plugin_match_5tuple_inline (u32 lc_index, - fa_5tuple_opaque_t * pkt_5tuple, - int is_ip6, u8 * r_action, - u32 * r_acl_pos_p, - u32 * r_acl_match_p, - u32 * r_rule_match_p, - u32 * trace_bitmap) { - return acl_plugin_match_5tuple(lc_index, pkt_5tuple, is_ip6, r_action, r_acl_pos_p, r_acl_match_p, r_rule_match_p, trace_bitmap); -} -#endif - -#ifdef ACL_PLUGIN_EXTERNAL_EXPORTS +#include <plugins/acl/exported_types.h> #define LOAD_SYMBOL_FROM_PLUGIN_TO(p, s, st) \ ({ \ @@ -151,22 +35,14 @@ acl_plugin_match_5tuple_inline (u32 lc_index, #define LOAD_SYMBOL(s) LOAD_SYMBOL_FROM_PLUGIN_TO("acl_plugin.so", s, s) -static inline clib_error_t * acl_plugin_exports_init (void) -{ - LOAD_SYMBOL_FROM_PLUGIN_TO("acl_plugin.so", acl_main, p_acl_main); - LOAD_SYMBOL(acl_plugin_acl_exists); - LOAD_SYMBOL(acl_plugin_register_user_module); - LOAD_SYMBOL(acl_plugin_get_lookup_context_index); - LOAD_SYMBOL(acl_plugin_put_lookup_context_index); - LOAD_SYMBOL(acl_plugin_set_acl_vec_for_context); - LOAD_SYMBOL(acl_plugin_fill_5tuple); - LOAD_SYMBOL(acl_plugin_match_5tuple); - return 0; -} - -#endif +static inline clib_error_t * acl_plugin_exports_init (acl_plugin_methods_t *m) +{ + acl_plugin_methods_vtable_init_fn_t mvi; + LOAD_SYMBOL_FROM_PLUGIN_TO("acl_plugin.so", acl_plugin_methods_vtable_init, mvi); + return (mvi(m)); +} always_inline void * get_ptr_to_offset (vlib_buffer_t * b0, int offset) @@ -367,7 +243,7 @@ acl_fill_5tuple (acl_main_t * am, u32 sw_if_index0, vlib_buffer_t * b0, int is_i } always_inline void -acl_plugin_fill_5tuple_inline (u32 lc_index, vlib_buffer_t * b0, int is_ip6, +acl_plugin_fill_5tuple_inline (void *p_acl_main, u32 lc_index, vlib_buffer_t * b0, int is_ip6, int is_input, int is_l2_path, fa_5tuple_opaque_t * p5tuple_pkt) { acl_main_t *am = p_acl_main; @@ -539,7 +415,7 @@ single_acl_match_5tuple (acl_main_t * am, u32 acl_index, fa_5tuple_t * pkt_5tupl } always_inline int -acl_plugin_single_acl_match_5tuple (u32 acl_index, fa_5tuple_t * pkt_5tuple, +acl_plugin_single_acl_match_5tuple (void *p_acl_main, u32 acl_index, fa_5tuple_t * pkt_5tuple, int is_ip6, u8 * r_action, u32 * r_acl_match_p, u32 * r_rule_match_p, u32 * trace_bitmap) { @@ -549,7 +425,7 @@ acl_plugin_single_acl_match_5tuple (u32 acl_index, fa_5tuple_t * pkt_5tuple, } always_inline int -linear_multi_acl_match_5tuple (u32 lc_index, fa_5tuple_t * pkt_5tuple, +linear_multi_acl_match_5tuple (void *p_acl_main, u32 lc_index, fa_5tuple_t * pkt_5tuple, int is_ip6, u8 *r_action, u32 *acl_pos_p, u32 * acl_match_p, u32 * rule_match_p, u32 * trace_bitmap) { @@ -702,7 +578,7 @@ multi_acl_match_get_applied_ace_index(acl_main_t *am, fa_5tuple_t *match) } always_inline int -hash_multi_acl_match_5tuple (u32 lc_index, fa_5tuple_t * pkt_5tuple, +hash_multi_acl_match_5tuple (void *p_acl_main, u32 lc_index, fa_5tuple_t * pkt_5tuple, int is_ip6, u8 *action, u32 *acl_pos_p, u32 * acl_match_p, u32 * rule_match_p, u32 * trace_bitmap) { @@ -724,7 +600,7 @@ hash_multi_acl_match_5tuple (u32 lc_index, fa_5tuple_t * pkt_5tuple, always_inline int -acl_plugin_match_5tuple_inline (u32 lc_index, +acl_plugin_match_5tuple_inline (void *p_acl_main, u32 lc_index, fa_5tuple_opaque_t * pkt_5tuple, int is_ip6, u8 * r_action, u32 * r_acl_pos_p, @@ -736,10 +612,10 @@ acl_plugin_match_5tuple_inline (u32 lc_index, fa_5tuple_t * pkt_5tuple_internal = (fa_5tuple_t *)pkt_5tuple; pkt_5tuple_internal->pkt.lc_index = lc_index; if (am->use_hash_acl_matching) { - return hash_multi_acl_match_5tuple(lc_index, pkt_5tuple_internal, is_ip6, r_action, + return hash_multi_acl_match_5tuple(p_acl_main, lc_index, pkt_5tuple_internal, is_ip6, r_action, r_acl_pos_p, r_acl_match_p, r_rule_match_p, trace_bitmap); } else { - return linear_multi_acl_match_5tuple(lc_index, pkt_5tuple_internal, is_ip6, r_action, + return linear_multi_acl_match_5tuple(p_acl_main, lc_index, pkt_5tuple_internal, is_ip6, r_action, r_acl_pos_p, r_acl_match_p, r_rule_match_p, trace_bitmap); } } |