The document discusses the OpenDaylight SDN controller. It provides an overview of OpenDaylight, describing it as an open-source project that promotes Software Defined Networking using technologies like Eclipse, Maven, and OSGi. The document also covers basic hands-on steps for installing and using the OpenDaylight controller, including setting up the environment, writing controller code, using Mininet and the controller's web UI.
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Opendaylight SDN Controller
1. OpenDayLight SDN Controller
________________________________________________________________________
SUMIT ARORA
sumit1234@gmail.com
Last updated : 11th-Nov-2014
2. Limit of Liability/Disclaimer of Warranty: Overall explanation presented on this ppts ,are based on my views, my learning, and my language it may differ from your
understanding, as my learning curve still rolling.
The author makes no representations or warranties with respect to the accuracy or completeness of the contents of this work and specifically disclaims all warranties,
including without limitation warranties of fitness for a particular purpose. The fact that an organization or web site is referred to in this work as a citation and/or a
potential source of further information does not mean that the author endorses the information the organization or web site may provide or the recommendations it
may make. Furthermore, readers should be aware that Internet web sites listed in this work may have changed or disappeared between when this work was written
and when it is read. So feel free write me your comments to make this better if any : sumit1234@gmail.com
3. OPENDAYLIGHT
Opendaylight is a project which promotes the
Software Defined Networking.
Officially started on April -8th-2013.
The linux foundation planned an pivotal role
in it, but it’s a consortium and multiple tech
companies are partnered to led the SDN.
Its based on Eclipse Public License – v 1.0
(EPL).
4. SOFTWARE DEFINED NETWORKING
Software defined networking is
a research area which let a
network to program, It also
output network control
applications, and those
applications are to control the
network
Example :
•A network formed by the
openflow enabled switch.
•Controller Platform provides
the OPEN APIs to program the
network.
•Controller Applications control
the network based on the
needs
N
e
t
w
o
r
k
Controller Applications
6. SET THE ENVIRONMENT – Step-1
Step-1
Set the Environment
•Install Virtual Box
•Install Ubuntu
•Install Eclipse IDE
•Install Maven
•Install Graphical Visualization for
dependency modules
•Install Mininet
•Wireshark OF Plugin to Capture OF Packets
Virtual Box
Mininet
7. Controller Code – Step-2
Controller Code
•Download the Code
•Compile the code via
mvn clean install
•Import the project to eclipse
•Launch the project
1
2
3
4
Step-2
8. Mininet – Step-3
Mininet
•Start mininet
•Create a network e.g. sudo mn --
controller=remote,ip=192.168.10.32 --
topo single
SSH to mininet – Created one network
mininet
Step-3
10. Controller’s Web UI-step-4
• WebUI shows one network element
• Add the Gateway Address
*Please refer “Explore as a
developer section” for
Gateway IP Configuration on
ODL’s Web UI
11. Controller’s Web UI-Step-4
•Perform Ping on mininet network
•See the network graph on UI
•The learnt path appears based
on the ping performed.
•CREATE VARIOUS NETWORK ON MININET
•BREAKPOINTS ON ECLIPSE
•TRACE Open Flow PACKETS ON WIRESHARK
12. How to get the Support ?
You may face installation Issue
You may face compilation Issue
You may face eclipse related Issue
e.g. sudo maven clean install may
show OutOfMemory Error
Possible Solution :
[1] . Run sudo maven clean install –
DskipTests (It will skip the tests to
done)
[2]. Check the VM’s memory size (it
should be minimum 2.5 GB
If so :
Refer the last page references / See
the installation/opendaylight videos
on youtube.
http://www.youtube.com/watch?v=hXWhgWMoNHM
http://www.youtube.com/watch?v=vjRJ8d_0Jwo
13. How to get the Support ?- Mailing Lists
[Also recommended]
Subscribe to these for
discussion/development:
discuss@lists.opendaylight.org
controller-dev@lists.opendaylight.org
14. IRC – Internet Relay Chat for opendaylight controller
Open this link : http://webchat.freenode.net/ 1
2
3
22. For Latest Simultaneous Release: Helium Release Plan
https://wiki.opendaylight.org/view/Simultaneous_Release:Helium_Release_Plan
23. Explore it as a Developer
________________________________________________________________________
OpenDayLight Controller
24. LOGICAL ARCHITECTURE
Open Daylight
Controller is a JVM so it
can run on any metal
and OS provided
•JVM 1.7+
•Linux (Ubuntu or RHEL
or Fedora or Any other
popular Linux Distro
that supports Java)
ODL Controller
25. Software Tools/Paradigms
OpenDayLight uses the following software tools/paradigms. It is important to become
familiar with them:
•Maven: OpenDayLight uses Maven for easier build automation. Maven uses pom.xml
(Project Object Model for this bundle) to script the dependencies between bundles and
also to describe what bundles to load on start.
•OSGi: This framework in the backend of OpenDayLight allows dynamically loading bundles
and packaged Jar files, and binding bundles together for information exchange.
•Java interfaces: Java Interfaces are used for event listening, specifications and forming
patterns. This is the main way in which specific bundles implement call-back functions for
events and also to indicate awareness of specific state.
•REST APIs : are north bound APIs e.g. Topology,Host Tracker,Flow Programmer,Static
Routing ,Statistics, Subnets ,Switch Manager
26. OSGI Bundles
Bundle (Application)
Hardware
Bundle
Bundle
Bundle
Operating System
OSGi
Java VM
Driver Driver Driver
= service interface
exported and imported
by bundles
The system(ODL-SDNC) is made of modules
that express interest in services and expose
services.
An OSGi application has no top and no bottom—it is simply a collection
of bundles. There is also no main program; some bundles contribute
code libraries; others start threads, communicate over the network,
access databases, or collaborate with still others to gain access to
hardware devices and system resources. While there are often
dependencies between bundles, in many cases bundles are peers in a
collaborative system.
Bundle A
{}
= service, java interface
Bundle B
{}
Bundle C
{}
27. OpenDayLight Controller’s Bundles
The lifecycle of the
bundle starts from the
<Bundle-Activator>
The main function of
the activator is two fold
1) To start/stop the
execution
2) To control the
lifecycle of the objects
that will implement the
business logic
The Import-
Packages/Export-Packages
are dependencies for the
bundles, from the classpath
point of view. In OSGi each
bundle has it's own
classpath,and the
Import/Export,decide how
the classpath will be
constructed
28. OpenDayLight Controller’s Developer Dive
Mutil-Tenant is supported via the concept of Container
•Container –A Self Sufficient functional entity, It identified by the Unique Name
•Multiple containers are possible
•Each of this Container can have Topology Managers, ARP Handler, Host Tracker , Form its
own Topology and run its own topology Algorithm for its domain.
•Each of the domain can choose to control the entire network or part of the
network or certain application in the network subnet
•Each module ( or bundles) can be configured to Participate in any of the containers.
•Each of the container can have its own administrative and management access
•By default : when the controller comes , each service in the controller such as topology.
ARP,Host –Tracker etc all belong to default container.
•Currently every module express its interest for “default” container in order to make
the base controller to work
29. OpenDayLight Controller’s Developer Dive
GRAPHICAL VISUALIZATION FOR DEPENDENCY MODULES
Step 1 : Just install this plugin via "Install New Software ..." by adding site -
http://www.eclipse.org/pde/incubator/dependency-visualization/
Step 2 : Restart Eclipse
Step 3 : Navigate to "Window --> Show View --> Other .. --> Plug-in Development --> Graph Plug-in Dependencies" - this
opens the "Plug-in Dependency Analysis" pane at the bottom
Step 4 : Right-click on the pane and select "Focus On", this opens "Plug-in Selection" dialog. Type the plugin to choose -
eg. “topolgymanager", select the plugin from the list and .. ... you get a nice dependency view of the “topologymanager"
plugin !!
30. OpenDayLight Controller’s Developer Dive
How to start the inspection ?
There is no hard-coded entry point. The most important methods are getImplementations/configureInstance
and getGlobalImplementation/configureGlobalInstance.
Example -1 :
Each bundle can decide what to implement. Looking at the ARPHandler module. There is getImplementations. It
returns an Object[] with ArpHandler.class that tells the business logic is implemented by the ArpHandler class when
instantiated.[A bundle can have many objects implementing the business logic.]
Example-2 : protocol_plugins.openflow
package org.opendaylight.controller.protocol_plugin.openflow.internal;
public Object[] getImplementations() {
Object[] res = { TopologyServices.class, DataPacketServices.class,
InventoryService.class, ReadService.class,
FlowProgrammerNotifier.class };
return res;
31. OpenDayLight Controller’s Developer Dive
How to start the inspection ? package org.opendaylight.controller.arphandler.internal;
[1] .On configuring the ArpHandler
object:
[2].ArpHandler will publish the
services listed in the c.setInterface.
[3].While it will consume the
services provided by others and
listed in the
c.add(createServiceDependency
This is how a business logic object
provides and consume services
All the black magic underneath that
power this mechanism, is provided
by the Apache Felix Dependency
Manager
3
1
2
32. OpenDayLight Controller’s Developer Dive
Services [ Example]
The SAL provides basic services like Device Discovery
which are used by modules like Topology Manager
to build the topology and device capabilities.
Topology Service is a set of services that allow
to convey topology information like a new node
a new link has been discovered and so on.
Discovery Service The interface provides the
methods to notify the listener when an edge is
added/deleted/changed.
Flow Programming service provide
, installing/modifying/removing flows
on a network node.
33. OpenDayLight Controller’s Developer Dive
Gateway IP
Configuration
on ODL’s Web UI
•The Gateway IP configuration is purely meant to provide a way for the Controller to aid the ARP handler to do Proxy ARP
functionality.
•It would need Subnet Gateway IP Configuration in the controller for all the Subnets being assisted by the controller.
•The Subnet gateway IP configuration is generic in nature and can be used for other purposes
34. OpenDayLight Controller’s Developer Dive
PacketIn Message
The packetIN is an openflow specific function so it's handled by the openflow protocol
plugin. once a network element deliver a packetIN to the controller the openflow protocol
plugin[org.opendaylight.controller.protocol_plugin.openflow] will get it and transform in
RawDataPacket then dispatch via SAL(Service Abstraction Layer) data packet services
Serial: When a Data Packet Listener gets a packet after another,
this case is necessary when the subsequent handler needs some
extra information that can only be provided by another Data Packet
Service Handler.
props.put("salListenerDependency", "loadbalancer");
props.put("salListenerName", “arphandler");
[ARPHandler would get the packet only after loadbalancer]
Parallel : When a Data Packet Listener doesn't
express any dependency then it will get a copy of
the packet as anybody else. [IListenDataPacket]
35. OpenDayLight Controller’s Developer Dive
[1]. Say the OpenFlow plugin
receives an ARP packet that need
to be dispatched to the ARP
Handler Application
[2]. The OpenFlow Plugin will call
IPluginOutDataPacketService to
get the packet to the SAL.
[3]. The ARP Handler Application
would’ve registered to the
IListenDataPacket Service. The
SAL upon receiving the packet (in
#2 above) will thus handover the
packet to the ARP Handler App.
[4]. The Application can now
process the packet.
[1].The Application constructs the packet and calls
the interface IDataPacketService provided by SAL
to send the packet. The Destination network
device is to be provided as part of the API.
[2].SAL will then call the
IPluginInDataPacketService interface for a given
Protocol plugin based on the destination network
device (OpenFlow Plugin in this case)
[3].The Protocol plugin will then ship the packet
to the appropriate network element. The plugin
will handle all protocol specific processing.
Data Packet Service
36. OpenDayLight Controller’s Developer Dive
When a module tries to install a flow rule to some switch, how the rule is processed.
(When multiple modules independently install flow rules to switches, it will
inevitably conflict with other rules)
The logic is pretty simple at the moment, if someone tries to install an entry and there
is a previous one covering the same match, a conflict is raised
•There are various interfaces provided by the forward rule manager e.g. asynchronous
,synchronous. Those interfaces send the message via
org.opendaylight.controller.protocol_plugin.openflow.core; to the switch.
•Forward rule manager maintains the openflow-switch’s rules database in ruledb data
structure.
•For the installation of a rule, based on the given parameters (e.g. switch id, match
parameters, action) It first verify the conflict on its ruleDB, If that return success, then it
forward this rule as flow-mod packet to install the rule on a specific switch.
37. OSGI Commands…
https://access.redhat.com/documentation/en-US/Fuse_ESB_Enterprise/7.1/html/Console_Reference/files/Consoleosgi.html
http://felix.apache.org/site/41-console-and-commands.html
http://www.vogella.com/tutorials/OSGi/article.html
osgi> b 77
org.opendaylight.controller.networkutils.implementation_0.4.3.SNAPSHOT [77]
Id=77, Status=ACTIVE Data Root=E:odlheliumcontrolleropendaylightdistributionopendaylighttargetdistribution.opendaylight-osgipackage
opendaylightconfigurationorg.eclipse.osgibundles77data
"Registered Services"
{org.opendaylight.controller.sal.core.IContainerAware}={service.id=75}
Services in use:
{org.osgi.service.log.LogService, org.eclipse.equinox.log.ExtendedLogService}={service.id=8}
No exported packages
Imported packages
org.opendaylight.controller.sal.core; version="0.8.2.SNAPSHOT"<org.opendaylight.controller.sal_0.8.2.SNAPSHOT [82]>
org.slf4j; version="1.7.2"<slf4j.api_1.7.2 [7]>
org.apache.commons.net.telnet; version="3.0.1"<org.apache.commons.net_3.0.1 [119]>
org.opendaylight.controller.networkutils; version="0.4.3.SNAPSHOT"<org.opendaylight.controller.networkutils_0.4.3.SNAPSHOT [161]>
org.apache.felix.dm; version="3.0.0"<org.apache.felix.dependencymanager_3.1.0 [32]>
org.opendaylight.controller.sal.connection; version="0.1.3.SNAPSHOT"<org.opendaylight.controller.sal.connection_0.1.3.SNAPSHOT [143]>
org.apache.commons.net; version="3.0.1"<org.apache.commons.net_3.0.1 [119]>
org.opendaylight.controller.connectionmanager; version="0.1.3.SNAPSHOT"<org.opendaylight.controller.connectionmanager_0.1.3.SNAPSHOT [64]>
org.opendaylight.controller.sal.inventory; version="0.8.2.SNAPSHOT"<org.opendaylight.controller.sal_0.8.2.SNAPSHOT [82]>
org.opendaylight.controller.clustering.services; version="0.5.2.SNAPSHOT"<org.opendaylight.controller.clustering.services_0.5.2.SNAPSHOT [16]>
org.opendaylight.controller.sal.flowprogrammer; version="0.8.2.SNAPSHOT"<org.opendaylight.controller.sal_0.8.2.SNAPSHOT [82]>
org.opendaylight.controller.sal.reader; version="0.8.2.SNAPSHOT"<org.opendaylight.controller.sal_0.8.2.SNAPSHOT [82]>
org.opendaylight.controller.forwardingrulesmanager; version="0.6.1.SNAPSHOT"<org.opendaylight.controller.forwardingrulesmanager_0.6.1.SNAPSHOT [139]>
org.opendaylight.controller.switchmanager; version="0.7.2.SNAPSHOT"<org.opendaylight.controller.switchmanager_0.7.2.SNAPSHOT [145]>
org.opendaylight.controller.sal.match; version="0.8.2.SNAPSHOT"<org.opendaylight.controller.sal_0.8.2.SNAPSHOT [82]>
org.opendaylight.controller.sal.utils; version="0.8.2.SNAPSHOT"<org.opendaylight.controller.sal_0.8.2.SNAPSHOT [82]>
No fragment bundles
Named class space
org.opendaylight.controller.networkutils.implementation; bundle-version="0.4.3.SNAPSHOT"[provided]
No required bundles
38. Creating a New Module
________________________________________________________________________
OpenDayLight Controller
39. Creating A New Module
Open this link : http://sdnhub.org/tutorials/opendaylight/
40. Creating A New Module
•Perform the steps as specified in the tutorial
•do sudo mvn clean install -DskipTests
•It will generate ../target/L2Forwarding-0.4.0-
SNAPSHOT.jar
41. Creating A New Module
•Run the opendaylight
controller in Debug Mode
43. Creating A New Module
•Insert the break points
•Perform ping from mininet
•Trace the code
44. Explore It As A Researcher
________________________________________________________________________
OpenDayLight Controller
45. Explore it as a researcher
You may research what can be achieved by replacing the traditional network
with openflow based network and opendaylight SDN controller.
You may research the bottlenecks/assistance of openflow based network with
opendaylight sdn controller e.g. rule conflicts while installing the rules in
dynamic situation (see this : http://frenetic-lang.org/pyretic/ and listen to
Jennifer Rexford: http://www.cs.princeton.edu/~jrex/ ) .
You may design set of use cases and prove that on these situation openflow
based network with opendaylight SDN controller perform better than the
traditional network.
http://networkstatic.net/sdn-use-cases-for-service-providers/
http://thecareertools.com/2013/10/24/use-cases-of-software-defined-network/]
You may introduce any additional methodology e.g. System and methods for
xyz….with SDN e.g Optimizing the 'One Big Switch' abstraction in Software
Defined Networks. HotSwap: Correct and efficient controller upgrades for
Software-Defined Networks.
46. Explore It As A Business
________________________________________________________________________
OpenDayLight Controller
47. Explore it as a business
• You may pick up a design pattern of data
center based network e.g. either self
experienced or detailed discussion with
relevant candidates of Data Center
Network (Network Admins, Network
Designers, Network Maintainers)
• You may design the technicalities with
existing network situations.
• You may then shape an opendaylight SDN
controller/openflow based product, which
can solve some business problems e.g.
managing the network by controller
reduces 50% of operational cost and
increases the maintenance or
administration flexibility e.g.
http://www.bigswitch.com/company/over
view
48. Explore It As A Employee
________________________________________________________________________
OpenDayLight Controller
49. Explore it as a business
• If you are an employee of a company and
you have been given some work related to
SDN, continue to do the assigned work
item, If your interest increases then you
are free bird to do anything.
• And if you are newbie with opendaylight
sdn controller, then here are the steps
which will be as a jump start :
http://thecareertools.com/2013/09/28/open
daylight-sdn-controller-for-newbies/
50. Explore It As Your Interest
________________________________________________________________________
OpenDayLight Controller
51. Explore it as a interest
• If you are a die-hard
network enthusiasts and
truly want to explore the
practical internals of the
network.
52. Explore it as a interest
• You may contribute
to opendaylight,
you may design a
new user interface
for a home based
router, you may
create an integrated
controller for your
campus network,
you are free bird…
53. So enjoy with SDN, once
again, according to my
experience the SDN
abstractly means Software
Defined Networking.
Means A Software can
define the network or A
Software can control
network but which Software
and which network, you
have to explore.