CORD-537 Added removing vSG
- Remove vSG from ONOS host list with allowed-ip-pairs update event
- Remove vSG from ONOS host list when vSG VM removed
Change-Id: Ic93fceec67d3faada795805d4c4a56ab5187d7e2
diff --git a/src/main/java/org/onosproject/cordvtn/CordVtn.java b/src/main/java/org/onosproject/cordvtn/CordVtn.java
index 4672912..7503c08 100644
--- a/src/main/java/org/onosproject/cordvtn/CordVtn.java
+++ b/src/main/java/org/onosproject/cordvtn/CordVtn.java
@@ -291,17 +291,9 @@
@Override
public void removeServiceVm(ConnectPoint connectPoint) {
- Host host = hostService.getConnectedHosts(connectPoint)
+ hostService.getConnectedHosts(connectPoint)
.stream()
- .findFirst()
- .orElse(null);
-
- if (host == null) {
- log.debug("No host is connected on {}", connectPoint.toString());
- return;
- }
-
- hostProvider.hostVanished(host.id());
+ .forEach(host -> hostProvider.hostVanished(host.id()));
}
@Override
@@ -322,6 +314,14 @@
entry.getValue(),
serviceVlan));
+ hostService.getConnectedHosts(vSgVm.location()).stream()
+ .filter(host -> !host.mac().equals(vSgVm.mac()))
+ .filter(host -> !vSgs.values().contains(host.mac()))
+ .forEach(host -> {
+ log.info("Removed vSG {}", host.toString());
+ hostProvider.hostVanished(host.id());
+ });
+
ruleInstaller.populateSubscriberGatewayRules(vSgVm, vSgs.keySet());
}
@@ -333,11 +333,12 @@
* @param vSgMac vSG mac address
* @param serviceVlan service vlan
*/
- public void addVirtualSubscriberGateway(Host vSgHost, IpAddress vSgIp, MacAddress vSgMac, String serviceVlan) {
+ private void addVirtualSubscriberGateway(Host vSgHost, IpAddress vSgIp, MacAddress vSgMac,
+ String serviceVlan) {
HostId hostId = HostId.hostId(vSgMac);
Host host = hostService.getHost(hostId);
if (host != null) {
- log.debug("vSG with {} already exists", vSgMac.toString());
+ log.trace("vSG with {} already exists", vSgMac.toString());
return;
}
@@ -524,7 +525,7 @@
private void serviceVmAdded(Host host) {
String vNetId = host.annotations().value(SERVICE_ID);
if (vNetId == null) {
- // ignore this host, it not a VM we injected or a vSG
+ // ignore this host, it is not the service VM, or it's a vSG
return;
}
@@ -583,12 +584,16 @@
* @param host host
*/
private void serviceVmRemoved(Host host) {
- if (host.annotations().value(OPENSTACK_VM_ID) == null) {
- // this host was not injected from CordVtn, just return
+ String vNetId = host.annotations().value(SERVICE_ID);
+ if (vNetId == null) {
+ // ignore it, it's not the service VM or it's a vSG
+ String serviceVlan = host.annotations().value(S_TAG);
+ if (serviceVlan != null) {
+ log.info("vSG {} removed", host.id());
+ }
return;
}
- String vNetId = host.annotations().value(SERVICE_ID);
OpenstackNetwork vNet = openstackService.network(vNetId);
if (vNet == null) {
log.warn("Failed to get OpenStack network {} for VM {}({}).",
diff --git a/src/main/java/org/onosproject/cordvtn/CordVtnArpProxy.java b/src/main/java/org/onosproject/cordvtn/CordVtnArpProxy.java
index 9d20e55..82f5dd3 100644
--- a/src/main/java/org/onosproject/cordvtn/CordVtnArpProxy.java
+++ b/src/main/java/org/onosproject/cordvtn/CordVtnArpProxy.java
@@ -233,7 +233,7 @@
.orElse(null);
if (host != null) {
- log.debug("Found MAC from host service for {}", targetIp.toString());
+ log.trace("Found MAC from host service for {}", targetIp.toString());
return host.mac();
} else {
return MacAddress.NONE;