Fixed to add the subNetCidr of flow when deleted.
Change-Id: I2eb10b3222e63c1f53a4bb52d35bebc2de81a992
diff --git a/apps/openstacknetworking/routing/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingManager.java b/apps/openstacknetworking/routing/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingManager.java
index ab68ead..30916cf 100644
--- a/apps/openstacknetworking/routing/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingManager.java
+++ b/apps/openstacknetworking/routing/src/main/java/org/onosproject/openstacknetworking/routing/OpenstackRoutingManager.java
@@ -137,7 +137,11 @@
openstackService.ports().stream()
.filter(osPort -> osPort.deviceOwner().equals(DEVICE_OWNER_ROUTER_INTERFACE) &&
osPort.deviceId().equals(osRouter.id()))
- .forEach(osPort -> unsetExternalConnection(osRouter, osPort.networkId()));
+ .forEach(osPort -> {
+ String subnetId = osPort.fixedIps().keySet().stream().findFirst().get();
+ OpenstackSubnet osSubNet = openstackService.subnet(subnetId);
+ unsetExternalConnection(osRouter, osPort.networkId(), osSubNet.cidr());
+ });
log.info("Disconnected external gateway from router {}",
osRouter.name());
@@ -184,7 +188,7 @@
unsetRoutes(osRouter, osSubnet);
if (osRouter.gatewayExternalInfo().externalFixedIps().size() > 0) {
- unsetExternalConnection(osRouter, osNet.id());
+ unsetExternalConnection(osRouter, osNet.id(), osSubnet.cidr());
}
log.info("Disconnected {} from router {}", osSubnet.cidr(), osRouter.name());
}
@@ -250,7 +254,7 @@
populateExternalRules(osNet, osSubNet);
}
- private void unsetExternalConnection(OpenstackRouter osRouter, String osNetId) {
+ private void unsetExternalConnection(OpenstackRouter osRouter, String osNetId, String subNetCidr) {
if (!osRouter.gatewayExternalInfo().isEnablePnat()) {
log.debug("Source NAT is disabled");
return;
@@ -258,7 +262,7 @@
// FIXME router interface is subnet specific, not network
OpenstackNetwork osNet = openstackService.network(osNetId);
- removeExternalRules(osNet);
+ removeExternalRules(osNet, subNetCidr);
}
private void setRoutes(OpenstackRouter osRouter, Optional<Host> host) {
@@ -324,10 +328,11 @@
populateGatewayToController(Long.valueOf(osNet.segmentId()), osSubNet.cidr());
}
- private void removeExternalRules(OpenstackNetwork osNet) {
+ private void removeExternalRules(OpenstackNetwork osNet, String subNetCidr) {
TrafficSelector.Builder sBuilder = DefaultTrafficSelector.builder();
sBuilder.matchEthType(Ethernet.TYPE_IPV4)
.matchTunnelId(Long.valueOf(osNet.segmentId()))
+ .matchIPSrc(IpPrefix.valueOf(subNetCidr))
.matchEthDst(Constants.DEFAULT_GATEWAY_MAC);
nodeService.completeNodes().forEach(node -> {
diff --git a/apps/openstacknetworking/web/src/main/java/org/onosproject/openstacknetworking/web/OpenstackPortWebResource.java b/apps/openstacknetworking/web/src/main/java/org/onosproject/openstacknetworking/web/OpenstackPortWebResource.java
index 3e71f88..c82ac33 100644
--- a/apps/openstacknetworking/web/src/main/java/org/onosproject/openstacknetworking/web/OpenstackPortWebResource.java
+++ b/apps/openstacknetworking/web/src/main/java/org/onosproject/openstacknetworking/web/OpenstackPortWebResource.java
@@ -57,7 +57,7 @@
@Path("{portUUID}")
@DELETE
- @Produces(MediaType.APPLICATION_JSON)
+ @Consumes(MediaType.APPLICATION_JSON)
public Response deletePorts(@PathParam("portUUID") String id) {
return Response.noContent().build();
}