summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2016-03-15 17:25:22 +0100
committerPablo Neira Ayuso <pablo@netfilter.org>2016-03-15 17:27:57 +0100
commit6df0261c5cec232d3b37c553d62d148b3d8805e5 (patch)
tree6bf2c390eb4a56c7a4504363e1b65e6b4466c253 /src
parentb7cb6915a88f41135ed4cff0a0216baf158cedb6 (diff)
parser_bison: simplify hook_spec rule
Consolidate this rule by introducing the dev_spec and prio_spec, we save 50 LOC with this patch. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src')
-rw-r--r--src/parser_bison.y66
1 files changed, 15 insertions, 51 deletions
diff --git a/src/parser_bison.y b/src/parser_bison.y
index 90978ab6..24c09698 100644
--- a/src/parser_bison.y
+++ b/src/parser_bison.y
@@ -423,7 +423,10 @@ static void location_update(struct location *loc, struct location *rhs, int n)
%destructor { handle_free(&$$); } table_spec chain_spec chain_identifier ruleid_spec ruleset_spec
%type <handle> set_spec set_identifier
%destructor { handle_free(&$$); } set_spec set_identifier
-%type <val> handle_spec family_spec family_spec_explicit position_spec chain_policy
+%type <val> handle_spec family_spec family_spec_explicit position_spec chain_policy prio_spec
+
+%type <string> dev_spec
+%destructor { xfree($$); } dev_spec
%type <table> table_block_alloc table_block
%destructor { close_scope(state); table_free($$); } table_block_alloc
@@ -1096,41 +1099,7 @@ type_identifier : STRING { $$ = $1; }
| MARK { $$ = xstrdup("mark"); }
;
-hook_spec : TYPE STRING HOOK STRING PRIORITY NUM
- {
- $<chain>0->type = chain_type_name_lookup($2);
- if ($<chain>0->type == NULL) {
- erec_queue(error(&@2, "unknown chain type %s", $2),
- state->msgs);
- YYERROR;
- }
- $<chain>0->hookstr = chain_hookname_lookup($4);
- if ($<chain>0->hookstr == NULL) {
- erec_queue(error(&@4, "unknown chain hook %s", $4),
- state->msgs);
- YYERROR;
- }
- $<chain>0->priority = $6;
- $<chain>0->flags |= CHAIN_F_BASECHAIN;
- }
- | TYPE STRING HOOK STRING PRIORITY DASH NUM
- {
- $<chain>0->type = chain_type_name_lookup($2);
- if ($<chain>0->type == NULL) {
- erec_queue(error(&@2, "unknown type name %s", $2),
- state->msgs);
- YYERROR;
- }
- $<chain>0->hookstr = chain_hookname_lookup($4);
- if ($<chain>0->hookstr == NULL) {
- erec_queue(error(&@4, "unknown hook name %s", $4),
- state->msgs);
- YYERROR;
- }
- $<chain>0->priority = -$7;
- $<chain>0->flags |= CHAIN_F_BASECHAIN;
- }
- | TYPE STRING HOOK STRING DEVICE STRING PRIORITY NUM
+hook_spec : TYPE STRING HOOK STRING dev_spec PRIORITY prio_spec
{
$<chain>0->type = chain_type_name_lookup($2);
if ($<chain>0->type == NULL) {
@@ -1144,25 +1113,20 @@ hook_spec : TYPE STRING HOOK STRING PRIORITY NUM
state->msgs);
YYERROR;
}
- $<chain>0->dev = $6;
- $<chain>0->priority = $8;
- $<chain>0->flags |= CHAIN_F_BASECHAIN;
- }
- | TYPE STRING HOOK STRING DEVICE STRING PRIORITY DASH NUM
- {
- $<chain>0->type = chain_type_name_lookup($2);
- if ($<chain>0->type == NULL) {
- erec_queue(error(&@2, "unknown type name %s", $2),
- state->msgs);
- YYERROR;
- }
- $<chain>0->hookstr = chain_hookname_lookup($4);
- $<chain>0->dev = $6;
- $<chain>0->priority = -$9;
+ $<chain>0->dev = $5;
+ $<chain>0->priority = $7;
$<chain>0->flags |= CHAIN_F_BASECHAIN;
}
;
+prio_spec : NUM { $$ = $1; }
+ | DASH NUM { $$ = -$2; }
+ ;
+
+dev_spec : DEVICE STRING { $$ = $2; }
+ | /* empty */ { $$ = NULL; }
+ ;
+
policy_spec : POLICY chain_policy
{
if ($<chain>0->policy != -1) {