Commit af91262d authored by Dominik Charousset's avatar Dominik Charousset

Return interface names from get_mac_addresses

parent 4d17b790
......@@ -22,11 +22,17 @@
#include <string>
#include <vector>
#include <utility>
namespace caf {
namespace detail {
std::vector<std::string> get_mac_addresses();
struct iface_info {
std::string interface_name;
std::string ethernet_address;
};
std::vector<iface_info> get_mac_addresses();
} // namespace detail
} // namespace caf
......
......@@ -22,9 +22,9 @@
namespace caf {
namespace detail {
std::vector<std::string> get_mac_addresses() {
std::vector<iface_info> get_mac_addresses() {
int mib[6];
std::vector<std::string> result;
std::vector<iface_info> result;
mib[0] = CTL_NET;
mib[1] = AF_ROUTE;
mib[2] = 0;
......@@ -66,7 +66,7 @@ std::vector<std::string> get_mac_addresses() {
}
auto addr = oss.str();
if (addr != "00:00:00:00:00:00") {
result.push_back(std::move(addr));
result.push_back({i->if_name, std::move(addr)});
}
}
if_freenameindex(indices);
......@@ -100,7 +100,7 @@ using namespace std;
namespace caf {
namespace detail {
std::vector<std::string> get_mac_addresses() {
std::vector<iface_info> get_mac_addresses() {
// get a socket handle
int sck = socket(AF_INET, SOCK_DGRAM, 0);
if (sck < 0) {
......@@ -116,7 +116,7 @@ std::vector<std::string> get_mac_addresses() {
perror("ioctl(SIOCGIFCONF)");
return {};
}
vector<string> hw_addresses;
vector<iface_info> result;
auto ctoi = [](char c)->unsigned {
return static_cast<unsigned char>(c);
};
......@@ -141,10 +141,10 @@ std::vector<std::string> get_mac_addresses() {
}
auto addr = oss.str();
if (addr != "00:00:00:00:00:00") {
hw_addresses.push_back(std::move(addr));
result.push_back({item->ifr_name, std::move(addr)});
}
}
return hw_addresses;
return result;
}
} // namespace detail
......@@ -193,9 +193,9 @@ using namespace std;
namespace caf {
namespace detail {
std::vector<std::string> get_mac_addresses() {
std::vector<iface_info> get_mac_addresses() {
// result vector
vector<string> hw_addresses;
vector<iface_info> result;
// flags to pass to GetAdaptersAddresses
ULONG flags = GAA_FLAG_INCLUDE_PREFIX;
// default to unspecified address family (both)
......@@ -232,7 +232,7 @@ std::vector<std::string> get_mac_addresses() {
}
auto hw_addr = oss.str();
if (hw_addr != "00:00:00:00:00:00") {
hw_addresses.push_back(std::move(hw_addr));
result.push_back({addr->AdapterName, std::move(hw_addr)});
}
}
}
......@@ -243,7 +243,7 @@ std::vector<std::string> get_mac_addresses() {
perror("Call to GetAdaptersAddresses failed with error");
}
}
return hw_addresses;
return result;
}
} // namespace detail
......
......@@ -179,7 +179,12 @@ node_id::data::~data() {
// initializes singleton
node_id::data* node_id::data::create_singleton() {
auto macs = detail::get_mac_addresses();
auto ifs = detail::get_mac_addresses();
std::vector<std::string> macs;
macs.reserve(ifs.size());
for (auto& i : ifs) {
macs.emplace_back(std::move(i.ethernet_address));
}
auto hd_serial_and_mac_addr = join(macs, "") + detail::get_root_uuid();
node_id::host_id_type nid;
detail::ripemd_160(nid, hd_serial_and_mac_addr);
......
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