Hi William,

On 2020/05/01 0:26, William Tu wrote:
On Tue, Apr 21, 2020 at 11:47:02PM +0900, Toshiaki Makita wrote:
The following commit will introduce another offload driver using XDP.
When using afxdp netdev, either of TC or XDP will be supported, so let's
add an other_config to specify which offload driver is preferable.
When not specified, TC will be used if netdev supports it.

Signed-off-by: Toshiaki Makita <toshiaki.maki...@gmail.com>
---
  lib/netdev-offload.c | 37 +++++++++++++++++++++++++++++--------
  1 file changed, 29 insertions(+), 8 deletions(-)

diff --git a/lib/netdev-offload.c b/lib/netdev-offload.c
index 32eab5910..ba9ebc3cd 100644
--- a/lib/netdev-offload.c
+++ b/lib/netdev-offload.c
@@ -60,6 +60,9 @@ VLOG_DEFINE_THIS_MODULE(netdev_offload);
static bool netdev_flow_api_enabled = false; +#define FLOW_API_DRIVER_DEFAULT "linux_tc"
+static const char *netdev_flow_api_driver = NULL;
+
  /* Protects 'netdev_flow_apis'.  */
  static struct ovs_mutex netdev_flow_api_provider_mutex = 
OVS_MUTEX_INITIALIZER;
@@ -171,18 +174,30 @@ netdev_flow_api_equals(const struct netdev *netdev1,
  static int
  netdev_assign_flow_api(struct netdev *netdev)
  {
-    struct netdev_registered_flow_api *rfa;
+    struct netdev_registered_flow_api *rfa, *current_rfa = NULL;
CMAP_FOR_EACH (rfa, cmap_node, &netdev_flow_apis) {
+        if (netdev_flow_api_driver &&
+            strcmp(netdev_flow_api_driver, rfa->flow_api->type)) {
+            continue;
+        }
          if (!rfa->flow_api->init_flow_api(netdev)) {
-            ovs_refcount_ref(&rfa->refcnt);
-            ovsrcu_set(&netdev->flow_api, rfa->flow_api);
-            VLOG_INFO("%s: Assigned flow API '%s'.",
-                      netdev_get_name(netdev), rfa->flow_api->type);
-            return 0;
+            if (!current_rfa ||
+                (!netdev_flow_api_driver &&
+                 !strcmp(FLOW_API_DRIVER_DEFAULT, rfa->flow_api->type))) {
+                current_rfa = rfa;
Question:

When using netdev-afxdp, can we still enable tc-offload?

Yes. I tried enabling offload with afxdp and I saw tc rules added.

af_xdp hook gets packets before the tc hook, unless we have hw tc-offload,
then it by-passes the linux tc.

Software-wise TC will be basically bypassed.
I guess still we can use TC to offload flows to HW.

Toshiaki Makita
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to