OpenDaylight and YANG

28
Automate | Orchestrate | Remediate OpenDaylight and YANG A northbound perspective ...

Transcript of OpenDaylight and YANG

Page 1: OpenDaylight and YANG

Automate | Orchestrate | Remediate

OpenDaylight and YANGA northbound perspective ...

Page 2: OpenDaylight and YANG

SDN is the physical separation of the network control plane from the forwarding plane and where the control plane controls several devices.

So what should this control plane (SDN Controller) be?The SDN

A platform for deploying SDN applications

Provide (or be associated with) an SDN application development environment

Sabapathy Arumugam
This looks like a SDN Controller definition.. So we may have to define What is SDN by "The physical separation of the network control plane from the forwarding plane, and where a control plane controls several devices". What is SDN Controller is the second question
Vinod Devi
Have modified the slide, kindly check if it fits better now
Page 3: OpenDaylight and YANG

SDN Controller: Platform Requirements

FlexibilityAccommodate a variety of diverse applicationsController applications SHOULD use a common framework and programming model and provide consistent APIs to their client

Scale the development process:No infrastructure code hotspotsIndependent development of controller applications & short integration times

Run-time Extensibility and Modularity:Load new protocol and service/application plugins at run-time.Adapt to data schemas (models) discovered in the network

Performance & Scale

Page 4: OpenDaylight and YANG

SDN Controller: App Development Requirements

A DSL for modeling to describe internal and external system behavior

Modeling tools for the controller aligned with modeling tools for devices

Code generation from models:Enforce standard API contractsGenerate boilerplate code performing repetitive and error-prone tasksProduce functionally equivalent APIs for different language bindingsModel-to-model adaptations for services and devicesConsumption of aligned device models

In the OpenDaylight Project, these requirements are satisfied with YANG (and YANG extensions) and via the YANG tool-chain, manifested in the MD-SAL

Page 5: OpenDaylight and YANG

OpenDaylight Solution

Page 6: OpenDaylight and YANG

YANG models defined in MD-SAL help in generating the bindings for the RESTCONF and the south-bound plugins

OpenDaylight Software Architecture

Sabapathy Arumugam
Would be better if we define what is "MD-SAL"
Vinod Devi
Have tweaked the slide a bit to bring out this more clearly. Hope this is better?
Page 7: OpenDaylight and YANG

MD-SAL Overview• Model Driven Service Abstraction Layer (MD-SAL) is the core of Opendaylight

project which helps in connecting between different layer & modules through well

defined API

• The MD-SAL uses YANG as the modeling language for both interface and data

definitions, and provides a messaging and data-centric runtime for such services

based on YANG modelling

• YANG tools is used to compile YANG template and generate Java classes/interfaces

and automatically build REST API doc explorer.

Page 8: OpenDaylight and YANG

Yangtools

Generates Java code from YANG

Provides ‘codecs’ to convert

Generated Java classes to DOM

DOM to various formats

XML

JSON

Etc.

Codecs make possible automatic:

RESTCONF

NETCONF

AMQP

Other bindings

Page 9: OpenDaylight and YANG

YANG → Java … why?Immutable: to avoid thread contentionStrongly typed: reduce coding errorsConsistent: reduce learning curveImprovable – generation can be improved and all DTOs get those improvements immediately system wideAutomated Bindings:

restconf – xml and jsonnetconfamqp and xmpp – on the horizon

Runtime Generatable

Consistent Data Transfer Objects (DTOs) everywhere

Page 10: OpenDaylight and YANG

MD-SAL : Model-Driven Service Abstraction Layer

Page 11: OpenDaylight and YANG

MD-SAL Details

Page 12: OpenDaylight and YANG

MD-SAL – The 3 Brokers

Page 13: OpenDaylight and YANG

Plugin development

Page 14: OpenDaylight and YANG

14

Annexure

Sabapathy Arumugam
Would be better to have summary at the end. All the examples can be under Annexure..
Page 15: OpenDaylight and YANG

Yang to Java Example - typedef

15

Yang Java

public class BridgeName implements Serializable { private final String _value;

@ConstructorProperties("value") public BridgeName(String _value) { … } public BridgeName(BridgeName source) { this._value = source._value; }

public String getValue() { return _value; } …}

typedef bridge-name { type string;}

Sabapathy Arumugam
Would be better to have summary at the end. All the examples can be under Annexure..
Page 16: OpenDaylight and YANG

Yang to Java Example - grouping

16

Yang Java

public interface BridgeAttributes extends DataObject { BridgeName getBridgeName(); …}

