diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtFloatingIp.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtFloatingIp.java
index 6dc98e2..213fa4e 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtFloatingIp.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtFloatingIp.java
@@ -32,6 +32,7 @@
     private final String id;
     private final String routerName;
     private final String podName;
+    private final String networkName;
     private final IpAddress floatingIp;
     private final IpAddress fixedIp;
 
@@ -41,14 +42,16 @@
      * @param id            floating IP identifier
      * @param routerName    router name
      * @param podName       POD name
+     * @param networkName   network name
      * @param floatingIp    floating IP address
      * @param fixedIp       fixed IP address
      */
     public DefaultKubevirtFloatingIp(String id, String routerName, String podName,
-                                     IpAddress floatingIp, IpAddress fixedIp) {
+                                     String networkName, IpAddress floatingIp, IpAddress fixedIp) {
         this.id = id;
         this.routerName = routerName;
         this.podName = podName;
+        this.networkName = networkName;
         this.floatingIp = floatingIp;
         this.fixedIp = fixedIp;
     }
@@ -64,6 +67,11 @@
     }
 
     @Override
+    public String networkName() {
+        return networkName;
+    }
+
+    @Override
     public IpAddress floatingIp() {
         return floatingIp;
     }
@@ -82,6 +90,7 @@
     public KubevirtFloatingIp updateFixedIp(IpAddress ip) {
         return DefaultKubevirtFloatingIp.builder()
                 .id(id)
+                .networkName(networkName)
                 .routerName(routerName)
                 .floatingIp(floatingIp)
                 .fixedIp(ip)
@@ -93,6 +102,7 @@
     public KubevirtFloatingIp updatePodName(String name) {
         return DefaultKubevirtFloatingIp.builder()
                 .id(id)
+                .networkName(networkName)
                 .routerName(routerName)
                 .floatingIp(floatingIp)
                 .fixedIp(fixedIp)
@@ -111,6 +121,7 @@
         DefaultKubevirtFloatingIp that = (DefaultKubevirtFloatingIp) o;
         return id.equals(that.id) && routerName.equals(that.routerName) &&
                 Objects.equals(podName, that.podName) &&
+                networkName.equals(that.networkName) &&
                 floatingIp.equals(that.floatingIp) &&
                 Objects.equals(fixedIp, that.fixedIp);
     }
@@ -126,6 +137,7 @@
                 .add("id", id)
                 .add("routerName", routerName)
                 .add("podName", podName)
+                .add("networkName", networkName)
                 .add("floatingIp", floatingIp)
                 .add("fixedIp", fixedIp)
                 .toString();
@@ -145,16 +157,18 @@
         private String id;
         private String routerName;
         private String podName;
+        private String networkName;
         private IpAddress floatingIp;
         private IpAddress fixedIp;
 
         @Override
         public KubevirtFloatingIp build() {
             checkArgument(id != null, NOT_NULL_MSG, "id");
+            checkArgument(networkName != null, NOT_NULL_MSG, "networkName");
             checkArgument(routerName != null, NOT_NULL_MSG, "routerName");
             checkArgument(floatingIp != null, NOT_NULL_MSG, "floatingIp");
 
-            return new DefaultKubevirtFloatingIp(id, routerName, podName, floatingIp, fixedIp);
+            return new DefaultKubevirtFloatingIp(id, routerName, podName, networkName, floatingIp, fixedIp);
         }
 
         @Override
@@ -170,6 +184,12 @@
         }
 
         @Override
