Jump to: navigation, search

Network Intent Composition:Main

Network Intent Composition (NIC) Facts

Project Creation Date: January 22nd, 2015
Lifecycle State: Incubation
Type: Application
Primary Contact: Yrineu Rodrigues - yrineu.rodrigues@serro.com
Project Lead: Yrineu Rodrigues - yrineu.rodrigues@serro.com
Committers:
Active committers:

  • Yrineu Rodrigues - yrineu.rodrigues@serro.com username: yrineu_rodrigues

Inactive committers:

  • Anu Mercian - freebirdsanu@gmail.com: amercian
  • Dave Lenrow – david.lenrow@huawei.com
  • Saket Mahajani - saket.mahajani@gmail.com username: saket
  • Raphael Amorim - raphael.amorim@gmail.com username: raphaelamorim
  • Icaro Camelo - icarorvc@gmail.com username: icarocamelo

Active reviewers:

  • Raphael Amorim - raphael.amorim@gmail.com username: raphaelamorim
  • Icaro Camelo - icarorvc@gmail.com username: icarocamelo
  • Yrineu Rodrigues - yrineu.rodrigues@serro.com username: yrineu_rodrigues

IRC: freenode.net #opendaylight-nic
Mailing List: nic-dev@lists.opendaylight.org
    Archives: mailing list archives
Meetings: Friday 3:30PM PT, Webex
Repository: git clone https://git.opendaylight.org/gerrit/p/nic
Jenkins: jenkins silo
Gerrit Patches: code patches/reviews
Bugs:

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 behaviors and network policies. Intents are described to the controller through a new NorthBound Interface, which provides generalized and abstracted policy semantics instead of specific configuration commands. 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. The Network Intent Composition function will use existing OpenDaylight Network Service Functions and Southbound Plugins 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, BGP etc.

This project provides a structure capable to support different Intent definitions and work with multiple southbound plugins at the same time, also contains its own implementation for Intent Lifecycle Management.

NIC basics

Config dev environment

  1. http://docs.opendaylight.org/en/stable-boron/developer-guide/network-intent-composition-(nic)-developer-guide.html
  2. https://wiki.opendaylight.org/view/GettingStarted:Development_Environment_Setup
  3. https://wiki.opendaylight.org/view/OpenDaylight_Controller:Gerrit_Setup
  4. https://wiki.opendaylight.org/view/GettingStarted:Pulling,_Hacking,_and_Pushing_All_the_Code_from_the_CLI

Tips

  • Debugging: ./karaf debug

It will listen to 5005 port

Basic guide using Intents for QoS

QoS attribute mapping

1. Create a basic topology using mininet

	sudo mn --topo single --mac --controller=remote,ip=127.0.0.1,port=6633 --switch ovsk,protocols=OpenFlow13

2. Run karaf distribution and install odl-nic-core-mdsal, odl-nic-console, odl-nic-listeners

       karaf>feature:install odl-nic-core-mdsal odl-nic-console odl-nic-listeners

3. Create an Intent qos:

        intent:qosConfig -p High_Quality -d 46
Note: The DSCP value ranges from 0-63

4. Create an Intent to allow traffic between two devices applying the QoS service

	karaf>intent:add -a ALLOW -t 00:00:00:00:00:01 -f 00:00:00:00:00:02 -q QOS -p High_Quality

5. Verify if a new rule was created on OF switch with a field 'mod_nw_tos:184'

Basic guide to create Intents to ALLOW or BLOCK

1. Create a basic topology using mininet

	sudo mn --topo single --mac --controller=remote,ip=127.0.0.1,port=6633 --switch ovsk,protocols=OpenFlow13

2. Run the karaf distribution and install odl-nic-core-mdsal, odl-nic-console, odl-nic-listeners

       karaf>feature:install odl-nic-core-mdsal odl-nic-console odl-nic-listeners

3. Create an Intent to allow all traffic between two devices

	karaf>intent:add -f 00:00:00:00:00:01 -t 00:00:00:00:00:02 -a ALLOW
	karaf>intent:add -f 00:00:00:00:00:02 -t 00:00:00:00:00:01 -a ALLOW

4. Test the connectivity between those two devices, must be allowed

5. To test the BLOCK action, please, execute steps 1, 2 and 3 changing the action ALLOW to BLOCK

6. Verify the connectivity between those two devices, must be blocked

List of available commands

Name Description
intent:add Adds an intent to the configuration tree
intent:remove Removes an intent from the configuration tree
intent:show Shows the details of an intent
intent:list List all the intents in both operational (default) and configuration trees
intent:compile Runs the conflict detection and resolution algorithm for the current intents in the configuration tree

