diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetwork.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetwork.java
index 73c96f0..2745e46 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetwork.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetwork.java
@@ -53,6 +53,7 @@
     private final Integer mtu;
     private final String segmentId;
     private final IpAddress gatewayIp;
+    private final boolean defaultRoute;
     private final String cidr;
     private final Set<KubevirtHostRoute> hostRoutes;
     private final KubevirtIpPool ipPool;
@@ -67,6 +68,7 @@
      * @param mtu               network MTU
      * @param segmentId         segment identifier
      * @param gatewayIp         gateway IP address
+     * @param defaultRoute      default route
      * @param cidr              CIDR of network
      * @param hostRoutes        a set of host routes
      * @param ipPool            IP pool
@@ -74,7 +76,8 @@
      */
     public DefaultKubevirtNetwork(String networkId, Type type, String name,
                                   Integer mtu, String segmentId, IpAddress gatewayIp,
-                                  String cidr, Set<KubevirtHostRoute> hostRoutes,
+                                  boolean defaultRoute, String cidr,
+                                  Set<KubevirtHostRoute> hostRoutes,
                                   KubevirtIpPool ipPool, Set<IpAddress> dnses) {
         this.networkId = networkId;
         this.type = type;
@@ -82,6 +85,7 @@
         this.mtu = mtu;
         this.segmentId = segmentId;
         this.gatewayIp = gatewayIp;
+        this.defaultRoute = defaultRoute;
         this.cidr = cidr;
         this.hostRoutes = hostRoutes;
         this.ipPool = ipPool;
@@ -133,6 +137,11 @@
     }
 
     @Override
+    public boolean defaultRoute() {
+        return defaultRoute;
+    }
+
+    @Override
     public KubevirtIpPool ipPool() {
         return ipPool;
     }
@@ -196,7 +205,7 @@
         DefaultKubevirtNetwork that = (DefaultKubevirtNetwork) o;
         return networkId.equals(that.networkId) && type == that.type &&
                 name.equals(that.name) && mtu.equals(that.mtu) &&
-                gatewayIp.equals(that.gatewayIp) &&
+                gatewayIp.equals(that.gatewayIp) && defaultRoute == that.defaultRoute &&
                 cidr.equals(that.cidr) && hostRoutes.equals(that.hostRoutes) &&
                 ipPool.equals(that.ipPool) &&
                 dnses.equals(that.dnses);
@@ -205,7 +214,7 @@
     @Override
     public int hashCode() {
         return Objects.hash(networkId, type, name, mtu, segmentId, gatewayIp,
-                cidr, hostRoutes, ipPool, dnses);
+                defaultRoute, cidr, hostRoutes, ipPool, dnses);
     }
 
     @Override
@@ -217,6 +226,7 @@
                 .add("mtu", mtu)
                 .add("segmentId", segmentId)
                 .add("gatewayIp", gatewayIp)
+                .add("defaultRoute", defaultRoute)
                 .add("cidr", cidr)
                 .add("hostRouts", hostRoutes)
                 .add("ipPool", ipPool)
@@ -263,6 +273,7 @@
         private Integer mtu;
         private String segmentId;
         private IpAddress gatewayIp;
+        private boolean defaultRoute;
         private String cidr;
         private Set<KubevirtHostRoute> hostRouts;
         private KubevirtIpPool ipPool;
@@ -274,7 +285,6 @@
             checkArgument(type != null, NOT_NULL_MSG, "type");
             checkArgument(name != null, NOT_NULL_MSG, "name");
             checkArgument(mtu != null, NOT_NULL_MSG, "mtu");
-            checkArgument(gatewayIp != null, NOT_NULL_MSG, "gatewayIp");
             checkArgument(cidr != null, NOT_NULL_MSG, "cidr");
             checkArgument(ipPool != null, NOT_NULL_MSG, "ipPool");
 
@@ -287,7 +297,7 @@
             }
 
             return new DefaultKubevirtNetwork(networkId, type, name, mtu, segmentId,
-                    gatewayIp, cidr, hostRouts, ipPool, dnses);
+                    gatewayIp, defaultRoute, cidr, hostRouts, ipPool, dnses);
         }
 
         @Override
@@ -327,6 +337,12 @@
         }
 
         @Override
