Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 24 Jan 2015 00:02:01 +0000 (UTC)
From:      Jung-uk Kim <jkim@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r377775 - in head/java: openjdk6 openjdk6-jre openjdk6/files
Message-ID:  <201501240002.t0O021mr091624@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jkim
Date: Sat Jan 24 00:02:00 2015
New Revision: 377775
URL: https://svnweb.freebsd.org/changeset/ports/377775
QAT: https://qat.redports.org/buildarchive/r377775/

Log:
  Update to b34.

Deleted:
  head/java/openjdk6/files/patch-TimeZoneNames
  head/java/openjdk6/files/patch-jdk_src_share_classes_java_util_CurrencyData.properties
Modified:
  head/java/openjdk6-jre/Makefile
  head/java/openjdk6/Makefile
  head/java/openjdk6/distinfo
  head/java/openjdk6/files/patch-set

Modified: head/java/openjdk6-jre/Makefile
==============================================================================
--- head/java/openjdk6-jre/Makefile	Fri Jan 23 23:45:46 2015	(r377774)
+++ head/java/openjdk6-jre/Makefile	Sat Jan 24 00:02:00 2015	(r377775)
@@ -1,6 +1,5 @@
 # $FreeBSD$
 
-PORTREVISION=	0
 CATEGORIES=	java devel
 PKGNAMESUFFIX=	-jre
 

Modified: head/java/openjdk6/Makefile
==============================================================================
--- head/java/openjdk6/Makefile	Fri Jan 23 23:45:46 2015	(r377774)
+++ head/java/openjdk6/Makefile	Sat Jan 24 00:02:00 2015	(r377775)
@@ -2,8 +2,8 @@
 # $FreeBSD$
 
 PORTNAME=	openjdk6
-PORTVERSION=	b33
-PORTREVISION?=	0
+PORTVERSION=	b34
+PORTREVISION=	0
 PORTEPOCH=	1
 CATEGORIES=	java devel
 MASTER_SITES=	${MASTER_SITE_APACHE:S,%SUBDIR%/,ant/binaries/:ant,} \
@@ -30,7 +30,7 @@ LIB_DEPENDS=	libfreetype.so:${PORTSDIR}/
 RUN_DEPENDS=	javavm:${PORTSDIR}/java/javavmwrapper \
 		${LOCALBASE}/lib/X11/fonts/dejavu:${PORTSDIR}/x11-fonts/dejavu
 
-OPENJDK_BUILDDATE=	14_oct_2014
+OPENJDK_BUILDDATE=	20_jan_2015
 
 OPTIONS_DEFINE=	ICEDTEA IPV6 POLICY SOUND TZUPDATE
 OPTIONS_DEFAULT=ICEDTEA IPV6 TZUPDATE
@@ -142,6 +142,10 @@ MAKE_ENV+=	SKIP_FASTDEBUG_BUILD=true
 MAKE_ENV+=	DONT_ENABLE_IPV6="YES"
 .endif
 
+.if ${PORT_OPTIONS:MPOLICY}
+MAKE_ENV+=	UNLIMITED_CRYPTO="YES"
+.endif
+
 .if ${PORT_OPTIONS:MSOUND}
 EXTRA_PATCHES+=	${FILESDIR}/alsa-enable.patch
 LIB_DEPENDS+=	libasound.so:${PORTSDIR}/audio/alsa-lib
@@ -248,13 +252,6 @@ post-patch:
 	    ${WRKSRC}/hotspot/src/os/bsd/vm/os_bsd.cpp \
 	    ${WRKSRC}/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java \
 	    ${WRKSRC}/jdk/src/share/classes/sun/print/PSPrinterJob.java
-.if ${PORT_OPTIONS:MPOLICY}
-	@${REINPLACE_CMD} -e 's|%%POLICY%%|unlimited|' \
-	    ${WRKSRC}/jdk/make/javax/crypto/Makefile
-.else
-	@${REINPLACE_CMD} -e 's|%%POLICY%%|limited|' \
-	    ${WRKSRC}/jdk/make/javax/crypto/Makefile
-.endif
 .if defined(BUILD_JRE)
 	@${REINPLACE_CMD} -e "s|%%JAVA_HOME%%|${PREFIX}/openjdk6-jre|" \
 	    ${WRKSRC}/hotspot/src/os/posix/launcher/java_md.c \

Modified: head/java/openjdk6/distinfo
==============================================================================
--- head/java/openjdk6/distinfo	Fri Jan 23 23:45:46 2015	(r377774)
+++ head/java/openjdk6/distinfo	Sat Jan 24 00:02:00 2015	(r377775)
@@ -1,6 +1,6 @@
 SHA256 (apache-ant-1.9.4-bin.tar.bz2) = 20c16575684b8869dd9d19abe0fb504566adefb5d397881e70a417886e0088cf
 SIZE (apache-ant-1.9.4-bin.tar.bz2) = 4351965
