Merge "Fixed IBgpManager by moving it, as it was in clearly wrong directory"
[vpnservice.git] / neutronvpn / neutronvpn-impl / src / main / java / org / opendaylight / vpnservice / neutronvpn / NeutronPortChangeListener.java
index 0c81884525df302336b00518c658fbada65e7aba..a684d9118ee5b2f4c077b89e03109b8810d615cc 100644 (file)
@@ -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<Port> implements AutoCloseable {
@@ -159,6 +161,10 @@ public class NeutronPortChangeListener extends AbstractDataChangeListener<Port>
             // create vpn-interface on this neutron port
             LOG.debug("Adding VPN Interface");
             nvpnManager.createVpnInterface(vpnId, port);
+            Uuid routerId = NeutronvpnUtils.getVpnMap(broker, vpnId).getRouterId();
+            if(routerId != null) {
+                nvpnManager.addToNeutronRouterInterfacesMap(routerId, port.getUuid().getValue());
+            }
         }
     }
 
@@ -177,22 +183,56 @@ public class NeutronPortChangeListener extends AbstractDataChangeListener<Port>
         // ELAN interface is also implicitly deleted as part of this operation
         deleteOfPortInterface(port);
 
+        Uuid routerId = NeutronvpnUtils.getVpnMap(broker, vpnId).getRouterId();
+        if(routerId != null) {
+            nvpnManager.removeFromNeutronRouterInterfacesMap(routerId, port.getUuid().getValue());
+        }
+
     }
 
     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<Uuid> 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<Uuid> subnetUuids = new HashSet<>();
+                for (FixedIps fixedIps : portoriginal.getFixedIps()) {
+                    subnetUuids.add(fixedIps.getSubnetId());
+                }
+                for (Uuid subnetUuid : subnetUuids) {
+                    nvpnManager.removeSubnetFromVpn(vpnIdor, subnetUuid);
+                }
+            }
         }
     }
 
@@ -249,7 +289,7 @@ public class NeutronPortChangeListener extends AbstractDataChangeListener<Port>
     private void createElanInterface(Port port, String name) {
         String elanInstanceName = port.getNetworkId().getValue();
         List<PhysAddress> physAddresses = new ArrayList<>();
-        physAddresses.add(new PhysAddress(port.getMacAddress()));
+        physAddresses.add(new PhysAddress(String.valueOf(port.getMacAddress().getValue())));
 
         InstanceIdentifier<ElanInterface> id = InstanceIdentifier.builder(ElanInterfaces.class).child(ElanInterface
                 .class, new ElanInterfaceKey(name)).build();
@@ -294,6 +334,15 @@ public class NeutronPortChangeListener extends AbstractDataChangeListener<Port>
                     NeutronvpnUtils.unlock(lockManager, lockName);
                 }
             }
+            if (port.getDeviceOwner().equals("network:router_interface")) {
+                Set<Uuid> subnetUuids = new HashSet<>();
+                for (FixedIps fixedIps : port.getFixedIps()) {
+                    subnetUuids.add(fixedIps.getSubnetId());
+                }
+                for (Uuid subnetUuid : subnetUuids) {
+                    nvpnManager.addSubnetToVpn(vpnId, subnetUuid);
+                }
+            }
         }
         return vpnId;
     }
@@ -328,6 +377,15 @@ public class NeutronPortChangeListener extends AbstractDataChangeListener<Port>
                     NeutronvpnUtils.unlock(lockManager, lockName);
                 }
             }
+            if (port.getDeviceOwner().equals("network:router_interface")) {
+                Set<Uuid> subnetUuids = new HashSet<>();
+                for (FixedIps fixedIps : port.getFixedIps()) {
+                    subnetUuids.add(fixedIps.getSubnetId());
+                }
+                for (Uuid subnetUuid : subnetUuids) {
+                    nvpnManager.removeSubnetFromVpn(vpnId, subnetUuid);
+                }
+            }
         }
         return vpnId;
     }