/* Hey Emacs use -*- mode: C -*- */ /* * Copyright (c) 2023 Cisco 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. */ /** \file This file defines the vpp control-plane API messages used to control the ABF plugin */ option version = "0.3.0"; import "vnet/ip/ip_types.api"; import "vnet/fib/fib_types.api"; import "vnet/interface_types.api"; import "vnet/ip/ip.api"; enum cnat_translation_flags:u8 { CNAT_TRANSLATION_ALLOC_PORT = 1, CNAT_TRANSLATION_NO_RETURN_SESSION = 4, }; enum cnat_endpoint_tuple_flags:u8 { /* Dont translate said endpoint tuple but * still forward */ CNAT_EPT_NO_NAT = 1, }; enum cnat_lb_type:u8 { CNAT_LB_TYPE_DEFAULT = 0, CNAT_LB_TYPE_MAGLEV = 1, }; /* An enpoint is either * An IP & a port * An interface, an address familiy and a port */ typedef cnat_endpoint { vl_api_address_t addr; vl_api_interface_index_t sw_if_index; vl_api_address_family_t if_af; u16 port; }; typedef cnat_endpoint_tuple { vl_api_cnat_endpoint_t dst_ep; vl_api_cnat_endpoint_t src_ep; u8 flags; }; typedef cnat_translation { vl_api_cnat_endpoint_t vip; u32 id; vl_api_ip_proto_t ip_proto; u8 is_real_ip; u8 flags; vl_api_cnat_lb_type_t lb_type; u32 n_paths; vl_api_ip_flow_hash_config_v2_t flow_hash_config; vl_api_cnat_endpoint_tuple_t paths[n_paths]; }; define cnat_translation_update { u32 client_index; u32 context; vl_api_cnat_translation_t translation; }; define cnat_translation_update_reply { u32 context; i32 retval; u32 id; }; autoreply define cnat_translation_del { u32 client_index; u32 context; u32 id; }; define cnat_translation_details { u32 context; vl_api_cnat_translation_t translation; }; define cnat_translation_dump { u32 client_index; u32 context; }; autoreply define cnat_session_purge { u32 client_index; u32 context; }; typedef cnat_session { vl_api_cnat_endpoint_t src; vl_api_cnat_endpoint_t dst; vl_api_cnat_endpoint_t new; vl_api_ip_proto_t ip_proto; u8 location; f64 timestamp; }; define cnat_session_details { u32 context; vl_api_cnat_session_t session; }; define cnat_session_dump { u32 client_index; u32 context; }; autoreply define cnat_set_snat_addresses { u32 client_index; u32 context; vl_api_ip4_address_t snat_ip4; vl_api_ip6_address_t snat_ip6; vl_api_interface_index_t sw_if_index; }; define cnat_get_snat_addresses { u32 client_index; u32 context; }; define cnat_get_snat_addresses_reply { u32 context; i32 retval; u32 id; vl_api_ip4_address_t snat_ip4; vl_api_ip6_address_t snat_ip6; vl_api_interface_index_t sw_if_index; }; autoreply define cnat_snat_policy_add_del_exclude_pfx { u32 client_index; u32 context; u8 is_add; vl_api_prefix_t prefix; }; enum cnat_snat_policy_table:u8 { CNAT_POLICY_INCLUDE_V4 = 0, CNAT_POLICY_INCLUDE_V6 = 1, CNAT_POLICY_POD = 2, CNAT_POLICY_HOST = 3, }; autoreply define cnat_snat_policy_add_del_if { u32 client_index; u32 context; vl_api_interface_index_t sw_if_index; u8 is_add; vl_api_cnat_snat_policy_table_t table; }; /* A snat policy controls what traffic is srcNATed */ enum cnat_snat_policies:u8 { /* No filter applied, srcNAT everything */ CNAT_POLICY_NONE = 0, /* Filter by interface list : snat_policy_add_del_if * and prefix list : snat_policy_add_del_if */ CNAT_POLICY_IF_PFX = 1, /* Kubernetes specific policy */ CNAT_POLICY_K8S = 2, }; autoreply define cnat_set_snat_policy { u32 client_index; u32 context; vl_api_cnat_snat_policies_t policy; }; /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */