| package net.onrc.onos.core.topology; |
| |
| import java.util.Collection; |
| |
| import net.onrc.onos.core.topology.web.serializers.SwitchSerializer; |
| import net.onrc.onos.core.util.Dpid; |
| import net.onrc.onos.core.util.PortNumber; |
| |
| import org.codehaus.jackson.map.annotate.JsonSerialize; |
| |
| // TOOD Everything returned by these interfaces must be either Unmodifiable view, |
| // immutable object, or a copy of the original "SB" In-memory Topology. |
| /** |
| * Interface of Switch object in the topology. |
| */ |
| @JsonSerialize(using = SwitchSerializer.class) |
| public interface Switch extends ITopologyElement, StringAttributes { |
| |
| /** |
| * Gets the data path ID (dpid) of this switch. |
| * |
| * @return data path ID (dpid) |
| */ |
| public Dpid getDpid(); |
| |
| /** |
| * Gets all the ports on this switch. |
| * |
| * @return Collection of {@link Port} on this switch. |
| */ |
| public Collection<Port> getPorts(); |
| |
| /** |
| * Gets a port on switch by port number. |
| * |
| * @param portNumber port number |
| * @return {@link Port} with {@code number} on this switch, or {@code null} |
| * if this switch did not have a port for specified port number |
| */ |
| public Port getPort(PortNumber portNumber); |
| |
| // Graph traversal API |
| |
| // XXX What is the Definition of neighbor? Link exist in both direction or |
| // one-way is sufficient to be a neighbor, etc. |
| /** |
| * Gets all the neighbor switches. |
| * |
| * @return neighbor switches |
| */ |
| public Iterable<Switch> getNeighbors(); |
| |
| /** |
| * Gets all the outgoing links. |
| * |
| * @return outgoing {@link Link}s from this switch. |
| */ |
| public Iterable<Link> getOutgoingLinks(); |
| |
| /** |
| * Gets all the incoming links. |
| * |
| * @return outgoing {@link Link}s from this switch. |
| */ |
| public Iterable<Link> getIncomingLinks(); |
| |
| /** |
| * Gets outgoing link to specified neighbor switch specified by dpid. |
| * |
| * @param dpid data path ID of neighbor switch. |
| * @return {@link Link} to neighbor switch {@code dpid} or {@code null} if |
| * link does not exist. |
| */ |
| public Link getLinkToNeighbor(Dpid dpid); |
| |
| /** |
| * Gets all the devices attached to this switch. |
| * |
| * @return {@link Host}s attached to this switch |
| */ |
| public Collection<Host> getHosts(); |
| |
| /** |
| * Returns the switch type of this switch. |
| * |
| * @return switch type {@link SwitchType} of this switch. |
| */ |
| public SwitchType getSwitchType(); |
| } |