[ovs-dev] [PATCH 07/10] lib/ofp-actions: introduce ofpaction_set_field for of12 support
Isaku Yamahata
yamahata at valinux.co.jp
Tue Jun 26 21:27:02 PDT 2012
This is preparation for OF12 support.
This patch introduces just a place holder. The real implementation will come
as a later patch.
Signed-off-by: Isaku Yamahata <yamahata at valinux.co.jp>
---
lib/ofp-actions.c | 22 ++++++++++++++++++++++
lib/ofp-actions.h | 10 ++++++++++
ofproto/ofproto-dpif.c | 5 +++++
3 files changed, 37 insertions(+), 0 deletions(-)
diff --git a/lib/ofp-actions.c b/lib/ofp-actions.c
index b81f97d..fbaa5ff 100644
--- a/lib/ofp-actions.c
+++ b/lib/ofp-actions.c
@@ -892,6 +892,11 @@ ofpact_check__(const struct ofpact *a, const struct flow *flow, int max_ports)
case OFPACT_SET_L4_DST_PORT:
return 0;
+ case OFPACT_SET_FIELD:
+ /* TODO This will be implemented by the later patch */
+ NOT_REACHED();
+ break;
+
case OFPACT_REG_MOVE:
return nxm_reg_move_check(ofpact_get_REG_MOVE(a), flow);
@@ -1112,6 +1117,7 @@ ofpact_to_nxast(const struct ofpact *a, struct ofpbuf *out)
case OFPACT_SET_IPV4_DSCP:
case OFPACT_SET_L4_SRC_PORT:
case OFPACT_SET_L4_DST_PORT:
+ case OFPACT_SET_FIELD:
NOT_REACHED();
}
}
@@ -1204,6 +1210,11 @@ ofpact_to_openflow10(const struct ofpact *a, struct ofpbuf *out)
= htons(ofpact_get_SET_L4_DST_PORT(a)->port);
break;
+ case OFPACT_SET_FIELD:
+ /* TODO: this will be implemented by later patch */
+ NOT_REACHED();
+ break;
+
case OFPACT_CONTROLLER:
case OFPACT_OUTPUT_REG:
case OFPACT_BUNDLE:
@@ -1314,6 +1325,11 @@ ofpact_to_openflow11(const struct ofpact *a, struct ofpbuf *out)
= htons(ofpact_get_SET_L4_DST_PORT(a)->port);
break;
+ case OFPACT_SET_FIELD:
+ /* TODO: this will be implemented by later patch */
+ NOT_REACHED();
+ break;
+
case OFPACT_CONTROLLER:
case OFPACT_OUTPUT_REG:
case OFPACT_BUNDLE:
@@ -1403,6 +1419,7 @@ ofpact_outputs_to_port(const struct ofpact *ofpact, uint16_t port)
case OFPACT_SET_IPV4_DSCP:
case OFPACT_SET_L4_SRC_PORT:
case OFPACT_SET_L4_DST_PORT:
+ case OFPACT_SET_FIELD:
case OFPACT_REG_MOVE:
case OFPACT_REG_LOAD:
case OFPACT_DEC_TTL:
@@ -1590,6 +1607,11 @@ ofpact_format(const struct ofpact *a, struct ds *s)
ds_put_format(s, "mod_tp_dst:%d", ofpact_get_SET_L4_DST_PORT(a)->port);
break;
+ case OFPACT_SET_FIELD:
+ /* TODO: this will be implemented by later patch */
+ NOT_REACHED();
+ break;
+
case OFPACT_REG_MOVE:
nxm_format_reg_move(ofpact_get_REG_MOVE(a), s);
break;
diff --git a/lib/ofp-actions.h b/lib/ofp-actions.h
index 7cf1eb5..41d61ec 100644
--- a/lib/ofp-actions.h
+++ b/lib/ofp-actions.h
@@ -73,6 +73,7 @@
DEFINE_OFPACT(REG_MOVE, ofpact_reg_move, ofpact) \
DEFINE_OFPACT(REG_LOAD, ofpact_reg_load, ofpact) \
DEFINE_OFPACT(DEC_TTL, ofpact_null, ofpact) \
+ DEFINE_OFPACT(SET_FIELD, ofpact_set_field, ofpact) \
\
/* Metadata. */ \
DEFINE_OFPACT(SET_TUNNEL, ofpact_tunnel, ofpact) \
@@ -378,6 +379,15 @@ struct ofpact_note {
uint8_t data[];
};
+/* OFPACT_SET_FIELD
+ *
+ * used for OFPAT12_SET_FIELD */
+struct ofpact_set_field {
+ struct ofpact ofpact;
+ const struct mf_field *mf;
+ union mf_value value;
+};
+
/* Converting OpenFlow to ofpacts. */
enum ofperr ofpacts_pull_openflow10(struct ofpbuf *openflow,
unsigned int actions_len,
diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
index f826c2e..8aa9f13 100644
--- a/ofproto/ofproto-dpif.c
+++ b/ofproto/ofproto-dpif.c
@@ -5445,6 +5445,11 @@ do_xlate_actions(const struct ofpact *ofpacts, struct action_xlate_ctx *ctx)
ctx->flow.tp_dst = htons(ofpact_get_SET_L4_DST_PORT(a)->port);
break;
+ case OFPACT_SET_FIELD:
+ /* TODO: this will be implemented by later patch */
+ NOT_REACHED();
+ break;
+
case OFPACT_RESUBMIT:
xlate_ofpact_resubmit(ctx, ofpact_get_RESUBMIT(a));
break;
--
1.7.1.1
More information about the dev
mailing list