blob: 1df7eb5694ec98429027903142767c4caf4a2dd6 [file] [log] [blame]
package net.floodlightcontroller.linkdiscovery;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import org.codehaus.jackson.map.ser.std.ToStringSerializer;
import org.openflow.util.HexString;
public interface ILinkDiscovery {
@JsonSerialize(using=ToStringSerializer.class)
public enum UpdateOperation {
LINK_ADDED("Link Added"),
LINK_UPDATED("Link Updated"),
LINK_REMOVED("Link Removed"),
SWITCH_UPDATED("Switch Updated"),
SWITCH_REMOVED("Switch Removed"),
PORT_UP("Port Up"),
PORT_DOWN("Port Down");
private String value;
UpdateOperation(String v) {
value = v;
}
@Override
public String toString() {
return value;
}
}
public class LDUpdate {
protected long src;
protected short srcPort;
protected long dst;
protected short dstPort;
protected SwitchType srcType;
protected LinkType type;
protected UpdateOperation operation;
public LDUpdate(long src, short srcPort,
long dst, short dstPort,
ILinkDiscovery.LinkType type,
UpdateOperation operation) {
this.src = src;
this.srcPort = srcPort;
this.dst = dst;
this.dstPort = dstPort;
this.type = type;
this.operation = operation;
}
public LDUpdate(LDUpdate old) {
this.src = old.src;
this.srcPort = old.srcPort;
this.dst = old.dst;
this.dstPort = old.dstPort;
this.srcType = old.srcType;
this.type = old.type;
this.operation = old.operation;
}
// For updtedSwitch(sw)
public LDUpdate(long switchId, SwitchType stype, UpdateOperation oper ){
this.operation = oper;
this.src = switchId;
this.srcType = stype;
}
// For port up or port down.
public LDUpdate(long sw, short port, UpdateOperation operation) {
this.src = sw;
this.srcPort = port;
this.operation = operation;
}
public long getSrc() {
return src;
}
public short getSrcPort() {
return srcPort;
}
public long getDst() {
return dst;
}
public short getDstPort() {
return dstPort;
}
public SwitchType getSrcType() {
return srcType;
}
public LinkType getType() {
return type;
}
public UpdateOperation getOperation() {
return operation;
}
public void setOperation(UpdateOperation operation) {
this.operation = operation;
}
@Override
public String toString() {
switch (operation) {
case LINK_REMOVED:
case LINK_UPDATED:
return "LDUpdate [operation=" + operation +
", src=" + HexString.toHexString(src)
+ ", srcPort=" + srcPort
+ ", dst=" + HexString.toHexString(dst)
+ ", dstPort=" + dstPort
+ ", type=" + type + "]";
case PORT_DOWN:
case PORT_UP:
return "LDUpdate [operation=" + operation +
", src=" + HexString.toHexString(src)
+ ", srcPort=" + srcPort + "]";
case SWITCH_REMOVED:
case SWITCH_UPDATED:
return "LDUpdate [operation=" + operation +
", src=" + HexString.toHexString(src) + "]";
default:
return "LDUpdate: Unknown update.";
}
}
}
public enum SwitchType {
BASIC_SWITCH, CORE_SWITCH
};
public enum LinkType {
INVALID_LINK {
@Override
public String toString() {
return "invalid";
}
},
DIRECT_LINK{
@Override
public String toString() {
return "internal";
}
},
MULTIHOP_LINK {
@Override
public String toString() {
return "external";
}
},
TUNNEL {
@Override
public String toString() {
return "tunnel";
}
}
};
}