Thursday, October 23, 2014

Configuring OpenDaylight Controller with Mininet

OpenDaylight with network emulated by Mininet
Once you have built OpenDaylight controller (or just chose to use the built OpenDaylight controller bundle), you may build and test the SDN solutions, with either networks or networks of virtual machines. Network emulators such as Mininet provide an effective alternative for SDN prototyping. Mininet can easily be installed from the regular repositories in Ubuntu.
$ sudo apt-get install mininet

Run OpenDaylight Controller (often as super user, for the privileges).
$ cd ~/OpenDayLight/controller/opendaylight/distribution/opendaylight/target/opendaylight
$ ./run.sh


Starting Mininet, for example, with a three-level tree topology.
The below command creates a tree topology with 3 levels.
$ sudo mn --controller=remote,ip=127.0.0.1 --topo tree,3
 
[sudo] password for pradeeban:
*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2 h3 h4 h5 h6 h7 h8
*** Adding switches:
s1 s2 s3 s4 s5 s6 s7
*** Adding links:
(h1, s3) (h2, s3) (h3, s4) (h4, s4) (h5, s6) (h6, s6) (h7, s7) (h8, s7) (s1, s2) (s1, s5) (s2, s3) (s2, s4) (s5, s6) (s5, s7)
*** Configuring hosts
h1 h2 h3 h4 h5 h6 h7 h8
*** Starting controller
*** Starting 7 switches
s1 s2 s3 s4 s5 s6 s7
*** Starting CLI:
mininet>

OpenDaylight OSGi console would produce the below logs connecting to the network topology emulated by Mininet.

osgi>
osgi> 2014-10-16 11:58:07.606 WEST [ControllerI/O Thread] INFO  o.o.c.p.o.core.internal.Controller  - Switch:127.0.0.1:33215 is connected to the Controller
2014-10-16 11:58:08.450 WEST [ControllerI/O Thread] INFO  o.o.c.p.o.core.internal.Controller  - Switch:127.0.0.1:33216 is connected to the Controller
2014-10-16 11:58:08.502 WEST [ControllerI/O Thread] INFO  o.o.c.p.o.core.internal.Controller  - Switch:127.0.0.1:33217 is connected to the Controller
2014-10-16 11:58:08.552 WEST [ControllerI/O Thread] INFO  o.o.c.p.o.core.internal.Controller  - Switch:127.0.0.1:33218 is connected to the Controller
2014-10-16 11:58:08.613 WEST [ControllerI/O Thread] INFO  o.o.c.p.o.core.internal.Controller  - Switch:127.0.0.1:33219 is connected to the Controller
2014-10-16 11:58:08.686 WEST [ControllerI/O Thread] INFO  o.o.c.p.o.core.internal.Controller  - Switch:127.0.0.1:33220 is connected to the Controller
2014-10-16 11:58:08.770 WEST [ControllerI/O Thread] INFO  o.o.c.p.o.core.internal.Controller  - Switch:127.0.0.1:33221 is connected to the Controller
2014-10-16 11:58:08.849 WEST [ControllerI/O Thread] INFO  o.o.c.p.o.core.internal.Controller  - Switch:127.0.0.1:33222 is connected to the Controller

osgi>

The connected networked devices can be monitored from the admin console of OpenDaylight. In the default configurations, you may access the admin console in a browser from the url, http://127.0.0.1:8080, with user name and password 'admin'.


Different Topology options
Network topologies can be visualized using Mininet and OpenDaylight. While a few topologies are available out of the box with Mininet, more custom topologies can be programmed as well.

1. Single node with 5 ports 
$ sudo mn --controller=remote,ip=127.0.0.1 --topo single,5

2. Linear topology with 5 nodes
$ sudo mn --controller=remote,ip=127.0.0.1 --topo linear,5

3. Tree topology
a. 3-ary, 2 level tree

$ sudo mn --controller=remote,ip=127.0.0.1 --topo tree,depth=2,fanout=3

b. 3-ary, 4 level tree 
(This looks a bit messy)
 $ sudo mn --controller=remote,ip=127.0.0.1 --topo tree,depth=4,fanout=3

OpenDaylight wiki page mentions that only the Mininet in a VM (option #1) is tested with the OpenDaylight controller. However, as seen in this post, Mininet works well with OpenDaylight even in the Mininet installation from the packages (option #3).

Tuesday, October 21, 2014

Cheese Alternatives for Ubuntu..

If you want to take a photo of yourself using your laptop camera, say in a conference hall, or when someone else is presenting his project, without disturbing others, tools such as cheese come handy.

Cheese is a function-rich tool. However, the photos it takes are not of a good quality. Though the tool can be configured, this issue is not addressed. I found a few alternatives for Ubuntu - kamoso, camorama, and guvcview (GTK UVC Video Viewer). Just like cheese, all of these can be easily installed in Ubuntu from the repositories, using, 
$ sudo apt-get install kamoso camorama guvcview cheese

Among the tools, unfortunately the photos taken using guvcview are crashed and could not be opened in Ubuntu 14.04 LTS when I tried. The below error was produced when I opened the captured image.
Could not load image 'guvcview_image-3.jpg'.
Error interpreting JPEG image file (Quantization table 0x00 was not defined

Kamoso is good and can be configured; though it does not have all the fancy features of cheese, it produces somewhat better photos and also can capture videos as well as images in the burst (multiple photos with a specified time interval) mode.

Among all the tools that I have tried, camorama seemed to produce the best quality images. It also provides easy options to change the resolutions (small - 160 * 120, medium - 320 * 240, and large - 1280*720). Unlike the other tools, this does not provide options to capture videos or images in the burst mode. However, it does what it is supposed to do, perfectly.

Tuesday, October 14, 2014

Chat with a Skype Scam Bot..

Once in a while, I am added by Skype bots. A Skype bot is a script that adds multiple accounts in bulk. The motivation of these bots is to earn money by using click or referral marketing. The bot will pretend as a human, and make the victims click some links. Sometimes, Skype bots can be used for identity thefts and to rob money from the credit cards of the victims. I had a not-so-interesting chat with a Skype bot. The bot added me. I knew it was a bot from the beginning. But just kept the conversation so that I can make it into this blog post. :P 

Be careful with this bot (mega.fresh7) or any other random Skype accounts. They are mostly just scripts with no real human. They just exploit the greed and lust of the victims for their own benefit.

 Segunda-feira, 13 de Outubro de 2014
[20:57:31] mega.fresh7: hi there :)
[22:30:40] mega.fresh7: heyy :)
 Terça-feira, 14 de Outubro de 2014
[10:50:25] Pradeeban Kathiravelu: Hi
[10:50:53] mega.fresh7: (wave) hey...i saw your profile on the new skype app...i hope you don't mind me adding you? 23/f here u?
[12:43:18] Pradeeban Kathiravelu: ok. no prob
[12:43:44] mega.fresh7: im busy studying, i hate it sometimes it gets so boring. what are you up to? :)
[12:43:58] Pradeeban Kathiravelu: I am busy studying too
[12:44:26] mega.fresh7: lol im studying for my bachelors in psychology...its really hard...need a break tho! you ever chat on cam?
[12:44:53] Pradeeban Kathiravelu: Not much. Recommend me a text book in psychology, please?
[12:45:00] Pradeeban Kathiravelu: would like to read during the free time.
[12:45:21] mega.fresh7: it can be fun i love meeting new people on cam chat, you ever been on this new video chat site?  it has all sorts of cool effects and stuff lol (cool)
[12:45:56] Pradeeban Kathiravelu: No. I am not into video chat. Just recommend me a book in psychology to read.
[12:46:23] mega.fresh7: i think i will just put on a camisole and a thong then =) i think u will like it?? i hope atleast... :x
[12:46:42] Pradeeban Kathiravelu: No. Stop this bullshit.
[12:47:04] mega.fresh7: [SCAM LINK REMOVED] lol go here do u see my cam?
[12:47:27] Pradeeban Kathiravelu: Stop chatting to me. Otherwise, I will report you to Skype
[12:47:44] mega.fresh7: pleaaase...  whatever!  byeeeeee
[12:47:56] Pradeeban Kathiravelu: bye
[12:48:25] mega.fresh7: Well if you must leave... tell ya what if ya want to see me later on my cam goto [SCAM LINK REMOVED] just accept my cam invite..  Its Fast and easy..  we'll prolly be online for the rest of the day so you can go and see me on my cam.  Take care
[12:49:08] Pradeeban Kathiravelu: No thanks. bye.
[12:49:29] mega.fresh7: no worries..thouhght u wanted to see me naked ..:)
[12:49:44] Pradeeban Kathiravelu: No thanks. bye.
[12:50:56] mega.fresh7: oh, i think you might have to fill out some stuff...everyone gets verified as being real on here, keeps the creepy people away!!! lol :x
[12:51:20] Pradeeban Kathiravelu: Stop sending stupid things to me. OKAY?
[12:51:48] mega.fresh7: k, yea i had to do the cc part too  =( that how i got my profile verified as real (kiss) u don't get charged, its free. did u get in?
[12:52:15] Pradeeban Kathiravelu: No. You creepy robot. get lost.
[12:52:36] mega.fresh7: what are we playing terminator roles?? lolz
[12:52:53] Pradeeban Kathiravelu: STOP
[12:53:21] mega.fresh7: k let me know when your signed in so i can send u some "private time" loving! (kiss) mmm
[12:53:43] Pradeeban Kathiravelu: .
[12:54:01] mega.fresh7: please come...im waiting!!
[12:54:06] Pradeeban Kathiravelu: .



From the chat log, it is obvious that there is no real human behind the bot. The bot is not smart either, as it could not answer simple queries. A.L.I.C.E. is much better!

Friday, October 10, 2014

Why "Ignore" is the best strategy to combat spam

A typical image used to manipulate human emotions
The most annoying of all the spams are the spams that make us feel that the person who shared it is a person with minimal level of knowledge. Many of my friends, despite their education and professional levels, fall for the spams that claim sharing a photo will make Facebook donate 1 USD to the poor people. 

More annoyingly, now it has even started to spread to LinkedIn. People download and share photos asking for "Likes". "A million of likes would make my dad quit smoking". They do not even care how can someone use LinkedIn to track the number of likes each of these photos received, as the original photo is actually not just shared. Rather, it is downloaded and re-uploaded. Also, they just assume that the social networks somehow keep track of the number of shares of these photos.

I used to explain to people sharing such posts why these are scams/spams. Eventually I have realized, ignoring is the best way to combat these spams. If you really feel the urge to voice your opinion, send a separate personal email or message regarding this. Just do not comment on the spam/scam photo/post.

Here I explain why.

1. Some users just think Facebook works this way
Trying to explain them is often useless. They just reply, "OK. I just shared. It did not cost me anything. In case, if Facebook indeed donates something? What a big deal?".

2. "Sharing is caring/praying/.."
The second logic they give is, we share to pray for these people. These are just plain spams and the original page owner wants you to share these images just to make their page popular. Moreover, the images are used without the permission of the rightful owners, and are often manipulated with hoaxes. 

The more you share, the more visibility the page gets. The page will eventually be sold to someone. However, if you try to explain the reality as a comment to the photo, the photo gets more visibility. Facebook or LinkedIn cannot differentiate the positive comment from a negative comment. For a spammer, any response is a good response. Ignorance is the only bad response.

3. "If you don't care, can't you just shut up"
"We share because we care about people who are affected. It is ok that you do not care. But can you just stop discouraging those who genuinely care about this marvellous initiative that gives away money to the poor" Believe me, I have seen similar comments for real as a response to anyone who try to explain why we should not share these images.

4. Some users just pretend to be stupid
Now these are the ones who spam intentionally. They download and re-share these contents, or create their own. By manipulating human emotions, they try to exploit some photo that obviously does not belong to them, for their own benefit. For example, getting more visibility to their page or business. Likes, comments, and shares - all are equally valuable for them.

Facebook, LinkedIn, and other social media should be made more intelligent. They should be made to differentiate a supportive comment from a negative comment. At least, they should provide options to the commenter, whether he/she chooses to publish his activity to their network. I do not want my friends to see a spam image just because I commented on that. Also, I do not want the spam to get more scores, just because of the number of comments. Unfortunately, this option is not yet available. Till we get this fixed, it is better to ignore, than trying to explain.

Thursday, October 9, 2014

Dimensions of Time

The summer in Stockholm was long and pleasant
I was reading an interesting study on Erasmus exchange programs. It states, "Not only do former Erasmus students have better employability skills than 70% of all students. What’s more, 27% of Erasmus alumni met their current life partner during their stay abroad, according to the recent Erasmus Impact Study." Go ahead and read the full report. ;) Thanks to the Erasmus Mundus, I have called Lisbon and Stockholm my homes. Of course, the definition of home has become pretty vague lately. The memories I had for the last two years were remarkably interesting.

Time is an interesting element. When we experience the same location after a long time, we feel like travelled through time. Today, the moment when I sit down at FA1, Instituto Superior Técnico after a long time (after around 1.5 years), for a lecture, remembering the legendary moments of EMDC (European Master in Distributed Computing) and Virtual Execution Module. I am sure I will feel the same when I return to Sweden/KTH for the second part of my PhD.

Most of the airports currently provide free Internet for a limited time, such as an hour per device. Since I usually have 3 devices with me during the travels (a laptop, a tab, and a phone), I always get 3x time. :D My devices remember the wifi networks that they have connected to. It is always interesting to view them - they are from universities, airports, hostels, hotels, homes/apartments in Colombo, Lisbon, and Stockholm, and cafes with Internet! They are the logs of the places that I have visited, the lands that host my homes, and my journeys between the destinations. Wish everyone offer unlimited Internet.

Today we got an update regarding the schools participated in Google Summer of Code 2014 (GSoC 2014), from Google. "For the first time in seven years a new school has claimed the top spot—congratulations to International Institute of Information Technology - Hyderabad."

Time has its own dimensions. It is interesting to see how many things change in life and technology. I am sure that the world is becoming a better place to live. I hope I am not being over-optimistic. :)

