I've reworked and simplified the header files included in sources requiring
Ethernet support. I've been able to validate the result on a number
of Linux systems; most of these sources already include Linux header files
unconditionally, making them nonportable to other systems.  The result
works on glibc versions ranging from 2.11 down to 2.3, as well as uClibc
versions 0.9.29 and 0.9.30 and Android bionic 2.1. Only one configuration
macro was needed: HAVE_NET_ETHERNET_H

I tried against glibc 2.2.5 as well, but the version of gcc with which
it was bundled (2.96) was too old to support some of the C99 features
that Busybox now employs. That effectively makes glibc 2.3 the oldest
version that is worth bothering to support.

>>> Dan
From 9a7020f66fc23f725024e706f1b9567c22b6d08e Mon Sep 17 00:00:00 2001
From: Dan Fandrich <[email protected]>
Date: Wed, 1 Jun 2011 12:20:59 -0700
Subject: [PATCH] Simplify Ethernet header includes

Signed-off-by: Dan Fandrich <[email protected]>
---
 include/platform.h               |   13 ++++++++++---
 networking/ether-wake.c          |    4 +---
 networking/ifconfig.c            |   10 +++-------
 networking/ifplugd.c             |    2 ++
 networking/interface.c           |   11 +++++------
 networking/libiproute/iplink.c   |   10 +++++-----
 networking/libiproute/ll_proto.c |    6 +-----
 networking/udhcp/dhcpc.c         |   10 ++--------
 networking/udhcp/packet.c        |   13 +++----------
 networking/udhcp/socket.c        |   11 +----------
 networking/zcip.c                |    4 +---
 11 files changed, 34 insertions(+), 60 deletions(-)

diff --git a/include/platform.h b/include/platform.h
index 780568c..429220b 100644
--- a/include/platform.h
+++ b/include/platform.h
@@ -332,8 +332,8 @@ typedef unsigned smalluint;
 
 /* ---- Who misses what? ------------------------------------ */
 
-/* Assume all these functions exist by default.  Platforms where it is not
- * true will #undef them below.
+/* Assume all these functions and header files exist by default.
+ * Platforms where it is not true will #undef them below.
  */
 #define HAVE_CLEARENV 1
 #define HAVE_FDATASYNC 1
@@ -349,9 +349,14 @@ typedef unsigned smalluint;
 #define HAVE_STRSEP 1
 #define HAVE_STRSIGNAL 1
 #define HAVE_VASPRINTF 1
+#define HAVE_XTABS 1
 #define HAVE_MNTENT_H 1
+#define HAVE_NET_ETHERNET_H 1
 #define HAVE_SYS_STATFS_H 1
-#define HAVE_XTABS 1
+
+#if defined(__GLIBC__) && (__GLIBC__ < 2 || __GLIBC_MINOR__ < 1)
+# undef HAVE_NET_ETHERNET_H
+#endif
 
 #if defined(__dietlibc__)
 # undef HAVE_STRCHRNUL
@@ -368,6 +373,7 @@ typedef unsigned smalluint;
 # undef HAVE_STRSEP
 # undef HAVE_STRSIGNAL
 # undef HAVE_VASPRINTF
+# undef HAVE_NET_ETHERNET_H
 #endif
 
 #if defined(__FreeBSD__)
@@ -395,6 +401,7 @@ typedef unsigned smalluint;
 # undef HAVE_DPRINTF
 # undef HAVE_STPCPY
 # undef HAVE_STRCHRNUL
+# undef HAVE_NET_ETHERNET_H
 #endif
 
 /*
diff --git a/networking/ether-wake.c b/networking/ether-wake.c
index 260ba24..6a88279 100644
--- a/networking/ether-wake.c
+++ b/networking/ether-wake.c
@@ -74,13 +74,11 @@
 //usage:     "\n	-i iface	Interface to use (default eth0)"
 //usage:     "\n	-p pass		Append four or six byte password PW to the packet"
 
+#include "libbb.h"
 #include <netpacket/packet.h>
-#include <net/ethernet.h>
 #include <netinet/ether.h>
 #include <linux/if.h>
 
-#include "libbb.h"
-
 /* Note: PF_INET, SOCK_DGRAM, IPPROTO_UDP would allow SIOCGIFHWADDR to
  * work as non-root, but we need SOCK_PACKET to specify the Ethernet
  * destination address.
diff --git a/networking/ifconfig.c b/networking/ifconfig.c
index 2a56da5..4f1f6d3 100644
--- a/networking/ifconfig.c
+++ b/networking/ifconfig.c
@@ -46,18 +46,14 @@
 //usage:       "	[mem_start NN] [io_addr NN] [irq NN]\n")
 //usage:       "	[up|down] ..."
 
+#include "libbb.h"
+#include "inet_common.h"
 #include <net/if.h>
 #include <net/if_arp.h>
 #include <netinet/in.h>
-#if defined(__GLIBC__) && __GLIBC__ >=2 && __GLIBC_MINOR__ >= 1
-#include <netpacket/packet.h>
+#ifdef HAVE_NET_ETHERNET_H
 #include <net/ethernet.h>
-#else
-#include <sys/types.h>
-#include <netinet/if_ether.h>
 #endif
-#include "libbb.h"
-#include "inet_common.h"
 
 #if ENABLE_FEATURE_IFCONFIG_SLIP
 # include <net/if_slip.h>
diff --git a/networking/ifplugd.c b/networking/ifplugd.c
index 57d04e6..a14ea16 100644
--- a/networking/ifplugd.c
+++ b/networking/ifplugd.c
@@ -37,7 +37,9 @@
 #include <linux/if.h>
 #include <linux/mii.h>
 #include <linux/ethtool.h>
+#ifdef HAVE_NET_ETHERNET_H
 #include <net/ethernet.h>
+#endif
 #include <linux/netlink.h>
 #include <linux/rtnetlink.h>
 #include <linux/sockios.h>
diff --git a/networking/interface.c b/networking/interface.c
index bea54c1..a2c15c1 100644
--- a/networking/interface.c
+++ b/networking/interface.c
@@ -30,15 +30,14 @@
  *	    20001008 - Bernd Eckenfels, Patch from RH for setting mtu
  *			(default AF was wrong)
  */
