Merge "Push virtio-net interface renaming into userspace." into gce-dev
diff --git a/common/libs/net/network_interface_manager.cpp b/common/libs/net/network_interface_manager.cpp
index 32d5583..4ee96b7 100644
--- a/common/libs/net/network_interface_manager.cpp
+++ b/common/libs/net/network_interface_manager.cpp
@@ -75,15 +75,22 @@
: nl_client_(std::move(nl_client)) {}
std::unique_ptr<NetworkInterface> NetworkInterfaceManager::Open(
- const std::string& if_name) {
+ const std::string& if_name, const std::string& if_name_alt) {
std::unique_ptr<NetworkInterface> iface;
// NOTE: do not replace this code with an IOCTL call.
// On SELinux enabled Androids, RILD is not permitted to execute an IOCTL
// and this call will fail.
- const int32_t index = if_nametoindex(if_name.c_str());
- if (index < 0) {
- LOG(ERROR) << "Failed to get interface (" << if_name << ") index.";
- return iface;
+ int32_t index = if_nametoindex(if_name.c_str());
+ if (index == 0) {
+ // Try the alternate name. This will be renamed to our preferred name
+ // by the kernel, because we specify IFLA_IFNAME, but open by index.
+ LOG(ERROR) << "Failed to get interface (" << if_name << ") index, "
+ << "trying alternate.";
+ index = if_nametoindex(if_name_alt.c_str());
+ if (index == 0) {
+ LOG(ERROR) << "Failed to get interface (" << if_name_alt << ") index.";
+ return iface;
+ }
}
iface.reset(new NetworkInterface(index));
diff --git a/common/libs/net/network_interface_manager.h b/common/libs/net/network_interface_manager.h
index 3d6ccc5..f28b0ff 100644
--- a/common/libs/net/network_interface_manager.h
+++ b/common/libs/net/network_interface_manager.h
@@ -32,14 +32,15 @@
//
// std::unique_ptr<NetlinkClient> client(NetlinkClient::GetDefault());
// NetworkInterfaceManager manager(client.get());
-// std::unique_ptr<NetworkInterface> iface(manager.Open("eth0"));
+// std::unique_ptr<NetworkInterface> iface(manager.Open("eth0", "em0"));
//
class NetworkInterfaceManager {
public:
// Open existing network interface.
//
// NOTE: this method does not fill in any NetworkInterface details yet.
- std::unique_ptr<NetworkInterface> Open(const std::string& if_name);
+ std::unique_ptr<NetworkInterface> Open(const std::string& if_name,
+ const std::string& if_name_alt);
// Apply changes made to existing network interface.
// This method cannot be used to instantiate new network interfaces.
diff --git a/guest/hals/ril/vsoc_ril.cpp b/guest/hals/ril/vsoc_ril.cpp
index b60ad8d..0d33dd9 100644
--- a/guest/hals/ril/vsoc_ril.cpp
+++ b/guest/hals/ril/vsoc_ril.cpp
@@ -114,9 +114,10 @@
std::unique_ptr<cvd::NetlinkClient> nl(factory->New(NETLINK_ROUTE));
std::unique_ptr<cvd::NetworkInterfaceManager> nm(
cvd::NetworkInterfaceManager::New(factory));
- std::unique_ptr<cvd::NetworkInterface> ni(nm->Open("rmnet0"));
+ std::unique_ptr<cvd::NetworkInterface> ni(nm->Open("rmnet0", "eth0"));
if (ni) {
+ ni->SetName("rmnet0");
ni->SetAddress(ipaddr);
ni->SetBroadcastAddress(bcaddr);
ni->SetPrefixLength(prefixlen);
@@ -132,7 +133,7 @@
// This call returns true, if operation was successful.
bool TearDownNetworkInterface() {
auto nm(cvd::NetworkInterfaceManager::New(nullptr));
- auto ni(nm->Open("rmnet0"));
+ auto ni(nm->Open("rmnet0", "eth0"));
if (ni) {
ni->SetOperational(false);