Possibly the ofputil_decode_action() interface should be rethought now that ofputil_action_code has an invalid value.
Signed-off-by: Ben Pfaff <b...@nicira.com> --- lib/ofp-parse.c | 3 +++ lib/ofp-print.c | 3 +++ lib/ofp-util.c | 7 +++++++ lib/ofp-util.h | 3 ++- ofproto/ofproto-dpif.c | 3 +++ 5 files changed, 18 insertions(+), 1 deletions(-) diff --git a/lib/ofp-parse.c b/lib/ofp-parse.c index 73a70c6..1d331bb 100644 --- a/lib/ofp-parse.c +++ b/lib/ofp-parse.c @@ -323,6 +323,9 @@ parse_named_action(enum ofputil_action_code code, const struct flow *flow, struct ofp_action_tp_port *oata; switch (code) { + case OFPUTIL_ACTION_INVALID: + NOT_REACHED(); + case OFPUTIL_OFPAT10_OUTPUT: parse_output(b, arg); break; diff --git a/lib/ofp-print.c b/lib/ofp-print.c index 9f77c5a..94bdc9a 100644 --- a/lib/ofp-print.c +++ b/lib/ofp-print.c @@ -183,6 +183,9 @@ ofp_print_action(struct ds *s, const union ofp_action *a, uint16_t port; switch (code) { + case OFPUTIL_ACTION_INVALID: + NOT_REACHED(); + case OFPUTIL_OFPAT10_OUTPUT: port = ntohs(a->output.port); if (port < OFPP_MAX) { diff --git a/lib/ofp-util.c b/lib/ofp-util.c index 6d820b2..4137df6 100644 --- a/lib/ofp-util.c +++ b/lib/ofp-util.c @@ -3700,6 +3700,9 @@ validate_actions(const union ofp_action *actions, size_t n_actions, error = 0; switch ((enum ofputil_action_code) code) { + case OFPUTIL_ACTION_INVALID: + NOT_REACHED(); + case OFPUTIL_OFPAT10_OUTPUT: error = ofputil_check_output_port(ntohs(a->output.port), max_ports); @@ -3930,6 +3933,7 @@ int ofputil_action_code_from_name(const char *name) { static const char *names[OFPUTIL_N_ACTIONS] = { + NULL, #define OFPAT10_ACTION(ENUM, STRUCT, NAME) NAME, #define NXAST_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) NAME, #include "ofp-util.def" @@ -3954,6 +3958,9 @@ void * ofputil_put_action(enum ofputil_action_code code, struct ofpbuf *buf) { switch (code) { + case OFPUTIL_ACTION_INVALID: + NOT_REACHED(); + #define OFPAT10_ACTION(ENUM, STRUCT, NAME) \ case OFPUTIL_##ENUM: return ofputil_put_##ENUM(buf); #define NXAST_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) \ diff --git a/lib/ofp-util.h b/lib/ofp-util.h index aaab83c..3f9e440 100644 --- a/lib/ofp-util.h +++ b/lib/ofp-util.h @@ -598,6 +598,7 @@ bool ofputil_frag_handling_from_string(const char *, enum ofp_config_flags *); * (The above list helps developers who want to "grep" for these definitions.) */ enum ofputil_action_code { + OFPUTIL_ACTION_INVALID, #define OFPAT10_ACTION(ENUM, STRUCT, NAME) OFPUTIL_##ENUM, #define NXAST_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) OFPUTIL_##ENUM, #include "ofp-util.def" @@ -607,7 +608,7 @@ enum ofputil_action_code { enum { #define OFPAT10_ACTION(ENUM, STRUCT, NAME) + 1 #define NXAST_ACTION(ENUM, STRUCT, EXTENSIBLE, NAME) + 1 - OFPUTIL_N_ACTIONS = 0 + OFPUTIL_N_ACTIONS = 1 #include "ofp-util.def" }; diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c index 962df15..5dcb3f0 100644 --- a/ofproto/ofproto-dpif.c +++ b/ofproto/ofproto-dpif.c @@ -5361,6 +5361,9 @@ do_xlate_actions(const union ofp_action *in, size_t n_in, code = ofputil_decode_action_unsafe(ia); switch (code) { + case OFPUTIL_ACTION_INVALID: + NOT_REACHED(); + case OFPUTIL_OFPAT10_OUTPUT: xlate_output_action(ctx, &ia->output); break; -- 1.7.2.5 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev