diff options
author | Mohammed Hawari <mohammed@hawari.fr> | 2020-12-01 11:30:57 +0100 |
---|---|---|
committer | Neale Ranns <nranns@cisco.com> | 2020-12-08 16:38:01 +0000 |
commit | 59b792ffb1d77309b0ab17e441fd14237adb74db (patch) | |
tree | f6ea354d07103861147b8e70015eb3d7fc9e50f5 | |
parent | d2fb601022e25055211f6e6ccb960758b8490073 (diff) |
tunnel: add cli support for encap_decap flags
Change-Id: I2bf6ba325975309183dba1e14e9519c944710752
Signed-off-by: Mohammed Hawari <mohammed@hawari.fr>
Type: improvement
-rw-r--r-- | src/vnet/gre/interface.c | 7 | ||||
-rw-r--r-- | src/vnet/ipip/ipip_cli.c | 9 | ||||
-rw-r--r-- | src/vnet/tunnel/tunnel.c | 14 | ||||
-rw-r--r-- | 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; @@ -622,6 +623,11 @@ create_gre_tunnel_command_fn (vlib_main_t * vm, 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'", format_unformat_error, line_input); @@ -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)) @@ -75,6 +76,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 = clib_error_return (0, "unknown input `%U'", format_unformat_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 * |