From patchwork Fri Jun 24 18:43:00 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sairam Venugopal X-Patchwork-Id: 640370 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from archives.nicira.com (archives.nicira.com [96.126.127.54]) by ozlabs.org (Postfix) with ESMTP id 3rbnKk0Kczz9t0J for ; Sat, 25 Jun 2016 04:43:54 +1000 (AEST) Received: from archives.nicira.com (localhost [127.0.0.1]) by archives.nicira.com (Postfix) with ESMTP id 2C62C10C6A; Fri, 24 Jun 2016 11:43:28 -0700 (PDT) X-Original-To: dev@openvswitch.org Delivered-To: dev@openvswitch.org Received: from mx3v3.cudamail.com (mx3.cudamail.com [64.34.241.5]) by archives.nicira.com (Postfix) with ESMTPS id 6554110C44 for ; Fri, 24 Jun 2016 11:43:23 -0700 (PDT) Received: from bar6.cudamail.com (localhost [127.0.0.1]) by mx3v3.cudamail.com (Postfix) with ESMTPS id E532E1628BF for ; Fri, 24 Jun 2016 12:43:22 -0600 (MDT) X-ASG-Debug-ID: 1466793802-0b32375aed283530001-byXFYA Received: from mx3-pf2.cudamail.com ([192.168.14.1]) by bar6.cudamail.com with ESMTP id XnPiYXTPQEoTAQe5 (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Fri, 24 Jun 2016 12:43:22 -0600 (MDT) X-Barracuda-Envelope-From: vsairam@vmware.com X-Barracuda-RBL-Trusted-Forwarder: 192.168.14.1 Received: from unknown (HELO EX13-EDG-OU-002.vmware.com) (208.91.0.190) by mx3-pf2.cudamail.com with ESMTPS (AES256-SHA encrypted); 24 Jun 2016 18:43:22 -0000 Received-SPF: error (mx3-pf2.cudamail.com: error in processing during lookup of vmware.com: DNS problem) Received: from sc9-mailhost3.vmware.com (10.113.161.73) by EX13-EDG-OU-002.vmware.com (10.113.208.156) with Microsoft SMTP Server id 15.0.1156.6; Fri, 24 Jun 2016 11:43:19 -0700 Received: from localhost.localdomain (htb-1s-eng-dhcp151.eng.vmware.com [10.33.78.151]) by sc9-mailhost3.vmware.com (Postfix) with ESMTP id F216A4047A; Fri, 24 Jun 2016 11:43:20 -0700 (PDT) X-CudaMail-Envelope-Sender: vsairam@vmware.com From: Sairam Venugopal To: X-CudaMail-Whitelist-To: dev@openvswitch.org X-CudaMail-MID: CM-V2-623035043 X-CudaMail-DTE: 062416 X-CudaMail-Originating-IP: 208.91.0.190 Date: Fri, 24 Jun 2016 11:43:00 -0700 X-ASG-Orig-Subj: [##CM-V2-623035043##][PATCH v2 3/9] datapath-windows: Add support for flushing conntrack entries Message-ID: <1466793786-5572-4-git-send-email-vsairam@vmware.com> X-Mailer: git-send-email 2.5.0.windows.1 In-Reply-To: <1466793786-5572-1-git-send-email-vsairam@vmware.com> References: <1466793786-5572-1-git-send-email-vsairam@vmware.com> MIME-Version: 1.0 Received-SPF: None (EX13-EDG-OU-002.vmware.com: vsairam@vmware.com does not designate permitted sender hosts) X-Barracuda-Connect: UNKNOWN[192.168.14.1] X-Barracuda-Start-Time: 1466793802 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 Subject: [ovs-dev] [PATCH v2 3/9] datapath-windows: Add support for flushing conntrack entries 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: , Errors-To: dev-bounces@openvswitch.org Sender: "dev" Flush out all conntrack entries or those that match a given zone. Since the conntrack module is internal to OVS in Windows, this functionality needs to be added in. Signed-off-by: Sairam Venugopal --- datapath-windows/ovsext/Conntrack.c | 75 +++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/datapath-windows/ovsext/Conntrack.c b/datapath-windows/ovsext/Conntrack.c index 5fc9282..15c495d 100644 --- a/datapath-windows/ovsext/Conntrack.c +++ b/datapath-windows/ovsext/Conntrack.c @@ -624,3 +624,78 @@ ovsConntrackEntryCleaner(PVOID data) PsTerminateSystemThread(STATUS_SUCCESS); } + +/* + *---------------------------------------------------------------------------- + * OvsCtFlush + * Flushes out all Conntrack Entries that match the given zone + *---------------------------------------------------------------------------- + */ +static __inline NDIS_STATUS +OvsCtFlush(UINT16 zone) +{ + PLIST_ENTRY link, next; + POVS_CT_ENTRY entry; + + LOCK_STATE_EX lockState; + NdisAcquireRWLockWrite(ovsConntrackLockObj, &lockState, 0); + + for (int i = 0; i < CT_HASH_TABLE_SIZE; i++) { + LIST_FORALL_SAFE(&ovsConntrackTable[i], link, next) { + entry = CONTAINING_RECORD(link, OVS_CT_ENTRY, link); + if (!zone || zone == entry->key.zone) + OvsCtEntryDelete(entry); + } + } + + NdisReleaseRWLock(ovsConntrackLockObj, &lockState); + return NDIS_STATUS_SUCCESS; +} + +NTSTATUS +OvsCtDeleteCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx, + UINT32 *replyLen) +{ + POVS_MESSAGE msgIn = (POVS_MESSAGE)usrParamsCtx->inputBuffer; + PNL_MSG_HDR nlMsgHdr = &(msgIn->nlMsg); + PNL_ATTR ctAttrs[__CTA_MAX]; + UINT32 attrOffset = NLMSG_HDRLEN + NF_GEN_MSG_HDRLEN + OVS_HDRLEN; + NL_ERROR nlError = NL_ERROR_SUCCESS; + NTSTATUS status; + UINT16 zone = 0; + + static const NL_POLICY ctZonePolicy[] = { + [CTA_ZONE] = { .type = NL_A_BE16, .optional = TRUE }, + }; + + if ((NlAttrParse(nlMsgHdr, attrOffset, NfNlMsgAttrsLen(nlMsgHdr), + ctZonePolicy, ARRAY_SIZE(ctZonePolicy), + ctAttrs, ARRAY_SIZE(ctAttrs))) + != TRUE) { + OVS_LOG_ERROR("Zone attr parsing failed for msg: %p", nlMsgHdr); + status = STATUS_INVALID_PARAMETER; + goto done; + } + + if (ctAttrs[CTA_ZONE]) { + zone = NlAttrGetU16(ctAttrs[CTA_ZONE]); + } + + status = OvsCtFlush(zone); + +done: + if (status) { + nlError = NlMapStatusToNlErr(status); + } + if (nlError != NL_ERROR_SUCCESS) { + POVS_MESSAGE_ERROR msgError = (POVS_MESSAGE_ERROR) + usrParamsCtx->outputBuffer; + + ASSERT(msgError); + NlBuildErrorMsg(msgIn, msgError, nlError, replyLen); + ASSERT(*replyLen != 0); + status = STATUS_SUCCESS; + } + + return status; +}