summaryrefslogtreecommitdiff
path: root/datapath-windows/ovsext/Conntrack.h
diff options
context:
space:
mode:
authorSairam Venugopal <vsairam@vmware.com>2016-12-16 14:28:09 -0800
committerGurucharan Shetty <guru@ovn.org>2016-12-20 09:32:05 -0800
commit680f666f3fe26d94318ccb1d9cf94587bf990542 (patch)
tree0f69fd129f6e945fb9d585f0eb3fdd10708018d2 /datapath-windows/ovsext/Conntrack.h
parente83cb65878fb2ff3de8eaeee0970d0fc9ba104b2 (diff)
downloadopenvswitch-680f666f3fe26d94318ccb1d9cf94587bf990542.tar.gz
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@vmware.com> Acked-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com> Signed-off-by: Gurucharan Shetty <guru@ovn.org>
Diffstat (limited to 'datapath-windows/ovsext/Conntrack.h')
-rw-r--r--datapath-windows/ovsext/Conntrack.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/datapath-windows/ovsext/Conntrack.h b/datapath-windows/ovsext/Conntrack.h
index 270e2dd15..733596df8 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);