aboutsummaryrefslogtreecommitdiffstats
path: root/src/vnet/flow/flow_types.api
diff options
context:
space:
mode:
authorChenmin Sun <chenmin.sun@intel.com>2020-07-27 17:54:40 +0800
committerDamjan Marion <dmarion@me.com>2020-08-25 12:13:43 +0000
commitd0236f725d31e5e5d23e5f207b1a317fcd96a964 (patch)
tree9ff39dfeb54be6cc17899c999bb6a210a2585060 /src/vnet/flow/flow_types.api
parent4fa3aad33fffadec7b7614dc68c8f1d3d9f311c9 (diff)
flow: add vnet/flow formal API
This patch adds the API for vnet/flow infra. Currently this API supports the below flow types: VNET_FLOW_TYPE_IP4_N_TUPLE VNET_FLOW_TYPE_IP6_N_TUPLE VNET_FLOW_TYPE_IP4_N_TUPLE_TAGGED VNET_FLOW_TYPE_IP6_N_TUPLE_TAGGED VNET_FLOW_TYPE_IP4_L2TPV3OIP VNET_FLOW_TYPE_IP4_IPSEC_ESP VNET_FLOW_TYPE_IP4_IPSEC_AH VNET_FLOW_TYPE_IP4_GTPU All the above flows are tested with Intel E810/X710 NIC Type: feature Signed-off-by: Chenmin Sun <chenmin.sun@intel.com> Change-Id: Icb8ae20cab9bdad6b120dddc3bd4fb1d85634f3f
Diffstat (limited to 'src/vnet/flow/flow_types.api')
-rw-r--r--src/vnet/flow/flow_types.api218
1 files changed, 218 insertions, 0 deletions
diff --git a/src/vnet/flow/flow_types.api b/src/vnet/flow/flow_types.api
new file mode 100644
index 00000000000..d872d6eb264
--- /dev/null
+++ b/src/vnet/flow/flow_types.api
@@ -0,0 +1,218 @@
+/* Hey Emacs use -*- mode: C -*- */
+/*
+ * Copyright (c) 2020 Intel and/or its affiliates.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+option version = "0.0.1";
+import "vnet/ethernet/ethernet_types.api";
+import "vnet/ip/ip_types.api";
+
+enum flow_type
+{
+ FLOW_TYPE_ETHERNET = 1,
+ FLOW_TYPE_IP4_N_TUPLE,
+ FLOW_TYPE_IP6_N_TUPLE,
+ FLOW_TYPE_IP4_N_TUPLE_TAGGED,
+ FLOW_TYPE_IP6_N_TUPLE_TAGGED,
+ FLOW_TYPE_IP4_L2TPV3OIP,
+ FLOW_TYPE_IP4_IPSEC_ESP,
+ FLOW_TYPE_IP4_IPSEC_AH,
+ FLOW_TYPE_IP4_VXLAN,
+ FLOW_TYPE_IP6_VXLAN,
+ FLOW_TYPE_IP4_GTPC,
+ FLOW_TYPE_IP4_GTPU,
+};
+
+enum flow_action
+{
+ FLOW_ACTION_COUNT = 1,
+ FLOW_ACTION_MARK = 2,
+ FLOW_ACTION_BUFFER_ADVANCE = 4,
+ FLOW_ACTION_REDIRECT_TO_NODE = 8,
+ FLOW_ACTION_REDIRECT_TO_QUEUE = 16,
+ FLOW_ACTION_DROP = 64,
+};
+
+typedef ip_port_and_mask
+{
+ u16 port;
+ u16 mask;
+};
+
+typedef flow_ethernet
+{
+ i32 foo;
+ vl_api_mac_address_t src_addr;
+ vl_api_mac_address_t dst_addr;
+ u16 type;
+};
+
+typedef flow_ip4_n_tuple
+{
+ i32 foo;
+ vl_api_ip4_address_and_mask_t src_addr;
+ vl_api_ip4_address_and_mask_t dst_addr;
+ vl_api_ip_port_and_mask_t src_port;
+ vl_api_ip_port_and_mask_t dst_port;
+ vl_api_ip_proto_t protocol;
+};
+
+typedef flow_ip6_n_tuple
+{
+ i32 foo;
+ vl_api_ip6_address_and_mask_t src_addr;
+ vl_api_ip6_address_and_mask_t dst_addr;
+ vl_api_ip_port_and_mask_t src_port;
+ vl_api_ip_port_and_mask_t dst_port;
+ vl_api_ip_proto_t protocol;
+};
+
+typedef flow_ip4_n_tuple_tagged
+{
+ i32 foo;
+ vl_api_ip4_address_and_mask_t src_addr;
+ vl_api_ip4_address_and_mask_t dst_addr;
+ vl_api_ip_port_and_mask_t src_port;
+ vl_api_ip_port_and_mask_t dst_port;
+ vl_api_ip_proto_t protocol;
+};
+
+typedef flow_ip6_n_tuple_tagged
+{
+ i32 foo;
+ vl_api_ip6_address_and_mask_t src_addr;
+ vl_api_ip6_address_and_mask_t dst_addr;
+ vl_api_ip_port_and_mask_t src_port;
+ vl_api_ip_port_and_mask_t dst_port;
+ vl_api_ip_proto_t protocol;
+};
+
+typedef flow_ip4_l2tpv3oip
+{
+ i32 foo;
+ vl_api_ip4_address_and_mask_t src_addr;
+ vl_api_ip4_address_and_mask_t dst_addr;
+ vl_api_ip_port_and_mask_t src_port;
+ vl_api_ip_port_and_mask_t dst_port;
+ vl_api_ip_proto_t protocol;
+ u32 session_id;
+};
+
+typedef flow_ip4_ipsec_esp
+{
+ i32 foo;
+ vl_api_ip4_address_and_mask_t src_addr;
+ vl_api_ip4_address_and_mask_t dst_addr;
+ vl_api_ip_port_and_mask_t src_port;
+ vl_api_ip_port_and_mask_t dst_port;
+ vl_api_ip_proto_t protocol;
+ u32 spi;
+};
+
+typedef flow_ip4_ipsec_ah
+{
+ i32 foo;
+ vl_api_ip4_address_and_mask_t src_addr;
+ vl_api_ip4_address_and_mask_t dst_addr;
+ vl_api_ip_port_and_mask_t src_port;
+ vl_api_ip_port_and_mask_t dst_port;
+ vl_api_ip_proto_t protocol;
+ u32 spi;
+};
+
+typedef flow_ip4_vxlan
+{
+ i32 foo;
+ vl_api_ip4_address_t src_addr;
+ vl_api_ip4_address_t dst_addr;
+ u16 dst_port;
+ u16 vni;
+};
+
+typedef flow_ip6_vxlan
+{
+ i32 foo;
+ vl_api_ip6_address_t src_addr;
+ vl_api_ip6_address_t dst_addr;
+ u16 dst_port;
+ u16 vni;
+};
+
+typedef flow_ip4_gtpc
+{
+ i32 foo;
+ vl_api_ip4_address_and_mask_t src_addr;
+ vl_api_ip4_address_and_mask_t dst_addr;
+ vl_api_ip_port_and_mask_t src_port;
+ vl_api_ip_port_and_mask_t dst_port;
+ vl_api_ip_proto_t protocol;
+ u32 teid;
+};
+
+typedef flow_ip4_gtpu
+{
+ i32 foo;
+ vl_api_ip4_address_and_mask_t src_addr;
+ vl_api_ip4_address_and_mask_t dst_addr;
+ vl_api_ip_port_and_mask_t src_port;
+ vl_api_ip_port_and_mask_t dst_port;
+ vl_api_ip_proto_t protocol;
+ u32 teid;
+};
+
+union flow
+{
+ vl_api_flow_ethernet_t ethernet;
+ vl_api_flow_ip4_n_tuple_t ip4_n_tuple;
+ vl_api_flow_ip6_n_tuple_t ip6_n_tuple;
+ vl_api_flow_ip4_n_tuple_tagged_t ip4_n_tuple_tagged;
+ vl_api_flow_ip6_n_tuple_tagged_t ip6_n_tuple_tagged;
+ vl_api_flow_ip4_l2tpv3oip_t ip4_l2tpv3oip;
+ vl_api_flow_ip4_ipsec_esp_t ip4_ipsec_esp;
+ vl_api_flow_ip4_ipsec_ah_t ip4_ipsec_ah;
+ vl_api_flow_ip4_vxlan_t ip4_vxlan;
+ vl_api_flow_ip6_vxlan_t ip6_vxlan;
+ vl_api_flow_ip4_gtpc_t ip4_gtpc;
+ vl_api_flow_ip4_gtpu_t ip4_gtpu;
+};
+
+/* main flow struct */
+typedef flow_rule
+{
+ /* flow type */
+ vl_api_flow_type_t type;
+
+ /* flow index */
+ u32 index;
+
+ /* bitmap of flow actions (FLOW_ACTION_*) */
+ vl_api_flow_action_t actions;
+
+ /* flow id for VNET_FLOW_ACTION_MARK */
+ u32 mark_flow_id;
+
+ /* node index and next index for FLOW_ACTION_REDIRECT_TO_NODE */
+ u32 redirect_node_index;
+ u32 redirect_device_input_next_index;
+
+ /* queue for FLOW_ACTION_REDIRECT_TO_QUEUE */
+ u32 redirect_queue;
+
+ /* buffer offset for FLOW_ACTION_BUFFER_ADVANCE */
+ i32 buffer_advance;
+
+ /* flow enum */
+ vl_api_flow_t flow;
+};
+