package net.floodlightcontroller.topology; import net.floodlightcontroller.core.web.serializers.DPIDSerializer; import net.floodlightcontroller.core.web.serializers.UShortSerializer; import org.codehaus.jackson.annotate.JsonProperty; import org.codehaus.jackson.map.annotate.JsonSerialize; import org.openflow.util.HexString; /** * A NodePortTuple is similar to a SwitchPortTuple * but it only stores IDs instead of references * to the actual objects. * @author srini */ public class NodePortTuple { protected long nodeId; // switch DPID protected short portId; // switch port id /** * Creates a NodePortTuple * @param nodeId The DPID of the switch * @param portId The port of the switch */ public NodePortTuple(long nodeId, short portId) { this.nodeId = nodeId; this.portId = portId; } public NodePortTuple(long nodeId, int portId) { this.nodeId = nodeId; this.portId = (short) portId; } @JsonProperty("switch") @JsonSerialize(using=DPIDSerializer.class) public long getNodeId() { return nodeId; } public void setNodeId(long nodeId) { this.nodeId = nodeId; } @JsonProperty("port") @JsonSerialize(using=UShortSerializer.class) public short getPortId() { return portId; } public void setPortId(short portId) { this.portId = portId; } public String toString() { return "[id=" + HexString.toHexString(nodeId) + ", port=" + new Short(portId) + "]"; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + (int) (nodeId ^ (nodeId >>> 32)); result = prime * result + portId; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; NodePortTuple other = (NodePortTuple) obj; if (nodeId != other.nodeId) return false; if (portId != other.portId) return false; return true; } /** * API to return a String value formed wtih NodeID and PortID * The portID is a 16-bit field, so mask it as an integer to get full * positive value * @return */ public String toKeyString() { return (HexString.toHexString(nodeId)+ "|" + (portId & 0xffff)); } }