How to install

In order to install NIC your have to open the karaf CLI. Once your opendaylight karaf console shows up, type:


    ________                       ________                .__  .__       .__     __       
    \_____  \ ______   ____   ____ \______ \ _____  ___.__.|  | |__| ____ |  |___/  |_     
     /   |   \\____ \_/ __ \ /    \ |    |  \\__  \<   |  ||  | |  |/ ___\|  |  \   __\    
    /    |    \  |_> >  ___/|   |  \|    `   \/ __ \\___  ||  |_|  / /_/  >   Y  \  |      
    \_______  /   __/ \___  >___|  /_______  (____  / ____||____/__\___  /|___|  /__|      
            \/|__|        \/     \/        \/     \/\/            /_____/      \/          
                                                                                           

Hit '<tab>' for a list of available commands
and '[cmd] --help' for help on a specific command.
Hit '<ctrl-d>' or type 'system:shutdown' or 'logout' to shutdown OpenDaylight.

opendaylight-user@root>feature:install odl-nic-console

That command will install odl-nic-core as well, if not installed. After feature installation is done you can check the status of all bundles by executing:

opendaylight-user@root>bundle:list | grep intent
252 | Active   |  80 | 1.0.0.SNAPSHOT                            | intentengine-api                                                         
253 | Active   |  80 | 1.0.0.SNAPSHOT                            | intentengine-impl                                                        
254 | Active   |  80 | 1.0.0.SNAPSHOT                            | intentengine-compiler                                                    
255 | Active   |  80 | 1.0.0.SNAPSHOT                            | intentengine-cli

After all the bundles are active, if you type intent<tab> you should be able to see the list of commands:

opendaylight-user@root>intent
intent            intent:add        intent:compile    intent:list       intent:remove     intent:show

List of commands

intent:add

DESCRIPTION
        intent:add

	Adds an intent to the controller.

Examples: --actions [ALLOW] --from <subject> --to <subject>
          --actions [BLOCK] --from <subject>

SYNTAX
        intent:add [options]

OPTIONS
        -a, --actions
                Action to be performed.
                -a / --actions BLOCK/ALLOW
                (defaults to [BLOCK])
        --help
                Display this help message
        -t, --to
                Second Subject.
                -t / --to <subject>
                (defaults to any)
        -f, --from
                First subject.
                -f / --from <subject>
                (defaults to any)

intent:remove

DESCRIPTION
        intent:remove

	Removes an intent from the controller.

SYNTAX
        intent:remove id 

ARGUMENTS
        id
                Intent Id

intent:show

DESCRIPTION
        intent:show

	Shows detailed information about an intent.

SYNTAX
        intent:show id 

ARGUMENTS
        id
                Intent Id

intent:list

DESCRIPTION
        intent:list

	Lists all intents in the controller.

SYNTAX
        intent:list [options]

OPTIONS
        -c, --config
                List Configuration Data (optional).
                -c / --config <ENTER>
        --help
                Display this help message

intent:compile (EXPERIMENTAL)

DESCRIPTION
        intent:compile

	[EXPERIMENTAL] Compile all intents and provide the results after conflict resolution

SYNTAX
        intent:compile

Compilation process demo

This is an initial and simplified implementation of the conflict resolution algorithm. In this version there is a temporary endpoint- selector which expects a CSV list of IP addresses. There is also a new experimental CLI command (intent:compile) to compile intents and show the results of the conflict resolution. See the steps to simulate an example of conflict resolution below:

    opendaylight-user@root>intent:add -f 10.0.0.5 -t 10.0.0.2,10.0.0.3 -a ALLOW
    Intent created (id: beb65aed-c88c-4979-9640-9b48fd30e39b)
    opendaylight-user@root>intent:add -f 10.0.0.5 -t 10.0.0.2,10.0.0.10 -a BLOCK
    Intent created (id: c93c2c02-14d8-4ebe-a121-8dfceee80c18)
    opendaylight-user@root>intent:add -f 10.0.0.1,10.0.0.4 -t 10.0.0.2 -a ALLOW
    Intent created (id: 88a752fc-28b4-458c-b07b-22d52e0e6177)
    opendaylight-user@root>intent:compile

Output:

    Original policies:
    
    from [10.0.0.5] to [10.0.0.2, 10.0.0.3] apply ALLOW
    from [10.0.0.1, 10.0.0.4] to [10.0.0.2] apply ALLOW
    from [10.0.0.5] to [10.0.0.2, 10.0.0.10] apply BLOCK
    
    >>> Compiled policies:
    from [10.0.0.1, 10.0.0.4] to [10.0.0.2] apply ALLOW
    from [10.0.0.5] to [10.0.0.2] apply BLOCK
    from [10.0.0.5] to [10.0.0.3] apply ALLOW
    from [10.0.0.5] to [10.0.0.10] apply BLOCK
    
    opendaylight-user@root>
    

NOTE: The compilation is not happening in the normal application flow. Currently, the only way to test this feature is using the CLI and the results will not be applied to the network [1].


[1] On Lithium only, but in Beryllium flows will be pushed.

Project Information

Project Proposal

Release Release Plan Agile Board Release Notes Release Review Installation Guide User Guide Developer Guide Operations Guide How-To's/Tutorials
Boron Release Plan NIC Trello Board
Beryllium Release Plan NIC Trello Board
Carbon Release Plan NIC Trello Board
Nitrogen Release Plan NIC Trello Board
Oxygen Release Plan NIC Trello Board - - - -

Proposed Community Goals for NIC project

Draft for discussion 9/4/2015


1. Solve the problem of resource contention between disparate ODL apps/services (e.g. conflicting changes to forwarding tables, this is the “multiple writer” problem in today’s ODL). Prove that NIC can enforce/enable cooperation between disparate services, including existing services that are not “cooperation aware”.

2. Provide a controller based, performant, easy to deploy. scale-out neutron/netvirt implementation as one of the services that cooperate within NIC. The goal here is to make ODL controller plugin the obvious openstack network implementation for advanced cloud networking, etc.

See more (recommended):

Clarifying the relation between the community goals for Be and the release plan

Documents and Presentations

  1. ODL Summit 2016 Presentations
    1. NIC demo
  2. ODL Summit 2015 Presentations
    1. NIC Be Planning discussion (+ Intent Graph Presentation)
    2. What is the Intent Anyway
    3. Boulder Project
  3. OpenStack Summit 2015
    1. Panel with Dave Lenrow
    2. Intents Panel with Dave Lenrow


Documents

Affinity_Service_Chaining_Proposal_ODP_7-23-2013.pdf

Clarifying the mapping service and other parts of NIC

Weekly Meetings

Schedule and Logistics

We have weekly meetings every Friday at 8:00 AM - 9:00 (PST).

Meetings are held using WebEx.

  • Weekly on Friday at 08:00 PST/PDT | 11:00 EST/EDT | 15:00 UTC during Daylight Time/16:00 UTC during Standard Time
    • Webex meeting link
    • Meeting Number: 199 413 454
    • Meeting password: This meeting does not require a password.
    • Call-in toll-free number (US/Canada): +1-855-797-9485
    • Call-in toll number (US/Canada): +1-415-655-0002
    • Host Key: 466804
    • IRC: Freenode/#opendaylight-nic

Meeting Topics

New entries ONLY IF there are special topics to be discussed during the meeting.

Meeting topics

Past Meetings

List of all subpages

Network Intent Composition:BeTestPlanNetwork Intent Composition:Beryllium PlanningNetwork Intent Composition:Beryllium Planning:Log Action
Network Intent Composition:Beryllium Planning:QoS Attribute MappingNetwork Intent Composition:Beryllium Planning:Redirect ActionNetwork Intent Composition:Beryllium Release Review
Network Intent Composition:Boron:Release NotesNetwork Intent Composition:Boron:Release ReviewNetwork Intent Composition:Boron Planning
Network Intent Composition:Composite EndpointNetwork Intent Composition:Dynamic AttributesNetwork Intent Composition:F2F-02-18-15
Network Intent Composition:FeaturesNetwork Intent Composition:GBP Renderer How ToNetwork Intent Composition:Graph
Network Intent Composition:Lithium Release NotesNetwork Intent Composition:Lithium Release PlanNetwork Intent Composition:Lithium Release Review
Network Intent Composition:M4 StatusNetwork Intent Composition:MainNetwork Intent Composition:NEMO Model
Network Intent Composition:NEMO Renderer How ToNetwork Intent Composition:NewsNetwork Intent Composition:Nic Events
Network Intent Composition:Nic consoleNetwork Intent Composition:ODLSummit2015Network Intent Composition:Openstack Setup and Integration
Network Intent Composition:Redirect action approachNetwork Intent Composition:Release NotesNetwork Intent Composition:State Machine
Network Intent Composition:Use CasesNetwork Intent Composition:VTN Renderer How ToNetwork Intent Composition:VTN Renderer Overview
Network Intent Composition:minutes