+        public Builder networkName(String name) {
+            this.networkName = name;
+            return this;
+        }
+
+        @Override
         public Builder floatingIp(IpAddress ip) {
             this.floatingIp = ip;
             return this;
diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtRouter.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtRouter.java
index 4bf04a2..98653d9 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtRouter.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtRouter.java
@@ -80,12 +80,20 @@
 
     @Override
     public Set<String> internal() {
-        return ImmutableSet.copyOf(internal);
+        if (internal == null) {
+            return ImmutableSet.of();
+        } else {
+            return ImmutableSet.copyOf(internal);
+        }
     }
 
     @Override
     public Map<String, String> external() {
-        return ImmutableMap.copyOf(external);
+        if (external == null) {
+            return ImmutableMap.of();
+        } else {
+            return ImmutableMap.copyOf(external);
+        }
     }
 
     @Override
diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtFloatingIp.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtFloatingIp.java
index f879d2b..27019b8 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtFloatingIp.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtFloatingIp.java
@@ -37,6 +37,13 @@
     String routerName();
 
     /**
+     * Returns the name of network where the floating IPs are belong to.
+     *
+     * @return name of network
+     */
+    String networkName();
+
+    /**
      * Returns the floating IP address.
      *
      * @return floating IP address
@@ -98,6 +105,14 @@
         Builder routerName(String name);
 
         /**
+         * Returns kubevirt floating IP builder with supplied network name.
+         *
+         * @param name network name
+         * @return floating IP builder
+         */
+        Builder networkName(String name);
+
+        /**
          * Returns kubevirt floating IP builder with supplied floating IP address.
          *
          * @param ip floating IP address
diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtRouterEvent.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtRouterEvent.java
index c9e1f16..7fd8958 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtRouterEvent.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtRouterEvent.java
@@ -17,6 +17,8 @@
 
 import org.onosproject.event.AbstractEvent;
 
+import java.util.Set;
+
 import static com.google.common.base.MoreObjects.toStringHelper;
 
 /**
@@ -26,6 +28,10 @@
 
     private final KubevirtFloatingIp floatingIp;
     private final String podName;
+    private final Set<String> internal;
+    private final String externalIp;
+    private final String externalNet;
+    private final String peerRouterIp;
 
     /**
      * Creates an event of a given type for the specified kubevirt router.
@@ -37,6 +43,10 @@
         super(type, subject);
         this.floatingIp = null;
         this.podName = null;
+        this.internal = null;
+        this.externalIp = null;
+        this.externalNet = null;
+        this.peerRouterIp = null;
     }
 
     /**
@@ -50,6 +60,10 @@
         super(type, subject);
         this.floatingIp = floatingIp;
         this.podName = null;
+        this.internal = null;
+        this.externalIp = null;
+        this.externalNet = null;
+        this.peerRouterIp = null;
     }
 
     /**
@@ -64,6 +78,48 @@
         super(type, subject);
         this.floatingIp = floatingIp;
         this.podName = podName;
+        this.internal = null;
+        this.externalIp = null;
+        this.externalNet = null;
+        this.peerRouterIp = null;
+    }
+
+    /**
+     * Creates an event of a given type for the specified kubevirt router.
+     *
+     * @param type        kubevirt router event type
+     * @param subject     kubevirt router
+     * @param internal    internal networks attached to the router
+     */
+    public KubevirtRouterEvent(Type type, KubevirtRouter subject, Set<String> internal) {
+        super(type, subject);
+        this.internal = internal;
+        this.podName = null;
+        this.floatingIp = null;
+        this.externalIp = null;
+        this.externalNet = null;
+        this.peerRouterIp = null;
+    }
+
+    /**
+     * Creates an event of a given type for the specified kubevirt router.
+     *
+     * @param type          kubevirt router event type
+     * @param subject       kubevirt router
+     * @param externalIp    virtual router's IP address included in external network
+     * @param externalNet   external network name
+     * @param peerRouterIp  external peer router IP address
+     */
+    public KubevirtRouterEvent(Type type, KubevirtRouter subject,
+                               String externalIp, String externalNet,
+                               String peerRouterIp) {
+        super(type, subject);
+        this.internal = null;
+        this.podName = null;
+        this.floatingIp = null;
+        this.externalIp = externalIp;
+        this.externalNet = externalNet;
+        this.peerRouterIp = peerRouterIp;
     }
 
     public enum Type {
@@ -83,6 +139,26 @@
         KUBEVIRT_ROUTER_REMOVED,
 
         /**
+         * Signifies that a new external network is added to the router.
+         */
+        KUBEVIRT_ROUTER_EXTERNAL_NETWORK_ATTACHED,
+
+        /**
+         * Signifies that the existing external network is removed from the router.
+         */
+        KUBEVIRT_ROUTER_EXTERNAL_NETWORK_DETACHED,
+
+        /**
+         * Signifies that a new internal network is added to the router.
+         */
+        KUBEVIRT_ROUTER_INTERNAL_NETWORKS_ATTACHED,
+
+        /**
+         * Signifies that the existing internal network is removed from the router.
+         */
+        KUBEVIRT_ROUTER_INTERNAL_NETWORKS_DETACHED,
+
+        /**
          * Signifies that a new kubevirt floating IP is created.
          */
         KUBEVIRT_FLOATING_IP_CREATED,
@@ -136,6 +212,10 @@
                 .add("router", subject())
                 .add("floatingIp", floatingIp)
                 .add("podName", podName)
+                .add("internal", internal)
+                .add("externalIp", externalIp)
+                .add("externalNet", externalNet)
+                .add("peerRouterIp", peerRouterIp)
                 .toString();
     }
 }
