Bug 1806 - Null destination InetAddress in OF13Provider.handleInterfaceUpdate 37/11537/1
authorSam Hague <shague@redhat.com>
Wed, 24 Sep 2014 15:47:52 +0000 (11:47 -0400)
committerSam Hague <shague@redhat.com>
Wed, 24 Sep 2014 15:47:52 +0000 (11:47 -0400)
The error is caused when ovsdb can not find the local_ip address from the open_vSwitch table other_config row. this address is used to get the src or dst ip address to be used for tunnels.

Added null chcks around the src and dst ip addresses. Log a warning if either is missing.

Change-Id: I57e0c69d699552d5ed07262210e25c8a4555ca66
Signed-off-by: Sam Hague <shague@redhat.com>
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/OF13Provider.java

index ffa7a6185fbccc938c61a584f30629662b128a35..7acc4323097f308b31d03960afbcdaa0bf6f99be 100644 (file)
@@ -1227,13 +1227,20 @@ public class OF13Provider implements NetworkingProvider {
             for (Node dstNode : nodes) {
                 InetAddress src = configurationService.getTunnelEndPoint(srcNode);
                 InetAddress dst = configurationService.getTunnelEndPoint(dstNode);
-                Status status = addTunnelPort(srcNode, network.getProviderNetworkType(), src, dst);
-                if (status.isSuccess()) {
-                    this.programTunnelRules(network.getProviderNetworkType(), network.getProviderSegmentationID(), dst, srcNode, intf, true);
-                }
-                addTunnelPort(dstNode, network.getProviderNetworkType(), dst, src);
-                if (status.isSuccess()) {
-                    this.programTunnelRules(network.getProviderNetworkType(), network.getProviderSegmentationID(), src, dstNode, intf, false);
+                if ((src != null) && (dst != null)) {
+                    Status status = addTunnelPort(srcNode, network.getProviderNetworkType(), src, dst);
+                    if (status.isSuccess()) {
+                        this.programTunnelRules(network.getProviderNetworkType(), network.getProviderSegmentationID(), dst, srcNode, intf, true);
+                    }
+                    addTunnelPort(dstNode, network.getProviderNetworkType(), dst, src);
+                    if (status.isSuccess()) {
+                        this.programTunnelRules(network.getProviderNetworkType(), network.getProviderSegmentationID(), src, dstNode, intf, false);
+                    }
+                } else {
+                    logger.warn("Tunnel end-point configuration missing. Please configure it in OpenVSwitch Table. " +
+                            "Check source {} or destination {}",
+                            src != null ? src.getHostAddress() : "null",
+                            dst != null ? dst.getHostAddress() : "null");
                 }
             }
         }
@@ -1304,12 +1311,19 @@ public class OF13Provider implements NetworkingProvider {
                 for (Node dstNode : nodes) {
                     InetAddress src = configurationService.getTunnelEndPoint(srcNode);
                     InetAddress dst = configurationService.getTunnelEndPoint(dstNode);
-                    logger.info("Remove tunnel rules for interface " + intf.getName() + " on srcNode " + srcNode.getNodeIDString());
-                    this.removeTunnelRules(tunnelType, network.getProviderSegmentationID(),
-                            dst, srcNode, intf, true, isLastInstanceOnNode);
-                    logger.info("Remove tunnel rules for interface " + intf.getName() + " on dstNode " + dstNode.getNodeIDString());
-                    this.removeTunnelRules(tunnelType, network.getProviderSegmentationID(),
-                            src, dstNode, intf, false, isLastInstanceOnNode);
+                    if ((src != null) && (dst != null)) {
+                        logger.info("Remove tunnel rules for interface " + intf.getName() + " on srcNode " + srcNode.getNodeIDString());
+                        this.removeTunnelRules(tunnelType, network.getProviderSegmentationID(),
+                                dst, srcNode, intf, true, isLastInstanceOnNode);
+                        logger.info("Remove tunnel rules for interface " + intf.getName() + " on dstNode " + dstNode.getNodeIDString());
+                        this.removeTunnelRules(tunnelType, network.getProviderSegmentationID(),
+                                src, dstNode, intf, false, isLastInstanceOnNode);
+                    } else {
+                        logger.warn("Tunnel end-point configuration missing. Please configure it in OpenVSwitch Table. ",
+                                "Check source {} or destination {}",
+                                src != null ? src.getHostAddress() : "null",
+                                dst != null ? dst.getHostAddress() : "null");
+                    }
                 }
             }
         }