diff mbox

[ovs-dev,v2,1/4] datapath-windows: Conntrack - Fix OvsGetTcpPayloadLength()

Message ID 20161209200446.78864-2-vsairam@vmware.com
State Superseded
Delegated to: Guru Shetty
Headers show

Commit Message

Sairam Venugopal Dec. 9, 2016, 8:04 p.m. UTC
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>
---
 datapath-windows/ovsext/Conntrack-tcp.c | 15 ---------------
 datapath-windows/ovsext/Conntrack.h     | 22 ++++++++++++++++++++++
 2 files changed, 22 insertions(+), 15 deletions(-)

Comments

Alin Serdean Dec. 15, 2016, 12:15 p.m. UTC | #1
Just a small alignment problem.

Acked-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>


> -----Original Message-----
> From: ovs-dev-bounces@openvswitch.org [mailto:ovs-dev-
> bounces@openvswitch.org] On Behalf Of Sairam Venugopal
> Sent: Friday, December 9, 2016 10:05 PM
> To: dev@openvswitch.org
> Subject: [ovs-dev] [PATCH v2 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@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,
[Alin Serdean] Alignment issue
> +                                                    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
> 
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
diff mbox

Patch

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);