Presentation is loading. Please wait.

Presentation is loading. Please wait.

January 2014 Thomas D. Nadeau

Similar presentations


Presentation on theme: "January 2014 Thomas D. Nadeau"— Presentation transcript:

1 January 2014 Thomas D. Nadeau
OpenDaylight January 2014 Thomas D. Nadeau

2 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

3 OpenDaylight Scope 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

4 Who is OpenDaylight Project?
Platinum Gold Silver

5 OpenDaylight Project Goals
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.

6 ODL “Hydrogen” Release Plan
6

7 Projects in the Hydrogen Release
Controller VTN OpenDove Affinity Management Service LISP Mapping Service Yang Tools Defense4All BGP-LS/PCEP OpenStack Plugin OpenFlow Protocol OpenFlow SB Plugin OVSDB SNMP4SDN GUI Integration Testing 7

8 OpenDaylight Controller Architecture

9 OpenFlow in Open Daylight
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 in Hydrogen The OpenFlow projects will additionally: Develop network functions for network models Expose OpenFlow capabilities through the ODL NBI Follow the ONF OpenFlow release cycle Preliminary plan to support OF 1.5 in Helium

10 OpenFlow Plugin Architecture

11 Moving to Model-Driven SAL
Applications Northbound APIs (Generated & Handcrafted) Network Service Plugin Platform Service Plugin Transformer/ Adapter Internal Plugin Java & REST SAL APIs (Generated) Network Abstraction Layer Topology NE NE NE Tunnels System Flows Nodes Links Table Table Table Config Stats Config Stats Table Table Paths Flow Flow Flow Flow Flow Flow Java SAL APIs (Generated) Netconf OF-Config/OVSDB OF x.y PCEP BGP-LS Network Elements

12 Moving to Model-Driven SAL: The Software Engineer’s View
Network Applications Netconf NB APIs (Generated & Handcrafted) Controller (Container Instance) REST CONF Network Service Platform Service Internal Plugin SB Protocol OfConfig OVSDB OF x.y FCAPS Java SAL APIs (Generated) SAL Consumer Producer

13 Moving to Model-Driven SAL: Add Clustering
Network Applications Netconf NB APIs (Generated & Handcrafted) Controller (Container Instance) REST CONF Network Service Platform Service Internal Plugin SB Protocol OfConfig OVSDB OF x.y FCAPS Java SAL APIs (Generated) SAL Consumer Producer Data Store kv-store, SQL, ... Message Bus AMQP, 0-MQ... Container instance Container Instance

