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
