From f6e6c3b5a5997ffc67d96785bbde76bcec072890 Mon Sep 17 00:00:00 2001 From: "Ondrej Zajicek (work)" Date: Tue, 17 Jan 2017 13:21:25 +0100 Subject: [PATCH] Fix IP_HDRINCL usage on FreeBSD 11 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit FreeBSD 11 changed endianity of ip_len field from host order to network order. Also DragonFly BSD allegedly expects network order here. Thanks to Olivier Cochard-Labbé for the patch. --- sysdep/bsd/sysio.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sysdep/bsd/sysio.h b/sysdep/bsd/sysio.h index 2610a47b..9b10e6e8 100644 --- a/sysdep/bsd/sysio.h +++ b/sysdep/bsd/sysio.h @@ -9,6 +9,7 @@ #include #include // Workaround for some BSDs #include +#include #ifdef __NetBSD__ @@ -179,8 +180,8 @@ sk_prepare_ip_header(sock *s, void *hdr, int dlen) ip->ip_src = ipa_to_in4(s->saddr); ip->ip_dst = ipa_to_in4(s->daddr); -#ifdef __OpenBSD__ - /* OpenBSD expects ip_len in network order, other BSDs expect host order */ +#if (defined __OpenBSD__) || (defined __DragonFly__) || (defined __FreeBSD__ && (__FreeBSD_version >= 1100030)) + /* Different BSDs have different expectations of ip_len endianity */ ip->ip_len = htons(ip->ip_len); #endif }