Moved Tunnel subsystem to ONOS core incubator area.

Change-Id: I03f90b068013fbf0490af5277b33459ccc0514ec
diff --git a/cli/pom.xml b/cli/pom.xml
index 2a9e922..ddeacc5 100644
--- a/cli/pom.xml
+++ b/cli/pom.xml
@@ -39,6 +39,10 @@
         </dependency>
         <dependency>
             <groupId>org.onosproject</groupId>
+            <artifactId>onos-incubator-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.onosproject</groupId>
             <artifactId>onlab-osgi</artifactId>
         </dependency>
         <dependency>
diff --git a/cli/src/main/java/org/onosproject/cli/net/BorrowTunnelCommand.java b/cli/src/main/java/org/onosproject/cli/net/TunnelBorrowCommand.java
similarity index 92%
rename from cli/src/main/java/org/onosproject/cli/net/BorrowTunnelCommand.java
rename to cli/src/main/java/org/onosproject/cli/net/TunnelBorrowCommand.java
index 4a15d8e..61188d2 100644
--- a/cli/src/main/java/org/onosproject/cli/net/BorrowTunnelCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/TunnelBorrowCommand.java
@@ -27,13 +27,13 @@
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.provider.ProviderId;
-import org.onosproject.net.tunnel.DefaultOpticalTunnelEndPoint;
-import org.onosproject.net.tunnel.IpTunnelEndPoint;
-import org.onosproject.net.tunnel.OpticalLogicId;
-import org.onosproject.net.tunnel.OpticalTunnelEndPoint;
-import org.onosproject.net.tunnel.Tunnel;
-import org.onosproject.net.tunnel.TunnelEndPoint;
-import org.onosproject.net.tunnel.TunnelService;
+import org.onosproject.incubator.net.tunnel.DefaultOpticalTunnelEndPoint;
+import org.onosproject.incubator.net.tunnel.IpTunnelEndPoint;
+import org.onosproject.incubator.net.tunnel.OpticalLogicId;
+import org.onosproject.incubator.net.tunnel.OpticalTunnelEndPoint;
+import org.onosproject.incubator.net.tunnel.Tunnel;
+import org.onosproject.incubator.net.tunnel.TunnelEndPoint;
+import org.onosproject.incubator.net.tunnel.TunnelService;
 
 /**
  * Borrows all tunnels between specific source tunnel end point and specific
@@ -43,7 +43,7 @@
 description = "Borrows all tunnels between specific source tunnel end point"
         + " and specific destination tunnel end point."
         + " Supports for IP address and optical as tunnel end point now. It's used by consumers.")
-public class BorrowTunnelCommand extends AbstractShellCommand {
+public class TunnelBorrowCommand extends AbstractShellCommand {
     @Argument(index = 0, name = "consumerId", description = "consumer id means application id.",
             required = true, multiValued = false)
     String consumerId = null;
diff --git a/cli/src/main/java/org/onosproject/cli/net/DeleteTunnelCommand.java b/cli/src/main/java/org/onosproject/cli/net/TunnelDeleteCommand.java
similarity index 91%
rename from cli/src/main/java/org/onosproject/cli/net/DeleteTunnelCommand.java
rename to cli/src/main/java/org/onosproject/cli/net/TunnelDeleteCommand.java
index cded33b..9be0da8 100644
--- a/cli/src/main/java/org/onosproject/cli/net/DeleteTunnelCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/TunnelDeleteCommand.java
@@ -24,12 +24,12 @@
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.provider.ProviderId;
-import org.onosproject.net.tunnel.DefaultOpticalTunnelEndPoint;
-import org.onosproject.net.tunnel.IpTunnelEndPoint;
-import org.onosproject.net.tunnel.OpticalLogicId;
-import org.onosproject.net.tunnel.OpticalTunnelEndPoint;
-import org.onosproject.net.tunnel.TunnelAdminService;
-import org.onosproject.net.tunnel.TunnelEndPoint;
+import org.onosproject.incubator.net.tunnel.DefaultOpticalTunnelEndPoint;
+import org.onosproject.incubator.net.tunnel.IpTunnelEndPoint;
+import org.onosproject.incubator.net.tunnel.OpticalLogicId;
+import org.onosproject.incubator.net.tunnel.OpticalTunnelEndPoint;
+import org.onosproject.incubator.net.tunnel.TunnelAdminService;
+import org.onosproject.incubator.net.tunnel.TunnelEndPoint;
 
 /**
  * Supports for deleting all tunnels by using IP address and optical as tunnel
@@ -37,7 +37,7 @@
  */
 @Command(scope = "onos", name = "delete-tunnels", description = "Supports for deleting all tunnels by using IP address"
         + " and optical as tunnel end point now. It's used by consumers.")
-public class DeleteTunnelCommand extends AbstractShellCommand {
+public class TunnelDeleteCommand extends AbstractShellCommand {
     static String applicationId = "DEFAULT_APP_ID";
     @Argument(index = 0, name = "src", description = "Source tunnel point."
             + " Only supports for IpTunnelEndPoint and OpticalTunnelEndPoint as end point now."
diff --git a/cli/src/main/java/org/onosproject/cli/net/QueryTunnelCommand.java b/cli/src/main/java/org/onosproject/cli/net/TunnelQueryCommand.java
similarity index 91%
rename from cli/src/main/java/org/onosproject/cli/net/QueryTunnelCommand.java
rename to cli/src/main/java/org/onosproject/cli/net/TunnelQueryCommand.java
index b4bc117..4e1fe28 100644
--- a/cli/src/main/java/org/onosproject/cli/net/QueryTunnelCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/TunnelQueryCommand.java
@@ -25,13 +25,13 @@
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.provider.ProviderId;
-import org.onosproject.net.tunnel.DefaultOpticalTunnelEndPoint;
-import org.onosproject.net.tunnel.IpTunnelEndPoint;
-import org.onosproject.net.tunnel.OpticalLogicId;
-import org.onosproject.net.tunnel.OpticalTunnelEndPoint;
-import org.onosproject.net.tunnel.Tunnel;
-import org.onosproject.net.tunnel.TunnelEndPoint;
-import org.onosproject.net.tunnel.TunnelService;
+import org.onosproject.incubator.net.tunnel.DefaultOpticalTunnelEndPoint;
+import org.onosproject.incubator.net.tunnel.IpTunnelEndPoint;
+import org.onosproject.incubator.net.tunnel.OpticalLogicId;
+import org.onosproject.incubator.net.tunnel.OpticalTunnelEndPoint;
+import org.onosproject.incubator.net.tunnel.Tunnel;
+import org.onosproject.incubator.net.tunnel.TunnelEndPoint;
+import org.onosproject.incubator.net.tunnel.TunnelService;
 
 /**
  * Supports for querying all tunnels by using IP address and optical as tunnel
@@ -40,7 +40,7 @@
 @Command(scope = "onos", name = "query-tunnels", description = "Supports for querying all tunnels by using IP address"
         + " and optical as tunnel end point now."
         + " It's used by consumers.")
-public class QueryTunnelCommand extends AbstractShellCommand {
+public class TunnelQueryCommand extends AbstractShellCommand {
     @Argument(index = 0, name = "src", description = "Source tunnel point."
             + " Only supports for IpTunnelEndPoint and OpticalTunnelEndPoint as end point now."
             + " If deletess a ODUK or OCH type tunnel, the formatter of this argument is DeviceId-PortNumber."
diff --git a/cli/src/main/java/org/onosproject/cli/net/QueryTunnelSubscriptionCommand.java b/cli/src/main/java/org/onosproject/cli/net/TunnelQuerySubscriptionCommand.java
similarity index 91%
rename from cli/src/main/java/org/onosproject/cli/net/QueryTunnelSubscriptionCommand.java
rename to cli/src/main/java/org/onosproject/cli/net/TunnelQuerySubscriptionCommand.java
index c91dcce..45d1e78 100644
--- a/cli/src/main/java/org/onosproject/cli/net/QueryTunnelSubscriptionCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/TunnelQuerySubscriptionCommand.java
@@ -22,8 +22,8 @@
 import org.onosproject.cli.AbstractShellCommand;
 import org.onosproject.core.ApplicationId;
 import org.onosproject.core.DefaultApplicationId;
-import org.onosproject.net.tunnel.TunnelService;
-import org.onosproject.net.tunnel.TunnelSubscription;
+import org.onosproject.incubator.net.tunnel.TunnelService;
+import org.onosproject.incubator.net.tunnel.TunnelSubscription;
 
 /**
  * Query all tunnel subscriptions of consumer by consumer id.
@@ -31,7 +31,7 @@
  */
 @Command(scope = "onos", name = "query-tunnel-subscriptions",
       description = "Query all request orders of consumer by consumer id. It's used by consumers.")
-public class QueryTunnelSubscriptionCommand extends AbstractShellCommand {
+public class TunnelQuerySubscriptionCommand extends AbstractShellCommand {
     @Argument(index = 0, name = "consumerId",
             description = "consumer id means provider id",
             required = true, multiValued = false)
diff --git a/cli/src/main/java/org/onosproject/cli/net/ReturnTunnelCommand.java b/cli/src/main/java/org/onosproject/cli/net/TunnelReturnCommand.java
similarity index 92%
rename from cli/src/main/java/org/onosproject/cli/net/ReturnTunnelCommand.java
rename to cli/src/main/java/org/onosproject/cli/net/TunnelReturnCommand.java
index c3111e8..3de8f00 100644
--- a/cli/src/main/java/org/onosproject/cli/net/ReturnTunnelCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/TunnelReturnCommand.java
@@ -26,12 +26,12 @@
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.provider.ProviderId;
-import org.onosproject.net.tunnel.DefaultOpticalTunnelEndPoint;
-import org.onosproject.net.tunnel.IpTunnelEndPoint;
-import org.onosproject.net.tunnel.OpticalLogicId;
-import org.onosproject.net.tunnel.OpticalTunnelEndPoint;
-import org.onosproject.net.tunnel.TunnelEndPoint;
-import org.onosproject.net.tunnel.TunnelService;
+import org.onosproject.incubator.net.tunnel.DefaultOpticalTunnelEndPoint;
+import org.onosproject.incubator.net.tunnel.IpTunnelEndPoint;
+import org.onosproject.incubator.net.tunnel.OpticalLogicId;
+import org.onosproject.incubator.net.tunnel.OpticalTunnelEndPoint;
+import org.onosproject.incubator.net.tunnel.TunnelEndPoint;
+import org.onosproject.incubator.net.tunnel.TunnelService;
 
 /**
  * Returns all tunnels between specific source tunnel end point and specific
@@ -42,7 +42,7 @@
 description = "Returns all tunnels between specific source tunnel end point and specific "
         + " destination tunnel end point. Supports for IP address and optical as tunnel end point now."
         + " It's used by consumers.")
-public class ReturnTunnelCommand extends AbstractShellCommand {
+public class TunnelReturnCommand extends AbstractShellCommand {
     @Argument(index = 0, name = "consumerId", description = "consumer id means application id.",
             required = true, multiValued = false)
     String consumerId = null;
diff --git a/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml b/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
index 93afcd5..d92129a 100644
--- a/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
+++ b/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
@@ -369,19 +369,19 @@
         </command>
         <!-- tunnel commands -->
         <command>
-            <action class="org.onosproject.cli.net.DeleteTunnelCommand"/>
+            <action class="org.onosproject.cli.net.TunnelDeleteCommand"/>
         </command>
         <command>
-            <action class="org.onosproject.cli.net.BorrowTunnelCommand"/>
+            <action class="org.onosproject.cli.net.TunnelBorrowCommand"/>
         </command>
         <command>
-            <action class="org.onosproject.cli.net.ReturnTunnelCommand"/>
+            <action class="org.onosproject.cli.net.TunnelReturnCommand"/>
         </command>
         <command>
-            <action class="org.onosproject.cli.net.QueryTunnelCommand"/>
+            <action class="org.onosproject.cli.net.TunnelQueryCommand"/>
         </command>
         <command>
-            <action class="org.onosproject.cli.net.QueryTunnelSubscriptionCommand"/>
+            <action class="org.onosproject.cli.net.TunnelQuerySubscriptionCommand"/>
         </command>
     </command-bundle>
 
diff --git a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelEndPoint.java b/core/api/src/main/java/org/onosproject/net/tunnel/TunnelEndPoint.java
deleted file mode 100644
index 53db69c..0000000
--- a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelEndPoint.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.onosproject.net.tunnel;
-
-/**
- * Represents for source end point or destination end point of a tunnel. Maybe a tunnel
- * based on ConnectPoint, IpAddress, MacAddress and so on is built.
- */
-public interface TunnelEndPoint {
-
-}
diff --git a/core/security/impl/src/main/java/org/onosproject/security/impl/PolicyBuilder.java b/core/security/impl/src/main/java/org/onosproject/security/impl/PolicyBuilder.java
index bc21935..31174c6 100644
--- a/core/security/impl/src/main/java/org/onosproject/security/impl/PolicyBuilder.java
+++ b/core/security/impl/src/main/java/org/onosproject/security/impl/PolicyBuilder.java
@@ -42,8 +42,6 @@
 import org.onosproject.net.statistic.StatisticService;
 import org.onosproject.net.topology.PathService;
 import org.onosproject.net.topology.TopologyService;
-import org.onosproject.net.tunnel.TunnelAdminService;
-import org.onosproject.net.tunnel.TunnelService;
 import org.onosproject.store.service.StorageAdminService;
 import org.onosproject.store.service.StorageService;
 import org.osgi.framework.ServicePermission;
@@ -111,8 +109,8 @@
                         StorageAdminService.class.getName(), ServicePermission.GET),
                 new PermissionInfo(ServicePermission.class.getName(),
                         LabelResourceAdminService.class.getName(), ServicePermission.GET),
-                new PermissionInfo(ServicePermission.class.getName(),
-                        TunnelAdminService.class.getName(), ServicePermission.GET),
+//                new PermissionInfo(ServicePermission.class.getName(),
+//                        TunnelAdminService.class.getName(), ServicePermission.GET),
                 new PermissionInfo(ServicePermission.class.getName(),
                         ApplicationService.class.getName(), ServicePermission.GET),
                 new PermissionInfo(ServicePermission.class.getName(),
@@ -165,8 +163,8 @@
                         PathService.class.getName(), ServicePermission.GET),
                 new PermissionInfo(ServicePermission.class.getName(),
                         TopologyService.class.getName(), ServicePermission.GET),
-                new PermissionInfo(ServicePermission.class.getName(),
-                        TunnelService.class.getName(), ServicePermission.GET),
+//                new PermissionInfo(ServicePermission.class.getName(),
+//                        TunnelService.class.getName(), ServicePermission.GET),
                 new PermissionInfo(ServicePermission.class.getName(),
                         StorageService.class.getName(), ServicePermission.GET),
         };
@@ -246,12 +244,12 @@
                 TopologyService.class.getName(), PathService.class.getName()));
         serviceDirectory.put(Permission.TOPOLOGY_EVENT, ImmutableSet.of(
                 TopologyService.class.getName()));
-        serviceDirectory.put(Permission.TUNNEL_READ, ImmutableSet.of(
-                TunnelService.class.getName()));
-        serviceDirectory.put(Permission.TUNNEL_WRITE, ImmutableSet.of(
-                TunnelService.class.getName()));
-        serviceDirectory.put(Permission.TUNNEL_EVENT, ImmutableSet.of(
-                TunnelService.class.getName()));
+//        serviceDirectory.put(Permission.TUNNEL_READ, ImmutableSet.of(
+//                TunnelService.class.getName()));
+//        serviceDirectory.put(Permission.TUNNEL_WRITE, ImmutableSet.of(
+//                TunnelService.class.getName()));
+//        serviceDirectory.put(Permission.TUNNEL_EVENT, ImmutableSet.of(
+//                TunnelService.class.getName()));
         serviceDirectory.put(Permission.STORAGE_WRITE, ImmutableSet.of(
                 StorageService.class.getName()));
 
diff --git a/features/features.xml b/features/features.xml
index a49fdd0..2a45f98 100644
--- a/features/features.xml
+++ b/features/features.xml
@@ -87,6 +87,7 @@
         <bundle>mvn:org.onosproject/onlab-osgi/@ONOS-VERSION</bundle>
 
         <bundle>mvn:org.onosproject/onos-api/@ONOS-VERSION</bundle>
+        <bundle>mvn:org.onosproject/onos-incubator-api/@ONOS-VERSION</bundle>
     </feature>
 
     <feature name="onos-core" version="@FEATURE-VERSION"
@@ -99,6 +100,13 @@
         <bundle>mvn:org.onosproject/onlab-netty/@ONOS-VERSION</bundle>
     </feature>
 
+    <feature name="onos-incubator" version="@FEATURE-VERSION"
+             description="ONOS core incubator components">
+        <feature>onos-core</feature>
+        <bundle>mvn:org.onosproject/onos-incubator-net/@ONOS-VERSION</bundle>
+        <bundle>mvn:org.onosproject/onos-incubator-store/@ONOS-VERSION</bundle>
+    </feature>
+
     <feature name="onos-rest" version="@FEATURE-VERSION"
              description="ONOS REST API components">
         <feature>onos-api</feature>
diff --git a/incubator/api/pom.xml b/incubator/api/pom.xml
index 1a0e8ef..df4b52c 100644
--- a/incubator/api/pom.xml
+++ b/incubator/api/pom.xml
@@ -1,4 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
+
 <!--
   ~ Copyright 2015 Open Networking Laboratory
   ~
@@ -14,6 +15,7 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
+
 <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
diff --git a/core/api/src/main/java/org/onosproject/net/tunnel/DefaultOpticalTunnelEndPoint.java b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/DefaultOpticalTunnelEndPoint.java
similarity index 85%
rename from core/api/src/main/java/org/onosproject/net/tunnel/DefaultOpticalTunnelEndPoint.java
rename to incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/DefaultOpticalTunnelEndPoint.java
index 3fb2e7d..c6e4119 100644
--- a/core/api/src/main/java/org/onosproject/net/tunnel/DefaultOpticalTunnelEndPoint.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/DefaultOpticalTunnelEndPoint.java
@@ -1,4 +1,19 @@
-package org.onosproject.net.tunnel;
+/*
+ * 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.incubator.net.tunnel;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.MoreObjects.toStringHelper;
diff --git a/core/api/src/main/java/org/onosproject/net/tunnel/DefaultTunnel.java b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/DefaultTunnel.java
similarity index 87%
rename from core/api/src/main/java/org/onosproject/net/tunnel/DefaultTunnel.java
rename to incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/DefaultTunnel.java
index fa911fc..62a5dcb 100644
--- a/core/api/src/main/java/org/onosproject/net/tunnel/DefaultTunnel.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/DefaultTunnel.java
@@ -1,4 +1,20 @@
-package org.onosproject.net.tunnel;
+/*
+ * 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.incubator.net.tunnel;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.MoreObjects.toStringHelper;
diff --git a/core/api/src/main/java/org/onosproject/net/tunnel/DefaultTunnelDescription.java b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/DefaultTunnelDescription.java
similarity index 98%
rename from core/api/src/main/java/org/onosproject/net/tunnel/DefaultTunnelDescription.java
rename to incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/DefaultTunnelDescription.java
index 16585de..e4c4d89 100644
--- a/core/api/src/main/java/org/onosproject/net/tunnel/DefaultTunnelDescription.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/DefaultTunnelDescription.java
@@ -13,7 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.tunnel;
+
+package org.onosproject.incubator.net.tunnel;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import org.onosproject.core.DefaultGroupId;
diff --git a/core/api/src/main/java/org/onosproject/net/tunnel/IpTunnelEndPoint.java b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/IpTunnelEndPoint.java
similarity index 64%
rename from core/api/src/main/java/org/onosproject/net/tunnel/IpTunnelEndPoint.java
rename to incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/IpTunnelEndPoint.java
index d440c3a..a9278fc 100644
--- a/core/api/src/main/java/org/onosproject/net/tunnel/IpTunnelEndPoint.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/IpTunnelEndPoint.java
@@ -1,4 +1,20 @@
-package org.onosproject.net.tunnel;
+/*
+ * 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.incubator.net.tunnel;
 
 import java.util.Objects;
 
diff --git a/core/api/src/main/java/org/onosproject/net/tunnel/OpticalLogicId.java b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/OpticalLogicId.java
similarity index 97%
rename from core/api/src/main/java/org/onosproject/net/tunnel/OpticalLogicId.java
rename to incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/OpticalLogicId.java
index d12849b..fee5542 100644
--- a/core/api/src/main/java/org/onosproject/net/tunnel/OpticalLogicId.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/OpticalLogicId.java
@@ -13,7 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.tunnel;
+
+package org.onosproject.incubator.net.tunnel;
 
 import java.util.Objects;
 import com.google.common.primitives.UnsignedLongs;
diff --git a/core/api/src/main/java/org/onosproject/net/tunnel/OpticalTunnelEndPoint.java b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/OpticalTunnelEndPoint.java
similarity index 97%
rename from core/api/src/main/java/org/onosproject/net/tunnel/OpticalTunnelEndPoint.java
rename to incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/OpticalTunnelEndPoint.java
index 9ce84be..7f0ab4b 100644
--- a/core/api/src/main/java/org/onosproject/net/tunnel/OpticalTunnelEndPoint.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/OpticalTunnelEndPoint.java
@@ -13,7 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.tunnel;
+
+package org.onosproject.incubator.net.tunnel;
 
 import java.util.Optional;
 
diff --git a/core/api/src/main/java/org/onosproject/net/tunnel/Tunnel.java b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/Tunnel.java
similarity index 98%
rename from core/api/src/main/java/org/onosproject/net/tunnel/Tunnel.java
rename to incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/Tunnel.java
index bc3d18b..8b80b86 100644
--- a/core/api/src/main/java/org/onosproject/net/tunnel/Tunnel.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/Tunnel.java
@@ -13,7 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.tunnel;
+
+package org.onosproject.incubator.net.tunnel;
 
 import org.onosproject.core.DefaultGroupId;
 import org.onosproject.net.Annotated;
diff --git a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelAdminService.java b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelAdminService.java
similarity index 97%
rename from core/api/src/main/java/org/onosproject/net/tunnel/TunnelAdminService.java
rename to incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelAdminService.java
index d140600..3c6cf3f 100644
--- a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelAdminService.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelAdminService.java
@@ -13,7 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.tunnel;
+
+package org.onosproject.incubator.net.tunnel;
 
 import org.onosproject.net.Path;
 import org.onosproject.net.provider.ProviderId;
diff --git a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelDescription.java b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelDescription.java
similarity index 93%
rename from core/api/src/main/java/org/onosproject/net/tunnel/TunnelDescription.java
rename to incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelDescription.java
index efa9c58..eca8fdd 100644
--- a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelDescription.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelDescription.java
@@ -13,13 +13,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.tunnel;
+
+package org.onosproject.incubator.net.tunnel;
 
 import org.onosproject.core.DefaultGroupId;
 import org.onosproject.net.Annotated;
 import org.onosproject.net.Description;
 import org.onosproject.net.provider.ProviderId;
-import org.onosproject.net.tunnel.Tunnel.Type;
+import org.onosproject.incubator.net.tunnel.Tunnel.Type;
 
 /**
  * Describes a tunnel.
diff --git a/core/net/src/main/java/org/onosproject/net/tunnel/impl/package-info.java b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelEndPoint.java
similarity index 71%
copy from core/net/src/main/java/org/onosproject/net/tunnel/impl/package-info.java
copy to incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelEndPoint.java
index ccadddb..3265a4e 100644
--- a/core/net/src/main/java/org/onosproject/net/tunnel/impl/package-info.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelEndPoint.java
@@ -14,7 +14,12 @@
  * limitations under the License.
  */
 
+package org.onosproject.incubator.net.tunnel;
+
 /**
- * Core subsystem for tracking global inventory of tunnels.
+ * Represents for source end point or destination end point of a tunnel. Maybe a tunnel
+ * based on ConnectPoint, IpAddress, MacAddress and so on is built.
  */
-package org.onosproject.net.tunnel.impl;
+public interface TunnelEndPoint {
+
+}
diff --git a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelEvent.java b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelEvent.java
similarity index 96%
rename from core/api/src/main/java/org/onosproject/net/tunnel/TunnelEvent.java
rename to incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelEvent.java
index 9824623..16c5ec3 100644
--- a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelEvent.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelEvent.java
@@ -13,7 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.tunnel;
+
+package org.onosproject.incubator.net.tunnel;
 
 import org.onosproject.event.AbstractEvent;
 
diff --git a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelId.java b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelId.java
similarity index 97%
rename from core/api/src/main/java/org/onosproject/net/tunnel/TunnelId.java
rename to incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelId.java
index ca57797..b596700 100644
--- a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelId.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelId.java
@@ -13,7 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.tunnel;
+
+package org.onosproject.incubator.net.tunnel;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
diff --git a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelListener.java b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelListener.java
similarity index 93%
rename from core/api/src/main/java/org/onosproject/net/tunnel/TunnelListener.java
rename to incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelListener.java
index 654cf7d..41011be 100644
--- a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelListener.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelListener.java
@@ -13,7 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.tunnel;
+
+package org.onosproject.incubator.net.tunnel;
 
 import org.onosproject.event.EventListener;
 
diff --git a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelName.java b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelName.java
similarity index 67%
rename from core/api/src/main/java/org/onosproject/net/tunnel/TunnelName.java
rename to incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelName.java
index db6bd7c..7e32137 100644
--- a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelName.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelName.java
@@ -1,4 +1,20 @@
-package org.onosproject.net.tunnel;
+/*
+ * 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.incubator.net.tunnel;
 
 import java.util.Objects;
 
diff --git a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelProvider.java b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelProvider.java
similarity index 98%
rename from core/api/src/main/java/org/onosproject/net/tunnel/TunnelProvider.java
rename to incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelProvider.java
index e388c70..f01bb61 100644
--- a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelProvider.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelProvider.java
@@ -13,7 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.tunnel;
+
+package org.onosproject.incubator.net.tunnel;
 
 import org.onosproject.net.ElementId;
 import org.onosproject.net.Path;
diff --git a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelProviderRegistry.java b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelProviderRegistry.java
similarity index 94%
rename from core/api/src/main/java/org/onosproject/net/tunnel/TunnelProviderRegistry.java
rename to incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelProviderRegistry.java
index d6a3148..33ff21c 100644
--- a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelProviderRegistry.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelProviderRegistry.java
@@ -13,7 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.tunnel;
+
+package org.onosproject.incubator.net.tunnel;
 
 import org.onosproject.net.provider.ProviderRegistry;
 
diff --git a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelProviderService.java b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelProviderService.java
similarity index 96%
rename from core/api/src/main/java/org/onosproject/net/tunnel/TunnelProviderService.java
rename to incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelProviderService.java
index 7b02676..9049299 100644
--- a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelProviderService.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelProviderService.java
@@ -13,7 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.tunnel;
+
+package org.onosproject.incubator.net.tunnel;
 
 import org.onosproject.net.provider.ProviderService;
 
diff --git a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelService.java b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelService.java
similarity index 95%
rename from core/api/src/main/java/org/onosproject/net/tunnel/TunnelService.java
rename to incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelService.java
index 109d981..f2611fa 100644
--- a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelService.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelService.java
@@ -13,13 +13,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.tunnel;
+
+package org.onosproject.incubator.net.tunnel;
 
 import java.util.Collection;
 
 import org.onosproject.core.ApplicationId;
 import org.onosproject.net.Annotations;
-import org.onosproject.net.tunnel.Tunnel.Type;
 
 /**
  * Service for interacting with the inventory of tunnels.
@@ -83,7 +83,7 @@
      * @return collection of available Tunnels
      */
     Collection<Tunnel> borrowTunnel(ApplicationId consumerId, TunnelEndPoint src,
-                                       TunnelEndPoint dst, Type type,
+                                       TunnelEndPoint dst, Tunnel.Type type,
                                        Annotations... annotations);
 
     /**
@@ -122,7 +122,7 @@
      * @return success or fail
      */
     boolean returnTunnel(ApplicationId consumerId, TunnelEndPoint src,
-                              TunnelEndPoint dst, Type type,
+                              TunnelEndPoint dst, Tunnel.Type type,
                               Annotations... annotations);
 
     /**
@@ -160,7 +160,7 @@
      * @param type tunnel type
      * @return Collection of tunnels
      */
-    Collection<Tunnel> queryTunnel(Type type);
+    Collection<Tunnel> queryTunnel(Tunnel.Type type);
 
     /**
      * Returns all tunnels between source point and destination point.
diff --git a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelStore.java b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelStore.java
similarity index 98%
rename from core/api/src/main/java/org/onosproject/net/tunnel/TunnelStore.java
rename to incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelStore.java
index 107dea3..3286ef2 100644
--- a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelStore.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelStore.java
@@ -13,14 +13,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.tunnel;
+
+package org.onosproject.incubator.net.tunnel;
 
 import java.util.Collection;
 
 import org.onosproject.core.ApplicationId;
 import org.onosproject.net.Annotations;
 import org.onosproject.net.provider.ProviderId;
-import org.onosproject.net.tunnel.Tunnel.Type;
+import org.onosproject.incubator.net.tunnel.Tunnel.Type;
 import org.onosproject.store.Store;
 
 /**
diff --git a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelStoreDelegate.java b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelStoreDelegate.java
similarity index 93%
rename from core/api/src/main/java/org/onosproject/net/tunnel/TunnelStoreDelegate.java
rename to incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelStoreDelegate.java
index 177e7f0..cf8a998 100644
--- a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelStoreDelegate.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelStoreDelegate.java
@@ -13,7 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.tunnel;
+
+package org.onosproject.incubator.net.tunnel;
 
 import org.onosproject.store.StoreDelegate;
 
diff --git a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelSubscription.java b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelSubscription.java
similarity index 83%
rename from core/api/src/main/java/org/onosproject/net/tunnel/TunnelSubscription.java
rename to incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelSubscription.java
index 428e41c..9dd8e62 100644
--- a/core/api/src/main/java/org/onosproject/net/tunnel/TunnelSubscription.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/TunnelSubscription.java
@@ -1,4 +1,20 @@
-package org.onosproject.net.tunnel;
+/*
+ * 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.incubator.net.tunnel;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
@@ -7,7 +23,7 @@
 import org.onosproject.core.ApplicationId;
 import org.onosproject.net.AbstractAnnotated;
 import org.onosproject.net.Annotations;
-import org.onosproject.net.tunnel.Tunnel.Type;
+import org.onosproject.incubator.net.tunnel.Tunnel.Type;
 
 import com.google.common.base.MoreObjects;
 
diff --git a/core/api/src/main/java/org/onosproject/net/tunnel/package-info.java b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/package-info.java
similarity index 93%
rename from core/api/src/main/java/org/onosproject/net/tunnel/package-info.java
rename to incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/package-info.java
index 41580d3..d31aab5 100644
--- a/core/api/src/main/java/org/onosproject/net/tunnel/package-info.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/tunnel/package-info.java
@@ -17,4 +17,4 @@
 /**
  * Tunnel model related services and providers API definitions.
  */
-package org.onosproject.net.tunnel;
+package org.onosproject.incubator.net.tunnel;
diff --git a/core/api/src/test/java/org/onosproject/net/tunnel/DefaultTunnelTest.java b/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/DefaultTunnelTest.java
similarity index 73%
rename from core/api/src/test/java/org/onosproject/net/tunnel/DefaultTunnelTest.java
rename to incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/DefaultTunnelTest.java
index 7ea5be2..bab9ff0 100644
--- a/core/api/src/test/java/org/onosproject/net/tunnel/DefaultTunnelTest.java
+++ b/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/DefaultTunnelTest.java
@@ -1,4 +1,20 @@
-package org.onosproject.net.tunnel;
+/*
+ * 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.incubator.net.tunnel;
 
 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
 
diff --git a/core/api/src/test/java/org/onosproject/net/tunnel/TunnelEventTest.java b/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelEventTest.java
similarity index 71%
rename from core/api/src/test/java/org/onosproject/net/tunnel/TunnelEventTest.java
rename to incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelEventTest.java
index 06a1f09..6f330a7 100644
--- a/core/api/src/test/java/org/onosproject/net/tunnel/TunnelEventTest.java
+++ b/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelEventTest.java
@@ -1,4 +1,20 @@
-package org.onosproject.net.tunnel;
+/*
+ * 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.incubator.net.tunnel;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.is;
diff --git a/core/api/src/test/java/org/onosproject/net/tunnel/TunnelIdTest.java b/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelIdTest.java
similarity index 67%
rename from core/api/src/test/java/org/onosproject/net/tunnel/TunnelIdTest.java
rename to incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelIdTest.java
index aeba1e6..f4c109f 100644
--- a/core/api/src/test/java/org/onosproject/net/tunnel/TunnelIdTest.java
+++ b/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelIdTest.java
@@ -1,4 +1,20 @@
-package org.onosproject.net.tunnel;
+/*
+ * 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.incubator.net.tunnel;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.is;
diff --git a/core/api/src/test/java/org/onosproject/net/tunnel/TunnelNameTest.java b/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelNameTest.java
similarity index 66%
rename from core/api/src/test/java/org/onosproject/net/tunnel/TunnelNameTest.java
rename to incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelNameTest.java
index 87421db..d0fc49c 100644
--- a/core/api/src/test/java/org/onosproject/net/tunnel/TunnelNameTest.java
+++ b/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelNameTest.java
@@ -1,4 +1,20 @@
-package org.onosproject.net.tunnel;
+/*
+ * 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.incubator.net.tunnel;
 
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.is;
diff --git a/core/api/src/test/java/org/onosproject/net/tunnel/TunnelSubscriptionTest.java b/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelSubscriptionTest.java
similarity index 70%
rename from core/api/src/test/java/org/onosproject/net/tunnel/TunnelSubscriptionTest.java
rename to incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelSubscriptionTest.java
index 682796a..46634c7 100644
--- a/core/api/src/test/java/org/onosproject/net/tunnel/TunnelSubscriptionTest.java
+++ b/incubator/api/src/test/java/org/onosproject/incubator/net/tunnel/TunnelSubscriptionTest.java
@@ -1,4 +1,19 @@
-package org.onosproject.net.tunnel;
+/*
+ * 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.incubator.net.tunnel;
 
 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
 
diff --git a/incubator/net/pom.xml b/incubator/net/pom.xml
index 65bde31..0869aa1 100644
--- a/incubator/net/pom.xml
+++ b/incubator/net/pom.xml
@@ -1,4 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
+
 <!--
   ~ Copyright 2015 Open Networking Laboratory
   ~
diff --git a/core/net/src/main/java/org/onosproject/net/tunnel/impl/TunnelManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/tunnel/impl/TunnelManager.java
similarity index 92%
rename from core/net/src/main/java/org/onosproject/net/tunnel/impl/TunnelManager.java
rename to incubator/net/src/main/java/org/onosproject/incubator/net/tunnel/impl/TunnelManager.java
index 47e5311..c2c9975 100644
--- a/core/net/src/main/java/org/onosproject/net/tunnel/impl/TunnelManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/tunnel/impl/TunnelManager.java
@@ -13,7 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.net.tunnel.impl;
+
+package org.onosproject.incubator.net.tunnel.impl;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static org.slf4j.LoggerFactory.getLogger;
@@ -35,23 +36,23 @@
 import org.onosproject.net.provider.AbstractProviderRegistry;
 import org.onosproject.net.provider.AbstractProviderService;
 import org.onosproject.net.provider.ProviderId;
-import org.onosproject.net.tunnel.DefaultTunnel;
-import org.onosproject.net.tunnel.Tunnel;
-import org.onosproject.net.tunnel.Tunnel.Type;
-import org.onosproject.net.tunnel.TunnelAdminService;
-import org.onosproject.net.tunnel.TunnelDescription;
-import org.onosproject.net.tunnel.TunnelEndPoint;
-import org.onosproject.net.tunnel.TunnelEvent;
-import org.onosproject.net.tunnel.TunnelId;
-import org.onosproject.net.tunnel.TunnelListener;
-import org.onosproject.net.tunnel.TunnelName;
-import org.onosproject.net.tunnel.TunnelProvider;
-import org.onosproject.net.tunnel.TunnelProviderRegistry;
-import org.onosproject.net.tunnel.TunnelProviderService;
-import org.onosproject.net.tunnel.TunnelService;
-import org.onosproject.net.tunnel.TunnelStore;
-import org.onosproject.net.tunnel.TunnelStoreDelegate;
-import org.onosproject.net.tunnel.TunnelSubscription;
+import org.onosproject.incubator.net.tunnel.DefaultTunnel;
+import org.onosproject.incubator.net.tunnel.Tunnel;
+import org.onosproject.incubator.net.tunnel.Tunnel.Type;
+import org.onosproject.incubator.net.tunnel.TunnelAdminService;
+import org.onosproject.incubator.net.tunnel.TunnelDescription;
+import org.onosproject.incubator.net.tunnel.TunnelEndPoint;
+import org.onosproject.incubator.net.tunnel.TunnelEvent;
+import org.onosproject.incubator.net.tunnel.TunnelId;
+import org.onosproject.incubator.net.tunnel.TunnelListener;
+import org.onosproject.incubator.net.tunnel.TunnelName;
+import org.onosproject.incubator.net.tunnel.TunnelProvider;
+import org.onosproject.incubator.net.tunnel.TunnelProviderRegistry;
+import org.onosproject.incubator.net.tunnel.TunnelProviderService;
+import org.onosproject.incubator.net.tunnel.TunnelService;
+import org.onosproject.incubator.net.tunnel.TunnelStore;
+import org.onosproject.incubator.net.tunnel.TunnelStoreDelegate;
+import org.onosproject.incubator.net.tunnel.TunnelSubscription;
 import org.slf4j.Logger;
 
 /**
diff --git a/core/net/src/main/java/org/onosproject/net/tunnel/impl/package-info.java b/incubator/net/src/main/java/org/onosproject/incubator/net/tunnel/impl/package-info.java
similarity index 92%
rename from core/net/src/main/java/org/onosproject/net/tunnel/impl/package-info.java
rename to incubator/net/src/main/java/org/onosproject/incubator/net/tunnel/impl/package-info.java
index ccadddb..6e0de55 100644
--- a/core/net/src/main/java/org/onosproject/net/tunnel/impl/package-info.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/tunnel/impl/package-info.java
@@ -17,4 +17,4 @@
 /**
  * Core subsystem for tracking global inventory of tunnels.
  */
-package org.onosproject.net.tunnel.impl;
+package org.onosproject.incubator.net.tunnel.impl;
diff --git a/incubator/pom.xml b/incubator/pom.xml
index 235bff9..0eb6e89 100644
--- a/incubator/pom.xml
+++ b/incubator/pom.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-  ~ Copyright 2014 Open Networking Laboratory
+  ~ 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.
diff --git a/incubator/store/pom.xml b/incubator/store/pom.xml
index b7439ef..67ff427 100644
--- a/incubator/store/pom.xml
+++ b/incubator/store/pom.xml
@@ -1,4 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
+
 <!--
   ~ Copyright 2015 Open Networking Laboratory
   ~
@@ -68,6 +69,21 @@
             <classifier>tests</classifier>
             <scope>test</scope>
         </dependency>
+
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.scr.annotations</artifactId>
+        </dependency>
     </dependencies>
 
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-scr-plugin</artifactId>
+            </plugin>
+        </plugins>
+    </build>
+
 </project>
diff --git a/core/store/dist/src/main/java/org/onosproject/store/tunnel/impl/DistributedTunnelStore.java b/incubator/store/src/main/java/org/onosproject/incubator/store/tunnel/impl/DistributedTunnelStore.java
similarity index 93%
rename from core/store/dist/src/main/java/org/onosproject/store/tunnel/impl/DistributedTunnelStore.java
rename to incubator/store/src/main/java/org/onosproject/incubator/store/tunnel/impl/DistributedTunnelStore.java
index 6082842..b49743c 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/tunnel/impl/DistributedTunnelStore.java
+++ b/incubator/store/src/main/java/org/onosproject/incubator/store/tunnel/impl/DistributedTunnelStore.java
@@ -1,4 +1,20 @@
-package org.onosproject.store.tunnel.impl;
+/*
+ * 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.incubator.store.tunnel.impl;
 
 import static org.slf4j.LoggerFactory.getLogger;
 
@@ -23,16 +39,16 @@
 import org.onosproject.core.IdGenerator;
 import org.onosproject.net.Annotations;
 import org.onosproject.net.provider.ProviderId;
-import org.onosproject.net.tunnel.DefaultTunnel;
-import org.onosproject.net.tunnel.Tunnel;
-import org.onosproject.net.tunnel.Tunnel.Type;
-import org.onosproject.net.tunnel.TunnelEndPoint;
-import org.onosproject.net.tunnel.TunnelEvent;
-import org.onosproject.net.tunnel.TunnelId;
-import org.onosproject.net.tunnel.TunnelName;
-import org.onosproject.net.tunnel.TunnelStore;
-import org.onosproject.net.tunnel.TunnelStoreDelegate;
-import org.onosproject.net.tunnel.TunnelSubscription;
+import org.onosproject.incubator.net.tunnel.DefaultTunnel;
+import org.onosproject.incubator.net.tunnel.Tunnel;
+import org.onosproject.incubator.net.tunnel.Tunnel.Type;
+import org.onosproject.incubator.net.tunnel.TunnelEndPoint;
+import org.onosproject.incubator.net.tunnel.TunnelEvent;
+import org.onosproject.incubator.net.tunnel.TunnelId;
+import org.onosproject.incubator.net.tunnel.TunnelName;
+import org.onosproject.incubator.net.tunnel.TunnelStore;
+import org.onosproject.incubator.net.tunnel.TunnelStoreDelegate;
+import org.onosproject.incubator.net.tunnel.TunnelSubscription;
 import org.onosproject.store.AbstractStore;
 import org.onosproject.store.app.GossipApplicationStore.InternalState;
 import org.onosproject.store.cluster.messaging.ClusterCommunicationService;
diff --git a/core/store/dist/src/main/java/org/onosproject/store/tunnel/impl/package-info.java b/incubator/store/src/main/java/org/onosproject/incubator/store/tunnel/impl/package-info.java
similarity index 86%
rename from core/store/dist/src/main/java/org/onosproject/store/tunnel/impl/package-info.java
rename to incubator/store/src/main/java/org/onosproject/incubator/store/tunnel/impl/package-info.java
index 44ce0fe..f0c06f7 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/tunnel/impl/package-info.java
+++ b/incubator/store/src/main/java/org/onosproject/incubator/store/tunnel/impl/package-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2014 Open Networking Laboratory
+ * 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.
@@ -17,4 +17,4 @@
 /**
  * Implementation of distributed tunnel store using p2p synchronization protocol.
  */
-package org.onosproject.store.tunnel.impl;
+package org.onosproject.incubator.store.tunnel.impl;
diff --git a/pom.xml b/pom.xml
index 009a5ea..93e7330 100644
--- a/pom.xml
+++ b/pom.xml
@@ -361,6 +361,11 @@
                 <scope>test</scope>
             </dependency>
 
+            <dependency>
+                <groupId>org.onosproject</groupId>
+                <artifactId>onos-incubator-api</artifactId>
+                <version>${project.version}</version>
+            </dependency>
 
             <dependency>
                 <groupId>org.onosproject</groupId>
diff --git a/providers/pom.xml b/providers/pom.xml
index 7d9f38f..d59b2b6 100644
--- a/providers/pom.xml
+++ b/providers/pom.xml
@@ -45,6 +45,10 @@
             <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>
diff --git a/providers/tunnel/src/main/java/org/onosproject/provider/tunnel/DefaultTunnelProvider.java b/providers/tunnel/src/main/java/org/onosproject/provider/tunnel/DefaultTunnelProvider.java
index 1a7a9b9..b110a0c 100644
--- a/providers/tunnel/src/main/java/org/onosproject/provider/tunnel/DefaultTunnelProvider.java
+++ b/providers/tunnel/src/main/java/org/onosproject/provider/tunnel/DefaultTunnelProvider.java
@@ -28,12 +28,12 @@
 import org.onosproject.net.Path;
 import org.onosproject.net.provider.AbstractProvider;
 import org.onosproject.net.provider.ProviderId;
-import org.onosproject.net.tunnel.Tunnel;
-import org.onosproject.net.tunnel.TunnelDescription;
-import org.onosproject.net.tunnel.TunnelId;
-import org.onosproject.net.tunnel.TunnelProvider;
-import org.onosproject.net.tunnel.TunnelProviderRegistry;
-import org.onosproject.net.tunnel.TunnelProviderService;
+import org.onosproject.incubator.net.tunnel.Tunnel;
+import org.onosproject.incubator.net.tunnel.TunnelDescription;
+import org.onosproject.incubator.net.tunnel.TunnelId;
+import org.onosproject.incubator.net.tunnel.TunnelProvider;
+import org.onosproject.incubator.net.tunnel.TunnelProviderRegistry;
+import org.onosproject.incubator.net.tunnel.TunnelProviderService;
 import org.osgi.service.component.ComponentContext;
 import org.slf4j.Logger;
 
diff --git a/providers/tunnel/src/main/java/org/onosproject/provider/tunnel/cli/CreateTunnelCommand.java b/providers/tunnel/src/main/java/org/onosproject/provider/tunnel/cli/CreateTunnelCommand.java
index 0086e32..495402b 100644
--- a/providers/tunnel/src/main/java/org/onosproject/provider/tunnel/cli/CreateTunnelCommand.java
+++ b/providers/tunnel/src/main/java/org/onosproject/provider/tunnel/cli/CreateTunnelCommand.java
@@ -29,17 +29,17 @@
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.SparseAnnotations;
 import org.onosproject.net.provider.ProviderId;
-import org.onosproject.net.tunnel.DefaultOpticalTunnelEndPoint;
-import org.onosproject.net.tunnel.DefaultTunnelDescription;
-import org.onosproject.net.tunnel.IpTunnelEndPoint;
-import org.onosproject.net.tunnel.OpticalLogicId;
-import org.onosproject.net.tunnel.OpticalTunnelEndPoint;
-import org.onosproject.net.tunnel.Tunnel;
-import org.onosproject.net.tunnel.TunnelDescription;
-import org.onosproject.net.tunnel.TunnelEndPoint;
-import org.onosproject.net.tunnel.TunnelId;
-import org.onosproject.net.tunnel.TunnelName;
-import org.onosproject.net.tunnel.TunnelProvider;
+import org.onosproject.incubator.net.tunnel.DefaultOpticalTunnelEndPoint;
+import org.onosproject.incubator.net.tunnel.DefaultTunnelDescription;
+import org.onosproject.incubator.net.tunnel.IpTunnelEndPoint;
+import org.onosproject.incubator.net.tunnel.OpticalLogicId;
+import org.onosproject.incubator.net.tunnel.OpticalTunnelEndPoint;
+import org.onosproject.incubator.net.tunnel.Tunnel;
+import org.onosproject.incubator.net.tunnel.TunnelDescription;
+import org.onosproject.incubator.net.tunnel.TunnelEndPoint;
+import org.onosproject.incubator.net.tunnel.TunnelId;
+import org.onosproject.incubator.net.tunnel.TunnelName;
+import org.onosproject.incubator.net.tunnel.TunnelProvider;
 
 /**
  * Supports for creating a tunnel by using IP address and optical as tunnel end
diff --git a/providers/tunnel/src/main/java/org/onosproject/provider/tunnel/cli/RemoveTunnelCommand.java b/providers/tunnel/src/main/java/org/onosproject/provider/tunnel/cli/RemoveTunnelCommand.java
index b4be6ac..27721e7 100644
--- a/providers/tunnel/src/main/java/org/onosproject/provider/tunnel/cli/RemoveTunnelCommand.java
+++ b/providers/tunnel/src/main/java/org/onosproject/provider/tunnel/cli/RemoveTunnelCommand.java
@@ -24,15 +24,15 @@
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.PortNumber;
 import org.onosproject.net.provider.ProviderId;
-import org.onosproject.net.tunnel.DefaultOpticalTunnelEndPoint;
-import org.onosproject.net.tunnel.DefaultTunnelDescription;
-import org.onosproject.net.tunnel.IpTunnelEndPoint;
-import org.onosproject.net.tunnel.OpticalLogicId;
-import org.onosproject.net.tunnel.OpticalTunnelEndPoint;
-import org.onosproject.net.tunnel.Tunnel;
-import org.onosproject.net.tunnel.TunnelDescription;
-import org.onosproject.net.tunnel.TunnelEndPoint;
-import org.onosproject.net.tunnel.TunnelProvider;
+import org.onosproject.incubator.net.tunnel.DefaultOpticalTunnelEndPoint;
+import org.onosproject.incubator.net.tunnel.DefaultTunnelDescription;
+import org.onosproject.incubator.net.tunnel.IpTunnelEndPoint;
+import org.onosproject.incubator.net.tunnel.OpticalLogicId;
+import org.onosproject.incubator.net.tunnel.OpticalTunnelEndPoint;
+import org.onosproject.incubator.net.tunnel.Tunnel;
+import org.onosproject.incubator.net.tunnel.TunnelDescription;
+import org.onosproject.incubator.net.tunnel.TunnelEndPoint;
+import org.onosproject.incubator.net.tunnel.TunnelProvider;
 
 /**
  * Supports for removing all tunnels by using IP address and optical as tunnel
diff --git a/tools/build/onos-package b/tools/build/onos-package
index 5a8f9ac..5885562 100755
--- a/tools/build/onos-package
+++ b/tools/build/onos-package
@@ -67,7 +67,7 @@
     $ONOS_STAGE/$KARAF_DIST/etc/org.apache.karaf.features.cfg
 
 # Patch the Apache Karaf distribution file to load default ONOS boot features
-export BOOT_FEATURES="webconsole,onos-api,onos-core,onos-cli,onos-rest,onos-gui"
+export BOOT_FEATURES="webconsole,onos-api,onos-core,onos-incubator,onos-cli,onos-rest,onos-gui"
 perl -pi.old -e "s|^(featuresBoot=.*)|\1,$BOOT_FEATURES|" \
     $ONOS_STAGE/$KARAF_DIST/etc/org.apache.karaf.features.cfg
 
diff --git a/tools/dev/bin/onos-setup-karaf b/tools/dev/bin/onos-setup-karaf
index 2b77e74..1d82c1d 100755
--- a/tools/dev/bin/onos-setup-karaf
+++ b/tools/dev/bin/onos-setup-karaf
@@ -79,7 +79,7 @@
 
 if ! grep -q ",onos-api," $KARAF_ROOT/etc/org.apache.karaf.features.cfg; then
     # Patch the Apache Karaf distribution file to load default ONOS boot features
-    export BOOT_FEATURES="webconsole,onos-api,onos-core,onos-cli,onos-rest,onos-gui"
+    export BOOT_FEATURES="webconsole,onos-api,onos-core,onos-incubator,onos-cli,onos-rest,onos-gui"
     echo "Adding ONOS boot features $BOOT_FEATURES..."
     perl -pi.old -e "s|^(featuresBoot=.*)|\1,$BOOT_FEATURES|" \
         $KARAF_ROOT/etc/org.apache.karaf.features.cfg