+
+#include "libbb.h"
+#include "inet_common.h"
 #include <net/if.h>
 #include <net/if_arp.h>
-#ifndef __UCLIBC__
-# include <net/ethernet.h>
-#else
-# include <linux/if_ether.h>
+#ifdef HAVE_NET_ETHERNET_H
+#include <net/ethernet.h>
 #endif
-#include "libbb.h"
-#include "inet_common.h"
 
 #if ENABLE_FEATURE_HWIB
 /* #include <linux/if_infiniband.h> */
diff --git a/networking/libiproute/iplink.c b/networking/libiproute/iplink.c
index 82ab979..97d4ddc 100644
--- a/networking/libiproute/iplink.c
+++ b/networking/libiproute/iplink.c
@@ -4,15 +4,15 @@
  *
  * Licensed under GPLv2 or later, see file LICENSE in this source tree.
  */
-#include <net/if.h>
-#include <net/if_packet.h>
-#include <netpacket/packet.h>
-#include <net/ethernet.h>
-
 #include "ip_common.h"  /* #include "libbb.h" is inside */
 #include "rt_names.h"
 #include "utils.h"
 
+#include <net/if.h>
+#include <net/if_packet.h>
+#include <netpacket/packet.h>
+#include <netinet/if_ether.h>
+
 #ifndef IFLA_LINKINFO
 # define IFLA_LINKINFO 18
 # define IFLA_INFO_KIND 1
diff --git a/networking/libiproute/ll_proto.c b/networking/libiproute/ll_proto.c
index 04925ec..7aac836 100644
--- a/networking/libiproute/ll_proto.c
+++ b/networking/libiproute/ll_proto.c
@@ -12,11 +12,7 @@
 #include "rt_names.h"
 #include "utils.h"
 
-#if defined(__GLIBC__) && __GLIBC__ >=2 && __GLIBC_MINOR__ >= 1
-#include <net/ethernet.h>
-#else
-#include <linux/if_ether.h>
-#endif
+#include <netinet/if_ether.h>
 
 #if !ENABLE_WERROR
 #warning de-bloat
diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c
index 5d3291b..4d755e6 100644
--- a/networking/udhcp/dhcpc.c
+++ b/networking/udhcp/dhcpc.c
@@ -25,14 +25,8 @@
 #include "dhcpd.h"
 #include "dhcpc.h"
 
-#include <asm/types.h>
-#if (defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1) || defined(_NEWLIB_VERSION)
-# include <netpacket/packet.h>
-# include <net/ethernet.h>
-#else
-# include <linux/if_packet.h>
-# include <linux/if_ether.h>
-#endif
+#include <netinet/if_ether.h>
+#include <netpacket/packet.h>
 #include <linux/filter.h>
 
 /* struct client_config_t client_config is in bb_common_bufsiz1 */
diff --git a/networking/udhcp/packet.c b/networking/udhcp/packet.c
index 2b7528c..66b42c5 100644
--- a/networking/udhcp/packet.c
+++ b/networking/udhcp/packet.c
@@ -6,18 +6,11 @@
  *
  * Licensed under GPLv2, see file LICENSE in this source tree.
  */
-#include <netinet/in.h>
-#if (defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1) || defined _NEWLIB_VERSION
-# include <netpacket/packet.h>
-# include <net/ethernet.h>
-#else
-# include <asm/types.h>
-# include <linux/if_packet.h>
-# include <linux/if_ether.h>
-#endif
-
 #include "common.h"
 #include "dhcpd.h"
+#include <netinet/in.h>
+#include <netinet/if_ether.h>
+#include <netpacket/packet.h>
 
 void FAST_FUNC udhcp_init_header(struct dhcp_packet *packet, char type)
 {
diff --git a/networking/udhcp/socket.c b/networking/udhcp/socket.c
index 39f1cec..a5220ba 100644
--- a/networking/udhcp/socket.c
+++ b/networking/udhcp/socket.c
@@ -22,17 +22,8 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
-#include <net/if.h>
-#if (defined(__GLIBC__) && __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1) || defined _NEWLIB_VERSION
-# include <netpacket/packet.h>
-# include <net/ethernet.h>
-#else
-# include <asm/types.h>
-# include <linux/if_packet.h>
-# include <linux/if_ether.h>
-#endif
-
 #include "common.h"
+#include <net/if.h>
 
 int FAST_FUNC udhcp_read_interface(const char *interface, int *ifindex, uint32_t *nip, uint8_t *mac)
 {
diff --git a/networking/zcip.c b/networking/zcip.c
index 6b7f214..8a35eca 100644
--- a/networking/zcip.c
+++ b/networking/zcip.c
@@ -35,14 +35,12 @@
 //usage:     "\nWith no -q, runs continuously monitoring for ARP conflicts,"
 //usage:     "\nexits only on I/O errors (link down etc)"
 
+#include "libbb.h"
 #include <netinet/ether.h>
-#include <net/ethernet.h>
 #include <net/if.h>
 #include <net/if_arp.h>
-#include <linux/if_packet.h>
 #include <linux/sockios.h>
 
-#include "libbb.h"
 #include <syslog.h>
 
 /* We don't need more than 32 bits of the counter */
-- 
1.7.0.4

_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to