All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opendaylight.openflowplugin.api.openflow.connection.ConnectionContext Maven / Gradle / Ivy

The newest version!
/*
 * 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.api.openflow.connection;

import java.util.List;
import org.opendaylight.openflowjava.protocol.api.connection.ConnectionAdapter;
import org.opendaylight.openflowjava.protocol.api.connection.OutboundQueue;
import org.opendaylight.openflowjava.protocol.api.connection.OutboundQueueHandlerRegistration;
import org.opendaylight.openflowplugin.api.openflow.device.DeviceInfo;
import org.opendaylight.openflowplugin.api.openflow.device.handlers.DeviceDisconnectedHandler;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FeaturesReply;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortStatusMessage;

/**
 * 

* Each OpenFlow session is tracked by a Connection Context. These attach to a particular Device Context in such a way, * that there is at most one primary session associated with a Device Context. *

*/ public interface ConnectionContext { /** * Setter. * @param handshakeContext corresponding handshake context used upon this connection */ void setHandshakeContext(HandshakeContext handshakeContext); /** * Distinguished connection states. */ @SuppressWarnings({"checkstyle:abbreviationaswordinname","checkstyle:typename"}) enum CONNECTION_STATE { /** * initial phase of talking to switch. */ HANDSHAKING, /** * standard phase - interacting with switch. */ WORKING, /** * connection is idle, waiting for echo reply from switch. */ TIMEOUTING, /** * talking to switch is over - resting in pieces. */ RIP } /** * Setter for nodeId. * @param nodeId node id */ void setNodeId(NodeId nodeId); /** * Method returns identifier of device whic connection represents this context. * @return {@link org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId} */ NodeId getNodeId(); /** * Returns connection adapter. * @return the connectionAdapter */ ConnectionAdapter getConnectionAdapter(); /** * Returns reference to OFJava outbound queue provider. Outbound queue is used for outbound messages processing. * @return {@link OutboundQueueProvider} */ OutboundQueue getOutboundQueueProvider(); /** * Method sets reference to OFJava outbound queue provider. * @param outboundQueueProvider {@link OutboundQueueProvider} */ void setOutboundQueueProvider(OutboundQueueProvider outboundQueueProvider); /** * Method returns current connection state. * @return {@link ConnectionContext.CONNECTION_STATE} */ CONNECTION_STATE getConnectionState(); /** * Setter. * @param featuresReply as received from device during handshake */ void setFeatures(FeaturesReply featuresReply); /** * Getter. * @return featureReply as received from device during handshake */ FeaturesReply getFeatures(); /** * Method sets handler for handling closing connections. * @param deviceDisconnectedHandler handler for disconnect */ void setDeviceDisconnectedHandler( DeviceDisconnectedHandler deviceDisconnectedHandler); String getSafeNodeIdForLOG(); void setOutboundQueueHandleRegistration( OutboundQueueHandlerRegistration outboundQueueHandlerRegistration); /** * actively drop associated connection. * @param propagate true if event need to be propagated to higher contexts (device, stats, rpc..) * or false if invoked from higher context * @see ConnectionAdapter#disconnect() */ void closeConnection(boolean propagate); /** * cleanup context upon connection closed event (by device). */ void onConnectionClosed(); /** * change internal state to {@link ConnectionContext.CONNECTION_STATE#HANDSHAKING}. */ void changeStateToHandshaking(); /** * change internal state to {@link ConnectionContext.CONNECTION_STATE#TIMEOUTING}. */ void changeStateToTimeouting(); /** * change internal state to {@link ConnectionContext.CONNECTION_STATE#WORKING}. */ void changeStateToWorking(); /** * Create and return basic device info. * @return created device info */ DeviceInfo getDeviceInfo(); /** * This method creates a basic device information. * Should be called after nodeId and features are set in connection context. */ void handshakeSuccessful(); /** * Handle received port status message. * @param portStatusMessage port status message */ void handlePortStatusMessage(PortStatusMessage portStatusMessage); List retrieveAndClearPortStatusMessages(); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy