ip: Add unformat for flow_hash_config

Type: improvement

This also makes the is_white_space function
public

Change-Id: Ifc1c0d4509f3ecae14f09bb5fa7a2eea33c49b09
Signed-off-by: Nathan Skrzypczak <nathan.skrzypczak@gmail.com>
This commit is contained in:
Nathan Skrzypczak
2022-03-23 18:08:53 +01:00
committed by Damjan Marion
parent 8e0af7a7ff
commit e2d0c6e51e
4 changed files with 53 additions and 17 deletions

View File

@ -128,6 +128,42 @@ format_ip_flow_hash_config (u8 * s, va_list * args)
return s;
}
uword
unformat_ip_flow_hash_config (unformat_input_t *input, va_list *args)
{
flow_hash_config_t *flow_hash_config = va_arg (*args, flow_hash_config_t *);
uword start_index = unformat_check_input (input);
int matched_once = 0;
if (unformat (input, "default"))
{
*flow_hash_config = IP_FLOW_HASH_DEFAULT;
return 1;
}
while (!unformat_is_eof (input) &&
!is_white_space (unformat_peek_input (input)))
{
if (unformat (input, "%_,"))
;
#define _(a, b) \
else if (unformat (input, "%_" #a)) \
{ \
*flow_hash_config |= b; \
matched_once = 1; \
}
foreach_flow_hash_bit_v1
#undef _
else
{
/* Roll back to our start */
input->index = start_index;
return 0;
}
}
return matched_once;
}
u8 *
format_ip_adjacency_packet_data (u8 * s, va_list * args)
{

View File

@ -162,7 +162,7 @@ typedef struct ip_lookup_main_t
} ip_lookup_main_t;
u8 *format_ip_flow_hash_config (u8 * s, va_list * args);
uword unformat_ip_flow_hash_config (unformat_input_t *input, va_list *args);
always_inline void
ip_lookup_set_buffer_fib_index (u32 * fib_index_by_sw_if_index,

View File

@ -200,6 +200,22 @@ unformat_put_input (unformat_input_t * input)
input->index -= 1;
}
always_inline uword
is_white_space (uword c)
{
switch (c)
{
case ' ':
case '\t':
case '\n':
case '\r':
return 1;
default:
return 0;
}
}
/* Peek current input character without advancing. */
always_inline uword
unformat_peek_input (unformat_input_t * input)

View File

@ -70,22 +70,6 @@ _unformat_fill_input (unformat_input_t * i)
return i->index;
}
always_inline uword
is_white_space (uword c)
{
switch (c)
{
case ' ':
case '\t':
case '\n':
case '\r':
return 1;
default:
return 0;
}
}
/* Format function for dumping input stream. */
__clib_export u8 *
format_unformat_error (u8 * s, va_list * va)