On Thu, Oct 24, 2013 at 01:19:29PM -0700, Jarno Rajahalme wrote: > Signed-off-by: Jarno Rajahalme <jrajaha...@nicira.com>
I'm going to fold this in: diff --git a/lib/ofp-actions.c b/lib/ofp-actions.c index a9d4340..9f31449 100644 --- a/lib/ofp-actions.c +++ b/lib/ofp-actions.c @@ -793,7 +793,7 @@ set_field_from_openflow(const struct ofp12_action_set_field *oasf, return OFPERR_OFPBAC_BAD_SET_ARGUMENT; } sf = ofpact_put_SET_FIELD(ofpacts); - sf->field = mf->id; + sf->field = mf; memcpy(&sf->value, oasf + 1, mf->n_bytes); /* The value must be valid for match and must have the OFPVID_PRESENT bit @@ -816,17 +816,16 @@ static void set_field_to_ofast(const struct ofpact_set_field *sf, struct ofpbuf *openflow) { - const struct mf_field *mf = mf_from_id(sf->field); - uint16_t padded_value_len = ROUND_UP(mf->n_bytes, 8); + uint16_t padded_value_len = ROUND_UP(sf->field->n_bytes, 8); struct ofp12_action_set_field *oasf; char *value; oasf = ofputil_put_OFPAT12_SET_FIELD(openflow); - oasf->dst = htonl(mf->oxm_header); + oasf->dst = htonl(sf->field->oxm_header); oasf->len = htons(ntohs(oasf->len) + padded_value_len); value = ofpbuf_put_zeros(openflow, padded_value_len); - memcpy(value, &sf->value, mf->n_bytes); + memcpy(value, &sf->value, sf->field->n_bytes); } static void @@ -834,16 +833,14 @@ set_field_to_openflow(const struct ofpact_set_field *sf, struct ofpbuf *openflow) { struct ofp_header *oh = (struct ofp_header *)openflow->l2; + const struct mf_field *mf = sf->field; struct nx_action_reg_load *narl; - const struct mf_field *mf; if (oh->version >= OFP12_VERSION) { set_field_to_ofast(sf, openflow); return; } - mf = mf_from_id(sf->field); - /* Convert to one or two REG_LOADs */ if (mf->n_bits > 64) { @@ -1780,7 +1777,7 @@ ofpact_check__(struct ofpact *a, struct flow *flow, ofp_port_t max_ports, return nxm_reg_load_check(ofpact_get_REG_LOAD(a), flow); case OFPACT_SET_FIELD: - mf = mf_from_id(ofpact_get_SET_FIELD(a)->field); + mf = ofpact_get_SET_FIELD(a)->field; /* Require OXM_OF_VLAN_VID to have an existing VLAN header. */ if (!mf_are_prereqs_ok(mf, flow) || (mf->id == MFF_VLAN_VID && !(flow->vlan_tci & htons(VLAN_CFI)))) { @@ -2967,7 +2964,7 @@ ofpact_format(const struct ofpact *a, struct ds *s) case OFPACT_SET_FIELD: set_field = ofpact_get_SET_FIELD(a); - mf = mf_from_id(set_field->field); + mf = set_field->field; ds_put_format(s, "set_field:"); /* RFC: Print VLAN VID without the OFPVID_PRESENT bit. */ if (mf->id == MFF_VLAN_VID) { diff --git a/lib/ofp-actions.h b/lib/ofp-actions.h index 1809db0..233a31b 100644 --- a/lib/ofp-actions.h +++ b/lib/ofp-actions.h @@ -378,7 +378,7 @@ enum ofpact_mpls_position { * Used for OFPAT12_SET_FIELD. */ struct ofpact_set_field { struct ofpact ofpact; - enum mf_field_id field; + const struct mf_field *field; union mf_value value; /* Most-significant bits are used. */ }; diff --git a/lib/ofp-parse.c b/lib/ofp-parse.c index 7b19dc0..0fb32d5 100644 --- a/lib/ofp-parse.c +++ b/lib/ofp-parse.c @@ -489,7 +489,7 @@ set_field_parse__(char *arg, struct ofpbuf *ofpacts, if (!mf->writable) { return xasprintf("%s is read-only", key); } - sf->field = mf->id; + sf->field = mf; delim[0] = '\0'; error = mf_parse_value(mf, value, &sf->value); if (error) { diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c index f8c4f5f..1b849d2 100644 --- a/ofproto/ofproto-dpif-xlate.c +++ b/ofproto/ofproto-dpif-xlate.c @@ -2440,7 +2440,7 @@ do_xlate_actions(const struct ofpact *ofpacts, size_t ofpacts_len, case OFPACT_SET_FIELD: set_field = ofpact_get_SET_FIELD(a); - mf = mf_from_id(set_field->field); + mf = set_field->field; mf_mask_field_and_prereqs(mf, &wc->masks); /* Set field action only ever overwrites packet's outermost _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev