36 #define vl_api_nat44_add_del_lb_static_mapping_t_endian vl_noop_handler 37 #define vl_api_nat44_nat44_lb_static_mapping_details_t_endian vl_noop_handler 49 #define vl_print(handle, ...) vlib_cli_output (handle, __VA_ARGS__) 51 #define REPLY_MSG_ID_BASE sm->msg_id_base 55 #define vl_api_version(n,v) static u32 api_version=(v); 62 vl_print (handle, (char *)s); \ 80 rmp->
vpe_pid = ntohl (getpid ());
90 s =
format (0,
"SCRIPT: nat_control_ping ");
134 s =
format (0,
"SCRIPT: nat_show_config ");
143 vl_api_nat_set_workers_reply_t *rmp;
150 rv = VNET_API_ERROR_UNSUPPORTED;
158 rv = VNET_API_ERROR_FEATURE_DISABLED;
179 s =
format (0,
"SCRIPT: nat_set_workers ");
206 rmp->_vl_msg_id = ntohs (VL_API_NAT_WORKER_DETAILS + sm->
msg_id_base);
240 s =
format (0,
"SCRIPT: nat_worker_dump ");
250 vl_api_nat44_set_session_limit_reply_t *rmp;
265 s =
format (0,
"SCRIPT: nat44_set_session_limit ");
276 vl_api_nat_set_log_level_reply_t *rmp;
280 rv = VNET_API_ERROR_UNSUPPORTED;
293 s =
format (0,
"SCRIPT: nat_set_log_level ");
304 vl_api_nat_ipfix_enable_disable_reply_t *rmp;
313 REPLY_MACRO (VL_API_NAT_IPFIX_ENABLE_DISABLE_REPLY);
322 s =
format (0,
"SCRIPT: nat_ipfix_enable_disable ");
326 s =
format (s,
"src_port %d ", clib_net_to_host_u16 (mp->
src_port));
328 s =
format (s,
"disable ");
337 vl_api_nat_set_timeouts_reply_t *rmp;
364 s =
format (0,
"SCRIPT: nat_set_timeouts ");
365 s =
format (s,
"udp %d tcp_established %d tcp_transitory %d icmp %d\n",
396 s =
format (0,
"SCRIPT: nat_get_timeouts");
406 vl_api_nat_set_addr_and_port_alloc_alg_reply_t *rmp;
408 u16 port_start, port_end;
412 rv = VNET_API_ERROR_UNSUPPORTED;
418 case NAT_ADDR_AND_PORT_ALLOC_ALG_DEFAULT:
421 case NAT_ADDR_AND_PORT_ALLOC_ALG_MAPE:
425 case NAT_ADDR_AND_PORT_ALLOC_ALG_RANGE:
428 if (port_end <= port_start)
430 rv = VNET_API_ERROR_INVALID_VALUE;
436 rv = VNET_API_ERROR_INVALID_VALUE;
441 REPLY_MACRO (VL_API_NAT_SET_ADDR_AND_PORT_ALLOC_ALG_REPLY);
449 s =
format (0,
"SCRIPT: nat_set_addr_and_port_alloc_alg ");
450 s =
format (s,
"alg %d psid_offset %d psid_length %d psid %d start_port %d " 468 REPLY_MACRO2 (VL_API_NAT_GET_ADDR_AND_PORT_ALLOC_ALG_REPLY,
485 s =
format (0,
"SCRIPT: nat_get_addr_and_port_alloc_alg");
494 vl_api_nat_set_mss_clamping_reply_t *rmp;
514 s =
format (0,
"SCRIPT: nat_set_mss_clamping enable %d mss_value %d\n",
542 s =
format (0,
"SCRIPT: nat_get_mss_clamping");
551 vl_api_nat_ha_set_listener_reply_t *rmp;
555 memcpy (&addr, &mp->
ip_address, sizeof (addr));
558 clib_net_to_host_u32 (mp->
path_mtu));
569 s =
format (0,
"SCRIPT: nat_ha_set_listener ");
571 s =
format (s,
"port %d ", clib_net_to_host_u16 (mp->
port));
572 s =
format (s,
"path_mtu %d", clib_net_to_host_u32 (mp->
path_mtu));
593 rmp->
port = clib_host_to_net_u16 (port);
594 rmp->
path_mtu = clib_host_to_net_u32 (path_mtu);
605 s =
format (0,
"SCRIPT: nat_ha_get_listener");
614 vl_api_nat_ha_set_failover_reply_t *rmp;
618 memcpy (&addr, &mp->
ip_address, sizeof (addr));
632 s =
format (0,
"SCRIPT: nat_ha_set_failover ");
634 s =
format (s,
"port %d ", clib_net_to_host_u16 (mp->
port));
647 u32 session_refresh_interval;
655 rmp->
port = clib_host_to_net_u16 (port);
667 s =
format (0,
"SCRIPT: nat_ha_get_failover");
676 vl_api_nat_ha_flush_reply_t *rmp;
689 s =
format (0,
"SCRIPT: nat_ha_flush ");
711 ntohs (VL_API_NAT_HA_RESYNC_COMPLETED_EVENT + sm->
msg_id_base);
720 vl_api_nat_ha_resync_reply_t *rmp;
736 s =
format (0,
"SCRIPT: nat_ha_resync ");
739 clib_host_to_net_u32 (mp->
pid));
751 vl_api_nat44_del_user_reply_t *rmp;
763 s =
format (0,
"SCRIPT: nat44_del_user ");
764 s =
format (s,
"ip_address %U fib_index %U ",
774 vl_api_nat44_add_del_address_range_reply_t *rmp;
776 u8 is_add, twice_nat;
777 u32 start_host_order, end_host_order;
785 rv = VNET_API_ERROR_UNSUPPORTED;
791 rv = VNET_API_ERROR_FEATURE_DISABLED;
796 twice_nat = mp->
flags & NAT_API_IS_TWICE_NAT;
799 start_host_order = clib_host_to_net_u32 (tmp[0]);
801 end_host_order = clib_host_to_net_u32 (tmp[0]);
803 count = (end_host_order - start_host_order) + 1;
805 vrf_id = clib_host_to_net_u32 (mp->
vrf_id);
814 for (i = 0; i <
count; i++)
831 REPLY_MACRO (VL_API_NAT44_ADD_DEL_ADDRESS_RANGE_REPLY);
839 s =
format (0,
"SCRIPT: nat44_add_address_range ");
845 s =
format (s,
"twice_nat %d ", mp->
flags & NAT_API_IS_TWICE_NAT);
859 rmp->_vl_msg_id = ntohs (VL_API_NAT44_ADDRESS_DETAILS + sm->
msg_id_base);
869 rmp->
flags |= NAT_API_IS_TWICE_NAT;
903 s =
format (0,
"SCRIPT: nat44_address_dump ");
913 vl_api_nat44_interface_add_del_feature_reply_t *rmp;
928 REPLY_MACRO (VL_API_NAT44_INTERFACE_ADD_DEL_FEATURE_REPLY);
936 s =
format (0,
"SCRIPT: nat44_interface_add_del_feature ");
937 s =
format (s,
"sw_if_index %d %s %s",
939 mp->
flags & NAT_API_IS_INSIDE ?
"in" :
"out",
954 rmp->_vl_msg_id = ntohs (VL_API_NAT44_INTERFACE_DETAILS + sm->
msg_id_base);
958 rmp->
flags |= NAT_API_IS_INSIDE;
960 rmp->
flags |= NAT_API_IS_OUTSIDE;
981 send_nat44_interface_details(i, reg, mp->context);
992 s =
format (0,
"SCRIPT: nat44_interface_dump ");
1002 vl_api_nat44_interface_add_del_output_feature_reply_t *rmp;
1008 rv = VNET_API_ERROR_UNSUPPORTED;
1015 mp->
flags & NAT_API_IS_INSIDE,
1020 REPLY_MACRO (VL_API_NAT44_INTERFACE_ADD_DEL_OUTPUT_FEATURE_REPLY);
1028 s =
format (0,
"SCRIPT: nat44_interface_add_del_output_feature ");
1029 s =
format (s,
"sw_if_index %d %s %s",
1031 mp->
flags & NAT_API_IS_INSIDE ?
"in" :
"out",
1032 mp->
is_add ?
"" :
"del");
1048 ntohs (VL_API_NAT44_INTERFACE_OUTPUT_FEATURE_DETAILS + sm->
msg_id_base);
1053 rmp->
flags |= NAT_API_IS_INSIDE;
1076 send_nat44_interface_output_feature_details(i, reg, mp->context);
1086 s =
format (0,
"SCRIPT: nat44_interface_output_feature_dump ");
1096 vl_api_nat44_add_del_static_mapping_reply_t *rmp;
1098 u16 local_port = 0, external_port = 0;
1107 rv = VNET_API_ERROR_UNSUPPORTED;
1114 if (!(mp->
flags & NAT_API_IS_ADDR_ONLY))
1116 local_port = clib_net_to_host_u16 (mp->
local_port);
1120 vrf_id = clib_net_to_host_u32 (mp->
vrf_id);
1124 if (mp->
flags & NAT_API_IS_TWICE_NAT)
1126 else if (mp->
flags & NAT_API_IS_SELF_TWICE_NAT)
1128 mp->
tag[
sizeof (mp->
tag) - 1] = 0;
1133 external_port, vrf_id,
1134 mp->
flags & NAT_API_IS_ADDR_ONLY,
1135 external_sw_if_index, proto,
1137 mp->
flags & NAT_API_IS_OUT2IN_ONLY, tag, 0);
1141 REPLY_MACRO (VL_API_NAT44_ADD_DEL_STATIC_MAPPING_REPLY);
1149 s =
format (0,
"SCRIPT: nat44_add_del_static_mapping ");
1150 s =
format (s,
"protocol %d local_addr %U external_addr %U ",
1155 if (!(mp->
flags & NAT_API_IS_ADDR_ONLY))
1156 s =
format (s,
"local_port %d external_port %d ",
1160 s =
format (s,
"twice_nat %d out2in_only %d ",
1161 mp->
flags & NAT_API_IS_TWICE_NAT,
1162 mp->
flags & NAT_API_IS_OUT2IN_ONLY);
1165 s =
format (s,
"vrf %d", clib_net_to_host_u32 (mp->
vrf_id));
1168 s =
format (s,
"external_sw_if_index %d",
1184 ntohs (VL_API_NAT44_STATIC_MAPPING_DETAILS + sm->
msg_id_base);
1193 rmp->
flags |= NAT_API_IS_TWICE_NAT;
1195 rmp->
flags |= NAT_API_IS_SELF_TWICE_NAT;
1198 rmp->
flags |= NAT_API_IS_OUT2IN_ONLY;
1202 rmp->
flags |= NAT_API_IS_ADDR_ONLY;
1228 ntohs (VL_API_NAT44_STATIC_MAPPING_DETAILS + sm->
msg_id_base);
1235 rmp->
flags |= NAT_API_IS_TWICE_NAT;
1239 rmp->
flags |= NAT_API_IS_ADDR_ONLY;
1273 if (!is_identity_static_mapping(m) && !is_lb_static_mapping (m))
1274 send_nat44_static_mapping_details (m, reg, mp->context);
1292 s =
format (0,
"SCRIPT: nat44_static_mapping_dump ");
1302 vl_api_nat44_add_del_identity_mapping_reply_t *rmp;
1312 rv = VNET_API_ERROR_UNSUPPORTED;
1316 if (!(mp->
flags & NAT_API_IS_ADDR_ONLY))
1318 port = clib_net_to_host_u16 (mp->
port);
1321 vrf_id = clib_net_to_host_u32 (mp->
vrf_id);
1322 sw_if_index = clib_net_to_host_u32 (mp->
sw_if_index);
1323 if (sw_if_index != ~0)
1327 mp->
tag[
sizeof (mp->
tag) - 1] = 0;
1333 mp->
flags & NAT_API_IS_ADDR_ONLY, sw_if_index,
1334 proto, mp->
is_add, 0, 0, tag, 1);
1338 REPLY_MACRO (VL_API_NAT44_ADD_DEL_IDENTITY_MAPPING_REPLY);
1346 s =
format (0,
"SCRIPT: nat44_add_del_identity_mapping ");
1352 if (!(mp->
flags & NAT_API_IS_ADDR_ONLY))
1355 clib_net_to_host_u16 (mp->
port));
1358 s =
format (s,
" vrf %d", clib_net_to_host_u32 (mp->
vrf_id));
1374 ntohs (VL_API_NAT44_IDENTITY_MAPPING_DETAILS + sm->
msg_id_base);
1377 rmp->
flags |= NAT_API_IS_ADDR_ONLY;
1402 ntohs (VL_API_NAT44_IDENTITY_MAPPING_DETAILS + sm->
msg_id_base);
1405 rmp->
flags = (vl_api_nat_config_flags_t) NAT_API_IS_ADDR_ONLY;
1438 if (is_identity_static_mapping(m) && !is_lb_static_mapping (m))
1440 pool_foreach_index (j, m->locals,
1442 send_nat44_identity_mapping_details (m, j, reg, mp->context);
1448 for (j = 0; j <
vec_len (sm->to_resolve); j++)
1450 rp = sm->to_resolve + j;
1451 if (rp->identity_nat)
1461 s =
format (0,
"SCRIPT: nat44_identity_mapping_dump ");
1471 vl_api_nat44_add_del_interface_addr_reply_t *rmp;
1478 rv = VNET_API_ERROR_UNSUPPORTED;
1487 mp->
flags & NAT_API_IS_TWICE_NAT);
1491 REPLY_MACRO (VL_API_NAT44_ADD_DEL_INTERFACE_ADDR_REPLY);
1499 s =
format (0,
"SCRIPT: nat44_add_del_interface_addr ");
1500 s =
format (s,
"sw_if_index %d twice_nat %d %s",
1502 mp->
flags & NAT_API_IS_TWICE_NAT, mp->
is_add ?
"" :
"del");
1518 ntohs (VL_API_NAT44_INTERFACE_ADDR_DETAILS + sm->
msg_id_base);
1522 rmp->
flags = (vl_api_nat_config_flags_t) NAT_API_IS_TWICE_NAT;
1557 s =
format (0,
"SCRIPT: nat44_interface_addr_dump ");
1572 rmp->_vl_msg_id = ntohs (VL_API_NAT44_USER_DETAILS + sm->
msg_id_base);
1608 send_nat44_user_details (u, reg, mp->context);
1619 s =
format (0,
"SCRIPT: nat44_user_dump ");
1634 ntohs (VL_API_NAT44_USER_SESSION_DETAILS + sm->
msg_id_base);
1639 rmp->
flags |= NAT_API_IS_STATIC;
1642 rmp->
flags |= NAT_API_IS_TWICE_NAT;
1645 rmp->
flags |= NAT_API_IS_EXT_HOST_VALID;
1647 rmp->
last_heard = clib_host_to_net_u64 ((
u64) s->last_heard);
1648 rmp->
total_bytes = clib_host_to_net_u64 (s->total_bytes);
1655 rmp->
protocol = ntohs (s->in2out.port);
1688 u32 session_index, head_index, elt_index;
1711 if (clib_bihash_search_8_8 (&tsm->user_hash, &key, &value))
1719 elt_index = head->
next;
1721 session_index = elt->
value;
1722 while (session_index != ~0)
1728 elt_index = elt->
next;
1730 session_index = elt->
value;
1737 if (s->in2out.addr.as_u32 == ukey.addr.as_u32)
1739 send_nat44_user_session_details (s, reg, mp->context);
1752 s =
format (0,
"SCRIPT: nat44_user_session_dump ");
1753 s =
format (s,
"ip_address %U vrf_id %d\n",
1755 clib_net_to_host_u32 (mp->
vrf_id));
1762 u32 addr_port_pair_num)
1766 vl_api_nat44_lb_addr_port_t *ap;
1768 for (i = 0; i < addr_port_pair_num; i++)
1770 ap = &addr_port_pairs[
i];
1771 clib_memset (&lb_addr_port, 0,
sizeof (lb_addr_port));
1773 lb_addr_port.port = clib_net_to_host_u16 (ap->port);
1774 lb_addr_port.probability = ap->probability;
1775 lb_addr_port.vrf_id = clib_net_to_host_u32 (ap->vrf_id);
1776 vec_add1 (lb_addr_port_pairs, lb_addr_port);
1779 return lb_addr_port_pairs;
1787 vl_api_nat44_add_del_lb_static_mapping_reply_t *rmp;
1797 rv = VNET_API_ERROR_UNSUPPORTED;
1807 if (mp->
flags & NAT_API_IS_TWICE_NAT)
1809 else if (mp->
flags & NAT_API_IS_SELF_TWICE_NAT)
1811 mp->
tag[
sizeof (mp->
tag) - 1] = 0;
1818 proto, locals, mp->
is_add,
1820 mp->
flags & NAT_API_IS_OUT2IN_ONLY, tag,
1821 clib_net_to_host_u32 (mp->
affinity));
1827 REPLY_MACRO (VL_API_NAT44_ADD_DEL_LB_STATIC_MAPPING_REPLY);
1835 s =
format (0,
"SCRIPT: nat44_add_del_lb_static_mapping ");
1836 s =
format (s,
"is_add %d twice_nat %d out2in_only %d ",
1838 mp->
flags & NAT_API_IS_TWICE_NAT,
1839 mp->
flags & NAT_API_IS_OUT2IN_ONLY);
1849 vl_api_nat44_lb_static_mapping_add_del_local_reply_t *rmp;
1856 rv = VNET_API_ERROR_UNSUPPORTED;
1866 clib_net_to_host_u16
1868 clib_net_to_host_u16 (mp->
1871 clib_net_to_host_u32 (mp->
1876 REPLY_MACRO (VL_API_NAT44_LB_STATIC_MAPPING_ADD_DEL_LOCAL_REPLY);
1884 s =
format (0,
"SCRIPT: nat44_lb_static_mapping_add_del_local ");
1898 vl_api_nat44_lb_addr_port_t *locals;
1907 ntohs (VL_API_NAT44_LB_STATIC_MAPPING_DETAILS + sm->
msg_id_base);
1915 rmp->
flags |= NAT_API_IS_TWICE_NAT;
1917 rmp->
flags |= NAT_API_IS_SELF_TWICE_NAT;
1919 rmp->
flags |= NAT_API_IS_OUT2IN_ONLY;
1923 locals = (vl_api_nat44_lb_addr_port_t *) rmp->
locals;
1927 clib_memcpy (locals->addr, &(ap->addr), 4);
1928 locals->port = htons (ap->port);
1929 locals->probability = ap->probability;
1930 locals->vrf_id = ntohl (ap->vrf_id);
1958 if (is_lb_static_mapping(m))
1959 send_nat44_lb_static_mapping_details (m, reg, mp->context);
1969 s =
format (0,
"SCRIPT: nat44_lb_static_mapping_dump ");
1978 vl_api_nat44_del_session_reply_t *rmp;
1988 rv = VNET_API_ERROR_UNSUPPORTED;
1993 port = clib_net_to_host_u16 (mp->
port);
1994 vrf_id = clib_net_to_host_u32 (mp->
vrf_id);
1999 is_in = mp->
flags & NAT_API_IS_INSIDE;
2001 if (mp->
flags & NAT_API_IS_EXT_HOST_VALID)
2018 s =
format (0,
"SCRIPT: nat44_add_del_static_mapping ");
2019 s =
format (s,
"addr %U port %d protocol %d vrf_id %d is_in %d",
2021 clib_net_to_host_u16 (mp->
port),
2023 mp->
flags & NAT_API_IS_INSIDE);
2024 if (mp->
flags & NAT_API_IS_EXT_HOST_VALID)
2025 s =
format (s,
"ext_host_address %U ext_host_port %d",
2037 vl_api_nat44_forwarding_enable_disable_reply_t *rmp;
2039 u32 *ses_to_be_removed = 0, *ses_index;
2052 if (is_fwd_bypass_session(s))
2054 vec_add1 (ses_to_be_removed, s - tsm->sessions);
2077 REPLY_MACRO (VL_API_NAT44_FORWARDING_ENABLE_DISABLE_REPLY);
2085 s =
format (0,
"SCRIPT: nat44_forwarding_enable_disable ");
2106 ntohs (VL_API_NAT44_FORWARDING_IS_ENABLED_REPLY + sm->
msg_id_base);
2119 s =
format (0,
"SCRIPT: nat44_forwarding_is_enabled ");
2132 vl_api_nat_det_add_del_map_reply_t *rmp;
2138 rv = VNET_API_ERROR_UNSUPPORTED;
2157 s =
format (0,
"SCRIPT: nat_det_add_del_map ");
2158 s =
format (s,
"inside address %U/%d outside address %U/%d\n",
2171 u16 lo_port = 0, hi_port = 0;
2177 rv = VNET_API_ERROR_UNSUPPORTED;
2187 rv = VNET_API_ERROR_NO_SUCH_ENTRY;
2210 s =
format (0,
"SCRIPT: nat_det_forward");
2227 rv = VNET_API_ERROR_UNSUPPORTED;
2237 rv = VNET_API_ERROR_NO_SUCH_ENTRY;
2257 s =
format (0,
"SCRIPT: nat_det_reverse");
2258 s =
format (s,
"outside ip address %U outside port %d",
2273 rmp->_vl_msg_id = ntohs (VL_API_NAT_DET_MAP_DETAILS + sm->
msg_id_base);
2311 s =
format (0,
"SCRIPT: nat_det_map_dump ");
2321 vl_api_nat_det_close_session_out_reply_t *rmp;
2330 rv = VNET_API_ERROR_UNSUPPORTED;
2340 rv = VNET_API_ERROR_NO_SUCH_ENTRY;
2350 rv = VNET_API_ERROR_NO_SUCH_ENTRY;
2356 REPLY_MACRO (VL_API_NAT_DET_CLOSE_SESSION_OUT_REPLY);
2365 s =
format (0,
"SCRIPT: nat_det_close_session_out ");
2366 s =
format (s,
"out_addr %U out_port %d " 2367 "ext_addr %U ext_port %d\n",
2379 vl_api_nat_det_close_session_in_reply_t *rmp;
2388 rv = VNET_API_ERROR_UNSUPPORTED;
2398 rv = VNET_API_ERROR_NO_SUCH_ENTRY;
2406 rv = VNET_API_ERROR_NO_SUCH_ENTRY;
2412 REPLY_MACRO (VL_API_NAT_DET_CLOSE_SESSION_OUT_REPLY);
2420 s =
format (0,
"SCRIPT: nat_det_close_session_in ");
2421 s =
format (s,
"in_addr %U in_port %d ext_addr %U ext_port %d\n",
2437 rmp->_vl_msg_id = ntohs (VL_API_NAT_DET_SESSION_DETAILS + sm->
msg_id_base);
2487 s =
format (0,
"SCRIPT: nat_det_session_dump ");
2501 vl_api_nat64_add_del_pool_addr_range_reply_t *rmp;
2505 u32 start_host_order, end_host_order;
2511 start_host_order = clib_host_to_net_u32 (tmp[0]);
2513 end_host_order = clib_host_to_net_u32 (tmp[0]);
2515 count = (end_host_order - start_host_order) + 1;
2517 vrf_id = clib_host_to_net_u32 (mp->
vrf_id);
2521 for (i = 0; i <
count; i++)
2530 REPLY_MACRO (VL_API_NAT64_ADD_DEL_POOL_ADDR_RANGE_REPLY);
2538 s =
format (0,
"SCRIPT: nat64_add_del_pool_addr_range ");
2539 s =
format (s,
"%U - %U vrf_id %u %s\n",
2563 rmp->_vl_msg_id = ntohs (VL_API_NAT64_POOL_ADDR_DETAILS + sm->
msg_id_base);
2604 s =
format (0,
"SCRIPT: nat64_pool_addr_dump\n");
2614 vl_api_nat64_add_del_interface_reply_t *rmp;
2625 REPLY_MACRO (VL_API_NAT64_ADD_DEL_INTERFACE_REPLY);
2634 s =
format (0,
"SCRIPT: nat64_add_del_interface ");
2635 s =
format (s,
"sw_if_index %d %s %s",
2637 mp->
flags & NAT_API_IS_INSIDE ?
"in" :
"out",
2638 mp->
is_add ?
"" :
"del");
2652 rmp->_vl_msg_id = ntohs (VL_API_NAT64_INTERFACE_DETAILS + sm->
msg_id_base);
2656 rmp->
flags |= NAT_API_IS_INSIDE;
2658 rmp->
flags |= NAT_API_IS_OUTSIDE;
2690 s =
format (0,
"SCRIPT: snat_interface_dump ");
2700 vl_api_nat64_add_del_static_bib_reply_t *rmp;
2701 ip6_address_t in_addr;
2705 memcpy (&in_addr.as_u8, mp->
i_addr, 16);
2710 clib_net_to_host_u16 (mp->
i_port),
2711 clib_net_to_host_u16 (mp->
o_port),
2713 clib_net_to_host_u32 (mp->
vrf_id),
2716 REPLY_MACRO (VL_API_NAT64_ADD_DEL_STATIC_BIB_REPLY);
2724 s =
format (0,
"SCRIPT: nat64_add_del_static_bib ");
2725 s =
format (s,
"protocol %d i_addr %U o_addr %U ",
2730 s =
format (s,
"vrf %d", clib_net_to_host_u32 (mp->
vrf_id));
2749 rmp->_vl_msg_id = ntohs (VL_API_NAT64_BIB_DETAILS + sm->
msg_id_base);
2753 rmp->
i_port = bibe->in_port;
2754 rmp->
o_port = bibe->out_port;
2756 rmp->
proto = bibe->proto;
2757 if (bibe->is_static)
2758 rmp->
flags |= NAT_API_IS_STATIC;
2759 rmp->
ses_num = ntohl (bibe->ses_num);
2793 s =
format (0,
"SCRIPT: snat_bib_dump protocol %d", mp->
proto);
2804 nat64_db_bib_entry_t *bibe;
2817 rmp->_vl_msg_id = ntohs (VL_API_NAT64_ST_DETAILS + sm->
msg_id_base);
2822 rmp->
ol_port = bibe->out_port;
2827 rmp->
proto = ste->proto;
2864 s =
format (0,
"SCRIPT: snat_st_dump protocol %d", mp->
proto);
2872 vl_api_nat64_add_del_prefix_reply_t *rmp;
2877 memcpy (&prefix.as_u8, mp->
prefix.address, 16);
2891 s =
format (0,
"SCRIPT: nat64_add_del_prefix %U/%u vrf_id %u %s\n",
2907 rmp->_vl_msg_id = ntohs (VL_API_NAT64_PREFIX_DETAILS + sm->
msg_id_base);
2941 s =
format (0,
"SCRIPT: nat64_prefix_dump\n");
2951 vl_api_nat64_add_del_interface_addr_reply_t *rmp;
2961 REPLY_MACRO (VL_API_NAT64_ADD_DEL_INTERFACE_ADDR_REPLY);
2969 s =
format (0,
"SCRIPT: nat64_add_del_interface_addr ");
2970 s =
format (s,
"sw_if_index %d %s",
2972 mp->
is_add ?
"" :
"del");
2986 vl_api_nat66_add_del_interface_reply_t *rmp;
2997 REPLY_MACRO (VL_API_NAT66_ADD_DEL_INTERFACE_REPLY);
3006 s =
format (0,
"SCRIPT: nat66_add_del_interface ");
3007 s =
format (s,
"sw_if_index %d %s %s",
3009 mp->
flags & NAT_API_IS_INSIDE ?
"in" :
"out",
3010 mp->
is_add ?
"" :
"del");
3020 vl_api_nat66_add_del_static_mapping_reply_t *rmp;
3021 ip6_address_t l_addr, e_addr;
3029 clib_net_to_host_u32 (mp->
vrf_id),
3032 REPLY_MACRO (VL_API_NAT66_ADD_DEL_STATIC_MAPPING_REPLY);
3040 s =
format (0,
"SCRIPT: nat66_add_del_static_mapping ");
3041 s =
format (s,
"local_ip_address %U external_ip_address %U vrf_id %d %s",
3044 clib_net_to_host_u32 (mp->
vrf_id), mp->
is_add ?
"" :
"del");
3064 rmp->_vl_msg_id = ntohs (VL_API_NAT66_INTERFACE_DETAILS + sm->
msg_id_base);
3067 rmp->
flags |= NAT_API_IS_INSIDE;
3098 s =
format (0,
"SCRIPT: nat66_interface_dump ");
3122 ntohs (VL_API_NAT66_STATIC_MAPPING_DETAILS + sm->
msg_id_base);
3159 s =
format (0,
"SCRIPT: nat66_static_mapping_dump ");
3166 #define foreach_snat_plugin_api_msg \ 3167 _(NAT_CONTROL_PING, nat_control_ping) \ 3168 _(NAT_SHOW_CONFIG, nat_show_config) \ 3169 _(NAT_SET_WORKERS, nat_set_workers) \ 3170 _(NAT_WORKER_DUMP, nat_worker_dump) \ 3171 _(NAT44_DEL_USER, nat44_del_user) \ 3172 _(NAT44_SET_SESSION_LIMIT, nat44_set_session_limit) \ 3173 _(NAT_SET_LOG_LEVEL, nat_set_log_level) \ 3174 _(NAT_IPFIX_ENABLE_DISABLE, nat_ipfix_enable_disable) \ 3175 _(NAT_SET_TIMEOUTS, nat_set_timeouts) \ 3176 _(NAT_GET_TIMEOUTS, nat_get_timeouts) \ 3177 _(NAT_SET_ADDR_AND_PORT_ALLOC_ALG, nat_set_addr_and_port_alloc_alg) \ 3178 _(NAT_GET_ADDR_AND_PORT_ALLOC_ALG, nat_get_addr_and_port_alloc_alg) \ 3179 _(NAT_SET_MSS_CLAMPING, nat_set_mss_clamping) \ 3180 _(NAT_GET_MSS_CLAMPING, nat_get_mss_clamping) \ 3181 _(NAT_HA_SET_LISTENER, nat_ha_set_listener) \ 3182 _(NAT_HA_SET_FAILOVER, nat_ha_set_failover) \ 3183 _(NAT_HA_GET_LISTENER, nat_ha_get_listener) \ 3184 _(NAT_HA_GET_FAILOVER, nat_ha_get_failover) \ 3185 _(NAT_HA_FLUSH, nat_ha_flush) \ 3186 _(NAT_HA_RESYNC, nat_ha_resync) \ 3187 _(NAT44_ADD_DEL_ADDRESS_RANGE, nat44_add_del_address_range) \ 3188 _(NAT44_INTERFACE_ADD_DEL_FEATURE, nat44_interface_add_del_feature) \ 3189 _(NAT44_ADD_DEL_STATIC_MAPPING, nat44_add_del_static_mapping) \ 3190 _(NAT44_ADD_DEL_IDENTITY_MAPPING, nat44_add_del_identity_mapping) \ 3191 _(NAT44_STATIC_MAPPING_DUMP, nat44_static_mapping_dump) \ 3192 _(NAT44_IDENTITY_MAPPING_DUMP, nat44_identity_mapping_dump) \ 3193 _(NAT44_ADDRESS_DUMP, nat44_address_dump) \ 3194 _(NAT44_INTERFACE_DUMP, nat44_interface_dump) \ 3195 _(NAT44_ADD_DEL_INTERFACE_ADDR, nat44_add_del_interface_addr) \ 3196 _(NAT44_INTERFACE_ADDR_DUMP, nat44_interface_addr_dump) \ 3197 _(NAT44_USER_DUMP, nat44_user_dump) \ 3198 _(NAT44_USER_SESSION_DUMP, nat44_user_session_dump) \ 3199 _(NAT44_INTERFACE_ADD_DEL_OUTPUT_FEATURE, \ 3200 nat44_interface_add_del_output_feature) \ 3201 _(NAT44_INTERFACE_OUTPUT_FEATURE_DUMP, \ 3202 nat44_interface_output_feature_dump) \ 3203 _(NAT44_ADD_DEL_LB_STATIC_MAPPING, nat44_add_del_lb_static_mapping) \ 3204 _(NAT44_LB_STATIC_MAPPING_ADD_DEL_LOCAL, \ 3205 nat44_lb_static_mapping_add_del_local) \ 3206 _(NAT44_LB_STATIC_MAPPING_DUMP, nat44_lb_static_mapping_dump) \ 3207 _(NAT44_DEL_SESSION, nat44_del_session) \ 3208 _(NAT44_FORWARDING_ENABLE_DISABLE, nat44_forwarding_enable_disable) \ 3209 _(NAT44_FORWARDING_IS_ENABLED, nat44_forwarding_is_enabled) \ 3210 _(NAT_DET_ADD_DEL_MAP, nat_det_add_del_map) \ 3211 _(NAT_DET_FORWARD, nat_det_forward) \ 3212 _(NAT_DET_REVERSE, nat_det_reverse) \ 3213 _(NAT_DET_MAP_DUMP, nat_det_map_dump) \ 3214 _(NAT_DET_CLOSE_SESSION_OUT, nat_det_close_session_out) \ 3215 _(NAT_DET_CLOSE_SESSION_IN, nat_det_close_session_in) \ 3216 _(NAT_DET_SESSION_DUMP, nat_det_session_dump) \ 3217 _(NAT64_ADD_DEL_POOL_ADDR_RANGE, nat64_add_del_pool_addr_range) \ 3218 _(NAT64_POOL_ADDR_DUMP, nat64_pool_addr_dump) \ 3219 _(NAT64_ADD_DEL_INTERFACE, nat64_add_del_interface) \ 3220 _(NAT64_INTERFACE_DUMP, nat64_interface_dump) \ 3221 _(NAT64_ADD_DEL_STATIC_BIB, nat64_add_del_static_bib) \ 3222 _(NAT64_BIB_DUMP, nat64_bib_dump) \ 3223 _(NAT64_ST_DUMP, nat64_st_dump) \ 3224 _(NAT64_ADD_DEL_PREFIX, nat64_add_del_prefix) \ 3225 _(NAT64_PREFIX_DUMP, nat64_prefix_dump) \ 3226 _(NAT64_ADD_DEL_INTERFACE_ADDR, nat64_add_del_interface_addr) \ 3227 _(NAT66_ADD_DEL_INTERFACE, nat66_add_del_interface) \ 3228 _(NAT66_INTERFACE_DUMP, nat66_interface_dump) \ 3229 _(NAT66_ADD_DEL_STATIC_MAPPING, nat66_add_del_static_mapping) \ 3230 _(NAT66_STATIC_MAPPING_DUMP, nat66_static_mapping_dump) 3238 vl_msg_api_set_handlers((VL_API_##N + sm->msg_id_base), \ 3240 vl_api_##n##_t_handler, \ 3242 vl_api_##n##_t_endian, \ 3243 vl_api_##n##_t_print, \ 3244 sizeof(vl_api_##n##_t), 1); 3251 #define vl_msg_name_crc_list 3253 #undef vl_msg_name_crc_list 3258 #define _(id,n,crc) \ 3259 vl_msg_api_add_msg_name_crc (am, #n "_" #crc, id + sm->msg_id_base); 3260 foreach_vl_msg_name_crc_nat;
3267 #define _(n,f) sm->api_main->msg_print_handlers \ 3268 [VL_API_##n + sm->msg_id_base] \ 3269 = (void *) vl_api_##f##_t_print; 3280 name =
format (0,
"nat_%08x%c", api_version, 0);
ip4_address_t external_addr
vl_api_ip4_address_t ext_host_address
NAT64 interface details response.
uword translation_memory_size
nat64_db_t * db
BIB and session DB per thread.
#define nat_log_info(...)
#define snat_is_session_static(s)
Check if SNAT session is created from static mapping.
u32 sessions_per_user_list_head_index
NAT44 load-balancing static mapping rule details response.
vl_api_ip4_address_t ext_addr
static void vl_api_nat66_add_del_interface_t_handler(vl_api_nat66_add_del_interface_t *mp)
int snat_del_address(snat_main_t *sm, ip4_address_t addr, u8 delete_sm, u8 twice_nat)
Delete external address from NAT44 pool.
int nat64_set_udp_timeout(u32 timeout)
Set UDP session timeout.
static void send_nat44_identity_map_resolve_details(snat_static_map_resolve_t *m, vl_api_registration_t *reg, u32 context)
static void vl_api_nat_worker_dump_t_handler(vl_api_nat_worker_dump_t *mp)
vl_api_interface_index_t sw_if_index
Get address and port assignment algorithm reply.
static int nat64_api_pool_walk(snat_address_t *a, void *arg)
vl_api_ip4_address_t out_addr
vl_api_nat_config_flags_t flags
NAT64 BIB details response.
static void * vl_api_nat44_user_dump_t_print(vl_api_nat44_user_dump_t *mp, void *handle)
static void * vl_api_nat_ha_set_listener_t_print(vl_api_nat_ha_set_listener_t *mp, void *handle)
static void * vl_api_nat_ipfix_enable_disable_t_print(vl_api_nat_ipfix_enable_disable_t *mp, void *handle)
static void * vl_api_nat_det_close_session_in_t_print(vl_api_nat_det_close_session_in_t *mp, void *handle)
vl_api_ip4_address_t external_addr
static void vl_api_nat_ha_set_listener_t_handler(vl_api_nat_ha_set_listener_t *mp)
Get values of timeouts for NAT sessions (seconds)
NAT workers details response.
int nat44_del_session(snat_main_t *sm, ip4_address_t *addr, u16 port, nat_protocol_t proto, u32 vrf_id, int is_in)
Delete NAT44 session.
vl_api_interface_index_t external_sw_if_index
Get values of timeouts for NAT sessions reply.
static void * vl_api_nat64_interface_dump_t_print(vl_api_nat64_interface_dump_t *mp, void *handle)
vl_api_interface_index_t sw_if_index
static void send_nat44_user_session_details(snat_session_t *s, vl_api_registration_t *reg, u32 context)
vl_api_ip4_address_t external_addr
NAT44 interface with output feature details response.
static void * vl_api_nat_set_addr_and_port_alloc_alg_t_print(vl_api_nat_set_addr_and_port_alloc_alg_t *mp, void *handle)
vl_api_ip4_address_t out_addr
Dump NAT44 pool addresses interfaces.
static void vl_api_nat44_user_session_dump_t_handler(vl_api_nat44_user_session_dump_t *mp)
#define is_ed_session(s)
Check if NAT session is endpoint dependent.
static void * vl_api_nat44_del_session_t_print(vl_api_nat44_del_session_t *mp, void *handle)
NAT44 identity mapping details response.
vl_api_ip4_address_t external_addr
Add/delete NAT44 identity mapping.
vl_api_nat44_lb_addr_port_t locals[local_num]
#define REPLY_MACRO2(t, body)
int nat64_add_del_interface(u32 sw_if_index, u8 is_inside, u8 is_add)
Enable/disable NAT64 feature on the interface.
clib_memset(h->entries, 0, sizeof(h->entries[0]) *entries)
vl_api_nat_config_flags_t flags
vl_api_nat_config_flags_t flags
static void vl_api_nat44_lb_static_mapping_dump_t_handler(vl_api_nat44_lb_static_mapping_dump_t *mp)
vl_api_nat_config_flags_t flags
static void vl_api_send_msg(vl_api_registration_t *rp, u8 *elem)
static int nat64_api_interface_walk(snat_interface_t *i, void *arg)
static void vl_api_nat64_bib_dump_t_handler(vl_api_nat64_bib_dump_t *mp)
static clib_error_t * snat_plugin_api_hookup(vlib_main_t *vm)
void nat_free_session_data(snat_main_t *sm, snat_session_t *s, u32 thread_index, u8 is_ha)
Free NAT44 session data (lookup keys, external address port)
static void * vl_api_nat64_bib_dump_t_print(vl_api_nat64_bib_dump_t *mp, void *handle)
static void * vl_api_nat66_add_del_static_mapping_t_print(vl_api_nat66_add_del_static_mapping_t *mp, void *handle)
vl_api_ip6_address_t external_ip_address
Control ping from client to api server request.
Set values of timeouts for NAT sessions (seconds)
#define vec_terminate_c_string(V)
(If necessary) NULL terminate a vector containing a c-string.
Get outside address and port range from inside address.
vl_api_ip4_address_t local_ip_address
#define vec_add1(V, E)
Add 1 element to end of vector (unspecified alignment).
vl_api_ip4_address_t ip_address
static void vl_api_nat44_del_user_t_handler(vl_api_nat44_del_user_t *mp)
static void vl_api_nat64_add_del_pool_addr_range_t_handler(vl_api_nat64_add_del_pool_addr_range_t *mp)
static void snat_det_ses_close(snat_det_map_t *dm, snat_det_session_t *ses)
Get inside address from outside address and port reply.
Combined counter to hold both packets and byte differences.
Add/delete NAT44 load-balancing static mapping rule backend.
NAT44 interface details response.
u32 session_refresh_interval
vl_api_ip6_prefix_t prefix
static snat_det_session_t * snat_det_find_ses_by_in(snat_det_map_t *dm, ip4_address_t *in_addr, u16 in_port, snat_det_out_key_t out_key)
static void send_nat44_interface_addr_details(u32 sw_if_index, vl_api_registration_t *reg, u32 context, u8 twice_nat)
Dump NAT66 static mappings.
static void snat_det_forward(snat_det_map_t *dm, ip4_address_t *in_addr, ip4_address_t *out_addr, u16 *lo_port)
NAT44 static mapping details response.
static void vl_api_nat_get_addr_and_port_alloc_alg_t_handler(vl_api_nat_get_addr_and_port_alloc_alg_t *mp)
vl_api_nat_config_flags_t flags
vl_api_ip4_address_t first_ip_address
bool static_mapping_connection_tracking
static void * vl_api_nat64_add_del_static_bib_t_print(vl_api_nat64_add_del_static_bib_t *mp, void *handle)
int nat44_del_ed_session(snat_main_t *sm, ip4_address_t *addr, u16 port, ip4_address_t *eh_addr, u16 eh_port, u8 proto, u32 vrf_id, int is_in)
Delete NAT44 endpoint-dependent session.
vl_api_ip4_address_t or_addr
static void * vl_api_nat64_pool_addr_dump_t_print(vl_api_nat64_pool_addr_dump_t *mp, void *handle)
vl_api_ip4_address_t ip_address
Response to check if forwarding is enabled or disabled.
snat_det_map_t * det_maps
vl_api_nat_config_flags_t flags
static void nat_ed_session_delete(snat_main_t *sm, snat_session_t *ses, u32 thread_index, int lru_delete)
static void vl_api_nat_control_ping_t_handler(vl_api_nat_control_ping_t *mp)
int nat64_add_interface_address(u32 sw_if_index, int is_add)
NAT64 pool address from specific (DHCP addressed) interface.
Get HA failover/remote settings reply.
Add/delete NAT64 pool address from specific interfce.
static void snat_det_reverse(snat_det_map_t *dm, ip4_address_t *out_addr, u16 out_port, ip4_address_t *in_addr)
void * vl_msg_api_alloc(int nbytes)
#define snat_is_unk_proto_session(s)
Check if SNAT session for unknown protocol.
Set HA failover (remote settings)
vl_api_nat_config_flags_t flags
static void vl_api_nat44_add_del_interface_addr_t_handler(vl_api_nat44_add_del_interface_addr_t *mp)
static void vl_api_nat_set_workers_t_handler(vl_api_nat_set_workers_t *mp)
static void * vl_api_nat44_lb_static_mapping_add_del_local_t_print(vl_api_nat44_lb_static_mapping_add_del_local_t *mp, void *handle)
Enable/disable NAT64 feature on the interface.
static int nat64_api_prefix_walk(nat64_prefix_t *p, void *arg)
int snat_interface_add_del(u32 sw_if_index, u8 is_inside, int is_del)
Enable/disable NAT44 feature on the interface.
nat44_lb_addr_port_t * locals
static void vl_api_nat_get_timeouts_t_handler(vl_api_nat_get_timeouts_t *mp)
static void * vl_api_nat_det_reverse_t_print(vl_api_nat_det_reverse_t *mp, void *handle)
static void * vl_api_nat_show_config_t_print(vl_api_nat_show_config_t *mp, void *handle)
static void * vl_api_nat44_forwarding_is_enabled_t_print(vl_api_nat44_forwarding_is_enabled_t *mp, void *handle)
vl_api_ip4_address_t out_addr
#define clib_memcpy(d, s, n)
#define nat_interface_is_outside(i)
Check if NAT interface is outside.
u32 max_translations_per_user
static void * vl_api_nat44_interface_addr_dump_t_print(vl_api_nat44_interface_addr_dump_t *mp, void *handle)
u32 session_refresh_interval
static void * vl_api_nat44_identity_mapping_dump_t_print(vl_api_nat44_identity_mapping_dump_t *mp, void *handle)
vl_api_interface_index_t sw_if_index
static void * vl_api_nat_det_add_del_map_t_print(vl_api_nat_det_add_del_map_t *mp, void *handle)
vl_api_nat_config_flags_t flags
static void vl_api_nat44_user_dump_t_handler(vl_api_nat44_user_dump_t *mp)
vl_api_ip6_address_t ir_addr
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)
Check if forwarding is enabled or disabled.
vl_api_ip4_address_t o_addr
#define pool_foreach(VAR, POOL, BODY)
Iterate through pool.
static nat_protocol_t ip_proto_to_nat_proto(u8 ip_proto)
Common NAT inline functions.
Dump NAT64 session table.
static void * vl_api_nat44_lb_static_mapping_dump_t_print(vl_api_nat44_lb_static_mapping_dump_t *mp, void *handle)
vl_api_interface_index_t sw_if_index
static void vl_api_nat_ha_get_listener_t_handler(vl_api_nat_ha_get_listener_t *mp)
static void vl_api_nat_set_addr_and_port_alloc_alg_t_handler(vl_api_nat_set_addr_and_port_alloc_alg_t *mp)
ip4_address_t ext_host_addr
vl_api_nat_config_flags_t flags
NAT66 interface details response.
static int nat64_api_st_walk(nat64_db_st_entry_t *ste, void *arg)
Enable/disbale NAT44 as an interface output feature (postrouting in2out translation) ...
vl_api_nat_config_flags_t flags
static void sent_nat_det_map_details(snat_det_map_t *m, vl_api_registration_t *reg, u32 context)
int snat_add_address(snat_main_t *sm, ip4_address_t *addr, u32 vrf_id, u8 twice_nat)
Add external address to NAT44 pool.
vl_api_registration_t * rp
static void vl_api_nat_ha_resync_t_handler(vl_api_nat_ha_resync_t *mp)
int nat64_set_icmp_timeout(u32 timeout)
Set ICMP session timeout.
static void * vl_api_nat_ha_set_failover_t_print(vl_api_nat_ha_set_failover_t *mp, void *handle)
struct nat64_api_walk_ctx_t_ nat64_api_walk_ctx_t
#define SNAT_DET_SES_PER_USER
#define vec_elt_at_index(v, i)
Get vector value at index i checking that i is in bounds.
#define is_fwd_bypass_session(s)
Check if NAT session is forwarding bypass.
#define foreach_snat_plugin_api_msg
vl_api_ip6_address_t i_addr
static void vl_api_nat44_interface_add_del_output_feature_t_handler(vl_api_nat44_interface_add_del_output_feature_t *mp)
int snat_ipfix_logging_enable_disable(int enable, u32 domain_id, u16 src_port)
Enable/disable NAT plugin IPFIX logging.
static void send_nat44_user_details(snat_user_t *u, vl_api_registration_t *reg, u32 context)
Dump interfaces with NAT44 output feature.
u32 fib_table_find(fib_protocol_t proto, u32 table_id)
Get the index of the FIB for a Table-ID.
static void vl_api_nat44_add_del_address_range_t_handler(vl_api_nat44_add_del_address_range_t *mp)
vl_api_ip4_address_t ip_address
static void vl_api_nat44_forwarding_enable_disable_t_handler(vl_api_nat44_forwarding_enable_disable_t *mp)
static void vl_api_nat_det_map_dump_t_handler(vl_api_nat_det_map_dump_t *mp)
vl_api_ip6_address_t local_ip_address
static void * vl_api_nat_set_log_level_t_print(vl_api_nat_set_log_level_t *mp, void *handle)
vl_api_ip4_address_t ext_addr
vl_api_nat_config_flags_t flags
Flush the current HA data (for testing)
static void send_nat44_identity_mapping_details(snat_static_mapping_t *m, int index, vl_api_registration_t *reg, u32 context)
static void * vl_api_nat66_add_del_interface_t_print(vl_api_nat66_add_del_interface_t *mp, void *handle)
vl_api_nat_config_flags_t flags
static void * vl_api_nat44_forwarding_enable_disable_t_print(vl_api_nat44_forwarding_enable_disable_t *mp, void *handle)
clib_error_t * snat_api_init(vlib_main_t *vm, snat_main_t *sm)
static void nat44_delete_session(snat_main_t *sm, snat_session_t *ses, u32 thread_index)
static void nat_ha_resync_completed_event_cb(u32 client_index, u32 pid, u32 missed_count)
static void * vl_api_nat_ha_resync_t_print(vl_api_nat_ha_resync_t *mp, void *handle)
static void * vl_api_nat_ha_get_listener_t_print(vl_api_nat_ha_get_listener_t *mp, void *handle)
static heap_elt_t * first(heap_header_t *h)
int nat44_set_session_limit(u32 session_limit, u32 vrf_id)
Set NAT44 session limit (session limit, vrf id)
twice_nat_type_t twice_nat
u32 * auto_add_sw_if_indices_twice_nat
u32 max_translations_per_user
static u32 snat_det_user_ses_offset(ip4_address_t *addr, u8 plen)
static void * vl_api_nat_get_timeouts_t_print(vl_api_nat_get_timeouts_t *mp, void *handle)
vlib_worker_thread_t * vlib_worker_threads
static void send_nat44_address_details(snat_address_t *a, vl_api_registration_t *reg, u32 context, u8 twice_nat)
Get TCP MSS rewriting configuration.
#define clib_bitmap_foreach(i, ai, body)
Macro to iterate across set bits in a bitmap.
vl_api_nat_config_flags_t flags
#define pool_elt_at_index(p, i)
Returns pointer to element at given index.
Control ping from the client to the server response.
void nat66_static_mappings_walk(nat66_static_mapping_walk_fn_t fn, void *ctx)
static_always_inline int nat44_user_del(ip4_address_t *addr, u32 fib_index)
static void * vl_api_nat64_st_dump_t_print(vl_api_nat64_st_dump_t *mp, void *handle)
static void * vl_api_nat_control_ping_t_print(vl_api_nat_control_ping_t *mp, void *handle)
static void * vl_api_nat_ha_flush_t_print(vl_api_nat_ha_flush_t *mp, void *handle)
counter_t packets
packet counter
nat_addr_and_port_alloc_alg_t addr_and_port_alloc_alg
static void vl_api_nat44_forwarding_is_enabled_t_handler(vl_api_nat44_forwarding_is_enabled_t *mp)
Add/delete address range to NAT64 pool.
snat_det_session_t * sessions
static void * vl_api_nat44_del_user_t_print(vl_api_nat44_del_user_t *mp, void *handle)
Close deterministic NAT session by outside address and port.
vl_api_nat_config_flags_t flags
static void * vl_api_nat_get_addr_and_port_alloc_alg_t_print(vl_api_nat_get_addr_and_port_alloc_alg_t *mp, void *handle)
static snat_det_map_t * snat_det_map_by_out(snat_main_t *sm, ip4_address_t *out_addr)
vl_api_nat_config_flags_t flags
u64 nat64_bib_memory_size
static void vl_api_nat_ha_get_failover_t_handler(vl_api_nat_ha_get_failover_t *mp)
static void send_nat44_interface_output_feature_details(snat_interface_t *i, vl_api_registration_t *reg, u32 context)
vl_api_nat_config_flags_t flags
Enable/disable forwarding for NAT44 Forward packets which don't match existing translation or static ...
Dump NAT64 pool addresses.
static void * vl_api_nat_set_workers_t_print(vl_api_nat_set_workers_t *mp, void *handle)
static void vl_api_nat_set_timeouts_t_handler(vl_api_nat_set_timeouts_t *mp)
Tell client about a HA resync completion event.
snat_static_mapping_t * static_mappings
vl_api_ip4_address_t external_ip_address
void nat_ha_get_listener(ip4_address_t *addr, u16 *port, u32 *path_mtu)
Get HA listener/local configuration.
Set HA listener (local settings)
static void vl_api_nat_ha_set_failover_t_handler(vl_api_nat_ha_set_failover_t *mp)
void nat_ha_flush(u8 is_resync)
Flush the current HA data (for testing)
static int nat66_api_interface_walk(snat_interface_t *i, void *arg)
vl_api_ip6_address_t i_addr
static void vl_api_nat64_pool_addr_dump_t_handler(vl_api_nat64_pool_addr_dump_t *mp)
#define nat_interface_is_inside(i)
Check if NAT interface is inside.
static void * vl_api_nat44_interface_output_feature_dump_t_print(vl_api_nat44_interface_output_feature_dump_t *mp, void *handle)
static void vl_api_nat_det_reverse_t_handler(vl_api_nat_det_reverse_t *mp)
Dump NAT44 identity mappings.
u32 translation_memory_size
vl_api_ip4_address_t ext_host_nat_address
vl_api_ip4_address_t outside_ip_address
vl_api_ip4_address_t address
void nat_set_alloc_addr_and_port_default(void)
Set address and port assignment algorithm to default/standard.
static void vl_api_nat44_add_del_identity_mapping_t_handler(vl_api_nat44_add_del_identity_mapping_t *mp)
static void send_nat_det_session_details(snat_det_session_t *s, vl_api_registration_t *reg, u32 context)
static void * vl_api_nat66_static_mapping_dump_t_print(vl_api_nat66_static_mapping_dump_t *mp, void *handle)
static void vl_api_nat_get_mss_clamping_t_handler(vl_api_nat_get_mss_clamping_t *mp)
Add/delete NAT44 pool address from specific interfce.
vl_api_ip4_address_t ip_address
static void * vl_api_nat_worker_dump_t_print(vl_api_nat_worker_dump_t *mp, void *handle)
static void * vl_api_nat44_address_dump_t_print(vl_api_nat44_address_dump_t *mp, void *handle)
vl_api_ip4_address_t in_addr
vl_api_ip6_address_t il_addr
Get address and port assignment algorithm.
static void vl_api_nat44_del_session_t_handler(vl_api_nat44_del_session_t *mp)
static void * vl_api_nat_det_session_dump_t_print(vl_api_nat_det_session_dump_t *mp, void *handle)
Add/delete NAT64 static BIB entry.
API main structure, used by both vpp and binary API clients.
static void vl_api_nat44_add_del_static_mapping_t_handler(vl_api_nat44_add_del_static_mapping_t *mp)
Enable/disable NAT66 feature on the interface.
static void send_nat44_interface_details(snat_interface_t *i, vl_api_registration_t *reg, u32 context)
snat_interface_t * output_feature_interfaces
vl_api_ip6_address_t external_ip_address
vl_api_ip4_address_t last_ip_address
An API client registration, only in vpp/vlib.
vl_api_interface_index_t sw_if_index
vl_api_ip4_address_t ip_address
#define BAD_SW_IF_INDEX_LABEL
Add/delete NAT deterministic mapping.
vl_api_ip4_address_t ext_addr
static void vl_api_nat_ha_flush_t_handler(vl_api_nat_ha_flush_t *mp)
static void * vl_api_nat_set_timeouts_t_print(vl_api_nat_set_timeouts_t *mp, void *handle)
static int nat66_api_static_mapping_walk(nat66_static_mapping_t *m, void *arg)
vl_api_interface_index_t sw_if_index
static void * vl_api_nat66_interface_dump_t_print(vl_api_nat66_interface_dump_t *mp, void *handle)
static void vl_api_nat66_add_del_static_mapping_t_handler(vl_api_nat66_add_del_static_mapping_t *mp)
static void * vl_api_nat64_add_del_prefix_t_print(vl_api_nat64_add_del_prefix_t *mp, void *handle)
static void vl_api_nat64_add_del_interface_addr_t_handler(vl_api_nat64_add_del_interface_addr_t *mp)
Get HA failover/remote settings.
Dump interfaces with NAT44 feature.
int nat66_interface_add_del(u32 sw_if_index, u8 is_inside, u8 is_add)
void nat64_pool_addr_walk(nat64_pool_addr_walk_fn_t fn, void *ctx)
Walk NAT64 pool.
u32 ft_table_id
Table ID (hash key) for this FIB.
static void vlib_get_combined_counter(const vlib_combined_counter_main_t *cm, u32 index, vlib_counter_t *result)
Get the value of a combined counter, never called in the speed path Scrapes the entire set of per-thr...
static void vl_api_nat44_identity_mapping_dump_t_handler(vl_api_nat44_identity_mapping_dump_t *mp)
static void vl_api_nat_det_forward_t_handler(vl_api_nat_det_forward_t *mp)
vl_api_ip4_address_t ip_address
static void * vl_api_nat64_add_del_pool_addr_range_t_print(vl_api_nat64_add_del_pool_addr_range_t *mp, void *handle)
void nat44_add_del_address_dpo(ip4_address_t addr, u8 is_add)
Add/delete external address to FIB DPO (out2in DPO mode)
static void vl_api_nat_show_config_t_handler(vl_api_nat_show_config_t *mp)
sll srl srl sll sra u16x4 i
static void vl_api_nat44_add_del_lb_static_mapping_t_handler(vl_api_nat44_add_del_lb_static_mapping_t *mp)
u8 static_mapping_connection_tracking
Dump NAT44 load-balancing static mapping rules.
#define vec_free(V)
Free vector's memory (no header).
deterministic NAT definitions
NAT44 user's sessions response.
static void * vl_api_nat44_interface_dump_t_print(vl_api_nat44_interface_dump_t *mp, void *handle)
static void * vl_api_nat_det_map_dump_t_print(vl_api_nat_det_map_dump_t *mp, void *handle)
int nat64_add_del_prefix(ip6_address_t *prefix, u8 plen, u32 vrf_id, u8 is_add)
Add/delete NAT64 prefix.
u32 bib_buckets
config parameters
static void vl_api_nat44_interface_addr_dump_t_handler(vl_api_nat44_interface_addr_dump_t *mp)
NAT66 static mapping details response.
int snat_interface_add_del_output_feature(u32 sw_if_index, u8 is_inside, int is_del)
Enable/disable NAT44 output feature on the interface (postrouting NAT)
vl_api_ip4_address_t out_addr
vl_api_ip4_address_t ol_addr
vl_api_nat_config_flags_t flags
static void vl_api_nat64_add_del_prefix_t_handler(vl_api_nat64_add_del_prefix_t *mp)
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
vl_api_nat_config_flags_t flags
static void vl_api_nat64_prefix_dump_t_handler(vl_api_nat64_prefix_dump_t *mp)
#define pool_is_free_index(P, I)
Use free bitmap to query whether given index is free.
static void * vl_api_nat44_add_del_lb_static_mapping_t_print(vl_api_nat44_add_del_lb_static_mapping_t *mp, void *handle)
8 octet key, 8 octet key value pair
static vl_api_registration_t * vl_api_client_index_to_registration(u32 index)
vl_api_ip4_address_t ext_host_address
vl_api_ip4_address_t in_addr
static void send_nat44_lb_static_mapping_details(snat_static_mapping_t *m, vl_api_registration_t *reg, u32 context)
static void vl_api_nat44_lb_static_mapping_add_del_local_t_handler(vl_api_nat44_lb_static_mapping_add_del_local_t *mp)
u32 tcp_transitory_timeout
int nat_ha_set_listener(ip4_address_t *addr, u16 port, u32 path_mtu)
Set HA listener (local settings)
static void vl_api_nat_det_close_session_out_t_handler(vl_api_nat_det_close_session_out_t *mp)
static void send_nat44_static_map_resolve_details(snat_static_map_resolve_t *m, vl_api_registration_t *reg, u32 context)
static void vl_api_nat_det_add_del_map_t_handler(vl_api_nat_det_add_del_map_t *mp)
int snat_det_add_map(snat_main_t *sm, ip4_address_t *in_addr, u8 in_plen, ip4_address_t *out_addr, u8 out_plen, int is_add)
Add/delete deterministic NAT mapping.
u32 * auto_add_sw_if_indices
static int nat64_api_bib_walk(nat64_db_bib_entry_t *bibe, void *arg)
static void vl_api_nat66_static_mapping_dump_t_handler(vl_api_nat66_static_mapping_dump_t *mp)
static void * vl_api_nat44_add_del_static_mapping_t_print(vl_api_nat44_add_del_static_mapping_t *mp, void *handle)
static void vl_api_nat_det_close_session_in_t_handler(vl_api_nat_det_close_session_in_t *mp)
Get HA listener/local configuration reply.
static snat_det_map_t * snat_det_map_by_user(snat_main_t *sm, ip4_address_t *user_addr)
static void * vl_api_nat64_add_del_interface_addr_t_print(vl_api_nat64_add_del_interface_addr_t *mp, void *handle)
vl_api_nat44_lb_addr_port_t locals[local_num]
#define is_addr_only_static_mapping(sm)
Check if NAT static mapping is address only (1:1NAT).
int nat_ha_set_failover(ip4_address_t *addr, u16 port, u32 session_refresh_interval)
Set HA failover (remote settings)
void nat64_db_st_walk(nat64_db_t *db, u8 proto, nat64_db_st_walk_fn_t fn, void *ctx)
Walk NAT64 session table.
static void * vl_api_nat44_interface_add_del_output_feature_t_print(vl_api_nat44_interface_add_del_output_feature_t *mp, void *handle)
static void send_nat44_static_mapping_details(snat_static_mapping_t *m, vl_api_registration_t *reg, u32 context)
vl_api_registration_t * reg
static void * vl_api_nat_ha_get_failover_t_print(vl_api_nat_ha_get_failover_t *mp, void *handle)
NAT64 pool address details response.
static void vl_api_nat_ipfix_enable_disable_t_handler(vl_api_nat_ipfix_enable_disable_t *mp)
Dump NAT64 prefix details response.
static void send_nat_worker_details(u32 worker_index, vl_api_registration_t *reg, u32 context)
vl_api_ip4_address_t in_addr
static void vl_api_nat44_set_session_limit_t_handler(vl_api_nat44_set_session_limit_t *mp)
Set address and port assignment algorithm.
static void vl_api_nat_det_session_dump_t_handler(vl_api_nat_det_session_dump_t *mp)
static void * vl_api_nat44_add_del_identity_mapping_t_print(vl_api_nat44_add_del_identity_mapping_t *mp, void *handle)
Add/del NAT44 address range.
void nat_set_alloc_addr_and_port_range(u16 start_port, u16 end_port)
Set address and port assignment algorithm for port range.
nat64_db_bib_entry_t * nat64_db_bib_entry_by_index(nat64_db_t *db, u8 proto, u32 bibe_index)
Get BIB entry by index and protocol.
static void * vl_api_nat_get_mss_clamping_t_print(vl_api_nat_get_mss_clamping_t *mp, void *handle)
Close deterministic NAT session by inside address and port.
static void vl_api_nat64_interface_dump_t_handler(vl_api_nat64_interface_dump_t *mp)
static void * vl_api_nat44_static_mapping_dump_t_print(vl_api_nat44_static_mapping_dump_t *mp, void *handle)
#define clib_bitmap_free(v)
Free a bitmap.
Dump determinstic NAT sessions.
int nat64_add_del_pool_addr(u32 thread_index, ip4_address_t *addr, u32 vrf_id, u8 is_add)
Add/delete address to NAT64 pool.
static void * vl_api_nat_det_forward_t_print(vl_api_nat_det_forward_t *mp, void *handle)
static void vl_api_nat66_interface_dump_t_handler(vl_api_nat66_interface_dump_t *mp)
static void * vl_api_nat_set_mss_clamping_t_print(vl_api_nat_set_mss_clamping_t *mp, void *handle)
snat_address_t * twice_nat_addresses
void nat64_prefix_walk(nat64_prefix_walk_fn_t fn, void *ctx)
Walk NAT64 prefixes.
Set TCP MSS rewriting configuration.
vl_api_ip4_address_t o_addr
void nat64_interfaces_walk(nat64_interface_walk_fn_t fn, void *ctx)
Walk NAT64 interfaces.
vl_api_nat_config_flags_t flags
NAT64 global declarations.
counter_t bytes
byte counter
int nat64_set_tcp_timeouts(u32 trans, u32 est)
Set TCP session timeouts.
vlib_combined_counter_main_t session_counters
Session counters.
static void * vl_api_nat44_add_del_address_range_t_print(vl_api_nat44_add_del_address_range_t *mp, void *handle)
void nat66_interfaces_walk(nat66_interface_walk_fn_t fn, void *ctx)
vl_api_interface_index_t sw_if_index
Add/delete NAT44 load-balancing static mapping rule.
Dump NAT deterministic mappings.
Get TCP MSS rewriting configuration reply.
Show NAT plugin startup config reply.
Get outside address and port range from inside address.
int nat44_lb_static_mapping_add_del_local(ip4_address_t e_addr, u16 e_port, ip4_address_t l_addr, u16 l_port, nat_protocol_t proto, u32 vrf_id, u8 probability, u8 is_add)
static void vl_api_nat44_interface_dump_t_handler(vl_api_nat44_interface_dump_t *mp)
Dump interfaces with NAT66 feature.
Add/delete NAT44 static mapping.
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
static void * vl_api_nat44_add_del_interface_addr_t_print(vl_api_nat44_add_del_interface_addr_t *mp, void *handle)
static void vl_api_nat_set_log_level_t_handler(vl_api_nat_set_log_level_t *mp)
static void * vl_api_nat44_user_session_dump_t_print(vl_api_nat44_user_session_dump_t *mp, void *handle)
vl_api_ip4_address_t start_addr
#define is_out2in_only_static_mapping(sm)
Check if NAT static mapping match only out2in direction.
static_always_inline u8 nat_proto_to_ip_proto(nat_protocol_t nat_proto)
Dump NAT44 static mappings.
vl_api_interface_index_t external_sw_if_index
vl_api_interface_index_t sw_if_index
Deterministic NAT sessions reply.
static void * vl_api_nat44_set_session_limit_t_print(vl_api_nat44_set_session_limit_t *mp, void *handle)
static void vl_api_nat64_add_del_static_bib_t_handler(vl_api_nat64_add_del_static_bib_t *mp)
Dump interfaces with NAT64 feature.
NAT44 pool addresses interfaces details response.
snat_main_per_thread_data_t * per_thread_data
vl_api_interface_index_t sw_if_index
vl_api_interface_index_t sw_if_index
vl_api_ip4_address_t ip_address
static void vl_api_nat_set_mss_clamping_t_handler(vl_api_nat_set_mss_clamping_t *mp)
static nat44_lb_addr_port_t * unformat_nat44_lb_addr_port(vl_api_nat44_lb_addr_port_t *addr_port_pairs, u32 addr_port_pair_num)
vl_api_interface_index_t sw_if_index
fib_table_t * fib_table_get(fib_node_index_t index, fib_protocol_t proto)
Get a pointer to a FIB table.
vl_api_ip4_address_t ip_address
int nat66_static_mapping_add_del(ip6_address_t *l_addr, ip6_address_t *e_addr, u32 vrf_id, u8 is_add)
Enable/disable NAT IPFIX logging.
vl_api_ip4_address_t end_addr
snat_address_t * addresses
NAT44 user's sessions.
int snat_add_interface_address(snat_main_t *sm, u32 sw_if_index, int is_del, u8 twice_nat)
Add/delete NAT44 pool address from specific interface.
void nat_ha_get_failover(ip4_address_t *addr, u16 *port, u32 *session_refresh_interval)
Get HA failover/remote settings.
static void * vl_api_nat64_add_del_interface_t_print(vl_api_nat64_add_del_interface_t *mp, void *handle)
vl_api_ip4_address_t ip_address
vl_api_interface_index_t sw_if_index
static snat_det_session_t * snat_det_get_ses_by_out(snat_det_map_t *dm, ip4_address_t *in_addr, u64 out_key)
snat_get_worker_in2out_function_t * worker_in2out_cb
snat_static_map_resolve_t * to_resolve
static void increment_v4_address(ip4_address_t *a)
vl_api_ip4_address_t external_ip_address
ip4_main_t ip4_main
Global ip4 main structure.
int snat_add_static_mapping(ip4_address_t l_addr, ip4_address_t e_addr, u16 l_port, u16 e_port, u32 vrf_id, int addr_only, u32 sw_if_index, nat_protocol_t proto, int is_add, twice_nat_type_t twice_nat, u8 out2in_only, u8 *tag, u8 identity_nat)
Add/delete NAT44 static mapping.
static void vl_api_nat44_address_dump_t_handler(vl_api_nat44_address_dump_t *mp)
struct fib_table_t_ * fibs
Vector of FIBs.
vl_api_ip4_address_t inside_ip_address
vl_api_ip6_prefix_t prefix
#define vec_foreach(var, vec)
Vector iterator.
static void setup_message_id_table(snat_main_t *sm, api_main_t *am)
vl_api_ip4_address_t address
static void plugin_custom_dump_configure(snat_main_t *sm)
static void vl_api_nat44_interface_add_del_feature_t_handler(vl_api_nat44_interface_add_del_feature_t *mp)
int nat44_add_del_lb_static_mapping(ip4_address_t e_addr, u16 e_port, nat_protocol_t proto, nat44_lb_addr_port_t *locals, u8 is_add, twice_nat_type_t twice_nat, u8 out2in_only, u8 *tag, u32 affinity)
Add/delete static mapping with load-balancing (multiple backends)
nat66_static_mapping_t * sm
Static mapping pool.
static void vl_api_nat64_st_dump_t_handler(vl_api_nat64_st_dump_t *mp)
int snat_set_workers(uword *bitmap)
Set NAT plugin workers.
#define is_twice_nat_session(s)
Check if NAT session is twice NAT.
struct nat66_api_walk_ctx_t_ nat66_api_walk_ctx_t
vl_api_nat_config_flags_t flags
vl_api_ip4_address_t local_ip_address
static void * vl_api_nat_det_close_session_out_t_print(vl_api_nat_det_close_session_out_t *mp, void *handle)
static void * vl_api_nat44_interface_add_del_feature_t_print(vl_api_nat44_interface_add_del_feature_t *mp, void *handle)
Resync HA (resend existing sessions to new failover)
static void * vl_api_nat64_prefix_dump_t_print(vl_api_nat64_prefix_dump_t *mp, void *handle)
Get inside address from outside address and port.
vl_api_ip4_address_t user_addr
void nat_set_alloc_addr_and_port_mape(u16 psid, u16 psid_offset, u16 psid_length)
Set address and port assignment algorithm for MAP-E CE.
NAT66 global declarations.
vl_api_ip4_address_t in_addr
vl_api_nat_log_level_t log_level
Enable/disable NAT44 feature on the interface.
void nat64_db_bib_walk(nat64_db_t *db, u8 proto, nat64_db_bib_walk_fn_t fn, void *ctx)
Walk NAT64 BIB.
int nat64_add_del_static_bib_entry(ip6_address_t *in_addr, ip4_address_t *out_addr, u16 in_port, u16 out_port, u8 proto, u32 vrf_id, u8 is_add)
Add/delete static NAT64 BIB entry.
vl_api_interface_index_t sw_if_index
snat_session_t * sessions
vl_api_interface_index_t sw_if_index
static void vl_api_nat44_static_mapping_dump_t_handler(vl_api_nat44_static_mapping_dump_t *mp)
vl_api_ip4_address_t in_addr
vl_api_ip4_address_t out_addr
vl_api_nat44_lb_addr_port_t local
vl_api_ip6_address_t local_ip_address
Get HA listener/local configuration.
snat_interface_t * interfaces
vl_api_nat_config_flags_t flags
vl_api_ip4_address_t ip_address
#define VALIDATE_SW_IF_INDEX(mp)
A protocol Independent FIB table.
static void vl_api_nat44_interface_output_feature_dump_t_handler(vl_api_nat44_interface_output_feature_dump_t *mp)
Show NAT plugin startup config.
NAT44 address details response.
u16 vl_msg_api_get_msg_ids(const char *name, int n)
NAT64 session table details response.
static void vl_api_nat64_add_del_interface_t_handler(vl_api_nat64_add_del_interface_t *mp)
u32 tcp_established_timeout
static uword pool_elts(void *v)
Number of active elements in a pool.