diff --git a/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/DefaultNeutronConfig.java b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/DefaultNeutronConfig.java
index acb5a3d..0dc1eea 100644
--- a/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/DefaultNeutronConfig.java
+++ b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/DefaultNeutronConfig.java
@@ -29,12 +29,19 @@
 
     private final boolean useMetadataProxy;
     private final String metadataProxySecret;
+    private final String novaMetadataIp;
+    private final Integer novaMetadataPort;
 
     private static final String NOT_NULL_MSG = "% cannot be null";
 
-    private DefaultNeutronConfig(boolean useMetadataProxy, String metadataProxySecret) {
+    private DefaultNeutronConfig(boolean useMetadataProxy,
+                                 String metadataProxySecret,
+                                 String novaMetadataIp,
+                                 Integer novaMetadataPort) {
         this.useMetadataProxy = useMetadataProxy;
         this.metadataProxySecret = metadataProxySecret;
+        this.novaMetadataIp = novaMetadataIp;
+        this.novaMetadataPort = novaMetadataPort;
     }
 
     @Override
@@ -48,6 +55,16 @@
     }
 
     @Override
+    public String novaMetadataIp() {
+        return novaMetadataIp;
+    }
+
+    @Override
+    public Integer novaMetadataPort() {
+        return novaMetadataPort;
+    }
+
+    @Override
     public boolean equals(Object o) {
         if (this == o) {
             return true;
@@ -56,7 +73,9 @@
         if (o instanceof DefaultNeutronConfig) {
             DefaultNeutronConfig that = (DefaultNeutronConfig) o;
             return Objects.equals(useMetadataProxy, that.useMetadataProxy) &&
-                    Objects.equals(metadataProxySecret, that.metadataProxySecret);
+                    Objects.equals(metadataProxySecret, that.metadataProxySecret) &&
+                    Objects.equals(novaMetadataIp, that.novaMetadataIp) &&
+                    Objects.equals(novaMetadataPort, that.novaMetadataPort);
         }
         return false;
     }
@@ -64,7 +83,8 @@
     @Override
     public int hashCode() {
 
-        return Objects.hash(useMetadataProxy, metadataProxySecret);
+        return Objects.hash(useMetadataProxy, metadataProxySecret,
+                            novaMetadataIp, novaMetadataPort);
     }
 
     @Override
@@ -72,6 +92,8 @@
         return MoreObjects.toStringHelper(this)
                 .add("useMetadataProxy", useMetadataProxy)
                 .add("metadataProxySecret", metadataProxySecret)
+                .add("novaMetadataIp", novaMetadataIp)
+                .add("novaMetadataPort", novaMetadataPort)
                 .toString();
     }
 
@@ -91,6 +113,9 @@
 
         private boolean useMetadataProxy;
         private String metadataProxySecret;
+        private String novaMetadataIp;
+        private Integer novaMetadataPort;
+
 
         // private constructor not intended to use from external
         private Builder() {
@@ -101,7 +126,8 @@
             checkArgument(metadataProxySecret != null,
                                         NOT_NULL_MSG, "metadataProxySecret");
 
-            return new DefaultNeutronConfig(useMetadataProxy, metadataProxySecret);
+            return new DefaultNeutronConfig(useMetadataProxy, metadataProxySecret,
+                                            novaMetadataIp, novaMetadataPort);
         }
 
         @Override
@@ -115,5 +141,17 @@
             this.metadataProxySecret = metadataProxySecret;
             return this;
         }
+
+        @Override
+        public NeutronConfig.Builder novaMetadataIp(String novaMetadataIp) {
+            this.novaMetadataIp = novaMetadataIp;
+            return this;
+        }
+
+        @Override
+        public NeutronConfig.Builder novaMetadataPort(Integer novaMetadataPort) {
+            this.novaMetadataPort = novaMetadataPort;
+            return this;
+        }
     }
 }
diff --git a/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/NeutronConfig.java b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/NeutronConfig.java
index 86ea2a9..e5e9cd4 100644
--- a/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/NeutronConfig.java
+++ b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/NeutronConfig.java
@@ -37,6 +37,20 @@
     String metadataProxySecret();
 
     /**
+     * Returns NOVA metadata IP address.
+     *
+     * @return NOVA metadata IP address
+     */
+    String novaMetadataIp();
+
+    /**
+     * Returns NOVA metadata port number.
+     *
+     * @return NOVA metadata port number
+     */
+    Integer novaMetadataPort();
+
+    /**
      * Builder of neutron config.
      */
     interface Builder {
@@ -63,5 +77,21 @@
          * @return neutron config builder
          */
         Builder metadataProxySecret(String metadataProxySecret);
+
+        /**
+         * Returns neutron config with supplied NOVA metadata IP address.
+         *
+         * @param novaMetadataIp NOVA metadata IP address
+         * @return neutron config builder
+         */
+        Builder novaMetadataIp(String novaMetadataIp);
+
+        /**
+         * Returns neutron config with supplied NOVA metadata port number.
+         *
+         * @param novaMetadataPort NOVA metadata port number
+         * @return neutron config builder
+         */
+        Builder novaMetadataPort(Integer novaMetadataPort);
     }
 }
