diff options
author | Ratan Gupta <ratagupt@in.ibm.com> | 2017-08-13 17:49:56 +0530 |
---|---|---|
committer | Ratan Gupta <ratagupt@in.ibm.com> | 2017-08-13 17:56:49 +0530 |
commit | da7d3afabfc90a8dd918baf9906b97f39777bfcc (patch) | |
tree | 65c0ee55545abd70e3cbfb76e412279979486335 /ethernet_interface.cpp | |
parent | 2aca45c01e84ab308475f216f95aba55bfe925be (diff) | |
download | phosphor-networkd-da7d3afabfc90a8dd918baf9906b97f39777bfcc.tar.gz phosphor-networkd-da7d3afabfc90a8dd918baf9906b97f39777bfcc.zip |
EthernetInterface: Simplify the code to fetch the mac address
Change-Id: I7db6b2379e1794019a8676048ee7dcf3de262a6d
Signed-off-by: Ratan Gupta <ratagupt@in.ibm.com>
Diffstat (limited to 'ethernet_interface.cpp')
-rw-r--r-- | ethernet_interface.cpp | 50 |
1 files changed, 14 insertions, 36 deletions
diff --git a/ethernet_interface.cpp b/ethernet_interface.cpp index 5c78f3a..f31c210 100644 --- a/ethernet_interface.cpp +++ b/ethernet_interface.cpp @@ -33,7 +33,7 @@ namespace network using namespace phosphor::logging; using namespace sdbusplus::xyz::openbmc_project::Common::Error; -constexpr auto MAC_ADDRESS_FORMAT = "%02X:%02X:%02X:%02X:%02X:%02X"; +constexpr auto MAC_ADDRESS_FORMAT = "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx"; constexpr size_t SIZE_MAC = 18; constexpr size_t SIZE_BUFF = 512; @@ -51,7 +51,7 @@ EthernetInterface::EthernetInterface(sdbusplus::bus::bus& bus, std::replace(intfName.begin(), intfName.end(), '_', '.'); interfaceName(intfName); dHCPEnabled(dhcpEnabled); - mACAddress(getMACAddress()); + mACAddress(getMACAddress(intfName)); // Emit deferred signal. if (emitSignal) @@ -196,12 +196,11 @@ InterfaceInfo EthernetInterface::getInterfaceInfo() const * @return macaddress on success */ -std::string EthernetInterface::getMACAddress() const +std::string EthernetInterface::getMACAddress( + const std::string& interfaceName) const { - struct ifreq ifr; - struct ifconf ifc; - char buf[SIZE_BUFF]; - char macAddress[SIZE_MAC] = ""; + struct ifreq ifr{}; + char macAddress[SIZE_MAC] {}; int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); if (sock < 0) @@ -211,40 +210,19 @@ std::string EthernetInterface::getMACAddress() const return macAddress; } - ifc.ifc_len = sizeof(buf); - ifc.ifc_buf = buf; - if (ioctl(sock, SIOCGIFCONF, &ifc) < 0) + strcpy(ifr.ifr_name, interfaceName.c_str()); + if (ioctl(sock, SIOCGIFHWADDR, &ifr) != 0) { - log<level::ERR>("ioctl failed for SIOCGIFCONF:", - entry("ERROR=%s", strerror(errno))); + log<level::ERR>("ioctl failed for SIOCGIFHWADDR:", + entry("ERROR=%s", strerror(errno))); return macAddress; } - struct ifreq* it = ifc.ifc_req; - const struct ifreq* const end = it + (ifc.ifc_len / sizeof(struct ifreq)); - - for (; it != end; ++it) - { - if (interfaceName() == it->ifr_name) - { - break; - } - } - if (interfaceName() == it->ifr_name) - { - strcpy(ifr.ifr_name, it->ifr_name); - if (ioctl(sock, SIOCGIFHWADDR, &ifr) != 0) - { - log<level::ERR>("ioctl failed for SIOCGIFHWADDR:", - entry("ERROR=%s", strerror(errno))); - return macAddress; - } + snprintf(macAddress, SIZE_MAC, MAC_ADDRESS_FORMAT, + ifr.ifr_hwaddr.sa_data[0], ifr.ifr_hwaddr.sa_data[1], + ifr.ifr_hwaddr.sa_data[2], ifr.ifr_hwaddr.sa_data[3], + ifr.ifr_hwaddr.sa_data[4], ifr.ifr_hwaddr.sa_data[5]); - snprintf(macAddress, SIZE_MAC, MAC_ADDRESS_FORMAT, - ifr.ifr_hwaddr.sa_data[0], ifr.ifr_hwaddr.sa_data[1], - ifr.ifr_hwaddr.sa_data[2], ifr.ifr_hwaddr.sa_data[3], - ifr.ifr_hwaddr.sa_data[4], ifr.ifr_hwaddr.sa_data[5]); - } return macAddress; } |