Fix: associate tunnel ingress rules with network events

Change-Id: If5e5ca996d6c3c106450454c3a944a3c9871a6b9
(cherry picked from commit b689e57976810f5c80aed99f5c4d1c8c37f4016b)
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtSecurityGroupHandler.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtSecurityGroupHandler.java
index c4802a6..09cc288 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtSecurityGroupHandler.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtSecurityGroupHandler.java
@@ -379,6 +379,23 @@
         if (deviceId == null) {
             return;
         }
+
+        // we check whether the given device is available from the store
+        // if not we will wait until the device is eventually created
+        // FIXME: it would be better to listen to device event to perform
+        // pipeline initialization rather on network events.
+        while (true) {
+            if (deviceService.getDevice(deviceId) != null) {
+                break;
+            } else {
+                try {
+                    sleep(SLEEP_MS);
+                } catch (InterruptedException e) {
+                    log.error("Failed to install security group default rules.");
+                }
+            }
+        }
+
         initializeTenantIngressTable(deviceId, install);
         initializeTenantEgressTable(deviceId, install);
         initializeTenantConnTrackTable(deviceId, install);