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=3507dd1eddea324b27a6c44df089c5d9a1e50fe0;hb=13e1d5e6c0237b9378d60526dd8c1d79db6d2b49;hp=1cce64da358fe9875035def550f363ba5ea744de;hpb=7fa33fd58abd5d38788581d9207e972dfd3eb592;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..3507dd1edd 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 @@ -1,61 +1,62 @@ -/** +/* * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - 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 +69,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().toJava(), 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 +96,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; + } }