diff --git a/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/OpenstackNetwork.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/OpenstackNetwork.java
new file mode 100644
index 0000000..23a0674
--- /dev/null
+++ b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/OpenstackNetwork.java
@@ -0,0 +1,138 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.openstacknetworking;
+
+import java.util.Collection;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+
+/**
+ * Represents the network information given by Neutron.
+ */
+public final class OpenstackNetwork {
+
+    private String name;
+    private String tenantId;
+    private String segmentId;
+    private String id;
+    private NetworkType networkType;
+    private Collection<OpenstackSubnet> subnets;
+
+    public enum NetworkType {
+        /**
+         * Currently only VXLAN moded is supported.
+         */
+        VXLAN
+    }
+
+    /**
+     * Returns the builder object of the OpenstackNetwork class.
+     *
+     * @return OpenstackNetwork builder object
+     */
+    public static OpenstackNetwork.Builder builder() {
+        return new Builder();
+    }
+
+    private OpenstackNetwork(String name, String tenantId, String id, String sid,
+                             NetworkType type, Collection<OpenstackSubnet> subnets) {
+        this.name = checkNotNull(name);
+        this.tenantId = checkNotNull(tenantId);
+        this.segmentId = checkNotNull(sid);
+        this.id = checkNotNull(id);
+        this.networkType = type;
+        this.subnets = subnets;
+    }
+
+    public String name() {
+        return this.name;
+    }
+
+    public String tenantId() {
+        return this.tenantId;
+    }
+
+    public String id() {
+        return this.id;
+    }
+
+    public String segmentId() {
+        return this.segmentId;
+    }
+
+    public NetworkType networkType() {
+        return this.networkType;
+    }
+
+    public Collection<OpenstackSubnet> subnets() {
+        return this.subnets;
+    }
+
+    @Override
+    protected Object clone() throws CloneNotSupportedException {
+       return super.clone();
+    }
+
+    public static final class Builder {
+        private String name;
+        private String tenantId;
+        private String id;
+        private String sid;
+        private NetworkType networkType;
+        private Collection<OpenstackSubnet> subnets;
+
+        public Builder name(String name) {
+            this.name = name;
+
+            return this;
+        }
+
+        public Builder tenantId(String tenantId) {
+            this.tenantId = tenantId;
+
+            return this;
+        }
+
+        public Builder id(String id) {
+            this.id = id;
+
+            return this;
+        }
+
+        public Builder segmentId(String sid) {
+            this.sid = sid;
+
+            return this;
+        }
+
+        public Builder networkType(NetworkType type) {
+            this.networkType = type;
+
+            return this;
+        }
+
+        public Builder subnets(Collection<OpenstackSubnet> subnets) {
+            this.subnets = subnets;
+
+            return this;
+        }
+
+        public OpenstackNetwork build() {
+            return new OpenstackNetwork(name, tenantId, id, sid, networkType, subnets);
+        }
+    }
+}
