On Sep 30, 2014, at 5:47 PM, Ben Pfaff <b...@nicira.com> wrote: > OpenFlow 1.5 (draft) extends the OFPAT_SET_FIELD action originally > introduced in OpenFlow 1.2 so that it can set not just entire fields but > any subset of bits within a field as well. This commit adds support for > that feature when OpenFlow 1.5 is used. > > With this feature, OFPAT_SET_FIELD becomes a superset of NXAST_REG_LOAD. > Thus, this commit merges the implementations of the two actions into a > single ofpact_set_field. > > ONF-JIRA: EXT-314 > Signed-off-by: Ben Pfaff <b...@nicira.com> > — >
(snip) > diff --git a/lib/ofp-actions.c b/lib/ofp-actions.c > index f6818ca..ca4dac9 100644 > --- a/lib/ofp-actions.c > +++ b/lib/ofp-actions.c (snip) > @@ -1973,14 +1932,17 @@ decode_OFPAT_RAW12_SET_FIELD(const struct > ofp12_action_set_field *oasf, > sf = ofpact_put_SET_FIELD(ofpacts); > > ofpbuf_use_const(&b, oasf, ntohs(oasf->len)); > - ofpbuf_pull(&b, 4); > - error = nx_pull_entry(&b, &sf->field, &sf->value, NULL); > + ofpbuf_pull(&b, OBJECT_OFFSETOF(oasf, pad)); > + error = nx_pull_entry(&b, &sf->field, &sf->value, > + may_mask ? &sf->mask : NULL); > if (error) { > - /* OF1.5 specifically says to use OFPBAC_BAD_SET_MASK in this case. > */ > return (error == OFPERR_OFPBMC_BAD_MASK > ? OFPERR_OFPBAC_BAD_SET_MASK > : error); > } > + if (!may_mask) { > + memset(&sf->mask, 0xff, sf->field->n_bytes); > + } > > if (!is_all_zeros(ofpbuf_data(&b), ofpbuf_size(&b))) { > return OFPERR_OFPBAC_BAD_SET_ARGUMENT; > @@ -2003,6 +1965,7 @@ decode_OFPAT_RAW12_SET_FIELD(const struct > ofp12_action_set_field *oasf, > * on for OXM_OF_VLAN_VID. */ > if (!mf_is_value_valid(sf->field, &sf->value) > || (sf->field->id == MFF_VLAN_VID > + && sf->mask.be16 & htons(OFPVID12_PRESENT) > && !(sf->value.be16 & htons(OFPVID12_PRESENT)))) { This does not look right to me. > struct ds ds = DS_EMPTY_INITIALIZER; > mf_format(sf->field, &sf->value, NULL, &ds); > @@ -2015,56 +1978,110 @@ decode_OFPAT_RAW12_SET_FIELD(const struct > ofp12_action_set_field *oasf, > return 0; > } Jarno _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev