Move multicast CLI commands into the core with the core mcast system.

Change-Id: If442803cf530cfeb949e7fbce34f74db082f30c1
diff --git a/apps/mfwd/src/main/java/org/onosproject/mfwd/cli/package-info.java b/apps/mfwd/src/main/java/org/onosproject/mfwd/cli/package-info.java
deleted file mode 100644
index bff76fc..0000000
--- a/apps/mfwd/src/main/java/org/onosproject/mfwd/cli/package-info.java
+++ /dev/null
@@ -1,5 +0,0 @@
-/**
- * Sample Multicast forwarding framework using intents.
- */
-package org.onosproject.mfwd.cli;
-
diff --git a/apps/mfwd/src/main/resources/OSGI-INF/blueprint/shell-config.xml b/apps/mfwd/src/main/resources/OSGI-INF/blueprint/shell-config.xml
deleted file mode 100644
index 966cb4f..0000000
--- a/apps/mfwd/src/main/resources/OSGI-INF/blueprint/shell-config.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<!--

-  ~ Copyright 2014 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.

-  -->

-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">

-

-    <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0">

-        <command>

-            <action class="org.onosproject.mfwd.cli.McastJoinCommand"/>

-        </command>

-        <command>

-            <action class="org.onosproject.mfwd.cli.McastDeleteCommand"/>

-        </command>

-        <command>

-            <action class="org.onosproject.mfwd.cli.McastShowCommand"/>

-        </command>

-    </command-bundle>

-

-</blueprint>

diff --git a/apps/mfwd/src/main/java/org/onosproject/mfwd/cli/McastDeleteCommand.java b/cli/src/main/java/org/onosproject/cli/net/McastDeleteCommand.java
similarity index 80%
rename from apps/mfwd/src/main/java/org/onosproject/mfwd/cli/McastDeleteCommand.java
rename to cli/src/main/java/org/onosproject/cli/net/McastDeleteCommand.java
index 5ef4dce..53c4888 100644
--- a/apps/mfwd/src/main/java/org/onosproject/mfwd/cli/McastDeleteCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/McastDeleteCommand.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2015 Open Networking Laboratory
+ * Copyright 2016 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.
@@ -13,14 +13,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.mfwd.cli;
+package org.onosproject.cli.net;
 
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.karaf.shell.commands.Argument;
 import org.apache.karaf.shell.commands.Command;
+import org.onlab.packet.IpAddress;
 import org.onosproject.cli.AbstractShellCommand;
-import org.onosproject.mfwd.impl.McastForwarding;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.mcast.McastRoute;
 import org.onosproject.net.mcast.MulticastRouteService;
