summaryrefslogtreecommitdiffstats
path: root/src/vnet/classify
diff options
context:
space:
mode:
Diffstat (limited to 'src/vnet/classify')
-rw-r--r--src/vnet/classify/classify.api5
-rw-r--r--src/vnet/classify/vnet_classify.c10
-rw-r--r--src/vnet/classify/vnet_classify.h1
3 files changed, 15 insertions, 1 deletions
diff --git a/src/vnet/classify/classify.api b/src/vnet/classify/classify.api
index de9de773858..9d666ee35a5 100644
--- a/src/vnet/classify/classify.api
+++ b/src/vnet/classify/classify.api
@@ -90,8 +90,13 @@ define classify_add_del_table_reply
2: Classified IP packets will be looked up from the
specified ipv6 fib table (configured by metadata as VRF id).
Only valid for L3 input ACL node
+ 3: Classified packet will be steered to source routig policy
+ of given index (in metadata).
+ This is only valid for IPv6 packets redirected to a source
+ routing node.
@param metadata - valid only if action != 0
VRF id if action is 1 or 2.
+ sr policy index if action is 3.
@param match[] - for add, match value for session, required
*/
autoreply define classify_add_del_session
diff --git a/src/vnet/classify/vnet_classify.c b/src/vnet/classify/vnet_classify.c
index f2fe23b3231..d634550bafd 100644
--- a/src/vnet/classify/vnet_classify.c
+++ b/src/vnet/classify/vnet_classify.c
@@ -373,6 +373,8 @@ vnet_classify_entry_claim_resource (vnet_classify_entry_t *e)
case CLASSIFY_ACTION_SET_IP6_FIB_INDEX:
fib_table_lock (e->metadata, FIB_PROTOCOL_IP6, FIB_SOURCE_CLASSIFY);
break;
+ case CLASSIFY_ACTION_SET_SR_POLICY_INDEX:
+ break;
}
}
@@ -387,6 +389,8 @@ vnet_classify_entry_release_resource (vnet_classify_entry_t *e)
case CLASSIFY_ACTION_SET_IP6_FIB_INDEX:
fib_table_unlock (e->metadata, FIB_PROTOCOL_IP6, FIB_SOURCE_CLASSIFY);
break;
+ case CLASSIFY_ACTION_SET_SR_POLICY_INDEX:
+ break;
}
}
@@ -2104,6 +2108,8 @@ int vnet_classify_add_del_session (vnet_classify_main_t * cm,
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;
@@ -2172,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 */
@@ -2217,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,
};
diff --git a/src/vnet/classify/vnet_classify.h b/src/vnet/classify/vnet_classify.h
index 1eb5b14d024..c4a5a61364c 100644
--- a/src/vnet/classify/vnet_classify.h
+++ b/src/vnet/classify/vnet_classify.h
@@ -66,6 +66,7 @@ typedef enum vnet_classify_action_t_
{
CLASSIFY_ACTION_SET_IP4_FIB_INDEX = 1,
CLASSIFY_ACTION_SET_IP6_FIB_INDEX = 2,
+ CLASSIFY_ACTION_SET_SR_POLICY_INDEX = 3,
} __attribute__ ((packed)) vnet_classify_action_t;
struct _vnet_classify_main;