vlib_cli_output (vm, " %U %s", format_vnet_sw_interface_name, vnm,
vnet_get_sw_interface (vnm, i->sw_if_index),
- i->is_inside ? "in" : "out");
+ (nat_interface_is_inside (i)
+ && nat_interface_is_outside (i)) ? "in out" :
+ nat_interface_is_inside (i) ? "in" : "out");
return 0;
}
u8 is_add = 1;
ip6_address_t in_addr;
ip4_address_t out_addr;
- u16 in_port = 0;
- u16 out_port = 0;
+ u32 in_port = 0;
+ u32 out_port = 0;
u32 vrf_id = 0, protocol;
snat_protocol_t proto = 0;
u8 p = 0;
}
rv =
- nat64_add_del_static_bib_entry (&in_addr, &out_addr, in_port, out_port, p,
- vrf_id, is_add);
+ nat64_add_del_static_bib_entry (&in_addr, &out_addr, (u16) in_port,
+ (u16) out_port, p, vrf_id, is_add);
switch (rv)
{
if (nat64_set_tcp_timeouts (tcp_trans, tcp_est, tcp_incoming_syn))
{
error =
- clib_error_return (0, "Invalid TCP transitory tiemout value");
+ clib_error_return (0,
+ "Invalid TCP transitory timeouts value");
goto done;
}
}
{
error =
clib_error_return (0,
- "Invalid TCP established tiemout value");
+ "Invalid TCP established timeouts value");
goto done;
}
}
{
error =
clib_error_return (0,
- "Invalid TCP incoming SYN tiemout value");
+ "Invalid TCP incoming SYN timeouts value");
goto done;
}
}
vlib_cli_command_t * cmd)
{
nat64_main_t *nm = &nat64_main;
+ vnet_main_t *vnm = vnet_get_main ();
clib_error_t *error = 0;
unformat_input_t _line_input, *line_input = &_line_input;
u8 is_add = 1;
- u32 vrf_id = 0;
+ u32 vrf_id = 0, sw_if_index = ~0;
ip6_address_t prefix;
u32 plen = 0;
int rv;
;
else if (unformat (line_input, "del"))
is_add = 0;
+ else
+ if (unformat
+ (line_input, "interface %U", unformat_vnet_sw_interface, vnm,
+ &sw_if_index))
+ ;
else
{
error = clib_error_return (0, "unknown input: '%U'",
break;
}
+ /*
+ * Add RX interface route, whenNAT isn't running on the real input
+ * interface
+ */
+ if (sw_if_index != ~0)
+ {
+ u32 fib_index;
+ fib_prefix_t fibpfx = {
+ .fp_len = plen,
+ .fp_proto = FIB_PROTOCOL_IP6,
+ .fp_addr = {.ip6 = prefix}
+ };
+
+ if (is_add)
+ {
+ fib_index = fib_table_find_or_create_and_lock (FIB_PROTOCOL_IP6,
+ vrf_id,
+ FIB_SOURCE_PLUGIN_HI);
+ fib_table_entry_update_one_path (fib_index, &fibpfx,
+ FIB_SOURCE_PLUGIN_HI,
+ FIB_ENTRY_FLAG_NONE, DPO_PROTO_IP6,
+ NULL, sw_if_index, ~0, 0, NULL,
+ FIB_ROUTE_PATH_INTF_RX);
+ }
+ else
+ {
+ fib_index = fib_table_find (FIB_PROTOCOL_IP6, vrf_id);
+ fib_table_entry_path_remove (fib_index, &fibpfx,
+ FIB_SOURCE_PLUGIN_HI, DPO_PROTO_IP6,
+ NULL, sw_if_index, ~0, 1,
+ FIB_ROUTE_PATH_INTF_RX);
+ fib_table_unlock (fib_index, FIB_PROTOCOL_IP6,
+ FIB_SOURCE_PLUGIN_HI);
+ }
+ }
+
done:
unformat_free (line_input);
/*?
* @cliexpar
- * @cliexstart{show nat64 tiemouts}
+ * @cliexstart{show nat64 timeoutss}
* Show NAT64 session timeouts:
* vpp# show nat64 timeouts
* NAT64 session timeouts:
?*/
VLIB_CLI_COMMAND (show_nat64_timeouts_command, static) = {
.path = "show nat64 timeouts",
- .short_help = "show nat64 temeouts",
+ .short_help = "show nat64 timeouts",
.function = nat64_show_timeouts_command_fn,
};
VLIB_CLI_COMMAND (nat64_add_del_prefix_command, static) = {
.path = "nat64 add prefix",
.short_help = "nat64 add prefix <ip6-prefix>/<plen> [tenant-vrf <vrf-id>] "
- "[del]",
+ "[del] [interface <interface]",
.function = nat64_add_del_prefix_command_fn,
};