X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fsal%2Fapi%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fmatch%2FMatch.java;h=4dcf2b3c3764790e3aab70da16512573b8c3975a;hb=84ca16196357ad899e00eceae27ef75eaf899d14;hp=736314caedc2cb535a9e8160e3d056789e2d67c5;hpb=cffdfafd2b23b24025f5ba4b32f16bca501bfeb5;p=controller.git diff --git a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/match/Match.java b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/match/Match.java index 736314caed..4dcf2b3c37 100644 --- a/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/match/Match.java +++ b/opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/match/Match.java @@ -26,8 +26,6 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; -import org.apache.commons.lang3.builder.EqualsBuilder; -import org.apache.commons.lang3.builder.HashCodeBuilder; import org.opendaylight.controller.sal.utils.EtherTypes; import org.opendaylight.controller.sal.utils.IPProtocols; import org.opendaylight.controller.sal.utils.NetUtils; @@ -40,8 +38,8 @@ import org.opendaylight.controller.sal.utils.NetUtils; @XmlRootElement @XmlAccessorType(XmlAccessType.NONE) public class Match implements Cloneable, Serializable { - private static final long serialVersionUID = 1L; - private static final Map reversableMatches; + private static final long serialVersionUID = 1L; + private static final Map reversableMatches; static { Map map = new HashMap(); map.put(MatchType.DL_SRC, MatchType.DL_DST); @@ -69,9 +67,9 @@ public class Match implements Cloneable, Serializable { * Generic setter for frame/packet/message's header fields against which to match * Note: For MAC addresses, please pass the cloned value to this function * - * @param type packet's header field type - * @param value field's value to assign to the match - * @param mask field's bitmask to apply to the match (has to be of the same class type of value) + * @param type packet's header field type + * @param value field's value to assign to the match + * @param mask field's bitmask to apply to the match (has to be of the same class type of value) */ public void setField(MatchType type, Object value, Object mask) { MatchField field = new MatchField(type, value, mask); @@ -85,8 +83,8 @@ public class Match implements Cloneable, Serializable { * Generic setter for frame/packet/message's header fields against which to match * Note: For MAC addresses, please pass the cloned value to this function * - * @param type packet's header field type - * @param value field's value to assign to the match + * @param type packet's header field type + * @param value field's value to assign to the match */ public void setField(MatchType type, Object value) { MatchField field = new MatchField(type, value); @@ -119,7 +117,7 @@ public class Match implements Cloneable, Serializable { /** * Generic getter for fields against which the match is programmed * - * @param type frame/packet/message's header field type + * @param type frame/packet/message's header field type * @return */ public MatchField getField(MatchType type) { @@ -139,7 +137,7 @@ public class Match implements Cloneable, Serializable { /** * Returns the list of MatchType fields the match is set for * - * @return List of individual MatchType fields. + * @return List of individual MatchType fields. */ public List getMatchesList() { return new ArrayList(fields.keySet()); @@ -148,13 +146,13 @@ public class Match implements Cloneable, Serializable { /** * Returns the list of MatchFields the match is set for * - * @return List of individual MatchField values. + * @return List of individual MatchField values. */ @XmlElement(name="matchField") public List getMatchFields() { - return new ArrayList(fields.values()); + return new ArrayList(fields.values()); } - + /** * Returns whether this match is for an IPv6 flow */ @@ -227,13 +225,14 @@ public class Match implements Cloneable, Serializable { Match reverse = this.clone(); // Flip symmetric fields - for (Map.Entry entry : Match.reversableMatches - .entrySet()) { + for (Map.Entry entry : Match.reversableMatches.entrySet()) { MatchType from = entry.getKey(); MatchType to = entry.getValue(); if (this.isPresent(from)) { - reverse.setField(to, this.getField(from).getValue(), this - .getField(from).getMask()); + reverse.setField(to, this.getField(from).getValue(), this.getField(from).getMask()); + if (!this.isPresent(to)) { + reverse.clearField(from); + } } } @@ -293,10 +292,8 @@ public class Match implements Cloneable, Serializable { && filterAddress instanceof Inet4Address) { return true; } - InetAddress thisMask = (InetAddress) filter.getField(type) - .getMask(); - InetAddress filterMask = (InetAddress) filter.getField(type) - .getMask(); + InetAddress thisMask = (InetAddress) thisField.getMask(); + InetAddress filterMask = (InetAddress) filterField.getMask(); // thisAddress has to be in same subnet of filterAddress if (NetUtils.inetAddressConflict(thisAddress, filterAddress, thisMask, filterMask)) { @@ -339,12 +336,30 @@ public class Match implements Cloneable, Serializable { @Override public int hashCode() { - return HashCodeBuilder.reflectionHashCode(this); + final int prime = 31; + int result = 1; + result = prime * result + ((fields == null) ? 0 : fields.hashCode()); + result = prime * result + matches; + return result; } @Override public boolean equals(Object obj) { - return EqualsBuilder.reflectionEquals(this, obj); + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Match other = (Match) obj; + if (fields == null) { + if (other.fields != null) + return false; + } else if (!fields.equals(other.fields)) + return false; + if (matches != other.matches) + return false; + return true; } @Override