// Copyright (c) 2012 The Chromium 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 "chromeos/network/network_ip_config.h"

#include "base/logging.h"

namespace chromeos {

namespace {
#define ENUM_CASE(x) case x: return std::string(#x)
std::string IPConfigTypeAsString(IPConfigType type) {
  switch (type) {
    ENUM_CASE(IPCONFIG_TYPE_UNKNOWN);
    ENUM_CASE(IPCONFIG_TYPE_IPV4);
    ENUM_CASE(IPCONFIG_TYPE_IPV6);
    ENUM_CASE(IPCONFIG_TYPE_DHCP);
    ENUM_CASE(IPCONFIG_TYPE_BOOTP);
    ENUM_CASE(IPCONFIG_TYPE_ZEROCONF);
    ENUM_CASE(IPCONFIG_TYPE_DHCP6);
    ENUM_CASE(IPCONFIG_TYPE_PPP);
  }
  NOTREACHED() << "Unhandled enum value " << type;
  return std::string();
}
#undef ENUM_CASE
}  // namespace

NetworkIPConfig::NetworkIPConfig(
    const std::string& device_path, IPConfigType type,
    const std::string& address, const std::string& netmask,
    const std::string& gateway, const std::string& name_servers)
    : device_path(device_path),
      type(type),
      address(address),
      netmask(netmask),
      gateway(gateway),
      name_servers(name_servers) {
}

NetworkIPConfig::~NetworkIPConfig() = default;

std::string NetworkIPConfig::ToString() const {
  return std::string("path: ") + device_path
      + " type: " + IPConfigTypeAsString(type)
      + " address: " + address
      + " netmask: " + netmask
      + " gateway: " + gateway
      + " name_servers: " + name_servers;
}

}  // namespace chromeos
