Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "Created by Jan Medved www.opendaylight.org OpenDaylight January 2014 Thomas D. Nadeau."— Presentation transcript:

1 Created by Jan Medved OpenDaylight January 2014 Thomas D. Nadeau

2 Created by Jan Medved 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

3 Created by Jan Medved  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

4 Created by Jan Medved Platinum Gold Silver Who is OpenDaylight Project?

5 Created by Jan Medved  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

6 Created by Jan Medved 6 ODL “Hydrogen” Release Plan 6

7 Created by Jan Medved 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

8 Created by Jan Medved OpenDaylight Controller Architecture 8

9 Created by Jan Medved  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 OpenFlow in Open Daylight 9

10 Created by Jan Medved OpenFlow Plugin Architecture 10

11 Created by Jan Medved Moving to Model-Driven SAL Network Elements Abstraction Layer Netconf PCEP OF x.y … Network Topology LinksNodes Paths NE … SystemFlows Table … … Flow ConfigStats Tunnels … NE BGP-LS OF-Config/OVSDB Config Stats … Table … 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

12 Created by Jan Medved 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 OfConfig OVSDB OfConfig OVSDB OF x.y … Network Producer Consumer REST CONF REST CONF FCAPS Netconf

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

14 Created by Jan Medved 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 { uses types:flow; } container updated-flow { uses types: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 TestFlowService ConsumerService

15 Created by Jan Medved Demo: RPC Request Routing Controller (Container Instance) Nodes Network Routing Table: Node [key=foo:node:1] Consumer 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:2] TestFlowService (“FlowService1”) TestFlowService (“FlowService1”) TestFlowService (“FlowService2”) TestFlowService (“FlowService2”) salFlowService API 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 Created by Jan Medved Demo: RPC Request Routing Controller (Container Instance) Nodes Network Routing Table: Node [key=foo:node:1] Consumer 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:2] TestFlowService (“FlowService1”) TestFlowService (“FlowService1”) TestFlowService (“FlowService2”) 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”

17 Created by Jan Medved Demo: RPC Request Routing Controller (Container Instance) Nodes Network Routing Table: Node [key=foo:node:1] Consumer 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:2] TestFlowService (“FlowService1”) TestFlowService (“FlowService1”) TestFlowService (“FlowService2”) TestFlowService (“FlowService2”) salFlowService API 1. Consumer invokes ‘add-flow’ with node id ‘foo:node:1”

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

19 Created by Jan Medved Request Routing (App->NE) 19 Controller (Container Instance) Inventory Network Netconf NE 1 Models NE1 f1f2... fn... NE2 f1f2... fn... NEn f1f2... fn... NE 2 Models NE n Models Routing Table: NE1 NE2 NEn 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 "/"; } 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”

20 Created by Jan Medved Request Routing (App->NE, Multi-Dest) 20 Controller (Container Instance) Inventory Network Netconf NE 1 Models NE1 f1f2... fn... NE2 f1f2... fn... NEn f1f2... fn... NE 2 Models NE n Routing Table: NE1 NE2 NEn 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 "/"; } 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” OpenFlow Models

21 Created by Jan Medved 21  Open Source is standards for the 21 st 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

22 Created by Jan Medved  More information and to join:  wiki.opendaylight.org wiki.opendaylight.org  Keep informed and join the conversation  IRC: #opendaylight on Freenone  Open mailing lists:  #OpenDaylight 22 Resources 22

23 Created by Jan Medved Thank you 23

24 Created by Jan Medved Request Routing (App->NE) 24 Controller (Container Instance) Inventory Network Netconf NE 1 Models NE1 f1f2... fn... NE2 f1f2... fn... NEn f1f2... fn... NE 2 Models NE n Models Routing Table: NE1 NE2 NEn 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 "/"; } 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”

25 Created by Jan Medved Request Routing (App->NE, Multi-Dest) 25 Controller (Container Instance) Inventory Network Netconf NE 1 Models NE1 f1f2... fn... NE2 f1f2... fn... NEn f1f2... fn... NE 2 Models NE n Routing Table: NE1 NE2 NEn 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 "/"; } 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” OpenFlow Models

