| /** |
| * 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.onrc.onos.core.linkdiscovery; |
| |
| import net.onrc.onos.core.linkdiscovery.ILinkDiscoveryService.LinkType; |
| |
| import com.google.common.primitives.Longs; |
| |
| /** |
| * Records information about a link. |
| */ |
| public final class LinkInfo { |
| |
| /** |
| * 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. |
| * |
| * Note the port state values are defined in the OF 1.0 spec. |
| * These will change in some way once we move to OF 1.3. |
| */ |
| private final int srcPortState; |
| private final int dstPortState; |
| |
| private final long firstSeenTime; |
| private final long lastLldpReceivedTime; |
| |
| /** |
| * Constructs a LinkInfo object. |
| * |
| * @param firstSeenTime the timestamp when the link was first seen |
| * @param lastLldpReceivedTime the timestamp when the link was last seen |
| * @param srcPortState the port state of the source port |
| * @param dstPortState the port state of the destination port |
| */ |
| public LinkInfo(long firstSeenTime, |
| long lastLldpReceivedTime, |
| int srcPortState, |
| int dstPortState) { |
| this.srcPortState = srcPortState; |
| this.dstPortState = dstPortState; |
| this.firstSeenTime = firstSeenTime; |
| this.lastLldpReceivedTime = lastLldpReceivedTime; |
| } |
| |
| /** |
| * Gets the timestamp when the link was first seen. |
| * |
| * @return the first seen timestamp |
| */ |
| public long getFirstSeenTime() { |
| return firstSeenTime; |
| } |
| |
| /** |
| * Gets the timestamp when the link was last seen. |
| * |
| * @return the last seen timestamp |
| */ |
| public long getLastProbeReceivedTime() { |
| return lastLldpReceivedTime; |
| } |
| |
| /** |
| * Gets the state of the source port. |
| * |
| * @return the source port state, as defined in the OF1.0 spec |
| */ |
| public int getSrcPortState() { |
| return srcPortState; |
| } |
| |
| /** |
| * Gets the state of the destination port. |
| * |
| * @return the destination port state, as defined in the OF1.0 spec |
| */ |
| public int getDstPortState() { |
| return dstPortState; |
| } |
| |
| /** |
| * Gets the link type. |
| * |
| * @return the link type |
| * @see LinkType |
| */ |
| public LinkType getLinkType() { |
| return LinkType.DIRECT_LINK; |
| } |
| |
| /* (non-Javadoc) |
| * @see java.lang.Object#hashCode() |
| */ |
| @Override |
| public int hashCode() { |
| final int prime = 5557; |
| int result = 1; |
| result = prime * result + Longs.hashCode(firstSeenTime); |
| result = prime * result + Longs.hashCode(lastLldpReceivedTime); |
| result = prime * result + srcPortState; |
| result = prime * result + dstPortState; |
| 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 instanceof LinkInfo)) { |
| return false; |
| } |
| |
| LinkInfo other = (LinkInfo) obj; |
| |
| return firstSeenTime == other.firstSeenTime && |
| lastLldpReceivedTime == other.lastLldpReceivedTime && |
| srcPortState == other.srcPortState && |
| dstPortState == other.dstPortState; |
| } |
| |
| |
| /* (non-Javadoc) |
| * @see java.lang.Object#toString() |
| */ |
| @Override |
| public String toString() { |
| return "LinkInfo [unicastValidTime=" + lastLldpReceivedTime |
| + ", srcPortState=" + srcPortState |
| + ", dstPortState=" + dstPortState |
| + "]"; |
| } |
| } |