-SHA256 (openjdk-6-src-b33-14_oct_2014.tar.xz) = cabc35587a90fa81edd8ba8537c0454348c37456de27e407bbb66d52031a1293
-SIZE (openjdk-6-src-b33-14_oct_2014.tar.xz) = 33476800
+SHA256 (openjdk-6-src-b34-20_jan_2015.tar.xz) = 13d1b4e1e152b6f9ad81b5558d6c7c0d3315a9e9494e49e515229722e2ee4e51
+SIZE (openjdk-6-src-b34-20_jan_2015.tar.xz) = 33601316
 SHA256 (jtreg-4.1-bin-b05_29_nov_2012.zip) = 9291eb4a14501232b35614e88686ff66ad8b69d0098dbd4322b28f97b672653d
 SIZE (jtreg-4.1-bin-b05_29_nov_2012.zip) = 5993382

Modified: head/java/openjdk6/files/patch-set
==============================================================================
--- head/java/openjdk6/files/patch-set	Fri Jan 23 23:45:46 2015	(r377774)
+++ head/java/openjdk6/files/patch-set	Sat Jan 24 00:02:00 2015	(r377775)
@@ -1797,6 +1797,84 @@
    static int pthread_getcpuclockid(pthread_t tid, clockid_t *clock_id) {
      return _pthread_getcpuclockid ? _pthread_getcpuclockid(tid, clock_id) : -1;
    }
+--- hotspot/src/os/bsd/vm/perfMemory_bsd.cpp
++++ hotspot/src/os/bsd/vm/perfMemory_bsd.cpp
+@@ -303,7 +303,6 @@
+   DIR *dirp = NULL;
+   RESTARTABLE(::open(dirname, O_RDONLY|O_NOFOLLOW), result);
+   if (result == OS_ERR) {
+-    // Directory doesn't exist or is a symlink, so there is nothing to cleanup.
+     if (PrintMiscellaneous && Verbose) {
+       if (errno == ELOOP) {
+         warning("directory %s is a symlink and is not secure\n", dirname);
+@@ -420,6 +419,7 @@
+   return true;
+ }
+ 
++
+ // return the user name for the given user id
+ //
+ // the caller is expected to free the allocated memory.
+@@ -542,6 +542,18 @@
+       continue;
+     }
+ 
++    // Since we don't create the backing store files in directories
++    // pointed to by symbolic links, we also don't follow them when
++    // looking for the files. We check for a symbolic link after the
++    // call to opendir in order to eliminate a small window where the
++    // symlink can be exploited.
++    //
++    if (!is_directory_secure(usrdir_name)) {
++      FREE_C_HEAP_ARRAY(char, usrdir_name);
++      os::closedir(subdirp);
++      continue;
++    }
++
+     struct dirent* udentry;
+     char* udbuf = NEW_C_HEAP_ARRAY(char, os::readdir_buf_size(usrdir_name));
+     errno = 0;
+@@ -643,6 +655,7 @@
+   }
+ }
+ 
++
+ // cleanup stale shared memory resources
+ //
+ // This method attempts to remove all stale shared memory files in
+@@ -655,7 +668,7 @@
+ static void cleanup_sharedmem_resources(const char* dirname) {
+ 
+   int saved_cwd_fd;
+-  // open the directory and set the current working directory to it
++  // open the directory
+   DIR* dirp = open_directory_secure_cwd(dirname, &saved_cwd_fd);
+   if (dirp == NULL) {
+     // directory doesn't exist or is insecure, so there is nothing to cleanup
+@@ -681,7 +694,6 @@
+     if (pid == 0) {
+ 
+       if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) {
+-
+         // attempt to remove all unexpected files, except "." and ".."
+         unlink(entry->d_name);
+       }
+@@ -705,7 +717,6 @@
+     //
+     if ((pid == os::current_process_id()) ||
+         (kill(pid, 0) == OS_ERR && (errno == ESRCH || errno == EPERM))) {
+-
+         unlink(entry->d_name);
+     }
+     errno = 0;
+@@ -914,7 +925,6 @@
+ 
+   char* dirname = get_user_tmp_dir(user_name);
+   char* filename = get_sharedmem_filename(dirname, vmid);
+-
+   // get the short filename
+   char* short_filename = strrchr(filename, '/');
+   if (short_filename == NULL) {
 --- hotspot/src/os/bsd/vm/threadCritical_bsd.cpp
 +++ hotspot/src/os/bsd/vm/threadCritical_bsd.cpp
 @@ -33,35 +33,36 @@
@@ -4331,17 +4409,6 @@
  OTHER_LDLIBS = $(JVMLIB)
 +endif
 +
---- jdk/make/javax/crypto/Makefile
-+++ jdk/make/javax/crypto/Makefile
-@@ -155,7 +155,7 @@
- #
- 
- ifdef OPENJDK
--all: build-jar install-jar build-policy install-limited
-+all: build-jar install-jar build-policy install-%%POLICY%%
- else  # OPENJDK
- ifeq ($(strip $(FILES_java)),)
- all:
 --- jdk/make/javax/sound/FILES_c.gmk
 +++ jdk/make/javax/sound/FILES_c.gmk
 @@ -34,6 +34,8 @@
@@ -12036,10 +12103,10 @@
  }
 --- jdk/src/solaris/native/java/net/NetworkInterface.c
 +++ jdk/src/solaris/native/java/net/NetworkInterface.c
-@@ -23,13 +23,13 @@
-  * questions.
+@@ -24,13 +24,13 @@
   */
  
+ 
 +#include <sys/types.h>
 +#include <sys/socket.h>
  #include <errno.h>
@@ -12052,11 +12119,11 @@
  #include <arpa/inet.h>
  #include <net/if.h>
  #include <net/if_arp.h>
-@@ -47,6 +47,19 @@
- #else
+@@ -41,6 +41,19 @@
+ #include <stropts.h>
  #include <sys/sockio.h>
  #endif
-+#if defined(_ALLBSD_SOURCE)
++#ifdef _ALLBSD_SOURCE
 +#include <sys/param.h>
 +#include <sys/ioctl.h>
 +#if defined(__FreeBSD__) || defined(__APPLE__)
@@ -12071,247 +12138,267 @@
 +#endif
  
  #ifdef __linux__
- #define ifr_index ifr_ifindex
-@@ -577,6 +590,7 @@
- }
+ #include <sys/ioctl.h>
+@@ -133,8 +146,9 @@
  
  
-+#if !defined(_ALLBSD_SOURCE)
- /*
-  * Enumerates and returns all IPv4 interfaces
-  */
-@@ -687,6 +701,176 @@
-     return ifs;
+ 
+-#ifdef __solaris__
++#if defined(_ALLBSD_SOURCE) || defined(__solaris__)
+ static netif *enumIPvXInterfaces(JNIEnv *env, int sock, netif *ifs, int family);
++#ifdef __solaris__
+ static int    getMacFromDevice(JNIEnv *env, const char* ifname, unsigned char* retbuf);
+ 
+ #ifndef SIOCGLIFHWADDR
+@@ -142,6 +156,7 @@
+ #endif
+ 
+ #endif
++#endif
+ 
+ /******************* Java entry points *****************************/
+ 
+@@ -995,6 +1010,240 @@
  }
  