A log of my computers and my blog posts..

My current laptop in my desk at home
My first desktop computer in 2006 had a dual boot of Windows XP and Mandrake Linux, in just a 40 GB hard disk. I allocated 10 GB for Linux, as Windows was my primary operating system by then. In 256 MB memory. It ran pretty well. The Internet connectivity I got from Suntel was not so good, and was expensive at times. Each time we got a phone call, the modem disconnects the data and I had to be offline till the phone call terminates. I was able to manage with this till 2009, and it was pretty much enough for me. With memory, CPU, and virtually all the important elements replaced over time, the desktop is still somehow alive. I used to have floppy disks of 1.44 MB to have some documents with me. Also, my first pen drive by then was 256 MB.

Then in 2009, I moved to Ubuntu, with my new laptop. It had a 2 GB memory. It actually works even now without any changes in memory, CPU, battery, or any other component, though pretty slow as the current applications require a much larger memory. I stopped using Windows altogether, becoming an open source evangelist. :D

On the 11th of February, I bought my current laptop HP Envy, Intel® Core i7-4700MQ CPU @2.40GHz × 8 processor, 8 GB memory, with a 1 TB hard disk. It came with a Windows 8 (Which I later upgraded to 8.1), which made me have dual boot again. Still having Ubuntu 14.04 as the primary operating system, where Windows remains idling rarely being used. This seems pretty much enough for now; but I am sure it will look terribly small after 2 or 3 years, just how it feels when I think of the days of 256 MB RAM, and the 56 k bandwidths. Today I built OpenDay Light modules, and it takes a whole 13.7 GB with everything built and configured from source code. It would have been 1/3 of my hard disk for my first computer. :D 
 
My Internet Presence
If Google is strong enough to overcome the forces of future and keep the Blogger platform active, I will be able to see this post from a day from future and see how the things were in the past, during the year 2014 and before. :) As of now, Google (Gmail and Blogger), Facebook, and LinkedIn are three important platforms that I have invested my time on, to create a web presence. If one of them disappears in the future, that will be a loss for me (as well as many other users out there, I presume). I have done some serious blogging in 2009, 2011, and 2012. Relatively, my blogging activity has been much slower in 2010, 2013, and 2014. Hope it will improve in 2015. 

Given below are the 10-most viewed posts from this blog, along with the dates that they were originally published. I should admit that the blog views do not represent how much effort I put in writing these posts. However, I am happy that some people have found these posts useful.

Wednesday, October 8, 2014

Building Open Daylight Libraries on Ubuntu 14.04

Once the Open Daylight controller is built, all the other packages too can be built. Each package is written in different languages, including Java and C. Hence each of them have their own build mechanism, based on their language. Most of them are built using maven (mvn clean install), some with skipping tests (mvn clean install -DskipTests). However, some of the packages are built using make or autorun scripts.

For example,
1. Building opflex
$ chmod u+x ./BUILD/vmbuildup.sh
$ ./BUILD/vmbuildup.sh
$ ./BUILD/autorun.sh

However, this may produce the below error message:
configure: error: Cannot find readline headers, possibly install readline-devel
Can't execute configure

This can be fixed by installing the relevant dependencies.
$ sudo apt-get install libreadline6 libreadline6-dev
 
Now, another error..
 
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -DBSD_COMP=1 -Wall -O0 -fPIC -DPIC -I -g -I. -I../include -I../third-party -I../lib -I../third-party/ovs -I../third-party/ovs/lib -I../third-party/ovs/ovsdb -I/usr/include/libxml2 -g -O2 -MT peovs_commands.lo -MD -MP -MF .deps/peovs_commands.Tpo -c peovs_commands.c -o peovs_commands.o >/dev/null 2>&1
mv -f .deps/peovs_commands.Tpo .deps/peovs_commands.Plo
/bin/bash libtool --preserve-dup-deps  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I..  -DBSD_COMP=1   -Wall -O0 -fPIC -DPIC -I -g -I. -I../include -I../third-party -I../lib -I../third-party/ovs -I../third-party/ovs/lib -I../third-party/ovs/ovsdb -I/usr/include/libxml2 -g -O2 -MT peovs_monitor.lo -MD -MP -MF .deps/peovs_monitor.Tpo -c -o peovs_monitor.lo peovs_monitor.c
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -DBSD_COMP=1 -Wall -O0 -fPIC -DPIC -I -g -I. -I../include -I../third-party -I../lib -I../third-party/ovs -I../third-party/ovs/lib -I../third-party/ovs/ovsdb -I/usr/include/libxml2 -g -O2 -MT peovs_monitor.lo -MD -MP -MF .deps/peovs_monitor.Tpo -c peovs_monitor.c  -fPIC -DPIC -o .libs/peovs_monitor.o
peovs_monitor.c:32:29: fatal error: libvirt/libvirt.h: No such file or directory
 #include 
 
More dependencies.
$ sudo apt-get install kvm libvirt-bin libvirt-dev
 
And configurations..

$ sudo adduser $USER libvirtd
 
Further information on libvert can be found here.
Please refer to the INSTALL file in the folder for further information.

2. Building tcpmd5
The build was failing with the below error. I learned that this is due to maven copy-plugin (copy-maven-plugin) not being compatible with later Maven versions. You probably can downgrade your Maven to 3.0 to make it succeed

