The controller core provides a suite of built-in intents and their compilers and installers. However, the intent framework is extensible in that it allows additional intents and their compilers or installers to be added dynamically at run-time. This allows others to enhance the initial arsenal of connectivity and policy-based intents available in base controller software.
The following diagram depicts the state transition diagram for each top-level intent:
The controller core accepts the intent specifications and translates them, via a process referred to as intent compilation, to installable intents, which are essentially actionable operations on the network environment. These actions are carried out by intent installation process, which results in some changes to the environment, e.g. tunnel links being provisioned, flow rules being installed on the data-plane, optical lambdas being reserved.
After an intent is submitted by an application, it will be sent immediately (but asynchronously) into a compiling phase, then to installing phase and if all goes according to plan into installed state. Once an application decides it no longer wishes the intent to hold, it can withdraw it. This describes the nominal flow. However, it may happen that some issue is encountered. For example, an application may ask for an objective that is not currently achievable, e.g. connectivity across to unconnected network segments. If this is the case, the compiling phase may fail to produce a set of installable intents and instead result in a failed compile. If this occurs, only a change in the environment can trigger a transition back to the compiling state.
Similarly, an issue may be encountered during the installation phase in which case the framework will attempt to recompile the intent to see if an alternate approach is available. If so, the intent will be sent back to installing phase. Otherwise, it will be parked in the failed state. Another scenario that’s very likely to be encountered is where the intent is successfully compiled and installed, but due to some topology event, such as a downed or downgraded link, loss of throughput may occur or connectivity may be lost altogether, thus impacting the viability of a previously satisfied intent. If this occurs, the framework will attempt to recompile the intent, and if an alternate approach is available, its installation will be attempted. Otherwise, the original top-level intent will be parked in the failed state.
Please note that all *ing states, depicted in orange, are transitional and are expected to last only a brief amount of time. The rest of the states are parking states where the intent may spent some time; except for the submitted state of course. There, the intent may pause, but only briefly, while the system determines where to perform the compilation or while it performs global recomputation/optimization across all prior intents.
The figure below depicts the general interactions between different
components of the intent subsystem.
Interface Summary Interface Description ConstraintRepresentation of a connectivity constraint capable of evaluating a link and determining the cost of traversing that link in the context of this constraint. IntentBatchDelegateFacade for receiving notifications from the intent batch service. IntentClockServiceLogical clock service that issues per-intent timestamps. IntentCompiler<T extends Intent>Abstraction of a compiler which is capable of taking an intent and translating it to other, potentially installable, intents. IntentExtensionServiceService for extending the capability of intent framework by adding additional compilers or/and installers. IntentInstallCoordinatorContact point for installers to report progress of intent installation and to update intent-specific status and context appropriately. IntentInstaller<T extends Intent>Manage installation process for specific installable Intents. IntentListenerListener for
IntentServiceService for application submitting or withdrawing their intents. IntentSetMultimap IntentStoreManages inventory of end-station intents; not intended for direct use. IntentStoreDelegateIntent store delegate abstraction. ObjectiveTrackerServiceAuxiliary service for tracking intent path flows and for notifying the intent service of environment changes via topology change delegate. ResourceContextClass providing resource information to constraints. TopologyChangeDelegateAuxiliary delegate for integration of intent manager and flow trackerService. WorkPartitionEventListenerEntity capable of receiving device partition-related events. WorkPartitionServiceService for partitioning work, represented via a unique identifier, onto cluster nodes.
Class Summary Class Description ConnectivityIntentAbstraction of connectivity intent for traffic matching some criteria. ConnectivityIntent.BuilderAbstract builder for connectivity intents. FlowObjectiveIntentIntent expressed as (and backed by) a collection of flow objectives through which the intent is to be accomplished. FlowRuleIntentAn intent that enables to tell flow level operation. HostToHostIntentAbstraction of end-station to end-station bidirectional connectivity. HostToHostIntent.BuilderBuilder of a host to host intent. IntentAbstraction of an application level intent. Intent.BuilderAbstract builder for intents. IntentDataA wrapper class that contains an intents, its state, and other metadata for internal use. IntentEventA class to represent an intent related event. IntentIdIntent identifier suitable as an external key. IntentInstallationContextInstallation context for a high level Intent. IntentOperationAbstraction of an intent-related operation, e.g. IntentOperationContext<T extends Intent>Operation context for installable Intent. IntentUtilsUtilities for dealing with intents. KeyKey class for Intents. LinkCollectionIntentAbstraction of a connectivity intent that is implemented by a set of path segments. LinkCollectionIntent.BuilderBuilder of a single point to multi point intent. MultiPointToSinglePointIntentAbstraction of multiple source to single destination connectivity intent. MultiPointToSinglePointIntent.BuilderBuilder of a multi point to single point intent. OpticalCircuitIntentAn optical layer intent for circuits between two OduClt ports. OpticalCircuitIntent.BuilderBuilder for optical circuit intents. OpticalConnectivityIntentAn optical layer intent for connectivity between two OCh ports. OpticalConnectivityIntent.BuilderBuilder for optical connectivity intents. OpticalOduIntentAn optical layer intent between two OduClt ports - in an OTN Topology. OpticalOduIntent.BuilderBuilder for optical ODU intents. OpticalPathIntentAn optical layer intent with explicitly selected path. OpticalPathIntent.BuilderBuilder for optical path intents. PathIntentAbstraction of explicitly path specified connectivity intent. PathIntent.BuilderBuilder of a host to host intent. PointToPointIntentAbstraction of point-to-point connectivity. PointToPointIntent.BuilderBuilder of a point to point intent. ProtectedTransportIntentIntent to create a protected linear path. ProtectedTransportIntent.BuilderBuilder for
ProtectionEndpointIntentInstallable Intent for the ProtectionEndpoint (head/tail). ProtectionEndpointIntent.BuilderBuilder for
SinglePointToMultiPointIntentAbstraction of single source, multiple destination connectivity intent. SinglePointToMultiPointIntent.BuilderBuilder of a single point to multi point intent. TwoWayP2PIntentAbstraction of bidirectional connectivity between two points in the network. TwoWayP2PIntent.BuilderBuilder of a point to point intent. WorkPartitionEventPartition event.
Enum Summary Enum Description IntentEvent.Type IntentInstaller.DirectionThe installation direction. IntentOperation.TypeOperation type. IntentStateRepresentation of the phases an intent may attain during its lifecycle. PathIntent.ProtectionType WorkPartitionEvent.Type
Exception Summary Exception Description IntentCompilationExceptionAn exception thrown when a intent compilation fails. IntentExceptionRepresents an intent related error.