diff --git a/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtFloatingIpTest.java b/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtFloatingIpTest.java
index f5f400e..b63cf00 100644
--- a/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtFloatingIpTest.java
+++ b/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtFloatingIpTest.java
@@ -32,6 +32,8 @@
     private static final String ID_2 = "fip_id_2";
     private static final String ROUTER_NAME_1 = "router-1";
     private static final String ROUTER_NAME_2 = "router-2";
+    private static final String NETWORK_NAME_1 = "flat-1";
+    private static final String NETWORK_NAME_2 = "flat-2";
     private static final IpAddress FLOATING_IP_1 = IpAddress.valueOf("10.10.10.10");
     private static final IpAddress FLOATING_IP_2 = IpAddress.valueOf("20.20.20.20");
     private static final String POD_NAME_1 = "pod-1";
@@ -59,6 +61,7 @@
         fip1 = DefaultKubevirtFloatingIp.builder()
                 .id(ID_1)
                 .routerName(ROUTER_NAME_1)
+                .networkName(NETWORK_NAME_1)
                 .floatingIp(FLOATING_IP_1)
                 .podName(POD_NAME_1)
                 .fixedIp(FIXED_IP_1)
@@ -67,6 +70,7 @@
         sameAsFip1 = DefaultKubevirtFloatingIp.builder()
                 .id(ID_1)
                 .routerName(ROUTER_NAME_1)
+                .networkName(NETWORK_NAME_1)
                 .floatingIp(FLOATING_IP_1)
                 .podName(POD_NAME_1)
                 .fixedIp(FIXED_IP_1)
@@ -75,6 +79,7 @@
         fip2 = DefaultKubevirtFloatingIp.builder()
                 .id(ID_2)
                 .routerName(ROUTER_NAME_2)
+                .networkName(NETWORK_NAME_2)
                 .floatingIp(FLOATING_IP_2)
                 .podName(POD_NAME_2)
                 .fixedIp(FIXED_IP_2)
@@ -100,6 +105,7 @@
 
         assertEquals(ID_1, fip.id());
         assertEquals(ROUTER_NAME_1, fip.routerName());
