Hyunsun Moon
Committed by Gerrit Code Review

CORD-536 Support bidirectional connectivity between two services with dependency

Change-Id: I6530cd6d4865567d878a8269e09b98f5694b0454
...@@ -209,7 +209,8 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro ...@@ -209,7 +209,8 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro
209 } 209 }
210 210
211 @Override 211 @Override
212 - public void createServiceDependency(CordServiceId tServiceId, CordServiceId pServiceId) { 212 + public void createServiceDependency(CordServiceId tServiceId, CordServiceId pServiceId,
213 + boolean isBidirectional) {
213 CordService tService = getCordService(tServiceId); 214 CordService tService = getCordService(tServiceId);
214 CordService pService = getCordService(pServiceId); 215 CordService pService = getCordService(pServiceId);
215 216
...@@ -219,7 +220,7 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro ...@@ -219,7 +220,7 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro
219 } 220 }
220 221
221 log.info("Service dependency from {} to {} created.", tService.id().id(), pService.id().id()); 222 log.info("Service dependency from {} to {} created.", tService.id().id(), pService.id().id());
222 - ruleInstaller.populateServiceDependencyRules(tService, pService); 223 + ruleInstaller.populateServiceDependencyRules(tService, pService, isBidirectional);
223 } 224 }
224 225
225 @Override 226 @Override
......
...@@ -254,8 +254,10 @@ public class CordVtnRuleInstaller { ...@@ -254,8 +254,10 @@ public class CordVtnRuleInstaller {
254 * 254 *
255 * @param tService tenant cord service 255 * @param tService tenant cord service
256 * @param pService provider cord service 256 * @param pService provider cord service
257 + * @param isBidirectional true to enable bidirectional connection between two services
257 */ 258 */
258 - public void populateServiceDependencyRules(CordService tService, CordService pService) { 259 + public void populateServiceDependencyRules(CordService tService, CordService pService,
260 + boolean isBidirectional) {
259 checkNotNull(tService); 261 checkNotNull(tService);
260 checkNotNull(pService); 262 checkNotNull(pService);
261 263
...@@ -280,6 +282,9 @@ public class CordVtnRuleInstaller { ...@@ -280,6 +282,9 @@ public class CordVtnRuleInstaller {
280 282
281 populateIndirectAccessRule(srcRange, serviceIp, outGroups); 283 populateIndirectAccessRule(srcRange, serviceIp, outGroups);
282 populateDirectAccessRule(srcRange, dstRange); 284 populateDirectAccessRule(srcRange, dstRange);
285 + if (isBidirectional) {
286 + populateDirectAccessRule(dstRange, srcRange);
287 + }
283 populateInServiceRule(inPorts, outGroups); 288 populateInServiceRule(inPorts, outGroups);
284 } 289 }
285 290
......
...@@ -44,8 +44,11 @@ public interface CordVtnService { ...@@ -44,8 +44,11 @@ public interface CordVtnService {
44 * 44 *
45 * @param tServiceId id of the service which has a dependency 45 * @param tServiceId id of the service which has a dependency
46 * @param pServiceId id of the service which provide dependency 46 * @param pServiceId id of the service which provide dependency
47 + * @param isBidirectional true to enable bidirectional connectivity between two services
47 */ 48 */
48 - void createServiceDependency(CordServiceId tServiceId, CordServiceId pServiceId); 49 + void createServiceDependency(CordServiceId tServiceId,
50 + CordServiceId pServiceId,
51 + boolean isBidirectional);
49 52
50 /** 53 /**
51 * Removes all dependencies from a given tenant service. 54 * Removes all dependencies from a given tenant service.
......
...@@ -19,16 +19,13 @@ import org.onosproject.cordvtn.CordVtnService; ...@@ -19,16 +19,13 @@ import org.onosproject.cordvtn.CordVtnService;
19 import org.onosproject.cordvtn.CordServiceId; 19 import org.onosproject.cordvtn.CordServiceId;
20 import org.onosproject.rest.AbstractWebResource; 20 import org.onosproject.rest.AbstractWebResource;
21 21
22 -import javax.ws.rs.Consumes;
23 import javax.ws.rs.DELETE; 22 import javax.ws.rs.DELETE;
24 import javax.ws.rs.POST; 23 import javax.ws.rs.POST;
25 -import javax.ws.rs.PUT;
26 import javax.ws.rs.Path; 24 import javax.ws.rs.Path;
27 import javax.ws.rs.PathParam; 25 import javax.ws.rs.PathParam;
28 import javax.ws.rs.Produces; 26 import javax.ws.rs.Produces;
29 import javax.ws.rs.core.MediaType; 27 import javax.ws.rs.core.MediaType;
30 import javax.ws.rs.core.Response; 28 import javax.ws.rs.core.Response;
31 -import java.io.InputStream;
32 29
33 /** 30 /**
34 * Manages service dependency. 31 * Manages service dependency.
...@@ -37,9 +34,10 @@ import java.io.InputStream; ...@@ -37,9 +34,10 @@ import java.io.InputStream;
37 public class ServiceDependencyWebResource extends AbstractWebResource { 34 public class ServiceDependencyWebResource extends AbstractWebResource {
38 35
39 private final CordVtnService service = get(CordVtnService.class); 36 private final CordVtnService service = get(CordVtnService.class);
37 + private static final String BIDIRECTION = "b";
40 38
41 /** 39 /**
42 - * Creates service dependencies. 40 + * Creates service dependencies with unidirectional access between the services.
43 * 41 *
44 * @param tServiceId tenant service id 42 * @param tServiceId tenant service id
45 * @param pServiceId provider service id 43 * @param pServiceId provider service id
...@@ -48,43 +46,47 @@ public class ServiceDependencyWebResource extends AbstractWebResource { ...@@ -48,43 +46,47 @@ public class ServiceDependencyWebResource extends AbstractWebResource {
48 @POST 46 @POST
49 @Path("{tenantServiceId}/{providerServiceId}") 47 @Path("{tenantServiceId}/{providerServiceId}")
50 @Produces(MediaType.APPLICATION_JSON) 48 @Produces(MediaType.APPLICATION_JSON)
51 - @Consumes(MediaType.APPLICATION_JSON)
52 public Response createServiceDependency(@PathParam("tenantServiceId") String tServiceId, 49 public Response createServiceDependency(@PathParam("tenantServiceId") String tServiceId,
53 @PathParam("providerServiceId") String pServiceId) { 50 @PathParam("providerServiceId") String pServiceId) {
54 - service.createServiceDependency(CordServiceId.of(tServiceId), CordServiceId.of(pServiceId)); 51 + service.createServiceDependency(CordServiceId.of(tServiceId),
52 + CordServiceId.of(pServiceId),
53 + false);
55 return Response.status(Response.Status.OK).build(); 54 return Response.status(Response.Status.OK).build();
56 } 55 }
57 56
58 /** 57 /**
59 - * Removes service dependencies. 58 + * Creates service dependencies with an access type extension between the services.
60 * 59 *
61 * @param tServiceId tenant service id 60 * @param tServiceId tenant service id
62 * @param pServiceId provider service id 61 * @param pServiceId provider service id
63 - * @return 200 OK, or 400 Bad Request 62 + * @param direction b for bidirectional access, otherwise unidirectional access
63 + * @return 200 OK
64 */ 64 */
65 - @DELETE 65 + @POST
66 - @Path("{tenantServiceId}/{providerServiceId}") 66 + @Path("{tenantServiceId}/{providerServiceId}/{direction}")
67 @Produces(MediaType.APPLICATION_JSON) 67 @Produces(MediaType.APPLICATION_JSON)
68 - public Response removeServiceDependency(@PathParam("tenantServiceId") String tServiceId, 68 + public Response createServiceDependency(@PathParam("tenantServiceId") String tServiceId,
69 - @PathParam("providerServiceId") String pServiceId) { 69 + @PathParam("providerServiceId") String pServiceId,
70 - service.removeServiceDependency(CordServiceId.of(tServiceId), CordServiceId.of(pServiceId)); 70 + @PathParam("direction") String direction) {
71 + service.createServiceDependency(CordServiceId.of(tServiceId),
72 + CordServiceId.of(pServiceId),
73 + direction.equals(BIDIRECTION));
71 return Response.status(Response.Status.OK).build(); 74 return Response.status(Response.Status.OK).build();
72 } 75 }
73 76
74 /** 77 /**
75 - * Updates service dependencies. 78 + * Removes service dependencies.
76 * 79 *
77 - * @param serviceId service id 80 + * @param tServiceId tenant service id
78 - * @param stream input JSON 81 + * @param pServiceId provider service id
79 * @return 200 OK, or 400 Bad Request 82 * @return 200 OK, or 400 Bad Request
80 */ 83 */
81 - @PUT 84 + @DELETE
82 - @Path("{serviceId}") 85 + @Path("{tenantServiceId}/{providerServiceId}")
83 @Produces(MediaType.APPLICATION_JSON) 86 @Produces(MediaType.APPLICATION_JSON)
84 - @Consumes(MediaType.APPLICATION_JSON) 87 + public Response removeServiceDependency(@PathParam("tenantServiceId") String tServiceId,
85 - public Response updateServiceDependency(@PathParam("serviceId") String serviceId, 88 + @PathParam("providerServiceId") String pServiceId) {
86 - InputStream stream) { 89 + service.removeServiceDependency(CordServiceId.of(tServiceId), CordServiceId.of(pServiceId));
87 - // TODO define input stream
88 return Response.status(Response.Status.OK).build(); 90 return Response.status(Response.Status.OK).build();
89 } 91 }
90 } 92 }
......