< prev index next >
src/java.base/unix/native/libnet/NetworkInterface.c
Print this page
rev 14618 : 8158023: SocketExceptions contain too little information sometimes
*** 617,628 ****
close(sock);
(*env)->ReleaseStringUTFChars(env, name, name_utf);
if (ret < 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "ioctl SIOCGLIFFLAGS failed");
return -1;
}
return flags;
}
--- 617,628 ----
close(sock);
(*env)->ReleaseStringUTFChars(env, name, name_utf);
if (ret < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "getFlags() failed");
return -1;
}
return flags;
}
*** 1031,1042 ****
if ((sock = socket(proto, SOCK_DGRAM, 0)) < 0) {
// If EPROTONOSUPPORT is returned it means we don't have
// support for this proto so don't throw an exception.
if (errno != EPROTONOSUPPORT) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "Socket creation failed");
}
return -1;
}
return sock;
--- 1031,1042 ----
if ((sock = socket(proto, SOCK_DGRAM, 0)) < 0) {
// If EPROTONOSUPPORT is returned it means we don't have
// support for this proto so don't throw an exception.
if (errno != EPROTONOSUPPORT) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "Socket creation failed");
}
return -1;
}
return sock;
*** 1057,1073 ****
struct ifreq if2;
if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
if (errno == EPROTONOSUPPORT) {
if ((sock = 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;
}
}
// Linux starting from 2.6.? kernel allows ioctl call with either IPv4 or
--- 1057,1073 ----
struct ifreq if2;
if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
if (errno == EPROTONOSUPPORT) {
if ((sock = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed");
return -1;
}
} else { // errno is not NOSUPPORT
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "IPV4 Socket creation failed");
return -1;
}
}
// Linux starting from 2.6.? kernel allows ioctl call with either IPv4 or
*** 1092,1110 ****
#if defined(__linux__)
// need to do a dummy SIOCGIFCONF to determine the buffer size.
// SIOCGIFCOUNT doesn't work
ifc.ifc_buf = NULL;
if (ioctl(sock, SIOCGIFCONF, (char *)&ifc) < 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "ioctl SIOCGIFCONF failed");
return ifs;
}
#elif defined(_AIX)
ifc.ifc_buf = NULL;
if (ioctl(sock, SIOCGSIZIFCONF, &(ifc.ifc_len)) < 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "ioctl SIOCGSIZIFCONF failed");
return ifs;
}
#endif /* __linux__ */
CHECKED_MALLOC3(buf, char *, ifc.ifc_len);
--- 1092,1110 ----
#if defined(__linux__)
// need to do a dummy SIOCGIFCONF to determine the buffer size.
// SIOCGIFCOUNT doesn't work
ifc.ifc_buf = NULL;
if (ioctl(sock, SIOCGIFCONF, (char *)&ifc) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFCONF) failed");
return ifs;
}
#elif defined(_AIX)
ifc.ifc_buf = NULL;
if (ioctl(sock, SIOCGSIZIFCONF, &(ifc.ifc_len)) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGSIZIFCONF) failed");
return ifs;
}
#endif /* __linux__ */
CHECKED_MALLOC3(buf, char *, ifc.ifc_len);
*** 1112,1123 ****
ifc.ifc_buf = buf;
#if defined(_AIX)
siocgifconfRequest = CSIOCGIFCONF;
#endif
if (ioctl(sock, siocgifconfRequest, (char *)&ifc) < 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "ioctl SIOCGIFCONF failed");
free(buf);
return ifs;
}
// Iterate through each interface
--- 1112,1123 ----
ifc.ifc_buf = buf;
#if defined(_AIX)
siocgifconfRequest = CSIOCGIFCONF;
#endif
if (ioctl(sock, siocgifconfRequest, (char *)&ifc) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFCONF) failed");
free(buf);
return ifs;
}
// Iterate through each interface
*** 1208,1219 ****
// use SIOCGSIZIFCONF to get size for SIOCGIFCONF
ifc.ifc_buf = NULL;
if (ioctl(sock, SIOCGSIZIFCONF, &(ifc.ifc_len)) < 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "ioctl SIOCGSIZIFCONF failed");
return ifs;
}
bufsize = ifc.ifc_len;
buf = (char *)malloc(bufsize);
--- 1208,1219 ----
// use SIOCGSIZIFCONF to get size for SIOCGIFCONF
ifc.ifc_buf = NULL;
if (ioctl(sock, SIOCGSIZIFCONF, &(ifc.ifc_len)) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGSIZIFCONF) failed");
return ifs;
}
bufsize = ifc.ifc_len;
buf = (char *)malloc(bufsize);
*** 1222,1233 ****
return ifs;
}
ifc.ifc_len = bufsize;
ifc.ifc_buf = buf;
if (ioctl(sock, SIOCGIFCONF, (char *)&ifc) < 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "ioctl CSIOCGIFCONF failed");
free(buf);
return ifs;
}
// Iterate through each interface
--- 1222,1233 ----
return ifs;
}
ifc.ifc_len = bufsize;
ifc.ifc_buf = buf;
if (ioctl(sock, SIOCGIFCONF, (char *)&ifc) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFCONF) failed");
free(buf);
return ifs;
}
// Iterate through each interface
*** 1307,1326 ****
memset((char *)&if2, 0, sizeof(if2));
strncpy(if2.ifr_name, ifname, sizeof(if2.ifr_name) - 1);
// 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));
--- 1307,1326 ----
memset((char *)&if2, 0, sizeof(if2));
strncpy(if2.ifr_name, ifname, sizeof(if2.ifr_name) - 1);
// Let's make sure the interface does have a broadcast address.
if (ioctl(sock, SIOCGIFFLAGS, (char *)&if2) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (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) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFBRDADDR) failed");
return ret;
}
ret = brdcast_store;
memcpy(ret, &if2.ifr_broadaddr, sizeof(struct sockaddr));
*** 1339,1350 ****
struct ifreq if2;
memset((char *)&if2, 0, sizeof(if2));
strncpy(if2.ifr_name, ifname, sizeof(if2.ifr_name) - 1);
if (ioctl(sock, SIOCGIFNETMASK, (char *)&if2) < 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "ioctl SIOCGIFNETMASK failed");
return -1;
}
mask = ntohl(((struct sockaddr_in*)&(if2.ifr_addr))->sin_addr.s_addr);
ret = 0;
--- 1339,1350 ----
struct ifreq if2;
memset((char *)&if2, 0, sizeof(if2));
strncpy(if2.ifr_name, ifname, sizeof(if2.ifr_name) - 1);
if (ioctl(sock, SIOCGIFNETMASK, (char *)&if2) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFNETMASK) failed");
return -1;
}
mask = ntohl(((struct sockaddr_in*)&(if2.ifr_addr))->sin_addr.s_addr);
ret = 0;
*** 1409,1420 ****
static struct ifreq ifr;
int i;
memset((char *)&ifr, 0, sizeof(ifr));
strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name) - 1);
if (ioctl(sock, SIOCGIFHWADDR, &ifr) < 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "ioctl SIOCGIFHWADDR failed");
return -1;
}
memcpy(buf, &ifr.ifr_hwaddr.sa_data, IFHWADDRLEN);
--- 1409,1420 ----
static struct ifreq ifr;
int i;
memset((char *)&ifr, 0, sizeof(ifr));
strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name) - 1);
if (ioctl(sock, SIOCGIFHWADDR, &ifr) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFHWADDR) failed");
return -1;
}
memcpy(buf, &ifr.ifr_hwaddr.sa_data, IFHWADDRLEN);
*** 1439,1450 ****
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;
}
--- 1439,1450 ----
JNU_ThrowNullPointerException(env, "network interface name is NULL");
return -1;
}
if (ioctl(sock, SIOCGIFMTU, (char *)&if2) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFMTU) failed");
return -1;
}
return if2.ifr_mtu;
}
*** 1481,1499 ****
struct lifreq if2;
if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
if (errno == EPROTONOSUPPORT) {
if ((sock = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "IPV6 Socket creation failed");
return -1;
}
alreadyV6=1;
} else { // errno is not NOSUPPORT
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "IPV4 Socket creation failed");
return -1;
}
}
--- 1481,1499 ----
struct lifreq if2;
if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
if (errno == EPROTONOSUPPORT) {
if ((sock = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed");
return -1;
}
alreadyV6=1;
} else { // errno is not NOSUPPORT
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "IPV4 Socket creation failed");
return -1;
}
}
*** 1508,1519 ****
memset((char *)&if2, 0, sizeof(if2));
strncpy(if2.lifr_name, ifname, sizeof(if2.lifr_name) - 1);
if (ioctl(sock, SIOCGLIFNETMASK, (char *)&if2) < 0) {
close(sock);
if ((sock = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "IPV6 Socket creation failed");
return -1;
}
}
}
--- 1508,1519 ----
memset((char *)&if2, 0, sizeof(if2));
strncpy(if2.lifr_name, ifname, sizeof(if2.lifr_name) - 1);
if (ioctl(sock, SIOCGLIFNETMASK, (char *)&if2) < 0) {
close(sock);
if ((sock = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed");
return -1;
}
}
}
*** 1553,1564 ****
// Get the interface count
numifs.lifn_family = family;
numifs.lifn_flags = 0;
if (ioctl(sock, SIOCGLIFNUM, (char *)&numifs) < 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "ioctl SIOCGLIFNUM failed");
return ifs;
}
// Enumerate the interface configurations
bufsize = numifs.lifn_count * sizeof (struct lifreq);
--- 1553,1564 ----
// Get the interface count
numifs.lifn_family = family;
numifs.lifn_flags = 0;
if (ioctl(sock, SIOCGLIFNUM, (char *)&numifs) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGLIFNUM) failed");
return ifs;
}
// Enumerate the interface configurations
bufsize = numifs.lifn_count * sizeof (struct lifreq);
*** 1567,1578 ****
ifc.lifc_family = family;
ifc.lifc_flags = 0;
ifc.lifc_len = bufsize;
ifc.lifc_buf = buf;
if (ioctl(sock, SIOCGLIFCONF, (char *)&ifc) < 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "ioctl SIOCGLIFCONF failed");
free(buf);
return ifs;
}
// Iterate through each interface
--- 1567,1578 ----
ifc.lifc_family = family;
ifc.lifc_flags = 0;
ifc.lifc_len = bufsize;
ifc.lifc_buf = buf;
if (ioctl(sock, SIOCGLIFCONF, (char *)&ifc) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGLIFCONF) failed");
free(buf);
return ifs;
}
// Iterate through each interface
*** 1635,1654 ****
memset((char *)&if2, 0, sizeof(if2));
strncpy(if2.lifr_name, ifname, sizeof(if2.lifr_name) - 1);
// Let's make sure the interface does have a broadcast address
if (ioctl(sock, SIOCGLIFFLAGS, (char *)&if2) < 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "ioctl SIOCGLIFFLAGS failed");
return ret;
}
if (if2.lifr_flags & IFF_BROADCAST) {
// It does, let's retrieve it
if (ioctl(sock, SIOCGLIFBRDADDR, (char *)&if2) < 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "ioctl SIOCGLIFBRDADDR failed");
return ret;
}
ret = brdcast_store;
memcpy(ret, &if2.lifr_broadaddr, sizeof(struct sockaddr));
--- 1635,1654 ----
memset((char *)&if2, 0, sizeof(if2));
strncpy(if2.lifr_name, ifname, sizeof(if2.lifr_name) - 1);
// Let's make sure the interface does have a broadcast address
if (ioctl(sock, SIOCGLIFFLAGS, (char *)&if2) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGLIFFLAGS) failed");
return ret;
}
if (if2.lifr_flags & IFF_BROADCAST) {
// It does, let's retrieve it
if (ioctl(sock, SIOCGLIFBRDADDR, (char *)&if2) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGLIFBRDADDR) failed");
return ret;
}
ret = brdcast_store;
memcpy(ret, &if2.lifr_broadaddr, sizeof(struct sockaddr));
*** 1667,1678 ****
struct lifreq if2;
memset((char *)&if2, 0, sizeof(if2));
strncpy(if2.lifr_name, ifname, sizeof(if2.lifr_name) - 1);
if (ioctl(sock, SIOCGLIFNETMASK, (char *)&if2) < 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "ioctl SIOCGLIFNETMASK failed");
return -1;
}
mask = ntohl(((struct sockaddr_in*)&(if2.lifr_addr))->sin_addr.s_addr);
ret = 0;
--- 1667,1678 ----
struct lifreq if2;
memset((char *)&if2, 0, sizeof(if2));
strncpy(if2.lifr_name, ifname, sizeof(if2.lifr_name) - 1);
if (ioctl(sock, SIOCGLIFNETMASK, (char *)&if2) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGLIFNETMASK) failed");
return -1;
}
mask = ntohl(((struct sockaddr_in*)&(if2.lifr_addr))->sin_addr.s_addr);
ret = 0;
*** 1718,1740 ****
msg.buf = (char *)&dlpareq;
msg.len = DL_PHYS_ADDR_REQ_SIZE;
if (putmsg(fd, &msg, NULL, 0) < 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "putmsg failed");
return -1;
}
dlpaack = (dl_phys_addr_ack_t *)buf;
msg.buf = (char *)buf;
msg.len = 0;
msg.maxlen = sizeof (buf);
if (getmsg(fd, &msg, NULL, &flags) < 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "getmsg failed");
return -1;
}
if (msg.len < DL_PHYS_ADDR_ACK_SIZE || dlpaack->dl_primitive != DL_PHYS_ADDR_ACK) {
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",
--- 1718,1740 ----
msg.buf = (char *)&dlpareq;
msg.len = DL_PHYS_ADDR_REQ_SIZE;
if (putmsg(fd, &msg, NULL, 0) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "putmsg() failed");
return -1;
}
dlpaack = (dl_phys_addr_ack_t *)buf;
msg.buf = (char *)buf;
msg.len = 0;
msg.maxlen = sizeof (buf);
if (getmsg(fd, &msg, NULL, &flags) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "getmsg() failed");
return -1;
}
if (msg.len < DL_PHYS_ADDR_ACK_SIZE || dlpaack->dl_primitive != DL_PHYS_ADDR_ACK) {
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",
*** 1814,1825 ****
struct lifreq if2;
memset((char *)&if2, 0, sizeof(if2));
strncpy(if2.lifr_name, ifname, sizeof(if2.lifr_name) - 1);
if (ioctl(sock, SIOCGLIFMTU, (char *)&if2) < 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "ioctl SIOCGLIFMTU failed");
return -1;
}
return if2.lifr_mtu;
}
--- 1814,1825 ----
struct lifreq if2;
memset((char *)&if2, 0, sizeof(if2));
strncpy(if2.lifr_name, ifname, sizeof(if2.lifr_name) - 1);
if (ioctl(sock, SIOCGLIFMTU, (char *)&if2) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGLIFMTU) failed");
return -1;
}
return if2.lifr_mtu;
}
*** 1854,1870 ****
struct ifreq if2;
if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
if (errno == EPROTONOSUPPORT) {
if ((sock = 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;
}
}
return sock;
--- 1854,1870 ----
struct ifreq if2;
if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
if (errno == EPROTONOSUPPORT) {
if ((sock = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "IPV6 Socket creation failed");
return -1;
}
} else { // errno is not NOSUPPORT
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "IPV4 Socket creation failed");
return -1;
}
}
return sock;
*** 1881,1892 ****
*/
static netif *enumIPv4Interfaces(JNIEnv *env, int sock, netif *ifs) {
struct ifaddrs *ifa, *origifa;
if (getifaddrs(&origifa) != 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "getifaddrs() function failed");
return ifs;
}
for (ifa = origifa; ifa != NULL; ifa = ifa->ifa_next) {
--- 1881,1892 ----
*/
static netif *enumIPv4Interfaces(JNIEnv *env, int sock, netif *ifs) {
struct ifaddrs *ifa, *origifa;
if (getifaddrs(&origifa) != 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "getifaddrs() failed");
return ifs;
}
for (ifa = origifa; ifa != NULL; ifa = ifa->ifa_next) {
*** 1943,1954 ****
struct ifaddrs *ifa, *origifa;
struct sockaddr_in6 *sin6;
struct in6_ifreq ifr6;
if (getifaddrs(&origifa) != 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "getifaddrs() function failed");
return ifs;
}
for (ifa = origifa; ifa != NULL; ifa = ifa->ifa_next) {
--- 1943,1954 ----
struct ifaddrs *ifa, *origifa;
struct sockaddr_in6 *sin6;
struct in6_ifreq ifr6;
if (getifaddrs(&origifa) != 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "getifaddrs() failed");
return ifs;
}
for (ifa = origifa; ifa != NULL; ifa = ifa->ifa_next) {
*** 1960,1971 ****
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");
freeifaddrs(origifa);
freeif(ifs);
return NULL;
}
--- 1960,1971 ----
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) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFNETMASK_IN6) failed");
freeifaddrs(origifa);
freeif(ifs);
return NULL;
}
*** 2020,2039 ****
memset((char *)&if2, 0, sizeof(if2));
strncpy(if2.ifr_name, ifname, sizeof(if2.ifr_name) - 1);
// 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));
--- 2020,2039 ----
memset((char *)&if2, 0, sizeof(if2));
strncpy(if2.ifr_name, ifname, sizeof(if2.ifr_name) - 1);
// Make sure the interface does have a broadcast address
if (ioctl(sock, SIOCGIFFLAGS, (char *)&if2) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (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) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFBRDADDR) failed");
return ret;
}
ret = brdcast_store;
memcpy(ret, &if2.ifr_broadaddr, sizeof(struct sockaddr));
*** 2052,2063 ****
struct ifreq if2;
memset((char *)&if2, 0, sizeof(if2));
strncpy(if2.ifr_name, ifname, sizeof(if2.ifr_name) - 1);
if (ioctl(sock, SIOCGIFNETMASK, (char *)&if2) < 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "ioctl SIOCGIFNETMASK failed");
return -1;
}
mask = ntohl(((struct sockaddr_in*)&(if2.ifr_addr))->sin_addr.s_addr);
ret = 0;
--- 2052,2063 ----
struct ifreq if2;
memset((char *)&if2, 0, sizeof(if2));
strncpy(if2.ifr_name, ifname, sizeof(if2.ifr_name) - 1);
if (ioctl(sock, SIOCGIFNETMASK, (char *)&if2) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFNETMASK) failed");
return -1;
}
mask = ntohl(((struct sockaddr_in*)&(if2.ifr_addr))->sin_addr.s_addr);
ret = 0;
*** 2108,2119 ****
struct ifreq if2;
memset((char *)&if2, 0, sizeof(if2));
strncpy(if2.ifr_name, ifname, sizeof(if2.ifr_name) - 1);
if (ioctl(sock, SIOCGIFMTU, (char *)&if2) < 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "ioctl SIOCGIFMTU failed");
return -1;
}
return if2.ifr_mtu;
}
--- 2108,2119 ----
struct ifreq if2;
memset((char *)&if2, 0, sizeof(if2));
strncpy(if2.ifr_name, ifname, sizeof(if2.ifr_name) - 1);
if (ioctl(sock, SIOCGIFMTU, (char *)&if2) < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "ioctl(SIOCGIFMTU) failed");
return -1;
}
return if2.ifr_mtu;
}
< prev index next >