Fix IP_HDRINCL usage on FreeBSD 11
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.
This commit is contained in:
parent
017da76b72
commit
f6e6c3b5a5
1 changed files with 3 additions and 2 deletions
|
@ -9,6 +9,7 @@
|
||||||
#include <net/if_dl.h>
|
#include <net/if_dl.h>
|
||||||
#include <netinet/in_systm.h> // Workaround for some BSDs
|
#include <netinet/in_systm.h> // Workaround for some BSDs
|
||||||
#include <netinet/ip.h>
|
#include <netinet/ip.h>
|
||||||
|
#include <sys/param.h>
|
||||||
|
|
||||||
|
|
||||||
#ifdef __NetBSD__
|
#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_src = ipa_to_in4(s->saddr);
|
||||||
ip->ip_dst = ipa_to_in4(s->daddr);
|
ip->ip_dst = ipa_to_in4(s->daddr);
|
||||||
|
|
||||||
#ifdef __OpenBSD__
|
#if (defined __OpenBSD__) || (defined __DragonFly__) || (defined __FreeBSD__ && (__FreeBSD_version >= 1100030))
|
||||||
/* OpenBSD expects ip_len in network order, other BSDs expect host order */
|
/* Different BSDs have different expectations of ip_len endianity */
|
||||||
ip->ip_len = htons(ip->ip_len);
|
ip->ip_len = htons(ip->ip_len);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue