2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-31 06:15:47 +00:00

ofp-actions: simplify ofpacts_from_openflow1[01]

Those logic is same, so simplify it. This will be also use for OF12.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
Signed-off-by: Ben Pfaff <blp@nicira.com>
This commit is contained in:
Isaku Yamahata
2012-07-18 20:41:15 +09:00
committed by Ben Pfaff
parent f4ef95344b
commit 0300caafc5

View File

@@ -450,14 +450,16 @@ log_bad_action(const union ofp_action *actions, size_t n_actions, size_t ofs,
}
static enum ofperr
ofpacts_from_openflow10(const union ofp_action *in, size_t n_in,
struct ofpbuf *out)
ofpacts_from_openflow(const union ofp_action *in, size_t n_in,
struct ofpbuf *out,
enum ofperr (*ofpact_from_openflow)(
const union ofp_action *a, struct ofpbuf *out))
{
const union ofp_action *a;
size_t left;
ACTION_FOR_EACH (a, left, in, n_in) {
enum ofperr error = ofpact_from_openflow10(a, out);
enum ofperr error = ofpact_from_openflow(a, out);
if (error) {
log_bad_action(in, n_in, a - in, error);
return error;
@@ -473,6 +475,13 @@ ofpacts_from_openflow10(const union ofp_action *in, size_t n_in,
return 0;
}
static enum ofperr
ofpacts_from_openflow10(const union ofp_action *in, size_t n_in,
struct ofpbuf *out)
{
return ofpacts_from_openflow(in, n_in, out, ofpact_from_openflow10);
}
static enum ofperr
ofpacts_pull_actions(struct ofpbuf *openflow, unsigned int actions_len,
struct ofpbuf *ofpacts,
@@ -659,24 +668,7 @@ static enum ofperr
ofpacts_from_openflow11(const union ofp_action *in, size_t n_in,
struct ofpbuf *out)
{
const union ofp_action *a;
size_t left;
ACTION_FOR_EACH (a, left, in, n_in) {
enum ofperr error = ofpact_from_openflow11(a, out);
if (error) {
VLOG_WARN_RL(&rl, "bad action at offset %td (%s)",
(a - in) * sizeof *a, ofperr_get_name(error));
return error;
}
}
if (left) {
VLOG_WARN_RL(&rl, "bad action format at offset %zu",
(n_in - left) * sizeof *a);
return OFPERR_OFPBAC_BAD_LEN;
}
return 0;
return ofpacts_from_openflow(in, n_in, out, ofpact_from_openflow11);
}
/* OpenFlow 1.1 instructions. */
@@ -846,14 +838,8 @@ ofpacts_pull_openflow11_actions(struct ofpbuf *openflow,
unsigned int actions_len,
struct ofpbuf *ofpacts)
{
enum ofperr error;
error = ofpacts_pull_actions(openflow, actions_len, ofpacts,
ofpacts_from_openflow11);
if (!error) {
ofpact_pad(ofpacts);
}
return error;
return ofpacts_pull_actions(openflow, actions_len, ofpacts,
ofpacts_from_openflow11);
}
enum ofperr
@@ -904,8 +890,6 @@ ofpacts_pull_openflow11_instructions(struct ofpbuf *openflow,
}
}
ofpact_pad(ofpacts);
if (insts[OVSINST_OFPIT11_GOTO_TABLE] ||
insts[OVSINST_OFPIT11_WRITE_METADATA] ||
insts[OVSINST_OFPIT11_WRITE_ACTIONS] ||