Jonathan Hart
Committed by Gerrit Code Review

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

Change-Id: If442803cf530cfeb949e7fbce34f74db082f30c1
/**
* Sample Multicast forwarding framework using intents.
*/
package org.onosproject.mfwd.cli;
<!--
~ 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>
/*
* 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 @@ import org.onosproject.net.mcast.MulticastRouteService;
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 @@ public class McastDeleteCommand extends AbstractShellCommand {
@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);
......
/*
* 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 @@ import org.onosproject.net.mcast.MulticastRouteService;
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 @@ public class McastJoinCommand extends AbstractShellCommand {
@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);
if (ingressPort != null) {
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 (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");
print("Added the mcast route: %s", mRoute);
}
}
......
/*
* 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 @@ import static org.slf4j.LoggerFactory.getLogger;
@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);
}
}
}
......
......@@ -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"/>
......
......@@ -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 @@ public final class KryoNamespaces {
.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,
......
......@@ -62,7 +62,7 @@ public class DistributedMcastStore extends AbstractStore<McastEvent, McastStoreD
McastRoute.Type.class,
ConnectPoint.class
).build()))
.withRelaxedReadConsistency()
//.withRelaxedReadConsistency()
.build();
mcastRoutes = mcastRib.asJavaMap();
......