-+#else /* _ALLBSD_SOURCE */
-+ 
-+/*
-+ * Enumerates and returns all IPv4 interfaces
-+ *
-+ * WARNING! Make sure that it's correctly synchronized on future JDK
-+ * versions imports!
+ 
++/** BSD **/
++#ifdef _ALLBSD_SOURCE
++/* Open socket for further ioct calls, try v4 socket first and
++ * if it falls return v6 socket
 + */
-+static netif *enumIPv4Interfaces(JNIEnv *env, netif *ifs)
-+{
++
++#ifdef AF_INET6
++// unused arg ifname and struct if2
++static int openSocketWithFallback(JNIEnv *env, const char *ifname){
 +    int sock;
-+    struct ifaddrs *ifa, *origifa;
++    struct ifreq if2;
 +
-+    sock = JVM_Socket(AF_INET, SOCK_DGRAM, 0);
-+    if (sock < 0) {
-+	/*
-+	 * If EPROTONOSUPPORT is returned it means we don't have
-+	 * IPv4 support so don't throw an exception.
-+	 */
-+	if (errno != EPROTONOSUPPORT) {
-+	    NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException",
-+                             "Socket creation failed");
-+	}
-+	return ifs;
++    if ((sock = JVM_Socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
++        if (errno == EPROTONOSUPPORT){
++            if ( (sock = JVM_Socket(AF_INET6, SOCK_DGRAM, 0)) < 0 ){
++                NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed");
++                return -1;
++            }
++        }
++        else{ // errno is not NOSUPPORT
++            NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException", "IPV4 Socket creation failed");
++            return -1;
++        }
 +    }
 +
-+    if (getifaddrs(&origifa) != 0) {
-+        NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException",
-+                         "getifaddrs() function failed");
-+	close(sock);
-+	return ifs;
-+    }
++    return sock;
++}
 +
-+    for (ifa = origifa; ifa != NULL; ifa = ifa->ifa_next) {
++#else
++static int openSocketWithFallback(JNIEnv *env, const char *ifname){
++    return openSocket(env, AF_INET);
++}
++#endif
 +
-+	/*
-+	 * Skip non-AF_INET entries.
-+	 */
-+	if (ifa->ifa_addr == NULL || ifa->ifa_addr->sa_family != AF_INET)
-+	    continue;
++static netif *enumIPv4Interfaces(JNIEnv *env, int sock, netif *ifs) {
++    return enumIPvXInterfaces(env, sock, ifs, AF_INET);
++}
 +
-+	/*
-+	 * Add to the list.
-+	 *
-+	 * BSDNOTE: in order to optimize code, interface index detection
-+	 * logic was added directly to addif().
-+	 */
-+	ifs = addif(env, ifs, ifa->ifa_name, (-1), AF_INET,
-+		    ifa->ifa_addr, sizeof(struct sockaddr_in), 0);
++#ifdef AF_INET6
++static netif *enumIPv6Interfaces(JNIEnv *env, int sock, netif *ifs) {
++    return enumIPvXInterfaces(env, sock, ifs, AF_INET6);
++}
++#endif
 +
-+	/*
-+	 * If an exception occurred then free the list.
-+	 */
-+	if ((*env)->ExceptionOccurred(env)) {
-+	    close(sock);
-+	    freeifaddrs(origifa);
-+	    freeif(ifs);
-+	    return NULL;
-+	}
++/*
++   Enumerates and returns all interfaces on BSD
++   use the same code for IPv4 and IPv6
++ */
++static netif *enumIPvXInterfaces(JNIEnv *env, int sock, netif *ifs, int family) {
++    struct ifaddrs *ifa0, *ifa;
++  
++    /*
++     * Grab the interface list
++     */
++    if (getifaddrs(&ifa0) < 0) {
++        return NULL;
 +    }
 +
 +    /*
-+     * Free socket and buffer
++     * Iterate through each interface
 +     */
-+    close(sock);
-+    freeifaddrs(origifa);
++    for (ifa = ifa0; ifa != NULL; ifa = ifa->ifa_next) {
++        if (ifa->ifa_addr->sa_family == family) {
++            /*
++             * Add to the list
++             */
++            ifs = addif(env, sock, ifa->ifa_name, ifs, ifa->ifa_addr, family, 0);
++
++            /*
++             * If an exception occurred then free the list
++             */
++            if ((*env)->ExceptionOccurred(env)) {
++                freeif(ifs);
++                ifs = NULL;
++                break;
++            }
++        }
++    }
++    freeifaddrs(ifa0);
++
 +    return ifs;
 +}
 +
-+#if defined(AF_INET6)
-+/*
-+ * Determines the prefix on BSD for IPv6 interfaces.
++static int getIndex(int sock, const char *name){
++     /*
++      * Try to get the interface index
++      */
++    struct ifreq if2;
++    strcpy(if2.ifr_name, name);
++
++    if (ioctl(sock, SIOCGIFINDEX, (char *)&if2) < 0) {
++        return -1;
++    }
++
++    return if2.ifr_index;
++}
++
++/**
++ * Returns the IPv4 broadcast address of a named interface, if it exists.
++ * Returns 0 if it doesn't have one.
 + */
-+static
-+int prefix(void *val, int size) {
-+    u_char *name = (u_char *)val;
-+    int byte, bit, plen = 0;
-+
-+    for (byte = 0; byte < size; byte++, plen += 8)
-+        if (name[byte] != 0xff)
-+            break;
-+    if (byte == size)
-+        return (plen);
-+    for (bit = 7; bit != 0; bit--, plen++)
-+        if (!(name[byte] & (1 << bit)))
-+            break;
-+    for (; bit != 0; bit--)
-+        if (name[byte] & (1 << bit))
-+            return (0);
-+    byte++;
-+    for (; byte < size; byte++)
-+        if (name[byte])
-+            return (0);
-+    return (plen);
++static struct sockaddr *getBroadcast(JNIEnv *env, int sock, const char *ifname, struct sockaddr *brdcast_store) {
++  struct sockaddr *ret = NULL;
++  struct ifreq if2;
++
++  memset((char *) &if2, 0, sizeof(if2));
++  strcpy(if2.ifr_name, ifname);
++
++  /* Let's make sure the interface does have a broadcast address */
++  if (ioctl(sock, SIOCGIFFLAGS, (char *)&if2)  < 0) {
++      NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL  SIOCGIFFLAGS failed");
++      return ret;
++  }
++
++  if (if2.ifr_flags & IFF_BROADCAST) {
++      /* It does, let's retrieve it*/
++      if (ioctl(sock, SIOCGIFBRDADDR, (char *)&if2) < 0) {
++          NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFBRDADDR failed");
++          return ret;
++      }
++
++      ret = brdcast_store;
++      memcpy(ret, &if2.ifr_broadaddr, sizeof(struct sockaddr));
++  }
++
++  return ret;
 +}
 +
-+/*
-+ * Enumerates and returns all IPv6 interfaces on FreeBSD
-+ *
-+ * BSDNOTE: it's done in same as IPv4 enumeration and should be carefully
-+ *          reviewed with each JDK update (according to Solaris/Linux version)
++/**
++ * Returns the IPv4 subnet prefix length (aka subnet mask) for the named
++ * interface, if it has one, otherwise return -1.
 + */
-+static netif *enumIPv6Interfaces(JNIEnv *env, netif *ifs) {
++static short getSubnet(JNIEnv *env, int sock, const char *ifname) {
++    unsigned int mask;
++    short ret;
++    struct ifreq if2;
 +
-+    int sock;
-+    struct ifaddrs *ifa, *origifa;
-+    struct sockaddr_in6 *sin6;
-+    struct in6_ifreq ifr6;
-+
-+    // Open IPv6 UDP socket.
-+    sock = JVM_Socket(AF_INET6, SOCK_DGRAM, 0);
-+    if (sock < 0) {
-+        NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException",
-+                     "Failed to create IPv6 socket");
-+        return ifs;
-+    }
-+
-+    if (getifaddrs(&origifa) != 0) {
-+        NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException",
-+                         "getifaddrs() function failed");
-+	close(sock);
-+	return ifs;
-+    }
++    memset((char *) &if2, 0, sizeof(if2));
++    strcpy(if2.ifr_name, ifname);
 +
-+    for (ifa = origifa; ifa != NULL; ifa = ifa->ifa_next) {
++    if (ioctl(sock, SIOCGIFNETMASK, (char *)&if2) < 0) {
++        NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFNETMASK failed");
++        return -1;
++    }
 +
-+	/*
-+	 * Skip non-AF_INET6 entries.
-+	 */
-+	if (ifa->ifa_addr == NULL || ifa->ifa_addr->sa_family != AF_INET6)
-+	    continue;
++    mask = ntohl(((struct sockaddr_in*)&(if2.ifr_addr))->sin_addr.s_addr);
++    ret = 0;
++    while (mask) {
++       mask <<= 1;
++       ret++;
++    }
 +
-+	memset(&ifr6, 0, sizeof(ifr6));
-+	strlcpy(ifr6.ifr_name, ifa->ifa_name, sizeof(ifr6.ifr_name));
-+	memcpy(&ifr6.ifr_addr, ifa->ifa_addr, MIN(sizeof(ifr6.ifr_addr), ifa->ifa_addr->sa_len));
-+
-+	if (ioctl(sock, SIOCGIFNETMASK_IN6, (caddr_t)&ifr6) < 0) {
-+	    NET_ThrowByNameWithLastError(env , JNU_JAVANETPKG "SocketException",
-+                             "ioctl SIOCGIFNETMASK_IN6 failed");
-+	    close(sock);
-+	    freeifaddrs(origifa);
-+	    freeif(ifs);
-+	    return NULL;
-+	}
++    return ret;
++}
 +
-+	/* Add to the list.  */
-+	sin6 = (struct sockaddr_in6 *)&ifr6.ifr_addr;
-+	ifs = addif(env, ifs, ifa->ifa_name, (-1), AF_INET6,
-+	            ifa->ifa_addr, sizeof(struct sockaddr_in6),
-+		    prefix(&sin6->sin6_addr, sizeof(struct in6_addr)));
-+
-+	/* If an exception occurred then free the list.  */
-+	if ((*env)->ExceptionOccurred(env)) {
-+	    close(sock);
-+	    freeifaddrs(origifa);
-+	    freeif(ifs);
-+	    return NULL;
-+	}
++/**
++ * Get the Hardware address (usually MAC address) for the named interface.
++ * return puts the data in buf, and returns the length, in byte, of the
++ * MAC address. Returns -1 if there is no hardware address on that interface.
++ */
++static int getMacAddress(JNIEnv *env, int sock, const char* ifname, const struct in_addr* addr, unsigned char *buf) {
++    struct ifaddrs *ifa0, *ifa;
++    struct sockaddr *saddr;
++    struct sockaddr_dl *sadl;
++    int ret = -1;
++  
++    /*
++     * Grab the interface list
++     */
++    if (getifaddrs(&ifa0) < 0) {
++        return ret;
 +    }
 +
 +    /*
-+     * Free socket and ifaddrs buffer
++     * Iterate through each interface
 +     */
-+    close(sock);
-+    freeifaddrs(origifa);
-+    return ifs;
-+}
-+#endif /* AF_INET6 */
++    for (ifa = ifa0; ifa != NULL; ifa = ifa->ifa_next) {
++        saddr = ifa->ifa_addr;
 +
-+#endif /* !_ALLBSD_SOURCE */
- 
- #if defined(__solaris__) && defined(AF_INET6)
- /*
-@@ -1007,7 +1191,13 @@
-             JNU_ThrowOutOfMemoryError(env, "heap allocation failed");
-             return ifs;
-         }
-+#if defined(_ALLBSD_SOURCE)
-+	currif->index = if_nametoindex(name);
-+	if (currif->index == 0)
-+	    currif->index = -1;
-+#else
-         currif->index = index;
-+#endif
-         currif->addr = NULL;
-         currif->childs = NULL;
-         currif->virtual = isVirtual;
-@@ -1295,6 +1485,31 @@
-    * All bytes to 0 means no hardware address.
-    */
-   return -1;
-+#elif defined(_ALLBSD_SOURCE)
-+  struct ifaddrs *ifa0, *ifa;
-+  struct sockaddr *saddr;
-+  int i;
-+
-+  /* Grab the interface list */
-+  if (!getifaddrs(&ifa0)) {
-+    /* Cycle through the interfaces */
-+    for (i = 0, ifa = ifa0; ifa != NULL; ifa = ifa->ifa_next, i++) {
-+      saddr = ifa->ifa_addr;
-+      /* Link layer contains the MAC address */
-+      if (saddr->sa_family == AF_LINK && !strcmp(ifname, ifa->ifa_name)) {
-+        struct sockaddr_dl *sadl = (struct sockaddr_dl *) saddr;
-+        /* Check the address is the correct length */
-+        if (sadl->sdl_alen == ETHER_ADDR_LEN) {
-+           memcpy(buf, (sadl->sdl_data + sadl->sdl_nlen), ETHER_ADDR_LEN);
-+           freeifaddrs(ifa0);
-+           return ETHER_ADDR_LEN;
++        /* Link layer contains the MAC address */
++        if (saddr->sa_family == AF_LINK && strcmp(ifname, ifa->ifa_name) == 0) {
++            sadl = (struct sockaddr_dl *)saddr;
++
++            /* Check the address is the correct length */
++            if (sadl->sdl_alen == ETHER_ADDR_LEN) {
++                memcpy(buf, (sadl->sdl_data + sadl->sdl_nlen), ETHER_ADDR_LEN);
++                ret = ETHER_ADDR_LEN;
++                break;
++            }
 +        }
-+      }
 +    }
 +    freeifaddrs(ifa0);
-+  }
 +
-+  return -1;
- #else
-   struct arpreq arpreq;
-   struct sockaddr_in* sin;
-@@ -1460,7 +1675,7 @@
-                                  "Socket creation failed");
-   } else {
- 
--#ifdef __linux__
-+#if defined(__linux__) || defined(_ALLBSD_SOURCE)
-     memset((char *) &if2, 0, sizeof(if2));
-     strcpy(if2.ifr_name, name_utf);
- 
++    return ret;
++}
++
++static int getMTU(JNIEnv *env, int sock,  const char *ifname) {
++    struct ifreq if2;
++    memset((char *) &if2, 0, sizeof(if2));
++
++    if (ifname != NULL) {
++        strcpy(if2.ifr_name, ifname);
++    } else {
++        JNU_ThrowNullPointerException(env, "network interface name is NULL");
++        return -1;
++    }
++
++    if (ioctl(sock, SIOCGIFMTU, (char *)&if2) < 0) {
++        NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "IOCTL SIOCGIFMTU failed");
++        return -1;
++    }
++
++    return  if2.ifr_mtu;
++}
++
++static int getFlags(int sock, const char *ifname) {
++    struct ifreq if2;
++    int flags;
++
++    memset((char *) &if2, 0, sizeof(if2));
++    strcpy(if2.ifr_name, ifname);
++
++    if (ioctl(sock, SIOCGIFFLAGS, (char *)&if2) < 0) {
++        return -1;
++    }
++
++    flags = if2.ifr_flags & 0xffff;
++    flags |= if2.ifr_flagshigh << 16;
++
++    return flags;
++}
++
++#endif
++
+ /** Linux **/
+ #ifdef __linux__
+ /* Open socket for further ioct calls, try v4 socket first and
 --- jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c
 +++ jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c
 @@ -23,12 +23,12 @@
@@ -12329,7 +12416,7 @@
  
  #ifdef __solaris__
  #include <fcntl.h>
-@@ -335,7 +335,7 @@
+@@ -331,7 +331,7 @@
      /* The fdObj'fd */
      jint fd;
  
@@ -12338,7 +12425,7 @@
      SOCKADDR addr;
      int len;
  #endif
-@@ -345,26 +345,39 @@
+@@ -341,26 +341,39 @@
      }
      fd = (*env)->GetIntField(env, fdObj, IO_fd_fdID);
  
