X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fabf%2Fabf_itf_attach.c;h=166ccec31aa26de1a4b4de0c3799b215ed62d04b;hb=8f68b3e63d682cf23ae836c50d3d7abf3c950514;hp=2e30db9d12f306902bde67c8e623d0ede94201f9;hpb=669d07dc016757b856e1014a415996cf9f0ebc58;p=vpp.git diff --git a/src/plugins/abf/abf_itf_attach.c b/src/plugins/abf/abf_itf_attach.c index 2e30db9d12f..166ccec31aa 100644 --- a/src/plugins/abf/abf_itf_attach.c +++ b/src/plugins/abf/abf_itf_attach.c @@ -47,6 +47,11 @@ static u32 *abf_alctx_per_itf[FIB_PROTOCOL_MAX]; * ABF ACL module user id returned during the initialization */ static u32 abf_acl_user_id; +/* + * ACL plugin method vtable + */ + +static acl_plugin_methods_t acl_plugin; /** * A DB of attachments; key={abf_index,sw_if_index} @@ -152,7 +157,7 @@ abf_setup_acl_lc (fib_protocol_t fproto, u32 sw_if_index) aia = abf_itf_attach_get (*aiai); vec_add1 (acl_vec, aia->aia_acl); } - acl_plugin_set_acl_vec_for_context (abf_alctx_per_itf[fproto][sw_if_index], + acl_plugin.set_acl_vec_for_context (abf_alctx_per_itf[fproto][sw_if_index], acl_vec); vec_free (acl_vec); } @@ -179,7 +184,7 @@ abf_itf_attach (fib_protocol_t fproto, return (VNET_API_ERROR_ENTRY_ALREADY_EXISTS); /* - * construt a new attachemnt object + * construct a new attachment object */ pool_get (abf_itf_attach_pool, aia); @@ -205,7 +210,7 @@ abf_itf_attach (fib_protocol_t fproto, if (1 == vec_len (abf_per_itf[fproto][sw_if_index])) { /* - * when enabling the first ABF polciy on the interface + * when enabling the first ABF policy on the interface * we need to enable the interface input feature */ vnet_feature_enable_disable ((FIB_PROTOCOL_IP4 == fproto ? @@ -219,7 +224,7 @@ abf_itf_attach (fib_protocol_t fproto, /* if this is the first ABF policy, we need to acquire an ACL lookup context */ vec_validate_init_empty (abf_alctx_per_itf[fproto], sw_if_index, ~0); abf_alctx_per_itf[fproto][sw_if_index] = - acl_plugin_get_lookup_context_index (abf_acl_user_id, sw_if_index, 0); + acl_plugin.get_lookup_context_index (abf_acl_user_id, sw_if_index, 0); } else { @@ -231,7 +236,7 @@ abf_itf_attach (fib_protocol_t fproto, abf_setup_acl_lc (fproto, sw_if_index); /* - * become a child of the ABF poilcy so we are notified when + * become a child of the ABF policy so we are notified when * its forwarding changes. */ aia->aia_sibling = fib_node_child_add (abf_policy_fib_node_type, @@ -248,7 +253,7 @@ abf_itf_detach (fib_protocol_t fproto, u32 policy_id, u32 sw_if_index) u32 index; /* - * check this is a valid attahment + * check this is a valid attachment */ aia = abf_itf_attach_db_find (policy_id, sw_if_index); @@ -256,7 +261,7 @@ abf_itf_detach (fib_protocol_t fproto, u32 policy_id, u32 sw_if_index) return (VNET_API_ERROR_ENTRY_ALREADY_EXISTS); /* - * first remove from the interface's vecotr + * first remove from the interface's vector */ ASSERT (abf_per_itf[fproto]); ASSERT (abf_per_itf[fproto][sw_if_index]); @@ -270,7 +275,7 @@ abf_itf_detach (fib_protocol_t fproto, u32 policy_id, u32 sw_if_index) if (0 == vec_len (abf_per_itf[fproto][sw_if_index])) { /* - * when deleting the last ABF polciy on the interface + * when deleting the last ABF policy on the interface * we need to disable the interface input feature */ vnet_feature_enable_disable ((FIB_PROTOCOL_IP4 == fproto ? @@ -282,7 +287,7 @@ abf_itf_detach (fib_protocol_t fproto, u32 policy_id, u32 sw_if_index) sw_if_index, 0, NULL, 0); /* Return the lookup context, invalidate its id in our records */ - acl_plugin_put_lookup_context_index (abf_alctx_per_itf[fproto] + acl_plugin.put_lookup_context_index (abf_alctx_per_itf[fproto] [sw_if_index]); abf_alctx_per_itf[fproto][sw_if_index] = ~0; } @@ -302,7 +307,7 @@ abf_itf_detach (fib_protocol_t fproto, u32 policy_id, u32 sw_if_index) aia->aia_abf, aia->aia_sibling); /* - * remove the attahcment from the DB + * remove the attachment from the DB */ abf_itf_attach_db_del (policy_id, sw_if_index); @@ -326,7 +331,7 @@ format_abf_intf_attach (u8 * s, va_list * args) abf_policy_t *ap; ap = abf_policy_get (aia->aia_abf); - s = format (s, "abf-interface-attach: policy:%d prioity:%d", + s = format (s, "abf-interface-attach: policy:%d priority:%d", ap->ap_id, aia->aia_prio); s = format (s, "\n %U", format_dpo_id, &aia->aia_dpo, 2); @@ -546,13 +551,25 @@ abf_input_inline (vlib_main_t * vm, */ u32 lc_index = abf_alctx_per_itf[fproto][sw_if_index0]; - acl_plugin_fill_5tuple (lc_index, b0, (FIB_PROTOCOL_IP6 == fproto), - 1, 0, &fa_5tuple0); - - if (acl_plugin_match_5tuple - (lc_index, &fa_5tuple0, (FIB_PROTOCOL_IP6 == fproto), &action, - &match_acl_pos, &match_acl_index, &match_rule_index, - &trace_bitmap)) + /* + A non-inline version looks like this: + + acl_plugin.fill_5tuple (lc_index, b0, (FIB_PROTOCOL_IP6 == fproto), + 1, 0, &fa_5tuple0); + if (acl_plugin.match_5tuple + (lc_index, &fa_5tuple0, (FIB_PROTOCOL_IP6 == fproto), &action, + &match_acl_pos, &match_acl_index, &match_rule_index, + &trace_bitmap)) + . . . + */ + acl_plugin_fill_5tuple_inline (acl_plugin.p_acl_main, lc_index, b0, + (FIB_PROTOCOL_IP6 == fproto), 1, 0, + &fa_5tuple0); + + if (acl_plugin_match_5tuple_inline + (acl_plugin.p_acl_main, lc_index, &fa_5tuple0, + (FIB_PROTOCOL_IP6 == fproto), &action, &match_acl_pos, + &match_acl_index, &match_rule_index, &trace_bitmap)) { /* * match: @@ -571,7 +588,7 @@ abf_input_inline (vlib_main_t * vm, * miss: * move on down the feature arc */ - vnet_feature_next (sw_if_index0, &next0, b0); + vnet_feature_next (&next0, b0); } if (PREDICT_FALSE (b0->flags & VLIB_BUFFER_IS_TRACED)) @@ -737,12 +754,12 @@ abf_itf_bond_init (vlib_main_t * vm) { abf_itf_attach_fib_node_type = fib_node_register_new_type (&abf_itf_attach_vft); - clib_error_t *acl_init_res = acl_plugin_exports_init (); + clib_error_t *acl_init_res = acl_plugin_exports_init (&acl_plugin); if (acl_init_res) return (acl_init_res); abf_acl_user_id = - acl_plugin_register_user_module ("abp plugin", "sw_if_index", NULL); + acl_plugin.register_user_module ("ABF plugin", "sw_if_index", NULL); return (NULL); }