Hi,

this is a patch for making it compilable on all BSD.

PS: after reading the mailing list I saw somebody already proposed a patch
but my patch fixes all BSD not only Darwin.

Kind regards.
From f88246058caf16f12435dd3230dbd0399fac85d8 Mon Sep 17 00:00:00 2001
From: David CARLIER <devne...@gmail.com>
Date: Mon, 4 Jul 2016 12:02:52 +0100
Subject: [PATCH] CLEANUP: connection: wrong tcphdr field on BSD

on all BSD, tcphdr has different name for destination and source fields.
---
 src/connection.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/connection.c b/src/connection.c
index 358c9bc..026e4dd 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -26,6 +26,14 @@
 #include <proto/ssl_sock.h>
 #endif
 
+#ifndef BSD
+#define TCPHDR_SOURCE   source
+#define TCPHDR_DEST     dest
+#else
+#define TCPHDR_SOURCE   th_sport
+#define TCPHDR_DEST     th_dport
+#endif
+
 struct pool_head *pool2_connection;
 
 /* perform minimal intializations, report 0 in case of error, 1 if OK. */
@@ -736,11 +744,11 @@ int conn_recv_netscaler_cip(struct connection *conn, int flag)
 		/* update the session's addresses and mark them set */
 		((struct sockaddr_in *)&conn->addr.from)->sin_family = AF_INET;
 		((struct sockaddr_in *)&conn->addr.from)->sin_addr.s_addr = hdr_ip4->ip_src.s_addr;
-		((struct sockaddr_in *)&conn->addr.from)->sin_port = hdr_tcp->source;
+		((struct sockaddr_in *)&conn->addr.from)->sin_port = hdr_tcp->TCPHDR_SOURCE;
 
 		((struct sockaddr_in *)&conn->addr.to)->sin_family = AF_INET;
 		((struct sockaddr_in *)&conn->addr.to)->sin_addr.s_addr = hdr_ip4->ip_dst.s_addr;
-		((struct sockaddr_in *)&conn->addr.to)->sin_port = hdr_tcp->dest;
+		((struct sockaddr_in *)&conn->addr.to)->sin_port = hdr_tcp->TCPHDR_DEST;
 
 		conn->flags |= CO_FL_ADDR_FROM_SET | CO_FL_ADDR_TO_SET;
 	}
@@ -769,11 +777,11 @@ int conn_recv_netscaler_cip(struct connection *conn, int flag)
 		/* update the session's addresses and mark them set */
 		((struct sockaddr_in6 *)&conn->addr.from)->sin6_family = AF_INET6;
 		((struct sockaddr_in6 *)&conn->addr.from)->sin6_addr = hdr_ip6->ip6_src;
-		((struct sockaddr_in6 *)&conn->addr.from)->sin6_port = hdr_tcp->source;
+		((struct sockaddr_in6 *)&conn->addr.from)->sin6_port = hdr_tcp->TCPHDR_SOURCE;
 
 		((struct sockaddr_in6 *)&conn->addr.to)->sin6_family = AF_INET6;
 		((struct sockaddr_in6 *)&conn->addr.to)->sin6_addr = hdr_ip6->ip6_dst;
-		((struct sockaddr_in6 *)&conn->addr.to)->sin6_port = hdr_tcp->dest;
+		((struct sockaddr_in6 *)&conn->addr.to)->sin6_port = hdr_tcp->TCPHDR_DEST;
 
 		conn->flags |= CO_FL_ADDR_FROM_SET | CO_FL_ADDR_TO_SET;
 	}
-- 
2.9.0

Reply via email to