< prev index next >
src/java.base/unix/native/libnet/NetworkInterface.c
Print this page
rev 14890 : 8158023: SocketExceptions contain too little information sometimes
*** 619,630 ****
close(sock);
(*env)->ReleaseStringUTFChars(env, name, name_utf);
if (ret < 0) {
! NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
! "ioctl SIOCGLIFFLAGS failed");
return -1;
}
return flags;
}
--- 619,630 ----
close(sock);
(*env)->ReleaseStringUTFChars(env, name, name_utf);
if (ret < 0) {
! JNU_ThrowByNameWithMessageAndLastError
! (env, JNU_JAVANETPKG "SocketException", "getFlags() failed");
return -1;
}
return flags;
}
*** 1059,1070 ****
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;
--- 1059,1070 ----
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;
*** 1085,1101 ****
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
--- 1085,1101 ----
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
*** 1120,1138 ****
#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);
--- 1120,1138 ----
#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);
*** 1140,1151 ****
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
--- 1140,1151 ----
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
*** 1266,1277 ****
// 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);
--- 1266,1277 ----
// 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);
*** 1280,1291 ****
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
--- 1280,1291 ----
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
*** 1366,1385 ****
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));
--- 1366,1385 ----
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));
*** 1398,1409 ****
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;
}
return computeMaskFromAddress(&(if2.ifr_addr));
}
--- 1398,1409 ----
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;
}
return computeMaskFromAddress(&(if2.ifr_addr));
}
*** 1461,1472 ****
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);
--- 1461,1472 ----
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);
*** 1491,1502 ****
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;
}
--- 1491,1502 ----
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;
}
*** 1533,1551 ****
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;
}
}
--- 1533,1551 ----
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;
}
}
*** 1560,1571 ****
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;
}
}
}
--- 1560,1571 ----
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;
}
}
}
*** 1605,1616 ****
// 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);
--- 1605,1616 ----
// 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);
*** 1619,1630 ****
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
--- 1619,1630 ----
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
*** 1687,1706 ****
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));
--- 1687,1706 ----
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));
*** 1719,1730 ****
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;
}
return computeMaskFromAddress(&(if2.lifr_addr));
}
--- 1719,1730 ----
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;
}
return computeMaskFromAddress(&(if2.lifr_addr));
}
*** 1762,1784 ****
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",
--- 1762,1784 ----
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",
*** 1858,1869 ****
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;
}
--- 1858,1869 ----
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;
}
*** 1898,1914 ****
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;
--- 1898,1914 ----
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;
*** 1925,1936 ****
*/
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) {
struct sockaddr* ifa_broadaddr = NULL;
--- 1925,1936 ----
*/
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) {
struct sockaddr* ifa_broadaddr = NULL;
*** 1995,2006 ****
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) {
--- 1995,2006 ----
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) {
*** 2012,2023 ****
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;
}
--- 2012,2023 ----
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;
}
*** 2073,2092 ****
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));
--- 2073,2092 ----
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));
*** 2105,2116 ****
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;
}
return computeMaskFromAddress(&(if2.ifr_addr));
}
--- 2105,2116 ----
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;
}
return computeMaskFromAddress(&(if2.ifr_addr));
}
*** 2154,2165 ****
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;
}
--- 2154,2165 ----
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 >