diff --git a/flow/flow.go b/flow/flow.go
index f1d6e10..7e47db9 100644
--- a/flow/flow.go
+++ b/flow/flow.go
@@ -17,20 +17,28 @@
 package flow
 
 import (
+	"math/rand"
+	"time"
+
+	"github.com/google/gopacket"
 	"github.com/opencord/voltha-bbsim/common/logger"
+	"github.com/opencord/voltha-bbsim/device"
 	openolt "github.com/opencord/voltha-protos/go/openolt"
 	log "github.com/sirupsen/logrus"
 )
 
-var flowManager FlowManager
+var flowManager Manager
 
-// FlowManager interface for common methods of controller
-type FlowManager interface {
+// Manager interface for common methods of controller
+type Manager interface {
 	AddFlow(flow *openolt.Flow) error
 	DeleteFlow(flow *openolt.Flow) error
+	DeleteAllFlows() error
 	PortUp(portID uint32) error
 	PortDown(portID uint32) error
 	GetFlow(onuID uint32) ([]*openolt.Flow, error)
+	InitializePacketInStream(s openolt.Openolt_EnableIndicationServer)
+	PacketOut(packet gopacket.Packet, s string, u uint32) error
 }
 
 // DefaultFlowController empty struct
@@ -45,6 +53,11 @@
 	return
 }
 
+// InitializePacketInStream initializes the stream to send packets towards VOLTHA
+func InitializePacketInStream(s openolt.Openolt_EnableIndicationServer) {
+	flowManager.InitializePacketInStream(s)
+}
+
 // AddFlow abstracts actual implementation of flow addition
 func AddFlow(flow *openolt.Flow) error {
 	return flowManager.AddFlow(flow)
@@ -55,6 +68,11 @@
 	return flowManager.DeleteFlow(flow)
 }
 
+// DeleteAllFlows abstracts actual implementation of flow deletion
+func DeleteAllFlows() error {
+	return flowManager.DeleteAllFlows()
+}
+
 // PortUp abstracts actual implementation of port up
 func PortUp(portID uint32) error {
 	return flowManager.PortUp(portID)
@@ -65,8 +83,43 @@
 	return flowManager.PortDown(portID)
 }
 
+// PacketOut abstracts actual implementation of sending packet out
+func PacketOut(packet gopacket.Packet, intfType string, intfID uint32) error {
+	return flowManager.PacketOut(packet, intfType, intfID)
+}
+
+// GetPortStats return stats for specified interface
+func GetPortStats(portStats *device.PortStats) *openolt.PortStatistics {
+
+	// increment current packet count by random number
+	pkts := portStats.Packets + uint64((rand.Intn(50)+1)*10)
+	portStats.Packets = pkts
+	logger.Info("Packet count %d", portStats.Packets)
+
+	// fill all other stats based on packet count
+	nextPortStats := &openolt.PortStatistics{
+		RxBytes:        pkts * 64,
+		RxPackets:      pkts,
+		RxUcastPackets: pkts * 40 / 100,
+		RxMcastPackets: pkts * 30 / 100,
+		RxBcastPackets: pkts * 30 / 100,
+		RxErrorPackets: 0,
+		TxBytes:        pkts * 64,
+		TxPackets:      pkts,
+		TxUcastPackets: pkts * 40 / 100,
+		TxMcastPackets: pkts * 30 / 100,
+		TxBcastPackets: pkts * 30 / 100,
+		TxErrorPackets: 0,
+		RxCrcErrors:    0,
+		BipErrors:      0,
+		Timestamp:      uint32(time.Now().Unix()),
+	}
+
+	return nextPortStats
+}
+
 // InitializeDefaultFlowController method to initialize default controller
-func InitializeDefaultFlowController() FlowManager {
+func InitializeDefaultFlowController() Manager {
 	logger.Debug("Default controller initialized")
 	return new(DefaultFlowController)
 }
@@ -90,6 +143,12 @@
 	return nil
 }
 
+// DeleteAllFlows implemented for DefaultFlowController
+func (fc *DefaultFlowController) DeleteAllFlows() error {
+	logger.Debug("DeleteAllFlows invoked")
+	return nil
+}
+
 // GetFlow implemented for DefaultFlowController
 func (fc *DefaultFlowController) GetFlow(onuID uint32) ([]*openolt.Flow, error) {
 	return nil, nil
@@ -106,3 +165,14 @@
 	logger.Debug("PortDown invoked %d", portID)
 	return nil
 }
+
+// InitializePacketInStream implemented for DefaultFlowController
+func (fc *DefaultFlowController) InitializePacketInStream(s openolt.Openolt_EnableIndicationServer) {
+	logger.Debug("Initialize Openolt stream")
+}
+
+// PacketOut implemented for DefaultFlowController
+func (fc *DefaultFlowController) PacketOut(pkt gopacket.Packet, intfType string, intfID uint32) error {
+	logger.Debug("PacketOut invoked intfType: %s, intfID: %d", intfType, intfID)
+	return nil
+}
