package net.floodlightcontroller.core.internal;
import java.net.SocketAddress;
import java.util.Collection;
import java.util.List;
import java.util.Date;
import net.floodlightcontroller.core.IOFConnectionBackend;
import net.floodlightcontroller.core.IOFMessageWriter;
import net.floodlightcontroller.core.SwitchDisconnectedException;
import net.floodlightcontroller.util.IterableUtils;
import org.projectfloodlight.openflow.protocol.OFFactories;
import org.projectfloodlight.openflow.protocol.OFFactory;
import org.projectfloodlight.openflow.protocol.OFMessage;
import org.projectfloodlight.openflow.protocol.OFRequest;
import org.projectfloodlight.openflow.protocol.OFStatsReply;
import org.projectfloodlight.openflow.protocol.OFStatsRequest;
import org.projectfloodlight.openflow.protocol.OFVersion;
import org.projectfloodlight.openflow.types.DatapathId;
import org.projectfloodlight.openflow.types.OFAuxId;
import org.projectfloodlight.openflow.types.U64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
public class NullConnection implements IOFConnectionBackend, IOFMessageWriter {
private static final Logger logger = LoggerFactory.getLogger(NullConnection.class);
@Override
public boolean isConnected() {
return false;
}
@Override
public Date getConnectedSince() {
return null;
}
private void warn() {
logger.debug("Switch {} not connected -- cannot send message", getDatapathId());
}
@Override
public boolean write(OFMessage m) {
warn();
return false;
}
@Override
public Collection<OFMessage> write(Iterable<OFMessage> msgList) {
warn();
return IterableUtils.toCollection(msgList);
}
@Override
public SocketAddress getRemoteInetAddress() {
return null;
}
@Override
public SocketAddress getLocalInetAddress() {
return null;
}
@Override
public OFFactory getOFFactory() {
return OFFactories.getFactory(OFVersion.OF_13);
}
@Override
public <REPLY extends OFStatsReply> ListenableFuture<List<REPLY>> writeStatsRequest(
OFStatsRequest<REPLY> request) {
return Futures.immediateFailedFuture(new SwitchDisconnectedException(getDatapathId()));
}
@Override
public void cancelAllPendingRequests() {
// noop
}
@Override
public <R extends OFMessage> ListenableFuture<R> writeRequest(OFRequest<R> request) {
return Futures.immediateFailedFuture(new SwitchDisconnectedException(getDatapathId()));
}
@Override
public void disconnect(){
// noop
}
public void disconnected() {
// noop
}
@Override
public boolean isWritable() {
return false;
}
@Override
public DatapathId getDatapathId() {
return DatapathId.NONE;
}
@Override
public OFAuxId getAuxId() {
return OFAuxId.MAIN;
}
@Override
public void setListener(IOFConnectionListener listener) {
}
@Override
public U64 getLatency() {
return U64.ZERO;
}
@Override
public void updateLatency(U64 latency) {
// noop
}
}