Fix NPE triggered after disabling SG on a port
[netvirt.git] / openstack / utils / netvirt-it-utils / src / main / java / org / opendaylight / netvirt / utils / netvirt / it / utils / PingableNeutronNetItUtil.java
index b8a63879ff1d4423693461f3d61c3c272a0f4b3a..ae708fa1ae8b4f2f312c17fa9b869d9580663a77 100644 (file)
@@ -25,18 +25,22 @@ import java.io.IOException;
  */
 public class PingableNeutronNetItUtil extends NeutronNetItUtil {
 
-    private static final int DEFAULT_WAIT = 5000;
+    private static final int DEFAULT_WAIT = 30 * 1000;
     private DockerOvs dockerOvs;
+    private final Boolean isUserSpace;
 
-    public PingableNeutronNetItUtil(DockerOvs dockerOvs, SouthboundUtils southboundUtils, String tenantId) {
+    public PingableNeutronNetItUtil(DockerOvs dockerOvs, SouthboundUtils southboundUtils, String tenantId,
+                                    Boolean isUserSpace) {
         super(southboundUtils, tenantId);
         this.dockerOvs = dockerOvs;
+        this.isUserSpace = isUserSpace;
     }
 
     public PingableNeutronNetItUtil(DockerOvs dockerOvs, SouthboundUtils southboundUtils, String tenantId,
-                                                        String segId, String macPfx, String ipPfx, String cidr) {
+                                    String segId, String macPfx, String ipPfx, String cidr, Boolean isUserSpace) {
         super(southboundUtils, tenantId, segId, macPfx, ipPfx, cidr);
         this.dockerOvs = dockerOvs;
+        this.isUserSpace = isUserSpace;
     }
 
     /**
@@ -49,13 +53,24 @@ public class PingableNeutronNetItUtil extends NeutronNetItUtil {
      */
     public void createPort(Node bridge, String portName, String owner, NeutronSecurityGroup... secGroups)
             throws InterruptedException, IOException {
+        if (dockerOvs.usingExternalDocker()) {
+            super.createPort(bridge, portName, owner, secGroups);
+            return;
+        }
 
         PortInfo portInfo = buildPortInfo(portName);
 
-        dockerOvs.runInContainer(DEFAULT_WAIT, 0, "ip", "tuntap", "add", portInfo.name, "mode", "tap");
-        dockerOvs.runInContainer(DEFAULT_WAIT, 0, "ip", "link", "set", "dev", portInfo.name, "address", portInfo.mac);
+        if (isUserSpace) {
+            dockerOvs.runInContainer(DEFAULT_WAIT, 0, "ip", "tuntap", "add", portInfo.name, "mode", "tap");
+            dockerOvs.runInContainer(DEFAULT_WAIT, 0, "ip", "link", "set", "dev",
+                    portInfo.name, "address", portInfo.mac);
 
-        doCreatePort(bridge, portInfo, owner, "tap", secGroups);
+            doCreatePort(bridge, portInfo, owner, "tap", secGroups);
+        } else {
+            doCreatePort(bridge, portInfo, owner, "internal", secGroups);
+            dockerOvs.runInContainer(DEFAULT_WAIT, 0, "ip", "link", "set", "dev",
+                    portInfo.name, "address", portInfo.mac);
+        }
     }
 
     /**
@@ -65,6 +80,10 @@ public class PingableNeutronNetItUtil extends NeutronNetItUtil {
      * @throws InterruptedException because we sleep
      */
     public void preparePortForPing(String portName) throws IOException, InterruptedException {
+        if (dockerOvs.usingExternalDocker()) {
+            return;
+        }
+
         String nsName = "ns-" + portName;
 
         PortInfo portInfo = portInfoByName.get(portName);
@@ -72,11 +91,13 @@ public class PingableNeutronNetItUtil extends NeutronNetItUtil {
         dockerOvs.runInContainer(DEFAULT_WAIT, 0, "ip", "netns", "add", nsName);
         dockerOvs.runInContainer(DEFAULT_WAIT, 0, "ip", "link", "set", portName, "netns", nsName);
         dockerOvs.runInContainer(DEFAULT_WAIT, 0, "ip", "netns", "exec", nsName, "ip", "addr",
-                                                                        "add", "dev", portName, portInfo.ip + "/24");
+                "add", "dev", portName, portInfo.ip + "/24");
+        dockerOvs.runInContainer(DEFAULT_WAIT, 0, "ip", "netns", "exec", nsName, "ip", "link",
+                "set", "dev", "lo", "up");
         dockerOvs.runInContainer(DEFAULT_WAIT, 0, "ip", "netns", "exec", nsName, "ip", "link",
-                                                                        "set", "dev", portName, "up");
+                "set", "dev", portName, "up");
         dockerOvs.runInContainer(DEFAULT_WAIT, 0, "ip", "netns", "exec", nsName, "ip", "route",
-                                                                        "add", "default", "via", portInfo.ip);
+                "add", "default", "via", portInfo.ip);
     }
 
     /**
@@ -87,6 +108,10 @@ public class PingableNeutronNetItUtil extends NeutronNetItUtil {
      * @throws InterruptedException because we sleep
      */
     public void ping(String fromPort, String toPort) throws IOException, InterruptedException {
+        if (dockerOvs.usingExternalDocker()) {
+            return;
+        }
+
         PortInfo portInfo = portInfoByName.get(toPort);
         Assert.assertNotNull(portInfo);
         pingIp(fromPort, portInfo.ip);
@@ -100,7 +125,11 @@ public class PingableNeutronNetItUtil extends NeutronNetItUtil {
      * @throws InterruptedException because we sleep
      */
     public void pingIp(String fromPort, String ip) throws IOException, InterruptedException {
+        if (dockerOvs.usingExternalDocker()) {
+            return;
+        }
+
         String fromNs = "ns-" + fromPort;
-        dockerOvs.runInContainer(DEFAULT_WAIT, 0, "ip", "netns", "exec", fromNs, "ping", "-c", "4", ip);
+        dockerOvs.runInContainer(0, DEFAULT_WAIT, 0, "ip", "netns", "exec", fromNs, "ping", "-c", "4", ip);
     }
 }