[ovs-dev] [PATCH v4 06/14] ofp-prop: Add support for putting and parsing nested properties.
Ben Pfaff
blp at ovn.org
Fri Feb 19 23:56:45 UTC 2016
On Fri, Feb 19, 2016 at 02:47:59PM -0800, Jarno Rajahalme wrote:
> With one comment below:
>
> Acked-by: Jarno Rajahalme <jarno at ovn.org>
Thanks for the review.
> > On Feb 19, 2016, at 12:34 AM, Ben Pfaff <blp at ovn.org> wrote:
> >
> > It hadn't occurred to me before that any special support was actually
> > necessary or useful for nested properties, but the functions introduced in
> > this commit are nice wrappers to deal with the extra 4-byte padding that
> > ensures that the nested properties begin on 8-byte boundaries just like
> > the outer properties.
> >
> > Signed-off-by: Ben Pfaff <blp at ovn.org>
...
> > +enum ofperr
> > +ofpprop_parse_nested(const struct ofpbuf *property, struct ofpbuf *nested)
> > +{
> > + size_t nested_offset = ROUND_UP(ofpbuf_headersize(property), 8);
> > + if (property->size < nested_offset) {
> > + return OFPERR_OFPBPC_BAD_LEN;
> > + }
> > +
> > + ofpbuf_use_const(nested, property->data, property->size);
> > + ofpbuf_pull(nested, nested_offset);
> > + return 0;
> > +}
...
> > +/* Appends a header for a property of type 'type' to 'msg', followed by padding
> > + * suitable for putting nested properties into the property; that is, padding
> > + * to an 8-byte alignment.
> > + *
> > + * This otherwise works like ofpprop_start().
> > + *
> > + * There's no need for ofpprop_end_nested(), because ofpprop_end() works fine
> > + * for this case. */
> > +size_t
> > +ofpprop_start_nested(struct ofpbuf *msg, uint64_t type)
> > +{
> > + size_t start_ofs = ofpprop_start(msg, type);
> > + ofpbuf_put_zeros(msg, 4);
>
> Somehow I find the ‘4’ here asymmetric to the
> ROUND_UP(ofpbuf_headersize(…)..) in ofpprop_parse_nested(). Maybe it
> would be better to simply pull ‘8’ there (with the comment that both
> the outer property and the padding are bypassed?
Hmm, 8 would be wrong sometimes there, because experimenter property
headers are 12 bytes.
Do you like this better:
ofpbuf_padto(msg, ROUND_UP(msg->size, 8));
More information about the dev
mailing list