[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