Thanks for the reviews. I've pushed the patches up to this point.
On Wed, Jan 20, 2016 at 04:39:10PM -0800, Jarno Rajahalme wrote: > Acked-by: Jarno Rajahalme <ja...@ovn.org> > > > On Jan 18, 2016, at 11:27 PM, Ben Pfaff <b...@ovn.org> wrote: > > > > The existing functions either assumed that we were working with NXM > > (instead of OXM), or they added or parsed a header before OXM headers. > > These aren't needed when OXM is encapsulated inside a property, as will be > > the case in an upcoming commit. > > > > Signed-off-by: Ben Pfaff <b...@ovn.org> > > --- > > lib/nx-match.c | 30 ++++++++++++++++++++++++++++-- > > lib/nx-match.h | 7 ++++++- > > 2 files changed, 34 insertions(+), 3 deletions(-) > > > > diff --git a/lib/nx-match.c b/lib/nx-match.c > > index 11bcd95..0f695f0 100644 > > --- a/lib/nx-match.c > > +++ b/lib/nx-match.c > > @@ -1,5 +1,5 @@ > > /* > > - * Copyright (c) 2010, 2011, 2012, 2013, 2014, 2015 Nicira, Inc. > > + * Copyright (c) 2010, 2011, 2012, 2013, 2014, 2015, 2016 Nicira, Inc. > > * > > * Licensed under the Apache License, Version 2.0 (the "License"); > > * you may not use this file except in compliance with the License. > > @@ -630,6 +630,18 @@ oxm_pull_match_loose(struct ofpbuf *b, struct match > > *match) > > return oxm_pull_match__(b, false, match); > > } > > > > +/* Parses the OXM match description in the 'oxm_len' bytes in 'oxm'. > > Stores > > + * the result in 'match'. > > + * > > + * Fails with an error when encountering unknown OXM headers. > > + * > > + * Returns 0 if successful, otherwise an OpenFlow error code. */ > > +enum ofperr > > +oxm_decode_match(const void *oxm, size_t oxm_len, struct match *match) > > +{ > > + return nx_pull_raw(oxm, oxm_len, true, match, NULL, NULL); > > +} > > + > > /* Verify an array of OXM TLVs treating value of each TLV as a mask, > > * disallowing masks in each TLV and ignoring pre-requisites. */ > > enum ofperr > > @@ -1099,7 +1111,7 @@ nx_put_match(struct ofpbuf *b, const struct match > > *match, > > } > > > > /* Appends to 'b' an struct ofp11_match_header followed by the OXM format > > that > > - * expresses 'cr', plus enough zero bytes to pad the data appended out to a > > + * expresses 'match', plus enough zero bytes to pad the data appended out > > to a > > * multiple of 8. > > * > > * OXM differs slightly among versions of OpenFlow. Specify the OpenFlow > > @@ -1130,6 +1142,20 @@ oxm_put_match(struct ofpbuf *b, const struct match > > *match, > > return match_len; > > } > > > > +/* Appends to 'b' the OXM formats that expresses 'match', without header or > > + * padding. > > + * > > + * OXM differs slightly among versions of OpenFlow. Specify the OpenFlow > > + * version in use as 'version'. > > + * > > + * This function can cause 'b''s data to be reallocated. */ > > +void > > +oxm_put_raw(struct ofpbuf *b, const struct match *match, > > + enum ofp_version version) > > +{ > > + nx_put_raw(b, version, match, 0, 0); > > +} > > + > > /* Appends to 'b' the nx_match format that expresses the tlv corresponding > > * to 'id'. If mask is not all-ones then it is also formated as the value > > * of the tlv. */ > > diff --git a/lib/nx-match.h b/lib/nx-match.h > > index 2625c63..c663e54 100644 > > --- a/lib/nx-match.h > > +++ b/lib/nx-match.h > > @@ -1,5 +1,5 @@ > > /* > > - * Copyright (c) 2010, 2011, 2012, 2013, 2014 Nicira, Inc. > > + * Copyright (c) 2010, 2011, 2012, 2013, 2014, 2016 Nicira, Inc. > > * > > * Licensed under the Apache License, Version 2.0 (the "License"); > > * you may not use this file except in compliance with the License. > > @@ -47,6 +47,7 @@ char *mf_parse_subfield__(struct mf_subfield *sf, const > > char **s) > > char *mf_parse_subfield(struct mf_subfield *, const char *s) > > OVS_WARN_UNUSED_RESULT; > > > > +/* Decoding matches. */ > > enum ofperr nx_pull_match(struct ofpbuf *, unsigned int match_len, > > struct match *, > > ovs_be64 *cookie, ovs_be64 *cookie_mask); > > @@ -55,11 +56,15 @@ enum ofperr nx_pull_match_loose(struct ofpbuf *, > > unsigned int match_len, > > ovs_be64 *cookie_mask); > > enum ofperr oxm_pull_match(struct ofpbuf *, struct match *); > > enum ofperr oxm_pull_match_loose(struct ofpbuf *, struct match *); > > +enum ofperr oxm_decode_match(const void *, size_t, struct match *); > > enum ofperr oxm_pull_field_array(const void *, size_t fields_len, > > struct field_array *); > > + > > +/* Encoding matches. */ > > int nx_put_match(struct ofpbuf *, const struct match *, > > ovs_be64 cookie, ovs_be64 cookie_mask); > > int oxm_put_match(struct ofpbuf *, const struct match *, enum ofp_version); > > +void oxm_put_raw(struct ofpbuf *, const struct match *, enum ofp_version); > > void oxm_format_field_array(struct ds *, const struct field_array *); > > int oxm_put_field_array(struct ofpbuf *, const struct field_array *, > > enum ofp_version version); > > -- > > 2.1.3 > > > > _______________________________________________ > > dev mailing list > > dev@openvswitch.org > > http://openvswitch.org/mailman/listinfo/dev > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev