Hi Fernando,

On Tue, May 14, 2019 at 05:43:39PM +0200, Fernando Fernandez Mancera wrote:
> This last patch does not work. The first one works fine with a string as
> chain name.
> 
[...]
> 
> But when trying to execute "# nft -f file.nft", being file.nft:
> 
> > define dest = ber
> > add rule ip foo bar jump $dest
> 
> I am getting the following error:
> 
> file.nft:3:26-30: Error: Can't parse symbolic netfilter verdict expressions
> add rule ip foo bar jump $dest
>                        ^^^^^
> This error comes from symbol_parse() at expr_evaluate_symbol() after the
> expr_evaluate() call added in the first patch.

Yes, symbol_expr is used only for symbolic constants, therefore
symbol_parse() is very restrictive.

[...]
> > diff --git a/src/parser_bison.y b/src/parser_bison.y
> > index 69b5773..42fd71f 100644
> > --- a/src/parser_bison.y
> > +++ b/src/parser_bison.y
> > @@ -3841,7 +3841,13 @@ verdict_expr         :       ACCEPT
> >                     }
> >                     ;
> >  
> > -chain_expr         :       identifier
> > +chain_expr         :       variable_expr
> > +                   {
> > +                           $$ = symbol_expr_alloc(&@$, SYMBOL_VALUE,
> > +                                                  current_scope(state),
> > +                                                  $1->sym->identifier);
> > +                   }

I didn't test it, but you can probably just drop the curly braces and
everything inside here. 'variable_expr' already turns into an
expression (a variable_expr, not symbol_expr), which is probably what
you want.

> > +                   |       identifier
> >                     {
> >                             $$ = constant_expr_alloc(&@$, &string_type,
> >                                                      BYTEORDER_HOST_ENDIAN,
> > 
> 

Cheers, Phil

Reply via email to