Hyunsun Moon
Committed by Gerrit Code Review

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
...@@ -291,17 +291,9 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro ...@@ -291,17 +291,9 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro
291 291
292 @Override 292 @Override
293 public void removeServiceVm(ConnectPoint connectPoint) { 293 public void removeServiceVm(ConnectPoint connectPoint) {
294 - Host host = hostService.getConnectedHosts(connectPoint) 294 + hostService.getConnectedHosts(connectPoint)
295 .stream() 295 .stream()
296 - .findFirst() 296 + .forEach(host -> hostProvider.hostVanished(host.id()));
297 - .orElse(null);
298 -
299 - if (host == null) {
300 - log.debug("No host is connected on {}", connectPoint.toString());
301 - return;
302 - }
303 -
304 - hostProvider.hostVanished(host.id());
305 } 297 }
306 298
307 @Override 299 @Override
...@@ -322,6 +314,14 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro ...@@ -322,6 +314,14 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro
322 entry.getValue(), 314 entry.getValue(),
323 serviceVlan)); 315 serviceVlan));
324 316
317 + hostService.getConnectedHosts(vSgVm.location()).stream()
318 + .filter(host -> !host.mac().equals(vSgVm.mac()))
319 + .filter(host -> !vSgs.values().contains(host.mac()))
320 + .forEach(host -> {
321 + log.info("Removed vSG {}", host.toString());
322 + hostProvider.hostVanished(host.id());
323 + });
324 +
325 ruleInstaller.populateSubscriberGatewayRules(vSgVm, vSgs.keySet()); 325 ruleInstaller.populateSubscriberGatewayRules(vSgVm, vSgs.keySet());
326 } 326 }
327 327
...@@ -333,11 +333,12 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro ...@@ -333,11 +333,12 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro
333 * @param vSgMac vSG mac address 333 * @param vSgMac vSG mac address
334 * @param serviceVlan service vlan 334 * @param serviceVlan service vlan
335 */ 335 */
336 - public void addVirtualSubscriberGateway(Host vSgHost, IpAddress vSgIp, MacAddress vSgMac, String serviceVlan) { 336 + private void addVirtualSubscriberGateway(Host vSgHost, IpAddress vSgIp, MacAddress vSgMac,
337 + String serviceVlan) {
337 HostId hostId = HostId.hostId(vSgMac); 338 HostId hostId = HostId.hostId(vSgMac);
338 Host host = hostService.getHost(hostId); 339 Host host = hostService.getHost(hostId);
339 if (host != null) { 340 if (host != null) {
340 - log.debug("vSG with {} already exists", vSgMac.toString()); 341 + log.trace("vSG with {} already exists", vSgMac.toString());
341 return; 342 return;
342 } 343 }
343 344
...@@ -524,7 +525,7 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro ...@@ -524,7 +525,7 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro
524 private void serviceVmAdded(Host host) { 525 private void serviceVmAdded(Host host) {
525 String vNetId = host.annotations().value(SERVICE_ID); 526 String vNetId = host.annotations().value(SERVICE_ID);
526 if (vNetId == null) { 527 if (vNetId == null) {
527 - // ignore this host, it not a VM we injected or a vSG 528 + // ignore this host, it is not the service VM, or it's a vSG
528 return; 529 return;
529 } 530 }
530 531
...@@ -583,12 +584,16 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro ...@@ -583,12 +584,16 @@ public class CordVtn extends AbstractProvider implements CordVtnService, HostPro
583 * @param host host 584 * @param host host
584 */ 585 */
585 private void serviceVmRemoved(Host host) { 586 private void serviceVmRemoved(Host host) {
586 - if (host.annotations().value(OPENSTACK_VM_ID) == null) { 587 + String vNetId = host.annotations().value(SERVICE_ID);
587 - // this host was not injected from CordVtn, just return 588 + if (vNetId == null) {
589 + // ignore it, it's not the service VM or it's a vSG
590 + String serviceVlan = host.annotations().value(S_TAG);
591 + if (serviceVlan != null) {
592 + log.info("vSG {} removed", host.id());
593 + }
588 return; 594 return;
589 } 595 }
590 596
591 - String vNetId = host.annotations().value(SERVICE_ID);
592 OpenstackNetwork vNet = openstackService.network(vNetId); 597 OpenstackNetwork vNet = openstackService.network(vNetId);
593 if (vNet == null) { 598 if (vNet == null) {
594 log.warn("Failed to get OpenStack network {} for VM {}({}).", 599 log.warn("Failed to get OpenStack network {} for VM {}({}).",
......
...@@ -233,7 +233,7 @@ public class CordVtnArpProxy { ...@@ -233,7 +233,7 @@ public class CordVtnArpProxy {
233 .orElse(null); 233 .orElse(null);
234 234
235 if (host != null) { 235 if (host != null) {
236 - log.debug("Found MAC from host service for {}", targetIp.toString()); 236 + log.trace("Found MAC from host service for {}", targetIp.toString());
237 return host.mac(); 237 return host.mac();
238 } else { 238 } else {
239 return MacAddress.NONE; 239 return MacAddress.NONE;
......