// Copyright 2023 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "patchpanel/iptables.h"

namespace patchpanel {
namespace {
constexpr char kFilterTable[] = "filter";
constexpr char kMangleTable[] = "mangle";
constexpr char kNatTable[] = "nat";
}  // namespace

// static
std::string Iptables::TableName(Iptables::Table table) {
  switch (table) {
    case Table::kFilter:
      return kFilterTable;
    case Table::kMangle:
      return kMangleTable;
    case Table::kNat:
      return kNatTable;
  }
}

// static
std::string Iptables::CommandName(Iptables::Command command) {
  switch (command) {
    case Command::kA:
      return "-A";
    case Command::kC:
      return "-C";
    case Command::kD:
      return "-D";
    case Command::kF:
      return "-F";
    case Command::kI:
      return "-I";
    case Command::kL:
      return "-L";
    case Command::kN:
      return "-N";
    case Command::kS:
      return "-S";
    case Command::kX:
      return "-X";
  }
}

// static
std::optional<Iptables::Table> Iptables::TableFromName(
    const std::string& table) {
  if (table == "nat") {
    return Table::kNat;
  }
  if (table == "filter") {
    return Table::kFilter;
  }
  if (table == "mangle") {
    return Table::kMangle;
  }
  // The "raw" and "security" tables are not used in patchpanel.
  return std::nullopt;
}

// static
std::optional<Iptables::Command> Iptables::CommandFromName(
    const std::string& command) {
  if (command == "-A") {
    return Command::kA;
  } else if (command == "-D") {
    return Command::kD;
  } else if (command == "-F") {
    return Command::kF;
  } else if (command == "-I") {
    return Command::kI;
  } else if (command == "-L") {
    return Command::kL;
  } else if (command == "-N") {
    return Command::kN;
  } else if (command == "-S") {
    return Command::kS;
  } else if (command == "-X") {
    return Command::kX;
  }
  return std::nullopt;
}

std::ostream& operator<<(std::ostream& stream, Iptables::Table table) {
  return stream << Iptables::TableName(table);
}

std::ostream& operator<<(std::ostream& stream, Iptables::Command command) {
  return stream << Iptables::CommandName(command);
}

}  // namespace patchpanel