+        assertEquals(NETWORK_NAME_1, fip.networkName());
         assertEquals(FLOATING_IP_1, fip.floatingIp());
         assertEquals(POD_NAME_1, fip.podName());
         assertEquals(FIXED_IP_1, fip.fixedIp());
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListFloatingIpCommand.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListFloatingIpCommand.java
index 574bba5..20ab17e 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListFloatingIpCommand.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListFloatingIpCommand.java
@@ -47,7 +47,7 @@
     protected void doExecute() throws Exception {
         KubevirtRouterService service = get(KubevirtRouterService.class);
         List<KubevirtFloatingIp> fips = Lists.newArrayList(service.floatingIps());
-        fips.sort(Comparator.comparing(KubevirtFloatingIp::routerName));
+        fips.sort(Comparator.comparing(KubevirtFloatingIp::networkName));
 
         String format = genFormatString(ImmutableList.of(CLI_NAME_LENGTH,
                 CLI_IP_ADDRESS_LENGTH, CLI_NAME_LENGTH, CLI_IP_ADDRESS_LENGTH));
@@ -55,13 +55,13 @@
         if (outputJson()) {
             print("%s", json(fips));
         } else {
-            print(format, "Router Name", "Floating IP", "POD Name", "Fixed IP");
+            print(format, "Network Name", "Floating IP", "POD Name", "Fixed IP");
             for (KubevirtFloatingIp fip : fips) {
 
                 String fixedIp = fip.fixedIp() == null ? "N/A" : fip.fixedIp().toString();
                 String podName = fip.podName() == null ? "N/A" : fip.podName();
 
-                print(format, StringUtils.substring(fip.routerName(), 0,
+                print(format, StringUtils.substring(fip.networkName(), 0,
                         CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
                         StringUtils.substring(fip.floatingIp().toString(), 0,
                                 CLI_IP_ADDRESS_LENGTH - CLI_MARGIN_LENGTH),
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpCodec.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpCodec.java
index 16fd082..f2a3505 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpCodec.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpCodec.java
@@ -38,6 +38,7 @@
     private static final String ID = "id";
     private static final String ROUTER_NAME = "routerName";
     private static final String POD_NAME = "podName";
+    private static final String NETWORK_NAME = "networkName";
     private static final String FLOATING_IP = "floatingIp";
     private static final String FIXED_IP = "fixedIp";
 
@@ -50,6 +51,7 @@
         ObjectNode result = context.mapper().createObjectNode()
                 .put(ID, fip.id())
                 .put(ROUTER_NAME, fip.routerName())
+                .put(NETWORK_NAME, fip.networkName())
                 .put(FLOATING_IP, fip.floatingIp().toString());
 
         if (fip.podName() != null) {
@@ -74,10 +76,13 @@
                 ROUTER_NAME + MISSING_MESSAGE);
         String floatingIp = nullIsIllegal(json.get(FLOATING_IP).asText(),
                 FLOATING_IP + MISSING_MESSAGE);
+        String networkName = nullIsIllegal(json.get(NETWORK_NAME).asText(),
+                NETWORK_NAME + MISSING_MESSAGE);
 
         KubevirtFloatingIp.Builder builder = DefaultKubevirtFloatingIp.builder()
                 .id(id)
                 .routerName(routerName)
+                .networkName(networkName)
                 .floatingIp(IpAddress.valueOf(floatingIp));
 
         JsonNode podName = json.get(POD_NAME);
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/DistributedKubevirtRouterStore.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/DistributedKubevirtRouterStore.java
index 2d566fc..c11fb2d 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/DistributedKubevirtRouterStore.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/DistributedKubevirtRouterStore.java
@@ -44,6 +44,7 @@
 import org.slf4j.Logger;
 
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.Set;
 import java.util.concurrent.ExecutorService;
 
@@ -56,6 +57,10 @@
 import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_FLOATING_IP_REMOVED;
 import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_FLOATING_IP_UPDATED;
 import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_CREATED;
+import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_EXTERNAL_NETWORK_ATTACHED;
+import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_EXTERNAL_NETWORK_DETACHED;
+import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_INTERNAL_NETWORKS_ATTACHED;
+import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_INTERNAL_NETWORKS_DETACHED;
 import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_REMOVED;
 import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_UPDATED;
 import static org.slf4j.LoggerFactory.getLogger;
@@ -72,6 +77,10 @@
 
     private static final String ERR_NOT_FOUND = " does not exist";
     private static final String ERR_DUPLICATE = " already exists";
+    private static final String MSG_FLOATING_IP = "Kubevirt floating IP %s %s with %s";
+    private static final String MSG_ASSOCIATED = "associated";
+    private static final String MSG_DISASSOCIATED = "disassociated";
+
     private static final String APP_ID = "org.onosproject.kubevirtnetwork";
 
     private static final KryoNamespace
@@ -223,10 +232,7 @@
                                     KUBEVIRT_ROUTER_CREATED, event.newValue().value())));
                     break;
                 case UPDATE:
-                    log.debug("Kubevirt router updated");
-                    eventExecutor.execute(() ->
-                            notifyDelegate(new KubevirtRouterEvent(
-                                    KUBEVIRT_ROUTER_UPDATED, event.newValue().value())));
+                    eventExecutor.execute(() -> processRouterMapUpdate(event));
                     break;
                 case REMOVE:
                     log.debug("Kubevirt router removed");
@@ -239,6 +245,59 @@
                     break;
             }
         }
+
+        private void processRouterMapUpdate(MapEvent<String, KubevirtRouter> event) {
+            log.debug("Kubevirt router updated");
+            eventExecutor.execute(() ->
+                    notifyDelegate(new KubevirtRouterEvent(
+                            KUBEVIRT_ROUTER_UPDATED, event.newValue().value())));
+
+            KubevirtRouter router = Strings.isNullOrEmpty(
+                    event.newValue().value().name()) ?
+                    null :
+                    router(event.newValue().value().name());
+
+            KubevirtRouter oldValue = event.oldValue().value();
+            KubevirtRouter newValue = event.newValue().value();
+
+            if (oldValue.external().size() == 0 && newValue.external().size() > 0) {
+                newValue.external().entrySet().stream().findAny()
+                        .ifPresent(entry ->
+                            notifyDelegate(new KubevirtRouterEvent(
+                            KUBEVIRT_ROUTER_EXTERNAL_NETWORK_ATTACHED,
+                            router, entry.getKey(), entry.getValue(),
+                            newValue.peerRouter().ipAddress().toString())));
+            }
+
+            if (oldValue.external().size() > 0 && newValue.external().size() == 0) {
+                oldValue.external().entrySet().stream().findAny()
+                        .ifPresent(entry ->
+                            notifyDelegate(new KubevirtRouterEvent(
+                            KUBEVIRT_ROUTER_EXTERNAL_NETWORK_DETACHED,
+                            router, entry.getKey(), entry.getValue(),
+                            oldValue.peerRouter().ipAddress().toString())));
+            }
+
+            Set<String> added = new HashSet<>(newValue.internal());
+            Set<String> oldset = oldValue.internal();
+            added.removeAll(oldset);
+
+            Set<String> removed = new HashSet<>(oldValue.internal());
+            Set<String> newset = newValue.internal();
+            removed.removeAll(newset);
+
+            if (added.size() > 0) {
+                notifyDelegate(new KubevirtRouterEvent(
+                        KUBEVIRT_ROUTER_INTERNAL_NETWORKS_ATTACHED,
+                        router, added));
+            }
+
+            if (removed.size() > 0) {
+                notifyDelegate(new KubevirtRouterEvent(
+                        KUBEVIRT_ROUTER_INTERNAL_NETWORKS_DETACHED,
+                        router, removed));
+            }
+        }
     }
 
     private class KubevirtFloatingIpMapListener implements MapEventListener<String, KubevirtFloatingIp> {
@@ -307,6 +366,8 @@
                         KUBEVIRT_FLOATING_IP_ASSOCIATED,
                         router,
                         event.newValue().value(), newPodName));
