Committed by
Gerrit Code Review
Add ability to add mcast sinks via REST API
Change-Id: Ie757537a8b514bfec1e468628dac1a8faa4405fc
Showing
2 changed files
with
62 additions
and
0 deletions
... | @@ -17,6 +17,9 @@ | ... | @@ -17,6 +17,9 @@ |
17 | package org.onosproject.rest.resources; | 17 | package org.onosproject.rest.resources; |
18 | 18 | ||
19 | import com.fasterxml.jackson.databind.node.ObjectNode; | 19 | import com.fasterxml.jackson.databind.node.ObjectNode; |
20 | +import com.google.common.annotations.Beta; | ||
21 | +import org.onlab.packet.IpAddress; | ||
22 | +import org.onosproject.net.ConnectPoint; | ||
20 | import org.onosproject.net.mcast.McastRoute; | 23 | import org.onosproject.net.mcast.McastRoute; |
21 | import org.onosproject.net.mcast.MulticastRouteService; | 24 | import org.onosproject.net.mcast.MulticastRouteService; |
22 | import org.onosproject.rest.AbstractWebResource; | 25 | import org.onosproject.rest.AbstractWebResource; |
... | @@ -26,6 +29,7 @@ import javax.ws.rs.DELETE; | ... | @@ -26,6 +29,7 @@ import javax.ws.rs.DELETE; |
26 | import javax.ws.rs.GET; | 29 | import javax.ws.rs.GET; |
27 | import javax.ws.rs.POST; | 30 | import javax.ws.rs.POST; |
28 | import javax.ws.rs.Path; | 31 | import javax.ws.rs.Path; |
32 | +import javax.ws.rs.PathParam; | ||
29 | import javax.ws.rs.Produces; | 33 | import javax.ws.rs.Produces; |
30 | import javax.ws.rs.core.MediaType; | 34 | import javax.ws.rs.core.MediaType; |
31 | import javax.ws.rs.core.Response; | 35 | import javax.ws.rs.core.Response; |
... | @@ -37,6 +41,7 @@ import java.util.Set; | ... | @@ -37,6 +41,7 @@ import java.util.Set; |
37 | /** | 41 | /** |
38 | * Manage the multicast routing information. | 42 | * Manage the multicast routing information. |
39 | */ | 43 | */ |
44 | +@Beta | ||
40 | @Path("mcast") | 45 | @Path("mcast") |
41 | public class MulticastRouteWebResource extends AbstractWebResource { | 46 | public class MulticastRouteWebResource extends AbstractWebResource { |
42 | 47 | ||
... | @@ -103,4 +108,40 @@ public class MulticastRouteWebResource extends AbstractWebResource { | ... | @@ -103,4 +108,40 @@ public class MulticastRouteWebResource extends AbstractWebResource { |
103 | } | 108 | } |
104 | return Response.noContent().build(); | 109 | return Response.noContent().build(); |
105 | } | 110 | } |
111 | + | ||
112 | + /** | ||
113 | + * Create a sink for a multicast route. | ||
114 | + * Creates a new sink for an existing multicast route. | ||
115 | + * | ||
116 | + * @onos.rsModel McastSinkPost | ||
117 | + * @param group group IP address | ||
118 | + * @param source source IP address | ||
119 | + * @param stream sink JSON | ||
120 | + * @return status of the request - CREATED if the JSON is correct, | ||
121 | + * BAD_REQUEST if the JSON is invalid | ||
122 | + */ | ||
123 | + @POST | ||
124 | + @Consumes(MediaType.APPLICATION_JSON) | ||
125 | + @Produces(MediaType.APPLICATION_JSON) | ||
126 | + @Path("sinks/{group}/{source}") | ||
127 | + public Response addSinks(@PathParam("group") String group, | ||
128 | + @PathParam("source") String source, | ||
129 | + InputStream stream) { | ||
130 | + MulticastRouteService service = get(MulticastRouteService.class); | ||
131 | + try { | ||
132 | + McastRoute route = new McastRoute(IpAddress.valueOf(source), IpAddress.valueOf(group), | ||
133 | + McastRoute.Type.STATIC); | ||
134 | + ObjectNode jsonTree = (ObjectNode) mapper().readTree(stream); | ||
135 | + jsonTree.path("sinks").forEach(node -> { | ||
136 | + ConnectPoint sink = ConnectPoint.deviceConnectPoint(node.asText()); | ||
137 | + service.addSink(route, sink); | ||
138 | + }); | ||
139 | + } catch (IOException ex) { | ||
140 | + throw new IllegalArgumentException(ex); | ||
141 | + } | ||
142 | + | ||
143 | + return Response | ||
144 | + .created(URI.create("")) | ||
145 | + .build(); | ||
146 | + } | ||
106 | } | 147 | } | ... | ... |
1 | +{ | ||
2 | + "type": "object", | ||
3 | + "title": "sinks", | ||
4 | + "required": [ | ||
5 | + "sinks" | ||
6 | + ], | ||
7 | + "properties": { | ||
8 | + "sinks": { | ||
9 | + "type": "array", | ||
10 | + "xml": { | ||
11 | + "name": "sinks", | ||
12 | + "wrapped": true | ||
13 | + }, | ||
14 | + "items": { | ||
15 | + "type": "string", | ||
16 | + "title": "sink", | ||
17 | + "example": "of:0000000000000001/1" | ||
18 | + } | ||
19 | + } | ||
20 | + } | ||
21 | +} |
-
Please register or login to post a comment