[ovs-dev] [PATCH v5 04/11] datapath-windows: Add support for flushing conntrack entries
Nithin Raju
nithin at vmware.com
Fri Jul 1 20:53:20 UTC 2016
Acked-by: Nithin Raju <nithin at vmware.com>
-----Original Message-----
From: dev <dev-bounces at openvswitch.org> on behalf of Sairam Venugopal
<vsairam at vmware.com>
Date: Friday, July 1, 2016 at 1:49 PM
To: "dev at openvswitch.org" <dev at openvswitch.org>
Subject: [ovs-dev] [PATCH v5 04/11] datapath-windows: Add support
for flushing conntrack entries
>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 <vsairam at vmware.com>
>Acked-by: Paul-Daniel Boca <pboca at cloudbasesolutions.com>
>---
> datapath-windows/ovsext/Conntrack.c | 93
>+++++++++++++++++++++++++++++++++++++
> 1 file changed, 93 insertions(+)
>
>diff --git a/datapath-windows/ovsext/Conntrack.c
>b/datapath-windows/ovsext/Conntrack.c
>index b78ba26..f21acd4 100644
>--- a/datapath-windows/ovsext/Conntrack.c
>+++ b/datapath-windows/ovsext/Conntrack.c
>@@ -624,3 +624,96 @@ 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);
>+ /* zone is a non-zero value */
>+ 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;
>+ POVS_MESSAGE msgOut = (POVS_MESSAGE)usrParamsCtx->outputBuffer;
>+ 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;
>+ NL_BUFFER nlBuf;
>+ UINT16 nlmsgType;
>+ PNL_MSG_HDR nlMsg;
>+
>+ static const NL_POLICY ctZonePolicy[] = {
>+ [CTA_ZONE] = { .type = NL_A_BE16, .optional = TRUE },
>+ };
>+
>+ if ((NlAttrParse(nlMsgHdr, attrOffset, NlNfMsgAttrsLen(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);
>+ if (status == STATUS_SUCCESS) {
>+ nlmsgType = (NFNL_SUBSYS_CTNETLINK << 8 | IPCTNL_MSG_CT_DELETE);
>+ NlBufInit(&nlBuf,
>+ usrParamsCtx->outputBuffer,
>+ usrParamsCtx->outputLength);
>+ status = NlFillOvsMsgForNfGenMsg(&nlBuf, nlmsgType, NLM_F_CREATE,
>+ msgIn->nlMsg.nlmsgSeq,
>+ msgIn->nlMsg.nlmsgPid,
>+ AF_UNSPEC,
>+ msgIn->nfGenMsg.version,
>+ 0);
>+ nlMsg = (PNL_MSG_HDR)NlBufAt(&nlBuf, 0, 0);
>+ nlMsg->nlmsgLen = NlBufSize(&nlBuf);
>+ *replyLen = msgOut->nlMsg.nlmsgLen;
>+ }
>+
>+done:
>+ 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;
>+}
>--
>2.5.0.windows.1
>
>_______________________________________________
>dev mailing list
>dev at openvswitch.org
>https://urldefense.proofpoint.com/v2/url?u=http-3A__openvswitch.org_mailma
>n_listinfo_dev&d=CwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=pN
>HQcdr7B40b4h6Yb7FIedI1dnBsxdDuTLBYD3JqV80&m=5ykz23RNfdGpL3QHXRgy-587PFdAji
>SXzTF2SjTVOzU&s=EoHzYcFTcQS4fXXXmuxoiSX_7UrJ_rg6ypro3z7qVto&e=
More information about the dev
mailing list