/**
* Copyright 2011,2012 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.
**/
/**
* @author Srini
*/
package net.floodlightcontroller.devicemanager.internal;
import java.util.Date;
import org.projectfloodlight.openflow.types.DatapathId;
import org.projectfloodlight.openflow.types.OFPort;
public class AttachmentPoint {
DatapathId sw;
OFPort port;
Date activeSince;
Date lastSeen;
// Timeout for moving attachment points from OF/broadcast
// domain to another.
public static final long INACTIVITY_INTERVAL = 30000; // 30 seconds
public static final long EXTERNAL_TO_EXTERNAL_TIMEOUT = 5000; // 5 seconds
public static final long OPENFLOW_TO_EXTERNAL_TIMEOUT = 30000; // 30 seconds
public static final long CONSISTENT_TIMEOUT = 30000; // 30 seconds
public AttachmentPoint(DatapathId sw, OFPort port, Date activeSince, Date lastSeen) {
this.sw = sw;
this.port = port;
this.activeSince = activeSince;
this.lastSeen = lastSeen;
}
public AttachmentPoint(DatapathId sw, OFPort port, Date lastSeen) {
this.sw = sw;
this.port = port;
this.lastSeen = lastSeen;
this.activeSince = lastSeen;
}
public AttachmentPoint(AttachmentPoint ap) {
this.sw = ap.getSw();
this.port = ap.port;
this.activeSince = ap.activeSince;
this.lastSeen = ap.lastSeen;
}
public DatapathId getSw() {
return sw;
}
public void setSw(DatapathId sw) {
this.sw = sw;
}
public OFPort getPort() {
return port;
}
public void setPort(OFPort port) {
this.port = port;
}
public Date getActiveSince() {
return activeSince;
}
public void setActiveSince(Date activeSince) {
this.activeSince = activeSince;
}
public Date getLastSeen() {
return lastSeen;
}
public void setLastSeen(Date lastSeen) {
if (this.lastSeen.getTime() + INACTIVITY_INTERVAL < lastSeen.getTime())
this.activeSince = lastSeen;
if (this.lastSeen.before(lastSeen))
this.lastSeen = lastSeen;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((port == null) ? 0 : port.hashCode());
result = prime * result + ((sw == null) ? 0 : sw.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;
AttachmentPoint other = (AttachmentPoint) obj;
if (port == null) {
if (other.port != null)
return false;
} else if (!port.equals(other.port))
return false;
if (sw == null) {
if (other.sw != null)
return false;
} else if (!sw.equals(other.sw))
return false;
return true;
}
@Override
public String toString() {
return "AttachmentPoint [sw=" + sw + ", port=" + port
+ ", activeSince=" + activeSince + ", lastSeen=" + lastSeen.toString()
+ "]";
}
}