acl: use the global heap when allocating the lookup context
[vpp.git] / src / plugins / acl / acl.c
index 017eb68..4944ebd 100644 (file)
@@ -782,6 +782,8 @@ acl_interface_set_inout_acl_list (acl_main_t * am, u32 sw_if_index,
    */
   vec_validate_init_empty ((*pinout_lc_index_by_sw_if_index), sw_if_index,
                           ~0);
+  /* lookup context creation is to be done in global heap */
+  void *oldheap = clib_mem_set_heap (am->vlib_main->heap_base);
   if (vec_len (vec_acl_list_index) > 0)
     {
       u32 lc_index = (*pinout_lc_index_by_sw_if_index)[sw_if_index];
@@ -802,6 +804,7 @@ acl_interface_set_inout_acl_list (acl_main_t * am, u32 sw_if_index,
          (*pinout_lc_index_by_sw_if_index)[sw_if_index] = ~0;
        }
     }
+  clib_mem_set_heap (oldheap);
 
   /* ensure ACL processing is enabled/disabled as needed */
   acl_interface_inout_enable_disable (am, sw_if_index, is_input,
@@ -2950,7 +2953,8 @@ acl_set_aclplugin_acl_fn (vlib_main_t * vm,
          rules[rule_idx].is_permit = action;
        }
       else if (unformat (line_input, "src %U/%d",
-                        unformat_ip46_address, &src, &src_prefix_length))
+                        unformat_ip46_address, &src, IP46_TYPE_ANY,
+                        &src_prefix_length))
        {
          vec_validate_acl_rules (rules, rule_idx);
          ip_address_encode (&src, IP46_TYPE_ANY,
@@ -2959,7 +2963,8 @@ acl_set_aclplugin_acl_fn (vlib_main_t * vm,
          rules[rule_idx].src_prefix.len = src_prefix_length;
        }
       else if (unformat (line_input, "dst %U/%d",
-                        unformat_ip46_address, &dst, &dst_prefix_length))
+                        unformat_ip46_address, &dst, IP46_TYPE_ANY,
+                        &dst_prefix_length))
        {
          vec_validate_acl_rules (rules, rule_idx);
          ip_address_encode (&dst, IP46_TYPE_ANY,