From 59b792ffb1d77309b0ab17e441fd14237adb74db Mon Sep 17 00:00:00 2001 From: Mohammed Hawari Date: Tue, 1 Dec 2020 11:30:57 +0100 Subject: tunnel: add cli support for encap_decap flags Change-Id: I2bf6ba325975309183dba1e14e9519c944710752 Signed-off-by: Mohammed Hawari Type: improvement --- src/vnet/gre/interface.c | 7 +++++++ src/vnet/ipip/ipip_cli.c | 9 +++++++-- src/vnet/tunnel/tunnel.c | 14 ++++++++++++++ src/vnet/tunnel/tunnel.h | 4 ++-- 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/vnet/gre/interface.c b/src/vnet/gre/interface.c index ad0efde4345..5e8ad461d93 100644 --- a/src/vnet/gre/interface.c +++ b/src/vnet/gre/interface.c @@ -593,6 +593,7 @@ create_gre_tunnel_command_fn (vlib_main_t * vm, u32 outer_table_id = 0; gre_tunnel_type_t t_type = GRE_TUNNEL_TYPE_L3; tunnel_mode_t t_mode = TUNNEL_MODE_P2P; + tunnel_encap_decap_flags_t flags = TUNNEL_ENCAP_DECAP_FLAG_NONE; u32 session_id = 0; int rv; u8 is_add = 1; @@ -621,6 +622,11 @@ create_gre_tunnel_command_fn (vlib_main_t * vm, t_type = GRE_TUNNEL_TYPE_TEB; else if (unformat (line_input, "erspan %d", &session_id)) t_type = GRE_TUNNEL_TYPE_ERSPAN; + else + if (unformat + (line_input, "flags %U", unformat_tunnel_encap_decap_flags, + &flags)) + ; else { error = clib_error_return (0, "unknown input `%U'", @@ -662,6 +668,7 @@ create_gre_tunnel_command_fn (vlib_main_t * vm, a->session_id = session_id; a->is_ipv6 = !ip46_address_is_ip4 (&src); a->instance = instance; + a->flags = flags; clib_memcpy (&a->src, &src, sizeof (a->src)); clib_memcpy (&a->dst, &dst, sizeof (a->dst)); diff --git a/src/vnet/ipip/ipip_cli.c b/src/vnet/ipip/ipip_cli.c index 5e049af3426..872fb33117f 100644 --- a/src/vnet/ipip/ipip_cli.c +++ b/src/vnet/ipip/ipip_cli.c @@ -35,6 +35,7 @@ create_ipip_tunnel_command_fn (vlib_main_t * vm, clib_error_t *error = NULL; bool ip4_set = false, ip6_set = false; tunnel_mode_t mode = TUNNEL_MODE_P2P; + tunnel_encap_decap_flags_t flags = TUNNEL_ENCAP_DECAP_FLAG_NONE; /* Get a line of input. */ if (!unformat_user (input, unformat_line_input, line_input)) @@ -74,6 +75,11 @@ create_ipip_tunnel_command_fn (vlib_main_t * vm, } else if (unformat (line_input, "outer-table-id %d", &table_id)) ; + else + if (unformat + (line_input, "flags %U", unformat_tunnel_encap_decap_flags, + &flags)) + ; else { error = @@ -109,8 +115,7 @@ create_ipip_tunnel_command_fn (vlib_main_t * vm, &src, &dst, fib_index, - TUNNEL_ENCAP_DECAP_FLAG_NONE, - IP_DSCP_CS0, mode, &sw_if_index); + flags, IP_DSCP_CS0, mode, &sw_if_index); } switch (rv) diff --git a/src/vnet/tunnel/tunnel.c b/src/vnet/tunnel/tunnel.c index 96d7fd12b52..38bde34e7f2 100644 --- a/src/vnet/tunnel/tunnel.c +++ b/src/vnet/tunnel/tunnel.c @@ -62,6 +62,20 @@ format_tunnel_encap_decap_flags (u8 * s, va_list * args) return (s); } +uword +unformat_tunnel_encap_decap_flags (unformat_input_t * input, va_list * args) +{ + tunnel_encap_decap_flags_t *f = + va_arg (*args, tunnel_encap_decap_flags_t *); +#define _(a,b,c) if (unformat(input, b)) {\ + *f |= TUNNEL_ENCAP_DECAP_FLAG_##a;\ + return 1;\ + } + forech_tunnel_encap_decap_flag; +#undef _ + return 0; +} + /* * fd.io coding-style-patch-verification: ON diff --git a/src/vnet/tunnel/tunnel.h b/src/vnet/tunnel/tunnel.h index f23a3d41924..6c97fc13ab4 100644 --- a/src/vnet/tunnel/tunnel.h +++ b/src/vnet/tunnel/tunnel.h @@ -55,9 +55,9 @@ typedef enum tunnel_encap_decap_flags_t_ #define TUNNEL_FLAG_MASK (0x1f) extern u8 *format_tunnel_encap_decap_flags (u8 * s, va_list * args); - +extern uword +unformat_tunnel_encap_decap_flags (unformat_input_t * input, va_list * args); #endif - /* * fd.io coding-style-patch-verification: ON * -- cgit 1.2.3-korg