From patchwork Mon Nov 16 06:21:17 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniele Di Proietto X-Patchwork-Id: 544907 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from archives.nicira.com (unknown [IPv6:2600:3c00::f03c:91ff:fe6e:bdf7]) by ozlabs.org (Postfix) with ESMTP id 8D41A14144E for ; Mon, 16 Nov 2015 17:22:15 +1100 (AEDT) Received: from archives.nicira.com (localhost [127.0.0.1]) by archives.nicira.com (Postfix) with ESMTP id EC007103C0; Sun, 15 Nov 2015 22:21:42 -0800 (PST) X-Original-To: dev@openvswitch.org Delivered-To: dev@openvswitch.org Received: from mx1e3.cudamail.com (mx1.cudamail.com [69.90.118.67]) by archives.nicira.com (Postfix) with ESMTPS id B20541030C for ; Sun, 15 Nov 2015 22:21:41 -0800 (PST) Received: from bar2.cudamail.com (localhost [127.0.0.1]) by mx1e3.cudamail.com (Postfix) with ESMTPS id 3A50542018D for ; Sun, 15 Nov 2015 23:21:41 -0700 (MST) X-ASG-Debug-ID: 1447654900-03dc530880524440001-byXFYA Received: from mx1-pf2.cudamail.com ([192.168.24.2]) by bar2.cudamail.com with ESMTP id v0CLhYQtZaxjfNLg (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Sun, 15 Nov 2015 23:21:40 -0700 (MST) X-Barracuda-Envelope-From: diproiettod@vmware.com X-Barracuda-RBL-Trusted-Forwarder: 192.168.24.2 Received: from unknown (HELO smtp-outbound-2.vmware.com) (208.91.2.13) by mx1-pf2.cudamail.com with ESMTPS (DHE-RSA-AES256-SHA encrypted); 16 Nov 2015 06:21:40 -0000 Received-SPF: error (mx1-pf2.cudamail.com: error in processing during lookup of vmware.com: DNS problem) X-Barracuda-Apparent-Source-IP: 208.91.2.13 X-Barracuda-RBL-IP: 208.91.2.13 Received: from sc9-mailhost2.vmware.com (sc9-mailhost2.vmware.com [10.113.161.72]) by smtp-outbound-2.vmware.com (Postfix) with ESMTP id CE11C287CD for ; Sun, 15 Nov 2015 22:21:39 -0800 (PST) Received: from sc9-mailhost3.vmware.com (unknown [10.129.192.239]) by sc9-mailhost2.vmware.com (Postfix) with ESMTP id 9B496B04F7; Sun, 15 Nov 2015 22:21:39 -0800 (PST) X-CudaMail-Envelope-Sender: diproiettod@vmware.com From: Daniele Di Proietto To: dev@openvswitch.org X-CudaMail-Whitelist-To: dev@openvswitch.org X-CudaMail-MID: CM-E2-1114030514 X-CudaMail-DTE: 111515 X-CudaMail-Originating-IP: 208.91.2.13 Date: Sun, 15 Nov 2015 22:21:17 -0800 X-ASG-Orig-Subj: [##CM-E2-1114030514##][PATCH 06/12] conntrack: Implement flush function. Message-Id: <1447654883-8097-7-git-send-email-diproiettod@vmware.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1447654883-8097-1-git-send-email-diproiettod@vmware.com> References: <1447654883-8097-1-git-send-email-diproiettod@vmware.com> X-Barracuda-Connect: UNKNOWN[192.168.24.2] X-Barracuda-Start-Time: 1447654900 X-Barracuda-Encrypted: DHE-RSA-AES256-SHA X-Barracuda-URL: https://web.cudamail.com:443/cgi-mod/mark.cgi X-ASG-Whitelist: Header =?UTF-8?B?eFwtY3VkYW1haWxcLXdoaXRlbGlzdFwtdG8=?= X-Virus-Scanned: by bsmtpd at cudamail.com X-Barracuda-BRTS-Status: 1 X-ASG-Whitelist: EmailCat (corporate) Subject: [ovs-dev] [PATCH 06/12] conntrack: Implement flush function. X-BeenThere: dev@openvswitch.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dev-bounces@openvswitch.org Sender: "dev" Signed-off-by: Daniele Di Proietto --- lib/conntrack.c | 21 +++++++++++++++++++++ lib/conntrack.h | 3 ++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/lib/conntrack.c b/lib/conntrack.c index 1ac8636..51332aa 100644 --- a/lib/conntrack.c +++ b/lib/conntrack.c @@ -852,3 +852,24 @@ delete_conn(struct conn *conn) { free(conn); } + +int +conntrack_flush(struct conntrack *ct, const uint16_t *zone) +{ + unsigned i; + + for (i = 0; i < CONNTRACK_BUCKETS; i++) { + struct conn *conn, *next; + + ct_lock_lock(&ct->locks[i]); + HMAP_FOR_EACH_SAFE(conn, next, node, &ct->connections[i]) { + if (!zone || *zone == conn->key.zone) { + hmap_remove(&ct->connections[i], &conn->node); + delete_conn(conn); + } + } + ct_lock_unlock(&ct->locks[i]); + } + + return 0; +} diff --git a/lib/conntrack.h b/lib/conntrack.h index f97a7ea..f82857f 100644 --- a/lib/conntrack.h +++ b/lib/conntrack.h @@ -69,6 +69,8 @@ int conntrack_execute(struct conntrack *, struct dp_packet **, size_t, const struct ovs_key_ct_labels *setlabel, const char *helper); +int conntrack_flush(struct conntrack *, const uint16_t *zone); + /* struct ct_lock is a standard mutex or a spinlock when using DPDK */ #ifdef DPDK_NETDEV @@ -140,5 +142,4 @@ struct conntrack { uint32_t purge_inner_bucket; uint32_t purge_inner_offset; }; - #endif /* conntrack.h */