From 1ed84c4626973cee92e4a238ad55f7ba1f5af249 Mon Sep 17 00:00:00 2001 From: Florian Westphal Date: Mon, 20 Feb 2017 18:06:32 +0100 Subject: src: implement add/create/delete for ct helper objects Signed-off-by: Florian Westphal Acked-by: Pablo Neira Ayuso --- src/parser_bison.y | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 61 insertions(+), 2 deletions(-) (limited to 'src/parser_bison.y') 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 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 counter_obj quota_obj -%destructor { obj_free($$); } counter_obj quota_obj +%type counter_obj quota_obj ct_obj_alloc +%destructor { obj_free($$); } counter_obj quota_obj ct_obj_alloc %type 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); -- cgit v1.2.3