From patchwork Tue Sep 26 05:36:37 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yuanhan Liu X-Patchwork-Id: 818463 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=fridaylinux-org.20150623.gappssmtp.com header.i=@fridaylinux-org.20150623.gappssmtp.com header.b="zJEalViS"; dkim-atps=neutral Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3y1VH920Gmz9t30 for ; Tue, 26 Sep 2017 15:43:17 +1000 (AEST) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id A841DBED; Tue, 26 Sep 2017 05:40:33 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 8C822BEA for ; Tue, 26 Sep 2017 05:40:32 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.7.6 Received: from mail-pf0-f172.google.com (mail-pf0-f172.google.com [209.85.192.172]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 26AD93D4 for ; Tue, 26 Sep 2017 05:40:32 +0000 (UTC) Received: by mail-pf0-f172.google.com with SMTP id x78so5028568pff.10 for ; Mon, 25 Sep 2017 22:40:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fridaylinux-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=8IuJSwyzAF/5D3NKQtPLOn/Zzq6urWYztIzVW4cPzIM=; b=zJEalViSdmAuDGxsVXQ/HnWIqSASLKmbQSn44enyJY4ZFojnksjhKRP7YfPk58+Jhb nfNG0S9sBL/sBXSQQkXQuJUdQVAkl1VlKKiWJ3TRJf1vqxIVz4Dj+b9mmBvNaoweHtRp RyLqGMW8om2IBPEs8c+o7u7RLZWQZrc4CVaVt2UoddtUWeyqEboYqkBlzkqy9VHqJ/Et cM4mvm1Ds9kwumBrAy4nhoNogs2W9wrxu94Y3vDAm/jeoFHq9XIdYZPvk+HOfpw8BZ6U qj7ecQCfSWPaQTERtdE9Cog5ykDx85ykwWdbt6vUrONvMLKxsZu+S4VhY9ZFbAaCsBmD 94ug== 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:in-reply-to :references; bh=8IuJSwyzAF/5D3NKQtPLOn/Zzq6urWYztIzVW4cPzIM=; b=amSmX+pcYhrTPz1SpovUw97OXnBGk6QBnPG4DiCyRfmof64iJnMIybBG3PsmD1e4+a oHTVjXbjGdzMRVkRmts2bWxFvZ3uuP0Oyd0dFMVABUFDw8riuC7L7uEQiLIT8NqbW6YJ vPYjYCF9CituS3dRFwk9+uAo1tYKXs1mvW/qmpK9mnMkss9TqcI/Kfxy3g0DgI2Jv6MH ZxIGYiO0/H2C/nEf1+qx3aWYKLuXjhZZcvSfz0ZEIIWoZA0Xqxsz1orXuEb/zEDEqjrE nm2e6DS+Lyai1xXcwt9ZsqIT8VMH/W6ZhR0YIWOSEhvLvkoFx6DrdhhEWLiPRaXUqiLO qCLA== X-Gm-Message-State: AHPjjUhURm+3054okBxHO2P+qvARCtIq53C8bAGLW7FZJzQ1VuHEVG5x ICv3bID6a4+7RI6icFXPe9VmhZVjkXX3uQ== X-Google-Smtp-Source: AOwi7QD4xCySTFSIaC3jdKnLhogxFgjYIJ6aC1KHQtnraUMz+Xvi1juRhswd7h1p7ZH9D2Ct90GtAA== X-Received: by 10.99.121.135 with SMTP id u129mr10098233pgc.260.1506404431367; Mon, 25 Sep 2017 22:40:31 -0700 (PDT) Received: from localhost.localdomain ([101.228.205.132]) by smtp.gmail.com with ESMTPSA id o79sm13180077pfi.108.2017.09.25.22.40.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 25 Sep 2017 22:40:30 -0700 (PDT) From: Yuanhan Liu To: dev@openvswitch.org Date: Tue, 26 Sep 2017 13:36:37 +0800 Message-Id: <1506404199-23579-8-git-send-email-yliu@fridaylinux.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1506404199-23579-1-git-send-email-yliu@fridaylinux.org> References: <1506404199-23579-1-git-send-email-yliu@fridaylinux.org> X-Spam-Status: No, score=0.5 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, RCVD_IN_DNSWL_NONE, RCVD_IN_SORBS_SPAM autolearn=disabled version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Cc: Simon Horman Subject: [ovs-dev] [PATCH v3 7/9] netdev-dpdk: remove offloaded flow on deletion X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org Inovke netdev class '->flow_del' method on flow deletion. The dpdk netdev implementation will then remove the rte flow associated with the ufid. Co-authored-by: Finn Christensen Signed-off-by: Yuanhan Liu Signed-off-by: Finn Christensen --- v2: - check the returned "port" from dp_netdev_lookup_port - error log when flow is not found --- lib/dpif-netdev.c | 6 ++++++ lib/netdev-dpdk.c | 19 ++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c index 1a70af6..13fd012 100644 --- a/lib/dpif-netdev.c +++ b/lib/dpif-netdev.c @@ -1964,6 +1964,12 @@ dp_netdev_pmd_remove_flow(struct dp_netdev_pmd_thread *pmd, dpcls_remove(cls, &flow->cr); cmap_remove(&pmd->flow_table, node, dp_netdev_flow_hash(&flow->ufid)); if (flow->has_mark) { + struct dp_netdev_port *port; + + port = dp_netdev_lookup_port(pmd->dp, in_port); + if (port) { + netdev_flow_del(port->netdev, &flow->ufid, NULL); + } dp_netdev_remove_flow_mark_map(flow->mark); flow->has_mark = false; } diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index 3e2b96b..02c3677 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -3881,6 +3881,23 @@ netdev_dpdk_flow_put(struct netdev *netdev, struct match *match, actions_len, ufid, info); } +static int +netdev_dpdk_flow_del(struct netdev *netdev, const ovs_u128 *ufid, + struct dpif_flow_stats *stats OVS_UNUSED) +{ + + struct rte_flow *rte_flow = get_rte_flow_by_ufid(ufid); + + if (!rte_flow) { + VLOG_ERR("failed to find flow associated with ufid " UUID_FMT "\n", + UUID_ARGS((struct uuid *)ufid)); + return -1; + } + + return netdev_dpdk_destroy_rte_flow(netdev_dpdk_cast(netdev), + ufid, rte_flow); +} + #define DPDK_FLOW_OFFLOAD_API \ NULL, /* flow_flush */ \ NULL, /* flow_dump_create */ \ @@ -3888,7 +3905,7 @@ netdev_dpdk_flow_put(struct netdev *netdev, struct match *match, NULL, /* flow_dump_next */ \ netdev_dpdk_flow_put, \ NULL, /* flow_get */ \ - NULL, /* flow_del */ \ + netdev_dpdk_flow_del, \ NULL /* init_flow_api */