OpenDaylight

39
Created by Jan Medved www.opendaylight.org OpenDaylight January 2014 Thomas D. Nadeau

description

OpenDaylight. January 2014 Thomas D. Nadeau. What is OpenDaylight. An OpenSource Project to build an ecosystem of OpenSource SDN software Multi-project Multi- vendor # 3 on CIO Magazine’s “Top 10 Software Defined Networking Startups”. 2. OpenDaylight Scope. - PowerPoint PPT Presentation

Transcript of OpenDaylight

Page 1: OpenDaylight

Created by Jan Medvedwww.opendaylight.org

OpenDaylight

January 2014

Thomas D. Nadeau

Page 2: OpenDaylight

Created by Jan Medvedwww.opendaylight.org

2

An OpenSource Project to build an ecosystem of OpenSource SDN software Multi-project Multi-vendor #3 on CIO Magazine’s “Top 10 Software Defined

Networking Startups”

What is OpenDaylight

2

Page 3: OpenDaylight

Created by Jan Medvedwww.opendaylight.org

Scope:  Projects chosen by TSC are limited to the following areas: The OpenDaylight controller Software for forwarding elements Southbound plugins to enable the controller to speak to the

OpenDaylight supplied and other network elements Northbound plugins to expose interfaces to those writing applications

to the controller Network services and applications intended to run on top of the

controller, integration between the controller and other elements, and Support projects such as tools, infrastructure, or testing. Plugins for inter-controller communication

OpenDaylight Scope

3

Page 4: OpenDaylight

Created by Jan Medvedwww.opendaylight.org

Platinum Gold Silver

Who is OpenDaylight Project?

Page 5: OpenDaylight

Created by Jan Medvedwww.opendaylight.org

Code: To create a robust, extensible, open source code base that covers the major common components required to build an SDN solution

Acceptance: To get broad industry acceptance amongst vendors and users

Community: To have a thriving and growing technical community contributing to the code base, using the code in commercial products, and adding value above, below and around.

OpenDaylight Project Goals

5

Page 6: OpenDaylight

Created by Jan Medvedwww.opendaylight.org

6

ODL “Hydrogen” Release Plan

6

Page 7: OpenDaylight

Created by Jan Medvedwww.opendaylight.org

7

Controller VTN OpenDove Affinity Management Service LISP Mapping Service Yang Tools Defense4All BGP-LS/PCEP OpenStack Plugin

Projects in the Hydrogen Release

7

OpenFlow Protocol OpenFlow SB Plugin OVSDB SNMP4SDN GUI Integration Testing

Page 8: OpenDaylight

Created by Jan Medvedwww.opendaylight.org

OpenDaylight Controller Architecture

8

Page 9: OpenDaylight

Created by Jan Medvedwww.opendaylight.org

The OpenDaylight OpenFlow plugin will provide: Abstraction of OpenFlow networks to the MD-SAL Interim support for Hard-SAL developed functions Support for OpenFlow 1.0 and 1.3.1 in Hydrogen

The OpenFlow projects will additionally: Develop network functions for 1.3.1 network models Expose 1.3.1 OpenFlow capabilities through the ODL NBI Follow the ONF OpenFlow release cycle

Preliminary plan to support OF 1.5 in Helium

OpenFlow in Open Daylight

9

Page 10: OpenDaylight

Created by Jan Medvedwww.opendaylight.org

OpenFlow Plugin Architecture

10

Page 11: OpenDaylight

Created by Jan Medvedwww.opendaylight.org

Moving to Model-Driven SAL

Network Elements

AbstractionLayer

Netconf PCEPOF x.y

Network

Topology

LinksNodes

Paths

NE … NE

System Flows

Table …Table

Table

…Flow Flow Flow

ConfigStats

Tunnels…

NE

BGP-LSOF-Config/OVSDB

ConfigStats

…Table

Table

…FlowFlow Flow

Applications

Network Service Plugin

Platform Service Plugin

Transformer/ Adapter

Java & REST SAL APIs (Generated)

Northbound APIs (Generated & Handcrafted)

Java SAL APIs (Generated)

Internal Plugin

Page 12: OpenDaylight

Created by Jan Medvedwww.opendaylight.org

Moving to Model-Driven SAL:The Software Engineer’s View

Controller (Container Instance)

SAL

SB Protocol

Applications

Java SAL APIs (Generated)

NB APIs (Generated & Handcrafted)