+                log.info(String.format(MSG_FLOATING_IP,
+                        event.newValue().value().floatingIp(), MSG_ASSOCIATED, newPodName));
             }
 
             if (!Strings.isNullOrEmpty(oldPodName) && Strings.isNullOrEmpty(newPodName)) {
@@ -314,6 +375,8 @@
                         KUBEVIRT_FLOATING_IP_DISASSOCIATED,
                         router,
                         event.newValue().value(), oldPodName));
+                log.info(String.format(MSG_FLOATING_IP,
+                        event.newValue().value().floatingIp(), MSG_DISASSOCIATED, oldPodName));
             }
         }
     }
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java
index 18caff1..7f539de 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkHandler.java
@@ -394,6 +394,7 @@
         KubevirtNode electedGateway = gatewayNodeForSpecifiedNetwork(network);
         if (electedGateway == null) {
             log.warn("There's no elected gateway for the network {}", network.name());
+            return;
         }
 
         setGatewayArpRule(network, PRE_FLAT_TABLE, electedGateway.intgBridge(), install);
diff --git a/apps/kubevirt-networking/app/src/main/resources/definitions/KubevirtFloatingIps.json b/apps/kubevirt-networking/app/src/main/resources/definitions/KubevirtFloatingIps.json
index bffb67d..07a45e2 100644
--- a/apps/kubevirt-networking/app/src/main/resources/definitions/KubevirtFloatingIps.json
+++ b/apps/kubevirt-networking/app/src/main/resources/definitions/KubevirtFloatingIps.json
@@ -17,6 +17,7 @@
         "required": [
           "id",
           "routerName",
+          "networkName",
           "floatingIp",
           "podName",
           "fixedIp"
@@ -32,6 +33,11 @@
             "example": "router-1",
             "description": "Name of router."
           },
