From patchwork Fri May 29 06:33:05 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sriharsha Basavapatna X-Patchwork-Id: 1300439 X-Patchwork-Delegate: i.maximets@samsung.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.136; helo=silver.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=openvswitch.org Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=broadcom.com header.i=@broadcom.com header.a=rsa-sha256 header.s=google header.b=GRRLHqEr; dkim-atps=neutral Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 49YFBb1hc1z9sPF for ; Fri, 29 May 2020 16:33:27 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id 1801125CFB; Fri, 29 May 2020 06:33:25 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 93fdk3P4wE7k; Fri, 29 May 2020 06:33:22 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by silver.osuosl.org (Postfix) with ESMTP id F0B5220444; Fri, 29 May 2020 06:33:21 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id C8656C088A; Fri, 29 May 2020 06:33:21 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133]) by lists.linuxfoundation.org (Postfix) with ESMTP id 581A7C016F for ; Fri, 29 May 2020 06:33:21 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id 3F9C189297 for ; Fri, 29 May 2020 06:33:21 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from hemlock.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id kr9Tec-2A+HC for ; Fri, 29 May 2020 06:33:20 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-wr1-f66.google.com (mail-wr1-f66.google.com [209.85.221.66]) by hemlock.osuosl.org (Postfix) with ESMTPS id 261DB88548 for ; Fri, 29 May 2020 06:33:20 +0000 (UTC) Received: by mail-wr1-f66.google.com with SMTP id y17so2026476wrn.11 for ; Thu, 28 May 2020 23:33:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=9gShzOMQFhVGwCM12NDrElxDB6Iz106hyEUByAyWMJ0=; b=GRRLHqEr/VB0MhsWJeLFnOqi6jM2yANzXQuDGd4NGZmg2Z1rV2XVN65HY5gJ3xNGa+ hEZZ9q/VnKNzTm1n0uK2684SdDCux4FdgHKSZXY3lwmkwC4JfjWel9b17NR5Se0k7dUN DebX9XG2KFtrrgF6Kjs0L5CIcyLj7Cu1mVpZw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=9gShzOMQFhVGwCM12NDrElxDB6Iz106hyEUByAyWMJ0=; b=iOS4bIDpHkV+LmE8Fc57P8GqYmD2q1I205KX+sFGaH9hYxLF003GetspG4M2jDn/AG f3CEtzQ7F06mUTd/S2//gPZlYSnyD41vHOSDXc/giLa+EPaVdkOqR0MG05LwikIG0B2D kBa+Ny60ujAkEBEO7iz9FeoZ0Bu+/asfDMecf2pums6YONc+NTjuJoLeBZYtBH5tw8CO VP0Oy0gAsIa4mby/mI4JfrtRsJAt5RVLGKJuSri0P54pZmXaqBiQIVAO5eKuGiUlUYyO zQXzx82fS7foozuNO2ZOJDawnTtMLwHERzm/eNBLBoyXUhZULuaCfaCiCgPfUdNLOd7Q +/IA== X-Gm-Message-State: AOAM532eZYiXC8KBgxE3sFoP0SluZhhTFYtTx2xoQ6HSxmYy24eNzSiR ZEIzmUMX51QBk+5Ggk3G7YjvejroBV14+kN20MleEQ3N8RV8qIQH8BtBSGiEAerFQV//iPwD6Vp VjBWOVZArMTC3At/5M1ZBItJ472ZpprEdzYSkvI0Hihxp/s98iJgONBuEpQZZn3AF9KS2XLBh1/ obk12omg8= X-Google-Smtp-Source: ABdhPJy1LzpHJ6oUemubbulJihFNJ6U9Os7L7HXiGhc16CwgAj0vVUGdk3T+jnewdIXfCRkMvjq6Cw== X-Received: by 2002:adf:fd41:: with SMTP id h1mr7389390wrs.374.1590733997964; Thu, 28 May 2020 23:33:17 -0700 (PDT) Received: from dhcp-10-123-153-36.dhcp.broadcom.net ([192.19.234.250]) by smtp.gmail.com with ESMTPSA id v7sm5322349wme.46.2020.05.28.23.33.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 May 2020 23:33:17 -0700 (PDT) To: dev@openvswitch.org Date: Fri, 29 May 2020 02:33:05 -0400 Message-Id: <20200529063305.18641-1-sriharsha.basavapatna@broadcom.com> X-Mailer: git-send-email 2.25.0.rc2 MIME-Version: 1.0 Subject: [ovs-dev] [PATCH v2] netdev-offload-dpdk: Support offload of VLAN PUSH/POP actions X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Sriharsha Basavapatna via dev From: Sriharsha Basavapatna Reply-To: Sriharsha Basavapatna Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" Parse VLAN PUSH/POP OVS datapath actions and add respective RTE actions. Signed-off-by: Sriharsha Basavapatna Acked-by: Eli Britstein --- v1->v2: * Updated dump_flow_action() to print VLAN Push/Pop actions * Updated NEWS, Documentation/howto/dpdk.rst files --- Documentation/howto/dpdk.rst | 1 + NEWS | 1 + lib/netdev-offload-dpdk.c | 64 ++++++++++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+) diff --git a/Documentation/howto/dpdk.rst b/Documentation/howto/dpdk.rst index be950d7ce..c40fcafcb 100644 --- a/Documentation/howto/dpdk.rst +++ b/Documentation/howto/dpdk.rst @@ -395,6 +395,7 @@ Supported actions for hardware offload are: - Modification of Ethernet (mod_dl_src/mod_dl_dst). - Modification of IPv4 (mod_nw_src/mod_nw_dst/mod_nw_ttl). - Modification of TCP/UDP (mod_tp_src/mod_tp_dst). +- VLAN Push/Pop (push_vlan/pop_vlan). Further Reading --------------- diff --git a/NEWS b/NEWS index 3dbd8ec0e..c1311e366 100644 --- a/NEWS +++ b/NEWS @@ -9,6 +9,7 @@ Post-v2.13.0 - DPDK: * Deprecated DPDK pdump packet capture support removed. * Deprecated DPDK ring ports (dpdkr) are no longer supported. + * Add hardware offload support for VLAN Push/Pop actions (experimental). - Linux datapath: * Support for kernel versions up to 5.5.x. - AF_XDP: diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c index f8c46bbaa..c57586a48 100644 --- a/lib/netdev-offload-dpdk.c +++ b/lib/netdev-offload-dpdk.c @@ -420,6 +420,36 @@ dump_flow_action(struct ds *s, const struct rte_flow_action *actions) } else { ds_put_format(s, " Set-%s-tcp/udp-port = null\n", dirstr); } + } else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN) { + const struct rte_flow_action_of_push_vlan *rte_push_vlan = + actions->conf; + ds_put_cstr(s, "rte flow push-vlan action:\n"); + if (rte_push_vlan) { + ds_put_format(s, " Push-vlan: 0x%"PRIx16"\n", + ntohs(rte_push_vlan->ethertype)); + } else { + ds_put_format(s, " Push-vlan = null\n"); + } + } else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_PCP) { + struct rte_flow_action_of_set_vlan_pcp *rte_vlan_pcp = actions->conf; + ds_put_cstr(s, "rte flow set-vlan-pcp action:\n"); + if (rte_vlan_pcp) { + ds_put_format(s, " Set-vlan-pcp: %"PRIu8"\n", + rte_vlan_pcp->vlan_pcp); + } else { + ds_put_format(s, " Set-vlan-pcp = null\n"); + } + } else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_VID) { + struct rte_flow_action_of_set_vlan_vid *rte_vlan_vid = actions->conf; + ds_put_cstr(s, "rte flow set-vlan-vid action:\n"); + if (rte_vlan_vid) { + ds_put_format(s, " Set-vlan-vid: %"PRIu16"\n", + ntohs(rte_vlan_vid->vlan_vid)); + } else { + ds_put_format(s, " Set-vlan-vid = null\n"); + } + } else if (actions->type == RTE_FLOW_ACTION_TYPE_OF_POP_VLAN) { + ds_put_cstr(s, "rte flow pop-vlan action\n"); } else { ds_put_format(s, "unknown rte flow action (%d)\n", actions->type); } @@ -970,6 +1000,33 @@ parse_set_actions(struct flow_actions *actions, return 0; } +static int +parse_vlan_push_action(struct flow_actions *actions, + const struct ovs_action_push_vlan *vlan_push) +{ + struct rte_flow_action_of_push_vlan *rte_push_vlan; + struct rte_flow_action_of_set_vlan_pcp *rte_vlan_pcp; + struct rte_flow_action_of_set_vlan_vid *rte_vlan_vid; + + rte_push_vlan = xzalloc(sizeof *rte_push_vlan); + rte_push_vlan->ethertype = vlan_push->vlan_tpid; + add_flow_action(actions, RTE_FLOW_ACTION_TYPE_OF_PUSH_VLAN, + rte_push_vlan); + + rte_vlan_pcp = xzalloc(sizeof *rte_vlan_pcp); + rte_vlan_pcp->vlan_pcp = vlan_tci_to_pcp(vlan_push->vlan_tci); + add_flow_action(actions, RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_PCP, + rte_vlan_pcp); + + rte_vlan_vid = xzalloc(sizeof *rte_vlan_vid); + rte_vlan_vid->vlan_vid = + rte_cpu_to_be_16(vlan_tci_to_vid(vlan_push->vlan_tci)); + add_flow_action(actions, RTE_FLOW_ACTION_TYPE_OF_SET_VLAN_VID, + rte_vlan_vid); + + return 0; +} + static int parse_flow_actions(struct netdev *netdev, struct flow_actions *actions, @@ -998,6 +1055,13 @@ parse_flow_actions(struct netdev *netdev, masked)) { return -1; } + } else if (nl_attr_type(nla) == OVS_ACTION_ATTR_PUSH_VLAN) { + const struct ovs_action_push_vlan *vlan = nl_attr_get(nla); + if (parse_vlan_push_action(actions, vlan)) { + return -1; + } + } else if (nl_attr_type(nla) == OVS_ACTION_ATTR_POP_VLAN) { + add_flow_action(actions, RTE_FLOW_ACTION_TYPE_OF_POP_VLAN, NULL); } else { VLOG_DBG_RL(&rl, "Unsupported action type %d", nl_attr_type(nla)); return -1;