diff options
author | Sairam Venugopal <vsairam@vmware.com> | 2016-12-16 14:28:09 -0800 |
---|---|---|
committer | Gurucharan Shetty <guru@ovn.org> | 2016-12-20 09:32:05 -0800 |
commit | 680f666f3fe26d94318ccb1d9cf94587bf990542 (patch) | |
tree | 0f69fd129f6e945fb9d585f0eb3fdd10708018d2 /datapath-windows | |
parent | e83cb65878fb2ff3de8eaeee0970d0fc9ba104b2 (diff) | |
download | openvswitch-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')
-rw-r--r-- | datapath-windows/ovsext/Conntrack-tcp.c | 15 | ||||
-rw-r--r-- | 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 1c46bb015..f533b935f 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 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); |