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