]> git.ipfire.org Git - thirdparty/dhcp.git/commitdiff
[master] Fixed interface device naming for DLPI under Solaris 11
authorThomas Markwalder <tmark@isc.org>
Tue, 23 Feb 2016 12:09:17 +0000 (07:09 -0500)
committerThomas Markwalder <tmark@isc.org>
Tue, 23 Feb 2016 12:09:17 +0000 (07:09 -0500)
    Merges in rt37954.

RELNOTES
common/dlpi.c
configure
configure.ac
includes/config.h.in

index 192a08b82f64ef6e8584a56569c749c1d46592ff..d59461eef370f5684b0b225134a37ba569757694 100644 (file)
--- a/RELNOTES
+++ b/RELNOTES
@@ -236,6 +236,12 @@ by Eric Young (eay@cryptsoft.com).
   Please look at doc/DHCPv4-over-DHCPv6 for more details.
   [ISC-Bugs #35711]
 
+- Corrected interface name formation when using DLPI under Solaris 11. As of
+  Solaris 11, ethernet device files are located in "/dev/net".  The configure
+  script has been modified to detect this situation and adjust the directory
+  used accordingly.
+  [ISC-Bugs #37954]
+
                        Changes since 4.3.3b1
 
 - None
index c34adc392ab1ea65b7105461484737497a2f0a05..ff4094ba79482946bffc974da499a7943e49ba1b 100644 (file)
@@ -3,7 +3,7 @@
    Data Link Provider Interface (DLPI) network interface code. */
 
 /*
- * Copyright (c) 2009-2011,2014 by Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (c) 2009-2011,2014,2016 by Internet Systems Consortium, Inc. ("ISC")
  * Copyright (c) 2004,2007 by Internet Systems Consortium, Inc. ("ISC")
  * Copyright (c) 1996-2003 by Internet Software Consortium
  *
@@ -130,7 +130,13 @@ static int strioctl (int fd, int cmd, int timeout, int len, char *dp);
 
 #define DLPI_MAXDLBUF          8192    /* Buffer size */
 #define DLPI_MAXDLADDR         1024    /* Max address size */
-#define DLPI_DEVDIR            "/dev/" /* Device directory */
+
+/* Device directory */
+#if defined(USE_DEV_NET)
+#define DLPI_DEVDIR            "/dev/net/"  /* Solaris 11 + */
+#else
+#define DLPI_DEVDIR            "/dev/"      /* Pre Solaris 11 */
+#endif
 
 static int dlpiopen(const char *ifname);
 static int dlpiunit (char *ifname);
@@ -794,9 +800,13 @@ dlpiopen(const char *ifname) {
        ep = cp = ifname;
        while (*ep)
                ep++;
+
+/* Before Solaris 11 we strip off the digit to open the base dev name */
+#if !defined(USE_DEV_NET)
        /* And back up to the first digit (unit number) */
        while ((*(ep - 1) >= '0' && *(ep - 1) <= '9') || *(ep - 1) == ':')
                ep--;
+#endif
        
        /* Copy everything up to the unit number */
        while (cp < ep) {
index 5c980452be964cc8a23192b7d66f98171f8bb9d6..773627890a5b6263ed53812fc19cdb2dbbad98b8 100755 (executable)
--- a/configure
+++ b/configure
@@ -7170,7 +7170,31 @@ CFLAGS="$CFLAGS -I\$(top_srcdir)/includes -I$BINDDIR/include"
 
 case "$host" in
 *-darwin*)
-    CFLAGS="$CFLAGS -D__APPLE_USE_RFC_3542" ;;
+    CFLAGS="$CFLAGS -D__APPLE_USE_RFC_3542";;
+*-solaris*)
+    # As of Solaris 11, ethernet dev files are in /dev/net
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /dev/net" >&5
+$as_echo_n "checking for /dev/net... " >&6; }
+if ${ac_cv_file__dev_net+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  test "$cross_compiling" = yes &&
+  as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
+if test -r "/dev/net"; then
+  ac_cv_file__dev_net=yes
+else
+  ac_cv_file__dev_net=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_file__dev_net" >&5
+$as_echo "$ac_cv_file__dev_net" >&6; }
+if test "x$ac_cv_file__dev_net" = xyes; then :
+
+$as_echo "#define USE_DEV_NET 1" >>confdefs.h
+
+fi
+
+    ;;
 esac
 
 
index 7f05b7d6ae27674e3a4941fed2d9773708119965..ba252d34f3e4067f6e18f2db3eeb563d0853361f 100644 (file)
@@ -792,7 +792,13 @@ CFLAGS="$CFLAGS -I\$(top_srcdir)/includes -I$BINDDIR/include"
 
 case "$host" in
 *-darwin*)
-    CFLAGS="$CFLAGS -D__APPLE_USE_RFC_3542" ;;
+    CFLAGS="$CFLAGS -D__APPLE_USE_RFC_3542";;
+*-solaris*)
+    # As of Solaris 11, ethernet dev files are in /dev/net
+    AC_CHECK_FILE(/dev/net,
+                   [AC_DEFINE([USE_DEV_NET], [1],
+                       [Define to 1 if ethernet devices are in /dev/net])])
+    ;;
 esac
 
 AC_C_FLEXIBLE_ARRAY_MEMBER
index 403a28f1a8cfe60537b857f8ad39c825477b4eef..02f5dbcfec70699cd9cac78d6502069f53b65b41 100644 (file)
 /* Define to include server activity tracing support. */
 #undef TRACING
 
+/* Define to 1 if ethernet devices are in /dev/net */
+#undef USE_DEV_NET
+
 /* Define to include PIDs in syslog messages. */
 #undef USE_LOG_PID