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