X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflowplugin-api%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fopenflowplugin%2Fapi%2Fopenflow%2Fdevice%2FDeviceContext.java;h=6eb8b322a89c7db5dc7981b3e1985926cd55e542;hb=0b4b43cb55409bc1a6f8aa2be4bda5b05bd2a66e;hp=dd22186a39303d956129eaa021609768e70fa929;hpb=891fa82bd6ff0f0aaef08c08945e73399d369126;p=openflowplugin.git diff --git a/openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/device/DeviceContext.java b/openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/device/DeviceContext.java index dd22186a39..6eb8b322a8 100644 --- a/openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/device/DeviceContext.java +++ b/openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/device/DeviceContext.java @@ -8,22 +8,31 @@ package org.opendaylight.openflowplugin.api.openflow.device; +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.controller.md.sal.binding.api.NotificationService; import org.opendaylight.controller.md.sal.binding.api.ReadTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.openflowplugin.api.openflow.OpenflowPluginTimer; +import org.opendaylight.openflowplugin.api.openflow.OpenFlowPluginTimer; import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionContext; +import org.opendaylight.openflowplugin.api.openflow.device.handlers.DeviceContextClosedHandler; +import org.opendaylight.openflowplugin.api.openflow.device.handlers.DeviceDisconnectedHandler; import org.opendaylight.openflowplugin.api.openflow.device.handlers.DeviceReplyProcessor; import org.opendaylight.openflowplugin.api.openflow.device.handlers.MessageHandler; -import org.opendaylight.openflowplugin.api.openflow.device.handlers.OutstandingMessageExtractor; -import org.opendaylight.openflowplugin.api.openflow.device.listener.OpenflowMessageListenerFacade; -import org.opendaylight.openflowplugin.api.openflow.flow.registry.FlowRegistry; -import org.opendaylight.openflowplugin.api.openflow.translator.TranslatorLibrarian; -import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableFeatures; +import org.opendaylight.openflowplugin.api.openflow.device.handlers.MultiMsgCollector; +import org.opendaylight.openflowplugin.api.openflow.registry.ItemLifeCycleRegistry; +import org.opendaylight.openflowplugin.api.openflow.registry.flow.DeviceFlowRegistry; +import org.opendaylight.openflowplugin.api.openflow.registry.group.DeviceGroupRegistry; +import org.opendaylight.openflowplugin.api.openflow.registry.meter.DeviceMeterRegistry; +import org.opendaylight.openflowplugin.api.openflow.statistics.ofpspecific.MessageSpy; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; /** + *

* 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 @@ -36,10 +45,15 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; * 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. - *

+ *

* Created by Martin Bobak <mbobak@cisco.com> on 25.2.2015. */ -public interface DeviceContext extends OpenflowPluginTimer, MessageHandler, TranslatorLibrarian, OutstandingMessageExtractor, DeviceReplyProcessor { +public interface DeviceContext extends AutoCloseable, + OpenFlowPluginTimer, + MessageHandler, + DeviceReplyProcessor, + DeviceDisconnectedHandler, + PortNumberCache { /** @@ -65,25 +79,29 @@ public interface DeviceContext extends OpenflowPluginTimer, MessageHandler, Tran DeviceState getDeviceState(); /** - * Method exposes possibility for write a child of {@link DataObject} to transaction for DataStore. + * Method creates put operation using provided data in underlying transaction chain. */ void writeToTransaction(final LogicalDatastoreType store, final InstanceIdentifier path, final T data); /** - * Method exposes transaction created for device - * represented by this context. This should be used as read only. - * This read only transaction has a fresh dataStore snapshot and - * here is a possibility to get different data set from DataStore - * as have a write transaction in this context. + * Method creates delete operation for provided path in underlying transaction chain. */ - ReadTransaction getReadTransaction(); + void addDeleteToTxChain(final LogicalDatastoreType store, final InstanceIdentifier path); /** - * Method provides capabilities of connected device. - * - * @return + * Method submits Transaction to DataStore. + * @return transaction is submitted successfully */ - TableFeatures getCapabilities(); + boolean submitTransaction(); + + /** + * Method exposes transaction created for device + * represented by this context. This read only transaction has a fresh dataStore snapshot. + * There is a possibility to get different data set from DataStore + * as write transaction in this context. + */ + ReadTransaction getReadTransaction(); + /** * Method provides current devices connection context. @@ -99,27 +117,78 @@ public interface DeviceContext extends OpenflowPluginTimer, MessageHandler, Tran */ ConnectionContext getAuxiliaryConnectiobContexts(BigInteger cookie); - Xid getNextXid(); + /** + * Method exposes flow registry used for storing flow ids identified by calculated flow hash. + * + * @return + */ + DeviceFlowRegistry getDeviceFlowRegistry(); + + /** + * Method exposes device group registry used for storing group ids. + * + * @return + */ + DeviceGroupRegistry getDeviceGroupRegistry(); /** - * Method writes request context into request context map. This method - * is ment to be used by {@link org.opendaylight.openflowplugin.impl.services.OFJResult2RequestCtxFuture#processResultFromOfJava} + * Method exposes device meter registry used for storing meter ids. * - * @param xid - * @param requestFutureContext + * @return + */ + DeviceMeterRegistry getDeviceMeterRegistry(); + + + /** + * @return translator library + */ + TranslatorLibrary oook(); + + /** + * store cancellable timeout handler of currently running barrier task */ - void hookRequestCtx(Xid xid, RequestContext requestFutureContext); + void setCurrentBarrierTimeout(Timeout timeout); /** - * Method that attaches anyMessageTypeListener to connection adapters as message listener. + * @return cancellable timeout handle of currently running barrier task + */ + Timeout getBarrierTaskTimeout(); + + /** + * Sets notification service * - * @param openflowMessageListenerFacade + * @param notificationService + */ + void setNotificationService(NotificationService notificationService); + + void setNotificationPublishService(NotificationPublishService notificationPublishService); + + MessageSpy getMessageSpy(); + + /** + * Method sets reference to handler used for cleanup after device context about to be closed. */ - void attachOpenflowMessageListener(OpenflowMessageListenerFacade openflowMessageListenerFacade); + void addDeviceContextClosedHandler(DeviceContextClosedHandler deviceContextClosedHandler); + + MultiMsgCollector getMultiMsgCollector(final RequestContext> requestContext); - OpenflowMessageListenerFacade getOpenflowMessageListenerFacade(); + Long getReservedXid(); - FlowRegistry getFlowRegistry(); + /** + * indicates that device context is fully published (e.g.: packetIn messages should be passed) + */ + void onPublished(); + /** + * 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 + */ + ItemLifeCycleRegistry getItemLifeCycleSourceRegistry(); }