odp-util: New function factored out of put_userspace_action().
authorBen Pfaff <blp@nicira.com>
Tue, 25 Oct 2011 23:54:42 +0000 (16:54 -0700)
committerBen Pfaff <blp@nicira.com>
Thu, 17 Nov 2011 18:11:54 +0000 (10:11 -0800)
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
lib/odp-util.h
ofproto/ofproto-dpif.c

index f67816ef6bd8625e1a12ac9990677a9bc9332da7..b4ebd79236d68ed0823132602b27f980114689f8 100644 (file)
@@ -1388,3 +1388,25 @@ odp_flow_key_to_flow(const struct nlattr *key, size_t key_len,
 
     return check_expectations(present_attrs, expected_attrs, key, key_len);
 }
+
+/* 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;
+}
index 0f4f9e6b7130ee5b4dd3556258dd1b9dfe4e19cf..3003f614dcdb8da77fa63980701f746ce1beece5 100644 (file)
@@ -111,4 +111,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 */
index 6f1efc5542b84c69a672c8c220be7762243e7918..8ce2a34aadb7b62b085a2a40e65e0141537c2a88 100644 (file)
@@ -3516,19 +3516,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. */