in nodemanager/utils/System.cpp [20:91]
std::vector<System::NetInfo> System::GetNetworkInfo()
{
std::vector<System::NetInfo> info;
std::string rawData;
int ret = System::ExecuteCommandOut(rawData, "ip", "addr");
if (ret == 0)
{
std::string name, mac, ipV4, ipV6;
bool isIB = false;
std::istringstream iss(rawData);
std::string line;
while (getline(iss, line))
{
std::istringstream lineStream(line);
if (line.empty()) continue;
if (line[0] >= '0' && line[0] <= '9')
{
if (!name.empty())
{
info.push_back(System::NetInfo(name, mac, ipV4, ipV6, isIB));
name.clear();
mac.clear();
ipV4.clear();
ipV6.clear();
isIB = false;
}
lineStream >> name >> name;
if (name.length() > 0)
{
name = name.substr(0, name.length() - 1);
}
// temporarily identify IB
if (name == "ib0")
{
isIB = true;
}
continue;
}
std::string head, value;
lineStream >> head >> value;
if (head.compare(0, 4, "link") == 0)
{
mac = value;
}
else if (head == "inet")
{
ipV4 = value;
}
else if (head == "inet6")
{
ipV6 = value;
}
}
if (!name.empty())
{
info.push_back(System::NetInfo(name, mac, ipV4, ipV6, isIB));
}
}
return std::move(info);
}