Re: [PATCH v4 nft] Set/print standard chain prios with textual names

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

 



On Thu, Aug 02, 2018 at 06:49:59PM +0200, Máté Eckl wrote:
> On Wed, Aug 01, 2018 at 06:50:14PM +0200, Máté Eckl wrote:
> [...]
> > > > > > 
> > > > > > Could you store the string plus offset instead of building this
> > > > > > string that you need to parse again from the evaluation phase?
> > > > > > 
> > > > > > Probably you could reuse the existing priority integer field, then, if
> > > > > > the label is non-NULL, then it means the priority integer becomes an
> > > > > > offset.
> 
> I tried another way of doing this. I think it will be good if you don't mind
> adding a new attribute to the parser's union. I have attached the diff for the
> parser, I'd like to test it a bit more before sending a new version of the
> patch.
> 
> I also changed the chain and flowtable priority attributes to prio_spec and this
> way it is quite simple in the parser and in evaluate.c.

Thanks, this looks fine indeed.

> diff --git a/src/parser_bison.y b/src/parser_bison.y
> index 98bfeba..73af3bc 100644
> --- a/src/parser_bison.y
> +++ b/src/parser_bison.y
> @@ -153,6 +153,7 @@ int nft_lex(void *, void *, void *);
>  	const struct datatype	*datatype;
>  	struct handle_spec	handle_spec;
>  	struct position_spec	position_spec;
> +	struct prio_spec	prio_spec;
>  	const struct exthdr_desc *exthdr_desc;
>  }
>  
> @@ -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"
> @@ -522,6 +525,7 @@ int nft_lex(void *, void *, void *);
>  %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 <prio_spec>		extended_prio_spec
>  
>  %type <string>			dev_spec quota_unit
>  %destructor { xfree($$); }	dev_spec quota_unit
> @@ -1633,7 +1637,7 @@ flowtable_block_alloc	:	/* empty */
>  flowtable_block		:	/* empty */	{ $$ = $<flowtable>-1; }
>  			|	flowtable_block	common_block
>  			|	flowtable_block	stmt_separator
> -			|	flowtable_block	HOOK		STRING	PRIORITY        prio_spec	stmt_separator
> +			|	flowtable_block	HOOK		STRING	PRIORITY	extended_prio_spec	stmt_separator
>  			{
>  				$$->hookstr	= chain_hookname_lookup($3);
>  				if ($$->hookstr == NULL) {
> @@ -1766,7 +1770,7 @@ type_identifier		:	STRING	{ $$ = $1; }
>  			|	CLASSID { $$ = xstrdup("classid"); }
>  			;
>  
> -hook_spec		:	TYPE		STRING		HOOK		STRING		dev_spec	PRIORITY	prio_spec
> +hook_spec		:	TYPE		STRING		HOOK		STRING		dev_spec	PRIORITY	extended_prio_spec
>  			{
>  				const char *chain_type = chain_type_name_lookup($2);
>  
> @@ -1788,9 +1792,37 @@ hook_spec		:	TYPE		STRING		HOOK		STRING		dev_spec	PRIORITY	prio_spec
>  				}
>  				xfree($4);
>  
> -				$<chain>0->dev		= $5;
> -				$<chain>0->priority	= $7;
> -				$<chain>0->flags	|= CHAIN_F_BASECHAIN;
> +				$<chain>0->dev = $5;
> +				$<chain>0->priority = $7;
> +				$<chain>0->flags |= CHAIN_F_BASECHAIN;
> +			}
> +			;
> +
> +extended_prio_spec	:	prio_spec
> +			{
> +				struct prio_spec spec = {0};
> +				spec.num = $1;
> +				$$ = spec;
> +			}
> +			|	STRING
> +			{
> +				struct prio_spec spec = {0};
> +				spec.str = xstrdup($1);
> +				$$ = spec;
> +			}
> +			|	STRING PLUS NUM
> +			{
> +				struct prio_spec spec = {0};
> +				spec.num = $3;
> +				spec.str = xstrdup($1);
> +				$$ = spec;
> +			}
> +			|	STRING DASH NUM
> +			{
> +				struct prio_spec spec = {0};
> +				spec.num = -$3;
> +				spec.str = xstrdup($1);
> +				$$ = spec;
>  			}
>  			;
>  

--
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