@@ -32,9 +30,6 @@
         description = "Delete a multicast route flow")
 public class McastDeleteCommand extends AbstractShellCommand {
 
-    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    MulticastRouteService mcastRouteManager = AbstractShellCommand.get(MulticastRouteService.class);
-
     @Argument(index = 0, name = "sAddr",
             description = "IP Address of the multicast source. '*' can be used for any source (*, G) entry",
             required = true, multiValued = false)
@@ -53,8 +48,10 @@
 
     @Override
     protected void execute() {
+        MulticastRouteService mcastRouteManager = get(MulticastRouteService.class);
 
-        McastRoute mRoute = McastForwarding.createStaticRoute(sAddr, gAddr);
+        McastRoute mRoute = new McastRoute(IpAddress.valueOf(sAddr),
+                IpAddress.valueOf(gAddr), McastRoute.Type.STATIC);
 
         if (egressList == null) {
             mcastRouteManager.remove(mRoute);
diff --git a/apps/mfwd/src/main/java/org/onosproject/mfwd/cli/McastJoinCommand.java b/cli/src/main/java/org/onosproject/cli/net/McastJoinCommand.java
similarity index 67%
rename from apps/mfwd/src/main/java/org/onosproject/mfwd/cli/McastJoinCommand.java
rename to cli/src/main/java/org/onosproject/cli/net/McastJoinCommand.java
index 707dbf0..55050ed 100644
--- a/apps/mfwd/src/main/java/org/onosproject/mfwd/cli/McastJoinCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/McastJoinCommand.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2014-2015 Open Networking Laboratory
+ * Copyright 2016 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.
@@ -13,14 +13,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.mfwd.cli;
+package org.onosproject.cli.net;
 
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.karaf.shell.commands.Argument;
 import org.apache.karaf.shell.commands.Command;
+import org.onlab.packet.IpAddress;
 import org.onosproject.cli.AbstractShellCommand;
-import org.onosproject.mfwd.impl.McastForwarding;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.mcast.McastRoute;
 import org.onosproject.net.mcast.MulticastRouteService;
@@ -32,9 +30,6 @@
          description = "Installs a source, multicast group flow")
 public class McastJoinCommand extends AbstractShellCommand {
 
-    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    MulticastRouteService mcastRouteManager = AbstractShellCommand.get(MulticastRouteService.class);
-
     @Argument(index = 0, name = "sAddr",
               description = "IP Address of the multicast source. '*' can be used for any source (*, G) entry",
               required = true, multiValued = false)
@@ -57,19 +52,26 @@
 
     @Override
     protected void execute() {
+        MulticastRouteService mcastRouteManager = get(MulticastRouteService.class);
 
-        McastRoute mRoute = McastForwarding.createStaticRoute(sAddr, gAddr);
+        //McastRoute mRoute = McastForwarding.createStaticRoute(sAddr, gAddr);
+        McastRoute mRoute = new McastRoute(IpAddress.valueOf(sAddr),
+                IpAddress.valueOf(gAddr), McastRoute.Type.STATIC);
         mcastRouteManager.add(mRoute);
 
-        ConnectPoint ingress = ConnectPoint.deviceConnectPoint(ingressPort);
-        mcastRouteManager.addSource(mRoute, ingress);
-
-        for (String egCP : ports) {
-            log.debug("Egress port provided: " + egCP);
-            ConnectPoint egress = ConnectPoint.deviceConnectPoint(egCP);
-            mcastRouteManager.addSink(mRoute, egress);
-
+        if (ingressPort != null) {
+            ConnectPoint ingress = ConnectPoint.deviceConnectPoint(ingressPort);
+            mcastRouteManager.addSource(mRoute, ingress);
         }
-        print("Added the mcast route");
+
+        if (ports != null) {
+            for (String egCP : ports) {
+                log.debug("Egress port provided: " + egCP);
+                ConnectPoint egress = ConnectPoint.deviceConnectPoint(egCP);
+                mcastRouteManager.addSink(mRoute, egress);
+
+            }
+        }
+        print("Added the mcast route: %s", mRoute);
     }
 }
diff --git a/apps/mfwd/src/main/java/org/onosproject/mfwd/cli/McastShowCommand.java b/cli/src/main/java/org/onosproject/cli/net/McastShowCommand.java
similarity index 61%
rename from apps/mfwd/src/main/java/org/onosproject/mfwd/cli/McastShowCommand.java
rename to cli/src/main/java/org/onosproject/cli/net/McastShowCommand.java
index 1d3f850..2b9a56a 100644
--- a/apps/mfwd/src/main/java/org/onosproject/mfwd/cli/McastShowCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/McastShowCommand.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2014-2015 Open Networking Laboratory
+ * Copyright 2016 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.
@@ -13,17 +13,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.onosproject.mfwd.cli;
+package org.onosproject.cli.net;
 
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.karaf.shell.commands.Command;
-
 import org.onosproject.cli.AbstractShellCommand;
-
+import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.mcast.McastRoute;
 import org.onosproject.net.mcast.MulticastRouteService;
-import org.slf4j.Logger;
-import static org.slf4j.LoggerFactory.getLogger;
+
+import java.util.Set;
 
 /**
  * Displays the source, multicast group flows entries.
@@ -31,15 +29,20 @@
 @Command(scope = "onos", name = "mcast-show", description = "Displays the source, multicast group flows")
 public class McastShowCommand extends AbstractShellCommand {
 
-    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    MulticastRouteService mcastRouteManager = AbstractShellCommand.get(MulticastRouteService.class);
-
-    private final Logger log = getLogger(getClass());
-    private static final String MCAST_GROUP = "mcastgroup";
+    private static final String FORMAT = "route=%s, source=%s, sinks=%s";
 
     @Override
     protected void execute() {
-        //TODO
+        MulticastRouteService mcastService = get(MulticastRouteService.class);
+
+        Set<McastRoute> routes = mcastService.getRoutes();
+
+        for (McastRoute route : routes) {
+            Set<ConnectPoint> sinks = mcastService.fetchSinks(route);
+            ConnectPoint source = mcastService.fetchSource(route);
+
+            print(FORMAT, route, source, sinks);
+        }
     }
 
 }
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 2c75eff..6d5b839 100644
--- a/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
+++ b/cli/src/main/resources/OSGI-INF/blueprint/shell-config.xml
@@ -93,6 +93,16 @@
         </command>
 
         <command>
+            <action class="org.onosproject.cli.net.McastShowCommand"/>
+        </command>
+        <command>
+            <action class="org.onosproject.cli.net.McastJoinCommand"/>
+        </command>
+        <command>
+            <action class="org.onosproject.cli.net.McastDeleteCommand"/>
+        </command>
+
+        <command>
             <action class="org.onosproject.cli.net.DriversListCommand"/>
             <completers>
                 <ref component-id="driverNameCompleter"/>
diff --git a/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java b/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java
index 9d8a0b2..ea37c43 100644
--- a/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java
+++ b/core/store/serializers/src/main/java/org/onosproject/store/serializers/KryoNamespaces.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.store.serializers;
 
+import com.esotericsoftware.kryo.serializers.JavaSerializer;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
@@ -251,7 +252,7 @@
             .register(HashMap.class)
             .register(ConcurrentHashMap.class)
             .register(CopyOnWriteArraySet.class)
-            .register(Sets.newConcurrentHashSet().getClass())
+            .register(new JavaSerializer(), Sets.newConcurrentHashSet().getClass())
             .register(ArrayList.class,
                       LinkedList.class,
                       HashSet.class,
diff --git a/incubator/store/src/main/java/org/onosproject/incubator/store/mcast/impl/DistributedMcastStore.java b/incubator/store/src/main/java/org/onosproject/incubator/store/mcast/impl/DistributedMcastStore.java
index 60510fc..5af5266 100644
--- a/incubator/store/src/main/java/org/onosproject/incubator/store/mcast/impl/DistributedMcastStore.java
+++ b/incubator/store/src/main/java/org/onosproject/incubator/store/mcast/impl/DistributedMcastStore.java
@@ -62,7 +62,7 @@
                         McastRoute.Type.class,
                         ConnectPoint.class
                 ).build()))
-                .withRelaxedReadConsistency()
+                //.withRelaxedReadConsistency()
                 .build();
 
         mcastRoutes = mcastRib.asJavaMap();