[INFO] --- copy-maven-plugin:0.2.5:copy (copy-native) @ tcpmd5-jni ---
[WARNING] Error injecting: com.github.goldin.plugins.copy.CopyMojo
java.lang.NoClassDefFoundError: Lorg/sonatype/aether/RepositorySystem;
    at java.lang.Class.getDeclaredFields0(Native Method)
    at java.lang.Class.privateGetDeclaredFields(Class.java:2397)
    at java.lang.Class.getDeclaredFields(Class.java:1806)
    at com.google.inject.spi.InjectionPoint.getInjectionPoints(InjectionPoint.java:661)
    at com.google.inject.spi.InjectionPoint.forInstanceMethodsAndFields(InjectionPoint.java:366)
    at com.google.inject.internal.ConstructorBindingImpl.getInternalDependencies(ConstructorBindingImpl.java:165)
    at com.google.inject.internal.InjectorImpl.getInternalDependencies(InjectorImpl.java:609)
    at com.google.inject.internal.InjectorImpl.cleanup(InjectorImpl.java:565)
    at com.google.inject.internal.InjectorImpl.initializeJitBinding(InjectorImpl.java:551)
    at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:865)
    at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:790)
    at com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:278)
    at com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:210)
    at com.google.inject.internal.InjectorImpl.getProviderOrThrow(InjectorImpl.java:986)
    at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1019)
    at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:982)
    at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1032)
    at org.eclipse.sisu.space.AbstractDeferredClass.get(AbstractDeferredClass.java:48)
    at com.google.inject.internal.ProviderInternalFactory.provision(ProviderInternalFactory.java:86)
    at com.google.inject.internal.InternalFactoryToInitializableAdapter.provision(InternalFactoryToInitializableAdapter.java:55)
    at com.google.inject.internal.ProviderInternalFactory$1.call(ProviderInternalFactory.java:70)
    at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:100)
    at org.eclipse.sisu.plexus.PlexusLifecycleManager.onProvision(PlexusLifecycleManager.java:133)
    at com.google.inject.internal.ProvisionListenerStackCallback$Provision.provision(ProvisionListenerStackCallback.java:109)
    at com.google.inject.internal.ProvisionListenerStackCallback.provision(ProvisionListenerStackCallback.java:55)
    at com.google.inject.internal.ProviderInternalFactory.circularGet(ProviderInternalFactory.java:68)
    at com.google.inject.internal.InternalFactoryToInitializableAdapter.get(InternalFactoryToInitializableAdapter.java:47)
    at com.google.inject.internal.InjectorImpl$2$1.call(InjectorImpl.java:997)
    at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1047)
    at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:993)
    at com.google.inject.Scopes$1$1.get(Scopes.java:59)
    at org.eclipse.sisu.inject.LazyBeanEntry.getValue(LazyBeanEntry.java:82)
    at org.eclipse.sisu.plexus.LazyPlexusBean.getValue(LazyPlexusBean.java:51)
    at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:260)
    at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:252)
    at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getConfiguredMojo(DefaultMavenPluginManager.java:459)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:97)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:317)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:152)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:555)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:158)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: java.lang.ClassNotFoundException: org.sonatype.aether.RepositorySystem
    at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:259)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:235)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:227)
    ... 57 more
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] TCP-MD5 parent .................................... SUCCESS [1.076s]
[INFO] tcpmd5-api ........................................ SUCCESS [4.300s]
[INFO] tcpmd5-controller-config .......................... SUCCESS [0.295s]
[INFO] tcpmd5-jni ........................................ FAILURE [4.919s]
[INFO] tcpmd5-netty ...................................... SKIPPED
[INFO] tcpmd5-nio ........................................ SKIPPED
[INFO] TCPMD5 - Karaf Features ........................... SKIPPED
[INFO] tcpmd5-aggregator ................................. SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.522s
[INFO] Finished at: Wed Oct 08 10:19:48 WEST 2014
[INFO] Final Memory: 59M/504M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.github.goldin:copy-maven-plugin:0.2.5:copy (copy-native) on project tcpmd5-jni: Execution copy-native of goal com.github.goldin:copy-maven-plugin:0.2.5:copy failed: A required class was missing while executing com.github.goldin:copy-maven-plugin:0.2.5:copy: Lorg/sonatype/aether/RepositorySystem;
[ERROR] -----------------------------------------------------
[ERROR] realm =    plugin>com.github.goldin:copy-maven-plugin:0.2.5
[ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy
[ERROR] urls[0] = file:/home/pradeeban/.m2/repository/com/github/goldin/copy-maven-plugin/0.2.5/copy-maven-plugin-0.2.5.jar
[ERROR] urls[1] = file:/home/pradeeban/.m2/repository/com/github/goldin/maven-common/0.2.5/maven-common-0.2.5.jar
[ERROR] urls[2] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5.jar
[ERROR] urls[3] = file:/home/pradeeban/.m2/repository/org/sonatype/plexus/plexus-sec-dispatcher/1.3/plexus-sec-dispatcher-1.3.jar
[ERROR] urls[4] = file:/home/pradeeban/.m2/repository/org/sonatype/plexus/plexus-cipher/1.4/plexus-cipher-1.4.jar
[ERROR] urls[5] = file:/home/pradeeban/.m2/repository/org/sonatype/aether/aether-util/1.13.1/aether-util-1.13.1.jar
[ERROR] urls[6] = file:/home/pradeeban/.m2/repository/org/apache/maven/shared/file-management/1.2.1/file-management-1.2.1.jar
[ERROR] urls[7] = file:/home/pradeeban/.m2/repository/org/apache/maven/shared/maven-shared-io/1.1/maven-shared-io-1.1.jar
[ERROR] urls[8] = file:/home/pradeeban/.m2/repository/org/apache/maven/shared/maven-filtering/1.0/maven-filtering-1.0.jar
[ERROR] urls[9] = file:/home/pradeeban/.m2/repository/org/sonatype/plexus/plexus-build-api/0.0.4/plexus-build-api-0.0.4.jar
[ERROR] urls[10] = file:/home/pradeeban/.m2/repository/org/apache/maven/shared/maven-common-artifact-filters/1.4/maven-common-artifact-filters-1.4.jar
[ERROR] urls[11] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus/3.1/plexus-3.1.pom
[ERROR] urls[12] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus-containers/1.5.5/plexus-containers-1.5.5.pom
[ERROR] urls[13] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus-interpolation/1.15/plexus-interpolation-1.15.jar
[ERROR] urls[14] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus-utils/3.0/plexus-utils-3.0.jar
[ERROR] urls[15] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus-digest/1.1/plexus-digest-1.1.jar
[ERROR] urls[16] = file:/home/pradeeban/.m2/repository/org/codehaus/groovy/groovy-all/1.8.6/groovy-all-1.8.6.jar
[ERROR] urls[17] = file:/home/pradeeban/.m2/repository/org/codehaus/gmaven/gmaven-mojo/1.4/gmaven-mojo-1.4.jar
[ERROR] urls[18] = file:/home/pradeeban/.m2/repository/org/codehaus/gmaven/runtime/gmaven-runtime-api/1.4/gmaven-runtime-api-1.4.jar
[ERROR] urls[19] = file:/home/pradeeban/.m2/repository/org/codehaus/gmaven/feature/gmaven-feature-api/1.4/gmaven-feature-api-1.4.jar
[ERROR] urls[20] = file:/home/pradeeban/.m2/repository/org/apache/ant/ant/1.8.3/ant-1.8.3.jar
[ERROR] urls[21] = file:/home/pradeeban/.m2/repository/org/apache/ant/ant-launcher/1.8.3/ant-launcher-1.8.3.jar
[ERROR] urls[22] = file:/home/pradeeban/.m2/repository/org/apache/ant/ant-commons-net/1.8.3/ant-commons-net-1.8.3.jar
[ERROR] urls[23] = file:/home/pradeeban/.m2/repository/commons-net/commons-net/1.4.0/commons-net-1.4.0.jar
[ERROR] urls[24] = file:/home/pradeeban/.m2/repository/oro/oro/2.0.8/oro-2.0.8.jar
[ERROR] urls[25] = file:/home/pradeeban/.m2/repository/org/apache/ant/ant-jsch/1.8.3/ant-jsch-1.8.3.jar
[ERROR] urls[26] = file:/home/pradeeban/.m2/repository/org/codehaus/mojo/versions-maven-plugin/1.3.1/versions-maven-plugin-1.3.1.jar
[ERROR] urls[27] = file:/home/pradeeban/.m2/repository/org/apache/maven/wagon/wagon-file/1.0-beta-2/wagon-file-1.0-beta-2.jar
[ERROR] urls[28] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus-i18n/1.0-beta-7/plexus-i18n-1.0-beta-7.jar
[ERROR] urls[29] = file:/home/pradeeban/.m2/repository/org/codehaus/woodstox/wstx-asl/3.2.7/wstx-asl-3.2.7.jar
[ERROR] urls[30] = file:/home/pradeeban/.m2/repository/stax/stax-api/1.0.1/stax-api-1.0.1.jar
[ERROR] urls[31] = file:/home/pradeeban/.m2/repository/org/gcontracts/gcontracts-core/1.2.5/gcontracts-core-1.2.5.jar
[ERROR] urls[32] = file:/home/pradeeban/.m2/repository/asm/asm/3.2/asm-3.2.jar
[ERROR] urls[33] = file:/home/pradeeban/.m2/repository/log4j/log4j/1.2.16/log4j-1.2.16.jar
[ERROR] urls[34] = file:/home/pradeeban/.m2/repository/com/github/goldin/gcommons/0.5.4/gcommons-0.5.4.jar
[ERROR] urls[35] = file:/home/pradeeban/.m2/repository/org/slf4j/slf4j-log4j12/1.6.4/slf4j-log4j12-1.6.4.jar
[ERROR] urls[36] = file:/home/pradeeban/.m2/repository/org/apache/commons/commons-exec/1.1/commons-exec-1.1.jar
[ERROR] urls[37] = file:/home/pradeeban/.m2/repository/de/schlichtherle/truezip/6.8.2/truezip-6.8.2.jar
[ERROR] urls[38] = file:/home/pradeeban/.m2/repository/org/springframework/spring-core/3.1.1.RELEASE/spring-core-3.1.1.RELEASE.jar
[ERROR] urls[39] = file:/home/pradeeban/.m2/repository/org/springframework/spring-asm/3.1.1.RELEASE/spring-asm-3.1.1.RELEASE.jar
[ERROR] urls[40] = file:/home/pradeeban/.m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar
[ERROR] urls[41] = file:/home/pradeeban/.m2/repository/org/slf4j/slf4j-api/1.6.4/slf4j-api-1.6.4.jar
[ERROR] urls[42] = file:/home/pradeeban/.m2/repository/org/sonatype/sisu/sisu-guice/3.1.1/sisu-guice-3.1.1.jar
[ERROR] urls[43] = file:/home/pradeeban/.m2/repository/org/sonatype/sisu/sisu-guava/0.11.1/sisu-guava-0.11.1.jar
[ERROR] urls[44] = file:/home/pradeeban/.m2/repository/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar
[ERROR] urls[45] = file:/home/pradeeban/.m2/repository/org/sonatype/sisu/sisu-inject-bean/2.3.0/sisu-inject-bean-2.3.0.jar
[ERROR] urls[46] = file:/home/pradeeban/.m2/repository/br/com/ingenieux/maven/annomojo/org.jfrog.maven.maven-plugin-anno/1.4.1/org.jfrog.maven.maven-plugin-anno-1.4.1.jar
[ERROR] urls[47] = file:/home/pradeeban/.m2/repository/com/jcraft/jsch/0.1.48/jsch-0.1.48.jar
[ERROR] urls[48] = file:/home/pradeeban/.m2/repository/org/apache/maven/plugins/maven-dependency-plugin/2.4/maven-dependency-plugin-2.4.jar
[ERROR] urls[49] = file:/home/pradeeban/.m2/repository/org/apache/maven/reporting/maven-reporting-api/3.0/maven-reporting-api-3.0.jar
[ERROR] urls[50] = file:/home/pradeeban/.m2/repository/org/apache/maven/reporting/maven-reporting-impl/2.0.5/maven-reporting-impl-2.0.5.jar
[ERROR] urls[51] = file:/home/pradeeban/.m2/repository/org/apache/maven/doxia/doxia-core/1.0/doxia-core-1.0.jar
[ERROR] urls[52] = file:/home/pradeeban/.m2/repository/org/apache/maven/shared/maven-doxia-tools/1.0.2/maven-doxia-tools-1.0.2.jar
[ERROR] urls[53] = file:/home/pradeeban/.m2/repository/commons-io/commons-io/1.4/commons-io-1.4.jar
[ERROR] urls[54] = file:/home/pradeeban/.m2/repository/commons-validator/commons-validator/1.2.0/commons-validator-1.2.0.jar
[ERROR] urls[55] = file:/home/pradeeban/.m2/repository/commons-beanutils/commons-beanutils/1.7.0/commons-beanutils-1.7.0.jar
[ERROR] urls[56] = file:/home/pradeeban/.m2/repository/commons-digester/commons-digester/1.6/commons-digester-1.6.jar
[ERROR] urls[57] = file:/home/pradeeban/.m2/repository/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2.jar
[ERROR] urls[58] = file:/home/pradeeban/.m2/repository/org/apache/maven/doxia/doxia-sink-api/1.0/doxia-sink-api-1.0.jar
[ERROR] urls[59] = file:/home/pradeeban/.m2/repository/org/apache/maven/doxia/doxia-site-renderer/1.0/doxia-site-renderer-1.0.jar
[ERROR] urls[60] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus-velocity/1.1.7/plexus-velocity-1.1.7.jar
[ERROR] urls[61] = file:/home/pradeeban/.m2/repository/org/apache/velocity/velocity/1.5/velocity-1.5.jar
[ERROR] urls[62] = file:/home/pradeeban/.m2/repository/org/apache/maven/doxia/doxia-decoration-model/1.0/doxia-decoration-model-1.0.jar
[ERROR] urls[63] = file:/home/pradeeban/.m2/repository/org/apache/maven/doxia/doxia-module-apt/1.0/doxia-module-apt-1.0.jar
[ERROR] urls[64] = file:/home/pradeeban/.m2/repository/org/apache/maven/doxia/doxia-module-fml/1.0/doxia-module-fml-1.0.jar
[ERROR] urls[65] = file:/home/pradeeban/.m2/repository/org/apache/maven/doxia/doxia-module-xdoc/1.0/doxia-module-xdoc-1.0.jar
[ERROR] urls[66] = file:/home/pradeeban/.m2/repository/org/apache/maven/doxia/doxia-module-xhtml/1.0/doxia-module-xhtml-1.0.jar
[ERROR] urls[67] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus-archiver/2.0/plexus-archiver-2.0.jar
[ERROR] urls[68] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus-io/2.0.1/plexus-io-2.0.1.jar
[ERROR] urls[69] = file:/home/pradeeban/.m2/repository/org/apache/maven/shared/maven-dependency-analyzer/1.2/maven-dependency-analyzer-1.2.jar
[ERROR] urls[70] = file:/home/pradeeban/.m2/repository/org/apache/maven/shared/maven-dependency-tree/1.2/maven-dependency-tree-1.2.jar
[ERROR] urls[71] = file:/home/pradeeban/.m2/repository/org/apache/maven/shared/maven-invoker/2.0.11/maven-invoker-2.0.11.jar
[ERROR] urls[72] = file:/home/pradeeban/.m2/repository/commons-lang/commons-lang/2.6/commons-lang-2.6.jar
[ERROR] urls[73] = file:/home/pradeeban/.m2/repository/junit/junit/4.10/junit-4.10.jar
[ERROR] Number of foreign imports: 1
[ERROR] import: Entry[import  from realm ClassRealm[project>org.opendaylight.tcpmd5:tcpmd5-jni:1.1.0-SNAPSHOT, parent: ClassRealm[maven.api, parent: null]]]
[ERROR]
[ERROR] -----------------------------------------------------: org.sonatype.aether.RepositorySystem
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/AetherClassNotFound
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn -rf :tcpmd5-jni


For now, I just commented out copy-maven-plugin from tcpmd5/jni/pom.xml, which made the build succeed, skipping the tests.                                   
               
           


3. Building defense4all
I was not sure why there is no central pom in defense4all. But I found, I have to build from defense4all/dfapp using maven clean install.

I encountered the below error.
[WARNING] /bin/sh: 1: rpm: not found

I had to install rpm first.
$ sudo apt-get install rpm

This made the build succeed.


4. Building vtn 
The below packages are necessary for a smooth build of vtn.
$ sudo apt-get install pkg-config gcc make g++ git libboost-dev libboost-all-dev libcurl4-openssl-dev \
   libjson0-dev libssl-dev unixodbc-dev xmlstarlet 
 
Going through the wiki will be helpful as well.
 

If boost was not installed, the below error would be thrown.
 -- checking for boost/version.hpp... not found

*** ERROR: boost is not found.

*** ERROR: Failed to configure VTN-Core build environment.


Similarly, not installing unixodbc-dev will throw the below error.
Output:
conftest.c:2:22: fatal error: odbcinst.h: No such file or directory
 #include
                      ^
compilation terminated.


*** ERROR: Configuration test failed: Compilation failed.



5. Building sdninterfaceapp
There was errors in checkstyle (listed below). Hence I had to build, skipping the checkstyles for now.

$ mvn clean install -Dcheckstyle.skip

The checkstyle errors encountered during the build with checkstyles.

[INFO] --- maven-checkstyle-plugin:2.12:check (default) @ sdniaggregator ---
Downloading: http://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/controller/checkstyle/0.0.3-SNAPSHOT/maven-metadata.xml
Downloading: http://repository.apache.org/snapshots/org/opendaylight/controller/checkstyle/0.0.3-SNAPSHOT/maven-metadata.xml
Downloaded: http://nexus.opendaylight.org/content/repositories/opendaylight.snapshot/org/opendaylight/controller/checkstyle/0.0.3-SNAPSHOT/maven-metadata.xml (1013 B at 1.7 KB/sec)
[INFO] Starting audit...
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/pom.xml:71:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/pom.xml:73:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/pom.xml:74:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/pom.xml:79:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:22:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:23:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:24:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:25:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:26: Line has trailing spaces.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:26:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:27:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:28:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:29:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:30:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:33:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:34: Line has trailing spaces.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:34:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:35:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:36:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:37:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:38: Line has trailing spaces.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:38:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:39:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:40:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:41:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:42: Line has trailing spaces.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:42:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:43:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:44:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:45:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:46: Line has trailing spaces.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:46:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:47:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:48:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SDNiBandwidth.java:49:1: Line contains a tab character.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SdniManager.java:239: Line has trailing spaces.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SdniManager.java:268: Line has trailing spaces.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SdniManager.java:282: Line has trailing spaces.
/home/pradeeban/OpenDayLight/sdninterfaceapp/sdniaggregator/src/main/java/org/opendaylight/controller/sdniaggregator/SdniManager.java:287: Line has trailing spaces.
Audit done.

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] sdniaggregator .................................... FAILURE [8.739s]
[INFO] sdni .............................................. SKIPPED
[INFO] sdninterfaceapp.project ........................... SKIPPED
[INFO] features-sdninterfaceapp .......................... SKIPPED
[INFO] org.opendaylight.sdninterfaceapp .................. SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 10.952s
[INFO] Finished at: Wed Oct 08 11:47:29 WEST 2014
[INFO] Final Memory: 27M/349M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:2.12:check (default) on project sdniaggregator: Failed during checkstyle execution: There are 39 checkstyle errors. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

