Change-Id: I085615fde1f966490f30ed5d32017b8b088cfd59 Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
104 lines
3.4 KiB
C
104 lines
3.4 KiB
C
/*
|
|
* Copyright (c) 2018 Cisco and/or its affiliates.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at:
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#ifndef included_acl_exported_types_h
|
|
#define included_acl_exported_types_h
|
|
|
|
/*
|
|
* The overlay struct matching an internal type. Contents/size may change.
|
|
* During the compile of the ACL plugin it is checked to have the same size
|
|
* as the internal structure.
|
|
*/
|
|
|
|
typedef struct {
|
|
u64 opaque[6];
|
|
} fa_5tuple_opaque_t;
|
|
|
|
/*
|
|
* Use to check if a given acl# exists.
|
|
*/
|
|
|
|
typedef u8 (*acl_plugin_acl_exists_fn_t) (u32 acl_index);
|
|
|
|
/*
|
|
* If you are using ACL plugin, get this unique ID first,
|
|
* so you can identify yourself when creating the lookup contexts.
|
|
*/
|
|
|
|
typedef u32 (*acl_plugin_register_user_module_fn_t) (char *caller_module_string, char *val1_label, char *val2_label);
|
|
|
|
|
|
/*
|
|
* 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.
|
|
*/
|
|
|
|
typedef int (*acl_plugin_get_lookup_context_index_fn_t) (u32 acl_user_id, u32 val1, u32 val2);
|
|
|
|
/*
|
|
* Release the lookup context index and destroy
|
|
* any associated data structures.
|
|
*/
|
|
|
|
typedef void (*acl_plugin_put_lookup_context_index_fn_t) (u32 lc_index);
|
|
|
|
/*
|
|
* Prepare the sequential vector of ACL#s to lookup within a given context.
|
|
* Any existing list will be overwritten. acl_list is a vector.
|
|
*/
|
|
|
|
typedef int (*acl_plugin_set_acl_vec_for_context_fn_t) (u32 lc_index, u32 *acl_list);
|
|
|
|
typedef void (*acl_plugin_fill_5tuple_fn_t) (u32 lc_index, vlib_buffer_t * b0, int is_ip6, int is_input,
|
|
int is_l2_path, fa_5tuple_opaque_t * p5tuple_pkt);
|
|
|
|
typedef int (*acl_plugin_match_5tuple_fn_t) (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);
|
|
|
|
|
|
#define foreach_acl_plugin_exported_method_name \
|
|
_(acl_exists) \
|
|
_(register_user_module) \
|
|
_(get_lookup_context_index) \
|
|
_(put_lookup_context_index) \
|
|
_(set_acl_vec_for_context) \
|
|
_(fill_5tuple) \
|
|
_(match_5tuple)
|
|
|
|
#define _(name) acl_plugin_ ## name ## _fn_t name;
|
|
typedef struct {
|
|
void *p_acl_main; /* a local copy of a pointer to acl_main */
|
|
foreach_acl_plugin_exported_method_name
|
|
} acl_plugin_methods_t;
|
|
#undef _
|
|
|
|
/*
|
|
* An internally used function to fill in the ACL plugin vtable.
|
|
* The users should call this one:
|
|
* static inline clib_error_t * acl_plugin_exports_init (acl_plugin_methods_t *m);
|
|
*/
|
|
|
|
typedef clib_error_t * (*acl_plugin_methods_vtable_init_fn_t) (acl_plugin_methods_t *m);
|
|
|
|
#endif
|
|
|