Re: [PATCH nft] datatype: fix print of raw numerical symbol values

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Jun 16, 2019 at 10:55:49AM +0200, Florian Westphal wrote:
> The two rules:
> arp operation 1-2 accept
> arp operation 256-512 accept
> 
> are both shown as 256-512:
> 
>         chain in_public {
>                 arp operation 256-512 accept
>                 arp operation 256-512 accept
>                 meta mark "1"
>                 tcp flags 2,4
>         }
> 
> This is because range expression enforces numeric output,
> yet nft_print doesn't respect byte order.
> 
> Behave as if we had no symbol in the first place and call
> the base type print function instead.
> 
> This means we now respect format specifier as well:
> 	chain in_public {
>                 arp operation 1-2 accept
>                 arp operation 256-512 accept
>                 meta mark "0x00000001"

Hm, why is "1" turned into "0x00000001"?

I would expect quoted mark means: look at rt_marks.

Thanks!

>                 tcp flags 0x2,0x4
> 	}
> Without fix, added test case will fail:
> 'add rule arp test-arp input arp operation 1-2': 'arp operation 1-2' mismatches 'arp operation 256-512'
> 
> Signed-off-by: Florian Westphal <fw@xxxxxxxxx>
> ---
>   Note there is a discrepancy between output when we have a symbol and
>   when we do not.
> 
>   Example, add rule:
>   meta mark "foo"
> 
>   (with '1 "foo"' in rt_marks), nft will print quotes when symbol
>   printing is inhibited via -n, but elides them in case the symbol
>   is not available.

Then, we also need a patch to regard NFT_CTX_OUTPUT_NUMERIC_ALL, right?

>  src/datatype.c                    | 2 +-
>  tests/py/arp/arp.t                | 1 +
>  tests/py/arp/arp.t.payload        | 6 ++++++
>  tests/py/arp/arp.t.payload.netdev | 8 ++++++++
>  4 files changed, 16 insertions(+), 1 deletion(-)
> 
> diff --git a/src/datatype.c b/src/datatype.c
> index 8ae3aa1c3f90..d193ccc0a659 100644
> --- a/src/datatype.c
> +++ b/src/datatype.c
> @@ -198,7 +198,7 @@ void symbolic_constant_print(const struct symbol_table *tbl,
>  		nft_print(octx, "\"");
>  
>  	if (nft_output_numeric_symbol(octx))
> -		nft_print(octx, "%" PRIu64 "", val);
> +		expr_basetype(expr)->print(expr, octx);
>  	else
>  		nft_print(octx, "%s", s->identifier);
>  





[Index of Archives]     [Netfitler Users]     [Berkeley Packet Filter]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux