package org.batfish.representation.iptables; import java.io.Serializable; import java.util.LinkedList; import java.util.List; import org.batfish.common.BatfishException; import org.batfish.datamodel.LineAction; public class IptablesChain implements Serializable { public enum ChainPolicy { ACCEPT, DROP, RETURN } /** * */ private static final long serialVersionUID = 1L; private String _name; private ChainPolicy _policy; private List<IptablesRule> _rules; public IptablesChain(String name) { _name = name; _rules = new LinkedList<>(); } public void addRule(IptablesRule rule, int ruleIndex) { if (ruleIndex == -1) { // -1 implies append _rules.add(rule); } else { // rule indices in iptables start at 1 int listIndex = ruleIndex - 1; _rules.add(listIndex, rule); } } public LineAction getIpAccessListLineAction() { if (_policy == ChainPolicy.ACCEPT) { return LineAction.ACCEPT; } else if (_policy == ChainPolicy.DROP) { return LineAction.REJECT; } else { throw new BatfishException( "Unsupported ChainPolicy for mapping to LineAction: " + _policy.toString()); } } public String getName() { return _name; } public ChainPolicy getPolicy() { return _policy; } public List<IptablesRule> getRules() { return _rules; } public void setPolicy(ChainPolicy policy) { _policy = policy; } }