/** * Copyright 2011, Big Switch Networks, Inc.* Originally created by David Erickson, Stanford University ** Licensed under the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. You may obtain * a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. **/ package net.floodlightcontroller.linkdiscovery; import net.floodlightcontroller.linkdiscovery.ILinkDiscovery.LinkType; import org.openflow.protocol.OFPhysicalPort.OFPortState; public class LinkInfo { public LinkInfo(Long firstSeenTime, Long lastLldpReceivedTime, Long lastBddpReceivedTime, int srcPortState, int dstPortState) { super(); this.srcPortState = srcPortState; this.dstPortState = dstPortState; this.firstSeenTime = firstSeenTime; this.lastLldpReceivedTime = lastLldpReceivedTime; this.lastBddpReceivedTime = lastBddpReceivedTime; } protected Integer srcPortState; protected Integer dstPortState; protected Long firstSeenTime; protected Long lastLldpReceivedTime; /* Standard LLLDP received time */ protected Long lastBddpReceivedTime; /* Modified LLDP received time */ /** The port states stored here are topology's last knowledge of * the state of the port. This mostly mirrors the state * maintained in the port list in IOFSwitch (i.e. the one returned * from getPort), except that during a port status message the * IOFSwitch port state will already have been updated with the * new port state, so topology needs to keep its own copy so that * it can determine if the port state has changed and therefore * requires the new state to be written to storage. */ public boolean linkStpBlocked() { return ((srcPortState & OFPortState.OFPPS_STP_MASK.getValue()) == OFPortState.OFPPS_STP_BLOCK.getValue()) || ((dstPortState & OFPortState.OFPPS_STP_MASK.getValue()) == OFPortState.OFPPS_STP_BLOCK.getValue()); } public Long getFirstSeenTime() { return firstSeenTime; } public void setFirstSeenTime(Long firstSeenTime) { this.firstSeenTime = firstSeenTime; } public Long getUnicastValidTime() { return lastLldpReceivedTime; } public void setUnicastValidTime(Long unicastValidTime) { this.lastLldpReceivedTime = unicastValidTime; } public Long getMulticastValidTime() { return lastBddpReceivedTime; } public void setMulticastValidTime(Long multicastValidTime) { this.lastBddpReceivedTime = multicastValidTime; } public Integer getSrcPortState() { return srcPortState; } public void setSrcPortState(Integer srcPortState) { this.srcPortState = srcPortState; } public Integer getDstPortState() { return dstPortState; } public void setDstPortState(int dstPortState) { this.dstPortState = dstPortState; } public LinkType getLinkType() { if (lastLldpReceivedTime != null) { return LinkType.DIRECT_LINK; } else if (lastBddpReceivedTime != null) { return LinkType.MULTIHOP_LINK; } return LinkType.INVALID_LINK; } /* (non-Javadoc) * @see java.lang.Object#hashCode() */ @Override public int hashCode() { final int prime = 5557; int result = 1; result = prime * result + ((firstSeenTime == null) ? 0 : firstSeenTime.hashCode()); result = prime * result + ((lastLldpReceivedTime == null) ? 0 : lastLldpReceivedTime.hashCode()); result = prime * result + ((lastBddpReceivedTime == null) ? 0 : lastBddpReceivedTime.hashCode()); result = prime * result + ((srcPortState == null) ? 0 : srcPortState.hashCode()); result = prime * result + ((dstPortState == null) ? 0 : dstPortState.hashCode()); return result; } /* (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (!(obj instanceof LinkInfo)) return false; LinkInfo other = (LinkInfo) obj; if (firstSeenTime == null) { if (other.firstSeenTime != null) return false; } else if (!firstSeenTime.equals(other.firstSeenTime)) return false; if (lastLldpReceivedTime == null) { if (other.lastLldpReceivedTime != null) return false; } else if (!lastLldpReceivedTime.equals(other.lastLldpReceivedTime)) return false; if (lastBddpReceivedTime == null) { if (other.lastBddpReceivedTime != null) return false; } else if (!lastBddpReceivedTime.equals(other.lastBddpReceivedTime)) return false; if (srcPortState == null) { if (other.srcPortState != null) return false; } else if (!srcPortState.equals(other.srcPortState)) return false; if (dstPortState == null) { if (other.dstPortState != null) return false; } else if (!dstPortState.equals(other.dstPortState)) return false; return true; } /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { return "LinkInfo [unicastValidTime=" + ((lastLldpReceivedTime == null) ? "null" : lastLldpReceivedTime) + ", multicastValidTime=" + ((lastBddpReceivedTime == null) ? "null" : lastBddpReceivedTime) + ", srcPortState=" + ((srcPortState == null) ? "null" : srcPortState) + ", dstPortState=" + ((dstPortState == null) ? "null" : srcPortState) + "]"; } }