[ONOS-2115]Create an application named vtn to apply configuration and
flows to ovsdb device.
1. Creates/drops vxlan tunnels and a ovs when a ovs controller node is
detected
2. Applies default forwarding flows when a ovs is detected
3. Applies tunnel flows and multicast flows when a VM is detected

Change-Id: I66d719eaaef364b197952c7b9d7f72c4b269c926
diff --git a/apps/pom.xml b/apps/pom.xml
index 7b64a1c..1191205 100644
--- a/apps/pom.xml
+++ b/apps/pom.xml
@@ -54,6 +54,7 @@
         <module>olt</module>
         <module>flowanalyzer</module>
         <module>vtnrsc</module>
+        <module>vtn</module>
     </modules>
 
     <properties>
diff --git a/apps/vtn/pom.xml b/apps/vtn/pom.xml
new file mode 100644
index 0000000..aa92717
--- /dev/null
+++ b/apps/vtn/pom.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0"?>
+<project
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.onosproject</groupId>
+        <artifactId>onos-apps</artifactId>
+        <version>1.3.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>onos-app-vtn</artifactId>
+    <packaging>bundle</packaging>
+
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <onos.app.name>org.onosproject.vtn</onos.app.name>
+    </properties>
+    <dependencies>
+        <dependency>
+            <groupId>javax.ws.rs</groupId>
+            <artifactId>jsr311-api</artifactId>
+            <version>1.1.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-incubator-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-core-serializers</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/apps/vtn/src/main/java/org/onosproject/app/vtn/VTNService.java b/apps/vtn/src/main/java/org/onosproject/app/vtn/VTNService.java
new file mode 100644
index 0000000..880f2b9
--- /dev/null
+++ b/apps/vtn/src/main/java/org/onosproject/app/vtn/VTNService.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.app.vtn;
+
+import org.onosproject.net.Device;
+import org.onosproject.net.Host;
+
+/**
+ * VTN application that applies configuration and flows to the device.
+ */
+public interface VTNService {
+
+    /**
+     * Creates a vxlan tunnel and creates the ovs when a ovs controller node is detected.
+     *
+     * @param device controller-type device
+     */
+    void onServerDetected(Device device);
+
+    /**
+     * Drops a vxlan tunnel and drops the ovs when a ovs controller node is vanished.
+     *
+     * @param device controller-type device
+     */
+    void onServerVanished(Device device);
+
+    /**
+     * Applies default forwarding flows when a ovs is detected.
+     *
+     * @param device switch-type device
+     */
+    void onOvsDetected(Device device);
+
+    /**
+     * Remove default forwarding flows when a ovs is vanished.
+     *
+     * @param device switch-type device
+     */
+    void onOvsVanished(Device device);
+
+    /**
+     * Applies multicast flows and tunnel flows when a VM is detected.
+     *
+     * @param host a VM
+     */
+    void onHostDetected(Host host);
+
+    /**
+     * Remove multicast flows and tunnel flows when a VM is vanished.
+     *
+     * @param host a VM
+     */
+    void onHostVanished(Host host);
+
+}
diff --git a/apps/vtn/src/main/java/org/onosproject/app/vtn/package-info.java b/apps/vtn/src/main/java/org/onosproject/app/vtn/package-info.java
new file mode 100644
index 0000000..488adc5
--- /dev/null
+++ b/apps/vtn/src/main/java/org/onosproject/app/vtn/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * VTN application that applies configuration and flows to the device.
+ */
+package org.onosproject.app.vtn;