# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config.gni")
import("//build/testing/environments.gni")
import("//src/sys/build/components.gni")

source_set("src") {
  sources = [
    "buffer.cc",
    "buffer.h",
    "device_adapter.cc",
    "device_adapter.h",
    "mac_adapter.cc",
    "mac_adapter.h",
    "tun_ctl.cc",
    "tun_ctl.h",
    "tun_device.cc",
    "tun_device.h",
    "tun_pair.cc",
    "tun_pair.h",
    "util.cc",
    "util.h",
  ]
  public_deps = [
    "//sdk/banjo/fuchsia.hardware.network.device",
    "//sdk/fidl/fuchsia.hardware.network:fuchsia.hardware.network_llcpp",
    "//sdk/fidl/fuchsia.net.tun",
    "//sdk/lib/sys/cpp",
    "//src/connectivity/network/drivers/network-device/device",
    "//src/connectivity/network/drivers/network-device/mac",
    "//src/lib/fxl",
    "//src/lib/vmo_store",
    "//zircon/public/lib/async-cpp",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/fit",
    "//zircon/public/lib/sync",
    "//zircon/system/ulib/async-default",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/fidl-async:fidl-async-cpp",
    "//zircon/system/ulib/fzl",
    "//zircon/system/ulib/syslog",
  ]
}

executable("bin") {
  output_name = "network_tun"
  sources = [ "main.cc" ]
  deps = [ ":src" ]
}

fuchsia_component("component") {
  component_name = "network-tun"
  manifest = "meta/network-tun.cmx"
  deps = [ ":bin" ]
}

fuchsia_package("network-tun") {
  deps = [ ":component" ]
}

executable("network_tun_unittest") {
  testonly = true
  sources = [
    "buffer_unittest.cc",
    "network_tun_unittest.cc",
  ]

  deps = [
    ":src",
    "//src/lib/fxl/test:gtest_main",
    "//src/lib/testing/loop_fixture",
    "//src/lib/testing/predicates",
  ]
}

fuchsia_unittest_package("network-tun-test") {
  deps = [ ":network_tun_unittest" ]
}

group("tests") {
  testonly = true
  deps = [ ":network-tun-test" ]
}

config_data("config") {
  for_pkg = "sysmgr"
  sources = [ "network_tun.config" ]
}