14 Demo: RPC Request Routing
Module 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 { container updated-flow { rpc add-flow { input { uses node-flow; }     rpc remove-flow { ... } rpc update-flow { ... } ... API: salFlowService add-flow(AddFlowInput) remove-flow(RemoveFlowInput) update-flow(ApdateflowInput) ... Yang Tools ConsumerService TestFlowService

15 Demo: RPC Request Routing
Controller (Container Instance) Consumer TestFlowService (“FlowService1”) TestFlowService (“FlowService2”) salFlowService API Network Nodes Routing Table: Node[key=foo:node:1] add-flow remove-flow ... update-fow Node[key=foo:node:2] add-flow remove-flow ... update-fow Node [key=foo:node:1] Node [key=foo:node:2] 1. Create Deploy Providers and Consumer 2. 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”

16 Demo: RPC Request Routing
Controller (Container Instance) Consumer TestFlowService (“FlowService1”) TestFlowService (“FlowService2”) salFlowService API Network Nodes Node[key=foo:node:1] add-flow remove-flow ... update-fow Routing Table: Node[key=foo:node:2] add-flow remove-flow ... update-fow Node [key=foo:node:1] Node [key=foo:node:2] 1. Consumer invokes ‘add-flow’ with node id ‘foo:node:1” 2. Consumer invokes ‘add-flow’ with node id ‘foo:node:2”

17 Demo: RPC Request Routing
Controller (Container Instance) Consumer TestFlowService (“FlowService1”) TestFlowService (“FlowService2”) salFlowService API Network Nodes Node[key=foo:node:1] add-flow remove-flow ... update-fow Routing Table: Node[key=foo:node:2] add-flow remove-flow ... update-fow Node [key=foo:node:1] Node [key=foo:node:2] 1. Consumer invokes ‘add-flow’ with node id ‘foo:node:1”

18 Demo: Remote Request Routing
Controller (Container Instance) Controller (Container Instance) RPC Client RpcService PingAPI Ping API Message Bus Network Network Nodes Nodes Routing Table: Routing Table: Node [key=foo:node:1] Node[key=foo:node:2] add-flow remove-flow ... update-fow Node [key=foo:node:1] Node[key=foo:node:2] add-flow remove-flow ... update-fow Node[key=foo:node:1] add-flow remove-flow ... update-fow Node[key=foo:node:1] add-flow remove-flow ... update-fow 1. Consumer invokes ‘add-flow’ with node id ‘foo:node:1”

19 Request Routing (App->NE)
Application NE1 NE2 NEn Models Models Models Models Controller (Container Instance) RESTCONF Inventory Netconf Network Inventory Request Routing NE1 f1 f2 ... fn NEn f1 f2 ... fn Routing Table: NE2 f1 f2 ... fn NE1 NE2 NEn 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 "/";         }     } } Path: “/inv:nodes/inv:node[id=”NE1"]/nf:mounted-data/f1”

20 Request Routing (App->NE, Multi-Dest)
Application NE1 NE2 NEn Models Models Models Controller (Container Instance) RESTCONF Inventory Netconf OpenFlow Models Network Inventory Request Routing NE1 f1 f2 ... fn NEn f1 f2 ... fn Routing Table: NE2 f1 f2 ... fn NE1 NE2 NEn 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 "/";         }     } } Path: “/inv:nodes/inv:node[id=”NEn"]/nf:mounted-data/f1”

21 Call to Action 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 21

22 Resources IRC: #opendaylight on Freenone
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

23 Thank you

24 Request Routing (App->NE)
Application NE1 NE2 NEn Models Models Models Models Controller (Container Instance) RESTCONF Inventory Netconf Network Inventory Request Routing NE1 f1 f2 ... fn NEn f1 f2 ... fn Routing Table: NE2 f1 f2 ... fn NE1 NE2 NEn 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 "/";         }     } } Path: “/inv:nodes/inv:node[id=”NE1"]/nf:mounted-data/f1”

25 Request Routing (App->NE, Multi-Dest)
Application NE1 NE2 NEn Models Models Models Controller (Container Instance) RESTCONF Inventory Netconf OpenFlow Models Network Inventory Request Routing NE1 f1 f2 ... fn NEn f1 f2 ... fn Routing Table: NE2 f1 f2 ... fn NE1 NE2 NEn 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 "/";         }     } } Path: “/inv:nodes/inv:node[id=”NEn"]/nf:mounted-data/f1”

26 Request Routing (RPC App->Service)
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/Service2:Op21 { input: { [foo=“1234”] } Application Service1 Service2 Model2 Model1 Model1 Model2 POST /restconf/v1/operations/Service1:Op11 { input: { [foo=“1234”] } Controller (Container Instance) RESTCONF (Proxy Server) RESTCONF (Proxy Client) Network Services Request Routing Service1 Op11 Op21 ... Op_1n Service2 Op21 Op22 ... Op_2n Routing Table: Service1 Service2

27 Request Routing (RPC App->Service)
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/Service2:Op21 { input: { [foo=“1234”] } Application Service1 Service2 Model2 Model1 Model1 Model2 POST /restconf/v1/operations/Service1:Op11 { input: { [foo=“1234”] } Controller (Container Instance) Netconf Network Services Request Routing Service1 Op11 Op21 ... Op_1n Service2 Op21 Op22 ... Op_2n Routing Table: Service1 Service2

28 Distributed Request Routing (App->NE)
Application NE1 NE2 NEn Models Models Models Models Controller (Container Instance) Controller (Container Instance) Data Store RESTCONF Inventory Netconf Network Network Request Routing Inventory Request Routing Inventory NE1 NE2 NE3 NE1 f1 f2 ... fn NEn f1 f2 ... fn Routing Table: Routing Table: NE1 NE1 NE2 f1 f2 ... fn NE2 NE2 NEn NEn Message Bus 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 "/";         }     } } Path: “/inv:nodes/inv:node[id=”NE1"]/nf:mounted-data/f1”

29 Receiving a ‘Flow Delete’ Message
Controller Topology Manager ARP Handler Statistics Manager Flow Programmer Service 1 MD-SAL 6 RESTCONF/ NETCONF SAL Notification “Is generated from” 5 Request Routing OF Plugin API 3 4 OF Plugin OF Library 2 OF Plugin Model

30 Adding a Flow … Controller Topology Manager ARP Handler
Flow Service Model 2 “Is generated from” Controller Topology Manager ARP Handler Statistics Manager Flow Programmer Service 1 4 MD-SAL 5 RESTCONF/ NETCONF 6 Flow Service API 7 RPC Request Routing “Is generated from” OF Plugin API RPC Flow Service Model Data 3 9 8 1 OF Plugin OF Library 10 OF Plugin Model

31 Network Application Life Cycle (Today)
Application change Application Application Application GUI/API change API Controller Controller change Network Representation API Network API change API API Network Element Network Element Feature change

32 Network Application Life Cycle (End-to-End Model-Driven Archictecture)
Application change Application Application Application Auto-update API API Controller Autogenerate code Network Representation API Load NE Model Network API API Network Element Network Element Feature change

33 Java NB Service Modeled API
NFV Virtual Appliance SB Plugin Model NB Service Model “Is generated from” “Is generated from” Controller Controller REST API REST API REST API REST API NB-Plugin 1 NB-Plugin 2 NB-Plugin 1 Adaptation Plugin NB-Plugin 2 AD-SAL Java plugin NB API Java Service NB API MD-SAL Request Routing Java NB Service Modeled API Request Routing Adaptation Data Store SB Model Data Java SB Modeled API NB Model Data Java plugin SB API SB-Plugin 1 SB-Plugin 2 SB-Plugin 1 SB-Plugin 2 API-Driven SAL (AD-SAL) Model-Driven SAL (MD-SAL)

34 NFV Virtual Appliance Controller/EMS/Orchestration ODL
Netconf, REST (XML & JSON) ODL Control Plane App Control Plane App Control Plane App Netconf/RESTCONF Application development environment: NFV Control Plane Manageability Service apps SAL SB Plugin SB Plugin SB Plugin DP1 OVS DPDK Data Path Fastpath

35 Plugin Build Process Controller Generate APIs 1 Yang Tools
Model Model Yang Model Generate APIs 1 Yang Tools Create API Bundle 2 Deploy Maven Build Tools “API” OSGI Bundle Java API Definition 4 Java API Definition Generated API Definition Controller Maven Build Tools “Plugin” OSGI Bundle 4 3 Deploy Create Plugin Bundle Module Implementations Module Implementations Plugin source code

36 Moving to Model-Driven SAL
Applications Northbound APIs (Generated & Handcrafted) Network Service Plugin Platform Service Plugin Transformer/ Adapter Internal Plugin Java & REST SAL APIs (Generated) Network Abstraction Layer Topology NE NE NE Tunnels System Flows Nodes Links Table Table Table Config Stats Config Stats Table Table Paths Flow Flow Flow Flow Flow Flow Java SAL APIs (Generated) SB Protocol OF-Config/OVSDB OF x.y PCEP BGP-LS Network Elements

37 Moving to Model-Driven SAL (Cont.)
Applications NB APIs (Generated & Handcrafted) Platform Services Netconf OF Network Services ALTO Internal Plugin Java & REST SAL APIs (Generated) Abstraction Layer Topology NE NE NE System Flows RIB Tunnels Paths Nodes Links Table Table Table Config Stats Java SAL APIs (Generated) SB Protocol OF-Config/OVSDB OF x.y PCEP BGP-LS Network Elements

38 Moving to Model-Driven SAL (Cont.)
Applications Topo Mgr REST API NB APIs (Generated & Handcrafted) Platform Services Netconf RESTCONF OF Network Services Topology Manager Topology Module Java & REST SAL APIs (Generated) Abstraction Layer NE NE NE IETF Topology System Flows RIB Tunnels Paths Nodes Links Table Table Table XMP topology Config Stats Topology Service Java SAL APIs (Generated) SB Protocol OF-Config/OVSDB OF x.y PCEP XMP -Conn Network Elements

39 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 Binding Generator Binding-Independent Consumers Schema Repository Binding-Independent Providers


Download ppt "January 2014 Thomas D. Nadeau"

Similar presentations


Ads by Google