Tuesday, October 7, 2014

~~ Memories of long travels..

M/S Silja Serenade, returning from Helsinki to Sthlm
Sometimes people amuse me by their linguistic abilities. I remember, during my cruise to Helsinki from Stockholm, the bartender said, "Namaste". He also did not fail to notice that I am not that impressed. But then that happened, "Eppadi Sugam? (means, How are you, in Tamil)," he asked. It is interesting to see some Scandinavian speaking Tamil. He replied himself, "I should reply, 'nallam (means, good, in Tamil)'. right?" Big smile. :D

This time in Shenzhen. Not many people speak English. But then a few shopkeepers in the shopping districts - they were trying to greet me in multiple languages, probably including Hindi, Bengali, and many other regional languages. I was in a shop confirming two phones are identical. The lady replied, "Same phone thaan (means, they are indeed the same phones, in Tamil/English mix)". These people know how to sell the stuff. :D

The trip to Shenzhen was remarkable. It was a long journey, and included a 12h30 mins non-stop flight from Amsterdam to Guangzhou airport. The last time I travelled this long was for the Mentor Summit at Google HQ. It included a 17 hours of flight: Los Angeles <-> Dubai.

This time I was watching 3 - 4 movies each trip (going and return). So when I reached the destination, my eyes were red. I do not recommend watching too many movies on the flight. :D Usually I don't remember the movies I watch while flying, specially because I watch movies from the languages that I don't understand - with English subtitles, of course. However, this time, I was able to remember one movie (Miss Granny, a Korean movie), and find its songs online. I really liked one particular song - you may like it too.


