[ovs-dev] [PATCH ovs V3 04/25] other-config: Add hw-offload switch to control netdev flow offloading
Roi Dayan
roid at mellanox.com
Wed Feb 8 15:29:17 UTC 2017
From: Paul Blakey <paulb at mellanox.com>
Add a new configuration option - hw-offload that enables netdev
flow api. Enabling this option will allow offloading flows
using netdev implementation instead of the kernel datapath.
This configuration option defaults to false - disabled.
Signed-off-by: Paul Blakey <paulb at mellanox.com>
Reviewed-by: Roi Dayan <roid at mellanox.com>
---
lib/netdev.c | 26 ++++++++++++++++++++++++++
lib/netdev.h | 2 ++
vswitchd/bridge.c | 1 +
vswitchd/vswitch.xml | 11 +++++++++++
4 files changed, 40 insertions(+)
diff --git a/lib/netdev.c b/lib/netdev.c
index 45ea7d2..ca727a5 100644
--- a/lib/netdev.c
+++ b/lib/netdev.c
@@ -2092,7 +2092,33 @@ netdev_init_flow_api(struct netdev *netdev)
{
const struct netdev_class *class = netdev->netdev_class;
+ if (!netdev_flow_api_enabled) {
+ return EOPNOTSUPP;
+ }
+
return (class->init_flow_api
? class->init_flow_api(netdev)
: EOPNOTSUPP);
}
+
+bool netdev_flow_api_enabled = false;
+
+void
+netdev_set_flow_api_enabled(const struct smap *ovs_other_config)
+{
+#ifdef __linux__
+ if (smap_get_bool(ovs_other_config, "hw-offload", false)) {
+ static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER;
+
+ if (ovsthread_once_start(&once)) {
+ netdev_flow_api_enabled = true;
+
+ VLOG_INFO("netdev: Flow API Enabled");
+
+ ovsthread_once_done(&once);
+ }
+ }
+#else
+ netdev_flow_api_enabled = false;
+#endif
+}
diff --git a/lib/netdev.h b/lib/netdev.h
index 8638bfd..d7d4199 100644
--- a/lib/netdev.h
+++ b/lib/netdev.h
@@ -178,6 +178,8 @@ int netdev_flow_get(struct netdev *, struct match *, struct nlattr **actions,
int netdev_flow_del(struct netdev *, struct dpif_flow_stats *,
const ovs_u128 *);
int netdev_init_flow_api(struct netdev *);
+extern bool netdev_flow_api_enabled;
+void netdev_set_flow_api_enabled(const struct smap *ovs_other_config);
/* native tunnel APIs */
/* Structure to pass parameters required to build a tunnel header. */
diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c
index 21c3c79..48fbd1d 100644
--- a/vswitchd/bridge.c
+++ b/vswitchd/bridge.c
@@ -2937,6 +2937,7 @@ bridge_run(void)
cfg = ovsrec_open_vswitch_first(idl);
if (cfg) {
+ netdev_set_flow_api_enabled(&cfg->other_config);
dpdk_init(&cfg->other_config);
}
diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml
index 146a816..942e68f 100644
--- a/vswitchd/vswitch.xml
+++ b/vswitchd/vswitch.xml
@@ -170,6 +170,17 @@
<p>
The default is 10000.
</p>
+ </column>
+
+ <column name="other_config" key="hw-offload"
+ type='{"type": "boolean"}'>
+ <p>
+ Set this value to <code>true</code> to enable netdev flow offload.
+ </p>
+ <p>
+ The default value is <code>false</code>. Changing this value requires
+ restarting the daemon
+ </p>
</column>
<column name="other_config" key="dpdk-init"
--
2.7.4
More information about the dev
mailing list