From 690a61c50a4744603be2ee3de8e22c97f9140d94 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Thu, 7 Jun 2012 20:23:59 -0400 Subject: [PATCH] ofp-util: Add OFPUTIL_ACTION_INVALID to enum ofputil_action_code. Possibly the ofputil_decode_action() interface should be rethought now that ofputil_action_code has an invalid value. Reviewed-by: Simon Horman Signed-off-by: Ben Pfaff --- 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 deletion(-) diff --git a/lib/ofp-parse.c b/lib/ofp-parse.c index 73a70c60..1d331bb4 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 5103c3e1..335ebed9 100644 --- a/lib/ofp-print.c +++ b/lib/ofp-print.c @@ -190,6 +190,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 60d0cfd4..3329ed7f 100644 --- a/lib/ofp-util.c +++ b/lib/ofp-util.c @@ -3711,6 +3711,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); @@ -3941,6 +3944,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" @@ -3965,6 +3969,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 aaab83cb..3f9e440b 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 7b86f807..f51182af 100644 --- a/ofproto/ofproto-dpif.c +++ b/ofproto/ofproto-dpif.c @@ -5397,6 +5397,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; -- 2.30.2