blob: ff97f5becf747f4edbf4774f00489f67b592d006 [file] [log] [blame]
Brian O'Connorb876bf12014-10-02 14:59:37 -07001/**
toma1d16b62014-10-02 23:45:11 -07002 * Set of abstractions for conveying high-level intents for treatment of
3 * selected network traffic by allowing applications to express the
4 * <em>what</em> rather than the <em>how</em>. This makes such instructions
5 * largely independent of topology and device specifics, thus allowing them to
6 * survive topology mutations.
tom6db1f0a2014-10-07 09:12:29 -07007 * <p/>
8 * The controller core provides a suite of built-in intents and their compilers
9 * and installers. However, the intent framework is extensible in that it allows
10 * additional intents and their compilers or installers to be added
11 * dynamically at run-time. This allows others to enhance the initial arsenal of
12 * connectivity and policy-based intents available in base controller software.
13 * <p/>
14 * The following diagram depicts the state transition diagram for each top-level intent:<br>
15 * <img src="doc-files/intent-states.png" alt="ONOS intent states">
16 * <p/>
17 * The controller core accepts the intent specifications and translates them, via a
18 * process referred to as intent compilation, to installable intents, which are
19 * essentially actionable operations on the network environment.
20 * These actions are carried out by intent installation process, which results
21 * in some changes to the environment, e.g. tunnel links being provisioned,
22 * flow rules being installed on the data-plane, optical lambdas being reserved.
23 * <p/>
24 * After an intent is submitted by an application, it will be sent immediately
25 * (but asynchronously) into a compiling phase, then to installing phase and if
26 * all goes according to plan into installed state. Once an application decides
27 * it no longer wishes the intent to hold, it can withdraw it. This describes
28 * the nominal flow. However, it may happen that some issue is encountered.
29 * For example, an application may ask for an objective that is not currently
30 * achievable, e.g. connectivity across to unconnected network segments.
31 * If this is the case, the compiling phase may fail to produce a set of
32 * installable intents and instead result in a failed compile. If this occurs,
33 * only a change in the environment can trigger a transition back to the
34 * compiling state.
35 * <p/>
36 * Similarly, an issue may be encountered during the installation phase in
37 * which case the framework will attempt to recompile the intent to see if an
38 * alternate approach is available. If so, the intent will be sent back to
39 * installing phase. Otherwise, it will be parked in the failed state. Another
40 * scenario that’s very likely to be encountered is where the intent is
41 * successfully compiled and installed, but due to some topology event, such
42 * as a downed or downgraded link, loss of throughput may occur or connectivity
43 * may be lost altogether, thus impacting the viability of a previously
44 * satisfied intent. If this occurs, the framework will attempt to recompile
45 * the intent, and if an alternate approach is available, its installation
46 * will be attempted. Otherwise, the original top-level intent will be parked
47 * in the failed state.
48 * <p/>
49 * Please note that all *ing states, depicted in orange, are transitional and
50 * are expected to last only a brief amount of time. The rest of the states
51 * are parking states where the intent may spent some time; except for the
52 * submitted state of course. There, the intent may pause, but only briefly,
53 * while the system determines where to perform the compilation or while it
54 * performs global recomputation/optimization across all prior intents.
Brian O'Connorb876bf12014-10-02 14:59:37 -070055 */
Brian O'Connorb876bf12014-10-02 14:59:37 -070056package org.onlab.onos.net.intent;