acl-plugin: defer the ACL plugin user module registration with ACL lookup until it... 64/11364/2
authorAndrew Yourtchenko <ayourtch@gmail.com>
Mon, 26 Mar 2018 10:30:47 +0000 (12:30 +0200)
committerOle Trøan <otroan@employees.org>
Mon, 26 Mar 2018 12:55:57 +0000 (12:55 +0000)
Registering ACL plugin user module within the "ACL as a service" infra during the plugin init
causes an unnecesary ACL heap allocation and prevents the changing of the ACL heap size
from the startup config.

Defer this registration until just before it is needed - i.e. when applying an ACL to
an interface.

Change-Id: Ied79967596b3b76d6630f136c998e59f8cdad962
Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
src/plugins/acl/acl.c

index 57940fc..7499bc4 100644 (file)
@@ -1259,6 +1259,10 @@ acl_interface_set_inout_acl_list (acl_main_t * am, u32 sw_if_index,
       u32 lc_index = (*pinout_lc_index_by_sw_if_index)[sw_if_index];
       if (~0 == lc_index)
        {
+         if (~0 == am->interface_acl_user_id)
+           am->interface_acl_user_id =
+             acl_plugin_register_user_module ("interface ACL", "sw_if_index",
+                                              "is_input");
          lc_index =
            acl_plugin_get_lookup_context_index (am->interface_acl_user_id,
                                                 sw_if_index, is_input);
@@ -4089,9 +4093,7 @@ acl_init (vlib_main_t * vm)
   /* use the new fancy hash-based matching */
   am->use_hash_acl_matching = 1;
 
-  am->interface_acl_user_id =
-    acl_plugin_register_user_module ("interface ACL", "sw_if_index",
-                                    "is_input");
+  am->interface_acl_user_id = ~0;      /* defer till the first use */
 
   return error;
 }