class LinkStats{
public:
LinkStats(std::shared_ptr<Configuration> config) {
m_interface = "eth0";
};
~LinkStats() = default;
std::pair<int32_t, int32_t> getRxLinkStats() {
auto status = getLinkStats();
if(nullptr != status){
return std::make_pair(status->rx_errors, status->rx_dropped);
}
}
std::pair<int32_t, int32_t> getTxLinkStats(){
auto status = getLinkStats();
if(nullptr != status){
return std::make_pair(status->tx_errors, status->tx_dropped);
}
}
private:
rtnl_link_stats* getLinkStats() {
getifaddrs(&m_ifaddr);
m_interfaceAddresses = { m_ifaddr, []( ifaddrs * x ) { freeifaddrs( x );}};
for ( ifaddrs *ifa = m_interfaceAddresses.get(); ifa; ifa = ifa->ifa_next) {
if ((ifa->ifa_addr->sa_family == AF_PACKET) &&
(ifa->ifa_data != NULL) &&
(ifa->ifa_addr != NULL) &&
(0 == m_interface.compare(ifa->ifa_name))) {
return static_cast<rtnl_link_stats*>(ifa->ifa_data);
}
}
return nullptr;
}
std::unique_ptr<ifaddrs, std::function<void(ifaddrs*)>> m_interfaceAddresses;
ifaddrs *m_ifaddr;
std::string m_interface;
};
Я написал вышеупомянутый класс для получения статистики ссылок: rx_error
, rx_dropped
, tx_error
, tx_dropped
.
В двух вышеупомянутых функциях getRxLinkStats()
и getTxLinkStats()
, я хочу знать, есть ли элегантный способ вернуть std::pair()
, который будет указывать, что он пуст, то есть getLinkStats()
не удалось.