[ovs-dev] [PATCH 6/9] datapath-windows: Modify OvsCreateNlMsgFromCtEntry to make it reusable
Sairam Venugopal
vsairam at vmware.com
Wed Jul 13 23:38:35 UTC 2016
Tweak the OvsCreateNlMsgFromCtEntry() method to reuse it for creating
netlink messages from other files. Also define the function in Conntrack.h
to make it accessible.
Signed-off-by: Sairam Venugopal <vsairam at vmware.com>
---
datapath-windows/ovsext/Conntrack.c | 32 ++++++++++++++++++++++----------
datapath-windows/ovsext/Conntrack.h | 9 +++++++++
2 files changed, 31 insertions(+), 10 deletions(-)
diff --git a/datapath-windows/ovsext/Conntrack.c b/datapath-windows/ovsext/Conntrack.c
index 90b59ce..382c13d 100644
--- a/datapath-windows/ovsext/Conntrack.c
+++ b/datapath-windows/ovsext/Conntrack.c
@@ -934,12 +934,15 @@ WindowsTickToUnixSeconds(long long windowsTicks)
- SEC_TO_UNIX_EPOCH));
}
-static NTSTATUS
+NTSTATUS
OvsCreateNlMsgFromCtEntry(POVS_CT_ENTRY entry,
- POVS_MESSAGE msgIn,
PVOID outBuffer,
UINT32 outBufLen,
- int dpIfIndex)
+ UINT8 eventType,
+ UINT32 nlmsgSeq,
+ UINT32 nlmsgPid,
+ UINT8 nfGenVersion,
+ UINT32 dpIfIndex)
{
NL_BUFFER nlBuf;
BOOLEAN ok;
@@ -947,6 +950,7 @@ OvsCreateNlMsgFromCtEntry(POVS_CT_ENTRY entry,
UINT32 timeout;
NDIS_STATUS status;
UINT64 currentTime, expiration;
+ UINT16 nlmsgType;
NdisGetCurrentSystemTime((LARGE_INTEGER *)¤tTime);
UINT8 nfgenFamily = 0;
if (entry->key.dl_type == htons(ETH_TYPE_IPV4)) {
@@ -957,13 +961,17 @@ OvsCreateNlMsgFromCtEntry(POVS_CT_ENTRY entry,
NlBufInit(&nlBuf, outBuffer, outBufLen);
/* Mimic netfilter */
- UINT16 nlmsgType = (NFNL_SUBSYS_CTNETLINK << 8 | IPCTNL_MSG_CT_NEW);
+ if (eventType == OVS_EVENT_CT_NEW) {
+ nlmsgType = (UINT16) (NFNL_SUBSYS_CTNETLINK << 8 | IPCTNL_MSG_CT_NEW);
+ } else if (eventType == OVS_EVENT_CT_DELETE) {
+ nlmsgType = (UINT16) (NFNL_SUBSYS_CTNETLINK << 8 | IPCTNL_MSG_CT_DELETE);
+ } else {
+ return STATUS_INVALID_PARAMETER;
+ }
+
ok = NlFillOvsMsgForNfGenMsg(&nlBuf, nlmsgType, NLM_F_CREATE,
- msgIn->nlMsg.nlmsgSeq,
- msgIn->nlMsg.nlmsgPid,
- nfgenFamily,
- msgIn->nfGenMsg.version,
- dpIfIndex);
+ nlmsgSeq, nlmsgPid, nfgenFamily,
+ nfGenVersion, dpIfIndex);
if (!ok) {
return STATUS_INVALID_BUFFER_SIZE;
}
@@ -1130,9 +1138,13 @@ OvsCtDumpCmdHandler(POVS_USER_PARAMS_CONTEXT usrParamsCtx,
if (outIndex >= inIndex) {
entry = CONTAINING_RECORD(link, OVS_CT_ENTRY, link);
- rc = OvsCreateNlMsgFromCtEntry(entry, msgIn,
+ rc = OvsCreateNlMsgFromCtEntry(entry,
usrParamsCtx->outputBuffer,
usrParamsCtx->outputLength,
+ OVS_EVENT_CT_NEW,
+ msgIn->nlMsg.nlmsgSeq,
+ msgIn->nlMsg.nlmsgPid,
+ msgIn->nfGenMsg.version,
0);
if (rc != NDIS_STATUS_SUCCESS) {
diff --git a/datapath-windows/ovsext/Conntrack.h b/datapath-windows/ovsext/Conntrack.h
index 6d573c8..4995ff4 100644
--- a/datapath-windows/ovsext/Conntrack.h
+++ b/datapath-windows/ovsext/Conntrack.h
@@ -116,4 +116,13 @@ enum CT_UPDATE_RES OvsConntrackUpdateTcpEntry(OVS_CT_ENTRY* conn_,
enum ct_update_res OvsConntrackUpdateOtherEntry(OVS_CT_ENTRY *conn_,
BOOLEAN reply,
UINT64 now);
+NTSTATUS
+OvsCreateNlMsgFromCtEntry(POVS_CT_ENTRY entry,
+ PVOID outBuffer,
+ UINT32 outBufLen,
+ UINT8 eventType,
+ UINT32 nlmsgSeq,
+ UINT32 nlmsgPid,
+ UINT8 nfGenVersion,
+ UINT32 dpIfIndex);
#endif /* __OVS_CONNTRACK_H_ */
--
2.9.0.windows.1
More information about the dev
mailing list