diff -u -r linux-4.9.8-bak/include/uapi/linux/if_arp.h linux-4.9.8/include/uapi/linux/if_arp.h --- include/uapi/linux/if_arp.h 2018-05-14 23:49:28.882768986 +0200 +++ include/uapi/linux/if_arp.h 2018-05-14 23:50:03.156912981 +0200 @@ -24,6 +24,7 @@ #define _UAPI_LINUX_IF_ARP_H #include +#include /* ARP protocol HARDWARE identifiers. */ #define ARPHRD_NETROM 0 /* from KA9Q: NET/ROM pseudo */ @@ -108,7 +109,7 @@ #define ARPOP_InREPLY 9 /* InARP reply */ #define ARPOP_NAK 10 /* (ATM)ARP NAK */ - +#if __UAPI_DEF_ARPREQ /* ARP ioctl request. */ struct arpreq { struct sockaddr arp_pa; /* protocol address */ @@ -117,13 +118,15 @@ struct sockaddr arp_netmask; /* netmask (only for proxy arps) */ char arp_dev[16]; }; - +#endif +#if __UAPI_DEF_ARPREQ_OLD struct arpreq_old { struct sockaddr arp_pa; /* protocol address */ struct sockaddr arp_ha; /* hardware address */ int arp_flags; /* flags */ struct sockaddr arp_netmask; /* netmask (only for proxy arps) */ }; +#endif /* ARP Flag values. */ #define ATF_COM 0x02 /* completed entry (ha valid) */ @@ -133,7 +136,7 @@ #define ATF_NETMASK 0x20 /* want to use a netmask (only for proxy entries) */ #define ATF_DONTPUB 0x40 /* don't answer this addresses */ - +#if __UAPI_DEF_ARPHDR /* * This structure defines an ethernet arp header. */ @@ -156,6 +159,6 @@ #endif }; - +#endif #endif /* _UAPI_LINUX_IF_ARP_H */ diff -u -r linux-4.9.8-bak/include/uapi/linux/libc-compat.h linux-4.9.8/include/uapi/linux/libc-compat.h --- include/uapi/linux/libc-compat.h 2018-05-14 23:49:28.885768999 +0200 +++ include/uapi/linux/libc-compat.h 2018-05-14 23:50:03.156912981 +0200 @@ -51,6 +51,11 @@ /* We have included glibc headers... */ #if defined(__GLIBC__) +#define __UAPI_DEF_ETHHDR 1 +#define __UAPI_DEF_ARPREQ 1 +#define __UAPI_DEF_ARPREQ_OLD 1 +#define __UAPI_DEF_ARPHDR 1 + /* Coordinate with glibc net/if.h header. */ #if defined(_NET_IF_H) && defined(__USE_MISC) @@ -73,7 +78,6 @@ /* Linux headers included first, and we must define everything * we need. The expectation is that glibc will check the * __UAPI_DEF_* defines and adjust appropriately. */ - #define __UAPI_DEF_IF_IFCONF 1 #define __UAPI_DEF_IF_IFMAP 1 #define __UAPI_DEF_IF_IFNAMSIZ 1 @@ -256,6 +260,21 @@ #define __UAPI_DEF_XATTR 1 #endif +#ifdef _NETINET_IF_ETHER_H /* musl */ +#define __UAPI_DEF_ETHHDR 0 +#else +#define __UAPI_DEF_ETHHDR 1 +#endif + +#ifdef _NET_IF_ARP_H +#define __UAPI_DEF_ARPREQ 0 +#define __UAPI_DEF_ARPREQ_OLD 0 +#define __UAPI_DEF_ARPHDR 0 +#else +#define __UAPI_DEF_ARPREQ 1 +#define __UAPI_DEF_ARPREQ_OLD 1 +#define __UAPI_DEF_ARPHDR 1 +#endif /* If we did not see any headers from any supported C libraries, * or we are being included in the kernel, then define everything --- include/uapi/linux/if_ether.h 2018-11-01 21:25:05.338466089 +0100 +++ include/uapi/linux/if_ether.h 2018-11-01 21:26:07.819172903 +0100 @@ -23,6 +23,7 @@ #define _UAPI_LINUX_IF_ETHER_H #include +#include /* * IEEE 802.3 Ethernet magic constants. The frame sizes omit the preamble