[ovs-dev] [PATCH ovs V4 00/24] Introducing HW offload support for openvswitch
Simon Horman
simon.horman at netronome.com
Thu Mar 16 15:40:40 UTC 2017
On Mon, Mar 13, 2017 at 03:36:50PM +0200, Roi Dayan wrote:
> This patch series introduces rule offload functionality to dpif-netlink
> via netdev ports new flow offloading API. The user can specify whether to
> enable rule offloading or not via OVS configuration. Netdev providers
> are able to implement netdev flow offload API in order to offload rules.
>
> This patch series also implements one offload scheme for netdev-linux,
> using TC flower classifier, which was chosen because its sort of natural
> to state OVS DP rules for this classifier. However, the code can be
> extended to support other classifiers such as U32, eBPF, etc which support
> offload as well.
>
> The use-case we are currently addressing is the newly sriov switchdev mode
> in the Linux kernel which was introduced in version 4.8 [1][2].
> This series was tested against sriov vfs vports representors of the
> Mellanox 100G ConnectX-4 series exposed by the mlx5 kernel driver.
>
>
> V3->V4:
> - Move declarations to the right commit with implementation
> - Fix tc_get_flower flow return false success
> - Fix memory leaks - not releasing tc_transact replies
> - Fix travis failure for OSX compilation
> - Fix loop in dpif_netlink_flow_dump_next
> - Fix declared default value for tc-policy in vswitch.xml
> - Refactor loop in netdev_tc_flow_dump_next
> - Add missing error checks in parse_flow_put
> - Fix handling modify request where old rule is in hw and new
> rule is not supported and needs to be in sw.
> - Use 2 hashmaps instead of 1 for faster reverse lookup of ufid from tc
> - Init ports when enabling hw-offload after OVS is running
>
> TODO: Fix breaking of datapath compilation
> Fix testsuite failures
>
> Travis
> https://travis-ci.org/roidayan/ovs/builds/210549325
> AppVeyor
> https://ci.appveyor.com/project/roidayan/ovs/build/1.0.15
Hi Roi,
we have found that in our testing it seems to resolve problems flagged by
Travis. I think that if this is the way forwards then the code could
be collapsed back into netdev_vport_get_ifindex() and the surrounding
#ifdef __linux__ logic could be removed.
diff --git a/lib/netdev-vport.c b/lib/netdev-vport.c
index 4cc086e..d055d53 100644
--- a/lib/netdev-vport.c
+++ b/lib/netdev-vport.c
@@ -783,7 +783,7 @@ get_stats(const struct netdev *netdev, struct netdev_stats *stats)
#ifdef __linux__
static int
-netdev_vport_get_ifindex(const struct netdev *netdev_)
+netdev_vport_get_ifindex__(const struct netdev *netdev_)
{
char buf[NETDEV_VPORT_NAME_BUFSIZE];
const char *name = netdev_vport_get_dpif_port(netdev_, buf, sizeof(buf));
@@ -791,6 +791,15 @@ netdev_vport_get_ifindex(const struct netdev *netdev_)
return linux_get_ifindex(name);
}
+static int
+netdev_vport_get_ifindex(const struct netdev *netdev_)
+{
+ if (netdev_flow_api_enabled)
+ return netdev_vport_get_ifindex__(netdev_);
+ else
+ return -EOPNOTSUPP;
+}
+
#define NETDEV_VPORT_GET_IFINDEX netdev_vport_get_ifindex
#define NETDEV_FLOW_OFFLOAD_API LINUX_FLOW_OFFLOAD_API
#else /* !__linux__ */
More information about the dev
mailing list