add classify session action set-sr-policy-index
[vpp.git] / src / vnet / classify / vnet_classify.c
index 99b10dc..d634550 100644 (file)
@@ -368,10 +368,12 @@ vnet_classify_entry_claim_resource (vnet_classify_entry_t *e)
     switch (e->action)
     {
     case CLASSIFY_ACTION_SET_IP4_FIB_INDEX:
-        fib_table_lock (e->metadata, FIB_PROTOCOL_IP4);
+        fib_table_lock (e->metadata, FIB_PROTOCOL_IP4, FIB_SOURCE_CLASSIFY);
         break;
     case CLASSIFY_ACTION_SET_IP6_FIB_INDEX:
-        fib_table_lock (e->metadata, FIB_PROTOCOL_IP6);
+        fib_table_lock (e->metadata, FIB_PROTOCOL_IP6, FIB_SOURCE_CLASSIFY);
+        break;
+    case CLASSIFY_ACTION_SET_SR_POLICY_INDEX:
         break;
     }
 }
@@ -382,10 +384,12 @@ vnet_classify_entry_release_resource (vnet_classify_entry_t *e)
     switch (e->action)
     {
     case CLASSIFY_ACTION_SET_IP4_FIB_INDEX:
-        fib_table_unlock (e->metadata, FIB_PROTOCOL_IP4);
+        fib_table_unlock (e->metadata, FIB_PROTOCOL_IP4, FIB_SOURCE_CLASSIFY);
         break;
     case CLASSIFY_ACTION_SET_IP6_FIB_INDEX:
-        fib_table_unlock (e->metadata, FIB_PROTOCOL_IP6);
+        fib_table_unlock (e->metadata, FIB_PROTOCOL_IP6, FIB_SOURCE_CLASSIFY);
+        break;
+    case CLASSIFY_ACTION_SET_SR_POLICY_INDEX:
         break;
     }
 }
@@ -405,7 +409,7 @@ int vnet_classify_add_del (vnet_classify_table_t * t,
   u32 old_log2_pages, new_log2_pages;
   u32 thread_index = vlib_get_thread_index();
   u8 * key_minus_skip;
-  int resplit_once;
+  int resplit_once = 0;
   int mark_bucket_linear;
 
   ASSERT ((add_v->flags & VNET_CLASSIFY_ENTRY_FREE) == 0);
@@ -1546,6 +1550,7 @@ VLIB_CLI_COMMAND (classify_table, static) = {
   "classify table [miss-next|l2-miss_next|acl-miss-next <next_index>]"
   "\n mask <mask-value> buckets <nn> [skip <n>] [match <n>]"
   "\n [current-data-flag <n>] [current-data-offset <n>] [table <n>]"
+  "\n [memory-size <nn>[M][G]] [next-table <n>]"
   "\n [del] [del-chain]",
   .function = classify_table_command_fn,
 };
@@ -2096,9 +2101,15 @@ int vnet_classify_add_del_session (vnet_classify_main_t * cm,
   e->flags = 0;
   e->action = action;
   if (e->action == CLASSIFY_ACTION_SET_IP4_FIB_INDEX)
-    e->metadata = fib_table_find_or_create_and_lock (FIB_PROTOCOL_IP4, metadata);
+    e->metadata = fib_table_find_or_create_and_lock (FIB_PROTOCOL_IP4,
+                                                     metadata,
+                                                     FIB_SOURCE_CLASSIFY);
   else if (e->action == CLASSIFY_ACTION_SET_IP6_FIB_INDEX)
-    e->metadata = fib_table_find_or_create_and_lock (FIB_PROTOCOL_IP6, metadata);
+    e->metadata = fib_table_find_or_create_and_lock (FIB_PROTOCOL_IP6,
+                                                     metadata,
+                                                     FIB_SOURCE_CLASSIFY);
+  else if (e->action == CLASSIFY_ACTION_SET_SR_POLICY_INDEX)
+    e->metadata = metadata;
   else
     e->metadata = 0;
 
@@ -2167,6 +2178,8 @@ classify_session_command_fn (vlib_main_t * vm,
         action = 1;
       else if (unformat (input, "action set-ip6-fib-id %d", &metadata))
         action = 2;
+      else if (unformat (input, "action set-sr-policy-index %d", &metadata))
+        action = 3;
       else
         {
           /* Try registered opaque-index unformat fns */
@@ -2212,7 +2225,7 @@ VLIB_CLI_COMMAND (classify_session_command, static) = {
     "classify session [hit-next|l2-hit-next|"
     "acl-hit-next <next_index>|policer-hit-next <policer_name>]"
     "\n table-index <nn> match [hex] [l2] [l3 ip4] [opaque-index <index>]"
-    "\n [action set-ip4-fib-id <n>] [action set-ip6-fib-id <n>] [del]",
+    "\n [action set-ip4-fib-id|set-ip6-fib-id|set-sr-policy-index <n>] [del]",
     .function = classify_session_command_fn,
 };