* 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.device;
-import com.google.common.util.concurrent.ListenableFuture;
-import io.netty.util.Timeout;
-import java.math.BigInteger;
import java.util.List;
-import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
+import org.opendaylight.mdsal.binding.api.NotificationPublishService;
import org.opendaylight.openflowplugin.api.openflow.OFPContext;
import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionContext;
import org.opendaylight.openflowplugin.api.openflow.device.handlers.DeviceReplyProcessor;
import org.opendaylight.openflowplugin.api.openflow.device.handlers.MultiMsgCollector;
-import org.opendaylight.openflowplugin.api.openflow.registry.ItemLifeCycleRegistry;
+import org.opendaylight.openflowplugin.api.openflow.lifecycle.ContextChainStateListener;
import org.opendaylight.openflowplugin.api.openflow.statistics.ofpspecific.MessageSpy;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
/**
- * <p>
* The central entity of OFP is the Device Context, which encapsulate the logical state of a switch
* as seen by the controller. 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
* which is enforced by keeping a cap on the number of outstanding requests a particular Request
* Context can have at any point in time. Should this quota be exceeded, any further attempt to make
* a request to the switch will fail immediately, with proper error indication.
- * </p>
*/
-public interface DeviceContext extends AutoCloseable,
+public interface DeviceContext extends
+ OFPContext,
DeviceReplyProcessor,
TxFacade,
- XidSequencer,
- OFPContext,
- DeviceRegistry{
-
- /**
- * Method close all auxiliary connections and primary connection.
- */
- void shutdownConnection();
-
- /**
- * Method add auxiliary connection contexts to this context representing single device connection.
- *
- * @param connectionContext
- */
- void addAuxiliaryConnectionContext(ConnectionContext connectionContext);
-
- /**
- * Method removes auxiliary connection context from this context representing single device connection.
- *
- * @param connectionContext
- */
- void removeAuxiliaryConnectionContext(ConnectionContext connectionContext);
+ DeviceRegistry,
+ RequestContextStack,
+ ContextChainStateListener {
/**
* Method provides state of device represented by this device context.
*/
DeviceState getDeviceState();
- DeviceInfo getDeviceInfo();
-
- /**
- * Method has to close TxManager ASAP we are notified about Closed Connection
- * @return sync. future for Slave and MD-SAL completition for Master
- */
- ListenableFuture<Void> shuttingDownDataStoreTransactions();
-
/**
- * Method provides current devices connection context.
+ * Getter.
*
- * @return
+ * @return current devices connection context
*/
ConnectionContext getPrimaryConnectionContext();
/**
- * Method provides current devices auxiliary connection contexts.
+ * Getter.
*
- * @return
- */
- ConnectionContext getAuxiliaryConnectiobContexts(BigInteger cookie);
-
-
- /**
* @return translator library
*/
TranslatorLibrary oook();
/**
- * store cancellable timeout handler of currently running barrier task
+ * Sets notification publish service.
+ *
+ * @param notificationPublishService the notification publish service
*/
- void setCurrentBarrierTimeout(Timeout timeout);
+ void setNotificationPublishService(NotificationPublishService notificationPublishService);
/**
- * @return cancellable timeout handle of currently running barrier task
+ * Gets message spy.
+ *
+ * @return the message spy
*/
- Timeout getBarrierTaskTimeout();
-
- void setNotificationPublishService(NotificationPublishService notificationPublishService);
-
MessageSpy getMessageSpy();
- MultiMsgCollector getMultiMsgCollector(final RequestContext<List<MultipartReply>> requestContext);
+ /**
+ * Gets multi msg collector.
+ *
+ * @param <T> the type parameter
+ * @param requestContext the request context
+ * @return the multi msg collector
+ */
+ <T extends OfHeader> MultiMsgCollector<T> getMultiMsgCollector(RequestContext<List<T>> requestContext);
/**
- * indicates that device context is fully published (e.g.: packetIn messages should be passed)
+ * Indicates that device context is fully published (e.g.: packetIn messages should be passed).
*/
void onPublished();
/**
- * change packetIn rate limiter borders
- *
+ * change packetIn rate limiter borders.
* @param upperBound max amount of outstanding packetIns
*/
void updatePacketInRateLimit(long upperBound);
/**
- * @return registry point for item life cycle sources of device
+ * Checks if device and controller supports single layer serialization.
+ * @return true if single layer serialization is supported
*/
- ItemLifeCycleRegistry getItemLifeCycleSourceRegistry();
+ boolean canUseSingleLayerSerialization();
- @Override
- void close();
+ /**
+ * Method for initial submit transaction after successful initial gathering.
+ */
+ boolean initialSubmitTransaction();
}