diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/Constants.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/Constants.java
new file mode 100644
index 0000000..aefc940
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/Constants.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2016-present Open Networking Foundation
+ *
+ * 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.k8snetworking.api;
+
+/**
+ * Provides constants used in OpenStackSwitching.
+ */
+public final class Constants {
+
+    private Constants() {
+    }
+
+    public static final String K8S_NETWORKING_APP_ID = "org.onosproject.k8snetworking";
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/DefaultK8sNetwork.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/DefaultK8sNetwork.java
index 3ac1230..fef1b1c 100644
--- a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/DefaultK8sNetwork.java
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/DefaultK8sNetwork.java
@@ -29,6 +29,7 @@
     private static final int DEFAULT_MTU = 1500;
 
     private final String networkId;
+    private final String name;
     private final Type type;
     private final Integer mtu;
     private final String segmentId;
@@ -38,9 +39,10 @@
     private static final String NOT_NULL_MSG = "Network % cannot be null";
 
     // private constructor not intended for external invocation
-    private DefaultK8sNetwork(String networkId, Type type, Integer mtu,
+    private DefaultK8sNetwork(String networkId, String name, Type type, Integer mtu,
                               String segmentId, IpAddress gatewayIp, String cidr) {
         this.networkId = networkId;
+        this.name = name;
         this.type = type;
         this.mtu = mtu;
         this.segmentId = segmentId;
@@ -59,6 +61,11 @@
     }
 
     @Override
+    public String name() {
+        return name;
+    }
+
+    @Override
     public Integer mtu() {
         return mtu;
     }
@@ -88,6 +95,7 @@
         }
         DefaultK8sNetwork that = (DefaultK8sNetwork) o;
         return Objects.equal(networkId, that.networkId) &&
+                Objects.equal(name, that.name) &&
                 type == that.type &&
                 Objects.equal(mtu, that.mtu) &&
                 Objects.equal(segmentId, that.segmentId) &&
@@ -97,13 +105,14 @@
 
     @Override
     public int hashCode() {
-        return Objects.hashCode(networkId, type, mtu, segmentId, gatewayIp, cidr);
+        return Objects.hashCode(networkId, name, type, mtu, segmentId, gatewayIp, cidr);
     }
 
     @Override
     public String toString() {
         return MoreObjects.toStringHelper(this)
                 .add("networkId", networkId)
+                .add("name", name)
                 .add("type", type)
                 .add("mtu", mtu)
                 .add("segmentId", segmentId)
@@ -127,6 +136,7 @@
     public static final class Builder implements K8sNetwork.Builder {
 
         private String networkId;
+        private String name;
         private Type type;
         private Integer mtu;
         private String segmentId;
@@ -136,6 +146,7 @@
         @Override
         public K8sNetwork build() {
             checkArgument(networkId != null, NOT_NULL_MSG, "networkId");
+            checkArgument(name != null, NOT_NULL_MSG, "name");
             checkArgument(type != null, NOT_NULL_MSG, "type");
             checkArgument(segmentId != null, NOT_NULL_MSG, "segmentId");
             checkArgument(gatewayIp != null, NOT_NULL_MSG, "gatewayIp");
@@ -145,7 +156,7 @@
                 mtu = DEFAULT_MTU;
             }
 
-            return new DefaultK8sNetwork(networkId, type, mtu, segmentId, gatewayIp, cidr);
+            return new DefaultK8sNetwork(networkId, name, type, mtu, segmentId, gatewayIp, cidr);
         }
 
         @Override
@@ -155,6 +166,12 @@
         }
 
         @Override
+        public Builder name(String name) {
+            this.name = name;
+            return this;
+        }
+
+        @Override
         public Builder type(Type type) {
             this.type = type;
             return this;
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetwork.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetwork.java
index f971cb9..0ab833e 100644
--- a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetwork.java
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetwork.java
@@ -58,6 +58,13 @@
     Type type();
 
     /**
+     * Returns kubernetes network name.
+     *
+     * @return kubernetes network name
+     */
+    String name();
+
+    /**
      * Returns maximum transmission unit (MTU) value to address fragmentation.
      *
      * @return maximum transmission unit (MTU) value to address fragmentation
@@ -106,6 +113,14 @@
         Builder networkId(String networkId);
 
         /**
+         * Returns network builder with supplied network name.
+         *
+         * @param name network name
+         * @return network builder
+         */
+        Builder name(String name);
+
+        /**
          * Returns network builder with supplied network type.
          *
          * @param type network type
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkAdminService.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkAdminService.java
index e7f5c18..efa8b6f 100644
--- a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkAdminService.java
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkAdminService.java
@@ -38,9 +38,8 @@
      * Removes the network.
      *
      * @param networkId network identifier
-     * @return removed network; null if the network does not exist
      */
-    K8sNetwork removeNetwork(String networkId);
+    void removeNetwork(String networkId);
 
     /**
      * Creates a kubernetes port with the given information.
@@ -60,7 +59,11 @@
      * Removes the port.
      *
      * @param portId port identifier
-     * @return removed port; null if the port does not exist
      */
-    K8sPort removePort(String portId);
+    void removePort(String portId);
+
+    /**
+     * Clears the existing network and port states.
+     */
+    void clear();
 }
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkEvent.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkEvent.java
index ea097bc..a39beca 100644
--- a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkEvent.java
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkEvent.java
@@ -15,22 +15,17 @@
  */
 package org.onosproject.k8snetworking.api;
 
+import org.onlab.util.Tools;
 import org.onosproject.event.AbstractEvent;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
+
 /**
  * Describes kubernetes network service event.
  */
 public class K8sNetworkEvent extends AbstractEvent<K8sNetworkEvent.Type, K8sNetwork> {
 
-    /**
-     * Creates an event of a given type for the specified network.
-     *
-     * @param type kubernetes network event type
-     * @param subject kubernetes network
-     */
-    protected K8sNetworkEvent(Type type, K8sNetwork subject) {
-        super(type, subject);
-    }
+    private final K8sPort port;
 
     /**
      * Kubernetes network events.
@@ -51,5 +46,64 @@
          * Signifies that the kubernetes network is removed.
          */
         K8S_NETWORK_REMOVED,
+
+        /**
+         * Signifies that a new kubernetes port is created.
+         */
+        K8S_PORT_CREATED,
+
+        /**
+         * Signifies that the kubernetes port is updated.
+         */
+        K8S_PORT_UPDATED,
+
+        /**
+         * Signifies that the kubernetes port is removed.
+         */
+        K8S_PORT_REMOVED,
+    }
+
+    /**
+     * Creates an event of a given type for the specified network.
+     *
+     * @param type kubernetes network event type
+     * @param network kubernetes network
+     */
+    public K8sNetworkEvent(Type type, K8sNetwork network) {
+        super(type, network);
+        this.port = null;
+    }
+
+    /**
+     * Creates an event of a given type for the specified network and port.
+     *
+     * @param type kubernetes network event type
+     * @param network kubernetes network
+     * @param port kubernetes port
+     */
+    public K8sNetworkEvent(Type type, K8sNetwork network, K8sPort port) {
+        super(type, network);
+        this.port = port;
+    }
+
+    /**
+     * Returns the kubernetes port of the network event.
+     *
+     * @return kubernetes port; null if the event is not port specific
+     */
+    public K8sPort port() {
+        return port;
+    }
+
+    @Override
+    public String toString() {
+        if (port == null) {
+            return super.toString();
+        }
+        return toStringHelper(this)
+                .add("time", Tools.defaultOffsetDataTime(time()))
+                .add("port", port)
+                .add("network", subject())
+                .toString();
     }
 }
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkStore.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkStore.java
index a5255ff..e4c5ee3 100644
--- a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkStore.java
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkStore.java
@@ -62,7 +62,44 @@
     Set<K8sNetwork> networks();
 
     /**
-     * Removes all kubernetes networks.
+     * Creates a new kubernetes port.
+     *
+     * @param port kubernetes port
+     */
+    void createPort(K8sPort port);
+
+    /**
+     * Update the kubernetes port.
+     *
+     * @param port kubernetes port
+     */
+    void updatePort(K8sPort port);
+
+    /**
+     * Removes the kubernetes port with the given port identifier.
+     *
+     * @param portId port identifier
+     * @return port; null if not found
+     */
+    K8sPort removePort(String portId);
+
+    /**
+     * Returns all kubernetes ports.
+     *
+     * @return set of kubernetes ports
+     */
+    Set<K8sPort> ports();
+
+    /**
+     * Return the kubernetes port with the given port identifier.
+     *
+     * @param portId port identifier
+     * @return kubernetes port
+     */
+    K8sPort port(String portId);
+
+    /**
+     * Removes all kubernetes networks and ports.
      */
     void clear();
 }
