diff --git a/pkg/mocks/mockKVClient.go b/pkg/mocks/mockKVClient.go
index fe6310b..78cbef6 100644
--- a/pkg/mocks/mockKVClient.go
+++ b/pkg/mocks/mockKVClient.go
@@ -52,6 +52,8 @@
 	FlowGroup = "flow_groups"
 	//FlowGroupCached flow_groups_cached/<flow_group_id>
 	FlowGroupCached = "flow_groups_cached"
+	//OnuPacketIn to extract gem port from packet-in
+	OnuPacketIn = "onu_packetin"
 )
 
 // MockKVClient mocks the AdapterProxy interface.
@@ -178,6 +180,10 @@
 			return kvstore.NewKVPair(key, str, "mock", 3000, 1), nil
 		}
 
+		if strings.Contains(key, OnuPacketIn) {
+			return getPacketInGemPort(key)
+		}
+
 		maps := make(map[string]*kvstore.KVPair)
 		maps[key] = &kvstore.KVPair{Key: key}
 		return maps[key], nil
@@ -185,6 +191,44 @@
 	return nil, errors.New("key didn't find")
 }
 
+//getPacketInGemPort returns the GEM port associated with the given key
+func getPacketInGemPort(key string) (*kvstore.KVPair, error) {
+	//parse interface, onu, uni, vlan, priority values
+	arr := getParamsFromPacketInKey(key)
+
+	if len(arr) < 5 {
+		return nil, errors.New("key didn't find")
+	}
+	if arr[0] == "1" && arr[1] == "1" && arr[2] == "3" && arr[3] == "0" && arr[4] == "0" {
+		str, _ := json.Marshal(3)
+		return kvstore.NewKVPair(key, str, "mock", 3000, 1), nil
+	}
+	if arr[0] == "2" && arr[1] == "2" && arr[2] == "4" && arr[3] == "549" && arr[4] == "0" {
+		str, _ := json.Marshal(4)
+		return kvstore.NewKVPair(key, str, "mock", 3000, 1), nil
+	}
+	if arr[0] == "1" && arr[1] == "2" && arr[2] == "2" && arr[3] == "48" && arr[4] == "7" {
+		str, _ := json.Marshal(2)
+		return kvstore.NewKVPair(key, str, "mock", 3000, 1), nil
+	}
+	return nil, errors.New("key didn't find")
+}
+
+//getParamsFromPacketInKey parse packetIn key that is in the format of "onu_packetin/{1,1,1,1,2}"
+func getParamsFromPacketInKey(key string) []string {
+	//return intfID, onuID, uniID, vlanID, priority
+	firstIndex := strings.Index(key, "{")
+	lastIndex := strings.Index(key, "}")
+	if firstIndex == -1 && lastIndex == -1 {
+		return []string{}
+	}
+	arr := strings.Split(key[firstIndex+1:lastIndex], ",")
+	if len(arr) < 5 {
+		return []string{}
+	}
+	return arr
+}
+
 // Put mock function implementation for KVClient
 func (kvclient *MockKVClient) Put(ctx context.Context, key string, value interface{}) error {
 	if key != "" {
