X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=ovn%2Flib%2Factions.c;h=581dbaef07e80c262648d56febed994c6dab9ae7;hb=5b84185b6ba2b23a6a2ee9b0887e65e3dbcc1348;hp=693b1c1081acc2a01e064269198ab3bb7e27d257;hpb=e769509208591fbe4f42ba098f98374ea8f78800;p=cascardo%2Fovs.git diff --git a/ovn/lib/actions.c b/ovn/lib/actions.c index 693b1c108..581dbaef0 100644 --- a/ovn/lib/actions.c +++ b/ovn/lib/actions.c @@ -183,6 +183,19 @@ parse_next_action(struct action_context *ctx) } } +/* Parses 'prerequisite' as an expression in the context of 'ctx', then adds it + * as a conjunction with the existing 'ctx->prereqs'. */ +static void +add_prerequisite(struct action_context *ctx, const char *prerequisite) +{ + struct expr *expr; + char *error; + + expr = expr_parse_string(prerequisite, ctx->symtab, &error); + ovs_assert(!error); + ctx->prereqs = expr_combine(EXPR_T_AND, ctx->prereqs, expr); +} + static void emit_ct(struct action_context *ctx, bool recirc_next, bool commit) { @@ -209,12 +222,7 @@ emit_ct(struct action_context *ctx, bool recirc_next, bool commit) ct->alg = 0; /* CT only works with IP, so set up a prerequisite. */ - struct expr *expr; - char *error; - - expr = expr_parse_string("ip", ctx->symtab, &error); - ovs_assert(!error); - ctx->prereqs = expr_combine(EXPR_T_AND, ctx->prereqs, expr); + add_prerequisite(ctx, "ip"); } static void @@ -249,9 +257,7 @@ parse_actions(struct action_context *ctx) emit_resubmit(ctx, ctx->output_ptable); } else if (lexer_match_id(ctx->lexer, "ip.ttl")) { if (lexer_match(ctx->lexer, LEX_T_DECREMENT)) { - struct expr *e = expr_parse_string("ip", ctx->symtab, - &ctx->error); - ctx->prereqs = expr_combine(EXPR_T_AND, ctx->prereqs, e); + add_prerequisite(ctx, "ip"); ofpact_put_DEC_TTL(ctx->ofpacts); } else { action_syntax_error(ctx, "expecting `--'");