[ovs-dev] [PATCH 1/4] datapath-windows: Conntrack - Fix OvsGetTcpPayloadLength()
Shashank Ram
rams at vmware.com
Fri Dec 9 18:54:53 UTC 2016
Acked-by: Shashank Ram <rams at vmware.com>
________________________________
From: Sairam Venugopal <vsairam at vmware.com>
Sent: Friday, December 9, 2016 10:48:23 AM
To: Shashank Ram
Cc: Sairam Venugopal
Subject: [PATCH 1/4] datapath-windows: Conntrack - Fix OvsGetTcpPayloadLength()
Move the OvsGetTcpPayloadLength() to common header. Update the code to
check for null references and the correct size of the TCP header.
Signed-off-by: Sairam Venugopal <vsairam at vmware.com>
---
datapath-windows/ovsext/Conntrack-tcp.c | 15 ---------------
datapath-windows/ovsext/Conntrack.h | 22 ++++++++++++++++++++++
2 files changed, 22 insertions(+), 15 deletions(-)
diff --git a/datapath-windows/ovsext/Conntrack-tcp.c b/datapath-windows/ovsext/Conntrack-tcp.c
index c7fcfa8..a60a198 100644
--- a/datapath-windows/ovsext/Conntrack-tcp.c
+++ b/datapath-windows/ovsext/Conntrack-tcp.c
@@ -184,21 +184,6 @@ OvsTcpGetWscale(const TCPHdr *tcp)
return wscale;
}
-static __inline uint32_t
-OvsGetTcpPayloadLength(PNET_BUFFER_LIST nbl)
-{
- IPHdr *ipHdr;
- char *ipBuf[sizeof(IPHdr)];
- PNET_BUFFER curNb;
- curNb = NET_BUFFER_LIST_FIRST_NB(nbl);
- ipHdr = NdisGetDataBuffer(curNb, sizeof *ipHdr, (PVOID) &ipBuf,
- 1 /*no align*/, 0);
- TCPHdr *tcp = (TCPHdr *)((PCHAR)ipHdr + ipHdr->ihl * 4);
- return (UINT16)ntohs(ipHdr->tot_len)
- - (ipHdr->ihl * 4)
- - (sizeof * tcp);
-}
-
static __inline struct conn_tcp*
OvsCastConntrackEntryToTcpEntry(OVS_CT_ENTRY* conn)
{
diff --git a/datapath-windows/ovsext/Conntrack.h b/datapath-windows/ovsext/Conntrack.h
index 270e2dd..428b12e 100644
--- a/datapath-windows/ovsext/Conntrack.h
+++ b/datapath-windows/ovsext/Conntrack.h
@@ -109,6 +109,28 @@ OvsConntrackUpdateExpiration(OVS_CT_ENTRY *ctEntry,
ctEntry->expiration = now + interval;
}
+static __inline UINT32
+OvsGetTcpPayloadLength(PNET_BUFFER_LIST nbl)
+{
+ IPHdr *ipHdr;
+ char *ipBuf[sizeof(IPHdr)];
+ PNET_BUFFER curNb;
+ curNb = NET_BUFFER_LIST_FIRST_NB(nbl);
+ UINT32 hdrLen = sizeof(EthHdr);
+ NdisAdvanceNetBufferDataStart(curNb, hdrLen, FALSE, NULL);
+ ipHdr = NdisGetDataBuffer(curNb, sizeof *ipHdr, (PVOID) &ipBuf,
+ 1 /*no align*/, 0);
+ if (ipHdr == NULL) {
+ NdisRetreatNetBufferDataStart(curNb, hdrLen, 0, NULL);
+ return 0;
+ }
+
+ TCPHdr *tcp = (TCPHdr *)((PCHAR)ipHdr + ipHdr->ihl * 4);
+ NdisRetreatNetBufferDataStart(curNb, hdrLen, 0, NULL);
+
+ return (ntohs(ipHdr->tot_len) - (ipHdr->ihl * 4) - (TCP_HDR_LEN(tcp)));
+}
+
VOID OvsCleanupConntrack(VOID);
NTSTATUS OvsInitConntrack(POVS_SWITCH_CONTEXT context);
--
2.9.0.windows.1
More information about the dev
mailing list