diff --git a/apps/openstacknode/api/src/test/java/org/onosproject/openstacknode/api/DefaultNeutronConfigTest.java b/apps/openstacknode/api/src/test/java/org/onosproject/openstacknode/api/DefaultNeutronConfigTest.java
index 63c3833..49369b7 100644
--- a/apps/openstacknode/api/src/test/java/org/onosproject/openstacknode/api/DefaultNeutronConfigTest.java
+++ b/apps/openstacknode/api/src/test/java/org/onosproject/openstacknode/api/DefaultNeutronConfigTest.java
@@ -33,6 +33,12 @@
     private static final String METADATA_PROXY_SECRET_1 = "onos";
     private static final String METADATA_PROXY_SECRET_2 = "cord";
 
+    private static final String NOVA_METADATA_IP_1 = "10.10.10.1";
+    private static final String NOVA_METADATA_IP_2 = "20.20.20.2";
+
+    private static final Integer NOVA_METADATA_PORT_1 = 8775;
+    private static final Integer NOVA_METADATA_PORT_2 = 8776;
+
     private NeutronConfig config1;
     private NeutronConfig sameAsConfig1;
     private NeutronConfig config2;
@@ -53,16 +59,22 @@
         config1 = DefaultNeutronConfig.builder()
                         .useMetadataProxy(USE_METADATA_PROXY_1)
                         .metadataProxySecret(METADATA_PROXY_SECRET_1)
+                        .novaMetadataIp(NOVA_METADATA_IP_1)
+                        .novaMetadataPort(NOVA_METADATA_PORT_1)
                         .build();
 
         sameAsConfig1 = DefaultNeutronConfig.builder()
                         .useMetadataProxy(USE_METADATA_PROXY_1)
                         .metadataProxySecret(METADATA_PROXY_SECRET_1)
+                        .novaMetadataIp(NOVA_METADATA_IP_1)
+                        .novaMetadataPort(NOVA_METADATA_PORT_1)
                         .build();
 
         config2 = DefaultNeutronConfig.builder()
                         .useMetadataProxy(USE_METADATA_PROXY_2)
                         .metadataProxySecret(METADATA_PROXY_SECRET_2)
+                        .novaMetadataIp(NOVA_METADATA_IP_2)
+                        .novaMetadataPort(NOVA_METADATA_PORT_2)
                         .build();
     }
 
@@ -85,5 +97,7 @@
 
         assertEquals(config.useMetadataProxy(), USE_METADATA_PROXY_1);
         assertEquals(config.metadataProxySecret(), METADATA_PROXY_SECRET_1);
+        assertEquals(config.novaMetadataIp(), NOVA_METADATA_IP_1);
+        assertEquals(config.novaMetadataPort(), NOVA_METADATA_PORT_1);
     }
 }
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/NeutronConfigCodec.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/NeutronConfigCodec.java
index 5acf180..48ca3ac 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/NeutronConfigCodec.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/NeutronConfigCodec.java
@@ -16,11 +16,12 @@
 
 package org.onosproject.openstacknode.codec;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.onosproject.codec.CodecContext;
 import org.onosproject.codec.JsonCodec;
-import org.onosproject.openstacknode.api.NeutronConfig;
 import org.onosproject.openstacknode.api.DefaultNeutronConfig;
+import org.onosproject.openstacknode.api.NeutronConfig;
 
 import static org.onlab.util.Tools.nullIsIllegal;
 
@@ -31,14 +32,26 @@
 
     private static final String USE_METADATA_PROXY = "useMetadataProxy";
     private static final String METADATA_PROXY_SECRET = "metadataProxySecret";
+    private static final String NOVA_METADATA_IP = "novaMetadataIp";
+    private static final String NOVA_METADATA_PORT = "novaMetadataPort";
 
-    private static final String MISSING_MESSAGE = " is required in OpenstackNode";
+    private static final String MISSING_MESSAGE = " is required in NeutronConfig";
 
     @Override
     public ObjectNode encode(NeutronConfig entity, CodecContext context) {
-        return context.mapper().createObjectNode()
-                .put(USE_METADATA_PROXY, entity.useMetadataProxy())
+        ObjectNode node = context.mapper().createObjectNode();
+        node.put(USE_METADATA_PROXY, entity.useMetadataProxy())
                 .put(METADATA_PROXY_SECRET, entity.metadataProxySecret());
+
+        if (entity.novaMetadataIp() != null) {
+            node.put(NOVA_METADATA_IP, entity.novaMetadataIp());
+        }
+
+        if (entity.novaMetadataPort() != null) {
+            node.put(NOVA_METADATA_PORT, entity.novaMetadataPort());
+        }
+
+        return node;
     }
 
     @Override
@@ -53,9 +66,22 @@
         String metadataProxySecret = nullIsIllegal(json.get(METADATA_PROXY_SECRET).asText(),
                 METADATA_PROXY_SECRET + MISSING_MESSAGE);
 
-        return DefaultNeutronConfig.builder()
+        NeutronConfig.Builder builder = DefaultNeutronConfig.builder()
                 .useMetadataProxy(useMetadataProxy)
-                .metadataProxySecret(metadataProxySecret)
-                .build();
+                .metadataProxySecret(metadataProxySecret);
+
+        JsonNode novaMetadataIp = json.get(NOVA_METADATA_IP);
+
+        if (novaMetadataIp != null) {
+            builder.novaMetadataIp(novaMetadataIp.asText());
+        }
+
+        JsonNode novaMetadataPort = json.get(NOVA_METADATA_PORT);
+
+        if (novaMetadataPort != null) {
+            builder.novaMetadataPort(novaMetadataPort.asInt());
+        }
+
+        return builder.build();
     }
 }
diff --git a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/NeutronConfigJsonMatcher.java b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/NeutronConfigJsonMatcher.java
index 185c7b6..de06f6b 100644
--- a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/NeutronConfigJsonMatcher.java
+++ b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/NeutronConfigJsonMatcher.java
@@ -29,6 +29,8 @@
 
     private static final String USE_METADATA_PROXY = "useMetadataProxy";
     private static final String METADATA_PROXY_SECRET = "metadataProxySecret";
+    private static final String NOVA_METADATA_IP = "novaMetadataIp";
+    private static final String NOVA_METADATA_PORT = "novaMetadataPort";
 
     private NeutronConfigJsonMatcher(NeutronConfig neutronConfig) {
         this.neutronConfig = neutronConfig;
@@ -57,6 +59,26 @@
             }
         }
 
+        // check NOVA metadata IP
+        JsonNode jsonNovaMetadataIp = jsonNode.get(NOVA_METADATA_IP);
+        if (jsonNovaMetadataIp != null) {
+            String novaMetadataIp = neutronConfig.novaMetadataIp();
+            if (!jsonNovaMetadataIp.asText().equals(novaMetadataIp)) {
+                description.appendText("novaMetadataIp was " + jsonNovaMetadataIp);
+                return false;
+            }
+        }
+
+        // check NOVA metadata port
+        JsonNode jsonNovaMetadataPort = jsonNode.get(NOVA_METADATA_PORT);
+        if (jsonNovaMetadataPort != null) {
+            Integer novaMetadataPort = neutronConfig.novaMetadataPort();
+            if (jsonNovaMetadataPort.asInt() != novaMetadataPort) {
+                description.appendText("novaMetadataPort was " + jsonNovaMetadataIp);
+                return false;
+            }
+        }
+
         return true;
     }
 
diff --git a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackNodeCodecTest.java b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackNodeCodecTest.java
index d97e47e..3788d01 100644
--- a/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackNodeCodecTest.java
+++ b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/codec/OpenstackNodeCodecTest.java
@@ -278,6 +278,8 @@
         NeutronConfig neutronConfig = DefaultNeutronConfig.builder()
                                             .useMetadataProxy(true)
                                             .metadataProxySecret("onos")
+                                            .novaMetadataIp("172.16.130.10")
+                                            .novaMetadataPort(8775)
                                             .build();
 
         OpenstackNode node = DefaultOpenstackNode.builder()
@@ -321,6 +323,8 @@
 
         assertThat(neutronConfig.useMetadataProxy(), is(true));
         assertThat(neutronConfig.metadataProxySecret(), is("onos"));
+        assertThat(neutronConfig.novaMetadataIp(), is("172.16.130.10"));
+        assertThat(neutronConfig.novaMetadataPort(), is(8775));
     }
 
     /**
diff --git a/apps/openstacknode/app/src/test/resources/org/onosproject/openstacknode/codec/OpenstackControllerNode.json b/apps/openstacknode/app/src/test/resources/org/onosproject/openstacknode/codec/OpenstackControllerNode.json
index 6da832d..f654c40 100644
--- a/apps/openstacknode/app/src/test/resources/org/onosproject/openstacknode/codec/OpenstackControllerNode.json
+++ b/apps/openstacknode/app/src/test/resources/org/onosproject/openstacknode/codec/OpenstackControllerNode.json
@@ -15,6 +15,8 @@
   },
   "neutronConfig": {
     "useMetadataProxy": true,
-    "metadataProxySecret": "onos"
+    "metadataProxySecret": "onos",
+    "novaMetadataIp": "172.16.130.10",
+    "novaMetadataPort": 8775
   }
 }
\ No newline at end of file
diff --git a/apps/openstacknode/network-cfg.json b/apps/openstacknode/network-cfg.json
index 19e3b22..b0f0660 100644
--- a/apps/openstacknode/network-cfg.json
+++ b/apps/openstacknode/network-cfg.json
@@ -95,7 +95,9 @@
       },
       "neutronConfig": {
         "useMetadataProxy": true,
-        "metadataProxySecret": "onos"
+        "metadataProxySecret": "nova",
+        "novaMetadataIp": "172.16.130.10",
+        "novaMetadataPort": 8775
       }
     },
     {
