25 #include <nat/nat44-ei/nat44_ei.api_enum.h> 26 #include <nat/nat44-ei/nat44_ei.api_types.h> 31 #define REPLY_MSG_ID_BASE nm->msg_id_base 44 VL_API_NAT44_EI_SHOW_RUNNING_CONFIG_REPLY, ({
76 vl_api_nat44_ei_set_workers_reply_t *rmp;
85 rv = VNET_API_ERROR_FEATURE_DISABLED;
138 vl_api_nat44_ei_set_log_level_reply_t *rmp;
142 rv = VNET_API_ERROR_UNSUPPORTED;
155 vl_api_nat44_ei_plugin_enable_disable_reply_t *rmp;
178 REPLY_MACRO (VL_API_NAT44_EI_PLUGIN_ENABLE_DISABLE_REPLY);
186 vl_api_nat44_ei_ipfix_enable_disable_reply_t *rmp;
191 clib_host_to_net_u16 (mp->
src_port));
193 REPLY_MACRO (VL_API_NAT44_EI_IPFIX_ENABLE_DISABLE_REPLY);
200 vl_api_nat44_ei_set_timeouts_reply_t *rmp;
216 vl_api_nat44_ei_set_addr_and_port_alloc_alg_reply_t *rmp;
218 u16 port_start, port_end;
222 case NAT44_EI_ADDR_AND_PORT_ALLOC_ALG_DEFAULT:
225 case NAT44_EI_ADDR_AND_PORT_ALLOC_ALG_MAPE:
229 case NAT44_EI_ADDR_AND_PORT_ALLOC_ALG_RANGE:
232 if (port_end <= port_start)
234 rv = VNET_API_ERROR_INVALID_VALUE;
240 rv = VNET_API_ERROR_INVALID_VALUE;
245 REPLY_MACRO (VL_API_NAT44_EI_SET_ADDR_AND_PORT_ALLOC_ALG_REPLY);
256 REPLY_MACRO2 (VL_API_NAT44_EI_GET_ADDR_AND_PORT_ALLOC_ALG_REPLY, ({
271 vl_api_nat44_ei_set_mss_clamping_reply_t *rmp;
279 REPLY_MACRO (VL_API_NAT44_EI_SET_MSS_CLAMPING_REPLY);
290 REPLY_MACRO2 (VL_API_NAT44_EI_GET_MSS_CLAMPING_REPLY, ({
301 vl_api_nat44_ei_ha_set_listener_reply_t *rmp;
305 memcpy (&addr, &mp->
ip_address, sizeof (addr));
307 clib_net_to_host_u16 (mp->
port),
308 clib_net_to_host_u32 (mp->
path_mtu));
310 REPLY_MACRO (VL_API_NAT44_EI_HA_SET_LISTENER_REPLY);
328 rmp->
port = clib_host_to_net_u16 (port);
329 rmp->
path_mtu = clib_host_to_net_u32 (path_mtu);
338 vl_api_nat44_ei_ha_set_failover_reply_t *rmp;
342 memcpy (&addr, &mp->
ip_address, sizeof (addr));
347 REPLY_MACRO (VL_API_NAT44_EI_HA_SET_FAILOVER_REPLY);
359 u32 session_refresh_interval;
365 rmp->
port = clib_host_to_net_u16 (port);
367 clib_host_to_net_u32 (session_refresh_interval);
375 vl_api_nat44_ei_ha_flush_reply_t *rmp;
409 vl_api_nat44_ei_ha_resync_reply_t *rmp;
423 vl_api_nat44_ei_del_user_reply_t *rmp;
436 vl_api_nat44_ei_add_del_address_range_reply_t *rmp;
439 u32 start_host_order, end_host_order;
447 rv = VNET_API_ERROR_FEATURE_DISABLED;
454 start_host_order = clib_host_to_net_u32 (tmp[0]);
456 end_host_order = clib_host_to_net_u32 (tmp[0]);
458 count = (end_host_order - start_host_order) + 1;
460 vrf_id = clib_host_to_net_u32 (mp->
vrf_id);
469 for (i = 0; i <
count; i++)
486 REPLY_MACRO (VL_API_NAT44_EI_ADD_DEL_ADDRESS_RANGE_REPLY);
498 rmp->_vl_msg_id =
ntohs (VL_API_NAT44_EI_ADDRESS_DETAILS + nm->
msg_id_base);
534 vl_api_nat44_ei_interface_add_del_feature_reply_t *rmp;
548 REPLY_MACRO (VL_API_NAT44_EI_INTERFACE_ADD_DEL_FEATURE_REPLY);
596 vl_api_nat44_ei_interface_add_del_output_feature_reply_t *rmp;
606 REPLY_MACRO (VL_API_NAT44_EI_INTERFACE_ADD_DEL_OUTPUT_FEATURE_REPLY);
653 vl_api_nat44_ei_add_del_static_mapping_reply_t *rmp;
655 u16 local_port = 0, external_port = 0;
670 vrf_id = clib_net_to_host_u32 (mp->
vrf_id);
674 mp->
tag[
sizeof (mp->
tag) - 1] = 0;
679 local_addr, external_addr, local_port, external_port, proto,
685 REPLY_MACRO (VL_API_NAT44_EI_ADD_DEL_STATIC_MAPPING_REPLY);
790 vl_api_nat44_ei_add_del_identity_mapping_reply_t *rmp;
803 vrf_id = clib_net_to_host_u32 (mp->
vrf_id);
804 sw_if_index = clib_net_to_host_u32 (mp->
sw_if_index);
805 if (sw_if_index != ~0)
809 mp->
tag[
sizeof (mp->
tag) - 1] = 0;
814 addr, addr, port, port, proto, sw_if_index, vrf_id,
819 REPLY_MACRO (VL_API_NAT44_EI_ADD_DEL_IDENTITY_MAPPING_REPLY);
915 vl_api_nat44_ei_add_del_interface_addr_reply_t *rmp;
927 REPLY_MACRO (VL_API_NAT44_EI_ADD_DEL_INTERFACE_ADDR_REPLY);
1027 rmp->
last_heard = clib_host_to_net_u64 ((
u64) s->last_heard);
1028 rmp->
total_bytes = clib_host_to_net_u64 (s->total_bytes);
1053 nat44_ei_session_t *s;
1057 u32 session_index, head_index, elt_index;
1076 if (clib_bihash_search_8_8 (&tnm->
user_hash, &key, &value))
1079 if (!u->nsessions && !u->nstaticsessions)
1082 head_index = u->sessions_per_user_list_head_index;
1084 elt_index = head->
next;
1086 session_index = elt->
value;
1087 while (session_index != ~0)
1093 elt_index = elt->
next;
1095 session_index = elt->
value;
1103 vl_api_nat44_ei_del_session_reply_t *rmp;
1113 vrf_id = clib_net_to_host_u32 (mp->
vrf_id);
1130 vl_api_nat44_ei_forwarding_enable_disable_reply_t *rmp;
1132 u32 *ses_to_be_removed = 0, *ses_index;
1134 nat44_ei_session_t *s;
1153 REPLY_MACRO (VL_API_NAT44_EI_FORWARDING_ENABLE_DISABLE_REPLY);
1160 vl_api_nat44_ei_set_fq_options_reply_t *rmp;
1164 REPLY_MACRO (VL_API_NAT44_EI_SET_FQ_OPTIONS_REPLY);
1184 #include <nat/nat44-ei/nat44_ei.api.c>
vl_api_ip4_address_t address
static void send_nat44_ei_static_mapping_details(nat44_ei_static_mapping_t *m, vl_api_registration_t *reg, u32 context)
static void send_nat44_ei_address_details(nat44_ei_address_t *a, vl_api_registration_t *reg, u32 context)
static void vl_api_nat44_ei_del_user_t_handler(vl_api_nat44_ei_del_user_t *mp)
int nat44_ei_add_interface_address(nat44_ei_main_t *nm, u32 sw_if_index, int is_del)
int nat_ha_set_failover(vlib_main_t *vm, ip4_address_t *addr, u16 port, u32 session_refresh_interval)
Set HA failover (remote settings)
vl_api_interface_index_t external_sw_if_index
#define pool_foreach_index(i, v)
static void vl_api_nat44_ei_forwarding_enable_disable_t_handler(vl_api_nat44_ei_forwarding_enable_disable_t *mp)
vl_api_nat44_ei_config_flags_t flags
bool ipfix_logging_enabled
static void vl_api_nat44_ei_add_del_static_mapping_t_handler(vl_api_nat44_ei_add_del_static_mapping_t *mp)
static void vl_api_nat44_ei_add_del_interface_addr_t_handler(vl_api_nat44_ei_add_del_interface_addr_t *mp)
static void vl_api_nat44_ei_interface_dump_t_handler(vl_api_nat44_ei_interface_dump_t *mp)
nat44_ei_config_t rconfig
nat44_ei_interface_t * interfaces
vl_api_ip4_address_t ip_address
#define pool_foreach(VAR, POOL)
Iterate through pool.
NAT44 interface with output feature details response.
vl_api_interface_index_t sw_if_index
vl_api_nat44_ei_config_flags_t flags
nat44_ei_lb_addr_port_t * locals
static void vl_api_nat44_ei_set_log_level_t_handler(vl_api_nat44_ei_set_log_level_t *mp)
#define REPLY_MACRO2(t, body)
clib_memset(h->entries, 0, sizeof(h->entries[0]) *entries)
int nat44_ei_add_del_static_mapping(ip4_address_t l_addr, ip4_address_t e_addr, u16 l_port, u16 e_port, nat_protocol_t proto, u32 sw_if_index, u32 vrf_id, u8 addr_only, u8 identity_nat, u8 *tag, u8 is_add)
Add/delete NAT44-EI static mapping.
static void vl_api_nat44_ei_plugin_enable_disable_t_handler(vl_api_nat44_ei_plugin_enable_disable_t *mp)
Set values of timeouts for NAT sessions (seconds)
static void vl_api_send_msg(vl_api_registration_t *rp, u8 *elem)
#define vec_terminate_c_string(V)
(If necessary) NULL terminate a vector containing a c-string.
Show NAT handoff frame queue options reply.
NAT44 endpoint independent plugin declarations.
nat44_ei_session_t * sessions
vl_api_ip4_address_t external_ip_address
vl_api_nat44_ei_config_flags_t flags
int nat44_ei_plugin_disable()
NAT44 address details response.
#define REPLY_MACRO2_ZERO(t, body)
Dump NAT44 static mappings.
int nat_ipfix_logging_enable_disable(int enable, u32 domain_id, u16 src_port)
Enable/disable NAT plugin IPFIX logging.
void * vl_msg_api_alloc(int nbytes)
NAT44 interface details response.
static void send_nat44_ei_interface_addr_details(u32 sw_if_index, vl_api_registration_t *reg, u32 context)
int nat44_ei_user_del(ip4_address_t *addr, u32 fib_index)
Delete specific NAT44 EI user and his sessions.
Get address and port assignment algorithm.
#define nat44_ei_is_addr_only_static_mapping(mp)
int nat44_ei_interface_add_del(u32 sw_if_index, u8 is_inside, int is_del)
int nat_ha_set_listener(vlib_main_t *vm, ip4_address_t *addr, u16 port, u32 path_mtu)
Set HA listener (local settings)
nat44_ei_static_mapping_t * static_mappings
vl_api_ip4_address_t ext_host_address
static void vl_api_nat44_ei_user_dump_t_handler(vl_api_nat44_ei_user_dump_t *mp)
static void send_nat44_ei_user_details(nat44_ei_user_t *u, vl_api_registration_t *reg, u32 context)
#define clib_memcpy(d, s, n)
Get TCP MSS rewriting configuration.
vl_api_ip4_address_t ip_address
void nat44_ei_free_session_data(nat44_ei_main_t *nm, nat44_ei_session_t *s, u32 thread_index, u8 is_ha)
vl_api_ip4_address_t first_ip_address
static void vl_api_nat44_ei_get_mss_clamping_t_handler(vl_api_nat44_ei_get_mss_clamping_t *mp)
static void vl_api_nat44_ei_identity_mapping_dump_t_handler(vl_api_nat44_ei_identity_mapping_dump_t *mp)
void nat44_ei_set_alloc_range(u16 start_port, u16 end_port)
Set address and port assignment algorithm for port range.
Set TCP MSS rewriting configuration.
static void send_nat44_ei_static_map_resolve_details(nat44_ei_static_map_resolve_t *m, vl_api_registration_t *reg, u32 context)
u32 nat44_ei_get_in2out_worker_index(ip4_header_t *ip0, u32 rx_fib_index0, u8 is_output)
static void vl_api_nat44_ei_static_mapping_dump_t_handler(vl_api_nat44_ei_static_mapping_dump_t *mp)
int nat44_ei_set_workers(uword *bitmap)
u32 session_refresh_interval
vl_api_ip4_address_t external_ip_address
Add/delete NAT44 identity mapping.
Set HA failover (remote settings)
nat44_ei_main_per_thread_data_t * tnm
vl_api_nat44_ei_config_flags_t flags
static nat_protocol_t ip_proto_to_nat_proto(u8 ip_proto)
Common NAT inline functions.
nat44_ei_address_t * addresses
vl_api_nat44_ei_config_flags_t flags
Show NAT44 plugin running config.
static void vl_api_nat44_ei_ha_set_listener_t_handler(vl_api_nat44_ei_ha_set_listener_t *mp)
Dump interfaces with NAT44 output feature.
static void vl_api_nat44_ei_ha_set_failover_t_handler(vl_api_nat44_ei_ha_set_failover_t *mp)
description fragment has unexpected format
static void vl_api_nat44_ei_interface_addr_dump_t_handler(vl_api_nat44_ei_interface_addr_dump_t *mp)
vl_api_ip4_address_t ip_address
vl_api_nat44_ei_config_flags_t flags
#define vec_elt_at_index(v, i)
Get vector value at index i checking that i is in bounds.
static void vl_api_nat44_ei_ha_resync_t_handler(vl_api_nat44_ei_ha_resync_t *mp)
static void send_nat44_ei_interface_output_feature_details(nat44_ei_interface_t *i, vl_api_registration_t *reg, u32 context)
int nat44_ei_del_session(nat44_ei_main_t *nm, ip4_address_t *addr, u16 port, nat_protocol_t proto, u32 vrf_id, int is_in)
Delete NAT44-EI session.
static void send_nat44_ei_interface_details(nat44_ei_interface_t *i, vl_api_registration_t *reg, u32 context)
static_always_inline u8 nat_proto_to_ip_proto(nat_protocol_t nat_proto)
Enable/disable NAT44 feature on the interface.
u32 fib_table_find(fib_protocol_t proto, u32 table_id)
Get the index of the FIB for a Table-ID.
#define nat44_ei_is_session_static(sp)
int nat44_ei_del_address(nat44_ei_main_t *nm, ip4_address_t addr, u8 delete_sm)
int nat44_ei_add_address(nat44_ei_main_t *nm, ip4_address_t *addr, u32 vrf_id)
Enable/disable NAT44 plugin.
vl_api_nat_log_level_t log_level
static void vl_api_nat44_ei_interface_add_del_output_feature_t_handler(vl_api_nat44_ei_interface_add_del_output_feature_t *mp)
vlib_worker_thread_t * vlib_worker_threads
#define pool_elt_at_index(p, i)
Returns pointer to element at given index.
vl_api_interface_index_t sw_if_index
nat44_ei_static_map_resolve_t * to_resolve
static void vl_api_nat44_ei_add_del_address_range_t_handler(vl_api_nat44_ei_add_del_address_range_t *mp)
static void vl_api_nat44_ei_interface_output_feature_dump_t_handler(vl_api_nat44_ei_interface_output_feature_dump_t *mp)
vl_api_interface_index_t sw_if_index
static void nat_ha_resync_completed_event_cb(u32 client_index, u32 pid, u32 missed_count)
NAT workers details response.
nat44_ei_interface_t * output_feature_interfaces
static void send_nat44_ei_user_session_details(nat44_ei_session_t *s, vl_api_registration_t *reg, u32 context)
Add/delete NAT44 pool address from specific interfce.
int nat44_ei_interface_add_del_output_feature(u32 sw_if_index, u8 is_inside, int is_del)
int nat_ipfix_logging_enabled()
static void vl_api_nat44_ei_set_fq_options_t_handler(vl_api_nat44_ei_set_fq_options_t *mp)
vl_api_ip4_address_t ip_address
Flush the current HA data (for testing)
vlib_main_t * vm
X-connect all packets from the HOST to the PHY.
Set HA listener (local settings)
vl_api_ip4_address_t ip_address
static void vl_api_nat44_ei_ha_get_listener_t_handler(vl_api_nat44_ei_ha_get_listener_t *mp)
u32 * auto_add_sw_if_indices
static void vl_api_nat44_ei_worker_dump_t_handler(vl_api_nat44_ei_worker_dump_t *mp)
An API client registration, only in vpp/vlib.
static void setup_message_id_table(api_main_t *am)
#define BAD_SW_IF_INDEX_LABEL
Tell client about a HA resync completion event.
void nat44_ei_set_alloc_default()
Set address and port assignment algorithm to default/standard.
vl_api_interface_index_t sw_if_index
Enable/disable NAT IPFIX logging.
struct nat_timeouts_t::@732 tcp
nat44_ei_main_per_thread_data_t * per_thread_data
int nat44_ei_plugin_enable(nat44_ei_config_t c)
u32 ft_table_id
Table ID (hash key) for this FIB.
NAT44 pool addresses interfaces details response.
static void vl_api_nat44_ei_add_del_identity_mapping_t_handler(vl_api_nat44_ei_add_del_identity_mapping_t *mp)
Enable/disable forwarding for NAT44 Forward packets which don't match existing translation or static ...
Enable/disbale NAT44 as an interface output feature (postrouting in2out translation) ...
sll srl srl sll sra u16x4 i
#define vec_free(V)
Free vector's memory (no header).
static void vl_api_nat44_ei_ipfix_enable_disable_t_handler(vl_api_nat44_ei_ipfix_enable_disable_t *mp)
static void send_nat44_ei_identity_mapping_details(nat44_ei_static_mapping_t *m, int index, vl_api_registration_t *reg, u32 context)
static void send_nat44_ei_identity_map_resolve_details(nat44_ei_static_map_resolve_t *m, vl_api_registration_t *reg, u32 context)
vnet_interface_main_t * im
Get TCP MSS rewriting configuration reply.
vl_api_ip4_address_t local_ip_address
vl_api_interface_index_t sw_if_index
static uword * clib_bitmap_set_multiple(uword *bitmap, uword i, uword value, uword n_bits)
sets the ith through ith + n_bits bits in a bitmap
#define pool_is_free_index(P, I)
Use free bitmap to query whether given index is free.
8 octet key, 8 octet key value pair
static vl_api_registration_t * vl_api_client_index_to_registration(u32 index)
Set address and port assignment algorithm.
#define nat44_ei_is_identity_static_mapping(mp)
static void vl_api_nat44_ei_set_addr_and_port_alloc_alg_t_handler(vl_api_nat44_ei_set_addr_and_port_alloc_alg_t *mp)
NAT44 static mapping details response.
static void send_nat_worker_details(u32 worker_index, vl_api_registration_t *reg, u32 context)
vl_api_ip4_address_t ip_address
Resync HA (resend existing sessions to new failover)
static void vl_api_nat44_ei_interface_add_del_feature_t_handler(vl_api_nat44_ei_interface_add_del_feature_t *mp)
vl_api_ip4_address_t ip_address
static void vl_api_nat44_ei_set_workers_t_handler(vl_api_nat44_ei_set_workers_t *mp)
static void vl_api_nat44_ei_set_mss_clamping_t_handler(vl_api_nat44_ei_set_mss_clamping_t *mp)
ip4_address_t external_addr
Get address and port assignment algorithm reply.
NAT44 user's sessions response.
void nat_ha_get_failover(ip4_address_t *addr, u16 *port, u32 *session_refresh_interval)
Get HA failover/remote settings.
Set NAT handoff frame queue options.
Get HA failover/remote settings reply.
int nat_ha_resync(u32 client_index, u32 pid, nat_ha_resync_event_cb_t event_callback)
Resync HA (resend existing sessions to new failover)
static void vl_api_nat44_ei_ha_flush_t_handler(vl_api_nat44_ei_ha_flush_t *mp)
#define clib_bitmap_free(v)
Free a bitmap.
vl_api_nat44_ei_config_flags_t flags
void nat44_ei_set_alloc_mape(u16 psid, u16 psid_offset, u16 psid_length)
Set address and port assignment algorithm for MAP-E CE.
void nat44_ei_add_del_address_dpo(ip4_address_t addr, u8 is_add)
vl_api_nat44_ei_config_flags_t flags
#define nat44_ei_log_info(...)
vl_api_nat_timeouts_t timeouts
static vlib_main_t * vlib_get_main(void)
void nat_ha_flush(u8 is_resync)
Flush the current HA data (for testing)
Dump NAT44 identity mappings.
static void vl_api_nat44_ei_ha_get_failover_t_handler(vl_api_nat44_ei_ha_get_failover_t *mp)
static void vl_api_nat44_ei_show_running_config_t_handler(vl_api_nat44_ei_show_running_config_t *mp)
void nat44_ei_delete_session(nat44_ei_main_t *nm, nat44_ei_session_t *ses, u32 thread_index)
NAT44 user's sessions.
vl_api_ip4_address_t ip_address
vl_api_ip4_address_t ip_address
vl_api_ip4_address_t local_ip_address
vl_api_nat44_ei_config_flags_t flags
u32 session_refresh_interval
static void vl_api_nat44_ei_show_fq_options_t_handler(vl_api_nat44_ei_show_fq_options_t *mp)
vl_api_ip4_address_t last_ip_address
Dump NAT44 pool addresses interfaces.
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
Get HA failover/remote settings.
#define nat44_ei_is_unk_proto_session(sp)
NAT44 identity mapping details response.
Get HA listener/local configuration reply.
Add/delete NAT44 static mapping.
nat44_ei_main_t nat44_ei_main
vl_api_ip4_address_t outside_ip_address
fib_table_t * fib_table_get(fib_node_index_t index, fib_protocol_t proto)
Get a pointer to a FIB table.
vl_api_interface_index_t sw_if_index
static void vl_api_nat44_ei_user_session_dump_t_handler(vl_api_nat44_ei_user_session_dump_t *mp)
Get HA listener/local configuration.
static void vl_api_nat44_ei_set_timeouts_t_handler(vl_api_nat44_ei_set_timeouts_t *mp)
static void vl_api_nat44_ei_address_dump_t_handler(vl_api_nat44_ei_address_dump_t *mp)
static void increment_v4_address(ip4_address_t *a)
vl_api_interface_index_t sw_if_index
vl_api_interface_index_t external_sw_if_index
Show NAT44 plugin running config reply.
ip4_main_t ip4_main
Global ip4 main structure.
vl_api_ip4_address_t inside_ip_address
int nat44_ei_set_frame_queue_nelts(u32 frame_queue_nelts)
vl_api_nat44_ei_config_flags_t flags
struct fib_table_t_ * fibs
Vector of FIBs.
#define vec_foreach(var, vec)
Vector iterator.
static void vl_api_nat44_ei_get_addr_and_port_alloc_alg_t_handler(vl_api_nat44_ei_get_addr_and_port_alloc_alg_t *mp)
clib_error_t * nat44_ei_api_hookup(vlib_main_t *vm)
void nat_ha_get_listener(ip4_address_t *addr, u16 *port, u32 *path_mtu)
Get HA listener/local configuration.
vl_api_nat44_ei_config_flags_t flags
nat44_ei_addr_and_port_alloc_alg_t addr_and_port_alloc_alg
Show NAT handoff frame queue options.
static void vl_api_nat44_ei_del_session_t_handler(vl_api_nat44_ei_del_session_t *mp)
#define nat44_ei_interface_is_inside(ip)
vl_api_nat44_ei_config_flags_t flags
Add/del NAT44 address range.
Dump interfaces with NAT44 feature.
vl_api_interface_index_t sw_if_index
clib_bihash_8_8_t user_hash
#define nat44_ei_interface_is_outside(ip)
#define VALIDATE_SW_IF_INDEX(mp)
A protocol Independent FIB table.
vl_api_interface_index_t sw_if_index
vl_api_ip4_address_t ip_address