ipsec: Support MPLS over IPSec[46] interface
[vpp.git] / src / vnet / config.c
index 5937574..c9d4909 100644 (file)
@@ -241,6 +241,14 @@ vnet_get_config_heap (vnet_config_main_t * cm, u32 ci)
   return heap_elt_at_index (cm->config_string_heap, ci);
 }
 
+void
+vnet_config_del (vnet_config_main_t * cm, u32 config_id)
+{
+  u32 *p = vnet_get_config_heap (cm, config_id);
+  vnet_config_t *old = pool_elt_at_index (cm->config_pool, p[-1]);
+  remove_reference (cm, old);
+}
+
 u32
 vnet_config_modify_end_node (vlib_main_t * vm,
                             vnet_config_main_t * cm,
@@ -331,11 +339,16 @@ vnet_config_add_feature (vlib_main_t * vm,
   f->feature_index = feature_index;
   f->node_index = node_index;
 
-  n_feature_config_u32s =
-    round_pow2 (n_feature_config_bytes,
-               sizeof (f->feature_config[0])) /
-    sizeof (f->feature_config[0]);
-  vec_add (f->feature_config, feature_config, n_feature_config_u32s);
+  if (n_feature_config_bytes)
+    {
+      n_feature_config_u32s =
+       round_pow2 (n_feature_config_bytes,
+                   sizeof (f->feature_config[0])) /
+       sizeof (f->feature_config[0]);
+      vec_validate (f->feature_config, n_feature_config_u32s - 1);
+      clib_memcpy_fast (f->feature_config, feature_config,
+                       n_feature_config_bytes);
+    }
 
   /* Sort (prioritize) features. */
   if (vec_len (new_features) > 1)