diff options
author | Florian Westphal <fw@strlen.de> | 2017-02-20 18:06:32 +0100 |
---|---|---|
committer | Florian Westphal <fw@strlen.de> | 2017-03-16 10:10:01 +0100 |
commit | 1ed84c4626973cee92e4a238ad55f7ba1f5af249 (patch) | |
tree | 629269b09c10be02699eb3686c7470404ee612bf /src/parser_bison.y | |
parent | aabb9c46ac4cfdff3aad136dd2ed7cb2bb0f9293 (diff) |
src: implement add/create/delete for ct helper objects
Signed-off-by: Florian Westphal <fw@strlen.de>
Acked-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src/parser_bison.y')
-rw-r--r-- | src/parser_bison.y | 63 |
1 files changed, 61 insertions, 2 deletions
diff --git a/src/parser_bison.y b/src/parser_bison.y index 1bcbff59..5d3d1069 100644 --- a/src/parser_bison.y +++ b/src/parser_bison.y @@ -583,8 +583,8 @@ static void location_update(struct location *loc, struct location *rhs, int n) %type <expr> and_rhs_expr exclusive_or_rhs_expr inclusive_or_rhs_expr %destructor { expr_free($$); } and_rhs_expr exclusive_or_rhs_expr inclusive_or_rhs_expr -%type <obj> counter_obj quota_obj -%destructor { obj_free($$); } counter_obj quota_obj +%type <obj> counter_obj quota_obj ct_obj_alloc +%destructor { obj_free($$); } counter_obj quota_obj ct_obj_alloc %type <expr> relational_expr %destructor { expr_free($$); } relational_expr @@ -840,6 +840,19 @@ add_cmd : TABLE table_spec { $$ = cmd_alloc(CMD_ADD, CMD_OBJ_QUOTA, &$2, &@$, $3); } + | CT STRING obj_spec ct_obj_alloc '{' ct_block '}' stmt_seperator + { + struct error_record *erec; + int type; + + erec = ct_objtype_parse(&@$, $2, &type); + if (erec != NULL) { + erec_queue(erec, state->msgs); + YYERROR; + } + + $$ = cmd_alloc_obj_ct(CMD_ADD, type, &$3, &@$, $4); + } ; replace_cmd : RULE ruleid_spec rule @@ -906,6 +919,19 @@ create_cmd : TABLE table_spec { $$ = cmd_alloc(CMD_CREATE, CMD_OBJ_QUOTA, &$2, &@$, $3); } + | CT STRING obj_spec ct_obj_alloc '{' ct_block '}' stmt_seperator + { + struct error_record *erec; + int type; + + erec = ct_objtype_parse(&@$, $2, &type); + if (erec != NULL) { + erec_queue(erec, state->msgs); + YYERROR; + } + + $$ = cmd_alloc_obj_ct(CMD_CREATE, type, &$3, &@$, $4); + } ; insert_cmd : RULE rule_position rule @@ -946,6 +972,19 @@ delete_cmd : TABLE table_spec { $$ = cmd_alloc(CMD_DELETE, CMD_OBJ_QUOTA, &$2, &@$, NULL); } + | CT STRING obj_spec ct_obj_alloc + { + struct error_record *erec; + int type; + + erec = ct_objtype_parse(&@$, $2, &type); + if (erec != NULL) { + erec_queue(erec, state->msgs); + YYERROR; + } + + $$ = cmd_alloc_obj_ct(CMD_DELETE, type, &$3, &@$, $4); + } ; list_cmd : TABLE table_spec @@ -1016,6 +1055,19 @@ list_cmd : TABLE table_spec { $$ = cmd_alloc(CMD_LIST, CMD_OBJ_MAP, &$2, &@$, NULL); } + | CT STRING obj_spec + { + struct error_record *erec; + int type; + + erec = ct_objtype_parse(&@$, $2, &type); + if (erec != NULL) { + erec_queue(erec, state->msgs); + YYERROR; + } + + $$ = cmd_alloc_obj_ct(CMD_LIST, type, &$3, &@$, NULL); + } | CT STRING TABLE table_spec { int cmd; @@ -2658,6 +2710,13 @@ ct_config : TYPE QUOTED_STRING PROTOCOL ct_l4protoname stmt_seperator } ; +ct_obj_alloc : + { + $$ = obj_alloc(&@$); + $$->type = NFT_OBJECT_CT_HELPER; + } + ; + relational_expr : expr /* implicit */ rhs_expr { $$ = relational_expr_alloc(&@$, OP_IMPLICIT, $1, $2); |