summaryrefslogtreecommitdiff
path: root/datapath-windows/ovsext/Conntrack-tcp.c
diff options
context:
space:
mode:
authorPaul Boca <pboca@cloudbasesolutions.com>2016-08-29 19:11:06 +0000
committerGurucharan Shetty <guru@ovn.org>2016-09-08 12:33:34 -0700
commitc40dcaa6148743636fa6018f390a3d1432907f3a (patch)
treee1c8d87030c1443c8d5ec132fd549cf067f74da7 /datapath-windows/ovsext/Conntrack-tcp.c
parent75e82c17ad55f8b2669ae3487dfdbd80a334f7a8 (diff)
downloadopenvswitch-c40dcaa6148743636fa6018f390a3d1432907f3a.tar.gz
datapath-windows: Fixed tcp flags byte order in conntrack
In user mode the flags are interpreted as little endian. This fix makes the kernel mode compatible with user mode. Signed-off-by: Paul-Daniel Boca <pboca@cloudbasesolutions.com> Acked-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com> Acked-by: Sairam Venugopal <vsairam@vmware.com> Signed-off-by: Gurucharan Shetty <guru@ovn.org>
Diffstat (limited to 'datapath-windows/ovsext/Conntrack-tcp.c')
-rw-r--r--datapath-windows/ovsext/Conntrack-tcp.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/datapath-windows/ovsext/Conntrack-tcp.c b/datapath-windows/ovsext/Conntrack-tcp.c
index 1820705ea..6adf490f7 100644
--- a/datapath-windows/ovsext/Conntrack-tcp.c
+++ b/datapath-windows/ovsext/Conntrack-tcp.c
@@ -226,13 +226,13 @@ OvsConntrackUpdateTcpEntry(OVS_CT_ENTRY* conn_,
/* The peer that should receive 'pkt' */
struct tcp_peer *dst = &conn->peer[reply ? 0 : 1];
uint8_t sws = 0, dws = 0;
- UINT16 tcp_flags = tcp->flags;
+ UINT16 tcp_flags = ntohs(tcp->flags);
uint16_t win = ntohs(tcp->window);
uint32_t ack, end, seq, orig_seq;
uint32_t p_len = OvsGetTcpPayloadLength(nbl);
int ackskew;
- if (OvsCtInvalidTcpFlags(tcp->flags)) {
+ if (OvsCtInvalidTcpFlags(tcp_flags)) {
return CT_UPDATE_INVALID;
}
@@ -268,7 +268,7 @@ OvsConntrackUpdateTcpEntry(OVS_CT_ENTRY* conn_,
if (src->state < CT_DPIF_TCPS_SYN_SENT) {
/* First packet from this end. Set its state */
- ack = ntohl(tcp->ack);
+ ack = ntohl(tcp->ack_seq);
end = seq + p_len;
if (tcp_flags & TCP_SYN) {
@@ -308,7 +308,7 @@ OvsConntrackUpdateTcpEntry(OVS_CT_ENTRY* conn_,
}
} else {
- ack = ntohl(tcp->ack);
+ ack = ntohl(tcp->ack_seq);
end = seq + p_len;
if (tcp_flags & TCP_SYN) {
end++;
@@ -460,14 +460,16 @@ OvsConntrackUpdateTcpEntry(OVS_CT_ENTRY* conn_,
BOOLEAN
OvsConntrackValidateTcpPacket(const TCPHdr *tcp)
{
- if (tcp == NULL || OvsCtInvalidTcpFlags(tcp->flags)) {
+ UINT16 tcp_flags = ntohs(tcp->flags);
+
+ if (tcp == NULL || OvsCtInvalidTcpFlags(tcp_flags)) {
return FALSE;
}
/* A syn+ack is not allowed to create a connection. We want to allow
* totally new connections (syn) or already established, not partially
* open (syn+ack). */
- if ((tcp->flags & TCP_SYN) && (tcp->flags & TCP_ACK)) {
+ if ((tcp_flags & TCP_SYN) && (tcp_flags & TCP_ACK)) {
return FALSE;
}