Fix ping build on the FreeBSD
No binary (build failed)
—
(log yok)
| @@ -122,6 +122,10 @@ | |
| //usage: "round-trip min/avg/max = 20.1/20.1/20.1 ms\n" | |
| #include <net/if.h> | |
| + | #if defined(__FreeBSD__) |
| + | # include <netinet/in.h> /* struct ip and friends */ |
| + | # include <netinet/ip.h> |
| + | #endif |
| #include <netinet/ip_icmp.h> | |
| #include "libbb.h" | |
| #include "common_bufsiz.h" | |
| @@ -160,6 +164,40 @@ | |
| # endif | |
| #endif | |
| + | #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 |
| + | uint8_t tos; |
| + | uint16_t tot_len; |
| + | uint16_t id; |
| + | uint16_t frag_off; |
| + | uint8_t ttl; |
| + | uint8_t protocol; |
| + | uint16_t check; |
| + | uint32_t saddr; |
| + | uint32_t daddr; |
| + | /*The options start here. */ |
| + | }; |
| + | #endif |
| + | |
| enum { | |
| DEFDATALEN = 56, | |
| MAXIPLEN = 60, | |