From d0236f725d31e5e5d23e5f207b1a317fcd96a964 Mon Sep 17 00:00:00 2001 From: Chenmin Sun Date: Mon, 27 Jul 2020 17:54:40 +0800 Subject: 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 Change-Id: Icb8ae20cab9bdad6b120dddc3bd4fb1d85634f3f --- src/vnet/flow/flow_types.api | 218 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 218 insertions(+) create mode 100644 src/vnet/flow/flow_types.api (limited to 'src/vnet/flow/flow_types.api') 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; +}; + -- cgit 1.2.3-korg