X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=neutronvpn%2Fneutronvpn-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fvpnservice%2Fneutronvpn%2FNeutronvpnManager.java;h=505d128a215506837909732f8dee23a0e2b488e3;hb=c103ce9e5b1e4acfb3320f245503e46332593e43;hp=a94101d0fb0328d15fb59cb7794d6eb09319c486;hpb=da3cdd407725998c68924908006d31da84cac330;p=vpnservice.git diff --git a/neutronvpn/neutronvpn-impl/src/main/java/org/opendaylight/vpnservice/neutronvpn/NeutronvpnManager.java b/neutronvpn/neutronvpn-impl/src/main/java/org/opendaylight/vpnservice/neutronvpn/NeutronvpnManager.java index a94101d0..505d128a 100644 --- a/neutronvpn/neutronvpn-impl/src/main/java/org/opendaylight/vpnservice/neutronvpn/NeutronvpnManager.java +++ b/neutronvpn/neutronvpn-impl/src/main/java/org/opendaylight/vpnservice/neutronvpn/NeutronvpnManager.java @@ -758,7 +758,7 @@ public class NeutronvpnManager implements NeutronvpnService, AutoCloseable { } protected void removeL3Vpn(Uuid id) { - // read VPN networks + // read VPNMaps VpnMap vpnMap = NeutronvpnUtils.getVpnMap(broker, id); Uuid router = vpnMap.getRouterId(); // dissociate router @@ -800,39 +800,40 @@ public class NeutronvpnManager implements NeutronvpnService, AutoCloseable { } } - protected void associateRouterToVpn(Uuid vpn, Uuid router) { + protected void associateRouterToVpn(Uuid vpnId, Uuid routerId) { - // remove existing Router-VPN - if (!vpn.equals(router)) { - removeL3Vpn(router); - } - updateVpnMaps(vpn, null, router, null, null); + List routerSubnets = NeutronvpnUtils.getNeutronRouterSubnetIds(broker, routerId); - List routerSubnets = NeutronvpnUtils.getNeutronRouterSubnetIds(broker, router); - logger.debug("Adding subnets..."); + if (!vpnId.equals(routerId)) { + logger.debug("Removing subnets from internal vpn {}", routerId.getValue()); + if (routerSubnets != null) { + for (Uuid subnet : routerSubnets) { + removeSubnetFromVpn(routerId, subnet); + } + } + } + logger.debug("Adding subnets to vpn {}", vpnId.getValue()); for (Uuid subnet : routerSubnets) { - addSubnetToVpn(vpn, subnet); + addSubnetToVpn(vpnId, subnet); } + + updateVpnMaps(vpnId, null, routerId, null, null); } - protected void dissociateRouterFromVpn(Uuid vpn, Uuid router) { - clearFromVpnMaps(vpn, router, null); + protected void dissociateRouterFromVpn(Uuid vpnId, Uuid routerId) { - // fetching sn from SubnetmapDS for internal VPN because sn already deleted from RouterIf DS on router deletion - List routerSubnets = (vpn.equals(router)) ? getSubnetsforVpn(vpn) : - NeutronvpnUtils.getNeutronRouterSubnetIds(broker, router); + // remove existing external vpn interfaces + List routerSubnets = NeutronvpnUtils.getNeutronRouterSubnetIds(broker, routerId); - logger.debug("dissociateRouter vpn {} router {} Removing subnets...", vpn.getValue(), router.getValue()); if (routerSubnets != null) { for (Uuid subnet : routerSubnets) { - removeSubnetFromVpn(vpn, subnet); + logger.debug("Removing subnets from external vpn {}", vpnId.getValue()); + removeSubnetFromVpn(vpnId, subnet); + logger.debug("Adding subnets to internal vpn {}", routerId.getValue()); + addSubnetToVpn(routerId, subnet); } } - // create Router-VPN for this router - if (!vpn.equals(router)) { - logger.debug("Re-creating vpn-router..."); - createL3Vpn(router, null, null, null, null, null, router, null); - } + clearFromVpnMaps(vpnId, routerId, null); } protected List associateNetworksToVpn(Uuid vpn, List networks) { @@ -1056,6 +1057,28 @@ public class NeutronvpnManager implements NeutronvpnService, AutoCloseable { return result; } + protected void handleNeutronRouterDeleted(Uuid routerId, List routerSubnetIds) { + // check if the router is associated to some VPN + Uuid vpnId = NeutronvpnUtils.getVpnForRouter(broker, routerId, true); + if (vpnId != null) { + // remove existing external vpn interfaces + for (Uuid subnetId : routerSubnetIds) { + removeSubnetFromVpn(vpnId, subnetId); + } + clearFromVpnMaps(vpnId, routerId, null); + } else { + // remove existing internal vpn interfaces + for (Uuid subnetId : routerSubnetIds) { + removeSubnetFromVpn(routerId, subnetId); + } + } + // delete entire vpnMaps node for internal VPN + deleteVpnMapsNode(routerId); + + // delete vpn-instance for internal VPN + deleteVpnInstance(routerId); + } + protected Subnet getNeutronSubnet(Uuid subnetId) { InstanceIdentifier inst = InstanceIdentifier.create(Neutron.class). child(Subnets.class).child(Subnet.class, new SubnetKey(subnetId));