From: David Goldberg Date: Wed, 23 Nov 2016 10:38:51 +0000 (+0200) Subject: Bug 7298: NPE in vpn manager X-Git-Tag: release/carbon~590 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F82%2F48982%2F5;hp=3fca027d8d8983a133de39ae905355f344e45431;p=netvirt.git Bug 7298: NPE in vpn manager NPE in vpn manager when configuring layer 3 services directly without using neutron. Change-Id: Ife4d422807141ee0766bfe10fc9eaccaff44952e Signed-off-by: David Goldberg --- diff --git a/vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/SubnetRoutePacketInHandler.java b/vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/SubnetRoutePacketInHandler.java index 4f5eed7125..6451523927 100644 --- a/vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/SubnetRoutePacketInHandler.java +++ b/vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/SubnetRoutePacketInHandler.java @@ -57,6 +57,10 @@ public class SubnetRoutePacketInHandler implements PacketProcessingListener { short tableId = notification.getTableId().getValue(); byte[] data = notification.getPayload(); + if (notification.getMatch() == null || notification.getMatch().getMetadata() == null) { + LOG.debug("on packet received where the match or metadata are null"); + return; + } BigInteger metadata = notification.getMatch().getMetadata().getMetadata(); Ethernet res = new Ethernet(); diff --git a/vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnInstanceListener.java b/vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnInstanceListener.java index 715321692a..92b8eb417d 100644 --- a/vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnInstanceListener.java +++ b/vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnInstanceListener.java @@ -475,19 +475,23 @@ public class VpnInstanceListener extends AsyncDataTreeChangeListenerBase ertList = new ArrayList(); List irtList = new ArrayList(); - for (VpnTarget vpnTarget : vpnTargetList) { - if (vpnTarget.getVrfRTType() == VpnTarget.VrfRTType.ExportExtcommunity) { - ertList.add(vpnTarget.getVrfRTValue()); - } - if (vpnTarget.getVrfRTType() == VpnTarget.VrfRTType.ImportExtcommunity) { - irtList.add(vpnTarget.getVrfRTValue()); - } - if (vpnTarget.getVrfRTType() == VpnTarget.VrfRTType.Both) { - ertList.add(vpnTarget.getVrfRTValue()); - irtList.add(vpnTarget.getVrfRTValue()); + if (vpnTargetList != null) { + for (VpnTarget vpnTarget : vpnTargetList) { + if (vpnTarget.getVrfRTType() == VpnTarget.VrfRTType.ExportExtcommunity) { + ertList.add(vpnTarget.getVrfRTValue()); + } + if (vpnTarget.getVrfRTType() == VpnTarget.VrfRTType.ImportExtcommunity) { + irtList.add(vpnTarget.getVrfRTValue()); + } + if (vpnTarget.getVrfRTType() == VpnTarget.VrfRTType.Both) { + ertList.add(vpnTarget.getVrfRTValue()); + irtList.add(vpnTarget.getVrfRTValue()); + } } + } else { + LOG.error("vpn target list is empty, cannot add BGP VPN {} VRF {}", this.vpnName, rd); + return false; } - try { bgpManager.addVrf(rd, irtList, ertList); } catch (Exception e) { diff --git a/vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnUtil.java b/vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnUtil.java index d7ed71fa25..34ba720156 100755 --- a/vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnUtil.java +++ b/vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnUtil.java @@ -1338,9 +1338,15 @@ public class VpnUtil { static Optional getGatewayIpAddressFromInterface(String srcInterface, INeutronVpnManager neutronVpnService, DataBroker dataBroker) { Optional gatewayIp = Optional.absent(); - Port port = neutronVpnService.getNeutronPort(srcInterface); - //TODO(Gobinath): Need to fix this as assuming port will belong to only one Subnet would be incorrect" - gatewayIp = Optional.of(neutronVpnService.getNeutronSubnet(port.getFixedIps().get(0).getSubnetId()).getGatewayIp()); + if (neutronVpnService != null) { + //TODO(Gobinath): Need to fix this as assuming port will belong to only one Subnet would be incorrect" + Port port = neutronVpnService.getNeutronPort(srcInterface); + if (port != null && port.getFixedIps() != null && port.getFixedIps().get(0) != null && port.getFixedIps().get(0).getSubnetId() != null) { + gatewayIp = Optional.of(neutronVpnService.getNeutronSubnet(port.getFixedIps().get(0).getSubnetId()).getGatewayIp()); + } + } else { + LOG.debug("neutron vpn service is not configured"); + } return gatewayIp; }