Network Service

Platform Service

Internal Plugin

OfConfigOVSDB OF x.y…

Network

ProducerConsumer

RESTCONF FCAPS

Netconf

Page 13: OpenDaylight

Created by Jan Medvedwww.opendaylight.org

Controller (Container Instance)

SAL

SB Protocol

Applications

Java SAL APIs (Generated)

NB APIs (Generated & Handcrafted)

Network Service

Platform Service

Internal Plugin

OfConfigOVSDB OF x.y…

Network

ProducerConsumer

RESTCONF FCAPS

Moving to Model-Driven SAL:Add Clustering

Message Bus Data Store

Container instance Container Instance

kv-store, SQL, ...

AMQP, 0-MQ...

Netconf

Page 14: OpenDaylight

Created by Jan Medved

Demo: RPC Request RoutingModule sal-flow { namespace "urn:opendaylight:flow:service"; prefix flow; import yang-ext {prefix ext;} import opendaylight-inventory {prefix inv;} import ietf-inet-types {prefix inet;} import opendaylight-flow-types {prefix types;}

typedef flow-table-ref { type instance-identifier; } grouping node-flow { leaf node { ext:context-reference "inv:node-context"; type inv:node-ref; } leaf flow-table { type flow-table-ref; } uses types:flow; } grouping flow-update { container original-flow { uses types:flow; } container updated-flow { uses types:flow; } }

rpc add-flow { input { uses node-flow; } }    

rpc remove-flow { ... } rpc update-flow { ... } ...}

API: salFlowServiceadd-flow(AddFlowInput)remove-flow(RemoveFlowInput)update-flow(ApdateflowInput)...

Yang Tools

TestFlowServiceConsumerService

Page 15: OpenDaylight

Created by Jan Medved

Demo: RPC Request Routing

Controller (Container Instance)

NodesNetwork

Routing Table:Node [key=foo:node:1]

Consumer

Node[key=foo:node:2]

add-flowremove-flow

...update-fow

Node[key=foo:node:1]

add-flowremove-flow

...update-fow

Node [key=foo:node:2]

TestFlowService(“FlowService1”)

TestFlowService(“FlowService2”)

salFlowService API

1. Create Deploy Providers and Consumer2. Register “FlowService1” as the provider for the ‘salFlowService’ API 3. Register “FlowService2” as the provider for the ‘salFlowService’ API 4. Register “Consumer” as the consumer for the ‘salFlowService’ API 5. Register path /Nodes/Node[key=foo:node:1] for “FlowService1” 6. Register path /Nodes/Node[key=foo:node:2] for “FlowService2”

Page 16: OpenDaylight

Created by Jan Medved

Demo: RPC Request Routing

Controller (Container Instance)

NodesNetwork

Routing Table:Node [key=foo:node:1]

Consumer

Node[key=foo:node:2]

add-flowremove-flow

...update-fow

Node[key=foo:node:1]

add-flowremove-flow

...update-fow

Node [key=foo:node:2]

TestFlowService(“FlowService1”)

TestFlowService(“FlowService2”)

salFlowService API

1. Consumer invokes ‘add-flow’ with node id ‘foo:node:1”2. Consumer invokes ‘add-flow’ with node id ‘foo:node:2”

Page 17: OpenDaylight

Created by Jan Medved

Demo: RPC Request Routing

Controller (Container Instance)

NodesNetwork

Routing Table:Node [key=foo:node:1]

Consumer

Node[key=foo:node:2]

add-flowremove-flow

...update-fow

Node[key=foo:node:1]

add-flowremove-flow

...update-fow

Node [key=foo:node:2]

TestFlowService(“FlowService1”)

TestFlowService(“FlowService2”)

salFlowService API

1. Consumer invokes ‘add-flow’ with node id ‘foo:node:1”

Page 18: OpenDaylight

Created by Jan Medved

Controller (Container Instance)

NodesNetwork

Routing Table:Node [key=foo:node:1] Node[key=foo:node:2]

add-flowremove-flow

...update-fow

Node[key=foo:node:1]

add-flowremove-flow

...update-fow

PingAPI

Controller (Container Instance)

Demo: Remote Request Routing

NodesNetwork

Routing Table:Node [key=foo:node:1]

RPC Client

Node[key=foo:node:2]

add-flowremove-flow

...update-fow

Node[key=foo:node:1]

add-flowremove-flow

