diff --git a/neutron_tempest_plugin/config.py b/neutron_tempest_plugin/config.py
index 65282cf..fc07e81 100644
--- a/neutron_tempest_plugin/config.py
+++ b/neutron_tempest_plugin/config.py
@@ -11,7 +11,6 @@
 #    under the License.
 
 from oslo_config import cfg
-
 from tempest import config
 
 
@@ -47,6 +46,17 @@
                help='The agent mode for L3 agents in the deployment. '
                     'Configure this only when the single value is used by '
                     'all agents in the deployment.'),
+    cfg.StrOpt('test_mtu_networks',
+               default='[{"provider:network_type":"vxlan",'
+                       '"mtu":1200, "cidr":"10.100.0.0/16"}'
+                       ','
+                       '{"provider:network_type":"vxlan",'
+                       '"mtu":1300, "cidr":"10.200.0.0/16"}]',
+               help='Configuration for test networks. The format is JSON. '
+                    '"provider:network_type":<TYPE> - string '
+                    '"mtu":<MTU> - integer '
+                    '"cidr"<SUBNET/MASK> - string '
+                    '"provider:segmentation_id":<VLAN_ID> - integer')
 ]
 
 # TODO(amuller): Redo configuration options registration as part of the planned
diff --git a/neutron_tempest_plugin/scenario/test_mtu.py b/neutron_tempest_plugin/scenario/test_mtu.py
index b38d770..0e3afe9 100644
--- a/neutron_tempest_plugin/scenario/test_mtu.py
+++ b/neutron_tempest_plugin/scenario/test_mtu.py
@@ -14,6 +14,7 @@
 #    under the License.
 
 from neutron_lib.api.definitions import provider_net
+from oslo_serialization import jsonutils
 from tempest.common import utils
 from tempest.common import waiters
 from tempest.lib.common.utils import data_utils
@@ -59,6 +60,9 @@
         fip = self.create_and_associate_floatingip(port['id'])
         return server, fip
 
+    def _get_network_params(self):
+        return jsonutils.loads(CONF.neutron_plugin_options.test_mtu_networks)
+
 
 class NetworkMtuTest(NetworkMtuBaseTest):
     credentials = ['primary', 'admin']
@@ -97,13 +101,13 @@
         self.assertNotEqual(self.networks[0]['mtu'], self.networks[1]['mtu'])
         self.networks.sort(key=lambda net: net['mtu'])
         server1, fip1 = self.create_pingable_vm(self.networks[0],
-            self.keypair, self.secgroup)
+                                                self.keypair, self.secgroup)
         server_ssh_client1 = ssh.Client(
             self.floating_ips[0]['floating_ip_address'],
             CONF.validation.image_ssh_user,
             pkey=self.keypair['private_key'])
         server2, fip2 = self.create_pingable_vm(self.networks[1],
-            self.keypair, self.secgroup)
+                                                self.keypair, self.secgroup)
         server_ssh_client2 = ssh.Client(
             self.floating_ips[0]['floating_ip_address'],
             CONF.validation.image_ssh_user,
@@ -150,7 +154,7 @@
     def skip_checks(cls):
         super(NetworkWritableMtuTest, cls).skip_checks()
         if ("vxlan" not in
-            config.CONF.neutron_plugin_options.available_type_drivers):
+                config.CONF.neutron_plugin_options.available_type_drivers):
             raise cls.skipException("VXLAN type_driver is not enabled")
 
     @classmethod
@@ -160,24 +164,24 @@
 
     def _create_setup(self):
         self.admin_client = self.os_admin.network_client
-        net_kwargs = {'tenant_id': self.client.tenant_id,
-                      'provider:network_type': 'vxlan'}
-        for _ in range(2):
-            net_kwargs['name'] = data_utils.rand_name('net')
-            network = self.admin_client.create_network(**net_kwargs)[
+        for test_net in self._get_network_params():
+            test_net['tenant_id'] = self.client.tenant_id
+            test_net['name'] = data_utils.rand_name('net')
+            cidr = None if 'cidr' not in test_net else test_net.pop('cidr')
+            network = self.admin_client.create_network(**test_net)[
                 'network']
             self.networks.append(network)
             self.addCleanup(self.admin_client.delete_network, network['id'])
-            subnet = self.create_subnet(network)
+            subnet = self.create_subnet(network, cidr=cidr)
             self.create_router_interface(self.router['id'], subnet['id'])
             self.addCleanup(self.client.remove_router_interface_with_subnet_id,
                             self.router['id'], subnet['id'])
 
-        # Update network mtu.
+        # update network mtu
         net_mtu = self.admin_client.show_network(
             self.networks[0]['id'])['network']['mtu']
         self.admin_client.update_network(self.networks[0]['id'],
-            mtu=(net_mtu - 1))
+                                         mtu=(net_mtu - 1))
         self.networks[0]['mtu'] = (
             self.admin_client.show_network(
                 self.networks[0]['id'])['network']['mtu'])
@@ -186,13 +190,13 @@
         self.assertNotEqual(self.networks[0]['mtu'], self.networks[1]['mtu'])
         self.networks.sort(key=lambda net: net['mtu'])
         server1, fip1 = self.create_pingable_vm(self.networks[0],
-            self.keypair, self.secgroup)
+                                                self.keypair, self.secgroup)
         server_ssh_client1 = ssh.Client(
             self.floating_ips[0]['floating_ip_address'],
             CONF.validation.image_ssh_user,
             pkey=self.keypair['private_key'])
         server2, fip2 = self.create_pingable_vm(self.networks[1],
-            self.keypair, self.secgroup)
+                                                self.keypair, self.secgroup)
         server_ssh_client2 = ssh.Client(
             self.floating_ips[0]['floating_ip_address'],
             CONF.validation.image_ssh_user,
