diff --git a/api/bbsim/bbsim.pb.go b/api/bbsim/bbsim.pb.go
index c827cd4..1a36b63 100644
--- a/api/bbsim/bbsim.pb.go
+++ b/api/bbsim/bbsim.pb.go
@@ -7,6 +7,7 @@
 	context "context"
 	fmt "fmt"
 	proto "github.com/golang/protobuf/proto"
+	openolt "github.com/opencord/voltha-protos/v2/go/openolt"
 	tech_profile "github.com/opencord/voltha-protos/v2/go/tech_profile"
 	grpc "google.golang.org/grpc"
 	codes "google.golang.org/grpc/codes"
@@ -930,6 +931,53 @@
 	return SubActionTypes_JOIN
 }
 
+type Flows struct {
+	FlowCount            uint32          `protobuf:"varint,1,opt,name=flow_count,json=flowCount,proto3" json:"flow_count,omitempty"`
+	Flows                []*openolt.Flow `protobuf:"bytes,2,rep,name=flows,proto3" json:"flows,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
+	XXX_unrecognized     []byte          `json:"-"`
+	XXX_sizecache        int32           `json:"-"`
+}
+
+func (m *Flows) Reset()         { *m = Flows{} }
+func (m *Flows) String() string { return proto.CompactTextString(m) }
+func (*Flows) ProtoMessage()    {}
+func (*Flows) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ef7750073d18011b, []int{15}
+}
+
+func (m *Flows) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Flows.Unmarshal(m, b)
+}
+func (m *Flows) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Flows.Marshal(b, m, deterministic)
+}
+func (m *Flows) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Flows.Merge(m, src)
+}
+func (m *Flows) XXX_Size() int {
+	return xxx_messageInfo_Flows.Size(m)
+}
+func (m *Flows) XXX_DiscardUnknown() {
+	xxx_messageInfo_Flows.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Flows proto.InternalMessageInfo
+
+func (m *Flows) GetFlowCount() uint32 {
+	if m != nil {
+		return m.FlowCount
+	}
+	return 0
+}
+
+func (m *Flows) GetFlows() []*openolt.Flow {
+	if m != nil {
+		return m.Flows
+	}
+	return nil
+}
+
 type Empty struct {
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
@@ -940,7 +988,7 @@
 func (m *Empty) String() string { return proto.CompactTextString(m) }
 func (*Empty) ProtoMessage()    {}
 func (*Empty) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{15}
+	return fileDescriptor_ef7750073d18011b, []int{16}
 }
 
 func (m *Empty) XXX_Unmarshal(b []byte) error {
@@ -979,90 +1027,95 @@
 	proto.RegisterType((*LogLevel)(nil), "bbsim.LogLevel")
 	proto.RegisterType((*Response)(nil), "bbsim.Response")
 	proto.RegisterType((*IgmpRequest)(nil), "bbsim.IgmpRequest")
+	proto.RegisterType((*Flows)(nil), "bbsim.Flows")
 	proto.RegisterType((*Empty)(nil), "bbsim.Empty")
 }
 
 func init() { proto.RegisterFile("api/bbsim/bbsim.proto", fileDescriptor_ef7750073d18011b) }
 
 var fileDescriptor_ef7750073d18011b = []byte{
-	// 1221 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x56, 0xcd, 0x6e, 0xdb, 0x46,
-	0x17, 0x95, 0x2c, 0xeb, 0xef, 0xca, 0x96, 0xe9, 0x49, 0xec, 0x08, 0xfe, 0x8c, 0x2f, 0x02, 0x91,
-	0x16, 0x4e, 0xd0, 0x3a, 0x8d, 0xdd, 0xa2, 0xe9, 0x92, 0x96, 0x68, 0x85, 0x8d, 0x3c, 0x14, 0x86,
-	0x94, 0x83, 0xac, 0x08, 0x4a, 0x1a, 0x5b, 0x04, 0x48, 0x51, 0x21, 0x47, 0x09, 0xf2, 0x00, 0x7d,
-	0x91, 0x3e, 0x51, 0x17, 0xed, 0xb6, 0xef, 0xd1, 0x5d, 0x31, 0xc3, 0x21, 0x45, 0x5a, 0x4e, 0x61,
-	0x74, 0xd3, 0x8d, 0x30, 0xf7, 0xcc, 0x39, 0x77, 0xee, 0xcf, 0xcc, 0xa5, 0xe0, 0xc0, 0x5d, 0x7a,
-	0x2f, 0x27, 0x93, 0xd8, 0x0b, 0x92, 0xdf, 0xd3, 0x65, 0x14, 0xb2, 0x10, 0x55, 0x85, 0x71, 0xd4,
-	0xfd, 0x18, 0xfa, 0x6c, 0xee, 0x3a, 0x02, 0x8c, 0x5f, 0x32, 0x3a, 0x9d, 0xf3, 0xf5, 0x8d, 0xe7,
-	0xd3, 0x84, 0xa8, 0xfe, 0x08, 0xf5, 0x91, 0x89, 0x47, 0x61, 0xc4, 0x50, 0x1b, 0xb6, 0x8c, 0x7e,
-	0xa7, 0xdc, 0x2d, 0x9f, 0x54, 0xc9, 0x96, 0xd1, 0x47, 0xc7, 0xd0, 0x34, 0x97, 0x34, 0xb2, 0x98,
-	0xcb, 0x68, 0x67, 0xab, 0x5b, 0x3e, 0x69, 0x92, 0x35, 0xc0, 0x85, 0x18, 0x1b, 0xff, 0x42, 0xf8,
-	0x47, 0x19, 0x2a, 0xa6, 0xbf, 0xa9, 0x52, 0x61, 0xc7, 0xa2, 0x91, 0xe7, 0xfa, 0x78, 0x15, 0x4c,
-	0x68, 0x24, 0x85, 0x05, 0xac, 0xe8, 0xb9, 0x72, 0xc7, 0x33, 0x7a, 0x06, 0xbb, 0xc6, 0x82, 0xd1,
-	0x68, 0xe1, 0xfa, 0x09, 0x63, 0x5b, 0x30, 0x8a, 0x20, 0x7a, 0x01, 0x0d, 0x19, 0x78, 0xdc, 0xa9,
-	0x76, 0x2b, 0x27, 0xad, 0xb3, 0xf6, 0x69, 0x52, 0x3a, 0x09, 0x93, 0x6c, 0x9f, 0x73, 0x65, 0x75,
-	0xe2, 0x4e, 0xad, 0xc0, 0x95, 0x30, 0xc9, 0xf6, 0xd5, 0xbf, 0x78, 0x5e, 0x78, 0xfc, 0x9f, 0xe5,
-	0x75, 0x0c, 0xcd, 0x51, 0xb8, 0xe0, 0xb1, 0x18, 0xfd, 0x4e, 0x55, 0x1c, 0xbf, 0x06, 0x10, 0x82,
-	0x6d, 0xcb, 0x76, 0x6f, 0x3b, 0x35, 0xb1, 0x21, 0xd6, 0x1c, 0xeb, 0x71, 0xac, 0x9e, 0x60, 0x7c,
-	0xcd, 0xbd, 0xbc, 0xf9, 0xa4, 0xcd, 0x66, 0x11, 0x8d, 0xe3, 0x4e, 0x23, 0x89, 0x24, 0x03, 0xd0,
-	0x21, 0xd4, 0xb8, 0x3f, 0x1c, 0x76, 0x9a, 0x42, 0x23, 0x2d, 0xd5, 0x85, 0xc7, 0x26, 0x1e, 0xdb,
-	0x91, 0x7b, 0x73, 0xe3, 0x4d, 0xad, 0xe9, 0x9c, 0xce, 0x56, 0x3e, 0x8d, 0x62, 0x64, 0xc0, 0x1e,
-	0xe3, 0xe0, 0x1a, 0x12, 0x85, 0x69, 0x9d, 0x3d, 0x3d, 0x2d, 0xdc, 0xc5, 0x0d, 0x25, 0xb9, 0xab,
-	0x53, 0x4f, 0x60, 0xdb, 0xc4, 0xe3, 0x18, 0x75, 0xa1, 0xea, 0x31, 0x1a, 0x70, 0x47, 0xbc, 0x1f,
-	0x20, 0xfb, 0x61, 0xe2, 0x31, 0x49, 0x36, 0xd4, 0xef, 0x00, 0xb8, 0x45, 0x3f, 0xac, 0x68, 0xcc,
-	0x36, 0xca, 0x5f, 0xde, 0x2c, 0xbf, 0xfa, 0x67, 0x05, 0x9a, 0x9a, 0xef, 0x46, 0x81, 0xfd, 0x79,
-	0x49, 0xd5, 0xdf, 0x2a, 0x50, 0xe5, 0x8b, 0x18, 0xd5, 0xa1, 0x32, 0x34, 0x2d, 0xa5, 0x84, 0xda,
-	0x00, 0xfd, 0xf7, 0x06, 0x1e, 0x38, 0x03, 0xcd, 0x1a, 0x29, 0x65, 0xb4, 0x0b, 0x4d, 0x13, 0x8f,
-	0x1d, 0x6d, 0xa8, 0x91, 0x2b, 0x65, 0x0b, 0x3d, 0x81, 0x47, 0xdc, 0xb4, 0x6c, 0x8d, 0xd8, 0xe3,
-	0x91, 0x73, 0xa9, 0x19, 0xc3, 0x31, 0xd1, 0x95, 0x0a, 0x3a, 0x04, 0x24, 0x36, 0x8c, 0x01, 0xd6,
-	0x86, 0x4e, 0x5f, 0x1f, 0x10, 0xad, 0xaf, 0x2b, 0xdb, 0xa9, 0xa0, 0x4f, 0x8c, 0x4b, 0xdb, 0x31,
-	0x2f, 0x9d, 0x77, 0x06, 0xee, 0x9b, 0xef, 0x94, 0x2a, 0x3a, 0x86, 0x0e, 0xdf, 0x18, 0x9a, 0x96,
-	0xc5, 0x71, 0xf3, 0xaa, 0x67, 0x38, 0xbd, 0x37, 0x1a, 0xc6, 0xfa, 0x50, 0xa9, 0x65, 0xe7, 0x08,
-	0x77, 0x56, 0x76, 0x4e, 0x1d, 0x3d, 0x87, 0xaf, 0xf8, 0x86, 0x4d, 0x34, 0x6c, 0x5d, 0x19, 0x96,
-	0x65, 0x98, 0xd8, 0x31, 0xb0, 0xad, 0x93, 0x4b, 0x9d, 0xe8, 0xb8, 0xa7, 0x3b, 0xef, 0x34, 0x82,
-	0x0d, 0x3c, 0x50, 0x1a, 0xe8, 0x08, 0x0e, 0x45, 0xe8, 0x3d, 0xdb, 0xb8, 0xd6, 0x6c, 0x4e, 0x4c,
-	0xdd, 0x34, 0x51, 0x47, 0xb4, 0xd1, 0x19, 0x11, 0xb3, 0xa7, 0x5b, 0x16, 0xcf, 0x57, 0x27, 0xc4,
-	0x24, 0x0a, 0xa0, 0x2e, 0x1c, 0xe7, 0xe3, 0x7a, 0xab, 0xbf, 0x77, 0xac, 0xf7, 0xb8, 0x97, 0x69,
-	0x5b, 0xe8, 0x00, 0xf6, 0x39, 0xc3, 0xb0, 0xc7, 0xce, 0xc8, 0xc4, 0xbc, 0x16, 0xb6, 0xa5, 0xec,
-	0xa0, 0x7d, 0xd8, 0xcd, 0x2a, 0xc5, 0xe5, 0xca, 0xee, 0x5d, 0xe8, 0x42, 0x69, 0xa7, 0x89, 0xa5,
-	0xd0, 0xa8, 0xe7, 0xf0, 0x2c, 0x94, 0xbd, 0xb4, 0x1e, 0x85, 0x8d, 0x9e, 0x8c, 0x4a, 0x41, 0x08,
-	0xda, 0xf9, 0xdd, 0x4b, 0x43, 0xd9, 0x47, 0x8f, 0x60, 0x2f, 0x8f, 0x69, 0x57, 0x86, 0x82, 0xd4,
-	0xd7, 0xd0, 0x16, 0xfd, 0x1d, 0xb9, 0x91, 0x1b, 0x50, 0x46, 0x23, 0xa4, 0x40, 0xe5, 0x2d, 0xfd,
-	0x2c, 0x6f, 0x03, 0x5f, 0xa2, 0xc7, 0x50, 0xbd, 0x76, 0xfd, 0x55, 0x3a, 0xb1, 0x12, 0x43, 0xfd,
-	0xb5, 0x2c, 0xfc, 0x09, 0x75, 0x7a, 0xa5, 0x8e, 0x73, 0xb7, 0x45, 0x7a, 0x58, 0x03, 0x0f, 0x7a,
-	0xef, 0x87, 0x50, 0xe3, 0x8f, 0x76, 0x15, 0xcb, 0xc7, 0x2e, 0x2d, 0xf4, 0x03, 0x40, 0x16, 0x62,
-	0xdc, 0xd9, 0x16, 0x37, 0xfc, 0x40, 0xde, 0xf0, 0x62, 0x02, 0x24, 0x47, 0x54, 0x3f, 0xc0, 0x9e,
-	0x39, 0xb4, 0x0b, 0x31, 0x76, 0xa1, 0x25, 0xc6, 0xc3, 0x8d, 0x3b, 0xa5, 0x72, 0x1c, 0xed, 0x92,
-	0x3c, 0x94, 0x4d, 0x15, 0x6e, 0x8a, 0x4c, 0xb6, 0x72, 0x53, 0x25, 0x05, 0xbf, 0x14, 0xa9, 0xfa,
-	0x4b, 0x19, 0x76, 0xaf, 0x69, 0x14, 0x7b, 0xe1, 0x42, 0xe6, 0xd4, 0x81, 0xfa, 0xc7, 0x04, 0x90,
-	0x35, 0x49, 0x4d, 0x5e, 0xaf, 0xc9, 0xca, 0xf3, 0x67, 0xb6, 0x17, 0x64, 0xdf, 0x83, 0x0c, 0x40,
-	0xff, 0x07, 0x98, 0x86, 0x41, 0xe0, 0xb1, 0x37, 0x6e, 0x3c, 0x97, 0xa7, 0xe4, 0x10, 0xae, 0xbe,
-	0xf5, 0x98, 0x0c, 0x22, 0x99, 0x7c, 0x6b, 0x40, 0x7d, 0x0d, 0x8d, 0x61, 0x78, 0x3b, 0xa4, 0x1f,
-	0xa9, 0xcf, 0x3b, 0xe8, 0xf3, 0x85, 0x3c, 0x3f, 0x31, 0x78, 0x06, 0x53, 0xd7, 0xf7, 0x65, 0x27,
-	0x1a, 0x44, 0x5a, 0xaa, 0x0e, 0x0d, 0x42, 0xe3, 0x65, 0xb8, 0x88, 0x29, 0x7a, 0x0a, 0xad, 0x58,
-	0xf8, 0x73, 0xa6, 0xe1, 0x8c, 0xca, 0xe1, 0x0d, 0x09, 0xd4, 0x0b, 0x67, 0x94, 0x27, 0x17, 0xd0,
-	0x38, 0x76, 0x6f, 0xd3, 0x04, 0x52, 0x53, 0x8d, 0xa1, 0x65, 0xdc, 0x06, 0xcb, 0xb4, 0xee, 0xcf,
-	0xa1, 0x66, 0x2e, 0x56, 0x84, 0x7e, 0x90, 0x83, 0x6e, 0x3f, 0x37, 0x9f, 0x12, 0x0a, 0x91, 0x04,
-	0xf4, 0x13, 0xec, 0x58, 0xab, 0x89, 0x36, 0x65, 0x5e, 0xb8, 0xb8, 0x76, 0x7d, 0xe1, 0xb8, 0x9d,
-	0xb5, 0x3b, 0xdb, 0x12, 0xa3, 0x88, 0x14, 0xa8, 0x6a, 0x1d, 0xaa, 0x7a, 0xb0, 0x64, 0x9f, 0x5f,
-	0xbc, 0x82, 0x76, 0x91, 0x88, 0x1a, 0xb0, 0xfd, 0xb3, 0x69, 0x60, 0xa5, 0x84, 0x9a, 0x50, 0x1d,
-	0xea, 0xda, 0xb5, 0xae, 0x94, 0x11, 0x40, 0x8d, 0x83, 0xd7, 0xe7, 0xca, 0xd6, 0xd9, 0xef, 0x35,
-	0xa8, 0x5e, 0x5c, 0x58, 0x5e, 0x80, 0x5e, 0x42, 0x5d, 0xb6, 0x10, 0xed, 0xc8, 0x53, 0x85, 0xd7,
-	0xa3, 0xc7, 0xd2, 0x2a, 0x34, 0x58, 0x2d, 0xa1, 0x67, 0x50, 0x1b, 0x50, 0xc6, 0x3f, 0xde, 0x45,
-	0x7e, 0x36, 0x84, 0x7d, 0xa6, 0x96, 0xd0, 0xb7, 0x00, 0xa3, 0xf0, 0x13, 0x8d, 0xc2, 0xc5, 0x26,
-	0x73, 0x4f, 0x5a, 0x69, 0xe5, 0xd5, 0x12, 0x3a, 0x85, 0x96, 0x35, 0x5f, 0xb1, 0x59, 0xf8, 0xe9,
-	0x61, 0xfc, 0x6f, 0xa0, 0x49, 0xe8, 0x24, 0x0c, 0xd9, 0x83, 0xd8, 0x5f, 0x43, 0x9d, 0x87, 0xcc,
-	0xbf, 0x1c, 0x45, 0x6e, 0x6b, 0xdd, 0x98, 0x58, 0x2d, 0xf1, 0xbe, 0x25, 0x3c, 0xb4, 0xd9, 0xb1,
-	0xa3, 0xdc, 0x47, 0x46, 0x2d, 0xa1, 0x57, 0xd0, 0xb2, 0x28, 0xcb, 0x6e, 0x5d, 0x7a, 0x68, 0x0a,
-	0x1c, 0xdd, 0x05, 0xd4, 0x12, 0x3a, 0xcf, 0xe5, 0x78, 0xff, 0x11, 0xf7, 0x84, 0x7e, 0xb6, 0xae,
-	0xe3, 0x83, 0x35, 0xdf, 0xc3, 0x0e, 0xa1, 0x31, 0x73, 0x23, 0xa6, 0xbb, 0xcb, 0xd0, 0x7f, 0xa0,
-	0xea, 0x1c, 0x5a, 0x52, 0xd5, 0x9f, 0x4f, 0x97, 0x0f, 0x14, 0x5d, 0xc0, 0x81, 0x45, 0x99, 0xb9,
-	0x58, 0x89, 0xb9, 0x63, 0x2c, 0x66, 0xde, 0xd4, 0xe5, 0xd7, 0x10, 0x1d, 0xae, 0xe5, 0xf9, 0x91,
-	0xf4, 0x0f, 0x3e, 0x7c, 0xf6, 0x45, 0x1f, 0xc5, 0xb1, 0x76, 0x9f, 0x8f, 0xd7, 0xb0, 0xd7, 0x9b,
-	0xbb, 0x8b, 0x5b, 0xca, 0x9f, 0x61, 0xf2, 0x57, 0x08, 0x49, 0x56, 0xee, 0x61, 0xde, 0xa7, 0x7c,
-	0x0b, 0x4f, 0x06, 0x22, 0x83, 0xcd, 0x3f, 0x2e, 0xf7, 0x94, 0xe0, 0x7f, 0x6b, 0x68, 0x83, 0xaf,
-	0x96, 0x26, 0x35, 0xf1, 0x7f, 0xfa, 0xfc, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0xb1, 0x13,
-	0x0e, 0x91, 0x0b, 0x00, 0x00,
+	// 1290 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x56, 0x4d, 0x6f, 0xdb, 0x46,
+	0x13, 0xd6, 0x87, 0xf5, 0x35, 0xb2, 0x64, 0x7a, 0x13, 0x3b, 0x82, 0xe3, 0xf7, 0x8d, 0xc0, 0xa6,
+	0x85, 0x13, 0x34, 0x4e, 0x63, 0xb7, 0x68, 0x7a, 0xa4, 0x25, 0x5a, 0x61, 0x2d, 0x93, 0xc2, 0x92,
+	0x72, 0x90, 0x13, 0x41, 0x49, 0x6b, 0x8b, 0x00, 0x45, 0x2a, 0xe4, 0x2a, 0x46, 0xce, 0x45, 0xff,
+	0x48, 0x7f, 0x51, 0x2f, 0xbd, 0xf6, 0x7f, 0xf4, 0x56, 0xec, 0x72, 0x49, 0x91, 0x96, 0x53, 0x18,
+	0xbd, 0xf4, 0x22, 0xec, 0x3c, 0xf3, 0xcc, 0xec, 0x7c, 0x71, 0xb4, 0xb0, 0xe7, 0x2c, 0xdd, 0xd7,
+	0x93, 0x49, 0xe4, 0x2e, 0xe2, 0xdf, 0xe3, 0x65, 0x18, 0xd0, 0x00, 0x55, 0xb8, 0x70, 0xf0, 0xf4,
+	0x53, 0xe0, 0xd1, 0xb9, 0x63, 0x73, 0x30, 0x7a, 0x1d, 0x2c, 0x89, 0x1f, 0x78, 0x34, 0xe6, 0x1c,
+	0x74, 0xf3, 0x4a, 0x4a, 0xa6, 0x73, 0x76, 0xbe, 0x76, 0x3d, 0x12, 0x33, 0xe4, 0x1f, 0xa1, 0x36,
+	0x32, 0xf4, 0x51, 0x10, 0x52, 0xd4, 0x86, 0x92, 0xd6, 0xef, 0x14, 0xbb, 0xc5, 0xa3, 0x0a, 0x2e,
+	0x69, 0x7d, 0x74, 0x08, 0x0d, 0x63, 0x49, 0x42, 0x93, 0x3a, 0x94, 0x74, 0x4a, 0xdd, 0xe2, 0x51,
+	0x03, 0xaf, 0x01, 0x66, 0xa8, 0xeb, 0xda, 0xbf, 0x30, 0xfc, 0xa3, 0x08, 0x65, 0xc3, 0xdb, 0xb4,
+	0x92, 0x61, 0xdb, 0x24, 0xa1, 0xeb, 0x78, 0xfa, 0x6a, 0x31, 0x21, 0xa1, 0x30, 0xcc, 0x61, 0x79,
+	0xcf, 0xe5, 0x3b, 0x9e, 0xd1, 0x73, 0x68, 0x69, 0x3e, 0x25, 0xa1, 0xef, 0x78, 0x31, 0x63, 0x8b,
+	0x33, 0xf2, 0x20, 0x7a, 0x09, 0x75, 0x11, 0x78, 0xd4, 0xa9, 0x74, 0xcb, 0x47, 0xcd, 0x93, 0xf6,
+	0x71, 0x5c, 0x57, 0x01, 0xe3, 0x54, 0xcf, 0xb8, 0xa2, 0x3a, 0x51, 0xa7, 0x9a, 0xe3, 0x0a, 0x18,
+	0xa7, 0x7a, 0xf9, 0x2f, 0x96, 0x97, 0x3e, 0xfe, 0xcf, 0xf2, 0x3a, 0x84, 0xc6, 0x28, 0xf0, 0x59,
+	0x2c, 0x5a, 0xbf, 0x53, 0xe1, 0xd7, 0xaf, 0x01, 0x84, 0x60, 0xcb, 0xb4, 0x9c, 0x9b, 0x4e, 0x95,
+	0x2b, 0xf8, 0x99, 0x61, 0x3d, 0x86, 0xd5, 0x62, 0x8c, 0x9d, 0x99, 0x97, 0x77, 0xb7, 0xca, 0x6c,
+	0x16, 0x92, 0x28, 0xea, 0xd4, 0xe3, 0x48, 0x52, 0x00, 0xed, 0x43, 0x95, 0xf9, 0xd3, 0x83, 0x4e,
+	0x83, 0xdb, 0x08, 0x49, 0x76, 0xe0, 0xb1, 0xa1, 0x8f, 0xad, 0xd0, 0xb9, 0xbe, 0x76, 0xa7, 0xe6,
+	0x74, 0x4e, 0x66, 0x2b, 0x8f, 0x84, 0x11, 0xd2, 0x60, 0x87, 0x32, 0x70, 0x0d, 0xf1, 0xc2, 0x34,
+	0x4f, 0x9e, 0x1d, 0xe7, 0x66, 0x71, 0xc3, 0x12, 0xdf, 0xb5, 0x93, 0x8f, 0x60, 0xcb, 0xd0, 0xc7,
+	0x11, 0xea, 0x42, 0xc5, 0xa5, 0x64, 0xc1, 0x1c, 0xb1, 0x7e, 0x80, 0xe8, 0x87, 0xa1, 0x8f, 0x71,
+	0xac, 0x90, 0xbf, 0x03, 0x60, 0x12, 0xf9, 0xb8, 0x22, 0x11, 0xdd, 0x28, 0x7f, 0x71, 0xb3, 0xfc,
+	0xf2, 0x9f, 0x65, 0x68, 0x28, 0x9e, 0x13, 0x2e, 0xac, 0xcf, 0x4b, 0x22, 0xff, 0x5e, 0x86, 0x0a,
+	0x3b, 0x44, 0xa8, 0x06, 0xe5, 0xa1, 0x61, 0x4a, 0x05, 0xd4, 0x06, 0xe8, 0x7f, 0xd0, 0xf4, 0x81,
+	0x3d, 0x50, 0xcc, 0x91, 0x54, 0x44, 0x2d, 0x68, 0x18, 0xfa, 0xd8, 0x56, 0x86, 0x0a, 0xbe, 0x94,
+	0x4a, 0xe8, 0x09, 0x3c, 0x62, 0xa2, 0x69, 0x29, 0xd8, 0x1a, 0x8f, 0xec, 0x73, 0x45, 0x1b, 0x8e,
+	0xb1, 0x2a, 0x95, 0xd1, 0x3e, 0x20, 0xae, 0xd0, 0x06, 0xba, 0x32, 0xb4, 0xfb, 0xea, 0x00, 0x2b,
+	0x7d, 0x55, 0xda, 0x4a, 0x0c, 0xfa, 0x58, 0x3b, 0xb7, 0x6c, 0xe3, 0xdc, 0x7e, 0xaf, 0xe9, 0x7d,
+	0xe3, 0xbd, 0x54, 0x41, 0x87, 0xd0, 0x61, 0x8a, 0xa1, 0x61, 0x9a, 0x0c, 0x37, 0x2e, 0x7b, 0x9a,
+	0xdd, 0x7b, 0xa7, 0xe8, 0xba, 0x3a, 0x94, 0xaa, 0xe9, 0x3d, 0xdc, 0x9d, 0x99, 0xde, 0x53, 0x43,
+	0x2f, 0xe0, 0x6b, 0xa6, 0xb0, 0xb0, 0xa2, 0x9b, 0x97, 0x9a, 0x69, 0x6a, 0x86, 0x6e, 0x6b, 0xba,
+	0xa5, 0xe2, 0x73, 0x15, 0xab, 0x7a, 0x4f, 0xb5, 0xdf, 0x2b, 0x58, 0xd7, 0xf4, 0x81, 0x54, 0x47,
+	0x07, 0xb0, 0xcf, 0x43, 0xef, 0x59, 0xda, 0x95, 0x62, 0x31, 0x62, 0xe2, 0xa6, 0x81, 0x3a, 0xbc,
+	0x8d, 0xf6, 0x08, 0x1b, 0x3d, 0xd5, 0x34, 0x59, 0xbe, 0x2a, 0xc6, 0x06, 0x96, 0x00, 0x75, 0xe1,
+	0x30, 0x1b, 0xd7, 0x85, 0xfa, 0xc1, 0x36, 0x3f, 0xe8, 0xbd, 0xd4, 0xb6, 0x89, 0xf6, 0x60, 0x97,
+	0x31, 0x34, 0x6b, 0x6c, 0x8f, 0x0c, 0x9d, 0xd5, 0xc2, 0x32, 0xa5, 0x6d, 0xb4, 0x0b, 0xad, 0xb4,
+	0x52, 0xcc, 0x5c, 0x6a, 0xdd, 0x85, 0xce, 0xa4, 0x76, 0x92, 0x58, 0x02, 0x8d, 0x7a, 0x36, 0xcb,
+	0x42, 0xda, 0x49, 0xea, 0x91, 0x53, 0xf4, 0x44, 0x54, 0x12, 0x42, 0xd0, 0xce, 0x6a, 0xcf, 0x35,
+	0x69, 0x17, 0x3d, 0x82, 0x9d, 0x2c, 0xa6, 0x5c, 0x6a, 0x12, 0x92, 0xdf, 0x42, 0x9b, 0xf7, 0x77,
+	0xe4, 0x84, 0xce, 0x82, 0x50, 0x12, 0x22, 0x09, 0xca, 0x17, 0xe4, 0xb3, 0x98, 0x06, 0x76, 0x44,
+	0x8f, 0xa1, 0x72, 0xe5, 0x78, 0xab, 0x64, 0x63, 0xc5, 0x82, 0xfc, 0x5b, 0x91, 0xfb, 0xe3, 0xd6,
+	0xc9, 0x48, 0x1d, 0x66, 0xa6, 0x45, 0x78, 0x58, 0x03, 0x0f, 0xfa, 0xde, 0xf7, 0xa1, 0xca, 0x3e,
+	0xda, 0x55, 0x24, 0x3e, 0x76, 0x21, 0xa1, 0x1f, 0x00, 0xd2, 0x10, 0xa3, 0xce, 0x16, 0x9f, 0xf0,
+	0x3d, 0x31, 0xe1, 0xf9, 0x04, 0x70, 0x86, 0x28, 0x7f, 0x84, 0x1d, 0x63, 0x68, 0xe5, 0x62, 0xec,
+	0x42, 0x93, 0xaf, 0x87, 0x6b, 0x67, 0x4a, 0xc4, 0x3a, 0x6a, 0xe1, 0x2c, 0x94, 0x6e, 0x15, 0x26,
+	0xf2, 0x4c, 0x4a, 0x99, 0xad, 0x92, 0x80, 0x5f, 0x8a, 0x54, 0xfe, 0xb5, 0x08, 0xad, 0x2b, 0x12,
+	0x46, 0x6e, 0xe0, 0x8b, 0x9c, 0x3a, 0x50, 0xfb, 0x14, 0x03, 0xa2, 0x26, 0x89, 0xc8, 0xea, 0x35,
+	0x59, 0xb9, 0xde, 0xcc, 0x72, 0x17, 0xe9, 0xff, 0x41, 0x0a, 0xa0, 0xff, 0x03, 0x4c, 0x83, 0xc5,
+	0xc2, 0xa5, 0xef, 0x9c, 0x68, 0x2e, 0x6e, 0xc9, 0x20, 0xcc, 0xfa, 0xc6, 0xa5, 0x22, 0x88, 0x78,
+	0xf3, 0xad, 0x01, 0xf9, 0x2d, 0xd4, 0x87, 0xc1, 0xcd, 0x90, 0x7c, 0x22, 0x1e, 0xeb, 0xa0, 0xc7,
+	0x0e, 0xe2, 0xfe, 0x58, 0x60, 0x19, 0x4c, 0x1d, 0xcf, 0x13, 0x9d, 0xa8, 0x63, 0x21, 0xc9, 0x2a,
+	0xd4, 0x31, 0x89, 0x96, 0x81, 0x1f, 0x11, 0xf4, 0x0c, 0x9a, 0x11, 0xf7, 0x67, 0x4f, 0x83, 0x19,
+	0x11, 0xcb, 0x1b, 0x62, 0xa8, 0x17, 0xcc, 0x08, 0x4b, 0x6e, 0x41, 0xa2, 0xc8, 0xb9, 0x49, 0x12,
+	0x48, 0x44, 0x39, 0x82, 0xa6, 0x76, 0xb3, 0x58, 0x26, 0x75, 0x7f, 0x01, 0x55, 0xc3, 0x5f, 0x61,
+	0xf2, 0x51, 0x2c, 0xba, 0xdd, 0xcc, 0x7e, 0x8a, 0x29, 0x58, 0x10, 0xd0, 0x4f, 0xb0, 0x6d, 0xae,
+	0x26, 0xca, 0x94, 0xba, 0x81, 0x7f, 0xe5, 0x78, 0xdc, 0x71, 0x3b, 0x6d, 0x77, 0xaa, 0xe2, 0xab,
+	0x08, 0xe7, 0xa8, 0xf2, 0x05, 0x54, 0xce, 0xbd, 0xe0, 0x36, 0x42, 0xff, 0x03, 0xb8, 0xf6, 0x82,
+	0x5b, 0x7b, 0x1a, 0xac, 0x7c, 0x2a, 0xba, 0xdc, 0x60, 0x48, 0x8f, 0x01, 0xe8, 0x2b, 0xa8, 0x30,
+	0x21, 0xea, 0x94, 0xf8, 0x28, 0xb5, 0x8e, 0x93, 0xe7, 0x01, 0xb3, 0xc6, 0xb1, 0x4e, 0xae, 0x41,
+	0x45, 0x5d, 0x2c, 0xe9, 0xe7, 0x97, 0x6f, 0xa0, 0x9d, 0xbf, 0x15, 0xd5, 0x61, 0xeb, 0x67, 0x43,
+	0xd3, 0xa5, 0x02, 0x6a, 0x40, 0x65, 0xa8, 0x2a, 0x57, 0xaa, 0x54, 0x44, 0x00, 0x55, 0x06, 0x5e,
+	0x9d, 0x4a, 0xa5, 0x93, 0x5f, 0x6a, 0x50, 0x39, 0x3b, 0x33, 0xdd, 0x05, 0x7a, 0x0d, 0x35, 0x31,
+	0x0f, 0x68, 0x5b, 0xa4, 0xc0, 0xbd, 0x1e, 0x3c, 0x16, 0x52, 0x6e, 0x5a, 0xe4, 0x02, 0x7a, 0x0e,
+	0xd5, 0x01, 0xa1, 0xec, 0x25, 0x90, 0xe7, 0xa7, 0x1b, 0xdd, 0xa3, 0x72, 0x01, 0xbd, 0x02, 0x18,
+	0x05, 0xb7, 0x24, 0x0c, 0xfc, 0x4d, 0xe6, 0x8e, 0x90, 0x92, 0x36, 0xca, 0x05, 0x74, 0x0c, 0x4d,
+	0x73, 0xbe, 0xa2, 0xb3, 0xe0, 0xf6, 0x61, 0xfc, 0x6f, 0xa1, 0x81, 0xc9, 0x24, 0x08, 0xe8, 0x83,
+	0xd8, 0xdf, 0x40, 0x8d, 0x85, 0xcc, 0xfe, 0x86, 0xf2, 0xdc, 0xe6, 0xba, 0xcb, 0x91, 0x5c, 0x60,
+	0x43, 0x10, 0xf3, 0xd0, 0x66, 0xfb, 0x0f, 0x32, 0xff, 0x58, 0x72, 0x01, 0xbd, 0x81, 0xa6, 0x49,
+	0x68, 0x3a, 0xc2, 0xc9, 0xa5, 0x09, 0x70, 0x70, 0x17, 0x90, 0x0b, 0xe8, 0x34, 0x93, 0xe3, 0xfd,
+	0x57, 0xdc, 0x13, 0xfa, 0xc9, 0xba, 0x8e, 0x0f, 0xb6, 0xf9, 0x1e, 0xb6, 0x31, 0x89, 0xa8, 0x13,
+	0x52, 0xd5, 0x59, 0x06, 0xde, 0x03, 0xad, 0x4e, 0xa1, 0x29, 0xac, 0xfa, 0xf3, 0xe9, 0xf2, 0x81,
+	0x46, 0x67, 0xb0, 0x67, 0x12, 0x6a, 0xf8, 0x2b, 0xbe, 0xc4, 0x34, 0x7f, 0xe6, 0x4e, 0x1d, 0x36,
+	0x86, 0x68, 0x7f, 0x6d, 0x9e, 0xdd, 0x6f, 0xff, 0xe0, 0xc3, 0xa3, 0x5f, 0xf4, 0x91, 0xdf, 0x91,
+	0xf7, 0xf9, 0x78, 0x05, 0xf5, 0x01, 0xa1, 0xf1, 0xb7, 0x75, 0x4f, 0xe4, 0x49, 0xd7, 0x39, 0x41,
+	0x2e, 0xa0, 0xb7, 0xb0, 0xd3, 0x9b, 0x3b, 0xfe, 0x0d, 0x61, 0x2b, 0x20, 0x7e, 0x86, 0x21, 0x41,
+	0xc9, 0x2c, 0x85, 0xfb, 0x2e, 0xba, 0x80, 0x27, 0x03, 0x9e, 0xf0, 0xe6, 0xa3, 0xe9, 0x9e, 0x7b,
+	0x9f, 0xae, 0xa1, 0x0d, 0xbe, 0x5c, 0x98, 0x54, 0xf9, 0x5b, 0xfe, 0xf4, 0xef, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0x54, 0xe5, 0xac, 0xa2, 0x2a, 0x0c, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -1091,6 +1144,7 @@
 	RestartDhcp(ctx context.Context, in *ONURequest, opts ...grpc.CallOption) (*Response, error)
 	SetOnuAlarmIndication(ctx context.Context, in *ONUAlarmRequest, opts ...grpc.CallOption) (*Response, error)
 	SetOltAlarmIndication(ctx context.Context, in *OLTAlarmRequest, opts ...grpc.CallOption) (*Response, error)
+	GetFlows(ctx context.Context, in *ONURequest, opts ...grpc.CallOption) (*Flows, error)
 	ChangeIgmpState(ctx context.Context, in *IgmpRequest, opts ...grpc.CallOption) (*Response, error)
 	GetOnuTrafficSchedulers(ctx context.Context, in *ONURequest, opts ...grpc.CallOption) (*ONUTrafficSchedulers, error)
 }
@@ -1229,6 +1283,15 @@
 	return out, nil
 }
 
+func (c *bBSimClient) GetFlows(ctx context.Context, in *ONURequest, opts ...grpc.CallOption) (*Flows, error) {
+	out := new(Flows)
+	err := c.cc.Invoke(ctx, "/bbsim.BBSim/GetFlows", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 func (c *bBSimClient) ChangeIgmpState(ctx context.Context, in *IgmpRequest, opts ...grpc.CallOption) (*Response, error) {
 	out := new(Response)
 	err := c.cc.Invoke(ctx, "/bbsim.BBSim/ChangeIgmpState", in, out, opts...)
@@ -1263,6 +1326,7 @@
 	RestartDhcp(context.Context, *ONURequest) (*Response, error)
 	SetOnuAlarmIndication(context.Context, *ONUAlarmRequest) (*Response, error)
 	SetOltAlarmIndication(context.Context, *OLTAlarmRequest) (*Response, error)
+	GetFlows(context.Context, *ONURequest) (*Flows, error)
 	ChangeIgmpState(context.Context, *IgmpRequest) (*Response, error)
 	GetOnuTrafficSchedulers(context.Context, *ONURequest) (*ONUTrafficSchedulers, error)
 }
@@ -1313,6 +1377,9 @@
 func (*UnimplementedBBSimServer) SetOltAlarmIndication(ctx context.Context, req *OLTAlarmRequest) (*Response, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method SetOltAlarmIndication not implemented")
 }
+func (*UnimplementedBBSimServer) GetFlows(ctx context.Context, req *ONURequest) (*Flows, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetFlows not implemented")
+}
 func (*UnimplementedBBSimServer) ChangeIgmpState(ctx context.Context, req *IgmpRequest) (*Response, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method ChangeIgmpState not implemented")
 }
@@ -1576,6 +1643,24 @@
 	return interceptor(ctx, in, info, handler)
 }
 
+func _BBSim_GetFlows_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ONURequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BBSimServer).GetFlows(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/bbsim.BBSim/GetFlows",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BBSimServer).GetFlows(ctx, req.(*ONURequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 func _BBSim_ChangeIgmpState_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 	in := new(IgmpRequest)
 	if err := dec(in); err != nil {
@@ -1673,6 +1758,10 @@
 			Handler:    _BBSim_SetOltAlarmIndication_Handler,
 		},
 		{
+			MethodName: "GetFlows",
+			Handler:    _BBSim_GetFlows_Handler,
+		},
+		{
 			MethodName: "ChangeIgmpState",
 			Handler:    _BBSim_ChangeIgmpState_Handler,
 		},
diff --git a/api/bbsim/bbsim.pb.gw.go b/api/bbsim/bbsim.pb.gw.go
index d15e5a7..f02b22f 100644
--- a/api/bbsim/bbsim.pb.gw.go
+++ b/api/bbsim/bbsim.pb.gw.go
@@ -476,6 +476,93 @@
 
 }
 
+func request_BBSim_GetFlows_0(ctx context.Context, marshaler runtime.Marshaler, client BBSimClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq ONURequest
+	var metadata runtime.ServerMetadata
+
+	var (
+		val string
+		ok  bool
+		err error
+		_   = err
+	)
+
+	val, ok = pathParams["SerialNumber"]
+	if !ok {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "SerialNumber")
+	}
+
+	protoReq.SerialNumber, err = runtime.String(val)
+
+	if err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "SerialNumber", err)
+	}
+
+	msg, err := client.GetFlows(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+	return msg, metadata, err
+
+}
+
+func local_request_BBSim_GetFlows_0(ctx context.Context, marshaler runtime.Marshaler, server BBSimServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq ONURequest
+	var metadata runtime.ServerMetadata
+
+	var (
+		val string
+		ok  bool
+		err error
+		_   = err
+	)
+
+	val, ok = pathParams["SerialNumber"]
+	if !ok {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "SerialNumber")
+	}
+
+	protoReq.SerialNumber, err = runtime.String(val)
+
+	if err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "SerialNumber", err)
+	}
+
+	msg, err := server.GetFlows(ctx, &protoReq)
+	return msg, metadata, err
+
+}
+
+var (
+	filter_BBSim_GetFlows_1 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
+)
+
+func request_BBSim_GetFlows_1(ctx context.Context, marshaler runtime.Marshaler, client BBSimClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq ONURequest
+	var metadata runtime.ServerMetadata
+
+	if err := req.ParseForm(); err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+	if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BBSim_GetFlows_1); err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+
+	msg, err := client.GetFlows(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+	return msg, metadata, err
+
+}
+
+func local_request_BBSim_GetFlows_1(ctx context.Context, marshaler runtime.Marshaler, server BBSimServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq ONURequest
+	var metadata runtime.ServerMetadata
+
+	if err := runtime.PopulateQueryParameters(&protoReq, req.URL.Query(), filter_BBSim_GetFlows_1); err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
+	}
+
+	msg, err := server.GetFlows(ctx, &protoReq)
+	return msg, metadata, err
+
+}
+
 func request_BBSim_GetOnuTrafficSchedulers_0(ctx context.Context, marshaler runtime.Marshaler, client BBSimClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
 	var protoReq ONURequest
 	var metadata runtime.ServerMetadata
@@ -715,6 +802,46 @@
 
 	})
 
+	mux.Handle("GET", pattern_BBSim_GetFlows_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := local_request_BBSim_GetFlows_0(rctx, inboundMarshaler, server, req, pathParams)
+		ctx = runtime.NewServerMetadataContext(ctx, md)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_BBSim_GetFlows_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	mux.Handle("GET", pattern_BBSim_GetFlows_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := local_request_BBSim_GetFlows_1(rctx, inboundMarshaler, server, req, pathParams)
+		ctx = runtime.NewServerMetadataContext(ctx, md)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_BBSim_GetFlows_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
 	mux.Handle("GET", pattern_BBSim_GetOnuTrafficSchedulers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
 		ctx, cancel := context.WithCancel(req.Context())
 		defer cancel()
@@ -956,6 +1083,46 @@
 
 	})
 
+	mux.Handle("GET", pattern_BBSim_GetFlows_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		rctx, err := runtime.AnnotateContext(ctx, mux, req)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := request_BBSim_GetFlows_0(rctx, inboundMarshaler, client, req, pathParams)
+		ctx = runtime.NewServerMetadataContext(ctx, md)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_BBSim_GetFlows_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	mux.Handle("GET", pattern_BBSim_GetFlows_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
+		ctx, cancel := context.WithCancel(req.Context())
+		defer cancel()
+		inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
+		rctx, err := runtime.AnnotateContext(ctx, mux, req)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+		resp, md, err := request_BBSim_GetFlows_1(rctx, inboundMarshaler, client, req, pathParams)
+		ctx = runtime.NewServerMetadataContext(ctx, md)
+		if err != nil {
+			runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
+			return
+		}
+
+		forward_BBSim_GetFlows_1(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
 	mux.Handle("GET", pattern_BBSim_GetOnuTrafficSchedulers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
 		ctx, cancel := context.WithCancel(req.Context())
 		defer cancel()
@@ -998,6 +1165,10 @@
 
 	pattern_BBSim_SetOltAlarmIndication_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 2, 5, 2, 6, 1, 0, 4, 1, 5, 7}, []string{"v1", "olt", "ports", "InterfaceType", "InterfaceID", "alarms", "los", "Status"}, "", runtime.AssumeColonVerbOpt(true)))
 
+	pattern_BBSim_GetFlows_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"v1", "olt", "onus", "SerialNumber", "flows"}, "", runtime.AssumeColonVerbOpt(true)))
+
+	pattern_BBSim_GetFlows_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "olt", "flows"}, "", runtime.AssumeColonVerbOpt(true)))
+
 	pattern_BBSim_GetOnuTrafficSchedulers_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"v1", "olt", "onus", "SerialNumber", "trafficschedulers"}, "", runtime.AssumeColonVerbOpt(true)))
 )
 
@@ -1020,5 +1191,9 @@
 
 	forward_BBSim_SetOltAlarmIndication_0 = runtime.ForwardResponseMessage
 
+	forward_BBSim_GetFlows_0 = runtime.ForwardResponseMessage
+
+	forward_BBSim_GetFlows_1 = runtime.ForwardResponseMessage
+
 	forward_BBSim_GetOnuTrafficSchedulers_0 = runtime.ForwardResponseMessage
 )
diff --git a/api/bbsim/bbsim.proto b/api/bbsim/bbsim.proto
index 57e1de7..d862c54 100644
--- a/api/bbsim/bbsim.proto
+++ b/api/bbsim/bbsim.proto
@@ -15,6 +15,7 @@
 syntax = "proto3";
 package bbsim;
 
+import "voltha_protos/openolt.proto";
 import "voltha_protos/tech_profile.proto";
 // Models
 
@@ -146,6 +147,11 @@
 	SubActionTypes SubActionVal = 2;
 }
 
+message Flows {
+    uint32 flow_count = 1;
+    repeated openolt.Flow flows = 2;
+}
+
 message Empty {}
 
 service BBSim {
@@ -163,6 +169,7 @@
     rpc RestartDhcp (ONURequest) returns (Response) {}
     rpc SetOnuAlarmIndication (ONUAlarmRequest) returns (Response) {}
     rpc SetOltAlarmIndication (OLTAlarmRequest) returns (Response) {}
+    rpc GetFlows(ONURequest) returns(Flows) {} 
     rpc ChangeIgmpState (IgmpRequest) returns (Response) {}
     rpc GetOnuTrafficSchedulers (ONURequest) returns (ONUTrafficSchedulers) {}
 }
diff --git a/api/bbsim/bbsim.yaml b/api/bbsim/bbsim.yaml
index 1d69552..0c23240 100644
--- a/api/bbsim/bbsim.yaml
+++ b/api/bbsim/bbsim.yaml
@@ -31,6 +31,10 @@
     delete: "/v1/olt/onus/{SerialNumber}"
   - selector: bbsim.BBSim.PoweronONU
     post: "/v1/olt/onus/{SerialNumber}"
+  - selector: bbsim.BBSim.GetFlows
+    get: "/v1/olt/onus/{SerialNumber}/flows"
+    additional_bindings:
+      - get: "/v1/olt/flows"
   - selector: bbsim.BBSim.SetOnuAlarmIndication
     post: "/v1/olt/onus/{SerialNumber}/alarms/{AlarmType}/{Status}"
   - selector: bbsim.BBSim.GetOnuTrafficSchedulers
diff --git a/internal/bbsim/api/onus_handler.go b/internal/bbsim/api/onus_handler.go
index b9c697c..975b426 100644
--- a/internal/bbsim/api/onus_handler.go
+++ b/internal/bbsim/api/onus_handler.go
@@ -295,6 +295,38 @@
 	return res, nil
 }
 
+// GetFlows for OLT/ONUs
+func (s BBSimServer) GetFlows(ctx context.Context, req *bbsim.ONURequest) (*bbsim.Flows, error) {
+	logger.WithFields(log.Fields{
+		"OnuSn": req.SerialNumber,
+	}).Info("Received GetFlows request")
+
+	olt := devices.GetOLT()
+	res := &bbsim.Flows{}
+
+	if req.SerialNumber == "" {
+		for flowKey := range olt.Flows {
+			flow := olt.Flows[flowKey]
+			res.Flows = append(res.Flows, &flow)
+		}
+		res.FlowCount = uint32(len(olt.Flows))
+	} else {
+		onu, err := olt.FindOnuBySn(req.SerialNumber)
+		if err != nil {
+			logger.WithFields(log.Fields{
+				"OnuSn": req.SerialNumber,
+			}).Error("Can't get ONU in GetFlows request")
+			return nil, err
+		}
+		for _, flowKey := range onu.Flows {
+			flow := olt.Flows[flowKey]
+			res.Flows = append(res.Flows, &flow)
+		}
+		res.FlowCount = uint32(len(onu.Flows))
+	}
+	return res, nil
+}
+
 func (s BBSimServer) GetOnuTrafficSchedulers(ctx context.Context, req *bbsim.ONURequest) (*bbsim.ONUTrafficSchedulers, error) {
 	olt := devices.GetOLT()
 	ts := bbsim.ONUTrafficSchedulers{}
diff --git a/internal/bbsim/devices/olt.go b/internal/bbsim/devices/olt.go
index 955d2ad..d5ba84f 100644
--- a/internal/bbsim/devices/olt.go
+++ b/internal/bbsim/devices/olt.go
@@ -36,7 +36,9 @@
 	tech_profile "github.com/opencord/voltha-protos/v2/go/tech_profile"
 	log "github.com/sirupsen/logrus"
 	"google.golang.org/grpc"
+	"google.golang.org/grpc/codes"
 	"google.golang.org/grpc/reflection"
+	"google.golang.org/grpc/status"
 )
 
 var oltLogger = log.WithFields(log.Fields{
@@ -56,6 +58,7 @@
 	channel              chan Message
 	nniPktInChannel      chan *bbsim.PacketMsg // packets coming in from the NNI and going to VOLTHA
 	nniHandle            *pcap.Handle          // handle on the NNI interface, close it when shutting down the NNI channel
+	Flows                map[FlowKey]openolt.Flow
 	Delay                int
 	ControlledActivation mode
 
@@ -99,6 +102,7 @@
 		Pons:         []*PonPort{},
 		Nnis:         []*NniPort{},
 		Delay:        delay,
+		Flows:        make(map[FlowKey]openolt.Flow),
 		enablePerf:   enablePerf,
 	}
 
@@ -859,8 +863,13 @@
 		"FlowId":    flow.FlowId,
 		"UniID":     flow.UniId,
 		"PortNo":    flow.PortNo,
-	}).Tracef("OLT receives Flow")
-	// TODO optionally store flows somewhere
+	}).Tracef("OLT receives FlowAdd")
+
+	flowKey := FlowKey{}
+	if !o.enablePerf {
+		flowKey = FlowKey{ID: flow.FlowId, Direction: flow.FlowType}
+		olt.Flows[flowKey] = *flow
+	}
 
 	if flow.AccessIntfId == -1 {
 		oltLogger.WithFields(log.Fields{
@@ -883,6 +892,9 @@
 				"err":    err,
 			}).Error("Can't find Onu")
 		}
+		if !o.enablePerf {
+			onu.Flows = append(onu.Flows, flowKey)
+		}
 
 		msg := Message{
 			Type: FlowUpdate,
@@ -898,9 +910,44 @@
 	return new(openolt.Empty), nil
 }
 
-func (o OltDevice) FlowRemove(context.Context, *openolt.Flow) (*openolt.Empty, error) {
-	oltLogger.Tracef("received FlowRemove")
-	// TODO store flows somewhere
+// FlowRemove request from VOLTHA
+func (o OltDevice) FlowRemove(_ context.Context, flow *openolt.Flow) (*openolt.Empty, error) {
+	oltLogger.WithFields(log.Fields{
+		"FlowId":   flow.FlowId,
+		"FlowType": flow.FlowType,
+	}).Tracef("OLT receives FlowRemove")
+
+	if !o.enablePerf { // remove only if flow were stored
+		flowKey := FlowKey{
+			ID:        flow.FlowId,
+			Direction: flow.FlowType,
+		}
+
+		// Check if flow exists
+		storedFlow, ok := o.Flows[flowKey]
+		if !ok {
+			oltLogger.Errorf("Flow %v not found", flow)
+			return new(openolt.Empty), status.Errorf(codes.NotFound, "Flow not found")
+		}
+
+		// if its ONU flow remove it from ONU also
+		if storedFlow.AccessIntfId != -1 {
+			pon := o.Pons[uint32(storedFlow.AccessIntfId)]
+			onu, err := pon.GetOnuById(uint32(storedFlow.OnuId))
+			if err != nil {
+				oltLogger.WithFields(log.Fields{
+					"OnuId":  storedFlow.OnuId,
+					"IntfId": storedFlow.AccessIntfId,
+					"err":    err,
+				}).Error("ONU not found")
+				return new(openolt.Empty), nil
+			}
+			onu.DeleteFlow(flowKey)
+		}
+
+		// delete from olt flows
+		delete(o.Flows, flowKey)
+	}
 	return new(openolt.Empty), nil
 }
 
diff --git a/internal/bbsim/devices/onu.go b/internal/bbsim/devices/onu.go
index 237c353..3622ee3 100644
--- a/internal/bbsim/devices/onu.go
+++ b/internal/bbsim/devices/onu.go
@@ -43,6 +43,11 @@
 	"module": "ONU",
 })
 
+type FlowKey struct {
+	ID        uint32
+	Direction string
+}
+
 type Onu struct {
 	ID                  uint32
 	PonPortID           uint32
@@ -62,6 +67,7 @@
 	// FIXME add support for multiple UNIs
 	PortNo           uint32
 	DhcpFlowReceived bool
+	Flows            []FlowKey
 
 	OperState    *fsm.FSM
 	SerialNumber *openolt.SerialNumber
@@ -100,6 +106,7 @@
 		DoneChannel:         make(chan bool, 1),
 		DhcpFlowReceived:    false,
 		DiscoveryRetryDelay: 60 * time.Second, // this is used to send OnuDiscoveryIndications until an activate call is received
+		Flows:               []FlowKey{},
 		DiscoveryDelay:      delay,
 	}
 	o.SerialNumber = o.NewSN(olt.ID, pon.ID, id)
@@ -900,3 +907,17 @@
 		"SerialNumber": common.OnuSnToString(o.SerialNumber),
 	}).Info("Sent DHCP Flow")
 }
+
+// DeleteFlow method search and delete flowKey from the onu flows slice
+func (onu *Onu) DeleteFlow(key FlowKey) {
+	for pos, flowKey := range onu.Flows {
+		if flowKey == key {
+			// delete the flowKey by shifting all flowKeys by one
+			onu.Flows = append(onu.Flows[:pos], onu.Flows[pos+1:]...)
+			t := make([]FlowKey, len(onu.Flows))
+			copy(t, onu.Flows)
+			onu.Flows = t
+			break
+		}
+	}
+}
diff --git a/internal/bbsimctl/commands/olt.go b/internal/bbsimctl/commands/olt.go
index d77cf77..f1553db 100644
--- a/internal/bbsimctl/commands/olt.go
+++ b/internal/bbsimctl/commands/olt.go
@@ -20,13 +20,16 @@
 import (
 	"context"
 	"fmt"
+	"os"
+	"strconv"
+
 	"github.com/jessevdk/go-flags"
+	"github.com/olekukonko/tablewriter"
 	pb "github.com/opencord/bbsim/api/bbsim"
 	"github.com/opencord/bbsim/internal/bbsimctl/config"
 	"github.com/opencord/cordctl/pkg/format"
 	log "github.com/sirupsen/logrus"
 	"google.golang.org/grpc"
-	"os"
 )
 
 const (
@@ -46,6 +49,8 @@
 
 type OltReboot struct{}
 
+type OltFlows struct{}
+
 type oltOptions struct {
 	Get      OltGet          `command:"get"`
 	NNI      OltNNIs         `command:"nnis"`
@@ -54,6 +59,7 @@
 	Poweron  OltPoweron      `command:"poweron"`
 	Reboot   OltReboot       `command:"reboot"`
 	Alarms   OltAlarmOptions `command:"alarms"`
+	Flows    OltFlows        `command:"flows"`
 }
 
 func RegisterOltCommands(parser *flags.Parser) {
@@ -171,3 +177,69 @@
 	fmt.Println(fmt.Sprintf("[Status: %d] %s", res.StatusCode, res.Message))
 	return nil
 }
+
+func (o *OltFlows) Execute(args []string) error {
+	client, conn := connect()
+	defer conn.Close()
+
+	ctx, cancel := context.WithTimeout(context.Background(), config.GlobalConfig.Grpc.Timeout)
+	defer cancel()
+
+	req := pb.ONURequest{}
+	res, err := client.GetFlows(ctx, &req)
+	if err != nil {
+		log.Errorf("Cannot get flows for OLT: %v", err)
+		return err
+	}
+
+	if res.Flows == nil {
+		fmt.Println("OLT has no flows")
+		return nil
+	}
+
+	flowHeader := []string{
+		"access_intf_id",
+		"onu_id",
+		"uni_id",
+		"flow_id",
+		"flow_type",
+		"eth_type",
+		"alloc_id",
+		"network_intf_id",
+		"gemport_id",
+		"classifier",
+		"action",
+		"priority",
+		"cookie",
+		"port_no",
+	}
+
+	tableFlow := tablewriter.NewWriter(os.Stdout)
+	tableFlow.SetRowLine(true)
+	fmt.Fprintf(os.Stdout, "OLT Flows:\n")
+	tableFlow.SetHeader(flowHeader)
+
+	for _, flow := range res.Flows {
+		flowInfo := []string{}
+		flowInfo = append(flowInfo,
+			strconv.Itoa(int(flow.AccessIntfId)),
+			strconv.Itoa(int(flow.OnuId)),
+			strconv.Itoa(int(flow.UniId)),
+			strconv.Itoa(int(flow.FlowId)),
+			flow.FlowType,
+			fmt.Sprintf("%x", flow.Classifier.EthType),
+			strconv.Itoa(int(flow.AllocId)),
+			strconv.Itoa(int(flow.NetworkIntfId)),
+			strconv.Itoa(int(flow.GemportId)),
+			flow.Classifier.String(),
+			flow.Action.String(),
+			strconv.Itoa(int(flow.Priority)),
+			strconv.Itoa(int(flow.Cookie)),
+			strconv.Itoa(int(flow.PortNo)),
+		)
+		tableFlow.Append(flowInfo)
+	}
+	tableFlow.Render()
+	tableFlow.SetNewLine("")
+	return nil
+}
diff --git a/internal/bbsimctl/commands/onu.go b/internal/bbsimctl/commands/onu.go
index 2815501..c331502 100644
--- a/internal/bbsimctl/commands/onu.go
+++ b/internal/bbsimctl/commands/onu.go
@@ -83,6 +83,18 @@
 	} `positional-args:"yes" required:"yes"`
 }
 
+type ONUTrafficSchedulers struct {
+	Args struct {
+		OnuSn OnuSnString
+	} `positional-args:"yes" required:"yes"`
+}
+
+type ONUFlows struct {
+	Args struct {
+		OnuSn OnuSnString
+	} `positional-args:"yes" required:"yes"`
+}
+
 type ONUOptions struct {
 	List              ONUList              `command:"list"`
 	Get               ONUGet               `command:"get"`
@@ -93,12 +105,7 @@
 	Igmp              ONUIgmp              `command:"igmp"`
 	TrafficSchedulers ONUTrafficSchedulers `command:"traffic_schedulers"`
 	Alarms            AlarmOptions         `command:"alarms"`
-}
-
-type ONUTrafficSchedulers struct {
-	Args struct {
-		OnuSn OnuSnString
-	} `positional-args:"yes" required:"yes"`
+	Flows             ONUFlows             `command:"flows"`
 }
 
 func RegisterONUCommands(parser *flags.Parser) {
@@ -302,6 +309,73 @@
 	return nil
 }
 
+func (options *ONUFlows) Execute(args []string) error {
+	client, conn := connect()
+	defer conn.Close()
+
+	ctx, cancel := context.WithTimeout(context.Background(), config.GlobalConfig.Grpc.Timeout)
+	defer cancel()
+	req := pb.ONURequest{
+		SerialNumber: string(options.Args.OnuSn),
+	}
+	res, err := client.GetFlows(ctx, &req)
+	if err != nil {
+		log.Errorf("Cannot get flows for ONU %s: %v", options.Args.OnuSn, err)
+		return err
+	}
+
+	if res.Flows == nil {
+		fmt.Println(fmt.Sprintf("ONU %s has no flows", options.Args.OnuSn))
+		return nil
+	}
+
+	flowHeader := []string{
+		"access_intf_id",
+		"onu_id",
+		"uni_id",
+		"flow_id",
+		"flow_type",
+		"eth_type",
+		"alloc_id",
+		"network_intf_id",
+		"gemport_id",
+		"classifier",
+		"action",
+		"priority",
+		"cookie",
+		"port_no",
+	}
+
+	tableFlow := tablewriter.NewWriter(os.Stdout)
+	tableFlow.SetRowLine(true)
+	fmt.Fprintf(os.Stdout, "ONU Flows:\n")
+	tableFlow.SetHeader(flowHeader)
+
+	for _, flow := range res.Flows {
+		flowInfo := []string{}
+		flowInfo = append(flowInfo,
+			strconv.Itoa(int(flow.AccessIntfId)),
+			strconv.Itoa(int(flow.OnuId)),
+			strconv.Itoa(int(flow.UniId)),
+			strconv.Itoa(int(flow.FlowId)),
+			flow.FlowType,
+			fmt.Sprintf("%x", flow.Classifier.EthType),
+			strconv.Itoa(int(flow.AllocId)),
+			strconv.Itoa(int(flow.NetworkIntfId)),
+			strconv.Itoa(int(flow.GemportId)),
+			flow.Classifier.String(),
+			flow.Action.String(),
+			strconv.Itoa(int(flow.Priority)),
+			strconv.Itoa(int(flow.Cookie)),
+			strconv.Itoa(int(flow.PortNo)),
+		)
+		tableFlow.Append(flowInfo)
+	}
+	tableFlow.Render()
+	tableFlow.SetNewLine("")
+	return nil
+}
+
 func (onuSn *OnuSnString) Complete(match string) []flags.Completion {
 	client, conn := connect()
 	defer conn.Close()
