Tuesday, May 12, 2015

Scheduling for Parallel and Multi-Core Systems

Third presentation for the NSOM module, based on 3 of the most cited papers in the domain. :D

Thursday, April 30, 2015

Mininet on mininet on mininet.. :P

So, after running Mininet on Mininet, I decided to be crazier and run mininet on mininet on mininet on.. :P Had an interesting observation. Each keystroke was repeated as the length of loop, as you can see below. :D


pradeeban@llovizna:~$ sudo mn --controller=remote,ip=127.0.0.1 --topo linear,2[sudo] password for pradeeban:
*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2
*** Adding switches:
s1 s2
*** Adding links:
(h1, s1) (h2, s2) (s2, s1)
*** Configuring hosts
h1 h2
*** Starting controller
c0
*** Starting 2 switches
s1 s2 ...
*** Starting CLI:
mininet> pingall
*** Ping: testing ping reachability
h1 -> h2
h2 -> h1
*** Results: 0% dropped (2/2 received)
mininet> h1 mn
*** Error setting resource limits. Mininet's performance may be affected.
*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2
*** Adding switches:
s1
*** Adding links:
(h1, s1) (h2, s1)
*** Configuring hosts
h1 h2
*** Starting controller
c0
*** Starting 1 switches
s1 ...
*** Starting CLI:
mininet> hh11  mmnn^[[D^[[^^^[[C^?n

*** Unknown command: n
mininet> hh11  mmnn

*** Error setting resource limits. Mininet's performance may be affected.
*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2
*** Adding switches:
s1
*** Adding links:
(h1, s1) (h2, s1)
*** Configuring hosts
h1 h2
*** Starting controller
c0
*** Starting 1 switches
s1 ...
*** Starting CLI:
mininet> hhh111   mmmnnn
^J
*** Error setting resource limits. Mininet's performance may be affected.
*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2
*** Adding switches:
s1
*** Adding links:
(h1, s1) (h2, s1)
*** Configuring hosts
h1 h2
*** Starting controller
c0
*** Starting 1 switches
s1 ...
*** Starting CLI:
mininet> hhhh1111    mmmmnnnn
^J^J
*** Error setting resource limits. Mininet's performance may be affected.
*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2
*** Adding switches:
s1
*** Adding links:
(h1, s1) (h2, s1)
*** Configuring hosts
h1 h2
*** Starting controller
c0
*** Starting 1 switches
s1 ...
*** Starting CLI:
mininet> eeeeexxxxxiiiiittttt
^J^J^J
*** Stopping 1 controllers
c0
*** Stopping 2 links
..
*** Stopping 1 switches
s1
*** Stopping 2 hosts
h1 h2
*** Done
completed in 3.952 seconds
mininet> eeeexxxxiiiitttt
^J^J
*** Stopping 1 controllers
c0
*** Stopping 2 links
..
*** Stopping 1 switches
s1
*** Stopping 2 hosts
h1 h2
*** Done
completed in 11.986 seconds
mininet> eeexxxiiittt
^J
*** Stopping 1 controllers
c0
*** Stopping 2 links
..
*** Stopping 1 switches
s1
*** Stopping 2 hosts
h1 h2
*** Done
completed in 18.270 seconds
mininet> eexxiitt

*** Stopping 1 controllers
c0
*** Stopping 2 links
..
*** Stopping 1 switches
s1
*** Stopping 2 hosts
h1 h2
*** Done
completed in 37.107 seconds
mininet> exit
*** Stopping 1 controllers
c0
*** Stopping 3 links
...
*** Stopping 2 switches
s1 s2
*** Stopping 2 hosts
h1 h2
*** Done
completed in 57.171 seconds
pradeeban@llovizna:~$

Running mininet on mininet..

Initially (as monitored from ODL/DLUX)
Since mininet can run applications that are installed on its host, why not run mininet on top of mininet, just for lulz? :P

Running OpenDaylight
$ ./distribution-karaf-0.2.0-Helium/bin/karaf
Running Mininet
pradeeban@llovizna:~$ sudo mn --controller=remote,ip=127.0.0.1 --topo linear,2
[sudo] password for pradeeban:
*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2
*** Adding switches:
s1 s2
*** Adding links:
(h1, s1) (h2, s2) (s2, s1)
*** Configuring hosts
h1 h2
*** Starting controller
c0
*** Starting 2 switches
s1 s2 ...
*** Starting CLI:
mininet> pingall
*** Ping: testing ping reachability
h1 -> h2
h2 -> h1
*** Results: 0% dropped (2/2 received)
Now ODL/DLUX with Mininet on Mininet.

Mininet on Mininet

mininet> h1 sudo mn --controller=remote,ip=127.0.0.1 --topo tree,6
*** Error setting resource limits. Mininet's performance may be affected.
*** Creating network
*** Adding controller
Unable to contact the remote controller at 127.0.0.1:6633
*** Adding hosts:
h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 h20 h21 h22 h23 h24 h25 h26 h27 h28 h29 h30 h31 h32 h33 h34 h35 h36 h37 h38 h39 h40 h41 h42 h43 h44 h45 h46 h47 h48 h49 h50 h51 h52 h53 h54 h55 h56 h57 h58 h59 h60 h61 h62 h63 h64
*** Adding switches:
s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 s32 s33 s34 s35 s36 s37 s38 s39 s40 s41 s42 s43 s44 s45 s46 s47 s48 s49 s50 s51 s52 s53 s54 s55 s56 s57 s58 s59 s60 s61 s62 s63
*** Adding links:
(s1, s2) (s1, s33) (s2, s3) (s2, s18) (s3, s4) (s3, s11) (s4, s5) (s4, s8) (s5, s6) (s5, s7) (s6, h1) (s6, h2) (s7, h3) (s7, h4) (s8, s9) (s8, s10) (s9, h5) (s9, h6) (s10, h7) (s10, h8) (s11, s12) (s11, s15) (s12, s13) (s12, s14) (s13, h9) (s13, h10) (s14, h11) (s14, h12) (s15, s16) (s15, s17) (s16, h13) (s16, h14) (s17, h15) (s17, h16) (s18, s19) (s18, s26) (s19, s20) (s19, s23) (s20, s21) (s20, s22) (s21, h17) (s21, h18) (s22, h19) (s22, h20) (s23, s24) (s23, s25) (s24, h21) (s24, h22) (s25, h23) (s25, h24) (s26, s27) (s26, s30) (s27, s28) (s27, s29) (s28, h25) (s28, h26) (s29, h27) (s29, h28) (s30, s31) (s30, s32) (s31, h29) (s31, h30) (s32, h31) (s32, h32) (s33, s34) (s33, s49) (s34, s35) (s34, s42) (s35, s36) (s35, s39) (s36, s37) (s36, s38) (s37, h33) (s37, h34) (s38, h35) (s38, h36) (s39, s40) (s39, s41) (s40, h37) (s40, h38) (s41, h39) (s41, h40) (s42, s43) (s42, s46) (s43, s44) (s43, s45) (s44, h41) (s44, h42) (s45, h43) (s45, h44) (s46, s47) (s46, s48) (s47, h45) (s47, h46) (s48, h47) (s48, h48) (s49, s50) (s49, s57) (s50, s51) (s50, s54) (s51, s52) (s51, s53) (s52, h49) (s52, h50) (s53, h51) (s53, h52) (s54, s55) (s54, s56) (s55, h53) (s55, h54) (s56, h55) (s56, h56) (s57, s58) (s57, s61) (s58, s59) (s58, s60) (s59, h57) (s59, h58) (s60, h59) (s60, h60) (s61, s62) (s61, s63) (s62, h61) (s62, h62) (s63, h63) (s63, h64)
*** Configuring hosts
h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 h20 h21 h22 h23 h24 h25 h26 h27 h28 h29 h30 h31 h32 h33 h34 h35 h36 h37 h38 h39 h40 h41 h42 h43 h44 h45 h46 h47 h48 h49 h50 h51 h52 h53 h54 h55 h56 h57 h58 h59 h60 h61 h62 h63 h64
*** Starting controller
c0
*** Starting 63 switches
s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 s32 s33 s34 s35 s36 s37 s38 s39 s40 s41 s42 s43 s44 s45 s46 s47 s48 s49 s50 s51 s52 s53 s54 s55 s56 s57 s58 s59 s60 s61 s62 s63 ...
*** Starting CLI:

Tuesday, April 28, 2015

Building Karaf-based OpenDaylight Helium from the source

This is going to be a long post, addressing the issues I found as I built OpenDaylight Helium from the source. If you just want to use Karaf-based OpenDaylight, you may just download the pre-built version and execute, as described in my previous post.

This page is based on the wiki (and I suggest reading it first).
Checking out the codefor PROJECT in aaa affinity bgpcep controller defense4all dlux docs groupbasedpolicy integration l2switch \
lispflowmapping odlparent opendove openflowjava openflowplugin opflex ovsdb packetcable releng/autorelease releng/builder reservation sdninterfaceapp sfc snbi snmp4sdn tcpmd5 toolkit ttp vtn yangtools; \
do git clone https://git.opendaylight.org/gerrit/${PROJECT}.git ${PROJECT}; \
done


Checkout Stable branch
 Helium is the latest stable branch, which is all hot and new.
Helium:
$ for i in affinity bgpcep controller lispflowmapping openflowjava openflowplugin ovsdb/commons/parent vtn yangtools
do (cd "$i" && git checkout stable/helium ); done

A few modules already have a Lithium branch. So you may try to build their Lithium branch. However, Lithium build was failing for controller, dlux, and yangtools (at the time of writing), and I had to revert back to the Helium branch to get them built. 

Lithium:
$ for i in affinity bgpcep controller lispflowmapping openflowjava openflowplugin ovsdb/commons/parent vtn yangtools
do (cd "$i" && git checkout stable/lithium ); done

Alternatively, checkout Release tag
Helium:
$ for i in affinity bgpcep controller lispflowmapping openflowjava openflowplugin ovsdb/commons/parent vtn yangtools
do (cd "$i" && git checkout tags/release/helium ); done

Lithium:
$ for i in affinity bgpcep controller lispflowmapping openflowjava openflowplugin ovsdb/commons/parent vtn yangtools
do (cd "$i" && git checkout tags/release/lithium ); done

Maven build
------------------
$ for i in affinity bgpcep controller lispflowmapping openflowjava openflowplugin ovsdb/commons/parent vtn yangtools
do (cd "$i" && mvn clean install ); done
 


 
Execute OpenDaylight Karaf-based distribution$ cd ~/OpenDaylight/controller/opendaylight/distribution/opendaylight-karaf/target/assembly/bin
$ ./karaf


Install Dlux and other relevant features for the interface.
opendaylight-user@root>feature:install odl-restconf odl-l2switch-switch odl-mdsal-apidocs odl-dlux-core
Refreshing bundles org.apache.xbean.finder-shaded (65)
Error executing command: No feature named 'odl-l2switch-switch' with version '0.0.0' available
Error executing command: No feature named 'odl-dlux-core' with version '0.0.0' available

Build Integrator Bundle

This is because controller does not incloude the l2switch and dlux projects in the source code, and they should be built separately. Core features such as MD-SAL and AD-SAL are bundled with controller, and hence can be installed as above using the OSGi console. Hence, we should instead build the integration module following the controller, skipping the tests.
 
$ mvn clean install -D skipTests

$ cd ~/OpenDaylight/integration/distributions/extra/karaf/target/distribution-karaf-0.2.4-SNAPSHOT/bin
Now install the features.
feature:install odl-restconf odl-l2switch-switch odl-mdsal-apidocs odl-dlux-core


Execute the OpenDaylight Build.

Using the OpenDaylight build inside the integration bundle.
$ cd ~/OpenDaylight/integration/distributions/extra/karaf/target/distribution-karaf-0.2.4-SNAPSHOT/bin
$ ./karaf

Now you should be able to log in to the admin console from http://localhost:8181/dlux/index.html#/login

Configuring OpenDaylight Helium with Mininet.

Last year I wrote a post on configuring OpenDaylight Hydrogen with Mininet. Since Helium is here now, you may like to use it instead. First download and configure OpenDaylight Helium. Check the accepted answer for this question to start it real quick.

Now you will be able to connect to Mininet as before.

$ sudo mn --controller=remote,ip=127.0.0.1 --topo tree,6

*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 h20 h21 h22 h23 h24 h25 h26 h27 h28 h29 h30 h31 h32 h33 h34 h35 h36 h37 h38 h39 h40 h41 h42 h43 h44 h45 h46 h47 h48 h49 h50 h51 h52 h53 h54 h55 h56 h57 h58 h59 h60 h61 h62 h63 h64
*** Adding switches:
s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 s32 s33 s34 s35 s36 s37 s38 s39 s40 s41 s42 s43 s44 s45 s46 s47 s48 s49 s50 s51 s52 s53 s54 s55 s56 s57 s58 s59 s60 s61 s62 s63
*** Adding links:
(h1, s6) (h2, s6) (h3, s7) (h4, s7) (h5, s9) (h6, s9) (h7, s10) (h8, s10) (h9, s13) (h10, s13) (h11, s14) (h12, s14) (h13, s16) (h14, s16) (h15, s17) (h16, s17) (h17, s21) (h18, s21) (h19, s22) (h20, s22) (h21, s24) (h22, s24) (h23, s25) (h24, s25) (h25, s28) (h26, s28) (h27, s29) (h28, s29) (h29, s31) (h30, s31) (h31, s32) (h32, s32) (h33, s37) (h34, s37) (h35, s38) (h36, s38) (h37, s40) (h38, s40) (h39, s41) (h40, s41) (h41, s44) (h42, s44) (h43, s45) (h44, s45) (h45, s47) (h46, s47) (h47, s48) (h48, s48) (h49, s52) (h50, s52) (h51, s53) (h52, s53) (h53, s55) (h54, s55) (h55, s56) (h56, s56) (h57, s59) (h58, s59) (h59, s60) (h60, s60) (h61, s62) (h62, s62) (h63, s63) (h64, s63) (s1, s2) (s1, s33) (s2, s3) (s2, s18) (s3, s4) (s3, s11) (s4, s5) (s4, s8) (s5, s6) (s5, s7) (s8, s9) (s8, s10) (s11, s12) (s11, s15) (s12, s13) (s12, s14) (s15, s16) (s15, s17) (s18, s19) (s18, s26) (s19, s20) (s19, s23) (s20, s21) (s20, s22) (s23, s24) (s23, s25) (s26, s27) (s26, s30) (s27, s28) (s27, s29) (s30, s31) (s30, s32) (s33, s34) (s33, s49) (s34, s35) (s34, s42) (s35, s36) (s35, s39) (s36, s37) (s36, s38) (s39, s40) (s39, s41) (s42, s43) (s42, s46) (s43, s44) (s43, s45) (s46, s47) (s46, s48) (s49, s50) (s49, s57) (s50, s51) (s50, s54) (s51, s52) (s51, s53) (s54, s55) (s54, s56) (s57, s58) (s57, s61) (s58, s59) (s58, s60) (s61, s62) (s61, s63)
*** Configuring hosts
h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 h16 h17 h18 h19 h20 h21 h22 h23 h24 h25 h26 h27 h28 h29 h30 h31 h32 h33 h34 h35 h36 h37 h38 h39 h40 h41 h42 h43 h44 h45 h46 h47 h48 h49 h50 h51 h52 h53 h54 h55 h56 h57 h58 h59 h60 h61 h62 h63 h64
*** Starting controller
*** Starting 63 switches
s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 s32 s33 s34 s35 s36 s37 s38 s39 s40 s41 s42 s43 s44 s45 s46 s47 s48 s49 s50 s51 s52 s53 s54 s55 s56 s57 s58 s59 s60 s61 s62 s63
*** Starting CLI:
mininet>

Some screenshots below:

The UI with the nodes
Network
Zoomed!
Nodes
A node


Node connector statistics for a node