grouping bridge-attributes { leaf bridge-name { type bridge-name; } …}

Page 17: OpenDaylight and YANG

Yang to Java Eg - container - interface

17

Yang Java

public interface ConnectionInfo extends Augmentable<ConnectionInfo>, ConnectionInfoAttributes { }

container connection-info { uses connection-info-attributes;}

Page 18: OpenDaylight and YANG

Yang to Java Eg - container - builder

18

Yang Java

public class ConnectionInfoBuilder implements Builder <ConnectionInfo> { /* fields */ public void setRemoteIp(IpAddress value) … public IpAddress getRemoteIp() … public ConnectionInfo build() { return new ConnectionInfoImpl(this); } }

container connection-info { uses connection-info-attributes;}

Page 19: OpenDaylight and YANG

Yang to Java Example - list - interface

19

Yang Java

public interface ControllerEntry extends Augmentable<ControllerEntry>, Identifiable<ControllerEntryKey> { Uri getTarget();

ControllerEntryKey getKey(); …}

list controller-entry { key “target” leaf target { type inet:uri; }}

Page 20: OpenDaylight and YANG

Yang to Java Example - list - builder

20

Yang Java

public class ControllerEntryBuilder implements Builder <ControllerEntry> { /* fields */ public ControllerEntryBuilder setTarget(Uri value) { … } … public Uri getTarget(Uri value) {…} ControllerEntryKey getKey() {…} … public ControllerEntry build() { return new ControllerEntryImpl(this); } …}

list controller-entry { key “target” leaf target { type inet:uri; }}

Page 21: OpenDaylight and YANG

Yang to Java Eg. - rpc service interface

21

Yang Java

public interface HelloService extends RpcService { Future<RpcResult<HelloWorldOutput>> helloWorld( HelloWorldInput input);

}

rpc hello-world { input { leaf name { type string; } } output { leaf greating { type string; } }}

Page 22: OpenDaylight and YANG

Yang to Java Eg. - rpc - input interface

22

Yang Java

public interface HelloWorldInput extends DataObject, Augmentable<HelloWorldInput> { String getName();

}

rpc hello-world { input { leaf name { type string; } } output { leaf greating { type string; } }}

Page 23: OpenDaylight and YANG

Yang to Java Example - rpc – input builder

23

Yang Java

public class HelloWorldInputBuilder implements Builder <HelloWorldInput> { /* fields */

public HelloWorldInputBuilder setName(String value) { this._name = value; return this; } public HelloWorldInput build() { return new HelloWorldInputImpl(this); } …}

rpc hello-world { input { leaf name { type string; } } output { leaf greating { type string; } }}

Page 24: OpenDaylight and YANG

Yang to Java Eg. - rpc - output interface

24

Yang Java

public interface HelloWorldOutput extends DataObject, Augmentable<HelloWorldOutput> { String getGreating();

}

rpc hello-world { input { leaf name { type string; } } output { leaf greating { type string; } }}

Page 25: OpenDaylight and YANG

Yang to Java Eg. - rpc - output builder

25

Yang Java

public class HelloWorldOutputBuilder implements Builder <HelloWorldOutput> { /* fields */

public HelloWorldOutputBuilder setName(String value) { this._name = value; return this; } public HelloWorldOutput build() { return new HelloWorldOutputImpl(this); } …}

rpc hello-world { input { leaf name { type string; } } output { leaf greating { type string; } }}

Page 26: OpenDaylight and YANG

Yang to Java Eg. - notification - interface

26

Yang Java

public interface RandomGreetingNotification extends ChildOf<DataObject>, Augmentable<RandomGreetingNotification>, Notification { String getRandomGreeting();}

notification random-greeting-notification { leaf random-greeting { type string; }}

Page 27: OpenDaylight and YANG

Yang to Java Example - notification - builder

27

Yang Java

public class RandomGreetingNotificationBuilder implements Builder<RandomGreetingNotification> {

public RandomGreetingNotificationBuilder setRandomGreeting(String value) { this._randomGreeting = value; return this; }

public RandomGreetingNotification build() { return new RandomGreetingNotificationImpl(this); } …}

notification random-greeting-notification { leaf random-greeting { type string; }}

Page 28: OpenDaylight and YANG

28

Thank You

Connect with us@

Email: [email protected] [email protected]

LinkedIn: http://in.linkedin.com/in/arsabapathy

Twitter: https://twitter.com/arsabapathy

Sabapathy Arumugam
Would be better to have summary at the end. All the examples can be under Annexure..