+          "networkName": {
+            "type": "string",
+            "example": "flat-1",
+            "description": "Name of network."
+          },
           "floatingIp": {
             "type": "string",
             "example": "10.10.10.5",
diff --git a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpCodecTest.java b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpCodecTest.java
index 79182da..f8b5d14 100644
--- a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpCodecTest.java
+++ b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpCodecTest.java
@@ -71,6 +71,7 @@
         KubevirtFloatingIp floatingIp = DefaultKubevirtFloatingIp.builder()
                 .id("fip-id")
                 .routerName("router-1")
+                .networkName("flat-1")
                 .floatingIp(IpAddress.valueOf("10.10.10.10"))
                 .podName("pod-1")
                 .fixedIp(IpAddress.valueOf("20.20.20.20"))
@@ -86,6 +87,7 @@
 
         assertEquals("fip-1", floatingIp.id());
         assertEquals("router-1", floatingIp.routerName());
+        assertEquals("flat-1", floatingIp.networkName());
         assertEquals("10.10.10.10", floatingIp.floatingIp().toString());
         assertEquals("pod-1", floatingIp.podName());
         assertEquals("20.20.20.20", floatingIp.fixedIp().toString());
diff --git a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpJsonMatcher.java b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpJsonMatcher.java
index 0bcfa0a..ccfb76c 100644
--- a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpJsonMatcher.java
+++ b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIpJsonMatcher.java
@@ -28,6 +28,7 @@
     private final KubevirtFloatingIp floatingIp;
     private static final String ID = "id";
     private static final String ROUTER_NAME = "routerName";
+    private static final String NETWORK_NAME = "networkName";
     private static final String POD_NAME = "podName";
     private static final String FLOATING_IP = "floatingIp";
     private static final String FIXED_IP = "fixedIp";
@@ -55,6 +56,14 @@
             return false;
         }
 
+        // check network name
+        String jsonNetworkName = jsonNode.get(NETWORK_NAME).asText();
+        String networkName = floatingIp.networkName();
+        if (!jsonNetworkName.equals(networkName)) {
+            description.appendText("Network name was " + jsonNetworkName);
+            return false;
+        }
+
         // check floating IP
         String jsonFip = jsonNode.get(FLOATING_IP).asText();
         String fip = floatingIp.floatingIp().toString();
diff --git a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/impl/KubevirtRouterManagerTest.java b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/impl/KubevirtRouterManagerTest.java
index 2bc222e..2b90712 100644
--- a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/impl/KubevirtRouterManagerTest.java
+++ b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/impl/KubevirtRouterManagerTest.java
@@ -49,6 +49,10 @@
 import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_FLOATING_IP_REMOVED;
 import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_FLOATING_IP_UPDATED;
 import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_CREATED;
+import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_EXTERNAL_NETWORK_ATTACHED;
+import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_EXTERNAL_NETWORK_DETACHED;
+import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_INTERNAL_NETWORKS_ATTACHED;
+import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_INTERNAL_NETWORKS_DETACHED;
 import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_REMOVED;
 import static org.onosproject.kubevirtnetworking.api.KubevirtRouterEvent.Type.KUBEVIRT_ROUTER_UPDATED;
 
@@ -61,6 +65,7 @@
 
     private static final String ROUTER_NAME = "router-1";
     private static final String POD_NAME = "pod-1";
+    private static final String NETWORK_NAME = "flat-1";
     private static final String UPDATED_DESCRIPTION = "router-updated";
     private static final MacAddress UPDATED_MAC = MacAddress.valueOf("FF:FF:FF:FF:FF:FF");
 
@@ -70,17 +75,31 @@
     private static final KubevirtRouter ROUTER = DefaultKubevirtRouter.builder()
             .name(ROUTER_NAME)
             .description(ROUTER_NAME)
-            .internal(ImmutableSet.of("vxlan-1", "vxlan-2"))
-            .external(ImmutableMap.of("10.10.10.10", "flat"))
+            .internal(ImmutableSet.of())
+            .external(ImmutableMap.of())
             .enableSnat(true)
-            .peerRouter(new KubevirtPeerRouter(IpAddress.valueOf("20.20.20.20"),
-                    MacAddress.valueOf("11:22:33:44:55:66")))
             .build();
 
     private static final KubevirtRouter ROUTER_UPDATED = DefaultKubevirtRouter.builder()
             .name(ROUTER_NAME)
             .description(UPDATED_DESCRIPTION)
+            .internal(ImmutableSet.of())
+            .external(ImmutableMap.of())
+            .enableSnat(true)
+            .build();
+
+    private static final KubevirtRouter ROUTER_WITH_INTERNAL = DefaultKubevirtRouter.builder()
+            .name(ROUTER_NAME)
+            .description(ROUTER_NAME)
             .internal(ImmutableSet.of("vxlan-1", "vxlan-2"))