+        public KubevirtNetwork.Builder defaultRoute(boolean flag) {
+            this.defaultRoute = flag;
+            return this;
+        }
+
+        @Override
         public Builder cidr(String cidr) {
             this.cidr = cidr;
             return this;
diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtNetwork.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtNetwork.java
index 94ed1de..2db552e 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtNetwork.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/KubevirtNetwork.java
@@ -114,6 +114,13 @@
     Set<KubevirtHostRoute> hostRoutes();
 
     /**
+     * Returns default route flag.
+     *
+     * @return default route
+     */
+    boolean defaultRoute();
+
+    /**
      * Returns the IP pool.
      *
      * @return IP pool
@@ -220,6 +227,14 @@
         Builder gatewayIp(IpAddress ipAddress);
 
         /**
+         * Returns network builder with supplied default route flag.
+         *
+         * @param flag default route
+         * @return network builder
+         */
+        Builder defaultRoute(boolean flag);
+
+        /**
          * Returns network builder with supplied network CIDR.
          *
          * @param cidr Classless Inter-Domain Routing
diff --git a/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetworkTest.java b/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetworkTest.java
index 8eefe36..ceec755 100644
--- a/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetworkTest.java
+++ b/apps/kubevirt-networking/api/src/test/java/org/onosproject/kubevirtnetworking/api/DefaultKubevirtNetworkTest.java
@@ -43,6 +43,8 @@
     private static final String SEGMENT_ID_2 = "2";
     private static final IpAddress GATEWAY_IP_1 = IpAddress.valueOf("10.10.10.1");
     private static final IpAddress GATEWAY_IP_2 = IpAddress.valueOf("20.20.20.1");
+    private static final boolean DEFAULT_ROUTE_1 = true;
+    private static final boolean DEFAULT_ROUTE_2 = false;
     private static final String CIDR_1 = "10.10.10.0/24";
     private static final String CIDR_2 = "20.20.20.0/24";
     private static final IpAddress IP_POOL_START_1 = IpAddress.valueOf("10.10.10.100");
@@ -76,6 +78,7 @@
                 .mtu(MTU_1)
                 .segmentId(SEGMENT_ID_1)
                 .gatewayIp(GATEWAY_IP_1)
+                .defaultRoute(DEFAULT_ROUTE_1)
                 .cidr(CIDR_1)
                 .ipPool(new KubevirtIpPool(IP_POOL_START_1, IP_POOL_END_1))
                 .hostRoutes(ImmutableSet.of())
@@ -89,6 +92,7 @@
                 .mtu(MTU_1)
                 .segmentId(SEGMENT_ID_1)
                 .gatewayIp(GATEWAY_IP_1)
+                .defaultRoute(DEFAULT_ROUTE_1)
                 .cidr(CIDR_1)
                 .ipPool(new KubevirtIpPool(IP_POOL_START_1, IP_POOL_END_1))
                 .hostRoutes(ImmutableSet.of())
@@ -102,6 +106,7 @@
                 .mtu(MTU_2)
                 .segmentId(SEGMENT_ID_2)
                 .gatewayIp(GATEWAY_IP_2)
+                .defaultRoute(DEFAULT_ROUTE_2)
                 .cidr(CIDR_2)
                 .ipPool(new KubevirtIpPool(IP_POOL_START_2, IP_POOL_END_2))
                 .hostRoutes(ImmutableSet.of())
@@ -131,6 +136,7 @@
         assertEquals(NAME_1, network.name());
         assertEquals(MTU_1, network.mtu());
         assertEquals(GATEWAY_IP_1, network.gatewayIp());
+        assertEquals(DEFAULT_ROUTE_1, network.defaultRoute());
         assertEquals(CIDR_1, network.cidr());
         assertEquals(new KubevirtIpPool(IP_POOL_START_1, IP_POOL_END_1), network.ipPool());
         assertEquals(ImmutableSet.of(DNS_1), network.dnses());
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListNetworkCommand.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListNetworkCommand.java
index dfaed15..ded79aa 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListNetworkCommand.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/cli/KubevirtListNetworkCommand.java
@@ -67,7 +67,7 @@
                                 0, CLI_NAME_LENGTH - CLI_MARGIN_LENGTH),
                         net.type().toString(),
                         net.segmentId() == null ? "N/A" : net.segmentId(),
-                        net.gatewayIp() == null ? "" : net.gatewayIp().toString());
+                        net.gatewayIp() == null ? "N/A" : net.gatewayIp().toString());
             }
         }
     }
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtNetworkCodec.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtNetworkCodec.java
index f04106e..2d8a07c 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtNetworkCodec.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/codec/KubevirtNetworkCodec.java
@@ -48,6 +48,7 @@
     private static final String MTU = "mtu";
     private static final String SEGMENT_ID = "segmentId";
     private static final String GATEWAY_IP = "gatewayIp";
+    private static final String DEFAULT_ROUTE = "defaultRoute";
     private static final String CIDR = "cidr";
     private static final String HOST_ROUTES = "hostRoutes";
     private static final String IP_POOL = "ipPool";
@@ -65,6 +66,7 @@
                 .put(NAME, network.name())
                 .put(MTU, network.mtu())
                 .put(GATEWAY_IP, network.gatewayIp().toString())
+                .put(DEFAULT_ROUTE, network.defaultRoute())
                 .put(CIDR, network.cidr());
 
         if (network.segmentId() != null) {
@@ -113,6 +115,8 @@
                 MTU + MISSING_MESSAGE);
         String gatewayIp = nullIsIllegal(json.get(GATEWAY_IP).asText(),
                 GATEWAY_IP + MISSING_MESSAGE);
+        boolean defaultRoute = nullIsIllegal(json.get(DEFAULT_ROUTE).asBoolean(),
+                DEFAULT_ROUTE + MISSING_MESSAGE);
         String cidr = nullIsIllegal(json.get(CIDR).asText(),
                 CIDR + MISSING_MESSAGE);
 
@@ -122,6 +126,7 @@
                 .name(name)
                 .mtu(mtu)
                 .gatewayIp(IpAddress.valueOf(gatewayIp))
+                .defaultRoute(defaultRoute)
                 .cidr(cidr);
 
         if (!type.equals(KubevirtNetwork.Type.FLAT.name())) {
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtDhcpHandler.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtDhcpHandler.java
index 983a5bb..1a2b7d7 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtDhcpHandler.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtDhcpHandler.java
@@ -411,8 +411,8 @@
             }
 
             // Sets the default router address up.
-            // Performs only if the gateway is set in subnet.
-            if (network.gatewayIp() != null) {
+            // Performs only if the gateway is set and default route is configure to true.
+            if (network.gatewayIp() != null && network.defaultRoute()) {
                 options.add(doRouterAddr(network));
             }
 
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 d4a90a5..992f2f4 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
@@ -649,7 +649,6 @@
             return;
         }
 
-
         TrafficSelector.Builder sBuilder = DefaultTrafficSelector.builder()
                 .matchEthType(Ethernet.TYPE_IPV4)
                 .matchIPProtocol(IPv4.PROTOCOL_ICMP)
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/NetworkAttachmentDefinitionWatcher.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/NetworkAttachmentDefinitionWatcher.java
index da66b0e..7d40fee 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/NetworkAttachmentDefinitionWatcher.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/NetworkAttachmentDefinitionWatcher.java
@@ -74,6 +74,7 @@
     private static final String MTU = "mtu";
     private static final String SEGMENT_ID = "segmentId";
     private static final String GATEWAY_IP = "gatewayIp";
+    private static final String DEFAULT_ROUTE = "defaultRoute";
     private static final String CIDR = "cidr";
     private static final String HOST_ROUTES = "hostRoutes";
     private static final String DESTINATION = "destination";
@@ -284,6 +285,7 @@
                     String type = configJson.getString(TYPE);
                     Integer mtu = configJson.getInt(MTU);
                     String gatewayIp = configJson.getString(GATEWAY_IP);
+                    boolean defaultRoute = configJson.getBoolean(DEFAULT_ROUTE);
 
                     if (!type.equalsIgnoreCase(FLAT.name())) {
                         builder.segmentId(configJson.getString(SEGMENT_ID));
@@ -334,7 +336,8 @@
                     }
 
                     builder.networkId(name).name(name).type(Type.valueOf(type))
-                            .mtu(mtu).gatewayIp(IpAddress.valueOf(gatewayIp)).cidr(cidr);
+                            .mtu(mtu).gatewayIp(IpAddress.valueOf(gatewayIp))
+                            .defaultRoute(defaultRoute).cidr(cidr);
 
                     return builder.build();
                 }
diff --git a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtNetworkCodecTest.java b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtNetworkCodecTest.java
index 492847a..667ca4b 100644
--- a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtNetworkCodecTest.java
+++ b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtNetworkCodecTest.java
@@ -96,6 +96,7 @@
                 .name("net-1")
                 .type(KubevirtNetwork.Type.FLAT)
                 .gatewayIp(IpAddress.valueOf("10.10.10.1"))
+                .defaultRoute(true)
                 .mtu(1500)
                 .cidr("10.10.10.0/24")
                 .hostRoutes(ImmutableSet.of(hostRoute1, hostRoute2))
@@ -121,6 +122,7 @@
         assertThat(network.type().name(), is("FLAT"));
         assertThat(network.cidr(), is("10.10.0.0/24"));
         assertThat(network.gatewayIp().toString(), is("10.10.0.1"));
+        assertThat(network.defaultRoute(), is(true));
         assertThat(network.ipPool().start().toString(), is("10.10.10.100"));
         assertThat(network.ipPool().end().toString(), is("10.10.10.200"));
         assertThat(network.dnses().size(), is(1));
diff --git a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtNetworkJsonMatcher.java b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtNetworkJsonMatcher.java
index 4a67e07..7cbc587 100644
--- a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtNetworkJsonMatcher.java
+++ b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/codec/KubevirtNetworkJsonMatcher.java
@@ -35,6 +35,7 @@
     private static final String MTU = "mtu";
     private static final String SEGMENT_ID = "segmentId";
     private static final String GATEWAY_IP = "gatewayIp";
+    private static final String DEFAULT_ROUTE = "defaultRoute";
     private static final String CIDR = "cidr";
     private static final String HOST_ROUTES = "hostRoutes";
     private static final String IP_POOL = "ipPool";
@@ -86,6 +87,14 @@
             return false;
         }
 
+        // check default route
+        boolean jsonDefaultRoute = jsonNode.get(DEFAULT_ROUTE).asBoolean();
+        boolean defaultRoute = network.defaultRoute();
+        if (jsonDefaultRoute != defaultRoute) {
+            description.appendText("Default route was " + jsonDefaultRoute);
+            return false;
+        }
+
         // check CIDR
         String jsonCidr = jsonNode.get(CIDR).asText();
         String cidr = network.cidr();
diff --git a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkManagerTest.java b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkManagerTest.java
index 1d0c676..5474433 100644
--- a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkManagerTest.java
+++ b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/impl/KubevirtNetworkManagerTest.java
@@ -61,6 +61,7 @@
     private static final Integer MTU = 1500;
     private static final String SEGMENT_ID = "1";
     private static final IpAddress GATEWAY_IP = IpAddress.valueOf("10.10.10.1");
+    private static final boolean DEFAULT_ROUTE = true;
     private static final String CIDR = "10.10.10.0/24";
     private static final IpAddress IP_POOL_START = IpAddress.valueOf("10.10.10.100");
     private static final IpAddress IP_POOL_END = IpAddress.valueOf("10.10.10.200");
@@ -72,6 +73,7 @@
             .mtu(MTU)
             .segmentId(SEGMENT_ID)
             .gatewayIp(GATEWAY_IP)
+            .defaultRoute(DEFAULT_ROUTE)
             .cidr(CIDR)
             .ipPool(new KubevirtIpPool(IP_POOL_START, IP_POOL_END))
             .hostRoutes(ImmutableSet.of())
@@ -84,6 +86,7 @@
             .mtu(MTU)
             .segmentId(SEGMENT_ID)
             .gatewayIp(GATEWAY_IP)
+            .defaultRoute(DEFAULT_ROUTE)
             .cidr(CIDR)
             .ipPool(new KubevirtIpPool(IP_POOL_START, IP_POOL_END))
             .hostRoutes(ImmutableSet.of())
diff --git a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/web/KubevirtNetworkWebResourceTest.java b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/web/KubevirtNetworkWebResourceTest.java
index 8a06018..b453dad 100644
--- a/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/web/KubevirtNetworkWebResourceTest.java
+++ b/apps/kubevirt-networking/app/src/test/java/org/onosproject/kubevirtnetworking/web/KubevirtNetworkWebResourceTest.java
@@ -88,6 +88,7 @@
                 .cidr("10.10.10.0/24")
                 .mtu(1500)
                 .gatewayIp(IpAddress.valueOf("10.10.10.1"))
+                .defaultRoute(true)
                 .ipPool(new KubevirtIpPool(IpAddress.valueOf("10.10.10.100"),
                         IpAddress.valueOf("10.10.10.200")))
                 .build();
diff --git a/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/codec/KubevirtNetwork.json b/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/codec/KubevirtNetwork.json
index afef160..293cfcb 100644
--- a/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/codec/KubevirtNetwork.json
+++ b/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/codec/KubevirtNetwork.json
@@ -5,6 +5,7 @@
   "mtu": 1500,
   "cidr": "10.10.0.0/24",
   "gatewayIp": "10.10.0.1",
+  "defaultRoute": true,
   "ipPool": {
     "start": "10.10.10.100",
     "end": "10.10.10.200"
diff --git a/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/web/kubevirt-network.json b/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/web/kubevirt-network.json
index d8a0a1f..c65236c 100644
--- a/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/web/kubevirt-network.json
+++ b/apps/kubevirt-networking/app/src/test/resources/org/onosproject/kubevirtnetworking/web/kubevirt-network.json
@@ -5,6 +5,7 @@
   "mtu": 1500,
   "cidr": "10.10.10.0/24",
   "gatewayIp": "10.10.10.1",
+  "defaultRoute": true,
   "ipPool": {
     "start": "10.10.10.100",
     "end": "10.10.10.200"