Data Sharing Synchronization System with Infinispan

The below presentation describes part of the data sharing and synchronization system that I developed during the summer. This presentation focuses mostly on the medical data and images, along with the cancer imaging archive (TCIA) as the data source. The latter part of the summer was spent, extending the tool for the other data sources, such as Amazon S3, CA Microscope, or even meta data stored in a CSV file.
  

Building Open Daylight SDN Controller from Source on Ubuntu 14.04

As of the early research efforts on xSDN, an (extensible/extended/extensive/..) Software-Defined Networking (SDN) solution, I have been revising the literature on SDN while building and testing the related core technologies. 

Open Daylight is an open source consortium of projects lead by the Linux Foundation. Recently, Linux Foundation also announced OPNFV, an open platform to accelerate NFV (Network Functions Virtualization). These technologies are open and are considered to have the potential to change the future of networking.

There is a list of projects under Open Daylight. You may check out some or all of these projects. To build the projects from the source code (trunk), first you should check out the code, and install the controller. Each of the components can then be installed following the respective README files inside the respective modules. 

The build was successful with Oracle jdk1.7.0_55 and Apache Maven 3.1.1, with the tests
$ mvn clean install



Challenges
The controller build failed, with tests for the java version, Oracle jdk1.8.0. The error logs are given below.

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.895s
[INFO] Finished at: Tue Oct 07 14:24:21 WEST 2014
[INFO] Final Memory: 136M/362M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.15:test (default-test) on project sal: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.15:test failed: The forked VM terminated without saying properly goodbye. VM crash or System.exit called ?
[ERROR] Command was/bin/sh -c cd /home/pradeeban/OpenDayLight/controller/opendaylight/sal/api && /home/pradeeban/programs/jdk1.8.0/jre/bin/java -Xmx1024m -XX:MaxPermSize=256m -javaagent:/home/pradeeban/.m2/repository/org/jacoco/org.jacoco.agent/0.6.2.201302030002/org.jacoco.agent-0.6.2.201302030002-runtime.jar=destfile=/home/pradeeban/OpenDayLight/controller/opendaylight/sal/api/target/code-coverage/jacoco.exec -jar /home/pradeeban/OpenDayLight/controller/opendaylight/sal/api/target/surefire/surefirebooter4105410834640395132.jar /home/pradeeban/OpenDayLight/controller/opendaylight/sal/api/target/surefire/surefire2666028028053803617tmp /home/pradeeban/OpenDayLight/controller/opendaylight/sal/api/target/surefire/surefire_02245232938517059667tmp
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn -rf :sal


