blob: 59b3f2e474bb8ce81a1c916f5c3059be84f89293 [file] [log] [blame]
// Copyright 2015 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "thermald/network_interface.h"
#include <net/if.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <string>
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/files/scoped_file.h"
#include "base/logging.h"
using std::string;
namespace thermald {
bool NetworkInterface::IsUp() {
base::ScopedFD sockfd(socket(AF_INET, SOCK_DGRAM, 0));
if (sockfd.get() < 0)
return false;
struct ifreq ifr;
memset(&ifr, 0, sizeof ifr);
strncpy(ifr.ifr_name, name_.c_str(), IFNAMSIZ);
ifr.ifr_flags |= IFF_UP;
if (ioctl(sockfd.get(), SIOCGIFFLAGS, &ifr)) {
LOG(ERROR) << "[" << name_ << "] Failed to read interface flags: "
<< strerror(errno);
return false;
}
return ifr.ifr_flags & IFF_UP;
}
bool NetworkInterface::Exists(const string &name) {
return base::DirectoryExists(base::FilePath("/sys/class/net/" + name));
}
} // namespace thermald