Jump to: navigation, search

OpenDaylight Network Intent Composition Overview

Overview

This Network Intent Composition project will enable the controller to manage and direct network services and network resources based on describing the “Intent” for network behaviours and network policies. Intents are described to the controller through a new NorthBound Interface, which provides generalized and abstracted policy semantics instead of Openflow-like flow rules. The Intent based NBI allows for a descriptive way to get what is desired from the infrastructure, unlike the current SDN interfaces which are based on describing how to provide different services. This NBI will accommodate orchestration services and network and business oriented SDN applications, including OpenStack Neutron, Service Function Chaining, and Group Based Policy. The Network Intent Composition function will use existing OpenDaylight Network Service Functions and Southbound Plug-ins to control both virtual and physical network devices. The Network Intent Composer will be designed to be protocol agnostic such that any control protocol can be used such as Openflow, OVSDB, I2RS, Netconf, SNMP etc.

VTN Renderer

Virtual Tenant Network renderer is one of the renderers of Network Intent Composition. It validates the corresponding subjects addresses, and passes the intent to performs the respective actions between them. Each intent has an Intent ID. If the Intent ID doesn't exist, it creates an ID and the respective action is performed. If the ID is already exists and new action is performed under that ID, then new action will be overwritten the old action.

Subjects

A subject (what) on which the intent will have to be applied.

Actions

The action of what is to be performed by this intent. VTN renederer supports the actions:

  • Allow
Indicates traffic is allowed.
  • Block
Indicates traffic is not allowed

Note:

  • Multiple actions are not supported for now.
  • The VTN Renderer action is mandatory
  • Restriction on number of subjects. i.e., Only a pair of subjects are allowed.
  • VTN and vBridge are created for the very first intent request.

Operations

  • Create an intent: Creates a new IntentID

Creates an Intent with IP address

curl -v --user "admin":"admin" -H "Accept: application/json" -H "Content-type: application/json" -X PUT http://localhost:8181/restconf/config/intent:intents/intent/b9a13232-525e-4d8c-be21-cd65e3436034 -d '{ "intent:intent" : { "intent:id": "b9a13232-525e-4d8c-be21-cd65e3436034", "intent:actions" : [ { "order" : 2, "allow" : {} } ],"intent:constraints" : [ { "order":1 , "include-node" : {"include-selector":"node1"} }, { "order":2 , "exclude-node" : {"exclude-selector":"node2"}} ], "intent:subjects" : [ { "order":1 , "end-point-group" : {name:"10.0.0.3"} }, { "order":2 , "end-point-group" : {name:"10.0.0.2"}} ] } }'

Creates an Intent with MAC address

curl -v --user "admin":"admin" -H "Accept: application/json" -H "Content-type: application/json" -X PUT http://localhost:8181/restconf/config/intent:intents/intent/b9a13232-525e-4d8c-be21-cd65e3436035 -d '{ "intent:intent" : { "intent:id": "b9a13232-525e-4d8c-be21-cd65e3436035", "intent:actions" : [ { "order" : 2, "allow" : {} } ],"intent:constraints" : [ { "order":1 , "include-node" : {"include-selector":"node1"} }, { "order":2 , "exclude-node" : {"exclude-selector":"node2"}} ], "intent:subjects" : [ { "order":1 , "end-point-group" : {name:"6e:4f:f7:27:15:c9"} }, { "order":2 , "end-point-group" : {name:"aa:7d:1f:4a:70:81"}} ] } }'
  • Update an intent: If the Intent ID is already present, it will update the action performed.

Updates an Intent with IP address

curl -v --user "admin":"admin" -H "Accept: application/json" -H "Content-type: application/json" -X PUT http://localhost:8181/restconf/config/intent:intents/intent/b9a13232-525e-4d8c-be21-cd65e3436034 -d '{ "intent:intent" : { "intent:id": "b9a13232-525e-4d8c-be21-cd65e3436034", "intent:actions" : [ { "order" : 2, "allow" : {} } ],"intent:constraints" : [ { "order":1 , "include-node" : {"include-selector":"node1"} }, { "order":2 , "exclude-node" : {"exclude-selector":"node2"}} ], "intent:subjects" : [ { "order":1 , "end-point-group" : {name:"10.0.0.2"} }, { "order":2 , "end-point-group" : {name:"10.0.0.2"}} ] } }'

Updates an Intent with MAC address

curl -v --user "admin":"admin" -H "Accept: application/json" -H "Content-type: application/json" -X PUT http://localhost:8181/restconf/config/intent:intents/intent/b9a13232-525e-4d8c-be21-cd65e3436035 -d '{ "intent:intent" : { "intent:id": "b9a13232-525e-4d8c-be21-cd65e3436035", "intent:actions" : [ { "order" : 2, "block" : {} } ],"intent:constraints" : [ { "order":1 , "include-node" : {"include-selector":"node1"} }, { "order":2 , "exclude-node" : {"exclude-selector":"node2"}} ], "intent:subjects" : [ { "order":1 , "end-point-group" : {name:"6e:4f:f7:27:15:c9"} }, { "order":2 , "end-point-group" : {name:"aa:7d:1f:4a:70:81"}} ] } }'
  • Delete an intent- Deletes an Intent
curl -v --user "admin":"admin" -H "Accept: application/json" -H "Content-type: application/json" -X DELETE http://localhost:8181/restconf/config/intent:intents/intent/b9a13232-525e-4d8c-be21-cd65e3436034

For every operation it uses the VTN Java API to take some action

Feature Overview

  • odl-nic-core provides NIC core
  • odl-nic-console provides NIC CLI
  • odl-nic-renderer-vtn provides VTN Renderer

Running Karaf distribution

  • Move to the corresponding location.
cd nic/distribution/target/
  • Unzip the file.
tar -zxvf nic-karaf-1.0.0-SNAPSHOT.tar.gz
  • cd into the assembly directory.
cd assembly/
  • To run the Karaf
./bin/karaf
  • Once the console is up, type as below to install feature.
feature:install odl-nic-renderer-vtn