Commit 61bdd884 authored by Sergey Ulanov's avatar Sergey Ulanov Committed by Commit Bot

[Fuchsia] Remove dependency on deprecated ioctl_netc_get_if_info()

ioctl_netc_get_if_info() has been replaced with ioctl_netc_get_num_ifs()
and ioctl_netc_get_num_ifs(). Update the corresponding code in //net.

Bug: 818320
Change-Id: I42746f97616000f8839bcb0433c42e1d7feca129
Reviewed-on: https://chromium-review.googlesource.com/956613
Commit-Queue: Sergey Ulanov <sergeyu@chromium.org>
Reviewed-by: default avatarMatt Menke <mmenke@chromium.org>
Cr-Commit-Position: refs/heads/master@{#542236}
parent d1ba6a8b
......@@ -18,37 +18,38 @@ bool GetNetworkList(NetworkInterfaceList* networks, int policy) {
return false;
}
netc_get_if_info_t netconfig;
int size = ioctl_netc_get_if_info(s, &netconfig);
PCHECK(close(s) == 0);
if (size < 0) {
PLOG(ERROR) << "ioctl_netc_get_if_info";
uint32_t num_ifs = 0;
if (ioctl_netc_get_num_ifs(s, &num_ifs) < 0) {
PLOG(ERROR) << "ioctl_netc_get_num_ifs";
PCHECK(close(s) == 0);
return false;
}
networks->clear();
for (uint32_t i = 0; i < num_ifs; ++i) {
netc_if_info_t interface;
for (size_t i = 0; i < netconfig.n_info; ++i) {
netc_if_info_t* interface = netconfig.info + i;
if (ioctl_netc_get_if_info_at(s, &i, &interface) < 0) {
PLOG(WARNING) << "ioctl_netc_get_if_info_at";
continue;
}
// Skip loopback addresses.
if (internal::IsLoopbackOrUnspecifiedAddress(
reinterpret_cast<sockaddr*>(&(interface->addr)))) {
reinterpret_cast<sockaddr*>(&(interface.addr)))) {
continue;
}
IPEndPoint address;
if (!address.FromSockAddr(reinterpret_cast<sockaddr*>(&(interface->addr)),
sizeof(interface->addr))) {
if (!address.FromSockAddr(reinterpret_cast<sockaddr*>(&(interface.addr)),
sizeof(interface.addr))) {
DLOG(WARNING) << "ioctl_netc_get_if_info returned invalid address.";
continue;
}
int prefix_length = 0;
IPEndPoint netmask;
if (netmask.FromSockAddr(reinterpret_cast<sockaddr*>(&(interface->netmask)),
sizeof(interface->netmask))) {
if (netmask.FromSockAddr(reinterpret_cast<sockaddr*>(&(interface.netmask)),
sizeof(interface.netmask))) {
prefix_length = MaskPrefixLength(netmask.address());
}
......@@ -58,11 +59,13 @@ bool GetNetworkList(NetworkInterfaceList* networks, int policy) {
int attributes = 0;
networks->push_back(
NetworkInterface(interface->name, interface->name, interface->index,
NetworkInterface(interface.name, interface.name, interface.index,
NetworkChangeNotifier::CONNECTION_UNKNOWN,
address.address(), prefix_length, attributes));
}
PCHECK(close(s) == 0);
return true;
}
......
......@@ -94,14 +94,19 @@ int GetIPv4AddressFromIndex(int socket, uint32_t index, uint32_t* address) {
return MapSystemError(errno);
result = reinterpret_cast<sockaddr_in*>(&ifr.ifr_addr);
#elif defined(OS_FUCHSIA)
netc_get_if_info_t netconfig;
int size = ioctl_netc_get_if_info(socket, &netconfig);
if (size < 0)
uint32_t num_ifs = 0;
if (ioctl_netc_get_num_ifs(socket, &num_ifs) < 0) {
PLOG(ERROR) << "ioctl_netc_get_num_ifs";
return MapSystemError(errno);
for (size_t i = 0; i < netconfig.n_info; ++i) {
netc_if_info_t* interface = netconfig.info + i;
if (interface->index == index && interface->addr.ss_family == AF_INET) {
result = reinterpret_cast<sockaddr_in*>(&(interface->addr));
}
for (uint32_t i = 0; i < num_ifs; ++i) {
netc_if_info_t interface;
if (ioctl_netc_get_if_info_at(socket, &i, &interface) < 0) {
PLOG(WARNING) << "ioctl_netc_get_if_info_at";
continue;
}
if (interface.index == index && interface.addr.ss_family == AF_INET) {
result = reinterpret_cast<sockaddr_in*>(&(interface.addr));
break;
}
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment