diff --git a/api/bbsim/bbsim.pb.go b/api/bbsim/bbsim.pb.go
index c9ffa1c..4da2e87 100644
--- a/api/bbsim/bbsim.pb.go
+++ b/api/bbsim/bbsim.pb.go
@@ -10,6 +10,8 @@
 	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"
+	status "google.golang.org/grpc/status"
 	math "math"
 )
 
@@ -129,7 +131,7 @@
 }
 
 func (AlarmType_Types) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{7, 0}
+	return fileDescriptor_ef7750073d18011b, []int{8, 0}
 }
 
 type PONPort struct {
@@ -533,6 +535,45 @@
 	return ""
 }
 
+type PONRequest struct {
+	PonPortId            uint32   `protobuf:"varint,1,opt,name=PonPortId,proto3" json:"PonPortId,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PONRequest) Reset()         { *m = PONRequest{} }
+func (m *PONRequest) String() string { return proto.CompactTextString(m) }
+func (*PONRequest) ProtoMessage()    {}
+func (*PONRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ef7750073d18011b, []int{7}
+}
+
+func (m *PONRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PONRequest.Unmarshal(m, b)
+}
+func (m *PONRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PONRequest.Marshal(b, m, deterministic)
+}
+func (m *PONRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PONRequest.Merge(m, src)
+}
+func (m *PONRequest) XXX_Size() int {
+	return xxx_messageInfo_PONRequest.Size(m)
+}
+func (m *PONRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_PONRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PONRequest proto.InternalMessageInfo
+
+func (m *PONRequest) GetPonPortId() uint32 {
+	if m != nil {
+		return m.PonPortId
+	}
+	return 0
+}
+
 type AlarmType struct {
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
@@ -543,7 +584,7 @@
 func (m *AlarmType) String() string { return proto.CompactTextString(m) }
 func (*AlarmType) ProtoMessage()    {}
 func (*AlarmType) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{7}
+	return fileDescriptor_ef7750073d18011b, []int{8}
 }
 
 func (m *AlarmType) XXX_Unmarshal(b []byte) error {
@@ -576,7 +617,7 @@
 func (m *AlarmParameter) String() string { return proto.CompactTextString(m) }
 func (*AlarmParameter) ProtoMessage()    {}
 func (*AlarmParameter) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{8}
+	return fileDescriptor_ef7750073d18011b, []int{9}
 }
 
 func (m *AlarmParameter) XXX_Unmarshal(b []byte) error {
@@ -628,7 +669,7 @@
 func (m *ONUAlarmRequest) String() string { return proto.CompactTextString(m) }
 func (*ONUAlarmRequest) ProtoMessage()    {}
 func (*ONUAlarmRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{9}
+	return fileDescriptor_ef7750073d18011b, []int{10}
 }
 
 func (m *ONUAlarmRequest) XXX_Unmarshal(b []byte) error {
@@ -691,7 +732,7 @@
 func (m *OLTAlarmRequest) String() string { return proto.CompactTextString(m) }
 func (*OLTAlarmRequest) ProtoMessage()    {}
 func (*OLTAlarmRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{10}
+	return fileDescriptor_ef7750073d18011b, []int{11}
 }
 
 func (m *OLTAlarmRequest) XXX_Unmarshal(b []byte) error {
@@ -747,7 +788,7 @@
 func (m *VersionNumber) String() string { return proto.CompactTextString(m) }
 func (*VersionNumber) ProtoMessage()    {}
 func (*VersionNumber) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{11}
+	return fileDescriptor_ef7750073d18011b, []int{12}
 }
 
 func (m *VersionNumber) XXX_Unmarshal(b []byte) error {
@@ -808,7 +849,7 @@
 func (m *LogLevel) String() string { return proto.CompactTextString(m) }
 func (*LogLevel) ProtoMessage()    {}
 func (*LogLevel) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{12}
+	return fileDescriptor_ef7750073d18011b, []int{13}
 }
 
 func (m *LogLevel) XXX_Unmarshal(b []byte) error {
@@ -855,7 +896,7 @@
 func (m *Response) String() string { return proto.CompactTextString(m) }
 func (*Response) ProtoMessage()    {}
 func (*Response) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{13}
+	return fileDescriptor_ef7750073d18011b, []int{14}
 }
 
 func (m *Response) XXX_Unmarshal(b []byte) error {
@@ -902,7 +943,7 @@
 func (m *IgmpRequest) String() string { return proto.CompactTextString(m) }
 func (*IgmpRequest) ProtoMessage()    {}
 func (*IgmpRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{14}
+	return fileDescriptor_ef7750073d18011b, []int{15}
 }
 
 func (m *IgmpRequest) XXX_Unmarshal(b []byte) error {
@@ -949,7 +990,7 @@
 func (m *Flows) String() string { return proto.CompactTextString(m) }
 func (*Flows) ProtoMessage()    {}
 func (*Flows) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{15}
+	return fileDescriptor_ef7750073d18011b, []int{16}
 }
 
 func (m *Flows) XXX_Unmarshal(b []byte) error {
@@ -994,7 +1035,7 @@
 func (m *Empty) String() string { return proto.CompactTextString(m) }
 func (*Empty) ProtoMessage()    {}
 func (*Empty) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{16}
+	return fileDescriptor_ef7750073d18011b, []int{17}
 }
 
 func (m *Empty) XXX_Unmarshal(b []byte) error {
@@ -1025,6 +1066,7 @@
 	proto.RegisterType((*ONUTrafficSchedulers)(nil), "bbsim.ONUTrafficSchedulers")
 	proto.RegisterType((*ONUs)(nil), "bbsim.ONUs")
 	proto.RegisterType((*ONURequest)(nil), "bbsim.ONURequest")
+	proto.RegisterType((*PONRequest)(nil), "bbsim.PONRequest")
 	proto.RegisterType((*AlarmType)(nil), "bbsim.AlarmType")
 	proto.RegisterType((*AlarmParameter)(nil), "bbsim.AlarmParameter")
 	proto.RegisterType((*ONUAlarmRequest)(nil), "bbsim.ONUAlarmRequest")
@@ -1040,113 +1082,120 @@
 func init() { proto.RegisterFile("api/bbsim/bbsim.proto", fileDescriptor_ef7750073d18011b) }
 
 var fileDescriptor_ef7750073d18011b = []byte{
-	// 1297 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x56, 0xcb, 0x6e, 0xdb, 0x46,
-	0x17, 0xd6, 0xc5, 0xba, 0x1d, 0x59, 0x32, 0x3d, 0x89, 0x1d, 0xc2, 0xf1, 0xff, 0x47, 0x60, 0xd3,
-	0xc2, 0x09, 0x1a, 0xa7, 0xb1, 0x5b, 0x34, 0x5d, 0xd2, 0x12, 0xad, 0xb0, 0x96, 0x49, 0x61, 0x48,
-	0x39, 0xc8, 0x8a, 0xa0, 0xa4, 0xb1, 0x45, 0x80, 0x12, 0x15, 0x72, 0x14, 0x23, 0xeb, 0xa2, 0x2f,
-	0xd2, 0x27, 0xea, 0x13, 0x74, 0xd7, 0x87, 0xe8, 0xae, 0x98, 0xe1, 0x90, 0x22, 0x2d, 0xa7, 0x30,
-	0xba, 0xe9, 0x46, 0xe0, 0xf9, 0xce, 0x77, 0xee, 0x87, 0x47, 0x84, 0x3d, 0x77, 0xe9, 0xbd, 0x1e,
-	0x8f, 0x23, 0x6f, 0x1e, 0xff, 0x1e, 0x2f, 0xc3, 0x80, 0x06, 0xa8, 0xc2, 0x85, 0x83, 0xa7, 0x9f,
-	0x02, 0x9f, 0xce, 0x5c, 0x87, 0x83, 0xd1, 0xeb, 0x60, 0x49, 0x16, 0x81, 0x4f, 0x63, 0xce, 0x41,
-	0x27, 0xaf, 0xa4, 0x64, 0x32, 0x63, 0xcf, 0xd7, 0x9e, 0x4f, 0x62, 0x86, 0xf2, 0x23, 0xd4, 0x86,
-	0xa6, 0x31, 0x0c, 0x42, 0x8a, 0xda, 0x50, 0xd2, 0x7b, 0x72, 0xb1, 0x53, 0x3c, 0xaa, 0xe0, 0x92,
-	0xde, 0x43, 0x87, 0xd0, 0x30, 0x97, 0x24, 0xb4, 0xa8, 0x4b, 0x89, 0x5c, 0xea, 0x14, 0x8f, 0x1a,
-	0x78, 0x0d, 0x30, 0x43, 0xc3, 0xd0, 0xff, 0x85, 0xe1, 0x9f, 0x45, 0x28, 0x9b, 0xfe, 0xa6, 0x95,
-	0x02, 0xdb, 0x16, 0x09, 0x3d, 0xd7, 0x37, 0x56, 0xf3, 0x31, 0x09, 0x85, 0x61, 0x0e, 0xcb, 0x7b,
-	0x2e, 0xdf, 0xf1, 0x8c, 0x9e, 0x43, 0x4b, 0x5f, 0x50, 0x12, 0x2e, 0x5c, 0x3f, 0x66, 0x6c, 0x71,
-	0x46, 0x1e, 0xe4, 0x71, 0x87, 0x72, 0x8d, 0xab, 0x4a, 0xfa, 0x10, 0xbd, 0x84, 0xba, 0x28, 0x24,
-	0x92, 0x2b, 0x9d, 0xf2, 0x51, 0xf3, 0xa4, 0x7d, 0x1c, 0xf7, 0x59, 0xc0, 0x38, 0xd5, 0x33, 0xae,
-	0xe8, 0x56, 0x24, 0x57, 0x73, 0x5c, 0x01, 0xe3, 0x54, 0xaf, 0xfc, 0xc5, 0xea, 0x34, 0x46, 0xff,
-	0x59, 0x9d, 0x87, 0xd0, 0x18, 0x06, 0x0b, 0x96, 0x8b, 0xde, 0x93, 0x2b, 0x3c, 0xfc, 0x1a, 0x40,
-	0x08, 0xb6, 0x2c, 0xdb, 0xbd, 0x91, 0xab, 0x5c, 0xc1, 0x9f, 0x19, 0xd6, 0x65, 0x58, 0x2d, 0xc6,
-	0xd8, 0x33, 0xf3, 0xf2, 0xee, 0x56, 0x9d, 0x4e, 0x43, 0x12, 0x45, 0x72, 0x3d, 0xce, 0x24, 0x05,
-	0xd0, 0x3e, 0x54, 0x99, 0x3f, 0x23, 0x90, 0x1b, 0xdc, 0x46, 0x48, 0x8a, 0x0b, 0x8f, 0x4d, 0x63,
-	0x64, 0x87, 0xee, 0xf5, 0xb5, 0x37, 0xb1, 0x26, 0x33, 0x32, 0x5d, 0xf9, 0x24, 0x8c, 0x90, 0x0e,
-	0x3b, 0x94, 0x81, 0x6b, 0x88, 0x37, 0xa6, 0x79, 0xf2, 0xec, 0x38, 0xb7, 0x9b, 0x1b, 0x96, 0xf8,
-	0xae, 0x9d, 0x72, 0x04, 0x5b, 0xa6, 0x31, 0x8a, 0x50, 0x07, 0x2a, 0x1e, 0x25, 0x73, 0xe6, 0x88,
-	0xcd, 0x03, 0xc4, 0x3c, 0x4c, 0x63, 0x84, 0x63, 0x85, 0xf2, 0x1d, 0x00, 0x93, 0xc8, 0xc7, 0x15,
-	0x89, 0xe8, 0x46, 0xfb, 0x8b, 0x9b, 0xed, 0x57, 0xfe, 0x28, 0x43, 0x43, 0xf5, 0xdd, 0x70, 0x6e,
-	0x7f, 0x5e, 0x12, 0xe5, 0xf7, 0x32, 0x54, 0xd8, 0x43, 0x84, 0x6a, 0x50, 0x1e, 0x98, 0x96, 0x54,
-	0x40, 0x6d, 0x80, 0xde, 0x07, 0xdd, 0xe8, 0x3b, 0x7d, 0xd5, 0x1a, 0x4a, 0x45, 0xd4, 0x82, 0x86,
-	0x69, 0x8c, 0x1c, 0x75, 0xa0, 0xe2, 0x4b, 0xa9, 0x84, 0x9e, 0xc0, 0x23, 0x26, 0x5a, 0xb6, 0x8a,
-	0xed, 0xd1, 0xd0, 0x39, 0x57, 0xf5, 0xc1, 0x08, 0x6b, 0x52, 0x19, 0xed, 0x03, 0xe2, 0x0a, 0xbd,
-	0x6f, 0xa8, 0x03, 0xa7, 0xa7, 0xf5, 0xb1, 0xda, 0xd3, 0xa4, 0xad, 0xc4, 0xa0, 0x87, 0xf5, 0x73,
-	0xdb, 0x31, 0xcf, 0x9d, 0xf7, 0xba, 0xd1, 0x33, 0xdf, 0x4b, 0x15, 0x74, 0x08, 0x32, 0x53, 0x0c,
-	0x4c, 0xcb, 0x62, 0xb8, 0x79, 0xd9, 0xd5, 0x9d, 0xee, 0x3b, 0xd5, 0x30, 0xb4, 0x81, 0x54, 0x4d,
-	0xe3, 0x70, 0x77, 0x56, 0x1a, 0xa7, 0x86, 0x5e, 0xc0, 0xd7, 0x4c, 0x61, 0x63, 0xd5, 0xb0, 0x2e,
-	0x75, 0xcb, 0xd2, 0x4d, 0xc3, 0xd1, 0x0d, 0x5b, 0xc3, 0xe7, 0x1a, 0xd6, 0x8c, 0xae, 0xe6, 0xbc,
-	0x57, 0xb1, 0xa1, 0x1b, 0x7d, 0xa9, 0x8e, 0x0e, 0x60, 0x9f, 0xa7, 0xde, 0xb5, 0xf5, 0x2b, 0xd5,
-	0x66, 0xc4, 0xc4, 0x4d, 0x03, 0xc9, 0x7c, 0x8c, 0xce, 0x10, 0x9b, 0x5d, 0xcd, 0xb2, 0x58, 0xbd,
-	0x1a, 0xc6, 0x26, 0x96, 0x00, 0x75, 0xe0, 0x30, 0x9b, 0xd7, 0x85, 0xf6, 0xc1, 0xb1, 0x3e, 0x18,
-	0xdd, 0xd4, 0xb6, 0x89, 0xf6, 0x60, 0x97, 0x31, 0x74, 0x7b, 0xe4, 0x0c, 0x4d, 0x83, 0xf5, 0xc2,
-	0xb6, 0xa4, 0x6d, 0xb4, 0x0b, 0xad, 0xb4, 0x53, 0xcc, 0x5c, 0x6a, 0xdd, 0x85, 0xce, 0xa4, 0x76,
-	0x52, 0x58, 0x02, 0x0d, 0xbb, 0x0e, 0xab, 0x42, 0xda, 0x49, 0xfa, 0x91, 0x53, 0x74, 0x45, 0x56,
-	0x12, 0x42, 0xd0, 0xce, 0x6a, 0xcf, 0x75, 0x69, 0x17, 0x3d, 0x82, 0x9d, 0x2c, 0xa6, 0x5e, 0xea,
-	0x12, 0x52, 0xde, 0x42, 0x9b, 0xcf, 0x77, 0xe8, 0x86, 0xee, 0x9c, 0x50, 0x12, 0x22, 0x09, 0xca,
-	0x17, 0xe4, 0xb3, 0xd8, 0x06, 0xf6, 0x88, 0x1e, 0x43, 0xe5, 0xca, 0xf5, 0x57, 0xc9, 0x05, 0x8b,
-	0x05, 0xe5, 0xb7, 0x22, 0xf7, 0xc7, 0xad, 0x93, 0x95, 0x3a, 0xcc, 0x6c, 0x8b, 0xf0, 0xb0, 0x06,
-	0x1e, 0xf4, 0xbe, 0xef, 0x43, 0x95, 0xbd, 0xb4, 0xab, 0x48, 0xbc, 0xec, 0x42, 0x42, 0x3f, 0x00,
-	0xa4, 0x29, 0x46, 0xf2, 0x16, 0xdf, 0xf0, 0x3d, 0xb1, 0xe1, 0xf9, 0x02, 0x70, 0x86, 0xa8, 0x7c,
-	0x84, 0x1d, 0x73, 0x60, 0xe7, 0x72, 0xec, 0x40, 0x93, 0x9f, 0x87, 0x6b, 0x77, 0x42, 0xc4, 0x39,
-	0x6a, 0xe1, 0x2c, 0x94, 0x5e, 0x15, 0x26, 0xf2, 0x4a, 0x4a, 0x99, 0xab, 0x92, 0x80, 0x5f, 0xca,
-	0x54, 0xf9, 0xb5, 0x08, 0xad, 0x2b, 0x12, 0x46, 0x5e, 0xb0, 0x10, 0x35, 0xc9, 0x50, 0xfb, 0x14,
-	0x03, 0xa2, 0x27, 0x89, 0xc8, 0xfa, 0x35, 0x5e, 0x79, 0xfe, 0xd4, 0xf6, 0xe6, 0xe9, 0xff, 0x43,
-	0x0a, 0xa0, 0xff, 0x03, 0x4c, 0x82, 0xf9, 0xdc, 0xa3, 0xef, 0xdc, 0x68, 0x26, 0xa2, 0x64, 0x10,
-	0x66, 0x7d, 0xe3, 0x51, 0x91, 0x44, 0x7c, 0xf9, 0xd6, 0x80, 0xf2, 0x16, 0xea, 0x83, 0xe0, 0x66,
-	0x40, 0x3e, 0x11, 0x9f, 0x4d, 0xd0, 0x67, 0x0f, 0x22, 0x7e, 0x2c, 0xb0, 0x0a, 0x26, 0xae, 0xef,
-	0x8b, 0x49, 0xd4, 0xb1, 0x90, 0x14, 0x0d, 0xea, 0x98, 0x44, 0xcb, 0x60, 0x11, 0x11, 0xf4, 0x0c,
-	0x9a, 0x11, 0xf7, 0xe7, 0x4c, 0x82, 0x29, 0x11, 0xc7, 0x1b, 0x62, 0xa8, 0x1b, 0x4c, 0x09, 0x2b,
-	0x6e, 0x4e, 0xa2, 0xc8, 0xbd, 0x49, 0x0a, 0x48, 0x44, 0x25, 0x82, 0xa6, 0x7e, 0x33, 0x5f, 0x26,
-	0x7d, 0x7f, 0x01, 0x55, 0x73, 0xb1, 0xc2, 0xe4, 0xa3, 0x38, 0x74, 0xbb, 0x99, 0xfb, 0x14, 0x53,
-	0xb0, 0x20, 0xa0, 0x9f, 0x60, 0xdb, 0x5a, 0x8d, 0xd5, 0x09, 0xf5, 0x82, 0xc5, 0x95, 0xeb, 0x73,
-	0xc7, 0xed, 0x74, 0xdc, 0xa9, 0x8a, 0x9f, 0x22, 0x9c, 0xa3, 0x2a, 0x17, 0x50, 0x39, 0xf7, 0x83,
-	0xdb, 0x08, 0xfd, 0x0f, 0xe0, 0xda, 0x0f, 0x6e, 0x9d, 0x49, 0xb0, 0x5a, 0x50, 0x31, 0xe5, 0x06,
-	0x43, 0xba, 0x0c, 0x40, 0x5f, 0x41, 0x85, 0x09, 0x91, 0x5c, 0xe2, 0xab, 0xd4, 0x3a, 0x4e, 0x3e,
-	0x17, 0x98, 0x35, 0x8e, 0x75, 0x4a, 0x0d, 0x2a, 0xda, 0x7c, 0x49, 0x3f, 0xbf, 0x7c, 0x03, 0xed,
-	0x7c, 0x54, 0x54, 0x87, 0xad, 0x9f, 0x4d, 0xdd, 0x90, 0x0a, 0xa8, 0x01, 0x95, 0x81, 0xa6, 0x5e,
-	0x69, 0x52, 0x11, 0x01, 0x54, 0x19, 0x78, 0x75, 0x2a, 0x95, 0x4e, 0x7e, 0xa9, 0x41, 0xe5, 0xec,
-	0xcc, 0xf2, 0xe6, 0xe8, 0x35, 0xd4, 0xc4, 0x3e, 0xa0, 0x6d, 0x51, 0x02, 0xf7, 0x7a, 0xf0, 0x58,
-	0x48, 0xb9, 0x6d, 0x51, 0x0a, 0xe8, 0x39, 0x54, 0xfb, 0x84, 0xb2, 0x2f, 0x83, 0x3c, 0x3f, 0xbd,
-	0xe8, 0x3e, 0x55, 0x0a, 0xe8, 0x15, 0xc0, 0x30, 0xb8, 0x25, 0x61, 0xb0, 0xd8, 0x64, 0xee, 0x08,
-	0x29, 0x19, 0xa3, 0x52, 0x40, 0xc7, 0xd0, 0xb4, 0x66, 0x2b, 0x3a, 0x0d, 0x6e, 0x1f, 0xc6, 0xff,
-	0x16, 0x1a, 0x98, 0x8c, 0x83, 0x80, 0x3e, 0x88, 0xfd, 0x0d, 0xd4, 0x58, 0xca, 0xec, 0x6f, 0x28,
-	0xcf, 0x6d, 0xae, 0xa7, 0x1c, 0x29, 0x05, 0xb6, 0x04, 0x31, 0x0f, 0x6d, 0x8e, 0xff, 0x20, 0xf3,
-	0x8f, 0xa5, 0x14, 0xd0, 0x1b, 0x68, 0x5a, 0x84, 0xa6, 0x2b, 0x9c, 0x04, 0x4d, 0x80, 0x83, 0xbb,
-	0x80, 0x52, 0x40, 0xa7, 0x99, 0x1a, 0xef, 0x0f, 0x71, 0x4f, 0xea, 0x27, 0xeb, 0x3e, 0x3e, 0xd8,
-	0xe6, 0x7b, 0xd8, 0xc6, 0x24, 0xa2, 0x6e, 0x48, 0x35, 0x77, 0x19, 0xf8, 0x0f, 0xb4, 0x3a, 0x85,
-	0xa6, 0xb0, 0xea, 0xcd, 0x26, 0xcb, 0x07, 0x1a, 0x9d, 0xc1, 0x9e, 0x45, 0xa8, 0xb9, 0x58, 0xf1,
-	0x23, 0xa6, 0x2f, 0xa6, 0xde, 0xc4, 0x65, 0x6b, 0x88, 0xf6, 0xd7, 0xe6, 0xd9, 0xfb, 0xf6, 0x0f,
-	0x3e, 0x7c, 0xfa, 0x45, 0x1f, 0xf9, 0x1b, 0x79, 0x9f, 0x8f, 0x57, 0x50, 0xef, 0x13, 0x1a, 0xbf,
-	0x5b, 0xf7, 0x64, 0x9e, 0x4c, 0x9d, 0x13, 0x94, 0x02, 0x7a, 0x0b, 0x3b, 0xdd, 0x99, 0xbb, 0xb8,
-	0x21, 0xec, 0x04, 0xc4, 0x9f, 0x61, 0x48, 0x50, 0x32, 0x47, 0xe1, 0xbe, 0x40, 0x17, 0xf0, 0xa4,
-	0xcf, 0x0b, 0xde, 0xfc, 0x68, 0xba, 0x27, 0xee, 0xd3, 0x35, 0xb4, 0xc1, 0x57, 0x0a, 0xe3, 0x2a,
-	0xff, 0xb6, 0x3f, 0xfd, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x36, 0x31, 0x9e, 0x48, 0x3a, 0x0c, 0x00,
-	0x00,
+	// 1353 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x57, 0xdd, 0x72, 0x9b, 0xd6,
+	0x16, 0xd6, 0x8f, 0xf5, 0xb7, 0x64, 0xc9, 0x78, 0x27, 0x76, 0x18, 0xc7, 0xe7, 0xc4, 0xc3, 0xc9,
+	0x39, 0xe3, 0x64, 0x4e, 0x9c, 0xc6, 0x6e, 0xa7, 0xc9, 0x25, 0x96, 0xb0, 0x42, 0x2d, 0x03, 0xb3,
+	0x41, 0xce, 0xe4, 0x8a, 0xc1, 0xd2, 0xb6, 0xc5, 0x0c, 0x02, 0x05, 0x50, 0x3c, 0x79, 0x80, 0xbe,
+	0x48, 0x9f, 0xa8, 0x4f, 0xd0, 0x5e, 0xf5, 0x21, 0x7a, 0xd7, 0xd9, 0x9b, 0x0d, 0x02, 0x4b, 0xe9,
+	0xa8, 0xbd, 0xe9, 0x8d, 0x66, 0xaf, 0x6f, 0x7d, 0xeb, 0x7f, 0xb3, 0x40, 0xb0, 0xe7, 0xcc, 0xdd,
+	0xd7, 0x37, 0x37, 0x91, 0x3b, 0x4b, 0x7e, 0x4f, 0xe6, 0x61, 0x10, 0x07, 0xa8, 0xc6, 0x84, 0x83,
+	0xa7, 0x9f, 0x03, 0x2f, 0x9e, 0x3a, 0x36, 0x03, 0xa3, 0xd7, 0xc1, 0x9c, 0xf8, 0x81, 0x17, 0x27,
+	0x9c, 0x83, 0xa3, 0xa2, 0x32, 0x26, 0xe3, 0x29, 0x3d, 0xdf, 0xba, 0x1e, 0x49, 0x18, 0xd2, 0xf7,
+	0xd0, 0x30, 0x74, 0xcd, 0x08, 0xc2, 0x18, 0x75, 0xa1, 0xa2, 0xf6, 0xc5, 0xf2, 0x51, 0xf9, 0xb8,
+	0x86, 0x2b, 0x6a, 0x1f, 0x1d, 0x42, 0x4b, 0x9f, 0x93, 0xd0, 0x8c, 0x9d, 0x98, 0x88, 0x95, 0xa3,
+	0xf2, 0x71, 0x0b, 0x2f, 0x01, 0x6a, 0xa8, 0x69, 0xea, 0xdf, 0x30, 0xfc, 0xad, 0x0c, 0x55, 0xdd,
+	0x5b, 0xb5, 0x92, 0x60, 0xdb, 0x24, 0xa1, 0xeb, 0x78, 0xda, 0x62, 0x76, 0x43, 0x42, 0x6e, 0x58,
+	0xc0, 0x8a, 0x9e, 0xab, 0x0f, 0x3c, 0xa3, 0xe7, 0xd0, 0x51, 0xfd, 0x98, 0x84, 0xbe, 0xe3, 0x25,
+	0x8c, 0x2d, 0xc6, 0x28, 0x82, 0x2c, 0xae, 0x21, 0x36, 0x98, 0xaa, 0xa2, 0x1a, 0xe8, 0x25, 0x34,
+	0x79, 0x21, 0x91, 0x58, 0x3b, 0xaa, 0x1e, 0xb7, 0x4f, 0xbb, 0x27, 0x49, 0x9f, 0x39, 0x8c, 0x33,
+	0x3d, 0xe5, 0xf2, 0x6e, 0x45, 0x62, 0xbd, 0xc0, 0xe5, 0x30, 0xce, 0xf4, 0xd2, 0xef, 0xb4, 0x4e,
+	0x6d, 0xf4, 0x8f, 0xd5, 0x79, 0x08, 0x2d, 0x23, 0xf0, 0x69, 0x2e, 0x6a, 0x5f, 0xac, 0xb1, 0xf0,
+	0x4b, 0x00, 0x21, 0xd8, 0x32, 0x2d, 0xe7, 0x4e, 0xac, 0x33, 0x05, 0x3b, 0x53, 0xac, 0x47, 0xb1,
+	0x46, 0x82, 0xd1, 0x33, 0xf5, 0xf2, 0xfe, 0x5e, 0x9e, 0x4c, 0x42, 0x12, 0x45, 0x62, 0x33, 0xc9,
+	0x24, 0x03, 0xd0, 0x3e, 0xd4, 0xa9, 0x3f, 0x2d, 0x10, 0x5b, 0xcc, 0x86, 0x4b, 0x92, 0x03, 0x8f,
+	0x75, 0x6d, 0x64, 0x85, 0xce, 0xed, 0xad, 0x3b, 0x36, 0xc7, 0x53, 0x32, 0x59, 0x78, 0x24, 0x8c,
+	0x90, 0x0a, 0x3b, 0x31, 0x05, 0x97, 0x10, 0x6b, 0x4c, 0xfb, 0xf4, 0xd9, 0x49, 0xe1, 0x6e, 0xae,
+	0x58, 0xe2, 0x87, 0x76, 0xd2, 0x31, 0x6c, 0xe9, 0xda, 0x28, 0x42, 0x47, 0x50, 0x73, 0x63, 0x32,
+	0xa3, 0x8e, 0xe8, 0x3c, 0x80, 0xcf, 0x43, 0xd7, 0x46, 0x38, 0x51, 0x48, 0xdf, 0x00, 0x50, 0x89,
+	0x7c, 0x5a, 0x90, 0x28, 0x5e, 0x69, 0x7f, 0x79, 0xb5, 0xfd, 0xd2, 0x4b, 0x00, 0x43, 0xd7, 0x52,
+	0x8b, 0x5c, 0x23, 0x27, 0x8c, 0xde, 0x59, 0x36, 0x72, 0x22, 0xfd, 0x52, 0x85, 0x96, 0xec, 0x39,
+	0xe1, 0xcc, 0xfa, 0x32, 0x27, 0xd2, 0xcf, 0x55, 0xa8, 0xd1, 0x43, 0x84, 0x1a, 0x50, 0x1d, 0xea,
+	0xa6, 0x50, 0x42, 0x5d, 0x80, 0xfe, 0x47, 0x55, 0x1b, 0xd8, 0x03, 0xd9, 0x34, 0x84, 0x32, 0xea,
+	0x40, 0x4b, 0xd7, 0x46, 0xb6, 0x3c, 0x94, 0xf1, 0x95, 0x50, 0x41, 0x4f, 0xe0, 0x11, 0x15, 0x4d,
+	0x4b, 0xc6, 0xd6, 0xc8, 0xb0, 0x2f, 0x64, 0x75, 0x38, 0xc2, 0x8a, 0x50, 0x45, 0xfb, 0x80, 0x98,
+	0x42, 0x1d, 0x68, 0xf2, 0xd0, 0xee, 0x2b, 0x03, 0x2c, 0xf7, 0x15, 0x61, 0x2b, 0x35, 0xe8, 0x63,
+	0xf5, 0xc2, 0xb2, 0xf5, 0x0b, 0xfb, 0x83, 0xaa, 0xf5, 0xf5, 0x0f, 0x42, 0x0d, 0x1d, 0x82, 0x48,
+	0x15, 0x43, 0xdd, 0x34, 0x29, 0xae, 0x5f, 0xf5, 0x54, 0xbb, 0xf7, 0x5e, 0xd6, 0x34, 0x65, 0x28,
+	0xd4, 0xb3, 0x38, 0xcc, 0x9d, 0x99, 0xc5, 0x69, 0xa0, 0x17, 0xf0, 0x5f, 0xaa, 0xb0, 0xb0, 0xac,
+	0x99, 0x57, 0xaa, 0x69, 0xaa, 0xba, 0x66, 0xab, 0x9a, 0xa5, 0xe0, 0x0b, 0x05, 0x2b, 0x5a, 0x4f,
+	0xb1, 0x3f, 0xc8, 0x58, 0x53, 0xb5, 0x81, 0xd0, 0x44, 0x07, 0xb0, 0xcf, 0x52, 0xef, 0x59, 0xea,
+	0xb5, 0x6c, 0x51, 0x62, 0xea, 0xa6, 0x85, 0x44, 0x36, 0x72, 0xdb, 0xc0, 0x7a, 0x4f, 0x31, 0x4d,
+	0x5a, 0xaf, 0x82, 0xb1, 0x8e, 0x05, 0x40, 0x47, 0x70, 0x98, 0xcf, 0xeb, 0x52, 0xf9, 0x68, 0x9b,
+	0x1f, 0xb5, 0x5e, 0x66, 0xdb, 0x46, 0x7b, 0xb0, 0x4b, 0x19, 0xaa, 0x35, 0xb2, 0x0d, 0x5d, 0xa3,
+	0xbd, 0xb0, 0x4c, 0x61, 0x1b, 0xed, 0x42, 0x27, 0xeb, 0x14, 0x35, 0x17, 0x3a, 0x0f, 0xa1, 0x73,
+	0xa1, 0x9b, 0x16, 0x96, 0x42, 0x46, 0xcf, 0xa6, 0x55, 0x08, 0x3b, 0x69, 0x3f, 0x0a, 0x8a, 0x1e,
+	0xcf, 0x4a, 0x40, 0x08, 0xba, 0x79, 0xed, 0x85, 0x2a, 0xec, 0xa2, 0x47, 0xb0, 0x93, 0xc7, 0xe4,
+	0x2b, 0x55, 0x40, 0xd2, 0x5b, 0xe8, 0xb2, 0xf9, 0x1a, 0x4e, 0xe8, 0xcc, 0x48, 0x4c, 0x42, 0x24,
+	0x40, 0xf5, 0x92, 0x7c, 0xe1, 0x37, 0x87, 0x1e, 0xd1, 0x63, 0xa8, 0x5d, 0x3b, 0xde, 0x22, 0xdd,
+	0x76, 0x89, 0x20, 0xfd, 0x54, 0x66, 0xfe, 0x98, 0x75, 0xee, 0x32, 0x65, 0xb7, 0x85, 0x7b, 0x58,
+	0x02, 0x1b, 0xed, 0x86, 0x7d, 0xa8, 0xd3, 0x07, 0x7c, 0x11, 0xf1, 0xc5, 0xc0, 0x25, 0xf4, 0x1d,
+	0x40, 0x96, 0x62, 0x24, 0x6e, 0xb1, 0xa7, 0x61, 0x8f, 0x3f, 0x0d, 0xc5, 0x02, 0x70, 0x8e, 0x28,
+	0x7d, 0x82, 0x1d, 0x7d, 0x68, 0x15, 0x72, 0x3c, 0x82, 0x36, 0x5b, 0x25, 0xb7, 0xce, 0x98, 0xf0,
+	0xd5, 0xd5, 0xc1, 0x79, 0x28, 0xdb, 0x40, 0x54, 0x64, 0x95, 0x54, 0x72, 0x1b, 0x28, 0x05, 0xbf,
+	0x96, 0xa9, 0xf4, 0x63, 0x19, 0x3a, 0xd7, 0x24, 0x8c, 0xdc, 0xc0, 0xe7, 0x35, 0x89, 0xd0, 0xf8,
+	0x9c, 0x00, 0xbc, 0x27, 0xa9, 0x48, 0xfb, 0x75, 0xb3, 0x70, 0xbd, 0x89, 0xe5, 0xce, 0xb2, 0x77,
+	0x49, 0x06, 0xa0, 0x7f, 0x03, 0x8c, 0x83, 0xd9, 0xcc, 0x8d, 0xdf, 0x3b, 0xd1, 0x94, 0x47, 0xc9,
+	0x21, 0xd4, 0xfa, 0xce, 0x8d, 0x79, 0x12, 0xc9, 0x96, 0x5c, 0x02, 0xd2, 0x5b, 0x68, 0x0e, 0x83,
+	0xbb, 0x21, 0xf9, 0x4c, 0x3c, 0x3a, 0x41, 0x8f, 0x1e, 0x78, 0xfc, 0x44, 0xa0, 0x15, 0x8c, 0x1d,
+	0xcf, 0xe3, 0x93, 0x68, 0x62, 0x2e, 0x49, 0x0a, 0x34, 0x31, 0x89, 0xe6, 0x81, 0x1f, 0x11, 0xf4,
+	0x0c, 0xda, 0x11, 0xf3, 0x67, 0x8f, 0x83, 0x09, 0xe1, 0x8b, 0x1e, 0x12, 0xa8, 0x17, 0x4c, 0x08,
+	0x2d, 0x6e, 0x46, 0xa2, 0xc8, 0xb9, 0x4b, 0x0b, 0x48, 0x45, 0x29, 0x82, 0xb6, 0x7a, 0x37, 0x9b,
+	0xa7, 0x7d, 0x7f, 0x01, 0x75, 0xdd, 0x5f, 0x60, 0xf2, 0x89, 0x2f, 0xc5, 0xdd, 0xdc, 0x2e, 0x4b,
+	0x28, 0x98, 0x13, 0xd0, 0x3b, 0xd8, 0x36, 0x17, 0x37, 0xf2, 0x38, 0x76, 0x03, 0xff, 0xda, 0xf1,
+	0x98, 0xe3, 0x6e, 0x36, 0xee, 0x4c, 0xc5, 0x56, 0x11, 0x2e, 0x50, 0xa5, 0x4b, 0xa8, 0x5d, 0x78,
+	0xc1, 0x7d, 0x84, 0xfe, 0x05, 0x70, 0xeb, 0x05, 0xf7, 0xf6, 0x38, 0x58, 0xf8, 0x71, 0xba, 0xd8,
+	0x28, 0xd2, 0xa3, 0x00, 0xfa, 0x0f, 0xd4, 0xa8, 0x10, 0x89, 0x15, 0x76, 0x95, 0x3a, 0x27, 0xe9,
+	0xa7, 0x05, 0xb5, 0xc6, 0x89, 0x4e, 0x6a, 0x40, 0x4d, 0x99, 0xcd, 0xe3, 0x2f, 0x2f, 0xdf, 0x40,
+	0xb7, 0x18, 0x15, 0x35, 0x61, 0xeb, 0x07, 0x5d, 0xd5, 0x84, 0x12, 0x6a, 0x41, 0x6d, 0xa8, 0xc8,
+	0xd7, 0x8a, 0x50, 0x46, 0x00, 0x75, 0x0a, 0x5e, 0x9f, 0x09, 0x95, 0xd3, 0x5f, 0x9b, 0x50, 0x3b,
+	0x3f, 0x37, 0xdd, 0x19, 0x7a, 0x0d, 0x0d, 0x7e, 0x1f, 0xd0, 0x36, 0x2f, 0x81, 0x79, 0x3d, 0x78,
+	0xcc, 0xa5, 0xc2, 0x6d, 0x91, 0x4a, 0xe8, 0x0d, 0xb4, 0x4d, 0x12, 0x67, 0xc3, 0xdb, 0xe1, 0xb4,
+	0x14, 0x38, 0x78, 0x08, 0x48, 0x25, 0xf4, 0x1c, 0xea, 0x03, 0x12, 0xd3, 0x0f, 0x8f, 0x62, 0x88,
+	0xec, 0x85, 0xe1, 0xc5, 0x52, 0x09, 0xbd, 0x02, 0x30, 0x82, 0x7b, 0x12, 0x06, 0xfe, 0x2a, 0x33,
+	0x75, 0x9a, 0x4e, 0x5e, 0x2a, 0xa1, 0x13, 0x68, 0x9b, 0xd3, 0x45, 0x3c, 0x09, 0xee, 0x37, 0xe3,
+	0xff, 0x1f, 0x5a, 0x98, 0xdc, 0x04, 0x41, 0xbc, 0x11, 0xfb, 0x45, 0x92, 0xb2, 0x36, 0x42, 0xab,
+	0x37, 0xe1, 0x20, 0xf7, 0xa2, 0x93, 0x4a, 0xe8, 0x7f, 0xd0, 0x48, 0xa8, 0xd1, 0x03, 0xb7, 0xed,
+	0x25, 0x2d, 0x92, 0x4a, 0xe8, 0x2c, 0x97, 0xf0, 0x7a, 0xbf, 0x6b, 0xf2, 0x38, 0x85, 0x9d, 0xd4,
+	0x48, 0xf6, 0xbc, 0x35, 0x41, 0xd6, 0xd8, 0xbc, 0x83, 0xdd, 0x5c, 0xa0, 0x48, 0xf7, 0x0d, 0x5d,
+	0xcb, 0xc2, 0x2d, 0x5f, 0xae, 0xeb, 0xc3, 0x65, 0x33, 0xd8, 0x38, 0xc5, 0x37, 0xd0, 0xe5, 0x36,
+	0x1b, 0x67, 0xf8, 0x16, 0x84, 0x65, 0x98, 0xbf, 0x94, 0xe0, 0xb7, 0xb0, 0x8d, 0x49, 0x14, 0x3b,
+	0x61, 0xac, 0x38, 0xf3, 0xc0, 0xdb, 0x30, 0xc5, 0x33, 0x68, 0x73, 0xab, 0xfe, 0x74, 0x3c, 0xdf,
+	0xd0, 0xe8, 0x1c, 0xf6, 0x4c, 0x12, 0xeb, 0xfe, 0x82, 0x2d, 0x68, 0xd5, 0x9f, 0xb8, 0x63, 0x87,
+	0x3e, 0x62, 0x68, 0x7f, 0x69, 0x9e, 0xdf, 0xdd, 0x7f, 0xe2, 0xc3, 0x8b, 0xbf, 0xea, 0xa3, 0xb8,
+	0xff, 0xd7, 0xf9, 0x78, 0x05, 0xcd, 0x01, 0x89, 0x93, 0xbd, 0xb1, 0x26, 0xf3, 0xb4, 0xd9, 0x8c,
+	0xc0, 0x7a, 0xbb, 0xd3, 0x9b, 0x3a, 0xfe, 0x1d, 0xa1, 0xeb, 0x2d, 0xf9, 0x1c, 0x45, 0x9c, 0x92,
+	0x5b, 0x78, 0xeb, 0x02, 0x5d, 0xc2, 0x93, 0x01, 0x2b, 0x78, 0xf5, 0xe3, 0x71, 0x4d, 0xdc, 0xa7,
+	0x4b, 0x68, 0x85, 0x2f, 0x95, 0x6e, 0xea, 0xec, 0x3f, 0xce, 0xd9, 0x1f, 0x01, 0x00, 0x00, 0xff,
+	0xff, 0x42, 0x70, 0xbe, 0x17, 0x42, 0x0d, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
 var _ context.Context
-var _ grpc.ClientConn
+var _ grpc.ClientConnInterface
 
 // This is a compile-time assertion to ensure that this generated file
 // is compatible with the grpc package it is being compiled against.
-const _ = grpc.SupportPackageIsVersion4
+const _ = grpc.SupportPackageIsVersion6
 
 // BBSimClient is the client API for BBSim service.
 //
 // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
 type BBSimClient interface {
 	Version(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*VersionNumber, error)
+	SetLogLevel(ctx context.Context, in *LogLevel, opts ...grpc.CallOption) (*LogLevel, error)
 	GetOlt(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Olt, error)
 	PoweronOlt(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Response, error)
 	ShutdownOlt(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Response, error)
 	RebootOlt(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Response, error)
-	GetONUs(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*ONUs, error)
 	GetONU(ctx context.Context, in *ONURequest, opts ...grpc.CallOption) (*ONU, error)
-	SetLogLevel(ctx context.Context, in *LogLevel, opts ...grpc.CallOption) (*LogLevel, error)
+	GetONUs(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*ONUs, error)
 	ShutdownONU(ctx context.Context, in *ONURequest, opts ...grpc.CallOption) (*Response, error)
+	ShutdownAllONUs(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Response, error)
+	ShutdownONUsOnPON(ctx context.Context, in *PONRequest, opts ...grpc.CallOption) (*Response, error)
 	PoweronONU(ctx context.Context, in *ONURequest, opts ...grpc.CallOption) (*Response, error)
+	PoweronAllONUs(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Response, error)
+	PoweronONUsOnPON(ctx context.Context, in *PONRequest, opts ...grpc.CallOption) (*Response, error)
 	RestartEapol(ctx context.Context, in *ONURequest, opts ...grpc.CallOption) (*Response, error)
 	RestartDhcp(ctx context.Context, in *ONURequest, opts ...grpc.CallOption) (*Response, error)
 	SetOnuAlarmIndication(ctx context.Context, in *ONUAlarmRequest, opts ...grpc.CallOption) (*Response, error)
@@ -1157,10 +1206,10 @@
 }
 
 type bBSimClient struct {
-	cc *grpc.ClientConn
+	cc grpc.ClientConnInterface
 }
 
-func NewBBSimClient(cc *grpc.ClientConn) BBSimClient {
+func NewBBSimClient(cc grpc.ClientConnInterface) BBSimClient {
 	return &bBSimClient{cc}
 }
 
@@ -1173,6 +1222,15 @@
 	return out, nil
 }
 
+func (c *bBSimClient) SetLogLevel(ctx context.Context, in *LogLevel, opts ...grpc.CallOption) (*LogLevel, error) {
+	out := new(LogLevel)
+	err := c.cc.Invoke(ctx, "/bbsim.BBSim/SetLogLevel", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 func (c *bBSimClient) GetOlt(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Olt, error) {
 	out := new(Olt)
 	err := c.cc.Invoke(ctx, "/bbsim.BBSim/GetOlt", in, out, opts...)
@@ -1209,15 +1267,6 @@
 	return out, nil
 }
 
-func (c *bBSimClient) GetONUs(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*ONUs, error) {
-	out := new(ONUs)
-	err := c.cc.Invoke(ctx, "/bbsim.BBSim/GetONUs", in, out, opts...)
-	if err != nil {
-		return nil, err
-	}
-	return out, nil
-}
-
 func (c *bBSimClient) GetONU(ctx context.Context, in *ONURequest, opts ...grpc.CallOption) (*ONU, error) {
 	out := new(ONU)
 	err := c.cc.Invoke(ctx, "/bbsim.BBSim/GetONU", in, out, opts...)
@@ -1227,9 +1276,9 @@
 	return out, nil
 }
 
-func (c *bBSimClient) SetLogLevel(ctx context.Context, in *LogLevel, opts ...grpc.CallOption) (*LogLevel, error) {
-	out := new(LogLevel)
-	err := c.cc.Invoke(ctx, "/bbsim.BBSim/SetLogLevel", in, out, opts...)
+func (c *bBSimClient) GetONUs(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*ONUs, error) {
+	out := new(ONUs)
+	err := c.cc.Invoke(ctx, "/bbsim.BBSim/GetONUs", in, out, opts...)
 	if err != nil {
 		return nil, err
 	}
@@ -1245,6 +1294,24 @@
 	return out, nil
 }
 
+func (c *bBSimClient) ShutdownAllONUs(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Response, error) {
+	out := new(Response)
+	err := c.cc.Invoke(ctx, "/bbsim.BBSim/ShutdownAllONUs", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *bBSimClient) ShutdownONUsOnPON(ctx context.Context, in *PONRequest, opts ...grpc.CallOption) (*Response, error) {
+	out := new(Response)
+	err := c.cc.Invoke(ctx, "/bbsim.BBSim/ShutdownONUsOnPON", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 func (c *bBSimClient) PoweronONU(ctx context.Context, in *ONURequest, opts ...grpc.CallOption) (*Response, error) {
 	out := new(Response)
 	err := c.cc.Invoke(ctx, "/bbsim.BBSim/PoweronONU", in, out, opts...)
@@ -1254,6 +1321,24 @@
 	return out, nil
 }
 
+func (c *bBSimClient) PoweronAllONUs(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Response, error) {
+	out := new(Response)
+	err := c.cc.Invoke(ctx, "/bbsim.BBSim/PoweronAllONUs", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *bBSimClient) PoweronONUsOnPON(ctx context.Context, in *PONRequest, opts ...grpc.CallOption) (*Response, error) {
+	out := new(Response)
+	err := c.cc.Invoke(ctx, "/bbsim.BBSim/PoweronONUsOnPON", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 func (c *bBSimClient) RestartEapol(ctx context.Context, in *ONURequest, opts ...grpc.CallOption) (*Response, error) {
 	out := new(Response)
 	err := c.cc.Invoke(ctx, "/bbsim.BBSim/RestartEapol", in, out, opts...)
@@ -1320,15 +1405,19 @@
 // BBSimServer is the server API for BBSim service.
 type BBSimServer interface {
 	Version(context.Context, *Empty) (*VersionNumber, error)
+	SetLogLevel(context.Context, *LogLevel) (*LogLevel, error)
 	GetOlt(context.Context, *Empty) (*Olt, error)
 	PoweronOlt(context.Context, *Empty) (*Response, error)
 	ShutdownOlt(context.Context, *Empty) (*Response, error)
 	RebootOlt(context.Context, *Empty) (*Response, error)
-	GetONUs(context.Context, *Empty) (*ONUs, error)
 	GetONU(context.Context, *ONURequest) (*ONU, error)
-	SetLogLevel(context.Context, *LogLevel) (*LogLevel, error)
+	GetONUs(context.Context, *Empty) (*ONUs, error)
 	ShutdownONU(context.Context, *ONURequest) (*Response, error)
+	ShutdownAllONUs(context.Context, *Empty) (*Response, error)
+	ShutdownONUsOnPON(context.Context, *PONRequest) (*Response, error)
 	PoweronONU(context.Context, *ONURequest) (*Response, error)
+	PoweronAllONUs(context.Context, *Empty) (*Response, error)
+	PoweronONUsOnPON(context.Context, *PONRequest) (*Response, error)
 	RestartEapol(context.Context, *ONURequest) (*Response, error)
 	RestartDhcp(context.Context, *ONURequest) (*Response, error)
 	SetOnuAlarmIndication(context.Context, *ONUAlarmRequest) (*Response, error)
@@ -1338,6 +1427,74 @@
 	GetOnuTrafficSchedulers(context.Context, *ONURequest) (*ONUTrafficSchedulers, error)
 }
 
+// UnimplementedBBSimServer can be embedded to have forward compatible implementations.
+type UnimplementedBBSimServer struct {
+}
+
+func (*UnimplementedBBSimServer) Version(ctx context.Context, req *Empty) (*VersionNumber, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method Version not implemented")
+}
+func (*UnimplementedBBSimServer) SetLogLevel(ctx context.Context, req *LogLevel) (*LogLevel, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method SetLogLevel not implemented")
+}
+func (*UnimplementedBBSimServer) GetOlt(ctx context.Context, req *Empty) (*Olt, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetOlt not implemented")
+}
+func (*UnimplementedBBSimServer) PoweronOlt(ctx context.Context, req *Empty) (*Response, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method PoweronOlt not implemented")
+}
+func (*UnimplementedBBSimServer) ShutdownOlt(ctx context.Context, req *Empty) (*Response, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ShutdownOlt not implemented")
+}
+func (*UnimplementedBBSimServer) RebootOlt(ctx context.Context, req *Empty) (*Response, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method RebootOlt not implemented")
+}
+func (*UnimplementedBBSimServer) GetONU(ctx context.Context, req *ONURequest) (*ONU, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetONU not implemented")
+}
+func (*UnimplementedBBSimServer) GetONUs(ctx context.Context, req *Empty) (*ONUs, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetONUs not implemented")
+}
+func (*UnimplementedBBSimServer) ShutdownONU(ctx context.Context, req *ONURequest) (*Response, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ShutdownONU not implemented")
+}
+func (*UnimplementedBBSimServer) ShutdownAllONUs(ctx context.Context, req *Empty) (*Response, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ShutdownAllONUs not implemented")
+}
+func (*UnimplementedBBSimServer) ShutdownONUsOnPON(ctx context.Context, req *PONRequest) (*Response, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ShutdownONUsOnPON not implemented")
+}
+func (*UnimplementedBBSimServer) PoweronONU(ctx context.Context, req *ONURequest) (*Response, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method PoweronONU not implemented")
+}
+func (*UnimplementedBBSimServer) PoweronAllONUs(ctx context.Context, req *Empty) (*Response, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method PoweronAllONUs not implemented")
+}
+func (*UnimplementedBBSimServer) PoweronONUsOnPON(ctx context.Context, req *PONRequest) (*Response, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method PoweronONUsOnPON not implemented")
+}
+func (*UnimplementedBBSimServer) RestartEapol(ctx context.Context, req *ONURequest) (*Response, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method RestartEapol not implemented")
+}
+func (*UnimplementedBBSimServer) RestartDhcp(ctx context.Context, req *ONURequest) (*Response, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method RestartDhcp not implemented")
+}
+func (*UnimplementedBBSimServer) SetOnuAlarmIndication(ctx context.Context, req *ONUAlarmRequest) (*Response, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method SetOnuAlarmIndication not implemented")
+}
+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")
+}
+func (*UnimplementedBBSimServer) GetOnuTrafficSchedulers(ctx context.Context, req *ONURequest) (*ONUTrafficSchedulers, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetOnuTrafficSchedulers not implemented")
+}
+
 func RegisterBBSimServer(s *grpc.Server, srv BBSimServer) {
 	s.RegisterService(&_BBSim_serviceDesc, srv)
 }
@@ -1360,6 +1517,24 @@
 	return interceptor(ctx, in, info, handler)
 }
 
+func _BBSim_SetLogLevel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(LogLevel)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BBSimServer).SetLogLevel(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/bbsim.BBSim/SetLogLevel",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BBSimServer).SetLogLevel(ctx, req.(*LogLevel))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 func _BBSim_GetOlt_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 	in := new(Empty)
 	if err := dec(in); err != nil {
@@ -1432,24 +1607,6 @@
 	return interceptor(ctx, in, info, handler)
 }
 
-func _BBSim_GetONUs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
-	in := new(Empty)
-	if err := dec(in); err != nil {
-		return nil, err
-	}
-	if interceptor == nil {
-		return srv.(BBSimServer).GetONUs(ctx, in)
-	}
-	info := &grpc.UnaryServerInfo{
-		Server:     srv,
-		FullMethod: "/bbsim.BBSim/GetONUs",
-	}
-	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-		return srv.(BBSimServer).GetONUs(ctx, req.(*Empty))
-	}
-	return interceptor(ctx, in, info, handler)
-}
-
 func _BBSim_GetONU_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 	in := new(ONURequest)
 	if err := dec(in); err != nil {
@@ -1468,20 +1625,20 @@
 	return interceptor(ctx, in, info, handler)
 }
 
-func _BBSim_SetLogLevel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
-	in := new(LogLevel)
+func _BBSim_GetONUs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(Empty)
 	if err := dec(in); err != nil {
 		return nil, err
 	}
 	if interceptor == nil {
-		return srv.(BBSimServer).SetLogLevel(ctx, in)
+		return srv.(BBSimServer).GetONUs(ctx, in)
 	}
 	info := &grpc.UnaryServerInfo{
 		Server:     srv,
-		FullMethod: "/bbsim.BBSim/SetLogLevel",
+		FullMethod: "/bbsim.BBSim/GetONUs",
 	}
 	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-		return srv.(BBSimServer).SetLogLevel(ctx, req.(*LogLevel))
+		return srv.(BBSimServer).GetONUs(ctx, req.(*Empty))
 	}
 	return interceptor(ctx, in, info, handler)
 }
@@ -1504,6 +1661,42 @@
 	return interceptor(ctx, in, info, handler)
 }
 
+func _BBSim_ShutdownAllONUs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BBSimServer).ShutdownAllONUs(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/bbsim.BBSim/ShutdownAllONUs",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BBSimServer).ShutdownAllONUs(ctx, req.(*Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _BBSim_ShutdownONUsOnPON_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(PONRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BBSimServer).ShutdownONUsOnPON(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/bbsim.BBSim/ShutdownONUsOnPON",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BBSimServer).ShutdownONUsOnPON(ctx, req.(*PONRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 func _BBSim_PoweronONU_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 	in := new(ONURequest)
 	if err := dec(in); err != nil {
@@ -1522,6 +1715,42 @@
 	return interceptor(ctx, in, info, handler)
 }
 
+func _BBSim_PoweronAllONUs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BBSimServer).PoweronAllONUs(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/bbsim.BBSim/PoweronAllONUs",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BBSimServer).PoweronAllONUs(ctx, req.(*Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _BBSim_PoweronONUsOnPON_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(PONRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(BBSimServer).PoweronONUsOnPON(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/bbsim.BBSim/PoweronONUsOnPON",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BBSimServer).PoweronONUsOnPON(ctx, req.(*PONRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 func _BBSim_RestartEapol_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 	in := new(ONURequest)
 	if err := dec(in); err != nil {
@@ -1657,6 +1886,10 @@
 			Handler:    _BBSim_Version_Handler,
 		},
 		{
+			MethodName: "SetLogLevel",
+			Handler:    _BBSim_SetLogLevel_Handler,
+		},
+		{
 			MethodName: "GetOlt",
 			Handler:    _BBSim_GetOlt_Handler,
 		},
@@ -1673,26 +1906,38 @@
 			Handler:    _BBSim_RebootOlt_Handler,
 		},
 		{
-			MethodName: "GetONUs",
-			Handler:    _BBSim_GetONUs_Handler,
-		},
-		{
 			MethodName: "GetONU",
 			Handler:    _BBSim_GetONU_Handler,
 		},
 		{
-			MethodName: "SetLogLevel",
-			Handler:    _BBSim_SetLogLevel_Handler,
+			MethodName: "GetONUs",
+			Handler:    _BBSim_GetONUs_Handler,
 		},
 		{
 			MethodName: "ShutdownONU",
 			Handler:    _BBSim_ShutdownONU_Handler,
 		},
 		{
+			MethodName: "ShutdownAllONUs",
+			Handler:    _BBSim_ShutdownAllONUs_Handler,
+		},
+		{
+			MethodName: "ShutdownONUsOnPON",
+			Handler:    _BBSim_ShutdownONUsOnPON_Handler,
+		},
+		{
 			MethodName: "PoweronONU",
 			Handler:    _BBSim_PoweronONU_Handler,
 		},
 		{
+			MethodName: "PoweronAllONUs",
+			Handler:    _BBSim_PoweronAllONUs_Handler,
+		},
+		{
+			MethodName: "PoweronONUsOnPON",
+			Handler:    _BBSim_PoweronONUsOnPON_Handler,
+		},
+		{
 			MethodName: "RestartEapol",
 			Handler:    _BBSim_RestartEapol_Handler,
 		},
diff --git a/api/bbsim/bbsim.pb.gw.go b/api/bbsim/bbsim.pb.gw.go
index b96f904..468670f 100644
--- a/api/bbsim/bbsim.pb.gw.go
+++ b/api/bbsim/bbsim.pb.gw.go
@@ -13,6 +13,7 @@
 	"io"
 	"net/http"
 
+	"github.com/golang/protobuf/descriptor"
 	"github.com/golang/protobuf/proto"
 	"github.com/grpc-ecosystem/grpc-gateway/runtime"
 	"github.com/grpc-ecosystem/grpc-gateway/utilities"
@@ -22,11 +23,13 @@
 	"google.golang.org/grpc/status"
 )
 
+// Suppress "imported and not used" errors
 var _ codes.Code
 var _ io.Reader
 var _ status.Status
 var _ = runtime.String
 var _ = utilities.NewDoubleArray
+var _ = descriptor.ForMessage
 
 func request_BBSim_Version_0(ctx context.Context, marshaler runtime.Marshaler, client BBSimClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
 	var protoReq Empty
@@ -82,24 +85,6 @@
 
 }
 
-func request_BBSim_GetONUs_0(ctx context.Context, marshaler runtime.Marshaler, client BBSimClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
-	var protoReq Empty
-	var metadata runtime.ServerMetadata
-
-	msg, err := client.GetONUs(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
-	return msg, metadata, err
-
-}
-
-func local_request_BBSim_GetONUs_0(ctx context.Context, marshaler runtime.Marshaler, server BBSimServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
-	var protoReq Empty
-	var metadata runtime.ServerMetadata
-
-	msg, err := server.GetONUs(ctx, &protoReq)
-	return msg, metadata, err
-
-}
-
 func request_BBSim_GetONU_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
@@ -154,6 +139,24 @@
 
 }
 
+func request_BBSim_GetONUs_0(ctx context.Context, marshaler runtime.Marshaler, client BBSimClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq Empty
+	var metadata runtime.ServerMetadata
+
+	msg, err := client.GetONUs(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+	return msg, metadata, err
+
+}
+
+func local_request_BBSim_GetONUs_0(ctx context.Context, marshaler runtime.Marshaler, server BBSimServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq Empty
+	var metadata runtime.ServerMetadata
+
+	msg, err := server.GetONUs(ctx, &protoReq)
+	return msg, metadata, err
+
+}
+
 func request_BBSim_ShutdownONU_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
@@ -208,6 +211,78 @@
 
 }
 
+func request_BBSim_ShutdownAllONUs_0(ctx context.Context, marshaler runtime.Marshaler, client BBSimClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq Empty
+	var metadata runtime.ServerMetadata
+
+	msg, err := client.ShutdownAllONUs(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+	return msg, metadata, err
+
+}
+
+func local_request_BBSim_ShutdownAllONUs_0(ctx context.Context, marshaler runtime.Marshaler, server BBSimServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq Empty
+	var metadata runtime.ServerMetadata
+
+	msg, err := server.ShutdownAllONUs(ctx, &protoReq)
+	return msg, metadata, err
+
+}
+
+func request_BBSim_ShutdownONUsOnPON_0(ctx context.Context, marshaler runtime.Marshaler, client BBSimClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq PONRequest
+	var metadata runtime.ServerMetadata
+
+	var (
+		val string
+		ok  bool
+		err error
+		_   = err
+	)
+
+	val, ok = pathParams["PonPortId"]
+	if !ok {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "PonPortId")
+	}
+
+	protoReq.PonPortId, err = runtime.Uint32(val)
+
+	if err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "PonPortId", err)
+	}
+
+	msg, err := client.ShutdownONUsOnPON(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+	return msg, metadata, err
+
+}
+
+func local_request_BBSim_ShutdownONUsOnPON_0(ctx context.Context, marshaler runtime.Marshaler, server BBSimServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq PONRequest
+	var metadata runtime.ServerMetadata
+
+	var (
+		val string
+		ok  bool
+		err error
+		_   = err
+	)
+
+	val, ok = pathParams["PonPortId"]
+	if !ok {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "PonPortId")
+	}
+
+	protoReq.PonPortId, err = runtime.Uint32(val)
+
+	if err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "PonPortId", err)
+	}
+
+	msg, err := server.ShutdownONUsOnPON(ctx, &protoReq)
+	return msg, metadata, err
+
+}
+
 func request_BBSim_PoweronONU_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
@@ -262,6 +337,78 @@
 
 }
 
+func request_BBSim_PoweronAllONUs_0(ctx context.Context, marshaler runtime.Marshaler, client BBSimClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq Empty
+	var metadata runtime.ServerMetadata
+
+	msg, err := client.PoweronAllONUs(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+	return msg, metadata, err
+
+}
+
+func local_request_BBSim_PoweronAllONUs_0(ctx context.Context, marshaler runtime.Marshaler, server BBSimServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq Empty
+	var metadata runtime.ServerMetadata
+
+	msg, err := server.PoweronAllONUs(ctx, &protoReq)
+	return msg, metadata, err
+
+}
+
+func request_BBSim_PoweronONUsOnPON_0(ctx context.Context, marshaler runtime.Marshaler, client BBSimClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq PONRequest
+	var metadata runtime.ServerMetadata
+
+	var (
+		val string
+		ok  bool
+		err error
+		_   = err
+	)
+
+	val, ok = pathParams["PonPortId"]
+	if !ok {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "PonPortId")
+	}
+
+	protoReq.PonPortId, err = runtime.Uint32(val)
+
+	if err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "PonPortId", err)
+	}
+
+	msg, err := client.PoweronONUsOnPON(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
+	return msg, metadata, err
+
+}
+
+func local_request_BBSim_PoweronONUsOnPON_0(ctx context.Context, marshaler runtime.Marshaler, server BBSimServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
+	var protoReq PONRequest
+	var metadata runtime.ServerMetadata
+
+	var (
+		val string
+		ok  bool
+		err error
+		_   = err
+	)
+
+	val, ok = pathParams["PonPortId"]
+	if !ok {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "PonPortId")
+	}
+
+	protoReq.PonPortId, err = runtime.Uint32(val)
+
+	if err != nil {
+		return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "PonPortId", err)
+	}
+
+	msg, err := server.PoweronONUsOnPON(ctx, &protoReq)
+	return msg, metadata, err
+
+}
+
 var (
 	filter_BBSim_SetOnuAlarmIndication_0 = &utilities.DoubleArray{Encoding: map[string]int{"SerialNumber": 0, "AlarmType": 1, "Status": 2}, Base: []int{1, 1, 2, 3, 0, 0, 0}, Check: []int{0, 1, 1, 1, 2, 3, 4}}
 )
@@ -679,26 +826,6 @@
 
 	})
 
-	mux.Handle("GET", pattern_BBSim_GetONUs_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_GetONUs_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_GetONUs_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
-	})
-
 	mux.Handle("GET", pattern_BBSim_GetONU_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
 		ctx, cancel := context.WithCancel(req.Context())
 		defer cancel()
@@ -719,6 +846,26 @@
 
 	})
 
+	mux.Handle("GET", pattern_BBSim_GetONUs_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_GetONUs_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_GetONUs_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
 	mux.Handle("DELETE", pattern_BBSim_ShutdownONU_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
 		ctx, cancel := context.WithCancel(req.Context())
 		defer cancel()
@@ -739,6 +886,46 @@
 
 	})
 
+	mux.Handle("DELETE", pattern_BBSim_ShutdownAllONUs_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_ShutdownAllONUs_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_ShutdownAllONUs_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	mux.Handle("DELETE", pattern_BBSim_ShutdownONUsOnPON_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_ShutdownONUsOnPON_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_ShutdownONUsOnPON_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
 	mux.Handle("POST", pattern_BBSim_PoweronONU_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
 		ctx, cancel := context.WithCancel(req.Context())
 		defer cancel()
@@ -759,6 +946,46 @@
 
 	})
 
+	mux.Handle("POST", pattern_BBSim_PoweronAllONUs_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_PoweronAllONUs_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_PoweronAllONUs_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	mux.Handle("POST", pattern_BBSim_PoweronONUsOnPON_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_PoweronONUsOnPON_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_PoweronONUsOnPON_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
 	mux.Handle("POST", pattern_BBSim_SetOnuAlarmIndication_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
 		ctx, cancel := context.WithCancel(req.Context())
 		defer cancel()
@@ -960,26 +1187,6 @@
 
 	})
 
-	mux.Handle("GET", pattern_BBSim_GetONUs_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_GetONUs_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_GetONUs_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
-
-	})
-
 	mux.Handle("GET", pattern_BBSim_GetONU_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
 		ctx, cancel := context.WithCancel(req.Context())
 		defer cancel()
@@ -1000,6 +1207,26 @@
 
 	})
 
+	mux.Handle("GET", pattern_BBSim_GetONUs_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_GetONUs_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_GetONUs_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
 	mux.Handle("DELETE", pattern_BBSim_ShutdownONU_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
 		ctx, cancel := context.WithCancel(req.Context())
 		defer cancel()
@@ -1020,6 +1247,46 @@
 
 	})
 
+	mux.Handle("DELETE", pattern_BBSim_ShutdownAllONUs_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_ShutdownAllONUs_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_ShutdownAllONUs_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	mux.Handle("DELETE", pattern_BBSim_ShutdownONUsOnPON_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_ShutdownONUsOnPON_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_ShutdownONUsOnPON_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
 	mux.Handle("POST", pattern_BBSim_PoweronONU_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
 		ctx, cancel := context.WithCancel(req.Context())
 		defer cancel()
@@ -1040,6 +1307,46 @@
 
 	})
 
+	mux.Handle("POST", pattern_BBSim_PoweronAllONUs_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_PoweronAllONUs_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_PoweronAllONUs_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
+	mux.Handle("POST", pattern_BBSim_PoweronONUsOnPON_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_PoweronONUsOnPON_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_PoweronONUsOnPON_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
+
+	})
+
 	mux.Handle("POST", pattern_BBSim_SetOnuAlarmIndication_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
 		ctx, cancel := context.WithCancel(req.Context())
 		defer cancel()
@@ -1150,14 +1457,22 @@
 
 	pattern_BBSim_GetOlt_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "olt", "status"}, "", runtime.AssumeColonVerbOpt(true)))
 
-	pattern_BBSim_GetONUs_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "olt", "onus"}, "", runtime.AssumeColonVerbOpt(true)))
-
 	pattern_BBSim_GetONU_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "olt", "onus", "SerialNumber"}, "", runtime.AssumeColonVerbOpt(true)))
 
+	pattern_BBSim_GetONUs_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "olt", "onus"}, "", runtime.AssumeColonVerbOpt(true)))
+
 	pattern_BBSim_ShutdownONU_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "olt", "onus", "SerialNumber"}, "", runtime.AssumeColonVerbOpt(true)))
 
+	pattern_BBSim_ShutdownAllONUs_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "olt", "onus"}, "", runtime.AssumeColonVerbOpt(true)))
+
+	pattern_BBSim_ShutdownONUsOnPON_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"v1", "olt", "port", "PonPortId", "onus"}, "", runtime.AssumeColonVerbOpt(true)))
+
 	pattern_BBSim_PoweronONU_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "olt", "onus", "SerialNumber"}, "", runtime.AssumeColonVerbOpt(true)))
 
+	pattern_BBSim_PoweronAllONUs_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "olt", "onus"}, "", runtime.AssumeColonVerbOpt(true)))
+
+	pattern_BBSim_PoweronONUsOnPON_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"v1", "olt", "port", "PonPortId", "onus"}, "", runtime.AssumeColonVerbOpt(true)))
+
 	pattern_BBSim_SetOnuAlarmIndication_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6}, []string{"v1", "olt", "onus", "SerialNumber", "alarms", "AlarmType", "Status"}, "", runtime.AssumeColonVerbOpt(true)))
 
 	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)))
@@ -1176,14 +1491,22 @@
 
 	forward_BBSim_GetOlt_1 = runtime.ForwardResponseMessage
 
-	forward_BBSim_GetONUs_0 = runtime.ForwardResponseMessage
-
 	forward_BBSim_GetONU_0 = runtime.ForwardResponseMessage
 
+	forward_BBSim_GetONUs_0 = runtime.ForwardResponseMessage
+
 	forward_BBSim_ShutdownONU_0 = runtime.ForwardResponseMessage
 
+	forward_BBSim_ShutdownAllONUs_0 = runtime.ForwardResponseMessage
+
+	forward_BBSim_ShutdownONUsOnPON_0 = runtime.ForwardResponseMessage
+
 	forward_BBSim_PoweronONU_0 = runtime.ForwardResponseMessage
 
+	forward_BBSim_PoweronAllONUs_0 = runtime.ForwardResponseMessage
+
+	forward_BBSim_PoweronONUsOnPON_0 = runtime.ForwardResponseMessage
+
 	forward_BBSim_SetOnuAlarmIndication_0 = runtime.ForwardResponseMessage
 
 	forward_BBSim_SetOltAlarmIndication_0 = runtime.ForwardResponseMessage
diff --git a/api/bbsim/bbsim.proto b/api/bbsim/bbsim.proto
index 5167f2c..adc5b31 100644
--- a/api/bbsim/bbsim.proto
+++ b/api/bbsim/bbsim.proto
@@ -65,6 +65,10 @@
     string SerialNumber = 1;
 }
 
+message PONRequest {
+    uint32 PonPortId = 1;
+}
+
 // Alarms
 
 message AlarmType {
@@ -157,15 +161,24 @@
 
 service BBSim {
     rpc Version(Empty) returns (VersionNumber) {}
+    rpc SetLogLevel(LogLevel) returns (LogLevel) {}
+
     rpc GetOlt(Empty) returns (Olt) {}
     rpc PoweronOlt(Empty) returns (Response) {}
     rpc ShutdownOlt(Empty) returns (Response) {}
     rpc RebootOlt(Empty) returns (Response) {}
-    rpc GetONUs(Empty) returns (ONUs) {}
+
     rpc GetONU(ONURequest) returns (ONU) {}
-    rpc SetLogLevel(LogLevel) returns (LogLevel) {}
+    rpc GetONUs(Empty) returns (ONUs) {}
+
     rpc ShutdownONU (ONURequest) returns (Response) {}
+    rpc ShutdownAllONUs (Empty) returns (Response) {}
+    rpc ShutdownONUsOnPON(PONRequest) returns (Response) {}
+
     rpc PoweronONU (ONURequest) returns (Response) {}
+    rpc PoweronAllONUs (Empty) returns (Response) {}
+    rpc PoweronONUsOnPON(PONRequest) returns (Response) {}
+
     rpc RestartEapol (ONURequest) returns (Response) {}
     rpc RestartDhcp (ONURequest) returns (Response) {}
     rpc SetOnuAlarmIndication (ONUAlarmRequest) returns (Response) {}
diff --git a/api/bbsim/bbsim.yaml b/api/bbsim/bbsim.yaml
index 0c23240..2661cfb 100644
--- a/api/bbsim/bbsim.yaml
+++ b/api/bbsim/bbsim.yaml
@@ -23,21 +23,34 @@
     get: "/v1/olt"
     additional_bindings:
       - get: "/v1/olt/status"
+
   - selector: bbsim.BBSim.GetONUs
     get: "/v1/olt/onus"
   - selector: bbsim.BBSim.GetONU
     get: "/v1/olt/onus/{SerialNumber}"
+
   - selector: bbsim.BBSim.ShutdownONU
     delete: "/v1/olt/onus/{SerialNumber}"
+  - selector: bbsim.BBSim.ShutdownONUsOnPON
+    delete: "/v1/olt/port/{PonPortId}/onus"
+  - selector: bbsim.BBSim.ShutdownAllONUs
+    delete: "/v1/olt/onus"
+
   - selector: bbsim.BBSim.PoweronONU
     post: "/v1/olt/onus/{SerialNumber}"
+  - selector: bbsim.BBSim.PoweronONUsOnPON
+    post: "/v1/olt/port/{PonPortId}/onus"
+  - selector: bbsim.BBSim.PoweronAllONUs
+    post: "/v1/olt/onus"
+
   - 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
     get: "/v1/olt/onus/{SerialNumber}/trafficschedulers"
+
+  - selector: bbsim.BBSim.SetOnuAlarmIndication
+    post: "/v1/olt/onus/{SerialNumber}/alarms/{AlarmType}/{Status}"
   - selector: bbsim.BBSim.SetOltAlarmIndication
     post: "/v1/olt/ports/{InterfaceType}/{InterfaceID}/alarms/los/{Status}"
