Acked-by: Paul-Daniel Boca <pb...@cloudbasesolutions.com>
> -----Original Message----- > From: dev [mailto:dev-boun...@openvswitch.org] On Behalf Of Sairam > Venugopal > Sent: Tuesday, June 21, 2016 4:23 AM > To: dev@openvswitch.org > Subject: [ovs-dev] [PATCH 3/9] 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 <vsai...@vmware.com> > --- > 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; > +} > -- > 2.5.0.windows.1 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev