X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fforwardingrulesmanager%2Fapi%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fforwardingrulesmanager%2FFlowEntryInstall.java;h=1318c97ce22e40016fb113a4d1c46d524eba7c1b;hp=18255bc021aeffbc4ee5b887d98b19065dd9d08a;hb=33446bc3f844db6d0f4763d7c3080499c6d6543f;hpb=e3e571dbfd9bb37364502101d482b7796d6b5cea diff --git a/opendaylight/forwardingrulesmanager/api/src/main/java/org/opendaylight/controller/forwardingrulesmanager/FlowEntryInstall.java b/opendaylight/forwardingrulesmanager/api/src/main/java/org/opendaylight/controller/forwardingrulesmanager/FlowEntryInstall.java index 18255bc021..1318c97ce2 100644 --- a/opendaylight/forwardingrulesmanager/api/src/main/java/org/opendaylight/controller/forwardingrulesmanager/FlowEntryInstall.java +++ b/opendaylight/forwardingrulesmanager/api/src/main/java/org/opendaylight/controller/forwardingrulesmanager/FlowEntryInstall.java @@ -8,6 +8,8 @@ package org.opendaylight.controller.forwardingrulesmanager; +import java.io.Serializable; + import org.opendaylight.controller.sal.core.ContainerFlow; import org.opendaylight.controller.sal.core.Node; @@ -17,62 +19,57 @@ import org.opendaylight.controller.sal.core.Node; * install, the container flow with which that entry had to be merged and the * resultant merged flow entry, which is the one that was eventually installed * on the network node - * + * * Note: If the container flow is null, the install entry will be a clone of the * original entry - * */ -public class FlowEntryInstall { - private FlowEntry original; - private ContainerFlow cFlow; - private FlowEntry install; - transient private long requestId; // async request id - transient private boolean deletePending; +public class FlowEntryInstall implements Serializable { + private static final long serialVersionUID = 1L; + private final FlowEntry original; + private final ContainerFlow cFlow; + private final FlowEntry install; + private transient long requestId; // async request id + private transient boolean deletePending; public FlowEntryInstall(FlowEntry original, ContainerFlow cFlow) { this.original = original; this.cFlow = cFlow; - this.install = (cFlow == null) ? original.clone() : original - .mergeWith(cFlow); + this.install = (cFlow == null) ? original.clone() : original.clone().mergeWith(cFlow); deletePending = false; requestId = 0; } + /* + * Given FlowEntryInstall is used as key for FRM map which contains the + * software view of installed entries, having its hashcode tied to the one + * of the installed FlowEntry which takes into account the fields which + * uniquely identify a flow from switch point of view: node, match and + * priority. + */ @Override public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((cFlow == null) ? 0 : cFlow.hashCode()); - result = prime * result + ((install == null) ? 0 : install.hashCode()); - result = prime * result - + ((original == null) ? 0 : original.hashCode()); - return result; + return install.hashCode(); } @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } FlowEntryInstall other = (FlowEntryInstall) obj; - if (cFlow == null) { - if (other.cFlow != null) - return false; - } else if (!cFlow.equals(other.cFlow)) - return false; if (install == null) { - if (other.install != null) + if (other.install != null) { return false; - } else if (!install.equals(other.install)) - return false; - if (original == null) { - if (other.original != null) - return false; - } else if (!original.equals(other.original)) + } + } else if (!install.equals(other.install)) { return false; + } return true; } @@ -115,14 +112,23 @@ public class FlowEntryInstall { public void setRequestId(long rid) { this.requestId = rid; } - + public long getRequestId() { return requestId; } + /** + * Returns whether this entry is the result of an internal generated static + * flow + * + * @return true if internal generated static flow, false otherwise + */ + public boolean isInternal() { + return original.isInternal(); + } + @Override public String toString() { - return "[Install = " + install + " Original = " + original + " cFlow = " - + cFlow + " rid = " + requestId + "]"; + return "[Install = " + install + " Original = " + original + " cFlow = " + cFlow + " rid = " + requestId + "]"; } }