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__ */
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to