Re: [PATCH v3 nft] Set/print standard chain priorities with textual names

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

 



Hi,

On Thu, Jun 21, 2018 at 11:26:37AM +0200, Máté Eckl wrote:
> On Thu, Jun 21, 2018 at 10:42:25AM +0200, Phil Sutter wrote:
> > Hi Máté,
> > 
> > On Tue, Jun 19, 2018 at 11:50:24AM +0200, Máté Eckl wrote:
> > [...]
> > > diff --git a/src/parser_bison.y b/src/parser_bison.y
> > > index 98bfeba..d753fd9 100644
> > > --- a/src/parser_bison.y
> > > +++ b/src/parser_bison.y
> > > @@ -21,6 +21,7 @@
> > >  #include <linux/netfilter/nf_conntrack_tuple_common.h>
> > >  #include <linux/netfilter/nf_nat.h>
> > >  #include <linux/netfilter/nf_log.h>
> > > +#include <linux/netfilter_ipv4.h>
> > >  #include <netinet/ip_icmp.h>
> > >  #include <netinet/icmp6.h>
> > >  #include <libnftnl/common.h>
> > > @@ -182,6 +183,8 @@ int nft_lex(void *, void *, void *);
> > >  %token AT			"@"
> > >  %token VMAP			"vmap"
> > >  
> > > +%token PLUS			"+"
> > > +
> > >  %token INCLUDE			"include"
> > >  %token DEFINE			"define"
> > >  %token REDEFINE			"redefine"
> > > @@ -521,7 +524,7 @@ int nft_lex(void *, void *, void *);
> > >  %destructor { handle_free(&$$); } table_spec tableid_spec chain_spec chainid_spec flowtable_spec chain_identifier ruleid_spec handle_spec position_spec rule_position ruleset_spec index_spec
> > >  %type <handle>			set_spec setid_spec set_identifier flowtable_identifier obj_spec objid_spec obj_identifier
> > >  %destructor { handle_free(&$$); } set_spec setid_spec set_identifier obj_spec objid_spec obj_identifier
> > > -%type <val>			family_spec family_spec_explicit chain_policy prio_spec
> > > +%type <val>			family_spec family_spec_explicit chain_policy prio_spec standard_prio
> > >  
> > >  %type <string>			dev_spec quota_unit
> > >  %destructor { xfree($$); }	dev_spec quota_unit
> > > @@ -1794,8 +1797,23 @@ hook_spec		:	TYPE		STRING		HOOK		STRING		dev_spec	PRIORITY	prio_spec
> > >  			}
> > >  			;
> > >  
> > > -prio_spec		:	NUM			{ $$ = $1; }
> > > -			|	DASH	NUM		{ $$ = -$2; }
> > > +prio_spec		:	NUM                 { $$ =   $1; }
> > > +			|	DASH	NUM             { $$ =  -$2; }
> > > +			|	standard_prio
> > > +			|	standard_prio PLUS NUM { $$ = $1 + $3; }
> > > +			|	standard_prio DASH NUM { $$ = $1 - $3; }
> > > +			;
> > > +
> > > +standard_prio	:	STRING
> > > +			{
> > > +				int tmp = chain_std_prio_lookup($1);
> > > +				if (tmp == NF_IP_PRI_LAST) {
> > > +					erec_queue(error(&@$, "priority name '%s' is invalid", $1),
> > > +						   state->msgs);
> > > +					YYERROR;
> > > +				}
> > > +				$$ = tmp;
> > > +			}
> > >  			;
> > 
> > I think you could simplify this by allowing for 'standard_prio' to
> > consist of an empty string which evaluates to the value 0. Then
> > 'prio_spec' would be just:
> > 
> > | prio_spec		:	standard_prio
> > | 			|	standard_prio PLUS NUM { $$ = $1 + $3; }
> > | 			|	standard_prio DASH NUM { $$ = $1 - $3; }
> > 
> 
> Interesting point. I think only the `DASH NUM` line can be ommitted this way,
> because this would make 'priority 5' miss the PLUS sign and thus fail.
> The actual solution seems much more unambiguous to me, so I'd like to keep it
> the way it is.

Ah, you're right. I somehow missed the case of positive numerical
priority. Considering this, I see no easier way than yours.

> By the way, there's a question I haven't met yet. Prio spec is used by not only
> hook_spec but also flowtable_block. Are these standard priorities applicable for
> flowtable priorities? Or should I make it specific to chains?

No idea, sorry.

Cheers, Phil
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Netfitler Users]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux