// Copyright 2018 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 "shill/ethernet/ethernet_temporary_service.h"

#include <string>

#include "shill/control_interface.h"
#include "shill/manager.h"

using std::string;

namespace shill {

EthernetTemporaryService::EthernetTemporaryService(
    Manager* manager, const string& storage_identifier)
    : Service(manager, Technology::kEthernet),
      storage_identifier_(storage_identifier) {
  friendly_name_ = "Ethernet";
}

EthernetTemporaryService::~EthernetTemporaryService() = default;

RpcIdentifier EthernetTemporaryService::GetDeviceRpcId(Error* /*error*/) const {
  return control_interface()->NullRpcIdentifier();
}

string EthernetTemporaryService::GetStorageIdentifier() const {
  return storage_identifier_;
}

bool EthernetTemporaryService::IsVisible() const {
  return false;
}

}  // namespace shill
