package net.floodlightcontroller.topology;
import java.util.Date;
import java.util.List;
import java.util.Set;
import net.floodlightcontroller.core.module.IFloodlightService;
import net.floodlightcontroller.linkdiscovery.ILinkDiscovery.LDUpdate;
public interface ITopologyService extends IFloodlightService {
public void addListener(ITopologyListener listener);
public Date getLastUpdateTime();
/**
* Query to determine if devices must be learned on a given switch port.
*/
public boolean isAttachmentPointPort(long switchid, short port);
public boolean isAttachmentPointPort(long switchid, short port,
boolean tunnelEnabled);
public long getOpenflowDomainId(long switchId);
public long getOpenflowDomainId(long switchId, boolean tunnelEnabled);
/**
* Returns the identifier of the L2 domain of a given switch.
* @param switchId The DPID of the switch in long form
* @return The DPID of the switch that is the key for the cluster
*/
public long getL2DomainId(long switchId);
public long getL2DomainId(long switchId, boolean tunnelEnabled);
/**
* Queries whether two switches are in the same cluster.
* @param switch1
* @param switch2
* @return true if the switches are in the same cluster
*/
public boolean inSameOpenflowDomain(long switch1, long switch2);
public boolean inSameOpenflowDomain(long switch1, long switch2,
boolean tunnelEnabled);
/**
* Queries whether two switches are in the same island.
* Currently, island and cluster are the same. In future,
* islands could be different than clusters.
* @param switch1
* @param switch2
* @return True of they are in the same island, false otherwise
*/
public boolean inSameL2Domain(long switch1, long switch2);
public boolean inSameL2Domain(long switch1, long switch2,
boolean tunnelEnabled);
public boolean isBroadcastDomainPort(long sw, short port);
public boolean isBroadcastDomainPort(long sw, short port,
boolean tunnelEnabled);
public boolean isAllowed(long sw, short portId);
public boolean isAllowed(long sw, short portId, boolean tunnelEnabled);
/**
* Indicates if an attachment point on the new switch port is consistent
* with the attachment point on the old switch port or not.
*/
public boolean isConsistent(long oldSw, short oldPort,
long newSw, short newPort);
public boolean isConsistent(long oldSw, short oldPort,
long newSw, short newPort,
boolean tunnelEnabled);
/**
* Indicates if the two switch ports are connected to the same
* broadcast domain or not.
* @param s1
* @param p1
* @param s2
* @param p2
* @return
*/
public boolean isInSameBroadcastDomain(long s1, short p1,
long s2, short p2);
public boolean isInSameBroadcastDomain(long s1, short p1,
long s2, short p2,
boolean tunnelEnabled);
/**
* Gets a list of ports on a given switch that are known to topology.
* @param sw The switch DPID in long
* @return The set of ports on this switch
*/
public Set<Short> getPortsWithLinks(long sw);
public Set<Short> getPortsWithLinks(long sw, boolean tunnelEnabled);
/** Get broadcast ports on a target switch for a given attachmentpoint
* point port.
*/
public Set<Short> getBroadcastPorts(long targetSw, long src, short srcPort);
public Set<Short> getBroadcastPorts(long targetSw, long src, short srcPort,
boolean tunnelEnabled);
/**
*
*/
public boolean isIncomingBroadcastAllowed(long sw, short portId);
public boolean isIncomingBroadcastAllowed(long sw, short portId,
boolean tunnelEnabled);
/** Get the proper outgoing switchport for a given pair of src-dst
* switchports.
*/
public NodePortTuple getOutgoingSwitchPort(long src, short srcPort,
long dst, short dstPort);
public NodePortTuple getOutgoingSwitchPort(long src, short srcPort,
long dst, short dstPort,
boolean tunnelEnabled);
public NodePortTuple getIncomingSwitchPort(long src, short srcPort,
long dst, short dstPort);
public NodePortTuple getIncomingSwitchPort(long src, short srcPort,
long dst, short dstPort,
boolean tunnelEnabled);
/**
* If the dst is not allowed by the higher-level topology,
* this method provides the topologically equivalent broadcast port.
* @param src
* @param dst
* @return the allowed broadcast port
*/
public NodePortTuple
getAllowedOutgoingBroadcastPort(long src,
short srcPort,
long dst,
short dstPort);
public NodePortTuple
getAllowedOutgoingBroadcastPort(long src,
short srcPort,
long dst,
short dstPort,
boolean tunnelEnabled);
/**
* If the src broadcast domain port is not allowed for incoming
* broadcast, this method provides the topologically equivalent
* incoming broadcast-allowed
* src port.
* @param src
* @param dst
* @return the allowed broadcast port
*/
public NodePortTuple
getAllowedIncomingBroadcastPort(long src,
short srcPort);
public NodePortTuple
getAllowedIncomingBroadcastPort(long src,
short srcPort,
boolean tunnelEnabled);
/**
* Gets the set of ports that belong to a broadcast domain.
* @return The set of ports that belong to a broadcast domain.
*/
public Set<NodePortTuple> getBroadcastDomainPorts();
public Set<NodePortTuple> getTunnelPorts();
/**
* Returns a set of blocked ports. The set of blocked
* ports is the union of all the blocked ports across all
* instances.
* @return
*/
public Set<NodePortTuple> getBlockedPorts();
/**
* ITopologyListener provides topologyChanged notification,
* but not *what* the changes were.
* This method returns the delta in the linkUpdates between the current and the previous topology instance.
* @return
*/
public List<LDUpdate> getLastLinkUpdates();
/**
* Switch methods
*/
public Set<Short> getPorts(long sw);
}