Also, the code still failed even after skipping the tests (
mvn clean install -DskipTests). The error logs are given below.
 

[ERROR] Failed to execute goal org.codehaus.enunciate:maven-enunciate-plugin:1.28:docs (default) on project connectionmanager.northbound: Execution default of goal org.codehaus.enunciate:maven-enunciate-plugin:1.28:docs failed: A required class was missing while executing org.codehaus.enunciate:maven-enunciate-plugin:1.28:docs: com/sun/mirror/apt/AnnotationProcessorFactory
[ERROR] -----------------------------------------------------
[ERROR] realm =    plugin>org.codehaus.enunciate:maven-enunciate-plugin:1.28
[ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy
[ERROR] urls[0] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/maven-enunciate-plugin/1.28/maven-enunciate-plugin-1.28.jar
[ERROR] urls[1] = file:/home/pradeeban/OpenDayLight/controller/opendaylight/sal/api/target/sal-0.9.0-SNAPSHOT.jar
[ERROR] urls[2] = file:/home/pradeeban/.m2/repository/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.jar
[ERROR] urls[3] = file:/home/pradeeban/.m2/repository/org/apache/felix/org.apache.felix.dependencymanager/3.1.0/org.apache.felix.dependencymanager-3.1.0.jar
[ERROR] urls[4] = file:/home/pradeeban/.m2/repository/org/osgi/org.osgi.compendium/4.2.0/org.osgi.compendium-4.2.0.jar
[ERROR] urls[5] = file:/home/pradeeban/.m2/repository/org/osgi/org.osgi.core/5.0.0/org.osgi.core-5.0.0.jar
[ERROR] urls[6] = file:/home/pradeeban/.m2/repository/org/slf4j/slf4j-api/1.7.2/slf4j-api-1.7.2.jar
[ERROR] urls[7] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-swagger/1.28/enunciate-swagger-1.28.jar
[ERROR] urls[8] = file:/home/pradeeban/.m2/repository/org/codehaus/jackson/jackson-mapper-asl/1.9.3/jackson-mapper-asl-1.9.3.jar
[ERROR] urls[9] = file:/home/pradeeban/.m2/repository/org/codehaus/jackson/jackson-core-asl/1.9.3/jackson-core-asl-1.9.3.jar
[ERROR] urls[10] = file:/home/pradeeban/OpenDayLight/controller/opendaylight/commons/logback_settings/target/commons.logback_settings-0.1.0-SNAPSHOT.jar
[ERROR] urls[11] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/maven-enunciate-slim-plugin/1.28/maven-enunciate-slim-plugin-1.28.jar
[ERROR] urls[12] = file:/home/pradeeban/.m2/repository/org/apache/maven/plugins/maven-install-plugin/2.3.1/maven-install-plugin-2.3.1.jar
[ERROR] urls[13] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus-digest/1.0/plexus-digest-1.0.jar
[ERROR] urls[14] = file:/home/pradeeban/.m2/repository/org/apache/maven/plugins/maven-deploy-plugin/2.7/maven-deploy-plugin-2.7.jar
[ERROR] urls[15] = file:/home/pradeeban/.m2/repository/org/apache/maven/enforcer/enforcer-api/1.0/enforcer-api-1.0.jar
[ERROR] urls[16] = file:/home/pradeeban/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar
[ERROR] urls[17] = file:/home/pradeeban/.m2/repository/org/apache/maven/shared/maven-filtering/1.0/maven-filtering-1.0.jar
[ERROR] urls[18] = file:/home/pradeeban/.m2/repository/org/apache/maven/reporting/maven-reporting-api/2.0.6/maven-reporting-api-2.0.6.jar
[ERROR] urls[19] = file:/home/pradeeban/.m2/repository/org/apache/maven/doxia/doxia-sink-api/1.0-alpha-7/doxia-sink-api-1.0-alpha-7.jar
[ERROR] urls[20] = file:/home/pradeeban/.m2/repository/commons-cli/commons-cli/1.0/commons-cli-1.0.jar
[ERROR] urls[21] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus-interactivity-api/1.0-alpha-4/plexus-interactivity-api-1.0-alpha-4.jar
[ERROR] urls[22] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus-interpolation/1.12/plexus-interpolation-1.12.jar
[ERROR] urls[23] = file:/home/pradeeban/.m2/repository/org/sonatype/plexus/plexus-build-api/0.0.4/plexus-build-api-0.0.4.jar
[ERROR] urls[24] = file:/home/pradeeban/.m2/repository/org/codehaus/plexus/plexus-utils/3.0/plexus-utils-3.0.jar
[ERROR] urls[25] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-core/1.28/enunciate-core-1.28.jar
[ERROR] urls[26] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-core-rt/1.28/enunciate-core-rt-1.28.jar
[ERROR] urls[27] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-core-annotations/1.28/enunciate-core-annotations-1.28.jar
[ERROR] urls[28] = file:/home/pradeeban/.m2/repository/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar
[ERROR] urls[29] = file:/home/pradeeban/.m2/repository/javax/ws/rs/jsr311-api/1.1.1/jsr311-api-1.1.1.jar
[ERROR] urls[30] = file:/home/pradeeban/.m2/repository/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar
[ERROR] urls[31] = file:/home/pradeeban/.m2/repository/org/freemarker/freemarker/2.3.19/freemarker-2.3.19.jar
[ERROR] urls[32] = file:/home/pradeeban/.m2/repository/net/sf/apt-jelly/apt-jelly-freemarker/2.15/apt-jelly-freemarker-2.15.jar
[ERROR] urls[33] = file:/home/pradeeban/.m2/repository/net/sf/apt-jelly/apt-jelly-core/2.15/apt-jelly-core-2.15.jar
[ERROR] urls[34] = file:/home/pradeeban/.m2/repository/commons-digester/commons-digester/2.1/commons-digester-2.1.jar
[ERROR] urls[35] = file:/home/pradeeban/.m2/repository/commons-beanutils/commons-beanutils/1.8.3/commons-beanutils-1.8.3.jar
[ERROR] urls[36] = file:/home/pradeeban/.m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar
[ERROR] urls[37] = file:/home/pradeeban/programs/jdk1.8.0/jre/../lib/tools.jar
[ERROR] urls[38] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-top/1.28/enunciate-top-1.28.jar
[ERROR] urls[39] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-jaxws-support/1.28/enunciate-jaxws-support-1.28.jar
[ERROR] urls[40] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-jaxws-ri/1.28/enunciate-jaxws-ri-1.28.jar
[ERROR] urls[41] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-docs/1.28/enunciate-docs-1.28.jar
[ERROR] urls[42] = file:/home/pradeeban/.m2/repository/org/jdom/jdom/1.1.2/jdom-1.1.2.jar
[ERROR] urls[43] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-jersey/1.28/enunciate-jersey-1.28.jar
[ERROR] urls[44] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-jersey-rt/1.28/enunciate-jersey-rt-1.28.jar
[ERROR] urls[45] = file:/home/pradeeban/.m2/repository/org/codehaus/jackson/jackson-jaxrs/1.9.3/jackson-jaxrs-1.9.3.jar
[ERROR] urls[46] = file:/home/pradeeban/.m2/repository/org/codehaus/jackson/jackson-xc/1.9.3/jackson-xc-1.9.3.jar
[ERROR] urls[47] = file:/home/pradeeban/.m2/repository/com/sun/jersey/jersey-server/1.11/jersey-server-1.11.jar
[ERROR] urls[48] = file:/home/pradeeban/.m2/repository/asm/asm/3.1/asm-3.1.jar
[ERROR] urls[49] = file:/home/pradeeban/.m2/repository/com/sun/jersey/jersey-core/1.11/jersey-core-1.11.jar
[ERROR] urls[50] = file:/home/pradeeban/.m2/repository/com/sun/jersey/jersey-servlet/1.11/jersey-servlet-1.11.jar
[ERROR] urls[51] = file:/home/pradeeban/.m2/repository/javax/mail/mail/1.4.4/mail-1.4.4.jar
[ERROR] urls[52] = file:/home/pradeeban/.m2/repository/javax/activation/activation/1.1/activation-1.1.jar
[ERROR] urls[53] = file:/home/pradeeban/.m2/repository/com/sun/xml/bind/jaxb-impl/2.2.3/jaxb-impl-2.2.3.jar
[ERROR] urls[54] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-xml/1.28/enunciate-xml-1.28.jar
[ERROR] urls[55] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-java-client/1.28/enunciate-java-client-1.28.jar
[ERROR] urls[56] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-c/1.28/enunciate-c-1.28.jar
[ERROR] urls[57] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-obj-c/1.28/enunciate-obj-c-1.28.jar
[ERROR] urls[58] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-csharp/1.28/enunciate-csharp-1.28.jar
[ERROR] urls[59] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-ruby/1.28/enunciate-ruby-1.28.jar
[ERROR] urls[60] = file:/home/pradeeban/.m2/repository/org/codehaus/enunciate/enunciate-php/1.28/enunciate-php-1.28.jar
[ERROR] Number of foreign imports: 1
[ERROR] import: Entry[import  from realm ClassRealm[project>org.opendaylight.controller:forwarding.staticrouting:0.6.0-SNAPSHOT, parent: ClassRealm[maven.api, parent: null]]]
[ERROR]
[ERROR] -----------------------------------------------------: com.sun.mirror.apt.AnnotationProcessorFactory
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginContainerException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn
-rf :connectionmanager.northbound

I changed to version 1.7.x. The build started to progress further, and eventually it hanged due to the memory limitation. Ctrl + C produced the below error.

^C^CJava HotSpot(TM) 64-Bit Server VM warning: Exception java.lang.OutOfMemoryError occurred dispatching signal SIGINT to handler- the VM may need to be forcibly terminated
I had to kill the process manually, using kill -9 .

After increasing the memory allocation to maven, the build succeeded, even with the tests!
MAVEN_OPTS="-Xmx2048m -XX:MaxPermSize=1024m"

Monday, October 6, 2014

Recovering the mistakenly deleted images from your memory card..

Recently, I mistakenly deleted a bunch of photos from the memory card before copying them to my computer. But luckily, I just had to install TestDisk package and use its PhotoRec utility, a tool to recover deleted files using an Ubuntu/Linux Computer.

Install TestDisk
$ sudo apt-get install testdisk

Recover deleted images from the mounted memory
$ sudo photorec /dev/mmcblk0p1
Detailed instructions on this can be found here. Interestingly, it also retrieved images that were long deleted.

Wednesday, October 1, 2014

Building Cbench on Ubuntu - 14.04 LTS

Cbench (Controller Benchmark) is a handy tool for benchmarking OpenFlow controllers. It can be installed from source using the below commands on Ubuntu 14.04.

* Installing the dependencines 
$ sudo apt-get install autoconf automake libtool libsnmp-dev libpcap-dev libconfig8-dev
 
* Checking-out the source code of OpenFlow 
$ git clone git://gitosis.stanford.edu/openflow.git
 
* Switch to released version 1.0.0 
$ cd openflow; git checkout -b mybranch origin/release/1.0.0 
 
* Checking-out the source code of Oflops 
Oflops is a package that contains the OpenFlow debugging tools, Cbench and OFlops (OpenFLow Operations Per Second).
$ git clone git://gitosis.stanford.edu/oflops.git
 

* Build the source code
$ cd oflops ; sh ./boot.sh ; ./configure --with-openflow-src-dir=; make 
 
In my case,
cd oflops ; sh ./boot.sh ; ./configure --with-openflow-src-dir=/home/pradeeban/openflow; make 
 
$ cd oflops ; sudo make install 
 
This will have installed Cbench inside the folder, /home/pradeeban/openflow/oflops/cbench.
 
* Execute Cbench  
Change to Cbench directory 
$ cd cbench/
 
Sample Execution 
$ cbench -c localhost -p 6633 -m 10000 -l 10 -s 16 -M 1000 -t
cbench: controller benchmarking tool
   running in mode 'throughput'
   connecting to controller at localhost:6633 
   faking 16 switches offset 1 :: 10 tests each; 10000 ms per test
   with 1000 unique source MACs per switch
   learning destination mac addresses before the test
   starting test with 0 ms delay after features_reply
   ignoring first 1 "warmup" and last 0 "cooldown" loops
   connection delay of 0ms per 1 switch(es)
   debugging info is off
controller msgbuf_read() = 0:   closed connection ... exiting 
 
Note: Failing to install libconfig8-dev in the first step will produce the below error logs.
 
make[2]: Entering directory `/home/pradeeban/openflow/oflops'
gcc -DHAVE_CONFIG_H -I.     -g -O2 -Wall -I/home/pradeeban/openflow/include -Wshadow `pkg-config --cflags libconfig` -MT oflops.o -MD -MP -MF .deps/oflops.Tpo -c -o oflops.o oflops.c
Package libconfig was not found in the pkg-config search path.
Perhaps you should add the directory containing `libconfig.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libconfig' found
In file included from oflops.c:11:0:
usage.h:4:23: fatal error: libconfig.h: No such file or directory
 #include
                       ^