Unsupported operation exception handling 79/85179/35
authorxcheara <chetan.arakere@altencalsoftlabs.com>
Tue, 15 Oct 2019 12:23:40 +0000 (17:53 +0530)
committerChetan Arakere Gowdru <chetan.arakere@altencalsoftlabs.com>
Thu, 31 Oct 2019 15:06:40 +0000 (20:36 +0530)
Description:
Fixed in elan, dhcp, ipv6,qos observed issues in CSIT.

Signed-off-by: xcheara <chetan.arakere@altencalsoftlabs.com>
Change-Id: I22048de2d9ea3ea4353ae35df76bb0b76a4e977f
Signed-off-by: xcheara <chetan.arakere@altencalsoftlabs.com>
Signed-off-by: Chetan Arakere Gowdru <chetan.arakere@altencalsoftlabs.com>
41 files changed:
bgpmanager/impl/src/main/java/org/opendaylight/netvirt/bgpmanager/BgpConfigurationManager.java
dhcpservice/api/src/main/java/org/opendaylight/netvirt/dhcpservice/api/DhcpMConstants.java
dhcpservice/impl/src/main/java/org/opendaylight/netvirt/dhcpservice/DhcpExternalTunnelManager.java
dhcpservice/impl/src/main/java/org/opendaylight/netvirt/dhcpservice/DhcpInterfaceEventListener.java
dhcpservice/impl/src/main/java/org/opendaylight/netvirt/dhcpservice/DhcpServiceUtils.java
dhcpservice/impl/src/main/java/org/opendaylight/netvirt/dhcpservice/DhcpSubnetListener.java
dhcpservice/impl/src/main/java/org/opendaylight/netvirt/dhcpservice/NodeListener.java
elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/internal/ElanBridgeManager.java
elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/internal/ElanInterfaceManager.java
elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/internal/ElanInterfaceStateChangeListener.java
elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/internal/ElanTunnelInterfaceStateListener.java
elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/l2gw/utils/ElanL2GatewayMulticastUtils.java
fibmanager/impl/src/main/java/org/opendaylight/netvirt/fibmanager/VrfEntryListener.java
ipv6service/impl/src/main/java/org/opendaylight/netvirt/ipv6service/Ipv6ServiceInterfaceEventListener.java
ipv6service/impl/src/main/java/org/opendaylight/netvirt/ipv6service/utils/Ipv6ServiceConstants.java
ipv6service/impl/src/main/java/org/opendaylight/netvirt/ipv6service/utils/Ipv6ServiceUtils.java
natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/EvpnDnatFlowProgrammer.java
natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/EvpnSnatFlowProgrammer.java
natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/ExternalRoutersListener.java
natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NatTunnelInterfaceStateListener.java
natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/NatUtil.java
natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/VpnFloatingIpHandler.java
neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/NeutronBgpvpnChangeListener.java
neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/NeutronFloatingToFixedIpMappingChangeListener.java
neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/NeutronRouterChangeListener.java
neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/NeutronvpnManager.java
neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/NeutronvpnNatManager.java
neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/NeutronvpnUtils.java
neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/evpn/manager/NeutronEvpnManager.java
qosservice/impl/src/main/java/org/opendaylight/netvirt/qosservice/QosNeutronUtils.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/SubnetOpDpnManager.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/TunnelInterfaceStateListener.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnConstants.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnFootprintService.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnInterfaceManager.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnManagerImpl.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnSubnetRouteHandler.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnUtil.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/intervpnlink/InterVpnLinkListener.java
vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/iplearn/LearntVpnVipToPortEventProcessor.java
vpnmanager/impl/src/test/java/org/opendaylight/netvirt/vpnmanager/test/SubnetOpDpnManagerTest.java

index dcd847e53d6d53df397d37a3a8b3bbe7bbd53f98..678baa8c37d24784f175b9d231f3ecd975d248b3 100755 (executable)
@@ -2881,8 +2881,7 @@ public class BgpConfigurationManager {
 
         //** update or delete the vrfs with the rest of AddressFamilies already present in the last list
         AddressFamiliesVrf adfToDel = adfBuilder.build();
-        List<AddressFamiliesVrf> adfListOriginal = vrfOriginal.getAddressFamiliesVrf() == null
-                ? new ArrayList<>() : vrfOriginal.getAddressFamiliesVrf();
+        List<AddressFamiliesVrf> adfListOriginal = new ArrayList<>(vrfOriginal.nonnullAddressFamiliesVrf());
         List<AddressFamiliesVrf> adfListToRemoveFromOriginal = new ArrayList<>();
         adfListOriginal.forEach(adf -> {
             if (adf.equals(adfToDel)) {
index c36d345c8a7fa0b1a6e1019d8622a1a23cbb5d8b..e682244da886c6ca912ffa815a3cb759997cdd42 100644 (file)
@@ -36,7 +36,7 @@ public interface DhcpMConstants {
     String DEFAULT_DOMAIN_NAME = "openstacklocal";
 
     Uint64 COOKIE_VM_INGRESS_TABLE = Uint64.valueOf("6800001", 16).intern();
-    Uint64 INVALID_DPID = Uint64.valueOf("-1").intern();
+    Uint64 INVALID_DPID = Uint64.ZERO;
     String DHCP_JOB_KEY_PREFIX = "DHCP_";
     int RETRY_COUNT = 6;
 }
index e553a1f4b360970c75c1727743afffebc6896cf1..bf49cab29025a4d9ac89b7d4fd6361dcae6ea957 100644 (file)
@@ -33,6 +33,7 @@ import javax.inject.Named;
 import javax.inject.Singleton;
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
+import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
@@ -277,10 +278,10 @@ public class DhcpExternalTunnelManager implements IDhcpExternalTunnelManager {
         tunnelIpElanNameToVmMacCache.remove(tunnelIpElanNamePair);
     }
 
-    @Nullable
+    @NonNull
     public Uint64 readDesignatedSwitchesForExternalTunnel(IpAddress tunnelIp, String elanInstanceName) {
         if (tunnelIp == null || elanInstanceName == null || elanInstanceName.isEmpty()) {
-            return null;
+            return Uint64.ZERO;
         }
         InstanceIdentifier<DesignatedSwitchForTunnel> instanceIdentifier =
                 InstanceIdentifier.builder(DesignatedSwitchesForExternalTunnels.class)
@@ -291,7 +292,7 @@ public class DhcpExternalTunnelManager implements IDhcpExternalTunnelManager {
         if (designatedSwitchForTunnelOptional.isPresent()) {
             return Uint64.valueOf(designatedSwitchForTunnelOptional.get().getDpId());
         }
-        return null;
+        return Uint64.ZERO;
     }
 
     public void writeDesignatedSwitchForExternalTunnel(Uint64 dpnId, IpAddress tunnelIp,
index 8ee8ce7791f2101190fc2961430ce51bc27970e1..94600b8b1d4e31066482ad4867d5003fb1849b75 100644 (file)
@@ -12,7 +12,6 @@ import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.genius.datastoreutils.AsyncDataTreeChangeListenerBase;
 import org.opendaylight.genius.interfacemanager.interfaces.IInterfaceManager;
-import org.opendaylight.genius.mdsalutil.MDSALUtil;
 import org.opendaylight.infrautils.jobcoordinator.JobCoordinator;
 import org.opendaylight.netvirt.dhcpservice.api.DhcpMConstants;
 import org.opendaylight.netvirt.dhcpservice.jobs.DhcpInterfaceAddJob;
@@ -85,7 +84,8 @@ public class DhcpInterfaceEventListener
             return;
         }
         NodeConnectorId nodeConnectorId = new NodeConnectorId(ofportIds.get(0));
-        Uint64 dpnId = Uint64.valueOf(MDSALUtil.getDpnIdFromPortName(nodeConnectorId));
+        Uint64 dpnId = DhcpServiceUtils.getDpnIdFromNodeConnectorId(nodeConnectorId);
+
         DhcpInterfaceRemoveJob job = new DhcpInterfaceRemoveJob(dhcpManager, dhcpExternalTunnelManager,
                 dataBroker, del, dpnId, interfaceManager, elanService, port);
         jobCoordinator.enqueueJob(DhcpServiceUtils.getJobKey(interfaceName), job, DhcpMConstants.RETRY_COUNT);
@@ -108,7 +108,7 @@ public class DhcpInterfaceEventListener
             return;
         }
         NodeConnectorId nodeConnectorId = new NodeConnectorId(ofportIds.get(0));
-        Uint64 dpnId = Uint64.valueOf(MDSALUtil.getDpnIdFromPortName(nodeConnectorId));
+        Uint64 dpnId = DhcpServiceUtils.getDpnIdFromNodeConnectorId(nodeConnectorId);
         String interfaceName = update.getName();
         OperStatus updatedOperStatus = update.getOperStatus();
         if (original.getOperStatus().equals(OperStatus.Up) && updatedOperStatus.equals(OperStatus.Unknown)) {
@@ -139,7 +139,7 @@ public class DhcpInterfaceEventListener
             dhcpPortCache.put(interfaceName, port);
         }
         NodeConnectorId nodeConnectorId = new NodeConnectorId(ofportIds.get(0));
-        Uint64 dpnId = Uint64.valueOf(MDSALUtil.getDpnIdFromPortName(nodeConnectorId));
+        Uint64 dpnId = DhcpServiceUtils.getDpnIdFromNodeConnectorId(nodeConnectorId);
         DhcpInterfaceAddJob job = new DhcpInterfaceAddJob(dhcpManager, dhcpExternalTunnelManager, dataBroker,
                 add, dpnId, interfaceManager, elanService, itmRpcService);
         jobCoordinator.enqueueJob(DhcpServiceUtils.getJobKey(interfaceName), job, DhcpMConstants.RETRY_COUNT);
index 605a7e440d28d2c5f9e5d641630b86addc59fd7d..8a2e6264fc77d66f3fee79221f48570c9b1ce40b 100644 (file)
@@ -78,6 +78,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.ser
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.service.bindings.services.info.BoundServices;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.service.bindings.services.info.BoundServicesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.service.bindings.services.info.BoundServicesKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.ElanDpnInterfaces;
@@ -528,5 +529,9 @@ public final class DhcpServiceUtils {
         connectedDpnIds.remove(dpnId);
     }
 
+    public static Uint64 getDpnIdFromNodeConnectorId(NodeConnectorId nodeConnectorId) {
+        Long dpIdLong = MDSALUtil.getDpnIdFromPortName(nodeConnectorId);
+        return dpIdLong < 0 ? Uint64.ZERO : Uint64.valueOf(dpIdLong);
+    }
 }
 
index be2f83acf12bc71e0787d37521a0604a9cf9be29..f8fb73c599b83fafbd822a1904f3ed87e4f8481a 100644 (file)
@@ -126,7 +126,7 @@ public class DhcpSubnetListener extends AsyncClusteredDataTreeChangeListenerBase
         LOG.trace("DhcpSubnetListener installNeutronPortEntries : portList: {}", portList);
         for (Uuid portIntf : portList) {
             NodeConnectorId nodeConnectorId = getNodeConnectorIdForPortIntf(portIntf);
-            Uint64 dpId = Uint64.valueOf(MDSALUtil.getDpnIdFromPortName(nodeConnectorId));
+            Uint64 dpId = DhcpServiceUtils.getDpnIdFromNodeConnectorId(nodeConnectorId);
             String interfaceName = portIntf.getValue();
             Port port = dhcpManager.getNeutronPort(interfaceName);
             String vmMacAddress = port.getMacAddress().getValue();
@@ -147,7 +147,7 @@ public class DhcpSubnetListener extends AsyncClusteredDataTreeChangeListenerBase
         LOG.trace("DhcpSubnetListener uninstallNeutronPortEntries : portList: {}", portList);
         for (Uuid portIntf : portList) {
             NodeConnectorId nodeConnectorId = getNodeConnectorIdForPortIntf(portIntf);
-            Uint64 dpId = Uint64.valueOf(MDSALUtil.getDpnIdFromPortName(nodeConnectorId));
+            Uint64 dpId = DhcpServiceUtils.getDpnIdFromNodeConnectorId(nodeConnectorId);
             String interfaceName = portIntf.getValue();
             Port port = dhcpManager.getNeutronPort(interfaceName);
             String vmMacAddress = port.getMacAddress().getValue();
index 5ed487245aa0cae8d24392a6dd0092ef69b0b5f8..8a9027b66b62223d35da7d57cfffdcae6997c8db 100644 (file)
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.netvirt.dhcpservice;
 
-import java.math.BigInteger;
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 import javax.inject.Inject;
@@ -70,10 +69,20 @@ public class NodeListener extends AsyncDataTreeChangeListenerBase<Node, NodeList
             LOG.warn("Unexpected nodeId {}", nodeId.getValue());
             return;
         }
-        Uint64 dpId = Uint64.valueOf(new BigInteger(node[1]));
-        ListenableFutures.addErrorLogging(txRunner.callWithNewWriteOnlyTransactionAndSubmit(Datastore.CONFIGURATION,
-            tx -> dhcpManager.setupDefaultDhcpFlows(tx, dpId)), LOG, "Error handling node addition for {}", add);
-        dhcpExternalTunnelManager.installDhcpDropActionOnDpn(dpId);
+        try {
+            if (node[1] != null) {
+                Uint64 dpId = Uint64.valueOf(node[1]);
+                ListenableFutures.addErrorLogging(
+                        txRunner.callWithNewWriteOnlyTransactionAndSubmit(Datastore.CONFIGURATION,
+                            tx -> dhcpManager.setupDefaultDhcpFlows(tx, dpId)),
+                            LOG, "Error handling node addition for {}", add);
+                dhcpExternalTunnelManager.installDhcpDropActionOnDpn(dpId);
+            } else {
+                LOG.error("Unexpected nodeId {} found", nodeId.getValue());
+            }
+        } catch (NumberFormatException ex) {
+            LOG.error("Unexpected nodeId {} found with Exception {} ", nodeId.getValue(),ex.getMessage());
+        }
     }
 
     @Override
index a406d5473566bc9d8c377d83ea25bc843ee6d38e..41caf64514f46f9bc8ca810a9f14ad8da9b557a7 100644 (file)
@@ -10,6 +10,8 @@ package org.opendaylight.netvirt.elan.internal;
 import com.google.common.base.Splitter;
 import com.google.common.base.Strings;
 import com.google.common.collect.Lists;
+
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -94,7 +96,7 @@ public class ElanBridgeManager {
         this.southboundUtils = southboundUtils;
         this.random = new Random(System.currentTimeMillis());
         this.maxBackoff = elanConfig.getControllerMaxBackoff() != null
-                ? elanConfig.getControllerMaxBackoff().toJava() : 0L;
+                ? elanConfig.getControllerMaxBackoff().toJava() : 1000L;
         this.inactivityProbe = elanConfig.getControllerInactivityProbe() != null
                 ? elanConfig.getControllerInactivityProbe().toJava() : 0L;
     }
@@ -183,14 +185,9 @@ public class ElanBridgeManager {
             return;
         }
 
-        List<ManagedNodeEntry> originalManagedNodes = getManagedNodeEntries(originalNode);
-        if (originalManagedNodes == null) {
-            return;
-        }
-        List<ManagedNodeEntry> updatedManagedNodes = getManagedNodeEntries(updatedNode);
-        if (updatedManagedNodes == null) {
-            return;
-        }
+        List<ManagedNodeEntry> originalManagedNodes = new ArrayList<>(getManagedNodeEntries(originalNode));
+        List<ManagedNodeEntry> updatedManagedNodes = new ArrayList<>(getManagedNodeEntries(updatedNode));
+
         updatedManagedNodes.removeAll(originalManagedNodes);
         if (updatedManagedNodes.isEmpty()) {
             return;
@@ -225,7 +222,7 @@ public class ElanBridgeManager {
             return null;
         }
 
-        return ovsdbNode.getManagedNodeEntry();
+        return ovsdbNode.nonnullManagedNodeEntry();
     }
 
     private void prepareIntegrationBridge(Node ovsdbNode, Node brIntNode) {
index 8bb88106b7f363e3f824335f2a6b351de98b9e70..d244d1737d074564cdbf9ba556ac177a1b72393c 100644 (file)
@@ -378,8 +378,10 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
         }
         List<String> existingElanInterfaces = elanState.getElanInterfaces();
         List<String> elanInterfaces = new ArrayList<>();
-        existingElanInterfaces.forEach(iface -> elanInterfaces.add(iface));
-        boolean isRemoved = elanInterfaces != null && elanInterfaces.remove(interfaceName);
+        if (existingElanInterfaces != null) {
+            elanInterfaces.addAll(existingElanInterfaces);
+        }
+        boolean isRemoved = elanInterfaces.remove(interfaceName);
         if (!isRemoved) {
             return elanState;
         }
@@ -478,7 +480,10 @@ public class ElanInterfaceManager extends AsyncDataTreeChangeListenerBase<ElanIn
         try {
             DpnInterfaces dpnInterfaces = elanUtils.getElanInterfaceInfoByElanDpn(elanName, dpId);
             if (dpnInterfaces != null) {
-                List<String> interfaceLists = dpnInterfaces.getInterfaces();
+                List<String> interfaceLists = null;
+                if (dpnInterfaces.getInterfaces() != null) {
+                    interfaceLists = new ArrayList<>(dpnInterfaces.getInterfaces());
+                }
                 if (interfaceLists != null) {
                     interfaceLists.remove(interfaceName);
                 }
index b0efb415f95adb78c9b25b8b73f39ca0fb8efa21..ea2f0c0f8236fb2d560c75eed2bc8dcc21ea06c6 100644 (file)
@@ -75,7 +75,8 @@ public class ElanInterfaceStateChangeListener
             return;
         }
         NodeConnectorId nodeConnectorId = new NodeConnectorId(delIf.getLowerLayerIf().get(0));
-        Uint64 dpId = Uint64.valueOf(MDSALUtil.getDpnIdFromPortName(nodeConnectorId));
+        Long dpIdLong = MDSALUtil.getDpnIdFromPortName(nodeConnectorId);
+        Uint64 dpId = dpIdLong < 0 ? Uint64.ZERO : Uint64.valueOf(dpIdLong);
         InterfaceInfo interfaceInfo = new InterfaceInfo(dpId, nodeConnectorId.getValue());
         interfaceInfo.setInterfaceName(interfaceName);
         interfaceInfo.setInterfaceType(InterfaceInfo.InterfaceType.VLAN_INTERFACE);
index f33075949a9b7b99ece5eacc9739b9fad29fe369..2ea1705665c69583c65dbcd5ac119990024fc8df 100644 (file)
@@ -103,7 +103,8 @@ public class ElanTunnelInterfaceStateListener extends AsyncDataTreeChangeListene
     }
 
     private static boolean isInternalTunnel(StateTunnelList stateTunnelList) {
-        return stateTunnelList.getDstInfo().getTepDeviceType() == TepTypeInternal.class;
+        return stateTunnelList.getDstInfo() != null
+                ? stateTunnelList.getDstInfo().getTepDeviceType() == TepTypeInternal.class : false;
     }
 
 }
index e37ccefe43c31dbd3a9ca45ce4f9dabdb063c718..5a561880ae6b4a5d422777bbe2334bfab7700e40 100644 (file)
@@ -214,9 +214,7 @@ public class ElanL2GatewayMulticastUtils {
         LocatorSet tobeDeleted = buildLocatorSet(dstNodeId, removedDstTep);
         RemoteMcastMacsBuilder newMacBuilder = new RemoteMcastMacsBuilder(existingMac);
 
-        List<LocatorSet> existingLocatorList = newMacBuilder.getLocatorSet();
-        List<LocatorSet> locatorList = new ArrayList<>();
-        existingLocatorList.forEach(locatorSet -> locatorList.add(locatorSet));
+        List<LocatorSet> locatorList = new ArrayList<>(existingMac.nonnullLocatorSet());
         locatorList.remove(tobeDeleted);
         newMacBuilder.setLocatorSet(locatorList);
         RemoteMcastMacs mac = newMacBuilder.build();
index 053ce59c33510563aacde4731331943370ea055c..7d6896e3a6b4ed16c5c3c768c3967a15255354fe 100644 (file)
@@ -990,7 +990,7 @@ public class VrfEntryListener extends AsyncDataTreeChangeListenerBase<VrfEntry,
             .child(LabelRouteInfo.class, new LabelRouteInfoKey(lri.getLabel())).build();
 
         List<String> vpnInstancesList = lri.getVpnInstanceList() != null
-            ? lri.getVpnInstanceList() : new ArrayList<>();
+            ? new ArrayList<>(lri.getVpnInstanceList()) : new ArrayList<>();
         if (vpnInstancesList.contains(vpnInstanceName)) {
             LOG.debug("vpninstance {} name is present", vpnInstanceName);
             vpnInstancesList.remove(vpnInstanceName);
@@ -1039,7 +1039,7 @@ public class VrfEntryListener extends AsyncDataTreeChangeListenerBase<VrfEntry,
             MDSALUtil.buildFlowEntity(destDpId, NwConstants.INTERNAL_TUNNEL_TABLE,
             getTableMissFlowRef(destDpId, NwConstants.INTERNAL_TUNNEL_TABLE, label),
                     FibConstants.DEFAULT_VPN_INTERNAL_TUNNEL_TABLE_PRIORITY,
-                    String.format("%s:%d", "TST Flow Entry ", label), 0, 0,
+                    String.format("%s:%s", "TST Flow Entry ", label), 0, 0,
                     Uint64.valueOf(COOKIE_TUNNEL.longValue() + label.longValue()),
                     mkMatches, mkInstructions);
 
@@ -1065,7 +1065,7 @@ public class VrfEntryListener extends AsyncDataTreeChangeListenerBase<VrfEntry,
             NwConstants.INTERNAL_TUNNEL_TABLE,
             getTableMissFlowRef(dpId, NwConstants.INTERNAL_TUNNEL_TABLE, label),
                 FibConstants.DEFAULT_VPN_INTERNAL_TUNNEL_TABLE_PRIORITY,
-                String.format("%s:%d", "TST Flow Entry ", label), 0, 0,
+                String.format("%s:%s", "TST Flow Entry ", label), 0, 0,
                 Uint64.valueOf(COOKIE_TUNNEL.longValue() + label.longValue()), mkMatches, null);
         Node nodeDpn = FibUtil.buildDpnNode(flowEntity.getDpnId());
         FlowKey flowKey = new FlowKey(new FlowId(flowEntity.getFlowId()));
index 2fdd5143a5010109d86d05d007422cd2700a34d9..25dc4821438359414d80ed024442b57b65032442 100644 (file)
@@ -141,7 +141,7 @@ public class Ipv6ServiceInterfaceEventListener
         if (null != iface) {
             LOG.debug("Port {} is a Neutron port", iface.getName());
             NodeConnectorId nodeConnectorId = new NodeConnectorId(ofportIds.get(0));
-            Uint64 dpId = Uint64.valueOf(MDSALUtil.getDpnIdFromPortName(nodeConnectorId));
+            Uint64 dpId = Ipv6ServiceUtils.getDpnIdFromNodeConnectorId(nodeConnectorId);
 
             if (!dpId.equals(Ipv6ServiceConstants.INVALID_DPID)) {
                 Uuid portId = new Uuid(iface.getName());
index e20cb0fa4a4c2d8e57cbab1f446dd9e30cf43da1..549793a017e7a58d42a0f483e48aba33fd8ca2b4 100644 (file)
@@ -30,7 +30,7 @@ public interface Ipv6ServiceConstants {
     short DEFAULT_FLOW_PRIORITY = 50;
     short PUNT_NA_FLOW_PRIORITY = 40;
 
-    Uint64 INVALID_DPID = Uint64.valueOf("-1").intern();
+    Uint64 INVALID_DPID = Uint64.ZERO;
     String FLOWID_PREFIX = "IPv6.";
     String FLOWID_SEPARATOR = ".";
 
index 6244ee74501c677a494c2e35a991eeb4ffb50d7e..da50b15ede864b66e59fb73d06d1956b43bfa206 100644 (file)
@@ -409,11 +409,16 @@ public class Ipv6ServiceUtils {
         List<String> ofportIds = interfaceState.getLowerLayerIf();
         if (ofportIds != null && !ofportIds.isEmpty()) {
             NodeConnectorId nodeConnectorId = new NodeConnectorId(ofportIds.get(0));
-            dpId = Uint64.valueOf(MDSALUtil.getDpnIdFromPortName(nodeConnectorId));
+            dpId = getDpnIdFromNodeConnectorId(nodeConnectorId);
         }
         return dpId;
     }
 
+    public static Uint64 getDpnIdFromNodeConnectorId(NodeConnectorId nodeConnectorId) {
+        Long dpIdLong = MDSALUtil.getDpnIdFromPortName(nodeConnectorId);
+        return dpIdLong < 0 ? Uint64.ZERO : Uint64.valueOf(dpIdLong);
+    }
+
     public static long getRemoteBCGroup(long elanTag) {
         return Ipv6ServiceConstants.ELAN_GID_MIN + elanTag % Ipv6ServiceConstants.ELAN_GID_MIN * 2;
     }
index 2fd1886fcddf5f39bcb5c096afbb14e9d858efbd..70698a6d267248250232927db052bc362b73ce55 100644 (file)
@@ -380,7 +380,7 @@ public class EvpnDnatFlowProgrammer {
         Flow terminatingServiceTableFlowEntity = MDSALUtil.buildFlowNew(NwConstants.INTERNAL_TUNNEL_TABLE,
                 NatEvpnUtil.getFlowRef(dpnId, NwConstants.INTERNAL_TUNNEL_TABLE, l3Vni, NatConstants.DNAT_FLOW_NAME),
                 NatConstants.DEFAULT_VPN_INTERNAL_TUNNEL_TABLE_PRIORITY + 1,
-                String.format("%s:%d", "TST Flow Entry ", l3Vni),
+                String.format("%s:%s", "TST Flow Entry ", l3Vni),
                 0, 0,
                 Uint64.valueOf(COOKIE_TUNNEL.toJava().add(BigInteger.valueOf(l3Vni.longValue()))),
                 mkMatches, customInstructions);
@@ -401,7 +401,7 @@ public class EvpnDnatFlowProgrammer {
         Flow flowEntity = MDSALUtil.buildFlowNew(NwConstants.INTERNAL_TUNNEL_TABLE,
                 NatEvpnUtil.getFlowRef(dpnId, NwConstants.INTERNAL_TUNNEL_TABLE, l3Vni, NatConstants.DNAT_FLOW_NAME),
                 NatConstants.DEFAULT_VPN_INTERNAL_TUNNEL_TABLE_PRIORITY + 1,
-                String.format("%s:%d", "TST Flow Entry ", l3Vni), 0, 0,
+                String.format("%s:%s", "TST Flow Entry ", l3Vni), 0, 0,
                 Uint64.valueOf(COOKIE_TUNNEL.toJava().add(BigInteger.valueOf(l3Vni.longValue()))),
                 mkMatches, null);
         mdsalManager.removeFlow(confTx, dpnId, flowEntity);
index 8b8ff874da9b680694fed6341881702fff6a9f2e..ecc38de53a351e8ee48f900b23bb08f968c60735 100644 (file)
@@ -274,7 +274,7 @@ public class EvpnSnatFlowProgrammer {
         Flow terminatingServiceTableFlowEntity = MDSALUtil.buildFlowNew(NwConstants.INTERNAL_TUNNEL_TABLE,
                 NatEvpnUtil.getFlowRef(dpnId, NwConstants.INTERNAL_TUNNEL_TABLE, l3Vni, NatConstants.SNAT_FLOW_NAME),
                 NatConstants.DEFAULT_VPN_INTERNAL_TUNNEL_TABLE_PRIORITY,
-                String.format("%s:%d", "TST Flow Entry ", l3Vni),
+                String.format("%s:%s", "TST Flow Entry ", l3Vni),
                 0, 0, Uint64.valueOf(COOKIE_TUNNEL.toJava().add(BigInteger.valueOf(l3Vni.longValue()))),
                 mkMatches, customInstructions);
         mdsalManager.addFlow(confTx, dpnId, terminatingServiceTableFlowEntity);
@@ -293,7 +293,7 @@ public class EvpnSnatFlowProgrammer {
         Flow flowEntity = MDSALUtil.buildFlowNew(NwConstants.INTERNAL_TUNNEL_TABLE,
                 NatEvpnUtil.getFlowRef(dpnId, NwConstants.INTERNAL_TUNNEL_TABLE, l3Vni, NatConstants.SNAT_FLOW_NAME),
                 NatConstants.DEFAULT_VPN_INTERNAL_TUNNEL_TABLE_PRIORITY,
-                String.format("%s:%d", "TST Flow Entry ", l3Vni), 0, 0,
+                String.format("%s:%s", "TST Flow Entry ", l3Vni), 0, 0,
                 Uint64.valueOf(COOKIE_TUNNEL.toJava().add(BigInteger.valueOf(l3Vni.longValue()))), mkMatches, null);
         mdsalManager.removeFlow(confTx, dpnId, flowEntity);
         LOG.debug("removeTunnelTableEntry : Successfully removed terminating service table flow {} on DpnId {}",
index 05978a59d07f3e4accba7af16f6483b890275019..ca833d5c1a3d6993e8f4bcf12e13de740659db17 100644 (file)
@@ -1215,7 +1215,7 @@ public class ExternalRoutersListener extends AsyncDataTreeChangeListenerBase<Rou
         Flow terminatingServiceTableFlowEntity = MDSALUtil.buildFlowNew(NwConstants.INTERNAL_TUNNEL_TABLE,
             getFlowRef(dpnId, NwConstants.INTERNAL_TUNNEL_TABLE, serviceId, ""),
                 NatConstants.DEFAULT_VPN_INTERNAL_TUNNEL_TABLE_PRIORITY,
-                String.format("%s:%d", "TST Flow Entry ", serviceId), 0, 0,
+                String.format("%s:%s", "TST Flow Entry ", serviceId), 0, 0,
                 Uint64.valueOf(COOKIE_TUNNEL.toJava().add(BigInteger.valueOf(serviceId.longValue()))),
                 mkMatches, customInstructions);
 
index a54d0b609ca7a19b7c5f22c943198146dc9e6003..3d216b1a60b311f9cd31420d418bb7fcfea9dd77 100644 (file)
@@ -223,18 +223,30 @@ public class NatTunnelInterfaceStateListener
     }
 
     private void hndlTepEvntsForDpn(StateTunnelList stateTunnelList, TunnelAction tunnelAction) {
-        final Uint64 srcDpnId = Uint64.valueOf(stateTunnelList.getSrcInfo().getTepDeviceId());
-        final String srcTepIp = stateTunnelList.getSrcInfo().getTepIp().stringValue();
-        final String destTepIp = stateTunnelList.getDstInfo().getTepIp().stringValue();
+        LOG.trace("hndlTepEvntsForDpn : stateTunnelList {}", stateTunnelList);
+        final Uint64 srcDpnId = stateTunnelList.getSrcInfo() != null
+                ? Uint64.valueOf(stateTunnelList.getSrcInfo().getTepDeviceId()) : Uint64.ZERO;
+        final String srcTepIp = stateTunnelList.getSrcInfo() != null
+                ? stateTunnelList.getSrcInfo().getTepIp().stringValue() : null;
+        final String destTepIp = stateTunnelList.getDstInfo() != null
+                ? stateTunnelList.getDstInfo().getTepIp().stringValue() : null;
         LOG.trace("hndlTepEvntsForDpn : Handle tunnel event for srcDpn {} SrcTepIp {} DestTepIp {} ",
                 srcDpnId, srcTepIp, destTepIp);
+        if (srcDpnId == Uint64.ZERO || srcTepIp == null || destTepIp == null) {
+            LOG.error("hndlTepEvntsForDpn invalid srcDpnId {}, srcTepIp {}, destTepIp {}",
+                    srcDpnId, srcTepIp, destTepIp);
+            return;
+        }
         int tunTypeVal = getTunnelType(stateTunnelList);
         LOG.trace("hndlTepEvntsForDpn : tunTypeVal is {}", tunTypeVal);
-        String srcTepId = stateTunnelList.getSrcInfo().getTepDeviceId();
-        String tunnelType = stateTunnelList.getTransportType().toString();
+        String srcTepId = stateTunnelList.getSrcInfo().getTepDeviceId() != null
+                ? stateTunnelList.getSrcInfo().getTepDeviceId() : "0";
+        String tunnelType = stateTunnelList.getTransportType() != null
+                ? stateTunnelList.getTransportType().toString() : null;
         String tunnelName = stateTunnelList.getTunnelInterfaceName();
 
-        if (tunTypeVal == NatConstants.ITMTunnelLocType.Invalid.getValue()) {
+        if (tunTypeVal == NatConstants.ITMTunnelLocType.Invalid.getValue() || srcDpnId.equals(Uint64.ZERO)
+                || srcTepIp == null || destTepIp == null) {
             LOG.warn("hndlTepEvntsForDpn : Ignoring TEP event {} for the DPN {} "
                     + "since its a INVALID TUNNEL TYPE {} b/w SRC IP {} and DST IP {} and " + "TUNNEL NAME {} ",
                 tunnelAction, srcTepId, tunnelType, srcTepIp, destTepIp, tunnelName);
index ad0fe3db9a0ace386e8ab45c40fffe1530e7eb5c..608f88e7f0f063425631a419bc1aa73541c48aac 100644 (file)
@@ -912,10 +912,16 @@ public final class NatUtil {
     @NonNull
     public static List<Uint16> getInternalIpPortListInfo(DataBroker dataBroker, Uint32 routerId,
                                                           String internalIpAddress, ProtocolTypes protocolType) {
-        return SingleTransactionDataBroker.syncReadOptionalAndTreatReadFailedExceptionAsAbsentOptional(dataBroker,
+        List<Uint16> portList = SingleTransactionDataBroker
+                .syncReadOptionalAndTreatReadFailedExceptionAsAbsentOptional(dataBroker,
                 LogicalDatastoreType.CONFIGURATION,
-                buildSnatIntIpPortIdentifier(routerId, internalIpAddress, protocolType)).toJavaUtil().map(
+                        buildSnatIntIpPortIdentifier(routerId, internalIpAddress, protocolType)).toJavaUtil().map(
                 IntIpProtoType::getPorts).orElse(emptyList());
+
+        if (!portList.isEmpty()) {
+            portList = new ArrayList<>(portList);
+        }
+        return portList;
     }
 
     public static InstanceIdentifier<IntIpProtoType> buildSnatIntIpPortIdentifier(Uint32 routerId,
@@ -1291,7 +1297,7 @@ public final class NatUtil {
         if (optionalRouterDpnList.isPresent()) {
             List<org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.neutron.router.dpns
                     .router.dpn.list.dpn.vpninterfaces.list.RouterInterfaces> routerInterfaces =
-                    optionalRouterDpnList.get().getRouterInterfaces();
+                    new ArrayList<>(optionalRouterDpnList.get().nonnullRouterInterfaces());
             org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.neutron.router.dpns.router.dpn
                     .list.dpn.vpninterfaces.list.RouterInterfaces routerInterface =
                     new RouterInterfacesBuilder().withKey(new RouterInterfacesKey(vpnInterfaceName))
@@ -1569,9 +1575,15 @@ public final class NatUtil {
     public static List<Uuid> getSubnetIdsFromNetworkId(DataBroker broker, Uuid networkId) {
         InstanceIdentifier<NetworkMap> id = InstanceIdentifier.builder(NetworkMaps.class)
             .child(NetworkMap.class, new NetworkMapKey(networkId)).build();
-        return SingleTransactionDataBroker.syncReadOptionalAndTreatReadFailedExceptionAsAbsentOptional(broker,
-                LogicalDatastoreType.CONFIGURATION, id).toJavaUtil().map(NetworkMap::getSubnetIdList).orElse(
+        List<Uuid> subnetIdList = SingleTransactionDataBroker
+                .syncReadOptionalAndTreatReadFailedExceptionAsAbsentOptional(broker,
+                        LogicalDatastoreType.CONFIGURATION, id).toJavaUtil().map(NetworkMap::getSubnetIdList).orElse(
                 emptyList());
+        if (!subnetIdList.isEmpty()) {
+            subnetIdList = new ArrayList<>(subnetIdList);
+        }
+
+        return subnetIdList;
     }
 
     @Nullable
@@ -1814,9 +1826,13 @@ public final class NatUtil {
     @NonNull
     public static List<Ports> getFloatingIpPortsForRouter(DataBroker broker, Uuid routerUuid) {
         InstanceIdentifier<RouterPorts> routerPortsIdentifier = getRouterPortsId(routerUuid.getValue());
-        return SingleTransactionDataBroker.syncReadOptionalAndTreatReadFailedExceptionAsAbsentOptional(broker,
-                LogicalDatastoreType.CONFIGURATION,
+        List<Ports> portsList = SingleTransactionDataBroker
+                .syncReadOptionalAndTreatReadFailedExceptionAsAbsentOptional(broker, LogicalDatastoreType.CONFIGURATION,
                 routerPortsIdentifier).toJavaUtil().map(RouterPorts::getPorts).orElse(emptyList());
+        if (!portsList.isEmpty()) {
+            portsList = new ArrayList<>(portsList);
+        }
+        return portsList;
     }
 
     @NonNull
@@ -1829,7 +1845,7 @@ public final class NatUtil {
             for (Networks externalNw : externalNwData.get().nonnullNetworks()) {
                 if (externalNw.getVpnid() != null && externalNw.getVpnid().equals(vpnUuid)) {
                     @Nullable List<Uuid> routerIds = externalNw.getRouterIds();
-                    return routerIds != null ? routerIds : emptyList();
+                    return routerIds != null ? new ArrayList<>(routerIds) : emptyList();
                 }
             }
         }
@@ -2425,13 +2441,13 @@ public final class NatUtil {
         try {
             Optional<DpnInterfaces> dpnInElanInterfaces = SingleTransactionDataBroker.syncReadOptional(dataBroker,
                 LogicalDatastoreType.OPERATIONAL, elanDpnInterfaceId);
-            List<String> elanInterfaceList;
+            List<String> elanInterfaceList = new ArrayList<>();
             DpnInterfaces dpnInterface;
-            if (!dpnInElanInterfaces.isPresent()) {
-                elanInterfaceList = new ArrayList<>();
-            } else {
+            if (dpnInElanInterfaces.isPresent()) {
                 dpnInterface = dpnInElanInterfaces.get();
-                elanInterfaceList = dpnInterface.getInterfaces();
+
+                elanInterfaceList = (dpnInterface.getInterfaces() != null && !dpnInterface.getInterfaces().isEmpty())
+                        ? new ArrayList<>(dpnInterface.getInterfaces()) : elanInterfaceList;
             }
             if (!elanInterfaceList.contains(pseudoPortId)) {
                 elanInterfaceList.add(pseudoPortId);
@@ -2459,7 +2475,7 @@ public final class NatUtil {
         try {
             Optional<DpnInterfaces> dpnInElanInterfaces = SingleTransactionDataBroker.syncReadOptional(dataBroker,
                     LogicalDatastoreType.OPERATIONAL, elanDpnInterfaceId);
-            List<String> elanInterfaceList;
+            List<String> elanInterfaceList = new ArrayList<>();
             DpnInterfaces dpnInterface;
             if (!dpnInElanInterfaces.isPresent()) {
                 LOG.info("No interface in any dpn for {}", elanInstanceName);
@@ -2467,7 +2483,8 @@ public final class NatUtil {
             }
 
             dpnInterface = dpnInElanInterfaces.get();
-            elanInterfaceList = dpnInterface.getInterfaces();
+            elanInterfaceList = (dpnInterface.getInterfaces() != null && !dpnInterface.getInterfaces().isEmpty())
+                    ? new ArrayList<>(dpnInterface.getInterfaces()) : elanInterfaceList;
             if (!elanInterfaceList.contains(pseudoPortId)) {
                 LOG.info("Router port not present in DPN {} for VPN {}", dpnId, elanInstanceName);
                 return;
index 0ac6889091db23879330b2cc82e10b9b834e4f1c..12113b409d04e01bced6dcb6ef93da13439781ef 100644 (file)
@@ -435,7 +435,7 @@ public class VpnFloatingIpHandler implements FloatingIPHandler {
 
         Flow terminatingServiceTableFlowEntity = MDSALUtil.buildFlowNew(NwConstants.INTERNAL_TUNNEL_TABLE,
             getFlowRef(dpnId, NwConstants.INTERNAL_TUNNEL_TABLE, serviceId, ""), flowPriority,
-            String.format("%s:%d", "TST Flow Entry ", serviceId),
+            String.format("%s:%s", "TST Flow Entry ", serviceId),
             0, 0, Uint64.valueOf(COOKIE_TUNNEL.add(BigInteger.valueOf(serviceId.longValue()))),
                 mkMatches, customInstructions);
 
index be20ebcf3b4b13c8eee36d813f3270d7cc77ea1b..5c64ca84b250e1f5cbc09861c977e3452a3b0d48 100644 (file)
@@ -119,7 +119,8 @@ public class NeutronBgpvpnChangeListener extends AsyncDataTreeChangeListenerBase
             importRouteTargets.addAll(inputImportRouteSet);
             exportRouteTargets.addAll(inputExportRouteSet);
 
-            List<String> rd = input.getRouteDistinguishers();
+            List<String> rd = input.getRouteDistinguishers() != null
+                    ? input.getRouteDistinguishers() : new ArrayList<>();
 
             if (rd == null || rd.isEmpty()) {
                 // generate new RD
index 603fe30895c91ea1ac1e3ffd6295b3f4c6fa3bdd..79767de0b5050a1270e083dae927988ffbc7cdd7 100644 (file)
@@ -150,10 +150,8 @@ public class NeutronFloatingToFixedIpMappingChangeListener extends AsyncDataTree
                 routerPortsBuilder.setExternalNetworkId(extNetworkId);
             }
             if (fixedNeutronPortName != null) {
-                List<Ports> portsList = routerPortsBuilder.getPorts();
-                if (portsList == null) {
-                    portsList = new ArrayList<>();
-                }
+                List<Ports> portsList = routerPortsBuilder.getPorts() != null
+                        ? new ArrayList<>(routerPortsBuilder.getPorts()) : new ArrayList<>();
                 PortsBuilder fixedNeutronPortBuilder = null;
                 for (Ports neutronPort : portsList) {
                     if (neutronPort.getPortName().equals(fixedNeutronPortName)) {
@@ -173,7 +171,7 @@ public class NeutronFloatingToFixedIpMappingChangeListener extends AsyncDataTree
                     }
                     InternalToExternalPortMap intExtPortMap = new InternalToExternalPortMapBuilder().withKey(new
                             InternalToExternalPortMapKey(fixedIpAddress)).setInternalIp(fixedIpAddress)
-                            .setExternalIp(floatingIpAddress).setExternalId(floatingIpId).setLabel(0L).build();
+                            .setExternalIp(floatingIpAddress).setExternalId(floatingIpId).build();
                     intExtPortMapList.add(intExtPortMap);
                     fixedNeutronPortBuilder.setInternalToExternalPortMap(intExtPortMapList);
                 }
index c4ab008f7471b8a1fbdd6042279dadd6ab3146fc..0d6cbd59448987b34836042d64c3ecd8f3b82d2f 100644 (file)
@@ -124,8 +124,8 @@ public class NeutronRouterChangeListener extends AsyncDataTreeChangeListenerBase
         if (vpnId == null) {
             vpnId = routerId;
         }
-        List<Routes> oldRoutes = original.getRoutes() != null ? original.getRoutes() : new ArrayList<>();
-        List<Routes> newRoutes = update.getRoutes() != null ? update.getRoutes() : new ArrayList<>();
+        List<Routes> oldRoutes = new ArrayList<>(original.nonnullRoutes());
+        List<Routes> newRoutes = new ArrayList<>(update.nonnullRoutes());
         if (!oldRoutes.equals(newRoutes)) {
             Iterator<Routes> iterator = newRoutes.iterator();
             while (iterator.hasNext()) {
index fc50b036d8527b2dccb424dd2af551173b51752c..da151f6828c6cd491db86071a5490f595669c399 100644 (file)
@@ -394,9 +394,10 @@ public class NeutronvpnManager implements NeutronvpnService, AutoCloseable, Even
             if (sn.isPresent()) {
                 SubnetmapBuilder builder = new SubnetmapBuilder(sn.get());
                 if (null != portId) {
-                    List<Uuid> portList = builder.getPortList();
-                    if (null == portList) {
-                        portList = new ArrayList<>();
+                    List<Uuid> existingPortList = builder.getPortList();
+                    List<Uuid> portList = new ArrayList<>();
+                    if (null != existingPortList) {
+                        portList.addAll(existingPortList);
                     }
                     portList.add(portId);
                     builder.setPortList(portList);
@@ -454,7 +455,7 @@ public class NeutronvpnManager implements NeutronvpnService, AutoCloseable, Even
                 }
                 builder.setInternetVpnId(null);
                 if (portId != null && builder.getPortList() != null) {
-                    List<Uuid> portList = builder.getPortList();
+                    List<Uuid> portList = new ArrayList<>(builder.getPortList());
                     portList.remove(portId);
                     builder.setPortList(portList);
                 }
@@ -488,15 +489,16 @@ public class NeutronvpnManager implements NeutronvpnService, AutoCloseable, Even
                         id);
             if (sn.isPresent()) {
                 SubnetmapBuilder builder = new SubnetmapBuilder(sn.get());
-                if (null != portId && null != builder.getPortList()) {
-                    List<Uuid> portList = builder.getPortList();
+                if (null != portId && null != builder.getPortList() && !builder.getPortList().isEmpty()) {
+                    List<Uuid> portList = new ArrayList<>(builder.getPortList());
                     portList.remove(portId);
                     builder.setPortList(portList);
                     LOG.debug("Removing port {} from existing subnetmap node: {} ", portId.getValue(),
                         subnetId.getValue());
                 }
-                if (null != directPortId && null != builder.getDirectPortList()) {
-                    List<Uuid> directPortList = builder.getDirectPortList();
+                if (null != directPortId && null != builder.getDirectPortList()
+                        && !builder.getDirectPortList().isEmpty()) {
+                    List<Uuid> directPortList = new ArrayList<>(builder.getDirectPortList());
                     directPortList.remove(directPortId);
                     builder.setDirectPortList(directPortList);
                     LOG.debug("Removing direct port {} from existing subnetmap node: {} ", directPortId
@@ -698,7 +700,8 @@ public class NeutronvpnManager implements NeutronvpnService, AutoCloseable, Even
             }
             if (router != null) {
                 RouterIds vpnRouterId = new RouterIdsBuilder().setRouterId(router).build();
-                List<RouterIds> rtrIds = builder.getRouterIds();
+                List<RouterIds> rtrIds = builder.getRouterIds() != null
+                        ? new ArrayList<>(builder.getRouterIds()) : null;
                 if (rtrIds == null) {
                     rtrIds = Collections.singletonList(vpnRouterId);
                 } else {
@@ -707,10 +710,8 @@ public class NeutronvpnManager implements NeutronvpnService, AutoCloseable, Even
                 builder.setRouterIds(rtrIds);
             }
             if (networks != null) {
-                List<Uuid> nwList = builder.getNetworkIds();
-                if (nwList == null) {
-                    nwList = new ArrayList<>();
-                }
+                List<Uuid> nwList = builder.getNetworkIds() != null
+                    ? new ArrayList<>(builder.getNetworkIds()) : new ArrayList<>();
                 nwList.addAll(networks);
                 builder.setNetworkIds(nwList);
             }
@@ -747,7 +748,7 @@ public class NeutronvpnManager implements NeutronvpnService, AutoCloseable, Even
         if (optionalVpnMap.isPresent()) {
             VpnMap vpnMap = optionalVpnMap.get();
             VpnMapBuilder vpnMapBuilder = new VpnMapBuilder(vpnMap);
-            List<RouterIds> rtrIds = vpnMap.getRouterIds();
+            List<RouterIds> rtrIds = new ArrayList<>(vpnMap.nonnullRouterIds());
             if (rtrIds == null) {
                 rtrIds = new ArrayList<>();
             }
@@ -778,7 +779,8 @@ public class NeutronvpnManager implements NeutronvpnService, AutoCloseable, Even
                 }
             }
             if (networkIds != null) {
-                List<Uuid> vpnNw = vpnMap.getNetworkIds();
+                List<Uuid> vpnNw = vpnMap.getNetworkIds() != null
+                        ? new ArrayList<>(vpnMap.getNetworkIds()) : new ArrayList<>();
                 vpnNw.removeAll(networkIds);
                 if (vpnNw.isEmpty()) {
                     LOG.debug("setting networks null in vpnMaps node: {} ", vpnId.getValue());
@@ -1390,10 +1392,18 @@ public class NeutronvpnManager implements NeutronvpnService, AutoCloseable, Even
                                 + "routerIdList {}, networksList {}", vpn.getId().getValue(), vpn.getName(),
                         vpn.getTenantId(), vpn.getRouteDistinguisher().toString(), vpn.getImportRT().toString(),
                         vpn.getExportRT().toString(), rtrIdsList, vpn.getNetworkIds());
-                createVpn(vpn.getId(), vpn.getName(), vpn.getTenantId(), vpn.getRouteDistinguisher(),
-                        vpn.getImportRT(), vpn.getExportRT(), rtrIdsList, vpn.getNetworkIds(),
-                        vpnInstanceType, l3vni);
+
+                List<String> rdList = vpn.getRouteDistinguisher() != null
+                        ? new ArrayList<>(vpn.getRouteDistinguisher()) : new ArrayList<>();
+                List<String> importRdList = vpn.getImportRT() != null
+                        ? new ArrayList<>(vpn.getImportRT()) : new ArrayList<>();
+                List<String> exportRdList = vpn.getExportRT() != null
+                        ? new ArrayList<>(vpn.getExportRT()) : new ArrayList<>();
+
+                createVpn(vpn.getId(), vpn.getName(), vpn.getTenantId(), rdList,
+                        importRdList, exportRdList, rtrIdsList, vpn.getNetworkIds(), vpnInstanceType, l3vni);
             } catch (Exception ex) {
+                LOG.error("VPN Creation exception :", ex);
                 errorList.add(RpcResultBuilder.newError(ErrorType.APPLICATION,
                         formatAndLog(LOG::error, "Creation of VPN failed for VPN {}", vpn.getId().getValue(), ex),
                         ex.getMessage()));
@@ -1467,8 +1477,8 @@ public class NeutronvpnManager implements NeutronvpnService, AutoCloseable, Even
                                 vpnIdentifier);
                 // eliminating implicitly created (router or VLAN provider external network specific) VPN from
                 // getL3VPN output
-                if (optionalVpn.isPresent() && optionalVpn.get().getIpv4Family().getRouteDistinguisher() != null
-                        || optionalVpn.get().getIpv6Family().getRouteDistinguisher() != null) {
+                if (optionalVpn.isPresent() && (optionalVpn.get().getIpv4Family().getRouteDistinguisher() != null
+                        || optionalVpn.get().getIpv6Family().getRouteDistinguisher() != null)) {
                     vpns.add(optionalVpn.get());
                 } else {
                     result.set(
@@ -1933,7 +1943,7 @@ public class NeutronvpnManager implements NeutronvpnService, AutoCloseable, Even
                     .setInterfaceId(interfaceName).build();
             if (optRouterInterfaces.isPresent()) {
                 RouterInterfaces routerInterfaces = optRouterInterfaces.get();
-                List<Interfaces> interfaces = routerInterfaces.getInterfaces();
+                List<Interfaces> interfaces = new ArrayList<>(routerInterfaces.nonnullInterfaces());
                 if (interfaces != null && interfaces.remove(routerInterface)) {
                     if (interfaces.isEmpty()) {
                         SingleTransactionDataBroker.syncDelete(dataBroker, LogicalDatastoreType.CONFIGURATION,
@@ -2731,6 +2741,7 @@ public class NeutronvpnManager implements NeutronvpnService, AutoCloseable, Even
                 result.set(RpcResultBuilder.<AssociateNetworksOutput>success().build());
             }
         } catch (Exception ex) {
+            LOG.error("associate Networks to vpn failed {}", input.getVpnId().getValue(), ex);
             result.set(RpcResultBuilder.<AssociateNetworksOutput>failed().withError(ErrorType.APPLICATION,
                     formatAndLog(LOG::error, "associate Networks to vpn {} failed due to {}",
                             input.getVpnId().getValue(), ex.getMessage(), ex)).build());
index 158a4e0f9ba6c7720f05b7d3935107d86a0caa05..92c801cce9d031610c68c6808c3befa3acd44299 100644 (file)
@@ -209,12 +209,12 @@ public class NeutronvpnNatManager implements AutoCloseable {
             if (origExtGw.getExternalFixedIps() != null) {
                 if (!origExtGw.getExternalFixedIps().isEmpty()) {
                     if (newExtGw.getExternalFixedIps() != null && !newExtGw.getExternalFixedIps().isEmpty()) {
-                        List<ExternalFixedIps> origExtFixedIps = origExtGw.getExternalFixedIps();
+                        List<ExternalFixedIps> origExtFixedIps = new ArrayList<>(origExtGw.nonnullExternalFixedIps());
                         HashSet<String> origFixedIpSet = new HashSet<>();
                         for (ExternalFixedIps fixedIps : origExtFixedIps) {
                             origFixedIpSet.add(fixedIps.getIpAddress().stringValue());
                         }
-                        List<ExternalFixedIps> newExtFixedIps = newExtGw.getExternalFixedIps();
+                        List<ExternalFixedIps> newExtFixedIps = new ArrayList<>(newExtGw.nonnullExternalFixedIps());
                         HashSet<String> updFixedIpSet = new HashSet<>();
                         for (ExternalFixedIps fixedIps : newExtFixedIps) {
                             updFixedIpSet.add(fixedIps.getIpAddress().stringValue());
@@ -327,10 +327,8 @@ public class NeutronvpnNatManager implements AutoCloseable {
                 return;
             }
             NetworksBuilder builder = new NetworksBuilder(optionalNets.get());
-            List<Uuid> rtrList = builder.getRouterIds();
-            if (rtrList == null) {
-                rtrList = new ArrayList<>();
-            }
+            List<Uuid> rtrList = (builder.getRouterIds() != null && !builder.getRouterIds().isEmpty())
+                    ? new ArrayList<>(builder.getRouterIds()) : new ArrayList<>();
             rtrList.add(routerId);
             builder.setRouterIds(rtrList);
             if (NeutronvpnUtils.isFlatOrVlanNetwork(input)) {
@@ -382,7 +380,8 @@ public class NeutronvpnNatManager implements AutoCloseable {
         Networks nets = optionalNets.get();
         try {
             NetworksBuilder builder = new NetworksBuilder(nets);
-            List<Uuid> rtrList = builder.getRouterIds();
+            List<Uuid> rtrList = new ArrayList<>();
+            rtrList = builder.getRouterIds() != null ? new ArrayList<>(builder.getRouterIds()) : rtrList;
             if (rtrList != null) {
                 rtrList.remove(routerId);
                 builder.setRouterIds(rtrList);
@@ -670,8 +669,8 @@ public class NeutronvpnNatManager implements AutoCloseable {
         if (optionalExternalSubnets.isPresent()) {
             Subnets subnets = optionalExternalSubnets.get();
             List<Uuid> routerIds;
-            if (subnets.getRouterIds() != null) {
-                routerIds = subnets.getRouterIds();
+            if (subnets.getRouterIds() != null && !subnets.getRouterIds().isEmpty()) {
+                routerIds = new ArrayList<>(subnets.getRouterIds());
             } else {
                 routerIds = new ArrayList<>();
             }
@@ -716,7 +715,8 @@ public class NeutronvpnNatManager implements AutoCloseable {
         List<Subnets> fixedIpsSubnets = getSubnets(getExternalSubnetsUuidsSetForFixedIps(externalFixedIps));
         for (Subnets subnets : fixedIpsSubnets) {
             Uuid subnetId = subnets.getId();
-            List<Uuid> routerIds = subnets.getRouterIds();
+            List<Uuid> routerIds = new ArrayList<>();
+            routerIds = subnets.getRouterIds() != null ? new ArrayList<>(subnets.getRouterIds()) : routerIds;
             if (routerIds != null) {
                 if (subnets.getExternalNetworkId() != null
                         && subnets.getExternalNetworkId().equals(externalNetworkId)
index 3864e1fc3c2af49947bdbe09738b41b0660a8794..0ed48979e3a07a38c92500109c4fd173d6ad9e5c 100644 (file)
@@ -236,8 +236,8 @@ public class NeutronvpnUtils {
     protected Uuid getVpnForNetwork(Uuid network) {
         InstanceIdentifier<VpnMaps> vpnMapsIdentifier = InstanceIdentifier.builder(VpnMaps.class).build();
         Optional<VpnMaps> optionalVpnMaps = read(LogicalDatastoreType.CONFIGURATION, vpnMapsIdentifier);
-        if (optionalVpnMaps.isPresent() && optionalVpnMaps.get().getVpnMap() != null) {
-            for (VpnMap vpnMap : optionalVpnMaps.get().nonnullVpnMap()) {
+        if (optionalVpnMaps.isPresent() && optionalVpnMaps.get().nonnullVpnMap() != null) {
+            for (VpnMap vpnMap : new ArrayList<>(optionalVpnMaps.get().nonnullVpnMap())) {
                 List<Uuid> netIds = vpnMap.getNetworkIds();
                 if (netIds != null && netIds.contains(network)) {
                     return vpnMap.getVpnId();
@@ -281,8 +281,8 @@ public class NeutronvpnUtils {
 
         InstanceIdentifier<VpnMaps> vpnMapsIdentifier = InstanceIdentifier.builder(VpnMaps.class).build();
         Optional<VpnMaps> optionalVpnMaps = read(LogicalDatastoreType.CONFIGURATION, vpnMapsIdentifier);
-        if (optionalVpnMaps.isPresent() && optionalVpnMaps.get().getVpnMap() != null) {
-            for (VpnMap vpnMap : optionalVpnMaps.get().nonnullVpnMap()) {
+        if (optionalVpnMaps.isPresent() && optionalVpnMaps.get().nonnullVpnMap() != null) {
+            for (VpnMap vpnMap : new ArrayList<>(optionalVpnMaps.get().nonnullVpnMap())) {
                 List<org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.vpnmaps.vpnmap
                     .RouterIds> routerIdsList = vpnMap.getRouterIds();
                 if (routerIdsList == null || routerIdsList.isEmpty()) {
@@ -334,7 +334,11 @@ public class NeutronvpnUtils {
         Optional<VpnMap> optionalVpnMap = read(LogicalDatastoreType.CONFIGURATION, vpnMapIdentifier);
         if (optionalVpnMap.isPresent()) {
             VpnMap vpnMap = optionalVpnMap.get();
-            return vpnMap.getNetworkIds();
+            if (vpnMap.getNetworkIds() != null && !vpnMap.getNetworkIds().isEmpty()) {
+                return new ArrayList<>(vpnMap.getNetworkIds());
+            } else {
+                return null;
+            }
         }
         LOG.error("getNetworksforVpn: Failed as VPNMaps DS is absent for VPN {}", vpnId.getValue());
         return null;
index a922156da621f332ef8fb8853d5fe1b70b4ec20e..206175d680c64317a10476d2afcbd3cb8725fc6c 100644 (file)
@@ -92,8 +92,14 @@ public class NeutronEvpnManager {
                 continue;
             }
             try {
-                neutronvpnManager.createVpn(vpn.getId(), vpn.getName(), vpn.getTenantId(), vpn.getRouteDistinguisher(),
-                        vpn.getImportRT(), vpn.getExportRT(), null /*router-id*/, null /*network-id*/,
+                List<String> rdList = vpn.getRouteDistinguisher() != null
+                        ? new ArrayList<>(vpn.getRouteDistinguisher()) : new ArrayList<>();
+                List<String> importRdList = vpn.getImportRT() != null
+                        ? new ArrayList<>(vpn.getImportRT()) : new ArrayList<>();
+                List<String> exportRdList = vpn.getExportRT() != null
+                        ? new ArrayList<>(vpn.getExportRT()) : new ArrayList<>();
+                neutronvpnManager.createVpn(vpn.getId(), vpn.getName(), vpn.getTenantId(), rdList,
+                        importRdList, exportRdList, null /*router-id*/, null /*network-id*/,
                         vpnInstanceType, 0 /*l2vni*/);
             } catch (Exception ex) {
                 errorList.add(RpcResultBuilder.newError(RpcError.ErrorType.APPLICATION,
index 7f8b6f7e8c3768031cca0ddf45b8f7f8bb1863d1..9ec3309f32438720fb04639981e5d348ac3066f4 100644 (file)
@@ -605,7 +605,9 @@ public class QosNeutronUtils {
                                                            .interfaces.rev140508.interfaces.state.Interface ifState) {
         String lowerLayerIf = ifState.getLowerLayerIf().get(0);
         NodeConnectorId nodeConnectorId = new NodeConnectorId(lowerLayerIf);
-        return Uint64.valueOf(MDSALUtil.getDpnIdFromPortName(nodeConnectorId));
+        Long dpIdLong = MDSALUtil.getDpnIdFromPortName(nodeConnectorId);
+        Uint64 dpnId = dpIdLong < 0 ? Uint64.ZERO : Uint64.valueOf(dpIdLong);
+        return dpnId;
     }
 
     public Uint64 getDpnForInterface(String ifName) {
index 495346bc5024231ff8e2ef555e0e1e1c43a134f4..3ecad5b9f919e04d3664b9d479fb2ce54dc22a51 100644 (file)
@@ -127,7 +127,10 @@ public class SubnetOpDpnManager {
                 subDpn = optionalSubDpn.get();
             }
             SubnetToDpnBuilder subDpnBuilder = new SubnetToDpnBuilder(subDpn);
-            List<VpnInterfaces> vpnIntfList = subDpnBuilder.getVpnInterfaces();
+            List<VpnInterfaces> vpnIntfList = new ArrayList<>();
+            vpnIntfList = subDpnBuilder.getVpnInterfaces() != null ? new ArrayList<>(subDpnBuilder.getVpnInterfaces())
+                    : vpnIntfList;
+
             VpnInterfaces vpnIntfs =
                 new VpnInterfacesBuilder().withKey(new VpnInterfacesKey(intfName)).setInterfaceName(intfName).build();
             vpnIntfList.add(vpnIntfs);
@@ -165,7 +168,10 @@ public class SubnetOpDpnManager {
                 listSubnet.add(subnetId);
                 portOpBuilder.setSubnetIds(listSubnet);
             } else {
-                List<Uuid> listSubnet = optionalPortOp.get().getSubnetIds();
+                PortOpDataEntry portEntry = optionalPortOp.get();
+                List<Uuid> listSubnet = new ArrayList<>();
+                listSubnet = (portEntry.getSubnetIds() != null && !portEntry.getSubnetIds().isEmpty())
+                        ? new ArrayList<>(portEntry.getSubnetIds()) : listSubnet;
                 portOpBuilder = new PortOpDataEntryBuilder(optionalPortOp.get());
                 if (listSubnet == null) {
                     listSubnet = new ArrayList<>();
@@ -209,7 +215,9 @@ public class SubnetOpDpnManager {
             }
 
             SubnetToDpnBuilder subDpnBuilder = new SubnetToDpnBuilder(optionalSubDpn.get());
-            List<VpnInterfaces> vpnIntfList = subDpnBuilder.getVpnInterfaces();
+            List<VpnInterfaces> vpnIntfList = new ArrayList<>();
+            vpnIntfList = (subDpnBuilder.getVpnInterfaces() != null && !subDpnBuilder.getVpnInterfaces().isEmpty())
+                    ? new ArrayList<>(subDpnBuilder.getVpnInterfaces()) : vpnIntfList;
             VpnInterfaces vpnIntfs =
                 new VpnInterfacesBuilder().withKey(new VpnInterfacesKey(intfName)).setInterfaceName(intfName).build();
             vpnIntfList.remove(vpnIntfs);
@@ -248,7 +256,9 @@ public class SubnetOpDpnManager {
                         intfName);
             } else {
                 portOpEntry = optionalPortOp.get();
-                List<Uuid> listSubnet = portOpEntry.getSubnetIds();
+                List<Uuid> listSubnet = new ArrayList<>();
+                listSubnet = (portOpEntry.getSubnetIds() != null && !portOpEntry.getSubnetIds().isEmpty())
+                        ? new ArrayList<>(portOpEntry.getSubnetIds()) : listSubnet;
                 if (listSubnet == null) {
                     listSubnet = new ArrayList<>();
                 }
index ef4df54b2d4140f7292fdc3ffeb4d55524e4d4b3..9cc1aa4073f538b844bd257eb2b5aee306a15bf2 100644 (file)
@@ -236,8 +236,10 @@ public class TunnelInterfaceStateListener extends AsyncDataTreeChangeListenerBas
             programDcGwLoadBalancingGroup(add, NwConstants.ADD_FLOW, isTunnelUp);
         }
         LOG.info("add: ITM Tunnel ,type {} ,added between src: {} and dest: {}",
-                fibManager.getTransportTypeStr(add.getTransportType().toString()),
-                add.getSrcInfo().getTepDeviceId(), add.getDstInfo().getTepDeviceId());
+                fibManager.getTransportTypeStr(add.getTransportType() != null
+                        ? add.getTransportType().toString() : "Invalid"),
+                add.getSrcInfo() != null ? add.getSrcInfo().getTepDeviceId() : "0",
+                add.getDstInfo() != null ? add.getDstInfo().getTepDeviceId() : "0");
         handleTunnelEventForDPN(add, TunnelAction.TUNNEL_EP_ADD);
     }
 
@@ -258,9 +260,12 @@ public class TunnelInterfaceStateListener extends AsyncDataTreeChangeListenerBas
     // TODO Clean up the exception handling
     @SuppressWarnings("checkstyle:IllegalCatch")
     private void handleTunnelEventForDPN(StateTunnelList stateTunnelList, TunnelAction tunnelAction) {
-        final Uint64 srcDpnId = Uint64.valueOf(stateTunnelList.getSrcInfo().getTepDeviceId()).intern();
-        final String srcTepIp = stateTunnelList.getSrcInfo().getTepIp().stringValue();
-        String destTepIp = stateTunnelList.getDstInfo().getTepIp().stringValue();
+        final Uint64 srcDpnId = stateTunnelList.getSrcInfo() != null
+                ? Uint64.valueOf(stateTunnelList.getSrcInfo().getTepDeviceId()).intern() : Uint64.ZERO;
+        final String srcTepIp = stateTunnelList.getSrcInfo() != null
+                ? stateTunnelList.getSrcInfo().getTepIp().stringValue() : "0";
+        String destTepIp = stateTunnelList.getDstInfo() != null
+                ? stateTunnelList.getDstInfo().getTepIp().stringValue() : "0";
         String rd;
         Uint64 remoteDpnId = null;
         boolean isTepDeletedOnDpn = false;
@@ -321,7 +326,8 @@ public class TunnelInterfaceStateListener extends AsyncDataTreeChangeListenerBas
             }
             // Get the list of VpnInterfaces from Intf Mgr for a destDPN only for internal tunnel.
             if (tunTypeVal == VpnConstants.ITMTunnelLocType.Internal.getValue()) {
-                remoteDpnId = Uint64.valueOf(stateTunnelList.getDstInfo().getTepDeviceId()).intern();
+                remoteDpnId = Uint64.valueOf(stateTunnelList.getDstInfo() != null
+                        ? stateTunnelList.getDstInfo().getTepDeviceId() : "0").intern();
                 try {
                     result = intfRpcService.getDpnInterfaceList(
                             new GetDpnInterfaceListInputBuilder().setDpid(remoteDpnId).build());
@@ -426,13 +432,17 @@ public class TunnelInterfaceStateListener extends AsyncDataTreeChangeListenerBas
                                             VpnInterface cfgVpnInterface) {
         String rd;
         String intfName = cfgVpnInterface.getName();
-        final Uint64 srcDpnId = Uint64.valueOf(stateTunnelList.getSrcInfo().getTepDeviceId()).intern();
-        String destTepIp = stateTunnelList.getDstInfo().getTepIp().stringValue();
-        String srcTepIp = stateTunnelList.getSrcInfo().getTepIp().stringValue();
+        final Uint64 srcDpnId = Uint64.valueOf(stateTunnelList.getSrcInfo() != null
+                ? stateTunnelList.getSrcInfo().getTepDeviceId() : "0").intern();
+        String destTepIp = stateTunnelList.getDstInfo() != null ? stateTunnelList.getDstInfo().getTepIp().stringValue()
+                : null;
+        String srcTepIp = stateTunnelList.getSrcInfo() != null ? stateTunnelList.getSrcInfo().getTepIp().stringValue()
+                : null;
         int tunTypeVal = getTunnelType(stateTunnelList);
         Uint64 remoteDpnId = null;
         if (tunTypeVal == VpnConstants.ITMTunnelLocType.Internal.getValue()) {
-            remoteDpnId = Uint64.valueOf(stateTunnelList.getDstInfo().getTepDeviceId()).intern();
+            remoteDpnId = Uint64.valueOf(stateTunnelList.getDstInfo() != null
+                    ? stateTunnelList.getDstInfo().getTepDeviceId() : "0").intern();
         }
         if (cfgVpnInterface.getVpnInstanceNames() == null) {
             LOG.warn("handleTunnelEventForDpn: no vpnName found for interface {}", intfName);
@@ -550,6 +560,9 @@ public class TunnelInterfaceStateListener extends AsyncDataTreeChangeListenerBas
 
     private int getTunnelType(StateTunnelList stateTunnelList) {
         int tunTypeVal = 0;
+        if (stateTunnelList.getDstInfo() == null) {
+            return VpnConstants.ITMTunnelLocType.Invalid.getValue();
+        }
         if (stateTunnelList.getDstInfo().getTepDeviceType() == TepTypeInternal.class) {
             tunTypeVal = VpnConstants.ITMTunnelLocType.Internal.getValue();
         } else if (stateTunnelList.getDstInfo().getTepDeviceType() == TepTypeExternal.class) {
index bb866ccb43a851199461d618c2da2f2dcd59c995..375e3e5b3e0c26f37ab5e5985821f114099f165a 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.netvirt.vpnmanager;
 
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflowjava.nx.match.rev140421.NxmNxReg3;
+import org.opendaylight.yangtools.yang.common.Uint32;
 import org.opendaylight.yangtools.yang.common.Uint64;
 
 public interface VpnConstants {
@@ -19,7 +20,7 @@ public interface VpnConstants {
     short DEFAULT_FLOW_PRIORITY = 10;
     int DEFAULT_LPORT_DISPATCHER_FLOW_PRIORITY = 1;
     int VPN_ID_LENGTH = 24;
-    long INVALID_ID = -1;
+    Uint32 INVALID_ID = Uint32.ZERO;
     String SEPARATOR = ".";
     Uint64 COOKIE_L3_BASE = Uint64.valueOf("8000000", 16).intern();
     String FLOWID_PREFIX = "L3.";
index d6223b631a4f87da92b010a4437ac0ffd42fa8b1..4ed201d85e405f5d7ec26cf4d3aa217e76e48784 100644 (file)
@@ -101,7 +101,7 @@ public class VpnFootprintService implements IVpnFootprintService {
                 // Considering the possibility of VpnInstanceOpData not being ready yet cause
                 // the VPN is
                 // still in its creation process
-                if (vpnId.longValue() == VpnConstants.INVALID_ID) {
+                if (VpnConstants.INVALID_ID.equals(vpnId)) {
                     LOG.error("updateVpnToDpnMapping: Operational data  for vpn not ready. Waiting to update vpn"
                             + " footprint for vpn {} on dpn {} interface {}", vpnName, dpId, interfaceName);
                     vpnOpDataSyncer.waitForVpnDataReady(VpnOpDataSyncer.VpnOpDataType.vpnInstanceToId, vpnName,
@@ -141,10 +141,7 @@ public class VpnFootprintService implements IVpnFootprintService {
                 Optional<VpnToDpnList> dpnInVpn = tx.read(LogicalDatastoreType.OPERATIONAL, id).checkedGet();
                 if (dpnInVpn.isPresent()) {
                     VpnToDpnList vpnToDpnList = dpnInVpn.get();
-                    List<VpnInterfaces> vpnInterfaces = vpnToDpnList.getVpnInterfaces();
-                    if (vpnInterfaces == null) {
-                        vpnInterfaces = new ArrayList<>();
-                    }
+                    List<VpnInterfaces> vpnInterfaces = new ArrayList<>(vpnToDpnList.nonnullVpnInterfaces());
                     vpnInterfaces.add(vpnInterface);
                     VpnToDpnListBuilder vpnToDpnListBuilder = new VpnToDpnListBuilder(vpnToDpnList);
                     vpnToDpnListBuilder.setDpnState(VpnToDpnList.DpnState.Active).setVpnInterfaces(vpnInterfaces);
@@ -218,10 +215,7 @@ public class VpnFootprintService implements IVpnFootprintService {
                 Optional<VpnToDpnList> dpnInVpn = tx.read(LogicalDatastoreType.OPERATIONAL, id).checkedGet();
                 if (dpnInVpn.isPresent()) {
                     VpnToDpnList vpnToDpnList = dpnInVpn.get();
-                    List<IpAddresses> ipAddresses = vpnToDpnList.getIpAddresses();
-                    if (ipAddresses == null) {
-                        ipAddresses = new ArrayList<>();
-                    }
+                    List<IpAddresses> ipAddresses = new ArrayList<>(vpnToDpnList.nonnullIpAddresses());
                     ipAddresses.add(ipAddressesBldr.build());
                     VpnToDpnListBuilder vpnToDpnListBuilder = new VpnToDpnListBuilder(vpnToDpnList);
                     vpnToDpnListBuilder.setDpnState(VpnToDpnList.DpnState.Active).setIpAddresses(ipAddresses);
@@ -283,7 +277,7 @@ public class VpnFootprintService implements IVpnFootprintService {
                         return;
                     }
                     VpnToDpnList dpnInVpn = dpnInVpnOpt.get();
-                    List<VpnInterfaces> vpnInterfaces = dpnInVpn.getVpnInterfaces();
+                    List<VpnInterfaces> vpnInterfaces = new ArrayList<>(dpnInVpn.nonnullVpnInterfaces());
                     if (vpnInterfaces == null) {
                         LOG.error("Could not find vpnInterfaces for DpnInVpn map for VPN=[name={} rd={} id={}] and "
                                 + "dpnId={}", vpnName, rd, id, dpnId);
@@ -358,7 +352,7 @@ public class VpnFootprintService implements IVpnFootprintService {
                     return;
                 }
                 VpnToDpnList dpnInVpn = dpnInVpnOpt.get();
-                List<IpAddresses> ipAddresses = dpnInVpn.getIpAddresses();
+                List<IpAddresses> ipAddresses = new ArrayList<>(dpnInVpn.nonnullIpAddresses());
                 if (ipAddresses == null) {
                     LOG.info("Could not find ipAddresses for DpnInVpn map for VPN=[name={} rd={} id={}] "
                             + "and dpnId={}", vpnName, rd, id, dpnId);
index 7308c353024458874b4ce8eeaf47b90a3fdf3c78..07d172178bdcc681c728190edc601375c2896243 100755 (executable)
@@ -392,7 +392,7 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
             LOG.info("processVpnInterfaceUp: Binding vpn service to interface {} onto dpn {} for vpn {}",
                      interfaceName, dpId, vpnName);
             Uint32 vpnId = vpnUtil.getVpnId(vpnName);
-            if (vpnId.longValue() == VpnConstants.INVALID_ID) {
+            if (VpnConstants.INVALID_ID.equals(vpnId)) {
                 LOG.warn("processVpnInterfaceUp: VpnInstance to VPNId mapping not available for VpnName {}"
                         + " processing vpninterface {} on dpn {}, bailing out now.", vpnName, interfaceName,
                         dpId);
@@ -779,7 +779,7 @@ public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase<VpnInte
         Optional<String> gwMac = Optional.absent();
         String vpnInterfaceSubnetGwMacAddress = null;
         VpnInstanceOpDataEntry vpnInstanceOpData = vpnUtil.getVpnInstanceOpData(primaryRd);
-        Uint32 l3vni = vpnInstanceOpData.getL3vni();
+        Uint32 l3vni = vpnInstanceOpData.getL3vni() != null ? vpnInstanceOpData.getL3vni() : Uint32.ZERO;
         boolean isL3VpnOverVxLan = VpnUtil.isL3VpnOverVxLan(l3vni);
         VrfEntry.EncapType encapType = isL3VpnOverVxLan ? VrfEntry.EncapType.Vxlan : VrfEntry.EncapType.Mplsgre;
         VpnPopulator registeredPopulator = L3vpnRegistry.getRegisteredPopulator(encapType);
index 59313670ea31252047ae5f0974b1c7e46b33c9c6..4519f199787d0555909a340d843eeff0065f3cec 100644 (file)
@@ -820,7 +820,7 @@ public class VpnManagerImpl implements IVpnManager {
                     VpnUtil.getAssociatedSubnetIdentifier(rt, rtType, cidr)).get();
             boolean deleteParent = false;
             if (associatedSubnet.isPresent()) {
-                List<AssociatedVpn> associatedVpns = associatedSubnet.get().getAssociatedVpn();
+                List<AssociatedVpn> associatedVpns = new ArrayList<>(associatedSubnet.get().nonnullAssociatedVpn());
                 if (associatedVpns == null || associatedVpns.isEmpty()) {
                     deleteParent = true;
                 } else {
@@ -864,7 +864,8 @@ public class VpnManagerImpl implements IVpnManager {
         Optional<RouteTarget> rtToSubnetsAssociation = tx.read(LogicalDatastoreType.OPERATIONAL,
                 rtIdentifier).get();
         if (rtToSubnetsAssociation.isPresent()) {
-            List<AssociatedSubnet> associatedSubnets = rtToSubnetsAssociation.get().getAssociatedSubnet();
+            List<AssociatedSubnet> associatedSubnets = new ArrayList<>(rtToSubnetsAssociation.get()
+                    .nonnullAssociatedSubnet());
             if (associatedSubnets != null && !associatedSubnets.isEmpty()) {
                 for (Iterator<AssociatedSubnet> iterator = associatedSubnets.iterator(); iterator.hasNext(); ) {
                     if (Objects.equals(iterator.next().getCidr(), cidr)) {
index 366e3edddb6c33eb0ba24fde7f695667555d4b9c..883b9d3f0871b89482be2211904f51f5895ae9de 100644 (file)
@@ -107,7 +107,7 @@ public class VpnSubnetRouteHandler {
         }
         String vpnName = subnetmap.getVpnId().getValue();
         Uint32 vpnId = waitAndGetVpnIdIfInvalid(vpnName);
-        if (vpnId.longValue() == VpnConstants.INVALID_ID) {
+        if (VpnConstants.INVALID_ID.equals(vpnId)) {
             LOG.error(
                     "{} onSubnetAddedToVpn: VpnInstance to VPNId mapping not yet available for VpnName {} "
                             + "processing subnet {} with IP {}, bailing out now.",
@@ -180,7 +180,7 @@ public class VpnSubnetRouteHandler {
             subOpBuilder.setSubnetToDpn(new ArrayList<>());
             subOpBuilder.setRouteAdvState(TaskState.Idle);
             subOpBuilder.setElanTag(elanTag);
-            Long l3Vni = vpnInstanceOpData.getL3vni().toJava();
+            Long l3Vni = vpnInstanceOpData.getL3vni() != null ? vpnInstanceOpData.getL3vni().toJava() : 0L;
             subOpBuilder.setL3vni(l3Vni);
             subOpEntry = subOpBuilder.build();
             SingleTransactionDataBroker.syncWrite(dataBroker, LogicalDatastoreType.OPERATIONAL, subOpIdentifier,
@@ -279,7 +279,7 @@ public class VpnSubnetRouteHandler {
 
     private Uint32 waitAndGetVpnIdIfInvalid(String vpnName) {
         Uint32 vpnId = vpnUtil.getVpnId(vpnName);
-        if (vpnId.longValue() == VpnConstants.INVALID_ID) {
+        if (VpnConstants.INVALID_ID.equals(vpnId)) {
             LOG.debug("VpnId is invalid, waiting to fetch again: vpnName={}, vpnId={}", vpnName, vpnId);
             vpnOpDataSyncer.waitForVpnDataReady(VpnOpDataType.vpnInstanceToId, vpnName,
                     VpnConstants.PER_VPN_INSTANCE_MAX_WAIT_TIME_IN_MILLISECONDS);
@@ -620,7 +620,9 @@ public class VpnSubnetRouteHandler {
                     subOpBuilder.getRouteAdvState(), subOpBuilder.getLastAdvState());
             boolean isExternalSubnetVpn = VpnUtil.isExternalSubnetVpn(subnetOpDataEntry.getVpnName(),
                     subnetId.getValue());
-            List<SubnetToDpn> subDpnList = subOpBuilder.getSubnetToDpn();
+            List<SubnetToDpn> subDpnList = new ArrayList<>();
+            subDpnList = subOpBuilder.getSubnetToDpn() != null ? new ArrayList<>(subOpBuilder.getSubnetToDpn())
+                    : subDpnList;
             subDpnList.add(subDpn);
             subOpBuilder.setSubnetToDpn(subDpnList);
             if (subOpBuilder.getRouteAdvState() != TaskState.Advertised) {
@@ -949,7 +951,9 @@ public class VpnSubnetRouteHandler {
                                            Uuid subnetId, Uuid networkId, boolean isBgpVpn) {
         List<SubnetToDpn> subDpnList = null;
         boolean isRouteAdvertised = false;
-        subDpnList = subOpBuilder.getSubnetToDpn();
+        subDpnList = new ArrayList<>();
+        subDpnList = subOpBuilder.getSubnetToDpn() != null ? new ArrayList<>(subOpBuilder.getSubnetToDpn())
+                : subDpnList;
         String rd = subOpBuilder.getVrfId();
         String subnetIp = subOpBuilder.getSubnetCidr();
         String vpnName = subOpBuilder.getVpnName();
index 5ff9fe5220634303eaa0fa445b131b32dc949b09..605f67d53752063e75f484b1d284be224932ed86 100644 (file)
@@ -578,13 +578,13 @@ public final class VpnUtil {
      */
     public Uint32 getVpnId(String vpnName) {
         if (vpnName == null) {
-            return Uint32.valueOf(VpnConstants.INVALID_ID);
+            return VpnConstants.INVALID_ID;
         }
 
         return read(LogicalDatastoreType.CONFIGURATION, VpnOperDsUtils.getVpnInstanceToVpnIdIdentifier(vpnName))
                 .toJavaUtil().map(org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911
                         .vpn.instance.to.vpn.id.VpnInstance::getVpnId)
-                        .orElse(Uint32.valueOf(VpnConstants.INVALID_ID));
+                        .orElse(VpnConstants.INVALID_ID);
     }
 
     /**
@@ -1284,7 +1284,7 @@ public final class VpnUtil {
         mkMatches.add(new MatchEthernetDestination(new MacAddress(gwMacAddress)));
         List<InstructionInfo> mkInstructions = new ArrayList<>();
         mkInstructions.add(new InstructionGotoTable(NwConstants.L3_FIB_TABLE));
-        if (subnetVpnId.longValue() != VpnConstants.INVALID_ID) {
+        if (!VpnConstants.INVALID_ID.equals(subnetVpnId)) {
             String vpnName = getVpnName(subnetVpnId);
             if (vpnName != null) {
                 smap = getSubnetmapFromItsUuid(Uuid.getDefaultInstance(vpnName));
@@ -1413,8 +1413,7 @@ public final class VpnUtil {
                         interfaceName, dpnId.toString(), vpnIdsOptional.get().getVpnInstanceName());
                 return;
             }
-            FlowEntity flowEntity = buildL3vpnGatewayFlow(dpnId, gwMac, vpnId,
-                Uint32.valueOf(VpnConstants.INVALID_ID));
+            FlowEntity flowEntity = buildL3vpnGatewayFlow(dpnId, gwMac, vpnId,VpnConstants.INVALID_ID);
             if (addOrRemove == NwConstants.ADD_FLOW) {
                 mdsalManager.addFlow(writeInvTxn, flowEntity);
             } else if (addOrRemove == NwConstants.DEL_FLOW) {
@@ -2007,13 +2006,14 @@ public final class VpnUtil {
         lock.lock();
         try {
             Optional<DpnInterfaces> dpnInElanInterfaces = read(LogicalDatastoreType.OPERATIONAL, elanDpnInterfaceId);
-            List<String> elanInterfaceList;
+            List<String> elanInterfaceList = new ArrayList<>();
             DpnInterfaces dpnInterface;
             if (!dpnInElanInterfaces.isPresent()) {
                 elanInterfaceList = new ArrayList<>();
             } else {
                 dpnInterface = dpnInElanInterfaces.get();
-                elanInterfaceList = dpnInterface.getInterfaces();
+                elanInterfaceList = (dpnInterface.getInterfaces() != null && !dpnInterface.getInterfaces().isEmpty())
+                        ? new ArrayList<>(dpnInterface.getInterfaces()) : elanInterfaceList;
             }
             if (!elanInterfaceList.contains(routerInterfacePortId)) {
                 elanInterfaceList.add(routerInterfacePortId);
@@ -2034,14 +2034,15 @@ public final class VpnUtil {
         lock.lock();
         try {
             Optional<DpnInterfaces> dpnInElanInterfaces = read(LogicalDatastoreType.OPERATIONAL, elanDpnInterfaceId);
-            List<String> elanInterfaceList;
+            List<String> elanInterfaceList = new ArrayList<>();
             DpnInterfaces dpnInterface;
             if (!dpnInElanInterfaces.isPresent()) {
                 LOG.info("No interface in any dpn for {}", vpnName);
                 return;
             } else {
                 dpnInterface = dpnInElanInterfaces.get();
-                elanInterfaceList = dpnInterface.getInterfaces();
+                elanInterfaceList = (dpnInterface.getInterfaces() != null && !dpnInterface.getInterfaces().isEmpty())
+                        ? new ArrayList<>(dpnInterface.getInterfaces()) : elanInterfaceList;
             }
             if (!elanInterfaceList.contains(routerInterfacePortId)) {
                 LOG.info("Router port not present in DPN {} for VPN {}", dpnId, vpnName);
@@ -2135,7 +2136,11 @@ public final class VpnUtil {
         Map<String, String> elanInstanceRouterPortMap = new HashMap<>();
         Optional<Subnetmaps> subnetMapsData = read(LogicalDatastoreType.CONFIGURATION, buildSubnetMapsWildCardPath());
         if (subnetMapsData.isPresent()) {
-            List<Subnetmap> subnetMapList = subnetMapsData.get().getSubnetmap();
+            List<Subnetmap> subnetMapList = new ArrayList<>();
+            Subnetmaps subnetMaps = subnetMapsData.get();
+            subnetMapList = (subnetMaps.getSubnetmap() != null && !subnetMaps.getSubnetmap().isEmpty())
+                    ? new ArrayList<>(subnetMaps.getSubnetmap()) : subnetMapList;
+
             if (subnetMapList != null && !subnetMapList.isEmpty()) {
                 for (Subnetmap subnet : subnetMapList) {
                     if (subnet.getVpnId() != null && subnet.getVpnId().getValue().equals(vpnName)
index 1980350ffbe153808f44462d6669bf6c5510134a..114cff1ca30159ae2bdca27738f55bbde40d2bce 100755 (executable)
@@ -200,7 +200,7 @@ public class InterVpnLinkListener extends AsyncDataTreeChangeListenerBase<InterV
 
             // Wait for VPN Operational data ready
             Uint32 vpn1Id = vpnUtil.getVpnId(vpn1Name);
-            if (vpn1Id.longValue() == VpnConstants.INVALID_ID) {
+            if (VpnConstants.INVALID_ID.equals(vpn1Id)) {
                 boolean vpn1Ready =
                         vpnOpDataSyncer.waitForVpnDataReady(VpnOpDataSyncer.VpnOpDataType.vpnInstanceToId, vpn1Name,
                                 VpnConstants.PER_VPN_INSTANCE_MAX_WAIT_TIME_IN_MILLISECONDS);
@@ -214,7 +214,7 @@ public class InterVpnLinkListener extends AsyncDataTreeChangeListenerBase<InterV
                 }
             }
             Uint32 vpn2Id = vpnUtil.getVpnId(vpn2Name);
-            if (vpn2Id.longValue() == VpnConstants.INVALID_ID) {
+            if (VpnConstants.INVALID_ID.equals(vpn2Id)) {
                 boolean vpn1Ready =
                         vpnOpDataSyncer.waitForVpnDataReady(VpnOpDataSyncer.VpnOpDataType.vpnInstanceToId,vpn2Name,
                                 VpnConstants.PER_VPN_INSTANCE_MAX_WAIT_TIME_IN_MILLISECONDS);
index fdfe63a8be37fbce2ab9bd2ca119ea3331cefade..24d60342707746d3554314b06afe0a6e8e2438ac 100644 (file)
@@ -190,7 +190,7 @@ public class LearntVpnVipToPortEventProcessor
                 }
                 Adjacencies configAdjacencies = optVpnInterface.get().augmentation(Adjacencies.class);
                 List<Adjacency> adjacencyList = configAdjacencies == null ? new ArrayList<>()
-                        : configAdjacencies.getAdjacency();
+                        : new ArrayList<>(configAdjacencies.getAdjacency());
 
                 String ip = VpnUtil.getIpPrefix(srcPrefix);
                 AdjacencyBuilder newAdjBuilder;
index f428408daaaf2c9037f656a2567b33489e15d0e5..1c516a15a66afcce2ae912caad8c694b4c066639 100644 (file)
@@ -37,6 +37,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.sub
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.subnet.op.data.entry.SubnetToDpnBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.subnet.op.data.entry.SubnetToDpnKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.subnet.op.data.entry.subnet.to.dpn.VpnInterfaces;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.subnet.op.data.entry.subnet.to.dpn.VpnInterfacesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.subnet.op.data.entry.subnet.to.dpn.VpnInterfacesKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.Uint64;
 
@@ -104,8 +106,13 @@ public class SubnetOpDpnManagerTest {
     public void testAddInterfaceToDpn() {
 
         subOpDpnManager.addInterfaceToDpn(subnetId, dpId, infName);
-
-        verify(mockWriteTx).put(LogicalDatastoreType.OPERATIONAL, dpnOpId, subnetToDpn,
+        List<VpnInterfaces> vpnIntfList = new ArrayList<>();
+        VpnInterfaces vpnIntfs =
+                new VpnInterfacesBuilder().withKey(new VpnInterfacesKey(infName)).setInterfaceName(infName).build();
+        vpnIntfList.add(vpnIntfs);
+        SubnetToDpn subnetToDpnLocal = new SubnetToDpnBuilder().setDpnId(dpId).withKey(new SubnetToDpnKey(dpId))
+                .setVpnInterfaces(vpnIntfList).build();
+        verify(mockWriteTx).put(LogicalDatastoreType.OPERATIONAL, dpnOpId, subnetToDpnLocal,
                 WriteTransaction.CREATE_MISSING_PARENTS);
 
     }