blob: 940d3f7a3463339466e66c62e0de70beef945230 [file] [log] [blame]
// Copyright 2021 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.
#ifndef SRC_CONNECTIVITY_NETWORK_TUN_NETWORK_TUN_CONFIG_H_
#define SRC_CONNECTIVITY_NETWORK_TUN_NETWORK_TUN_CONFIG_H_
#include <fidl/fuchsia.net.tun/cpp/wire.h>
#include <fidl/fuchsia.net/cpp/wire.h>
namespace network {
namespace tun {
class BasePortConfig {
public:
static std::optional<BasePortConfig> Create(const fuchsia_net_tun::wire::BasePortConfig& config);
uint8_t port_id;
uint32_t mtu;
std::vector<fuchsia_hardware_network::wire::FrameType> rx_types;
std::vector<fuchsia_hardware_network::wire::FrameTypeSupport> tx_types;
fuchsia_hardware_network::wire::PortClass port_class;
};
class DevicePortConfig : public BasePortConfig {
public:
DevicePortConfig() = delete;
DevicePortConfig(DevicePortConfig&&) = default;
static std::optional<DevicePortConfig> Create(
const fuchsia_net_tun::wire::DevicePortConfig& config);
bool online;
std::optional<fuchsia_net::wire::MacAddress> mac;
private:
explicit DevicePortConfig(BasePortConfig&& base) : BasePortConfig(std::move(base)) {}
};
class DevicePairPortConfig : public BasePortConfig {
public:
DevicePairPortConfig() = delete;
DevicePairPortConfig(DevicePairPortConfig&&) = default;
static std::optional<DevicePairPortConfig> Create(
const fuchsia_net_tun::wire::DevicePairPortConfig& config);
std::optional<fuchsia_net::wire::MacAddress> mac_left;
std::optional<fuchsia_net::wire::MacAddress> mac_right;
private:
explicit DevicePairPortConfig(BasePortConfig&& base) : BasePortConfig(std::move(base)) {}
};
class BaseDeviceConfig {
public:
explicit BaseDeviceConfig(const fuchsia_net_tun::wire::BaseDeviceConfig& config);
BaseDeviceConfig(BaseDeviceConfig&&) = default;
bool report_metadata = false;
uint32_t min_tx_buffer_length = 0;
uint32_t min_rx_buffer_length = 0;
};
class DeviceConfig : public BaseDeviceConfig {
public:
explicit DeviceConfig(const fuchsia_net_tun::wire::DeviceConfig& config);
DeviceConfig(DeviceConfig&&) = default;
bool blocking = false;
};
class DevicePairConfig : public BaseDeviceConfig {
public:
explicit DevicePairConfig(const fuchsia_net_tun::wire::DevicePairConfig& config);
bool fallible_transmit_left = false;
bool fallible_transmit_right = false;
};
} // namespace tun
} // namespace network
#endif // SRC_CONNECTIVITY_NETWORK_TUN_NETWORK_TUN_CONFIG_H_