Acked-by: Justin Pettit <jpet...@ovn.org> --Justin
> On Dec 8, 2015, at 5:08 PM, Ben Pfaff <b...@ovn.org> wrote: > > This will have another user in an upcoming commit. > > Signed-off-by: Ben Pfaff <b...@ovn.org> > --- > ovn/lib/actions.c | 70 +++++++++++++++++++++++++++++++------------------------ > 1 file changed, 39 insertions(+), 31 deletions(-) > > diff --git a/ovn/lib/actions.c b/ovn/lib/actions.c > index 581dbae..6bc452a 100644 > --- a/ovn/lib/actions.c > +++ b/ovn/lib/actions.c > @@ -52,6 +52,8 @@ struct action_context { > struct expr *prereqs; /* Prerequisites to apply to match. */ > }; > > +static bool parse_action(struct action_context *); > + > static bool > action_error_handle_common(struct action_context *ctx) > { > @@ -225,6 +227,42 @@ emit_ct(struct action_context *ctx, bool recirc_next, > bool commit) > add_prerequisite(ctx, "ip"); > } > > +static bool > +parse_action(struct action_context *ctx) > +{ > + if (ctx->lexer->token.type != LEX_T_ID) { > + action_syntax_error(ctx, NULL); > + return false; > + } > + > + enum lex_type lookahead = lexer_lookahead(ctx->lexer); > + if (lookahead == LEX_T_EQUALS || lookahead == LEX_T_EXCHANGE > + || lookahead == LEX_T_LSQUARE) { > + parse_set_action(ctx); > + } else if (lexer_match_id(ctx->lexer, "next")) { > + parse_next_action(ctx); > + } else if (lexer_match_id(ctx->lexer, "output")) { > + emit_resubmit(ctx, ctx->output_ptable); > + } else if (lexer_match_id(ctx->lexer, "ip.ttl")) { > + if (lexer_match(ctx->lexer, LEX_T_DECREMENT)) { > + add_prerequisite(ctx, "ip"); > + ofpact_put_DEC_TTL(ctx->ofpacts); > + } else { > + action_syntax_error(ctx, "expecting `--'"); > + } > + } else if (lexer_match_id(ctx->lexer, "ct_next")) { > + emit_ct(ctx, true, false); > + } else if (lexer_match_id(ctx->lexer, "ct_commit")) { > + emit_ct(ctx, false, true); > + } else { > + action_syntax_error(ctx, "expecting action"); > + } > + if (!lexer_match(ctx->lexer, LEX_T_SEMICOLON)) { > + action_syntax_error(ctx, "expecting ';'"); > + } > + return !ctx->error; > +} > + > static void > parse_actions(struct action_context *ctx) > { > @@ -242,37 +280,7 @@ parse_actions(struct action_context *ctx) > } > > while (ctx->lexer->token.type != LEX_T_END) { > - if (ctx->lexer->token.type != LEX_T_ID) { > - action_syntax_error(ctx, NULL); > - break; > - } > - > - enum lex_type lookahead = lexer_lookahead(ctx->lexer); > - if (lookahead == LEX_T_EQUALS || lookahead == LEX_T_EXCHANGE > - || lookahead == LEX_T_LSQUARE) { > - parse_set_action(ctx); > - } else if (lexer_match_id(ctx->lexer, "next")) { > - parse_next_action(ctx); > - } else if (lexer_match_id(ctx->lexer, "output")) { > - emit_resubmit(ctx, ctx->output_ptable); > - } else if (lexer_match_id(ctx->lexer, "ip.ttl")) { > - if (lexer_match(ctx->lexer, LEX_T_DECREMENT)) { > - add_prerequisite(ctx, "ip"); > - ofpact_put_DEC_TTL(ctx->ofpacts); > - } else { > - action_syntax_error(ctx, "expecting `--'"); > - } > - } else if (lexer_match_id(ctx->lexer, "ct_next")) { > - emit_ct(ctx, true, false); > - } else if (lexer_match_id(ctx->lexer, "ct_commit")) { > - emit_ct(ctx, false, true); > - } else { > - action_syntax_error(ctx, "expecting action"); > - } > - if (!lexer_match(ctx->lexer, LEX_T_SEMICOLON)) { > - action_syntax_error(ctx, "expecting ';'"); > - } > - if (ctx->error) { > + if (!parse_action(ctx)) { > return; > } > } > -- > 2.1.3 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev