[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 *)&currentTime);
     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