Implemented REST API for multicast RIB.
Change-Id: I5de6fe0aae412083597113e355ba0e8c984be5f1
diff --git a/core/api/src/main/java/org/onosproject/net/mcast/McastStore.java b/core/api/src/main/java/org/onosproject/net/mcast/McastStore.java
index 96b21f6..067f517 100644
--- a/core/api/src/main/java/org/onosproject/net/mcast/McastStore.java
+++ b/core/api/src/main/java/org/onosproject/net/mcast/McastStore.java
@@ -51,7 +51,7 @@
void storeSink(McastRoute route, ConnectPoint sink, Type operation);
/**
- * Obtain the source for a multicast route.
+ * Obtains the source for a multicast route.
*
* @param route a multicast route
* @return a connect point
@@ -59,10 +59,17 @@
ConnectPoint sourceFor(McastRoute route);
/**
- * Obtain the sinks for a multicast route.
+ * Obtains the sinks for a multicast route.
*
* @param route a multicast route
* @return a set of sinks
*/
Set<ConnectPoint> sinksFor(McastRoute route);
+
+ /**
+ * Gets the set of all known multicast routes.
+ *
+ * @return set of multicast routes
+ */
+ Set<McastRoute> getRoutes();
}
diff --git a/core/api/src/main/java/org/onosproject/net/mcast/MulticastRouteService.java b/core/api/src/main/java/org/onosproject/net/mcast/MulticastRouteService.java
index 05bd6cb..64aa842 100644
--- a/core/api/src/main/java/org/onosproject/net/mcast/MulticastRouteService.java
+++ b/core/api/src/main/java/org/onosproject/net/mcast/MulticastRouteService.java
@@ -43,6 +43,13 @@
void remove(McastRoute route);
/**
+ * Gets all multicast routes in the system.
+ *
+ * @return set of multicast routes
+ */
+ Set<McastRoute> getRoutes();
+
+ /**
* Adds a source connection to the route from where the
* data stream is originating.
*
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/CodecManager.java b/core/common/src/main/java/org/onosproject/codec/impl/CodecManager.java
index 99030ca..cbed1c2 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/CodecManager.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/CodecManager.java
@@ -53,6 +53,7 @@
import org.onosproject.net.intent.HostToHostIntent;
import org.onosproject.net.intent.Intent;
import org.onosproject.net.intent.PointToPointIntent;
+import org.onosproject.net.mcast.McastRoute;
import org.onosproject.net.meter.Band;
import org.onosproject.net.meter.Meter;
import org.onosproject.net.meter.MeterRequest;
@@ -117,6 +118,7 @@
registerCodec(FilteringObjective.class, new FilteringObjectiveCodec());
registerCodec(ForwardingObjective.class, new ForwardingObjectiveCodec());
registerCodec(NextObjective.class, new NextObjectiveCodec());
+ registerCodec(McastRoute.class, new McastRouteCodec());
log.info("Started");
}
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/McastRouteCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/McastRouteCodec.java
new file mode 100644
index 0000000..58bd95c
--- /dev/null
+++ b/core/common/src/main/java/org/onosproject/codec/impl/McastRouteCodec.java
@@ -0,0 +1,44 @@
+package org.onosproject.codec.impl;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.onlab.packet.IpAddress;
+import org.onosproject.codec.CodecContext;
+import org.onosproject.codec.JsonCodec;
+import org.onosproject.net.mcast.McastRoute;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+/**
+ * Codec to encode and decode a multicast route to and from JSON.
+ */
+public class McastRouteCodec extends JsonCodec<McastRoute> {
+
+ private static final String SOURCE = "source";
+ private static final String GROUP = "group";
+ private static final String TYPE = "type";
+
+ @Override
+ public ObjectNode encode(McastRoute route, CodecContext context) {
+ checkNotNull(route);
+ ObjectNode root = context.mapper().createObjectNode()
+ .put(TYPE, route.type().toString())
+ .put(SOURCE, route.source().toString())
+ .put(GROUP, route.group().toString());
+
+ return root;
+ }
+
+ @Override
+ public McastRoute decode(ObjectNode json, CodecContext context) {
+ if (json == null || !json.isObject()) {
+ return null;
+ }
+
+ IpAddress source = IpAddress.valueOf(json.path(SOURCE).asText());
+ IpAddress group = IpAddress.valueOf(json.path(GROUP).asText());
+
+ McastRoute route = new McastRoute(source, group, McastRoute.Type.STATIC);
+
+ return route;
+ }
+}
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 13092fe..d5a73c0 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
@@ -20,6 +20,7 @@
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
import org.onlab.packet.ChassisId;
import org.onlab.packet.EthType;
import org.onlab.packet.Ip4Address;
@@ -219,6 +220,7 @@
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
+import java.util.concurrent.atomic.AtomicReference;
public final class KryoNamespaces {
@@ -228,6 +230,7 @@
.register(AtomicBoolean.class)
.register(AtomicInteger.class)
.register(AtomicLong.class)
+ .register(AtomicReference.class)
.register(new ImmutableListSerializer(),
ImmutableList.class,
ImmutableList.of(1).getClass(),
@@ -245,6 +248,7 @@
.register(HashMap.class)
.register(ConcurrentHashMap.class)
.register(CopyOnWriteArraySet.class)
+ .register(Sets.newConcurrentHashSet().getClass())
.register(ArrayList.class,
LinkedList.class,
HashSet.class,