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
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev