diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2016-03-15 17:25:22 +0100 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2016-03-15 17:27:57 +0100 |
commit | 6df0261c5cec232d3b37c553d62d148b3d8805e5 (patch) | |
tree | 6bf2c390eb4a56c7a4504363e1b65e6b4466c253 /src | |
parent | b7cb6915a88f41135ed4cff0a0216baf158cedb6 (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.y | 66 |
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) { |