mirror of
https://github.com/openvswitch/ovs
synced 2025-08-30 22:05:19 +00:00
linux: Report supported user features to the kernel
Following commit (''netlink: Do not enforce alignment of last Netlink attribute''), signal the ability to receive unaligned Netlink messages to the datapath to enable utilization of zerocopy optimizations. Opening a datapath is now done by issueing a OVS_DP_CMD_SET in order to overwrite previously set user features. Signed-off-by: Thomas Graf <tgraf@redhat.com> Acked-by: Ben Pfaff <blp@nicira.com> Signed-off-by: Jesse Gross <jesse@nicira.com>
This commit is contained in:
@@ -73,6 +73,7 @@ struct dpif_linux_dp {
|
||||
/* Attributes. */
|
||||
const char *name; /* OVS_DP_ATTR_NAME. */
|
||||
const uint32_t *upcall_pid; /* OVS_DP_ATTR_UPCALL_PID. */
|
||||
uint32_t user_features; /* OVS_DP_ATTR_USER_FEATURES */
|
||||
struct ovs_dp_stats stats; /* OVS_DP_ATTR_STATS. */
|
||||
struct ovs_dp_megaflow_stats megaflow_stats;
|
||||
/* OVS_DP_ATTR_MEGAFLOW_STATS.*/
|
||||
@@ -231,9 +232,11 @@ dpif_linux_open(const struct dpif_class *class OVS_UNUSED, const char *name,
|
||||
upcall_pid = 0;
|
||||
dp_request.upcall_pid = &upcall_pid;
|
||||
} else {
|
||||
dp_request.cmd = OVS_DP_CMD_GET;
|
||||
/* Use OVS_DP_CMD_SET to report user features */
|
||||
dp_request.cmd = OVS_DP_CMD_SET;
|
||||
}
|
||||
dp_request.name = name;
|
||||
dp_request.user_features |= OVS_DP_F_UNALIGNED;
|
||||
error = dpif_linux_dp_transact(&dp_request, &dp, &buf);
|
||||
if (error) {
|
||||
return error;
|
||||
@@ -1931,6 +1934,10 @@ dpif_linux_dp_to_ofpbuf(const struct dpif_linux_dp *dp, struct ofpbuf *buf)
|
||||
nl_msg_put_u32(buf, OVS_DP_ATTR_UPCALL_PID, *dp->upcall_pid);
|
||||
}
|
||||
|
||||
if (dp->user_features) {
|
||||
nl_msg_put_u32(buf, OVS_DP_ATTR_USER_FEATURES, dp->user_features);
|
||||
}
|
||||
|
||||
/* Skip OVS_DP_ATTR_STATS since we never have a reason to serialize it. */
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user