// 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.

#ifndef PATCHPANEL_IPTABLES_H_
#define PATCHPANEL_IPTABLES_H_

#include <optional>
#include <ostream>
#include <string>

namespace patchpanel {

// Helper class for running iptables and ip6tables commands with
// MinijailedProcessRunner.
class Iptables {
 public:
  // Represents one of the predefined netfilter tables. The "raw" and "security"
  // tables are not used in patchpanel.
  enum class Table {
    kFilter,
    kMangle,
    kNat,
  };

  // Command that represents the specific action to perform in iptables.
  enum class Command {
    // Append
    kA,
    // Check if chain exists
    kC,
    // Delete
    kD,
    // Flush
    kF,
    // Insert
    kI,
    // List
    kL,
    // New chain
    kN,
    // List rules
    kS,
    // Delete chain
    kX,
  };

  static std::string TableName(Table table);
  static std::string CommandName(Command command);
  static std::optional<Table> TableFromName(const std::string& table);
  static std::optional<Command> CommandFromName(const std::string& command);
};

std::ostream& operator<<(std::ostream& stream, Iptables::Table table);

std::ostream& operator<<(std::ostream& stream, Iptables::Command command);

}  // namespace patchpanel

#endif  // PATCHPANEL_IPTABLES_H_