+            .external(ImmutableMap.of())
+            .enableSnat(true)
+            .build();
+
+    private static final KubevirtRouter ROUTER_WITH_EXTERNAL = DefaultKubevirtRouter.builder()
+            .name(ROUTER_NAME)
+            .description(ROUTER_NAME)
+            .internal(ImmutableSet.of())
             .external(ImmutableMap.of("10.10.10.10", "flat"))
             .enableSnat(true)
             .peerRouter(new KubevirtPeerRouter(IpAddress.valueOf("20.20.20.20"),
@@ -90,12 +109,14 @@
     private static final KubevirtFloatingIp FLOATING_IP_DISASSOCIATED = DefaultKubevirtFloatingIp.builder()
             .id(FLOATING_IP_ID)
             .routerName(ROUTER_NAME)
+            .networkName(NETWORK_NAME)
             .floatingIp(IpAddress.valueOf("10.10.10.10"))
             .build();
 
     private static final KubevirtFloatingIp FLOATING_IP_ASSOCIATED = DefaultKubevirtFloatingIp.builder()
             .id(FLOATING_IP_ID)
             .routerName(ROUTER_NAME)
+            .networkName(NETWORK_NAME)
             .floatingIp(IpAddress.valueOf("10.10.10.10"))
             .fixedIp(IpAddress.valueOf("20.20.20.20"))
             .podName(POD_NAME)
@@ -184,7 +205,7 @@
      */
     @Test
     public void testPeerRouterMacUpdate() {
-        target.createRouter(ROUTER);
+        target.createRouter(ROUTER_WITH_EXTERNAL);
 
         target.updatePeerRouterMac(ROUTER_NAME, UPDATED_MAC);
         assertEquals("MAC address was not updated", UPDATED_MAC,
@@ -194,6 +215,53 @@
     }
 
     /**
+     * Tests router's internal networks attached and detached.
+     */
+    @Test
+    public void testRouterInternalAttachedAndDetached() {
+        target.createRouter(ROUTER);
+        assertEquals("Number of router did not match", 1, target.routers().size());
+        assertEquals("Router internal did not match", 0, target.router(ROUTER_NAME).internal().size());
+
+        target.updateRouter(ROUTER_WITH_INTERNAL);
+        assertEquals("Number of router did not match", 1, target.routers().size());
+        assertEquals("Router internal did not match", 2, target.router(ROUTER_NAME).internal().size());
+
+        target.updateRouter(ROUTER);
+        assertEquals("Number of router did not match", 1, target.routers().size());
+        assertEquals("Router internal did not match", 0, target.router(ROUTER_NAME).internal().size());
+
+        validateEvents(KUBEVIRT_ROUTER_CREATED, KUBEVIRT_ROUTER_UPDATED,
+                KUBEVIRT_ROUTER_INTERNAL_NETWORKS_ATTACHED, KUBEVIRT_ROUTER_UPDATED,
+                KUBEVIRT_ROUTER_INTERNAL_NETWORKS_DETACHED);
+    }
+
+    /**
+     * Tests router's external networks attached and detached.
+     */
+    @Test
+    public void testRouterExternalAttachedAndDetached() {
+        target.createRouter(ROUTER);
+        assertEquals("Number of router did not match", 1, target.routers().size());
+        assertNull(target.router(ROUTER_NAME).peerRouter());
+        assertEquals(0, target.router(ROUTER_NAME).external().size());
+
+        target.updateRouter(ROUTER_WITH_EXTERNAL);
+        assertEquals("Number of router did not match", 1, target.routers().size());
+        assertNotNull(target.router(ROUTER_NAME).peerRouter());
+        assertEquals(1, target.router(ROUTER_NAME).external().size());
+
+        target.updateRouter(ROUTER);
+        assertEquals("Number of router did not match", 1, target.routers().size());
+        assertNull(target.router(ROUTER_NAME).peerRouter());
+        assertEquals(0, target.router(ROUTER_NAME).external().size());
+
+        validateEvents(KUBEVIRT_ROUTER_CREATED, KUBEVIRT_ROUTER_UPDATED,
+                KUBEVIRT_ROUTER_EXTERNAL_NETWORK_ATTACHED, KUBEVIRT_ROUTER_UPDATED,
+                KUBEVIRT_ROUTER_EXTERNAL_NETWORK_DETACHED);
+    }
+
+    /**
      * Tests if creating a null router fails with an exception.
      */
     @Test(expected = NullPointerException.class)
diff --git a/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIp.json b/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIp.json
index fa85c53..1424d48 100644
--- a/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIp.json
+++ b/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/codec/KubevirtFloatingIp.json
@@ -1,6 +1,7 @@
 {
   "id": "fip-1",
   "routerName": "router-1",
+  "networkName": "flat-1",
   "floatingIp": "10.10.10.10",
   "podName": "pod-1",
   "fixedIp": "20.20.20.20"
