[ovs-dev] [PATCH v4 01/14] ofpbuf: New function ofpbuf_const_initializer().
Jarno Rajahalme
jarno at ovn.org
Fri Feb 19 21:48:06 UTC 2016
With a note and a question below:
Acked-by: Jarno Rajahalme <jarno at ovn.org>
> On Feb 19, 2016, at 12:34 AM, Ben Pfaff <blp at ovn.org> wrote:
>
> A number of times I've looked at code and thought that it would be easier
> to understand if I could write an initializer instead of
> ofpbuf_use_const(). This commit adds a function for that purpose and
> adapts a lot of code to use it, in the places where I thought it made
> the code better.
>
> In theory this could improve code generation since the new function can
> be inlined whereas ofpbuf_use_const() isn't. But I guess that's probably
> insignificant; the intent of this change is code readability.
>
> Signed-off-by: Ben Pfaff <blp at ovn.org>
> —
>
(snip)
> diff --git a/lib/ofpbuf.h b/lib/ofpbuf.h
> index dd72cde..489a543 100644
> --- a/lib/ofpbuf.h
> +++ b/lib/ofpbuf.h
> @@ -64,8 +64,9 @@ struct ofpbuf {
> enum ofpbuf_source source; /* Source of memory allocated as 'base'. */
> };
>
> -/* An initializer for a struct ofpbuf that will be initially empty and
> - * uses the space in STUB (which should be an array) as a stub.
> +/* An initializer for a struct ofpbuf that will be initially empty and uses the
> + * space in STUB (which should be an array) as a stub. This is the initializer
> + * form of ofpbuf_use_stub().
> *
> * Usage example:
> *
> @@ -83,6 +84,27 @@ struct ofpbuf {
> .source = OFPBUF_STUB, \
> }
>
> +/* An initializer for a struct ofpbuf whose data starts at DATA and continues
> + * for SIZE bytes. This is appropriate for an ofpbuf that will be used to
> + * inspect existing data, without moving it around or reallocating it, and
> + * generally without modifying it at all. This is the initializer form of
> + * ofpbuf_use_const().
> + */
> +static inline struct ofpbuf
> +ofpbuf_const_initializer(const void *data, size_t size)
> +{
> + return (struct ofpbuf) {
> + .base = CONST_CAST(void *, data),
> + .data = CONST_CAST(void *, data),
> + .size = size,
> + .allocated = size,
> + .header = NULL,
> + .msg = NULL,
> + .list_node = OVS_LIST_POISON,
> + .source = OFPBUF_STACK,
> + };
> +}
> +
I’m curious if there is a specific reason to define ofpbuf_const_initializer() as an inline function, and keep the OFPBUF_STUB_INITIALIZER() as a macro?
> void ofpbuf_use_ds(struct ofpbuf *, const struct ds *);
> void ofpbuf_use_stack(struct ofpbuf *, void *, size_t);
> void ofpbuf_use_stub(struct ofpbuf *, void *, size_t);
(snip)
> diff --git a/ovn/controller/pinctrl.c b/ovn/controller/pinctrl.c
> index 97b7f6c..7b7532d 100644
> --- a/ovn/controller/pinctrl.c
> +++ b/ovn/controller/pinctrl.c
> @@ -70,6 +70,15 @@ set_switch_config(struct rconn *swconn,
> queue_msg(request);
> }
>
> +unsigned int init_ofpbuf(const void *p, size_t size);
> +unsigned int
> +init_ofpbuf(const void *p, size_t size)
> +{
> + struct ofpbuf b = ofpbuf_const_initializer(p, size);
> + ofpbuf_pull(&b, 8);
> + return b.size;
> +}
> +
This seems unused.
> static void
> process_packet_in(struct controller_ctx *ctx OVS_UNUSED,
> const struct ofp_header *msg)
(snip)
More information about the dev
mailing list