package org.zstack.utils.iptables;
import java.util.HashMap;
import java.util.Map;
public class Iptables {
private Map<String, IptableTable> tables = new HashMap<String, IptableTable>();
public static final String TABLE_FILTER = "filter";
public static final String TABLE_NAT = "nat";
public static final String TABLE_MANGLE = "mangle";
public static final String CHAIN_OUTPUT = "OUTPUT";
public static final String CHAIN_INPUT = "INPUT";
public static final String CHAIN_FORWARD = "FORWARD";
public static final String CHAIN_PREROUTING = "PREROUTING";
public static final String CHAIN_POSTROUTING = "POSTROUTING";
public void addRuleToChain(String tableName, String chainName, String rule) {
IptableTable table = tables.get(tableName);
if (table == null) {
table = new IptableTable();
tables.put(tableName, table);
}
IptableChain chain = table.getChain(chainName);
if (chain == null) {
chain = new IptableChain();
table.putChain(chainName, chain);
}
chain.addRule(rule);
}
public void filterTableAddRuleToChain(String chainName, String rule) {
addRuleToChain(TABLE_FILTER, chainName, rule);
}
public void natTableAddRuleToChain(String chainName, String rule) {
addRuleToChain(TABLE_NAT, chainName, rule);
}
public void mangleTableAddRuleToChain(String chainName, String rule) {
addRuleToChain(TABLE_MANGLE, chainName, rule);
}
public void filterTableInputChainAddRule(String rule) {
addRuleToChain(TABLE_FILTER, CHAIN_INPUT, rule);
}
public void filterTableOutputChainAddRule(String rule) {
addRuleToChain(TABLE_FILTER, CHAIN_OUTPUT, rule);
}
public void filterTableForwardChainAddRule(String rule) {
addRuleToChain(TABLE_FILTER, CHAIN_FORWARD, rule);
}
public Map<String, IptableTable> buildTables() {
return tables;
}
}