...update-fow

RpcService

Ping API

1. Consumer invokes ‘add-flow’ with node id ‘foo:node:1”

Message Bus

Page 19: OpenDaylight

Created by Jan Medved

Request Routing (App->NE)

19

Controller (Container Instance)

Inventory

Network

Netconf

NE1

Models

NE1

f1 f2...

fn

... ...

NE2

f1 f2...

fn

... ...

NEn

f1 f2...

fn

... ...

NE2

Models

NEn

Models

Routing Table:NE1NE2NEn

RESTCONF

Application

module node-feature-inventory { prefix nf;                   import opendaylight-inventory {prefix inv};    import yang-ext { prefix ext};    import mount { prefix mount};

    augment "/inv:nodes/inv:node" { ext:context-instance “node";     ext:augment-identifier "netconf-node";        mount:mountpoint "mounted-data" {         mount:subtree "/";        }    }}

Inventory

Models

Request Routing

Path: “/inv:nodes/inv:node[id=”NE1"]/nf:mounted-data/f1”

Page 20: OpenDaylight

Created by Jan Medved

Request Routing (App->NE, Multi-Dest)

20

Controller (Container Instance)

Inventory

Network

Netconf

NE1

Models

NE1

f1 f2...

fn

... ...

NE2

f1 f2...

fn

... ...

NEn

f1 f2...

fn

... ...

NE2

Models

NEn

Routing Table:NE1NE2NEn

RESTCONF

Application

module node-feature-inventory { prefix nf;                   import opendaylight-inventory {prefix inv};    import yang-ext { prefix ext};    import mount { prefix mount};

    augment "/inv:nodes/inv:node" { ext:context-instance “node";     ext:augment-identifier "of-node";        mount:mountpoint "mounted-data" {         mount:subtree "/";        }    }}

Inventory

Models

Request Routing

Path: “/inv:nodes/inv:node[id=”NEn"]/nf:mounted-data/f1”

OpenFlowModels

Page 21: OpenDaylight

Created by Jan Medvedwww.opendaylight.org

21

Open Source is standards for the 21st Century OpenDaylight is rapidly becoming the focal point for SDN Code is the Coin of the Realm

Influence comes from contribution of code Brings forth ideas to contribute and resources to do the

work

Call to Action

21

Page 22: OpenDaylight

Created by Jan Medvedwww.opendaylight.org

More information and to join: wiki.opendaylight.org

Keep informed and join the conversation IRC: #opendaylight on Freenone Open mailing lists: lists.opendaylight.org @openDaylightSDN #OpenDaylight

22

Resources

22

Page 23: OpenDaylight

Created by Jan Medvedwww.opendaylight.org

Thank you

23

Page 24: OpenDaylight

Created by Jan Medved

Request Routing (App->NE)

24

Controller (Container Instance)

Inventory

Network

Netconf

NE1

Models

NE1

f1 f2...

fn

... ...

NE2

f1 f2...

fn

... ...

NEn

f1 f2...

fn

... ...

NE2

Models

NEn

Models

Routing Table:NE1NE2NEn

RESTCONF

Application

module node-feature-inventory { prefix nf;                   import opendaylight-inventory {prefix inv};    import yang-ext { prefix ext};    import mount { prefix mount};

    augment "/inv:nodes/inv:node" { ext:context-instance “node";     ext:augment-identifier "netconf-node";        mount:mountpoint "mounted-data" {         mount:subtree "/";        }    }}

Inventory

Models

Request Routing

Path: “/inv:nodes/inv:node[id=”NE1"]/nf:mounted-data/f1”

Page 25: OpenDaylight

Created by Jan Medved

Request Routing (App->NE, Multi-Dest)

25

Controller (Container Instance)

Inventory

Network

Netconf

NE1

Models

NE1

f1 f2...

fn

... ...

NE2

f1 f2...

fn

... ...

NEn

f1 f2...

fn

... ...

NE2

Models

NEn

Routing Table:NE1NE2NEn

RESTCONF

Application

module node-feature-inventory { prefix nf;                   import opendaylight-inventory {prefix inv};    import yang-ext { prefix ext};    import mount { prefix mount};

    augment "/inv:nodes/inv:node" { ext:context-instance “node";     ext:augment-identifier "of-node";        mount:mountpoint "mounted-data" {         mount:subtree "/";        }    }}

Inventory

Models

Request Routing

Path: “/inv:nodes/inv:node[id=”NEn"]/nf:mounted-data/f1”

OpenFlowModels

Page 26: OpenDaylight

Created by Jan Medved

Request Routing (RPC App->Service)

26

Controller (Container Instance)

Services

Network

Routing Table:Service1Service2

RESTCONF(Proxy Server)

ApplicationModel1

Request Routing

RESTCONF(Proxy Client)

Service1 Service2Model1 Model2Model2

Service1

Op11

Op21...

Op_1n

Service2

Op21

Op22...

Op_2n

module Service1 { prefix svc1; import yang-ext {prefix ext} import inventory {prefix inv} rpc Op11 { input { leaf foo { type bar; } } }}

module Service2 { prefix svc1; import yang-ext {prefix ext} import inventory {prefix inv} rpc Op21 { input { leaf foo { type bar; } } }}

POST /restconf/v1/operations/Service1:Op11{ input: { [foo=“1234”]}

POST /restconf/v1/operations/Service2:Op21{ input: { [foo=“1234”]}

Page 27: OpenDaylight

Created by Jan Medved

Request Routing (RPC App->Service)

27

Controller (Container Instance)

Services

Network

Routing Table:Service1Service2

Netconf

ApplicationModel1

Request Routing

Service1 Service2Model1 Model2Model2

Service1

Op11

Op21...

Op_1n

Service2

Op21

Op22...

Op_2n

module Service1 { prefix svc1; import yang-ext {prefix ext} import inventory {prefix inv} rpc Op11 { input { leaf foo { type bar; } } }}

module Service2 { prefix svc1; import yang-ext {prefix ext} import inventory {prefix inv} rpc Op21 { input { leaf foo { type bar; } } }}

POST /restconf/v1/operations/Service1:Op11{ input: { [foo=“1234”]}

POST /restconf/v1/operations/Service2:Op21{ input: { [foo=“1234”]}

Page 28: OpenDaylight

Created by Jan Medved

Controller (Container Instance)

Distributed Request Routing (App->NE)

28

Controller (Container Instance)

Inventory

Network

Netconf

NE1

Models

NE1

f1 f2...

fn

... ...

NE2

f1 f2...

fn

... ...

NEn

f1 f2...

fn

... ...

NE2

Models

NEn

Models

Routing Table:NE1NE2NEn

RESTCONF

Application

module node-feature-inventory { prefix nf;                   import opendaylight-inventory {prefix inv};    import yang-ext { prefix ext};    import mount { prefix mount};

    augment "/inv:nodes/inv:node" { ext:context-instance “node";     ext:augment-identifier "netconf-node";        mount:mountpoint "mounted-data" {         mount:subtree "/";        }    }}

Inventory

Models

Request Routing

Path: “/inv:nodes/inv:node[id=”NE1"]/nf:mounted-data/f1”

Request Routing

Routing Table:

Message Bus

NE1NE2NEn

InventoryNetwork

Data Store

NE1

NE2

NE3

Page 29: OpenDaylight

Created by Jan Medvedwww.opendaylight.org

Receiving a ‘Flow Delete’ Message

29

Controller

MD-SAL

OF Plugin Model

OF Plugin API

Flow Programmer Service

OF Library

Topology Manager

RESTCONF/NETCONF

2

3 4

SAL Notification

Statistics ManagerARP Handler …1

“Is generated from”

OF Plugin

6

Request Routing5

Page 30: OpenDaylight

Created by Jan Medvedwww.opendaylight.org

Adding a Flow

30

Controller

MD-SAL

OF Plugin Model

OF Plugin API

Flow Programmer Service

OF Library

Topology Manager

RESTCONF/NETCONF

Flow Service API

Flow Service Model

Statistics ManagerARP Handler …

2

“Is generated from”

OF Plugin

Request Routing

1

1

3

7

RPC

6

9

10

RPC

“Is generated from”

Flow Service Model Data

45

8

Page 31: OpenDaylight

Created by Jan Medvedwww.opendaylight.org

Network Application Life Cycle (Today)

NetworkNetwork Element

API

Network Element…

API

Controller

API

API

… …

NetworkRepresentation

Application Application Application

Feature change

API change

Controller change

GUI/API change

Application change

Page 32: OpenDaylight

Created by Jan Medvedwww.opendaylight.org

Network Application Life Cycle(End-to-End Model-Driven Archictecture)

NetworkNetwork Element

API

Network Element…

API

Controller

API

API

… …

NetworkRepresentation

Application Application Application

Feature change

Application change

Load NE Model

Autogenerate code

Auto-update API

Page 33: OpenDaylight

Created by Jan Medvedwww.opendaylight.org

NFV Virtual Appliance

33

Controller

AD-SALJava plugin SB API

Java plugin NB API

NB-Plugin 1

Adaptation

Java Service NB API

NB-Plugin 2REST API REST API

Controller

MD-SAL

SB-Plugin 1 SB-Plugin 2

NB-Plugin 2Adaptation Plugin

Java SB Modeled API

Java NB Service Modeled API

SB Plugin Model

Request Routing

…SB-Plugin 1 SB-Plugin 2…

… NB-Plugin 1

“Is generated from”

REST API REST API

NB Service Model

“Is generated from”

API-Driven SAL (AD-SAL) Model-Driven SAL (MD-SAL)

Request Routing

SB Model Data NB Model

DataData Store

Page 34: OpenDaylight

Created by Jan Medvedwww.opendaylight.org

NFV Virtual Appliance

34

ODL

SAL

Control Plane App

SB Plugin

Netconf/RESTCONF

Controller/EMS/Orchestration

Data Path Fastpath

Netconf, REST (XML & JSON)

Application development environment:• NFV Control Plane • Manageability• Service apps

Control Plane AppControl Plane App

SB PluginSB Plugin

DP1 OVS DPDK

Page 35: OpenDaylight

Created by Jan Medvedwww.opendaylight.org

ModelModel

Plugin Build Process

35

Controller

Yang Model

Java API DefinitionJava API DefinitionGenerated API Definition

Module Implementations

Yang Tools

“Plugin”OSGI Bundle

1

4

Generate APIs

Create Plugin BundleDeploy

MavenBuild Tools

Module ImplementationsPlugin source code

“API” OSGI Bundle

MavenBuild Tools

2

3

Create API Bundle

4Deploy

Page 36: OpenDaylight

Created by Jan Medvedwww.opendaylight.org

Moving to Model-Driven SAL

Network Elements

AbstractionLayer

SB Protocol PCEPOF x.y

Network

Topology

LinksNodes

Paths

NE … NE

System Flows

Table …Table

Table

…Flow Flow Flow

ConfigStats

Tunnels…

NE

BGP-LSOF-Config/OVSDB

ConfigStats

…Table

Table

…FlowFlow Flow

Applications

Network Service Plugin

Platform Service Plugin

Transformer/ Adapter

Java & REST SAL APIs (Generated)

Northbound APIs (Generated & Handcrafted)

Java SAL APIs (Generated)

Internal Plugin

Page 37: OpenDaylight

Created by Jan Medvedwww.opendaylight.org

Moving to Model-Driven SAL (Cont.)

Network Elements

AbstractionLayer

SB Protocol PCEPOF x.y

…BGP-LSOF-Config/OVSDB

Applications

OF Network Services

Platform Services Netconf

Java & REST SAL APIs (Generated)

NB APIs (Generated & Handcrafted)

Java SAL APIs (Generated)

Internal Plugin

Topology

LinksNodesPaths

NE…NENE

System Flows RIB

Table …Table Table

…Config Stats

Tunnels…

ALTO

Page 38: OpenDaylight

Created by Jan Medvedwww.opendaylight.org

Moving to Model-Driven SAL (Cont.)

Network Elements

AbstractionLayer

SB Protocol PCEPOF x.y

…XMP -ConnOF-Config/OVSDB

Applications

OF Network Services

Platform Services

NetconfRESTCONF

Java & REST SAL APIs (Generated)

NB APIs (Generated & Handcrafted)

Java SAL APIs (Generated)

Topology Module

IETF Topology

LinksNodesPaths

NE…NENE

System Flows RIB

Table …Table Table

…Config Stats

Tunnels…

Topology Manager

XMP topology

Topo Mgr REST API

Topology Service

Page 39: OpenDaylight

Created by Jan Medvedwww.opendaylight.org

Architecture

Binding-Aware Core Binding Independent Core

Data Repository

Transient Repository(MI Data Repository)Providers

Binding-Aware Providers

 Binding-Aware Consumers

Applications

Controller SAL Core

Providers

Binding Generator

 Binding-Independent Consumers

Schema Repository

Binding-Independent Providers