[ovs-dev] [mirror 09/13] odp-util: New function factored out of put_userspace_action().

Justin Pettit jpettit at nicira.com
Mon Nov 14 00:45:34 UTC 2011


Looks good.

--Justin


On Oct 26, 2011, at 10:09 AM, Ben Pfaff wrote:

> An upcoming patch to odp-util will add a new user, but this seems like a
> reasonable change in any case.
> ---
> lib/odp-util.c         |   22 ++++++++++++++++++++++
> lib/odp-util.h         |    3 +++
> ofproto/ofproto-dpif.c |    9 +--------
> 3 files changed, 26 insertions(+), 8 deletions(-)
> 
> diff --git a/lib/odp-util.c b/lib/odp-util.c
> index 9959662..89bee20 100644
> --- a/lib/odp-util.c
> +++ b/lib/odp-util.c
> @@ -1227,3 +1227,25 @@ odp_flow_key_to_flow(const struct nlattr *key, size_t key_len,
>         NOT_REACHED();
>     }
> }
> +
> +/* Appends an OVS_ACTION_ATTR_USERSPACE action to 'odp_actions' that specifies
> + * Netlink PID 'pid'.  If 'cookie' is nonnull, adds a userdata attribute whose
> + * contents contains 'cookie' and returns the offset within 'odp_actions' of
> + * the start of the cookie.  (If 'cookie' is null, then the return value is not
> + * meaningful.) */
> +size_t
> +odp_put_userspace_action(uint32_t pid, const struct user_action_cookie *cookie,
> +                         struct ofpbuf *odp_actions)
> +{
> +    size_t offset;
> +
> +    offset = nl_msg_start_nested(odp_actions, OVS_ACTION_ATTR_USERSPACE);
> +    nl_msg_put_u32(odp_actions, OVS_USERSPACE_ATTR_PID, pid);
> +    if (cookie) {
> +        nl_msg_put_unspec(odp_actions, OVS_USERSPACE_ATTR_USERDATA,
> +                          cookie, sizeof *cookie);
> +    }
> +    nl_msg_end_nested(odp_actions, offset);
> +
> +    return cookie ? odp_actions->size - NLA_ALIGN(sizeof *cookie) : 0;
> +}
> diff --git a/lib/odp-util.h b/lib/odp-util.h
> index 8c7d4d1..6525512 100644
> --- a/lib/odp-util.h
> +++ b/lib/odp-util.h
> @@ -115,4 +115,7 @@ struct user_action_cookie {
> 
> BUILD_ASSERT_DECL(sizeof(struct user_action_cookie) == 8);
> 
> +size_t odp_put_userspace_action(uint32_t pid,
> +                                const struct user_action_cookie *,
> +                                struct ofpbuf *odp_actions);
> #endif /* odp-util.h */
> diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
> index 74407c9..4e55b43 100644
> --- a/ofproto/ofproto-dpif.c
> +++ b/ofproto/ofproto-dpif.c
> @@ -3520,19 +3520,12 @@ put_userspace_action(const struct ofproto_dpif *ofproto,
>                      const struct flow *flow,
>                      const struct user_action_cookie *cookie)
> {
> -    size_t offset;
>     uint32_t pid;
> 
>     pid = dpif_port_get_pid(ofproto->dpif,
>                             ofp_port_to_odp_port(flow->in_port));
> 
> -    offset = nl_msg_start_nested(odp_actions, OVS_ACTION_ATTR_USERSPACE);
> -    nl_msg_put_u32(odp_actions, OVS_USERSPACE_ATTR_PID, pid);
> -    nl_msg_put_unspec(odp_actions, OVS_USERSPACE_ATTR_USERDATA,
> -                      cookie, sizeof *cookie);
> -    nl_msg_end_nested(odp_actions, offset);
> -
> -    return odp_actions->size - NLA_ALIGN(sizeof *cookie);
> +    return odp_put_userspace_action(pid, cookie, odp_actions);
> }
> 
> /* Compose SAMPLE action for sFlow. */
> -- 
> 1.7.2.5
> 




More information about the dev mailing list