diff --git a/apps/k8s-networking/api/src/test/java/org/onosproject/k8snetworking/api/DefaultK8sNetworkTest.java b/apps/k8s-networking/api/src/test/java/org/onosproject/k8snetworking/api/DefaultK8sNetworkTest.java
index 727b0ad..058bc03 100644
--- a/apps/k8s-networking/api/src/test/java/org/onosproject/k8snetworking/api/DefaultK8sNetworkTest.java
+++ b/apps/k8s-networking/api/src/test/java/org/onosproject/k8snetworking/api/DefaultK8sNetworkTest.java
@@ -30,6 +30,8 @@
 
     private static final String NETWORK_ID_1 = "network-1";
     private static final String NETWORK_ID_2 = "network-2";
+    private static final String NAME_1 = "network-1";
+    private static final String NAME_2 = "network-2";
     private static final K8sNetwork.Type TYPE_1 = K8sNetwork.Type.VXLAN;
     private static final K8sNetwork.Type TYPE_2 = K8sNetwork.Type.GENEVE;
     private static final Integer MTU_1 = 1500;
@@ -52,6 +54,7 @@
     public void setUp() {
         k8sNetwork1 = DefaultK8sNetwork.builder()
                 .networkId(NETWORK_ID_1)
+                .name(NAME_1)
                 .type(TYPE_1)
                 .mtu(MTU_1)
                 .segmentId(SEGMENT_ID_1)
@@ -61,6 +64,7 @@
 
         sameAsK8sNetwork1 = DefaultK8sNetwork.builder()
                 .networkId(NETWORK_ID_1)
+                .name(NAME_1)
                 .type(TYPE_1)
                 .mtu(MTU_1)
                 .segmentId(SEGMENT_ID_1)
@@ -70,6 +74,7 @@
 
         k8sNetwork2 = DefaultK8sNetwork.builder()
                 .networkId(NETWORK_ID_2)
+                .name(NAME_2)
                 .type(TYPE_2)
                 .mtu(MTU_2)
                 .segmentId(SEGMENT_ID_2)
@@ -104,6 +109,7 @@
         K8sNetwork k8sNetwork = k8sNetwork1;
 
         assertEquals(NETWORK_ID_1, k8sNetwork.networkId());
+        assertEquals(NAME_1, k8sNetwork.name());
         assertEquals(TYPE_1, k8sNetwork.type());
         assertEquals(MTU_1, k8sNetwork.mtu());
         assertEquals(SEGMENT_ID_1, k8sNetwork.segmentId());