26 Created by Jan Medved Request Routing (RPC App->Service) 26 Controller (Container Instance) Services Network Routing Table: Service1 Service2 RESTCONF (Proxy Server) RESTCONF (Proxy Server) Application Model1 Request Routing RESTCONF (Proxy Client) RESTCONF (Proxy Client) Service1 Service2 Model1 Model2 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”] }

27 Created by Jan Medved Request Routing (RPC App->Service) 27 Controller (Container Instance) Services Network Routing Table: Service1 Service2 Netconf Application Model1 Request Routing Service1 Service2 Model1 Model2 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”] }

28 Created by Jan Medved Controller (Container Instance) Distributed Request Routing (App->NE) 28 Controller (Container Instance) Inventory Network Netconf NE 1 Models NE1 f1f2... fn... NE2 f1f2... fn... NEn f1f2... fn... NE 2 Models NE n Models Routing Table: NE1 NE2 NEn 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 "/"; } 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 NE1 NE2 NEn Inventory Network Data Store NE1 NE2 NE3

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

30 Created by Jan Medved Adding a Flow 30 Controller MD-SAL OF Plugin Model OF Plugin API Flow Programmer Service OF Library Topology Manager RESTCONF/ NETCONF RESTCONF/ NETCONF Flow Service API Flow Service Model Statistics Manager ARP Handler … 2 2 “Is generated from” OF Plugin Request Routing RPC RPC “Is generated from” Flow Service Model Data

31 Created by Jan Medved Network Application Life Cycle (Today) Network Network Element … API Network Element … API Controller API …… Network Representation Application Feature change API change Controller change GUI/API change Application change

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

33 Created by Jan Medved NFV Virtual Appliance 33 Controller AD-SAL Java plugin SB API Java plugin NB API NB-Plugin 1 Adaptation Java Service NB API NB-Plugin 2 REST API Controller MD-SAL SB-Plugin 1 SB-Plugin 2 NB-Plugin 2 Adaptation 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 NB Service Model “Is generated from” API-Driven SAL (AD-SAL)Model-Driven SAL (MD-SAL) Request Routing Request Routing SB Model Data NB Model Data Data Store

34 Created by Jan Medved NFV Virtual Appliance 34 ODL SAL Control Plane App SB Plugin Netconf/R ESTCONF Controller/EMS/Orchestration Data Path Fastpath Netconf, REST (XML & JSON) Application development environment: NFV Control Plane Manageability Service apps Application development environment: NFV Control Plane Manageability Service apps Control Plane App SB Plugin DP1OVSDPDK

35 Created by Jan Medved Model Plugin Build Process 35 Controller Yang Model Java API Definition Generated API Definition Module Implementations Yang Tools “Plugin” OSGI Bundle “Plugin” OSGI Bundle Generate APIs Create Plugin Bundle Deploy Maven Build Tools Maven Build Tools Module Implementations Plugin source code “API” OSGI Bundle “API” OSGI Bundle Maven Build Tools Maven Build Tools Create API Bundle 4 4 Deploy

36 Created by Jan Medved Moving to Model-Driven SAL Network Elements Abstraction Layer SB Protocol PCEP OF x.y … Network Topology LinksNodes Paths NE … SystemFlows Table … … Flow ConfigStats Tunnels … NE BGP-LS OF-Config/OVSDB Config Stats … Table … 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

37 Created by Jan Medved Moving to Model-Driven SAL (Cont.) Network Elements Abstraction Layer SB Protocol PCEP OF x.y … BGP-LS OF-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 … SystemFlows RIB Table … … ConfigStats Tunnels … ALTO

38 Created by Jan Medved Moving to Model-Driven SAL (Cont.) Network Elements Abstraction Layer SB Protocol PCEP OF x.y … XMP -Conn OF-Config/OVSDB Applications OF Network Services Platform Services Netconf RESTCONF Netconf RESTCONF Java & REST SAL APIs (Generated) NB APIs (Generated & Handcrafted) Java SAL APIs (Generated) Topology Module IETF Topology LinksNodesPaths NE … SystemFlows RIB Table … … ConfigStats Tunnels … Topology Manager XMP topology Topo Mgr REST API Topology Service

39 Created by Jan Medved 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


Download ppt "Created by Jan Medved www.opendaylight.org OpenDaylight January 2014 Thomas D. Nadeau."

Similar presentations


Ads by Google