freebsd: Make libgb compile on FreeBSD

Include header files for recfrom/AF_INET and include a
struct ip_hdr as it is not available on *BSD.
This commit is contained in:
Holger Hans Peter Freyther 2012-07-12 14:13:41 +02:00
parent 3c6a2cef5e
commit 3c16de2954
2 changed files with 38 additions and 0 deletions

View File

@ -66,6 +66,8 @@
#include <errno.h>
#include <stdint.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <osmocom/core/msgb.h>

View File

@ -48,6 +48,42 @@ struct gre_hdr {
uint16_t ptype;
} __attribute__ ((packed));
#if defined(__FreeBSD__)
/**
* On BSD the IPv4 struct is called struct ip and instead of iXX
* the members are called ip_XX. One could change this code to use
* struct ip but that would require to define _BSD_SOURCE and that
* might have other complications. Instead make sure struct iphdr
* is present on FreeBSD. The below is taken from GLIBC.
*
* The GNU C Library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*/
struct iphdr
{
#if BYTE_ORDER == LITTLE_ENDIAN
unsigned int ihl:4;
unsigned int version:4;
#elif BYTE_ORDER == BIG_ENDIAN
unsigned int version:4;
unsigned int ihl:4;
#endif
u_int8_t tos;
u_int16_t tot_len;
u_int16_t id;
u_int16_t frag_off;
u_int8_t ttl;
u_int8_t protocol;
u_int16_t check;
u_int32_t saddr;
u_int32_t daddr;
/*The options start here. */
};
#endif
/* IPv4 messages inside the GRE tunnel might be GRE keepalives */
static int handle_rx_gre_ipv4(struct osmo_fd *bfd, struct msgb *msg,
struct iphdr *iph, struct gre_hdr *greh)