X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflowplugin-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fopenflowplugin%2Fimpl%2Fconnection%2FConnectionManagerImpl.java;h=61d2424a9c2c8d4f5257a3904ce1a7ec33494b68;hb=1418a3290766faa650d02f151ae9600f1e86882c;hp=1cce64da358fe9875035def550f363ba5ea744de;hpb=8db91d16d89b2eb9039711d8268ffd93b1910b75;p=openflowplugin.git diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/connection/ConnectionManagerImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/connection/ConnectionManagerImpl.java index 1cce64da35..61d2424a9c 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/connection/ConnectionManagerImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/connection/ConnectionManagerImpl.java @@ -9,53 +9,55 @@ package org.opendaylight.openflowplugin.impl.connection; import java.net.InetAddress; -import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.ExecutorService; import org.opendaylight.openflowjava.protocol.api.connection.ConnectionAdapter; import org.opendaylight.openflowjava.protocol.api.connection.ConnectionReadyListener; +import org.opendaylight.openflowplugin.api.OFConstants; import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionContext; import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionManager; import org.opendaylight.openflowplugin.api.openflow.connection.HandshakeContext; import org.opendaylight.openflowplugin.api.openflow.device.handlers.DeviceConnectedHandler; -import org.opendaylight.openflowplugin.api.openflow.md.core.ConnectionConductor; +import org.opendaylight.openflowplugin.api.openflow.device.handlers.DeviceDisconnectedHandler; import org.opendaylight.openflowplugin.api.openflow.md.core.HandshakeListener; import org.opendaylight.openflowplugin.api.openflow.md.core.HandshakeManager; +import org.opendaylight.openflowplugin.impl.common.DeviceConnectionRateLimiter; import org.opendaylight.openflowplugin.impl.connection.listener.ConnectionReadyListenerImpl; import org.opendaylight.openflowplugin.impl.connection.listener.HandshakeListenerImpl; import org.opendaylight.openflowplugin.impl.connection.listener.OpenflowProtocolListenerInitialImpl; import org.opendaylight.openflowplugin.impl.connection.listener.SystemNotificationsListenerImpl; -import org.opendaylight.openflowplugin.openflow.md.core.ErrorHandlerSimpleImpl; -import org.opendaylight.openflowplugin.openflow.md.core.HandshakeManagerImpl; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OpenflowProtocolListener; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.system.rev130927.SystemNotificationsListener; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflow.provider.config.rev160510.OpenflowProviderConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -/** - * - */ public class ConnectionManagerImpl implements ConnectionManager { private static final Logger LOG = LoggerFactory.getLogger(ConnectionManagerImpl.class); private static final boolean BITMAP_NEGOTIATION_ENABLED = true; private DeviceConnectedHandler deviceConnectedHandler; - private final long echoReplyTimeout; - private final ThreadPoolExecutor threadPool; - - public ConnectionManagerImpl(long echoReplyTimeout, final ThreadPoolExecutor threadPool) { - this.echoReplyTimeout = echoReplyTimeout; - this.threadPool = threadPool; + private final OpenflowProviderConfig config; + private final ExecutorService executorService; + private final DeviceConnectionRateLimiter deviceConnectionRateLimiter; + private DeviceDisconnectedHandler deviceDisconnectedHandler; + + public ConnectionManagerImpl(final OpenflowProviderConfig config, final ExecutorService executorService) { + this.config = config; + this.executorService = executorService; + this.deviceConnectionRateLimiter = new DeviceConnectionRateLimiter(config); } @Override public void onSwitchConnected(final ConnectionAdapter connectionAdapter) { LOG.trace("prepare connection context"); final ConnectionContext connectionContext = new ConnectionContextImpl(connectionAdapter); + connectionContext.setDeviceDisconnectedHandler(this.deviceDisconnectedHandler); HandshakeListener handshakeListener = new HandshakeListenerImpl(connectionContext, deviceConnectedHandler); final HandshakeManager handshakeManager = createHandshakeManager(connectionAdapter, handshakeListener); LOG.trace("prepare handshake context"); - HandshakeContext handshakeContext = new HandshakeContextImpl(threadPool, handshakeManager); + HandshakeContext handshakeContext = new HandshakeContextImpl(executorService, handshakeManager); handshakeListener.setHandshakeContext(handshakeContext); connectionContext.setHandshakeContext(handshakeContext); @@ -68,25 +70,19 @@ public class ConnectionManagerImpl implements ConnectionManager { new OpenflowProtocolListenerInitialImpl(connectionContext, handshakeContext); connectionAdapter.setMessageListener(ofMessageListener); - final SystemNotificationsListener systemListener = new SystemNotificationsListenerImpl(connectionContext, echoReplyTimeout, threadPool); + final SystemNotificationsListener systemListener = new SystemNotificationsListenerImpl( + connectionContext, config.getEchoReplyTimeout().getValue(), executorService); connectionAdapter.setSystemListener(systemListener); LOG.trace("connection ballet finished"); } - /** - * @param connectionAdapter - * @param handshakeListener - * @return - */ private HandshakeManager createHandshakeManager(final ConnectionAdapter connectionAdapter, final HandshakeListener handshakeListener) { HandshakeManagerImpl handshakeManager = new HandshakeManagerImpl(connectionAdapter, - ConnectionConductor.versionOrder.get(0), - ConnectionConductor.versionOrder); - handshakeManager.setUseVersionBitmap(BITMAP_NEGOTIATION_ENABLED); - handshakeManager.setHandshakeListener(handshakeListener); - handshakeManager.setErrorHandler(new ErrorHandlerSimpleImpl()); + OFConstants.VERSION_ORDER.get(0), + OFConstants.VERSION_ORDER, new ErrorHandlerSimpleImpl(), handshakeListener, BITMAP_NEGOTIATION_ENABLED, + deviceConnectionRateLimiter); return handshakeManager; } @@ -101,4 +97,9 @@ public class ConnectionManagerImpl implements ConnectionManager { public void setDeviceConnectedHandler(final DeviceConnectedHandler deviceConnectedHandler) { this.deviceConnectedHandler = deviceConnectedHandler; } + + @Override + public void setDeviceDisconnectedHandler(final DeviceDisconnectedHandler deviceDisconnectedHandler) { + this.deviceDisconnectedHandler = deviceDisconnectedHandler; + } }