X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=neutronvpn%2Fneutronvpn-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fvpnservice%2Fneutronvpn%2FNeutronPortChangeListener.java;h=a684d9118ee5b2f4c077b89e03109b8810d615cc;hb=952571bf03763403c0650da6db499c0c2a767d6d;hp=2feca2cd75ff4d4d97454d3f198c835bb36ff283;hpb=39ea170473269cb259a3e66bb68348325fe040d5;p=vpnservice.git diff --git a/neutronvpn/neutronvpn-impl/src/main/java/org/opendaylight/vpnservice/neutronvpn/NeutronPortChangeListener.java b/neutronvpn/neutronvpn-impl/src/main/java/org/opendaylight/vpnservice/neutronvpn/NeutronPortChangeListener.java index 2feca2cd..a684d911 100644 --- a/neutronvpn/neutronvpn-impl/src/main/java/org/opendaylight/vpnservice/neutronvpn/NeutronPortChangeListener.java +++ b/neutronvpn/neutronvpn-impl/src/main/java/org/opendaylight/vpnservice/neutronvpn/NeutronPortChangeListener.java @@ -48,8 +48,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; +import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Set; public class NeutronPortChangeListener extends AbstractDataChangeListener implements AutoCloseable { @@ -190,26 +192,47 @@ public class NeutronPortChangeListener extends AbstractDataChangeListener private void handleNeutronPortUpdated(Port portoriginal, Port portupdate) { LOG.debug("Add port to subnet"); - // add port FixedIP to local Subnets DS Uuid vpnIdup = addPortToSubnets(portupdate); + Uuid vpnIdor = removePortFromSubnets(portoriginal); + // add port FixedIP to local Subnets DS if (vpnIdup != null) { nvpnManager.createVpnInterface(vpnIdup, portupdate); Uuid routerId = NeutronvpnUtils.getVpnMap(broker, vpnIdup).getRouterId(); if(routerId != null) { nvpnManager.addToNeutronRouterInterfacesMap(routerId, portupdate.getUuid().getValue()); } + if ((vpnIdor != vpnIdup || + !portoriginal.getDeviceOwner().equals("network:router_interface")) && + portupdate.getDeviceOwner().equals("network:router_interface")) { + Set subnetUuids = new HashSet<>(); + for (FixedIps fixedIps : portupdate.getFixedIps()) { + subnetUuids.add(fixedIps.getSubnetId()); + } + for (Uuid subnetUuid : subnetUuids) { + nvpnManager.addSubnetToVpn(vpnIdup, subnetUuid); + } + } } // remove port FixedIP from local Subnets DS - Uuid vpnIdor = removePortFromSubnets(portoriginal); - if (vpnIdor != null) { nvpnManager.deleteVpnInterface(portoriginal); Uuid routerId = NeutronvpnUtils.getVpnMap(broker, vpnIdor).getRouterId(); if(routerId != null) { nvpnManager.removeFromNeutronRouterInterfacesMap(routerId, portoriginal.getUuid().getValue()); } + if ((vpnIdor != vpnIdup || + !portupdate.getDeviceOwner().equals("network:router_interface")) && + portoriginal.getDeviceOwner().equals("network:router_interface")) { + Set subnetUuids = new HashSet<>(); + for (FixedIps fixedIps : portoriginal.getFixedIps()) { + subnetUuids.add(fixedIps.getSubnetId()); + } + for (Uuid subnetUuid : subnetUuids) { + nvpnManager.removeSubnetFromVpn(vpnIdor, subnetUuid); + } + } } } @@ -266,7 +289,7 @@ public class NeutronPortChangeListener extends AbstractDataChangeListener private void createElanInterface(Port port, String name) { String elanInstanceName = port.getNetworkId().getValue(); List physAddresses = new ArrayList<>(); - physAddresses.add(new PhysAddress(port.getMacAddress())); + physAddresses.add(new PhysAddress(String.valueOf(port.getMacAddress().getValue()))); InstanceIdentifier id = InstanceIdentifier.builder(ElanInterfaces.class).child(ElanInterface .class, new ElanInterfaceKey(name)).build(); @@ -311,6 +334,15 @@ public class NeutronPortChangeListener extends AbstractDataChangeListener NeutronvpnUtils.unlock(lockManager, lockName); } } + if (port.getDeviceOwner().equals("network:router_interface")) { + Set subnetUuids = new HashSet<>(); + for (FixedIps fixedIps : port.getFixedIps()) { + subnetUuids.add(fixedIps.getSubnetId()); + } + for (Uuid subnetUuid : subnetUuids) { + nvpnManager.addSubnetToVpn(vpnId, subnetUuid); + } + } } return vpnId; } @@ -345,6 +377,15 @@ public class NeutronPortChangeListener extends AbstractDataChangeListener NeutronvpnUtils.unlock(lockManager, lockName); } } + if (port.getDeviceOwner().equals("network:router_interface")) { + Set subnetUuids = new HashSet<>(); + for (FixedIps fixedIps : port.getFixedIps()) { + subnetUuids.add(fixedIps.getSubnetId()); + } + for (Uuid subnetUuid : subnetUuids) { + nvpnManager.removeSubnetFromVpn(vpnId, subnetUuid); + } + } } return vpnId; }