[PATCH v2] Coordinate if.h definitions for Linux and glibc (BZ #21367)
Aurelien Jarno
aurelien@aurel32.net
Sun Apr 9 21:44:00 GMT 2017
This commit coordinates the definition of structures and enum already
defined the Linux kernel UAPI headers, following the procedure described
on https://sourceware.org/glibc/wiki/Synchronizing_Headers.
With this change, it is safe to include <net/if.h> and <linux/if.h> in
any order in a a userspace application.
Note: this as been fixed in commit 4a91cb61bb995 on the Linux side.
Changelog:
[BZ #21367]
* sysdeps/gnu/net/if.h: wrap IFF_* enums in
!defined __UAPI_DEF_IF_NET_DEVICE_FLAGS defines.
(struct ifmap): Wrap in !defined __UAPI_DEF_IF_IFMAP defines.
(struct ifreq): Wrap in !defined __UAPI_DEF_IF_IFREQ defines.
(struct ifconf): Wrap in !defined __UAPI_DEF_IF_IFCONF defines.
---
ChangeLog | 9 +++++++++
sysdeps/gnu/net/if.h | 9 +++++++++
2 files changed, 18 insertions(+)
Changes v1 -> v2:
Use '#ifndef' instead of '#if !' so that it also works with -Werror=undef
diff --git a/ChangeLog b/ChangeLog
index b72d52164e..21b96bb35e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2017-04-09 Aurelien Jarno <aurelien@aurel32.net>
+
+ [BZ #21367]
+ * sysdeps/gnu/net/if.h: wrap IFF_* enums in
+ !defined __UAPI_DEF_IF_NET_DEVICE_FLAGS defines.
+ (struct ifmap): Wrap in !defined __UAPI_DEF_IF_IFMAP defines.
+ (struct ifreq): Wrap in !defined __UAPI_DEF_IF_IFREQ defines.
+ (struct ifconf): Wrap in !defined __UAPI_DEF_IF_IFCONF defines.
+
2017-04-07 H.J. Lu <hongjiu.lu@intel.com>
* sysdeps/i386/fpu/fclrexcpt.c (__feclearexcept): Use
diff --git a/sysdeps/gnu/net/if.h b/sysdeps/gnu/net/if.h
index 0afce08238..a330fe0755 100644
--- a/sysdeps/gnu/net/if.h
+++ b/sysdeps/gnu/net/if.h
@@ -39,6 +39,7 @@ struct if_nameindex
#ifdef __USE_MISC
/* Standard interface flags. */
+# ifndef __UAPI_DEF_IF_NET_DEVICE_FLAGS
enum
{
IFF_UP = 0x1, /* Interface is up. */
@@ -79,6 +80,7 @@ enum
IFF_DYNAMIC = 0x8000 /* Dialup device with changing addresses. */
# define IFF_DYNAMIC IFF_DYNAMIC
};
+# endif /* !defined __UAPI_DEF_IF_NET_DEVICE_FLAGS */
/* The ifaddr structure contains information about one address of an
interface. They are maintained by the different address families,
@@ -108,6 +110,7 @@ struct ifaddr
handy for debugging things. The set side is fine for now and being
very small might be worth keeping for clean configuration. */
+# ifndef __UAPI_DEF_IF_IFMAP
struct ifmap
{
unsigned long int mem_start;
@@ -118,11 +121,13 @@ struct ifmap
unsigned char port;
/* 3 bytes spare */
};
+# endif /* !defined __UAPI_DEF_IF_IFMAP */
/* Interface request structure used for socket ioctl's. All interface
ioctl's must have parameter definitions which begin with ifr_name.
The remainder may be interface specific. */
+# ifndef __UAPI_DEF_IF_IFREQ
struct ifreq
{
# define IFHWADDRLEN 6
@@ -148,6 +153,8 @@ struct ifreq
__caddr_t ifru_data;
} ifr_ifru;
};
+# endif /* !__UAPI_DEF_IF_IFREQ */
+
# define ifr_name ifr_ifrn.ifrn_name /* interface name */
# define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */
# define ifr_addr ifr_ifru.ifru_addr /* address */
@@ -173,6 +180,7 @@ struct ifreq
configuration for machine (useful for programs which must know all
networks accessible). */
+# ifndef __UAPI_DEF_IF_IFCONF
struct ifconf
{
int ifc_len; /* Size of buffer. */
@@ -182,6 +190,7 @@ struct ifconf
struct ifreq *ifcu_req;
} ifc_ifcu;
};
+# endif /* !defined __UAPI_DEF_IF_IFCONF */
# define ifc_buf ifc_ifcu.ifcu_buf /* Buffer address. */
# define ifc_req ifc_ifcu.ifcu_req /* Array of structures. */
# define _IOT_ifconf _IOT(_IOTS(struct ifconf),1,0,0,0,0) /* not right */
--
2.11.0
More information about the Libc-alpha
mailing list