Bug 868: Remove AD-SAL components which were deprecated in Lithium
[controller.git] / opendaylight / adsal / forwardingrulesmanager / api / src / main / java / org / opendaylight / controller / forwardingrulesmanager / FlowConfig.java
diff --git a/opendaylight/adsal/forwardingrulesmanager/api/src/main/java/org/opendaylight/controller/forwardingrulesmanager/FlowConfig.java b/opendaylight/adsal/forwardingrulesmanager/api/src/main/java/org/opendaylight/controller/forwardingrulesmanager/FlowConfig.java
deleted file mode 100644 (file)
index e2b6642..0000000
+++ /dev/null
@@ -1,1187 +0,0 @@
-/*
- * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.controller.forwardingrulesmanager;
-
-import java.io.Serializable;
-import java.net.Inet6Address;
-import java.net.InetAddress;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-
-import org.opendaylight.controller.configuration.ConfigurationObject;
-import org.opendaylight.controller.sal.action.Action;
-import org.opendaylight.controller.sal.action.ActionType;
-import org.opendaylight.controller.sal.action.Controller;
-import org.opendaylight.controller.sal.action.Drop;
-import org.opendaylight.controller.sal.action.Enqueue;
-import org.opendaylight.controller.sal.action.Flood;
-import org.opendaylight.controller.sal.action.FloodAll;
-import org.opendaylight.controller.sal.action.HwPath;
-import org.opendaylight.controller.sal.action.Loopback;
-import org.opendaylight.controller.sal.action.Output;
-import org.opendaylight.controller.sal.action.PopVlan;
-import org.opendaylight.controller.sal.action.SetDlDst;
-import org.opendaylight.controller.sal.action.SetDlSrc;
-import org.opendaylight.controller.sal.action.SetNextHop;
-import org.opendaylight.controller.sal.action.SetNwDst;
-import org.opendaylight.controller.sal.action.SetNwSrc;
-import org.opendaylight.controller.sal.action.SetNwTos;
-import org.opendaylight.controller.sal.action.SetTpDst;
-import org.opendaylight.controller.sal.action.SetTpSrc;
-import org.opendaylight.controller.sal.action.SetVlanId;
-import org.opendaylight.controller.sal.action.SetVlanPcp;
-import org.opendaylight.controller.sal.action.SwPath;
-import org.opendaylight.controller.sal.core.Node;
-import org.opendaylight.controller.sal.core.NodeConnector;
-import org.opendaylight.controller.sal.flowprogrammer.Flow;
-import org.opendaylight.controller.sal.match.Match;
-import org.opendaylight.controller.sal.match.MatchType;
-import org.opendaylight.controller.sal.utils.HexEncode;
-import org.opendaylight.controller.sal.utils.IPProtocols;
-import org.opendaylight.controller.sal.utils.NetUtils;
-import org.opendaylight.controller.sal.utils.Status;
-import org.opendaylight.controller.sal.utils.StatusCode;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Configuration Java Object which represents a flow configuration information
- * for Forwarding Rules Manager.
- */
-@XmlRootElement
-@XmlAccessorType(XmlAccessType.NONE)
-public class FlowConfig extends ConfigurationObject implements Serializable {
-    private static final long serialVersionUID = 1L;
-    private static final Logger log = LoggerFactory.getLogger(FlowConfig.class);
-    public static final String STATICFLOWGROUP = "__StaticFlows__";
-    public static final String INTERNALSTATICFLOWGROUP = "__InternalStaticFlows__";
-    public static final String INTERNALSTATICFLOWBEGIN = "__";
-    public static final String INTERNALSTATICFLOWEND = "__";
-    private boolean dynamic;
-    private String status;
-
-    /*
-     * The order of the object data defined below is used directly in the UI
-     * built using JSP. Hence try to keep the order in a more logical way.
-     */
-    @XmlElement
-    private String installInHw;
-    @XmlElement
-    private String name;
-    @XmlElement
-    private Node node;
-    @XmlElement
-    private String ingressPort;
-    private String portGroup;
-    @XmlElement
-    private String priority;
-    @XmlElement
-    private String etherType;
-    @XmlElement
-    private String vlanId;
-    @XmlElement
-    private String vlanPriority;
-    @XmlElement
-    private String dlSrc;
-    @XmlElement
-    private String dlDst;
-    @XmlElement
-    private String nwSrc;
-    @XmlElement
-    private String nwDst;
-    @XmlElement
-    private String protocol;
-    @XmlElement
-    private String tosBits;
-    @XmlElement
-    private String tpSrc;
-    @XmlElement
-    private String tpDst;
-    @XmlElement
-    private String cookie;
-    @XmlElement
-    private String idleTimeout;
-    @XmlElement
-    private String hardTimeout;
-    @XmlElement
-    private List<String> actions;
-
-    private enum EtherIPType {
-        ANY, V4, V6;
-    };
-
-    public FlowConfig() {
-    }
-
-    public FlowConfig(String installInHw, String name, Node node, String priority, String cookie, String ingressPort,
-            String portGroup, String vlanId, String vlanPriority, String etherType, String srcMac, String dstMac,
-            String protocol, String tosBits, String srcIP, String dstIP, String tpSrc, String tpDst,
-            String idleTimeout, String hardTimeout, List<String> actions) {
-        super();
-        this.installInHw = installInHw;
-        this.name = name;
-        this.node = node;
-        this.priority = priority;
-        this.cookie = cookie;
-        this.ingressPort = ingressPort;
-        this.portGroup = portGroup;
-        this.vlanId = vlanId;
-        this.vlanPriority = vlanPriority;
-        this.etherType = etherType;
-        this.dlSrc = srcMac;
-        this.dlDst = dstMac;
-        this.protocol = protocol;
-        this.tosBits = tosBits;
-        this.nwSrc = srcIP;
-        this.nwDst = dstIP;
-        this.tpSrc = tpSrc;
-        this.tpDst = tpDst;
-        this.idleTimeout = idleTimeout;
-        this.hardTimeout = hardTimeout;
-        this.actions = actions;
-        this.status = StatusCode.SUCCESS.toString();
-    }
-
-    public FlowConfig(FlowConfig from) {
-        this.installInHw = from.installInHw;
-        this.name = from.name;
-        this.node = from.node;
-        this.priority = from.priority;
-        this.cookie = from.cookie;
-        this.ingressPort = from.ingressPort;
-        this.portGroup = from.portGroup;
-        this.vlanId = from.vlanId;
-        this.vlanPriority = from.vlanPriority;
-        this.etherType = from.etherType;
-        this.dlSrc = from.dlSrc;
-        this.dlDst = from.dlDst;
-        this.protocol = from.protocol;
-        this.tosBits = from.tosBits;
-        this.nwSrc = from.nwSrc;
-        this.nwDst = from.nwDst;
-        this.tpSrc = from.tpSrc;
-        this.tpDst = from.tpDst;
-        this.idleTimeout = from.idleTimeout;
-        this.hardTimeout = from.hardTimeout;
-        this.actions = new ArrayList<String>(from.actions);
-    }
-
-    public boolean installInHw() {
-        if (installInHw == null) {
-            // backward compatibility
-            installInHw = Boolean.toString(true);
-        }
-        return Boolean.valueOf(installInHw);
-    }
-
-    public void setInstallInHw(boolean inHw) {
-        installInHw = String.valueOf(inHw);
-    }
-
-    public String getInstallInHw() {
-        return installInHw;
-    }
-
-    public boolean isInternalFlow() {
-        return (this.name != null &&
-                this.name.startsWith(FlowConfig.INTERNALSTATICFLOWBEGIN) &&
-                this.name.endsWith(FlowConfig.INTERNALSTATICFLOWEND));
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        if (name == null) {
-            return;
-        }
-        this.name = name;
-    }
-
-    public Node getNode() {
-        return this.node;
-    }
-
-    public void setNode(Node node) {
-        this.node = node;
-    }
-
-    public String getPriority() {
-        return priority;
-    }
-
-    public void setPriority(String priority) {
-        this.priority = priority;
-    }
-
-    public String getCookie() {
-        return cookie;
-    }
-
-    public void setCookie(String cookie) {
-        this.cookie = cookie;
-    }
-
-    public String getIngressPort() {
-        return ingressPort;
-    }
-
-    public void setIngressPort(String ingressPort) {
-        this.ingressPort = ingressPort;
-    }
-
-    public String getPortGroup() {
-        return portGroup;
-    }
-
-    @Override
-    public String toString() {
-        return "FlowConfig [dynamic=" + dynamic + ", status=" + status + ", installInHw=" + installInHw + ", name="
-                + name + ", switchId=" + node + ", ingressPort=" + ingressPort + ", portGroup=" + portGroup
-                + ", etherType=" + etherType + ", priority=" + priority + ", vlanId=" + vlanId + ", vlanPriority="
-                + vlanPriority + ", dlSrc=" + dlSrc + ", dlDst=" + dlDst + ", nwSrc=" + nwSrc + ", nwDst=" + nwDst
-                + ", protocol=" + protocol + ", tosBits=" + tosBits + ", tpSrc=" + tpSrc + ", tpDst=" + tpDst
-                + ", cookie=" + cookie + ", idleTimeout=" + idleTimeout + ", hardTimeout=" + hardTimeout + ", actions="
-                + actions + "]";
-    }
-
-    public void setPortGroup(String portGroup) {
-        this.portGroup = portGroup;
-    }
-
-    public String getVlanId() {
-        return vlanId;
-    }
-
-    public void setVlanId(String vlanId) {
-        this.vlanId = vlanId;
-    }
-
-    public String getVlanPriority() {
-        return vlanPriority;
-    }
-
-    public void setVlanPriority(String vlanPriority) {
-        this.vlanPriority = vlanPriority;
-    }
-
-    public String getEtherType() {
-        return etherType;
-    }
-
-    public void setEtherType(String etherType) {
-        this.etherType = etherType;
-    }
-
-    public String getSrcMac() {
-        return dlSrc;
-    }
-
-    public void setSrcMac(String srcMac) {
-        this.dlSrc = srcMac;
-    }
-
-    public String getDstMac() {
-        return dlDst;
-    }
-
-    public void setDstMac(String dstMac) {
-        this.dlDst = dstMac;
-    }
-
-    public String getProtocol() {
-        return protocol;
-    }
-
-    public void setProtocol(String protocol) {
-        this.protocol = protocol;
-    }
-
-    public String getTosBits() {
-        return tosBits;
-    }
-
-    public void setTosBits(String tos_bits) {
-        this.tosBits = tos_bits;
-    }
-
-    public String getSrcIp() {
-        return nwSrc;
-    }
-
-    public void setSrcIp(String src_ip) {
-        this.nwSrc = src_ip;
-    }
-
-    public String getDstIp() {
-        return nwDst;
-    }
-
-    public void setDstIp(String dst_ip) {
-        this.nwDst = dst_ip;
-    }
-
-    public String getSrcPort() {
-        return tpSrc;
-    }
-
-    public void setSrcPort(String src_port) {
-        this.tpSrc = src_port;
-    }
-
-    public String getDstPort() {
-        return tpDst;
-    }
-
-    public void setDstPort(String dst_port) {
-        this.tpDst = dst_port;
-    }
-
-    public String getIdleTimeout() {
-        return idleTimeout;
-    }
-
-    public void setIdleTimeout(String idleTimeout) {
-        this.idleTimeout = idleTimeout;
-    }
-
-    public String getHardTimeout() {
-        return hardTimeout;
-    }
-
-    public void setHardTimeout(String hardTimeout) {
-        this.hardTimeout = hardTimeout;
-    }
-
-    public boolean isIPv6() {
-        return NetUtils.isIPv6AddressValid(this.getSrcIp()) || NetUtils.isIPv6AddressValid(this.getDstIp());
-    }
-
-    public List<String> getActions() {
-        return actions;
-    }
-
-    public void setActions(List<String> actions) {
-        this.actions = actions;
-    }
-
-    public boolean isPortGroupEnabled() {
-        return (portGroup != null);
-    }
-
-    public boolean isDynamic() {
-        return dynamic;
-    }
-
-    public void setDynamic(boolean dynamic) {
-        this.dynamic = dynamic;
-    }
-
-    public String getStatus() {
-        return status;
-    }
-
-    public void setStatus(String status) {
-        this.status = status;
-    }
-
-    public boolean isStatusSuccessful() {
-        return status.equals(StatusCode.SUCCESS.toString());
-    }
-
-    @Override
-    public int hashCode() {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + ((actions == null) ? 0 : actions.hashCode());
-        result = prime * result + ((cookie == null) ? 0 : cookie.hashCode());
-        result = prime * result + ((dlDst == null) ? 0 : dlDst.hashCode());
-        result = prime * result + ((dlSrc == null) ? 0 : dlSrc.hashCode());
-        result = prime * result + (dynamic ? 1231 : 1237);
-        result = prime * result + ((etherType == null) ? 0 : etherType.hashCode());
-        result = prime * result + ((ingressPort == null) ? 0 : ingressPort.hashCode());
-        result = prime * result + ((name == null) ? 0 : name.hashCode());
-        result = prime * result + ((nwDst == null) ? 0 : nwDst.hashCode());
-        result = prime * result + ((nwSrc == null) ? 0 : nwSrc.hashCode());
-        result = prime * result + ((portGroup == null) ? 0 : portGroup.hashCode());
-        result = prime * result + ((priority == null) ? 0 : priority.hashCode());
-        result = prime * result + ((protocol == null) ? 0 : protocol.hashCode());
-        result = prime * result + ((node == null) ? 0 : node.hashCode());
-        result = prime * result + ((tosBits == null) ? 0 : tosBits.hashCode());
-        result = prime * result + ((tpDst == null) ? 0 : tpDst.hashCode());
-        result = prime * result + ((tpSrc == null) ? 0 : tpSrc.hashCode());
-        result = prime * result + ((vlanId == null) ? 0 : vlanId.hashCode());
-        result = prime * result + ((vlanPriority == null) ? 0 : vlanPriority.hashCode());
-        result = prime * result + ((idleTimeout == null) ? 0 : idleTimeout.hashCode());
-        result = prime * result + ((hardTimeout == null) ? 0 : hardTimeout.hashCode());
-        return result;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (obj == null) {
-            return false;
-        }
-        if (getClass() != obj.getClass()) {
-            return false;
-        }
-        FlowConfig other = (FlowConfig) obj;
-        if (actions == null) {
-            if (other.actions != null) {
-                return false;
-            }
-        } else if (!actions.equals(other.actions)) {
-            return false;
-        }
-        if (cookie == null) {
-            if (other.cookie != null) {
-                return false;
-            }
-        } else if (!cookie.equals(other.cookie)) {
-            return false;
-        }
-        if (dlDst == null) {
-            if (other.dlDst != null) {
-                return false;
-            }
-        } else if (!dlDst.equals(other.dlDst)) {
-            return false;
-        }
-        if (dlSrc == null) {
-            if (other.dlSrc != null) {
-                return false;
-            }
-        } else if (!dlSrc.equals(other.dlSrc)) {
-            return false;
-        }
-        if (dynamic != other.dynamic) {
-            return false;
-        }
-        if (etherType == null) {
-            if (other.etherType != null) {
-                return false;
-            }
-        } else if (!etherType.equals(other.etherType)) {
-            return false;
-        }
-        if (ingressPort == null) {
-            if (other.ingressPort != null) {
-                return false;
-            }
-        } else if (!ingressPort.equals(other.ingressPort)) {
-            return false;
-        }
-        if (name == null) {
-            if (other.name != null) {
-                return false;
-            }
-        } else if (!name.equals(other.name)) {
-            return false;
-        }
-        if (nwDst == null) {
-            if (other.nwDst != null) {
-                return false;
-            }
-        } else if (!nwDst.equals(other.nwDst)) {
-            return false;
-        }
-        if (nwSrc == null) {
-            if (other.nwSrc != null) {
-                return false;
-            }
-        } else if (!nwSrc.equals(other.nwSrc)) {
-            return false;
-        }
-        if (portGroup == null) {
-            if (other.portGroup != null) {
-                return false;
-            }
-        } else if (!portGroup.equals(other.portGroup)) {
-            return false;
-        }
-        if (priority == null) {
-            if (other.priority != null) {
-                return false;
-            }
-        } else if (!priority.equals(other.priority)) {
-            return false;
-        }
-        if (protocol == null) {
-            if (other.protocol != null) {
-                return false;
-            }
-        } else if (!protocol.equals(other.protocol)) {
-            return false;
-        }
-        if (node == null) {
-            if (other.node != null) {
-                return false;
-            }
-        } else if (!node.equals(other.node)) {
-            return false;
-        }
-        if (tosBits == null) {
-            if (other.tosBits != null) {
-                return false;
-            }
-        } else if (!tosBits.equals(other.tosBits)) {
-            return false;
-        }
-        if (tpDst == null) {
-            if (other.tpDst != null) {
-                return false;
-            }
-        } else if (!tpDst.equals(other.tpDst)) {
-            return false;
-        }
-        if (tpSrc == null) {
-            if (other.tpSrc != null) {
-                return false;
-            }
-        } else if (!tpSrc.equals(other.tpSrc)) {
-            return false;
-        }
-        if (vlanId == null) {
-            if (other.vlanId != null) {
-                return false;
-            }
-        } else if (!vlanId.equals(other.vlanId)) {
-            return false;
-        }
-        if (vlanPriority == null) {
-            if (other.vlanPriority != null) {
-                return false;
-            }
-        } else if (!vlanPriority.equals(other.vlanPriority)) {
-            return false;
-        }
-        if (idleTimeout == null) {
-            if (other.idleTimeout != null) {
-                return false;
-            }
-        } else if (!idleTimeout.equals(other.idleTimeout)) {
-            return false;
-        }
-        if (hardTimeout == null) {
-            if (other.hardTimeout != null) {
-                return false;
-            }
-        } else if (!hardTimeout.equals(other.hardTimeout)) {
-            return false;
-        }
-        return true;
-    }
-
-    public boolean isL2AddressValid(String mac) {
-        if (mac == null) {
-            return false;
-        }
-
-        Pattern macPattern = Pattern.compile("([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}");
-        Matcher mm = macPattern.matcher(mac);
-        if (!mm.matches()) {
-            log.debug("Ethernet address {} is not valid. Example: 00:05:b9:7c:81:5f", mac);
-            return false;
-        }
-        return true;
-    }
-
-    public boolean isVlanIdValid(String vlanId) {
-        int vlan = Integer.decode(vlanId);
-        return ((vlan >= 0) && (vlan < 4096));
-    }
-
-    public boolean isVlanPriorityValid(String vlanPriority) {
-        int pri = Integer.decode(vlanPriority);
-        return ((pri >= 0) && (pri < 8));
-    }
-
-    public boolean isTOSBitsValid(String tosBits) {
-        int tos = Integer.decode(tosBits);
-        return ((tos >= 0) && (tos < 64));
-    }
-
-    public boolean isTpPortValid(String tpPort) {
-        int port = Integer.decode(tpPort);
-        return ((port >= 0) && (port <= 0xffff));
-    }
-
-    public boolean isTimeoutValid(String timeout) {
-        int to = Integer.decode(timeout);
-        return ((to >= 0) && (to <= 0xffff));
-    }
-
-    public boolean isProtocolValid(String protocol) {
-        IPProtocols proto = IPProtocols.fromString(protocol);
-        return (proto != null);
-    }
-
-    public Status validate() {
-        EtherIPType etype = EtherIPType.ANY;
-        EtherIPType ipsrctype = EtherIPType.ANY;
-        EtherIPType ipdsttype = EtherIPType.ANY;
-
-        try {
-            // Flow name cannot be internal flow signature
-            if (!isValidResourceName(name) || isInternalFlow()) {
-                return new Status(StatusCode.BADREQUEST, "Invalid name");
-            }
-
-            if (node == null) {
-                return new Status(StatusCode.BADREQUEST, "Node is null");
-            }
-
-            if (priority != null) {
-                if (Integer.decode(priority) < 0 || (Integer.decode(priority) > 65535)) {
-                    return new Status(StatusCode.BADREQUEST, String.format("priority %s is not in the range 0 - 65535",
-                            priority));
-                }
-            }
-
-            // make sure it's a valid number
-            if (cookie != null) {
-                Long.decode(cookie);
-            }
-
-            if (ingressPort != null && ingressPort.isEmpty()) {
-                return new Status(StatusCode.BADREQUEST, "Invalid ingress port");
-            }
-
-            if ((vlanId != null) && !isVlanIdValid(vlanId)) {
-                return new Status(StatusCode.BADREQUEST, String.format("Vlan ID %s is not in the range 0 - 4095",
-                        vlanId));
-            }
-
-            if ((vlanPriority != null) && !isVlanPriorityValid(vlanPriority)) {
-                return new Status(StatusCode.BADREQUEST, String.format("Vlan priority %s is not in the range 0 - 7",
-                        vlanPriority));
-            }
-            if (etherType != null) {
-                int type = Integer.decode(etherType);
-                if ((type < 0) || (type > 0xffff)) {
-                    return new Status(StatusCode.BADREQUEST, String.format("Ethernet type %s is not valid", etherType));
-                } else {
-                    if (type == 0x800) {
-                        etype = EtherIPType.V4;
-                    } else if (type == 0x86dd) {
-                        etype = EtherIPType.V6;
-                    }
-                }
-            }
-
-            if ((protocol != null) && !isProtocolValid(protocol)) {
-                return new Status(StatusCode.BADREQUEST, String.format("Protocol %s is not valid", protocol));
-            }
-
-            if ((tosBits != null) && !isTOSBitsValid(tosBits)) {
-                return new Status(StatusCode.BADREQUEST, String.format("IP ToS bits %s is not in the range 0 - 63",
-                        tosBits));
-            }
-
-            if ((tpSrc != null) && !isTpPortValid(tpSrc)) {
-                return new Status(StatusCode.BADREQUEST, String.format("Transport source port %s is not valid", tpSrc));
-            }
-
-            if ((tpDst != null) && !isTpPortValid(tpDst)) {
-                return new Status(StatusCode.BADREQUEST, String.format("Transport destination port %s is not valid",
-                        tpDst));
-            }
-
-            if ((dlSrc != null) && !isL2AddressValid(dlSrc)) {
-                return new Status(StatusCode.BADREQUEST, String.format(
-                        "Ethernet source address %s is not valid. Example: 00:05:b9:7c:81:5f", dlSrc));
-            }
-
-            if ((dlDst != null) && !isL2AddressValid(dlDst)) {
-                return new Status(StatusCode.BADREQUEST, String.format(
-                        "Ethernet destination address %s is not valid. Example: 00:05:b9:7c:81:5f", dlDst));
-            }
-
-            if (nwSrc != null) {
-                if (NetUtils.isIPv4AddressValid(nwSrc)) {
-                    ipsrctype = EtherIPType.V4;
-                } else if (NetUtils.isIPv6AddressValid(nwSrc)) {
-                    ipsrctype = EtherIPType.V6;
-                } else {
-                    return new Status(StatusCode.BADREQUEST, String.format("IP source address %s is not valid", nwSrc));
-                }
-            }
-
-            if (nwDst != null) {
-                if (NetUtils.isIPv4AddressValid(nwDst)) {
-                    ipdsttype = EtherIPType.V4;
-                } else if (NetUtils.isIPv6AddressValid(nwDst)) {
-                    ipdsttype = EtherIPType.V6;
-                } else {
-                    return new Status(StatusCode.BADREQUEST, String.format("IP destination address %s is not valid",
-                            nwDst));
-                }
-            }
-
-            if (etype != EtherIPType.ANY) {
-                if ((ipsrctype != EtherIPType.ANY) && (ipsrctype != etype)) {
-                    return new Status(StatusCode.BADREQUEST, String.format("Type mismatch between Ethernet & Src IP"));
-                }
-                if ((ipdsttype != EtherIPType.ANY) && (ipdsttype != etype)) {
-                    return new Status(StatusCode.BADREQUEST, String.format("Type mismatch between Ethernet & Dst IP"));
-                }
-            }
-            if (ipsrctype != ipdsttype) {
-                if (!((ipsrctype == EtherIPType.ANY) || (ipdsttype == EtherIPType.ANY))) {
-                    return new Status(StatusCode.BADREQUEST, String.format("IP Src Dest Type mismatch"));
-                }
-            }
-
-            if ((idleTimeout != null) && !isTimeoutValid(idleTimeout)) {
-                return new Status(StatusCode.BADREQUEST, String.format("Idle Timeout value %s is not valid",
-                        idleTimeout));
-            }
-
-            if ((hardTimeout != null) && !isTimeoutValid(hardTimeout)) {
-                return new Status(StatusCode.BADREQUEST, String.format("Hard Timeout value %s is not valid",
-                        hardTimeout));
-            }
-
-            Matcher sstr;
-            if (actions == null || actions.isEmpty()) {
-                return new Status(StatusCode.BADREQUEST, "Actions value is null or empty");
-            }
-            for (String actiongrp : actions) {
-                // Check src IP
-                sstr = Pattern.compile(ActionType.SET_NW_SRC.toString() + "=(.*)").matcher(actiongrp);
-                if (sstr.matches()) {
-                    if (!NetUtils.isIPv4AddressValid(sstr.group(1))) {
-                        return new Status(StatusCode.BADREQUEST, String.format("IP source address %s is not valid",
-                                sstr.group(1)));
-                    }
-                    continue;
-                }
-                // Check dst IP
-                sstr = Pattern.compile(ActionType.SET_NW_DST.toString() + "=(.*)").matcher(actiongrp);
-                if (sstr.matches()) {
-                    if (!NetUtils.isIPv4AddressValid(sstr.group(1))) {
-                        return new Status(StatusCode.BADREQUEST, String.format(
-                                "IP destination address %s is not valid", sstr.group(1)));
-                    }
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.SET_VLAN_ID.toString() + "=(.*)").matcher(actiongrp);
-                if (sstr.matches()) {
-                    if ((sstr.group(1) != null) && !isVlanIdValid(sstr.group(1))) {
-                        return new Status(StatusCode.BADREQUEST, String.format(
-                                "Vlan ID %s is not in the range 0 - 4095", sstr.group(1)));
-                    }
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.ENQUEUE + "=(.*)").matcher(actiongrp);
-                if (sstr.matches()) {
-                    for (String t : sstr.group(1).split(",")) {
-                        if (t != null) {
-                            String parts[] = t.split(":");
-                            String nc = String.format("%s|%s@%s", node.getType(), parts[0], node.toString());
-                            if (NodeConnector.fromString(nc) == null) {
-                                return new Status(StatusCode.BADREQUEST, String.format("Enqueue port is not valid"));
-                            }
-                            if (parts.length > 1) {
-                                try {
-                                    Integer.parseInt(parts[1]);
-                                } catch (NumberFormatException e) {
-                                    return new Status(StatusCode.BADREQUEST, String.format("Enqueue %s is not in the range 0 - 2147483647", parts[1]));
-                                }
-                            }
-                        }
-                    }
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.SET_VLAN_PCP.toString() + "=(.*)").matcher(actiongrp);
-                if (sstr.matches()) {
-                    if ((sstr.group(1) != null) && !isVlanPriorityValid(sstr.group(1))) {
-                        return new Status(StatusCode.BADREQUEST, String.format(
-                                "Vlan priority %s is not in the range 0 - 7", sstr.group(1)));
-                    }
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.SET_DL_SRC.toString() + "=(.*)").matcher(actiongrp);
-                if (sstr.matches()) {
-                    if ((sstr.group(1) != null) && !isL2AddressValid(sstr.group(1))) {
-                        return new Status(StatusCode.BADREQUEST, String.format(
-                                "Ethernet source address %s is not valid. Example: 00:05:b9:7c:81:5f",
-                                sstr.group(1)));
-                    }
-                    continue;
-                }
-                sstr = Pattern.compile(ActionType.SET_DL_DST.toString() + "=(.*)").matcher(actiongrp);
-                if (sstr.matches()) {
-                    if ((sstr.group(1) != null) && !isL2AddressValid(sstr.group(1))) {
-                        return new Status(StatusCode.BADREQUEST, String.format(
-                                "Ethernet destination address %s is not valid. Example: 00:05:b9:7c:81:5f",
-                                sstr.group(1)));
-                    }
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.SET_NW_TOS.toString() + "=(.*)").matcher(actiongrp);
-                if (sstr.matches()) {
-                    if ((sstr.group(1) != null) && !isTOSBitsValid(sstr.group(1))) {
-                        return new Status(StatusCode.BADREQUEST, String.format(
-                                "IP ToS bits %s is not in the range 0 - 63", sstr.group(1)));
-                    }
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.SET_TP_SRC.toString() + "=(.*)").matcher(actiongrp);
-                if (sstr.matches()) {
-                    if ((sstr.group(1) != null) && !isTpPortValid(sstr.group(1))) {
-                        return new Status(StatusCode.BADREQUEST, String.format(
-                                "Transport source port %s is not valid", sstr.group(1)));
-                    }
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.SET_TP_DST.toString() + "=(.*)").matcher(actiongrp);
-                if (sstr.matches()) {
-                    if ((sstr.group(1) != null) && !isTpPortValid(sstr.group(1))) {
-                        return new Status(StatusCode.BADREQUEST, String.format(
-                                "Transport destination port %s is not valid", sstr.group(1)));
-                    }
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.SET_NEXT_HOP.toString() + "=(.*)").matcher(actiongrp);
-                if (sstr.matches()) {
-                    if (!NetUtils.isIPAddressValid(sstr.group(1))) {
-                        return new Status(StatusCode.BADREQUEST, String.format(
-                                "IP destination address %s is not valid", sstr.group(1)));
-                    }
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.OUTPUT + "=(.*)").matcher(actiongrp);
-                if (sstr.matches()) {
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.DROP.toString()).matcher(actiongrp);
-                if (sstr.matches()) {
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.LOOPBACK.toString()).matcher(actiongrp);
-                if (sstr.matches()) {
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.FLOOD.toString()).matcher(actiongrp);
-                if (sstr.matches()) {
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.FLOOD_ALL.toString()).matcher(actiongrp);
-                if (sstr.matches()) {
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.SW_PATH.toString()).matcher(actiongrp);
-                if (sstr.matches()) {
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.HW_PATH.toString()).matcher(actiongrp);
-                if (sstr.matches()) {
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.CONTROLLER.toString()).matcher(actiongrp);
-                if (sstr.matches()) {
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.POP_VLAN.toString()).matcher(actiongrp);
-                if (sstr.matches()) {
-                    continue;
-                }
-
-                // If execution reached here, it means there is an Action
-                // which is not recognized by the controller. Return error
-
-                return new Status(StatusCode.BADREQUEST, String.format("%s is an UnSupported Action", actiongrp));
-           }
-        } catch (NumberFormatException e) {
-            return new Status(StatusCode.BADREQUEST, String.format("Invalid number format %s", e.getMessage()));
-        }
-
-        return new Status(StatusCode.SUCCESS);
-    }
-
-    public FlowEntry getFlowEntry() {
-        String group = this.isInternalFlow() ? FlowConfig.INTERNALSTATICFLOWGROUP : FlowConfig.STATICFLOWGROUP;
-        return new FlowEntry(group, this.name, this.getFlow(), this.getNode());
-    }
-
-    public Flow getFlow() {
-        Match match = new Match();
-
-        if (this.ingressPort != null) {
-            match.setField(MatchType.IN_PORT,
-                    NodeConnector.fromString(String.format("%s|%s@%s", node.getType(), ingressPort, node.toString())));
-        }
-        if (this.dlSrc != null) {
-            match.setField(MatchType.DL_SRC, HexEncode.bytesFromHexString(this.dlSrc));
-        }
-        if (this.dlDst != null) {
-            match.setField(MatchType.DL_DST, HexEncode.bytesFromHexString(this.dlDst));
-        }
-        if (this.etherType != null) {
-            match.setField(MatchType.DL_TYPE, Integer.decode(etherType).shortValue());
-        }
-        if (this.vlanId != null) {
-            match.setField(MatchType.DL_VLAN, Short.parseShort(this.vlanId));
-        }
-        if (this.vlanPriority != null) {
-            match.setField(MatchType.DL_VLAN_PR, Byte.parseByte(this.vlanPriority));
-        }
-        if (this.nwSrc != null) {
-            String parts[] = this.nwSrc.split("/");
-            InetAddress ip = NetUtils.parseInetAddress(parts[0]);
-            InetAddress mask = null;
-            int maskLen = 0;
-            if (parts.length > 1) {
-                maskLen = Integer.parseInt(parts[1]);
-            } else {
-                maskLen = (ip instanceof Inet6Address) ? 128 : 32;
-            }
-            mask = NetUtils.getInetNetworkMask(maskLen, ip instanceof Inet6Address);
-            match.setField(MatchType.NW_SRC, ip, mask);
-        }
-        if (this.nwDst != null) {
-            String parts[] = this.nwDst.split("/");
-            InetAddress ip = NetUtils.parseInetAddress(parts[0]);
-            InetAddress mask = null;
-            int maskLen = 0;
-            if (parts.length > 1) {
-                maskLen = Integer.parseInt(parts[1]);
-            } else {
-                maskLen = (ip instanceof Inet6Address) ? 128 : 32;
-            }
-            mask = NetUtils.getInetNetworkMask(maskLen, ip instanceof Inet6Address);
-            match.setField(MatchType.NW_DST, ip, mask);
-        }
-        if (IPProtocols.fromString(this.protocol) != IPProtocols.ANY) {
-            match.setField(MatchType.NW_PROTO, IPProtocols.getProtocolNumberByte(this.protocol));
-        }
-        if (this.tosBits != null) {
-            match.setField(MatchType.NW_TOS, Byte.parseByte(this.tosBits));
-        }
-        if (this.tpSrc != null) {
-            match.setField(MatchType.TP_SRC, Integer.valueOf(this.tpSrc).shortValue());
-        }
-        if (this.tpDst != null) {
-            match.setField(MatchType.TP_DST, Integer.valueOf(this.tpDst).shortValue());
-        }
-
-        Flow flow = new Flow(match, getActionList());
-
-        if (this.cookie != null) {
-            flow.setId(Long.parseLong(cookie));
-        }
-        if (this.hardTimeout != null) {
-            flow.setHardTimeout(Short.parseShort(this.hardTimeout));
-        }
-        if (this.idleTimeout != null) {
-            flow.setIdleTimeout(Short.parseShort(idleTimeout));
-        }
-        if (this.priority != null) {
-            flow.setPriority(Integer.decode(this.priority).shortValue());
-        }
-
-
-        return flow;
-    }
-
-    public boolean isByNameAndNodeIdEqual(FlowConfig that) {
-        return (this.name.equals(that.name) && this.node.equals(that.node));
-    }
-
-    public boolean isByNameAndNodeIdEqual(String name, Node node) {
-        return (this.name.equals(name) && this.node.equals(node));
-    }
-
-    public boolean onNode(Node node) {
-        return this.node.equals(node);
-    }
-
-    public void toggleInstallation() {
-        installInHw = (installInHw == null) ? Boolean.toString(false) : Boolean.toString(!Boolean.valueOf(installInHw));
-    }
-
-    /*
-     * Parses the actions string and return the List of SAL Action No syntax
-     * check run, as this function will be called when the config validation
-     * check has already been performed
-     */
-    private List<Action> getActionList() {
-        List<Action> actionList = new ArrayList<Action>();
-
-        if (actions != null) {
-            Matcher sstr;
-            for (String actiongrp : actions) {
-                sstr = Pattern.compile(ActionType.OUTPUT + "=(.*)").matcher(actiongrp);
-                if (sstr.matches()) {
-                    for (String t : sstr.group(1).split(",")) {
-                        if (t != null) {
-                            String nc = String.format("%s|%s@%s", node.getType(), t, node.toString());
-                            actionList.add(new Output(NodeConnector.fromString(nc)));
-                        }
-                    }
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.ENQUEUE + "=(.*)").matcher(actiongrp);
-                if (sstr.matches()) {
-                    for (String t : sstr.group(1).split(",")) {
-                        if (t != null) {
-                            String parts[] = t.split(":");
-                            String nc = String.format("%s|%s@%s", node.getType(), parts[0], node.toString());
-                            if (parts.length == 1) {
-                                actionList.add(new Enqueue(NodeConnector.fromString(nc)));
-                            } else {
-                                actionList
-                                .add(new Enqueue(NodeConnector.fromString(nc), Integer.parseInt(parts[1])));
-                            }
-                        }
-                    }
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.DROP.toString()).matcher(actiongrp);
-                if (sstr.matches()) {
-                    actionList.add(new Drop());
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.LOOPBACK.toString()).matcher(actiongrp);
-                if (sstr.matches()) {
-                    actionList.add(new Loopback());
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.FLOOD.toString()).matcher(actiongrp);
-                if (sstr.matches()) {
-                    actionList.add(new Flood());
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.FLOOD_ALL.toString()).matcher(actiongrp);
-                if (sstr.matches()) {
-                    actionList.add(new FloodAll());
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.SW_PATH.toString()).matcher(actiongrp);
-                if (sstr.matches()) {
-                    actionList.add(new SwPath());
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.HW_PATH.toString()).matcher(actiongrp);
-                if (sstr.matches()) {
-                    actionList.add(new HwPath());
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.CONTROLLER.toString()).matcher(actiongrp);
-                if (sstr.matches()) {
-                    actionList.add(new Controller());
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.SET_VLAN_ID.toString() + "=(.*)").matcher(actiongrp);
-                if (sstr.matches()) {
-                    actionList.add(new SetVlanId(Short.parseShort(sstr.group(1))));
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.SET_VLAN_PCP.toString() + "=(.*)").matcher(actiongrp);
-                if (sstr.matches()) {
-                    actionList.add(new SetVlanPcp(Byte.parseByte(sstr.group(1))));
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.POP_VLAN.toString()).matcher(actiongrp);
-                if (sstr.matches()) {
-                    actionList.add(new PopVlan());
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.SET_DL_SRC.toString() + "=(.*)").matcher(actiongrp);
-                if (sstr.matches()) {
-                    actionList.add(new SetDlSrc(HexEncode.bytesFromHexString(sstr.group(1))));
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.SET_DL_DST.toString() + "=(.*)").matcher(actiongrp);
-                if (sstr.matches()) {
-                    actionList.add(new SetDlDst(HexEncode.bytesFromHexString(sstr.group(1))));
-                    continue;
-                }
-                sstr = Pattern.compile(ActionType.SET_NW_SRC.toString() + "=(.*)").matcher(actiongrp);
-                if (sstr.matches()) {
-                    actionList.add(new SetNwSrc(NetUtils.parseInetAddress(sstr.group(1))));
-                    continue;
-                }
-                sstr = Pattern.compile(ActionType.SET_NW_DST.toString() + "=(.*)").matcher(actiongrp);
-                if (sstr.matches()) {
-                    actionList.add(new SetNwDst(NetUtils.parseInetAddress(sstr.group(1))));
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.SET_NW_TOS.toString() + "=(.*)").matcher(actiongrp);
-                if (sstr.matches()) {
-                    actionList.add(new SetNwTos(Byte.parseByte(sstr.group(1))));
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.SET_TP_SRC.toString() + "=(.*)").matcher(actiongrp);
-                if (sstr.matches()) {
-                    actionList.add(new SetTpSrc(Integer.valueOf(sstr.group(1))));
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.SET_TP_DST.toString() + "=(.*)").matcher(actiongrp);
-                if (sstr.matches()) {
-                    actionList.add(new SetTpDst(Integer.valueOf(sstr.group(1))));
-                    continue;
-                }
-
-                sstr = Pattern.compile(ActionType.SET_NEXT_HOP.toString() + "=(.*)").matcher(actiongrp);
-                if (sstr.matches()) {
-                    actionList.add(new SetNextHop(NetUtils.parseInetAddress(sstr.group(1))));
-                    continue;
-                }
-            }
-        }
-        return actionList;
-    }
-
-}