@@ -12378,7 +12465,7 @@
          // After disconnecting a UDP socket, Linux kernel will set
          // local port to zero if the port number comes from implicit
          // bind. Successive send/recv on the same socket will fail.
-@@ -387,6 +400,7 @@
+@@ -383,6 +396,7 @@
              NET_Bind(fd, (struct sockaddr *)&addr, len);
          }
      }
@@ -12386,69 +12473,7 @@
  #else
      JVM_Connect(fd, 0, 0);
  #endif
-@@ -1056,31 +1070,38 @@
- Java_java_net_PlainDatagramSocketImpl_datagramSocketCreate(JNIEnv *env,
-                                                            jobject this) {
-     jobject fdObj = (*env)->GetObjectField(env, this, pdsi_fdID);
--    int fd;
--
--    int arg = -1;
--    int t = 1;
-+    int fd, t = 1;
-+#ifdef AF_INET6
-+    int domain = ipv6_available() ? AF_INET6 : AF_INET;
-+#else
-+    int domain = AF_INET;
-+#endif
- 
-     if (IS_NULL(fdObj)) {
-         JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",
-                         "Socket closed");
-         return;
--    } else {
--#ifdef AF_INET6
--        if (ipv6_available()) {
--            fd =  JVM_Socket(AF_INET6, SOCK_DGRAM, 0);
--        } else
--#endif /* AF_INET6 */
--            {
--                fd =  JVM_Socket(AF_INET, SOCK_DGRAM, 0);
--            }
-     }
--    if (fd == JVM_IO_ERR) {
-+
-+    if ((fd = JVM_Socket(domain, SOCK_DGRAM, 0)) == JVM_IO_ERR) {
-         NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
-                        "Error creating socket");
-         return;
-     }
- 
-+#ifdef AF_INET6
-+    /* Disable IPV6_V6ONLY to ensure dual-socket support */
-+    if (domain == AF_INET6) {
-+        int arg = 0;
-+        if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (char*)&arg,
-+                       sizeof(int)) < 0) {
-+            NET_ThrowNew(env, errno, "cannot set IPPROTO_IPV6");
-+            close(fd);
-+            return;
-+        }
-+    }
-+#endif /* AF_INET6 */
-+
-      setsockopt(fd, SOL_SOCKET, SO_BROADCAST, (char*) &t, sizeof(int));
- 
- #ifdef __linux__
-@@ -1093,7 +1114,7 @@
-      * On Linux for IPv6 sockets we must set the hop limit
-      * to 1 to be compatible with default ttl of 1 for IPv4 sockets.
-      */
--    if (ipv6_available()) {
-+    if (domain == AF_INET6) {
-         int ttl = 1;
-         setsockopt(fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, (char *)&ttl,
-                    sizeof(ttl));
-@@ -1303,7 +1324,7 @@
+@@ -1306,7 +1320,7 @@
          /*
           * value is an InetAddress.
           */
@@ -12457,7 +12482,7 @@
          if (ipv6_available()) {
              mcast_set_if_by_addr_v6(env, this, fd, value);
          } else {
-@@ -1322,7 +1343,7 @@
+@@ -1325,7 +1339,7 @@
          /*
           * value is a NetworkInterface.
           */
@@ -12466,7 +12491,7 @@
          if (ipv6_available()) {
              mcast_set_if_by_if_v6(env, this, fd, value);
          } else {
-@@ -1399,7 +1420,7 @@
+@@ -1402,7 +1416,7 @@
   */
  static void setMulticastLoopbackMode(JNIEnv *env, jobject this, int fd,
                                    jint opt, jobject value) {
@@ -12475,7 +12500,7 @@
      if (ipv6_available()) {
          mcast_set_loop_v6(env, this, fd, value);
      } else {
-@@ -1964,7 +1985,7 @@
+@@ -1982,7 +1996,7 @@
          fd = (*env)->GetIntField(env, fdObj, IO_fd_fdID);
      }
      /* setsockopt to be correct ttl */
@@ -12484,7 +12509,7 @@
      if (ipv6_available()) {
          setHopLimit(env, fd, ttl);
      } else {
-@@ -2357,18 +2378,30 @@
+@@ -2374,18 +2388,30 @@
              mname6.ipv6mr_interface = idx;
          }
  
@@ -12520,38 +12545,7 @@
          }
 --- jdk/src/solaris/native/java/net/PlainSocketImpl.c
 +++ jdk/src/solaris/native/java/net/PlainSocketImpl.c
-@@ -253,7 +253,12 @@
-                                            jboolean stream) {
-     jobject fdObj, ssObj;
-     int fd;
--    int arg = -1;
-+    int type = (stream ? SOCK_STREAM : SOCK_DGRAM);
-+#ifdef AF_INET6
-+    int domain = ipv6_available() ? AF_INET6 : AF_INET;
-+#else
-+    int domain = AF_INET;
-+#endif
- 
-     if (socketExceptionCls == NULL) {
-         jclass c = (*env)->FindClass(env, "java/net/SocketException");
-@@ -267,25 +272,29 @@
-         (*env)->ThrowNew(env, socketExceptionCls, "null fd object");
-         return;
-     }
--#ifdef AF_INET6
--    if (ipv6_available()) {
--        fd = JVM_Socket(AF_INET6, (stream ? SOCK_STREAM: SOCK_DGRAM), 0);
--    } else
--#endif /* AF_INET6 */
--        {
--            fd = JVM_Socket(AF_INET, (stream ? SOCK_STREAM: SOCK_DGRAM), 0);
--        }
--    if (fd == JVM_IO_ERR) {
-+
-+    if ((fd = JVM_Socket(domain, type, 0)) == JVM_IO_ERR) {
-         /* note: if you run out of fds, you may not be able to load
-          * the exception class, and get a NoClassDefFoundError
-          * instead.
+@@ -279,10 +279,21 @@
           */
          NET_ThrowNew(env, errno, "can't create socket");
          return;
@@ -12561,7 +12555,7 @@
  
 +#ifdef AF_INET6
 +    /* Disable IPV6_V6ONLY to ensure dual-socket support */
-+    if (domain == AF_INET6) {
++    if (ipv6_available()) {
 +        int arg = 0;
 +        if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (char*)&arg,
 +                       sizeof(int)) < 0) {
@@ -12575,7 +12569,7 @@
      /*
       * If this is a server socket then enable SO_REUSEADDR
       * automatically and set to non blocking.
-@@ -294,9 +303,15 @@
+@@ -291,9 +302,15 @@
      if (ssObj != NULL) {
          int arg = 1;
          SET_NONBLOCKING(fd);
@@ -12593,7 +12587,7 @@
  }
  
  /*
-@@ -528,9 +543,11 @@
+@@ -525,9 +542,11 @@
          if (connect_rv == JVM_IO_INTR) {
              JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException",
                              "operation interrupted");
@@ -12616,6 +12610,24 @@
  
  /*
   * The fd table and the number of file descriptors
+@@ -281,7 +281,7 @@
+ 
+ int NET_RecvFrom(int s, void *buf, int len, unsigned int flags,
+        struct sockaddr *from, int *fromlen) {
+-    BLOCKING_IO_RETURN_INT( s, recvfrom(s, buf, len, flags, from, (socklen_t)fromlen) );
++    BLOCKING_IO_RETURN_INT( s, recvfrom(s, buf, len, flags, from, (socklen_t *)fromlen) );
+ }
+ 
+ int NET_Send(int s, void *msg, int len, unsigned int flags) {
+@@ -298,7 +298,7 @@
+ }
+ 
+ int NET_Accept(int s, struct sockaddr *addr, int *addrlen) {
+-    BLOCKING_IO_RETURN_INT( s, accept(s, addr, (socklen_t)addrlen) );
++    BLOCKING_IO_RETURN_INT( s, accept(s, addr, (socklen_t *)addrlen) );
+ }
+ 
+ int NET_Connect(int s, struct sockaddr *addr, int addrlen) {
 --- jdk/src/solaris/native/java/net/net_util_md.c
 +++ jdk/src/solaris/native/java/net/net_util_md.c
 @@ -34,6 +34,15 @@
@@ -12649,15 +12661,6 @@
  jint  IPv6_supported()
  {
  #ifndef AF_INET6
-@@ -230,7 +247,7 @@
-     int fd;
-     void *ipv6_fn;
-     SOCKADDR sa;
--    int sa_len = sizeof(sa);
-+    socklen_t sa_len = sizeof(sa);
- 
-     fd = JVM_Socket(AF_INET6, SOCK_STREAM, 0) ;
-     if (fd < 0) {
 @@ -356,6 +373,7 @@
      close(fd);
      return JNI_TRUE;
@@ -12666,7 +12669,7 @@
  
  void
  NET_AllocSockaddr(struct sockaddr **him, int *len) {
-@@ -710,6 +728,10 @@
+@@ -707,6 +725,10 @@
          him6->sin6_family = AF_INET6;
          *len = sizeof(struct sockaddr_in6) ;
  
@@ -12677,24 +12680,16 @@
          /*
           * On Linux if we are connecting to a link-local address
           * we need to specify the interface in the scope_id (2.4 kernel only)
-@@ -1107,7 +1129,16 @@
+@@ -1104,7 +1126,7 @@
      }
  #endif
  
-+#ifdef __solaris__
-     rv = getsockopt(fd, level, opt, result, len);
-+#else
-+    {
-+        socklen_t socklen = *len;
-+        rv = getsockopt(fd, level, opt, result, &socklen);
-+        *len = socklen;
-+    }
-+#endif
-+
+-    rv = getsockopt(fd, level, opt, result, (socklen_t)len);
++    rv = getsockopt(fd, level, opt, result, (socklen_t *)len);
      if (rv < 0) {
          return rv;
      }
-@@ -1154,6 +1185,24 @@
+@@ -1151,6 +1173,24 @@
  #define IPTOS_PREC_MASK 0xe0
  #endif
  
@@ -12719,7 +12714,7 @@
      /*
       * IPPROTO/IP_TOS :-
       * 1. IPv6 on Solaris: no-op and will be set in flowinfo
-@@ -1186,6 +1235,10 @@
+@@ -1183,6 +1223,10 @@
          *iptos &= (IPTOS_TOS_MASK | IPTOS_PREC_MASK);
      }
  
@@ -12730,7 +12725,7 @@
      /*
       * SOL_SOCKET/{SO_SNDBUF,SO_RCVBUF} - On Solaris need to
       * ensure that value is <= max_buf as otherwise we get
-@@ -1233,6 +1286,84 @@
+@@ -1230,6 +1274,84 @@
      }
  #endif
  



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201501240002.t0O021mr091624>