diff --git a/VERSION b/VERSION
index 943f9cb..0ef074f 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.7.1
+1.8.0-dev
diff --git a/api/bbsim/bbsim.pb.go b/api/bbsim/bbsim.pb.go
index 881187c..c5f10a2 100644
--- a/api/bbsim/bbsim.pb.go
+++ b/api/bbsim/bbsim.pb.go
@@ -159,7 +159,7 @@
 }
 
 func (AlarmType_Types) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{14, 0}
+	return fileDescriptor_ef7750073d18011b, []int{16, 0}
 }
 
 type PONPort struct {
@@ -602,6 +602,7 @@
 	ImageSoftwareReceivedSections int32      `protobuf:"varint,12,opt,name=ImageSoftwareReceivedSections,proto3" json:"ImageSoftwareReceivedSections,omitempty"`
 	ActiveImageEntityId           int32      `protobuf:"varint,13,opt,name=ActiveImageEntityId,proto3" json:"ActiveImageEntityId,omitempty"`
 	CommittedImageEntityId        int32      `protobuf:"varint,14,opt,name=CommittedImageEntityId,proto3" json:"CommittedImageEntityId,omitempty"`
+	Unis                          []*UNI     `protobuf:"bytes,15,rep,name=unis,proto3" json:"unis,omitempty"`
 	XXX_NoUnkeyedLiteral          struct{}   `json:"-"`
 	XXX_unrecognized              []byte     `json:"-"`
 	XXX_sizecache                 int32      `json:"-"`
@@ -716,6 +717,84 @@
 	return 0
 }
 
+func (m *ONU) GetUnis() []*UNI {
+	if m != nil {
+		return m.Unis
+	}
+	return nil
+}
+
+type UNI struct {
+	ID                   int32    `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"`
+	OnuID                int32    `protobuf:"varint,2,opt,name=OnuID,proto3" json:"OnuID,omitempty"`
+	OnuSn                string   `protobuf:"bytes,3,opt,name=OnuSn,proto3" json:"OnuSn,omitempty"`
+	MeID                 uint32   `protobuf:"varint,4,opt,name=MeID,proto3" json:"MeID,omitempty"`
+	OperState            string   `protobuf:"bytes,5,opt,name=OperState,proto3" json:"OperState,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UNI) Reset()         { *m = UNI{} }
+func (m *UNI) String() string { return proto.CompactTextString(m) }
+func (*UNI) ProtoMessage()    {}
+func (*UNI) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ef7750073d18011b, []int{8}
+}
+
+func (m *UNI) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UNI.Unmarshal(m, b)
+}
+func (m *UNI) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UNI.Marshal(b, m, deterministic)
+}
+func (m *UNI) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UNI.Merge(m, src)
+}
+func (m *UNI) XXX_Size() int {
+	return xxx_messageInfo_UNI.Size(m)
+}
+func (m *UNI) XXX_DiscardUnknown() {
+	xxx_messageInfo_UNI.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UNI proto.InternalMessageInfo
+
+func (m *UNI) GetID() int32 {
+	if m != nil {
+		return m.ID
+	}
+	return 0
+}
+
+func (m *UNI) GetOnuID() int32 {
+	if m != nil {
+		return m.OnuID
+	}
+	return 0
+}
+
+func (m *UNI) GetOnuSn() string {
+	if m != nil {
+		return m.OnuSn
+	}
+	return ""
+}
+
+func (m *UNI) GetMeID() uint32 {
+	if m != nil {
+		return m.MeID
+	}
+	return 0
+}
+
+func (m *UNI) GetOperState() string {
+	if m != nil {
+		return m.OperState
+	}
+	return ""
+}
+
 type Service struct {
 	Name                 string   `protobuf:"bytes,1,opt,name=Name,proto3" json:"Name,omitempty"`
 	HwAddress            string   `protobuf:"bytes,2,opt,name=HwAddress,proto3" json:"HwAddress,omitempty"`
@@ -739,7 +818,7 @@
 func (m *Service) String() string { return proto.CompactTextString(m) }
 func (*Service) ProtoMessage()    {}
 func (*Service) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{8}
+	return fileDescriptor_ef7750073d18011b, []int{9}
 }
 
 func (m *Service) XXX_Unmarshal(b []byte) error {
@@ -862,7 +941,7 @@
 func (m *ONUTrafficSchedulers) String() string { return proto.CompactTextString(m) }
 func (*ONUTrafficSchedulers) ProtoMessage()    {}
 func (*ONUTrafficSchedulers) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{9}
+	return fileDescriptor_ef7750073d18011b, []int{10}
 }
 
 func (m *ONUTrafficSchedulers) XXX_Unmarshal(b []byte) error {
@@ -901,7 +980,7 @@
 func (m *ONUs) String() string { return proto.CompactTextString(m) }
 func (*ONUs) ProtoMessage()    {}
 func (*ONUs) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{10}
+	return fileDescriptor_ef7750073d18011b, []int{11}
 }
 
 func (m *ONUs) XXX_Unmarshal(b []byte) error {
@@ -940,7 +1019,7 @@
 func (m *Services) String() string { return proto.CompactTextString(m) }
 func (*Services) ProtoMessage()    {}
 func (*Services) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{11}
+	return fileDescriptor_ef7750073d18011b, []int{12}
 }
 
 func (m *Services) XXX_Unmarshal(b []byte) error {
@@ -968,6 +1047,45 @@
 	return nil
 }
 
+type UNIs struct {
+	Items                []*UNI   `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UNIs) Reset()         { *m = UNIs{} }
+func (m *UNIs) String() string { return proto.CompactTextString(m) }
+func (*UNIs) ProtoMessage()    {}
+func (*UNIs) Descriptor() ([]byte, []int) {
+	return fileDescriptor_ef7750073d18011b, []int{13}
+}
+
+func (m *UNIs) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UNIs.Unmarshal(m, b)
+}
+func (m *UNIs) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UNIs.Marshal(b, m, deterministic)
+}
+func (m *UNIs) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UNIs.Merge(m, src)
+}
+func (m *UNIs) XXX_Size() int {
+	return xxx_messageInfo_UNIs.Size(m)
+}
+func (m *UNIs) XXX_DiscardUnknown() {
+	xxx_messageInfo_UNIs.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UNIs proto.InternalMessageInfo
+
+func (m *UNIs) GetItems() []*UNI {
+	if m != nil {
+		return m.Items
+	}
+	return nil
+}
+
 type ONURequest struct {
 	SerialNumber         string   `protobuf:"bytes,1,opt,name=SerialNumber,proto3" json:"SerialNumber,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
@@ -979,7 +1097,7 @@
 func (m *ONURequest) String() string { return proto.CompactTextString(m) }
 func (*ONURequest) ProtoMessage()    {}
 func (*ONURequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{12}
+	return fileDescriptor_ef7750073d18011b, []int{14}
 }
 
 func (m *ONURequest) XXX_Unmarshal(b []byte) error {
@@ -1018,7 +1136,7 @@
 func (m *PONRequest) String() string { return proto.CompactTextString(m) }
 func (*PONRequest) ProtoMessage()    {}
 func (*PONRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{13}
+	return fileDescriptor_ef7750073d18011b, []int{15}
 }
 
 func (m *PONRequest) XXX_Unmarshal(b []byte) error {
@@ -1056,7 +1174,7 @@
 func (m *AlarmType) String() string { return proto.CompactTextString(m) }
 func (*AlarmType) ProtoMessage()    {}
 func (*AlarmType) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{14}
+	return fileDescriptor_ef7750073d18011b, []int{16}
 }
 
 func (m *AlarmType) XXX_Unmarshal(b []byte) error {
@@ -1089,7 +1207,7 @@
 func (m *AlarmParameter) String() string { return proto.CompactTextString(m) }
 func (*AlarmParameter) ProtoMessage()    {}
 func (*AlarmParameter) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{15}
+	return fileDescriptor_ef7750073d18011b, []int{17}
 }
 
 func (m *AlarmParameter) XXX_Unmarshal(b []byte) error {
@@ -1141,7 +1259,7 @@
 func (m *ONUAlarmRequest) String() string { return proto.CompactTextString(m) }
 func (*ONUAlarmRequest) ProtoMessage()    {}
 func (*ONUAlarmRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{16}
+	return fileDescriptor_ef7750073d18011b, []int{18}
 }
 
 func (m *ONUAlarmRequest) XXX_Unmarshal(b []byte) error {
@@ -1204,7 +1322,7 @@
 func (m *OLTAlarmRequest) String() string { return proto.CompactTextString(m) }
 func (*OLTAlarmRequest) ProtoMessage()    {}
 func (*OLTAlarmRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{17}
+	return fileDescriptor_ef7750073d18011b, []int{19}
 }
 
 func (m *OLTAlarmRequest) XXX_Unmarshal(b []byte) error {
@@ -1260,7 +1378,7 @@
 func (m *VersionNumber) String() string { return proto.CompactTextString(m) }
 func (*VersionNumber) ProtoMessage()    {}
 func (*VersionNumber) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{18}
+	return fileDescriptor_ef7750073d18011b, []int{20}
 }
 
 func (m *VersionNumber) XXX_Unmarshal(b []byte) error {
@@ -1321,7 +1439,7 @@
 func (m *LogLevel) String() string { return proto.CompactTextString(m) }
 func (*LogLevel) ProtoMessage()    {}
 func (*LogLevel) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{19}
+	return fileDescriptor_ef7750073d18011b, []int{21}
 }
 
 func (m *LogLevel) XXX_Unmarshal(b []byte) error {
@@ -1368,7 +1486,7 @@
 func (m *Response) String() string { return proto.CompactTextString(m) }
 func (*Response) ProtoMessage()    {}
 func (*Response) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{20}
+	return fileDescriptor_ef7750073d18011b, []int{22}
 }
 
 func (m *Response) XXX_Unmarshal(b []byte) error {
@@ -1416,7 +1534,7 @@
 func (m *IgmpRequest) String() string { return proto.CompactTextString(m) }
 func (*IgmpRequest) ProtoMessage()    {}
 func (*IgmpRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{21}
+	return fileDescriptor_ef7750073d18011b, []int{23}
 }
 
 func (m *IgmpRequest) XXX_Unmarshal(b []byte) error {
@@ -1470,7 +1588,7 @@
 func (m *Flows) String() string { return proto.CompactTextString(m) }
 func (*Flows) ProtoMessage()    {}
 func (*Flows) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{22}
+	return fileDescriptor_ef7750073d18011b, []int{24}
 }
 
 func (m *Flows) XXX_Unmarshal(b []byte) error {
@@ -1516,7 +1634,7 @@
 func (m *Timeout) String() string { return proto.CompactTextString(m) }
 func (*Timeout) ProtoMessage()    {}
 func (*Timeout) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{23}
+	return fileDescriptor_ef7750073d18011b, []int{25}
 }
 
 func (m *Timeout) XXX_Unmarshal(b []byte) error {
@@ -1554,7 +1672,7 @@
 func (m *Empty) String() string { return proto.CompactTextString(m) }
 func (*Empty) ProtoMessage()    {}
 func (*Empty) Descriptor() ([]byte, []int) {
-	return fileDescriptor_ef7750073d18011b, []int{24}
+	return fileDescriptor_ef7750073d18011b, []int{26}
 }
 
 func (m *Empty) XXX_Unmarshal(b []byte) error {
@@ -1587,10 +1705,12 @@
 	proto.RegisterType((*OltAllocatedResource)(nil), "bbsim.OltAllocatedResource")
 	proto.RegisterType((*OltAllocatedResources)(nil), "bbsim.OltAllocatedResources")
 	proto.RegisterType((*ONU)(nil), "bbsim.ONU")
+	proto.RegisterType((*UNI)(nil), "bbsim.UNI")
 	proto.RegisterType((*Service)(nil), "bbsim.Service")
 	proto.RegisterType((*ONUTrafficSchedulers)(nil), "bbsim.ONUTrafficSchedulers")
 	proto.RegisterType((*ONUs)(nil), "bbsim.ONUs")
 	proto.RegisterType((*Services)(nil), "bbsim.Services")
+	proto.RegisterType((*UNIs)(nil), "bbsim.UNIs")
 	proto.RegisterType((*ONURequest)(nil), "bbsim.ONURequest")
 	proto.RegisterType((*PONRequest)(nil), "bbsim.PONRequest")
 	proto.RegisterType((*AlarmType)(nil), "bbsim.AlarmType")
@@ -1609,130 +1729,134 @@
 func init() { proto.RegisterFile("api/bbsim/bbsim.proto", fileDescriptor_ef7750073d18011b) }
 
 var fileDescriptor_ef7750073d18011b = []byte{
-	// 1956 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0x51, 0x72, 0xdb, 0xc8,
-	0x11, 0x15, 0x49, 0x51, 0x24, 0x9b, 0x22, 0x05, 0x8d, 0x2d, 0x2d, 0x4b, 0xd6, 0xc6, 0x2a, 0xac,
-	0x37, 0x65, 0xbb, 0xb2, 0xf2, 0x5a, 0x4e, 0x36, 0xf6, 0x27, 0x44, 0x42, 0x34, 0x56, 0x14, 0x80,
-	0x1a, 0x90, 0x72, 0x39, 0xf9, 0x60, 0x41, 0xc0, 0x48, 0x42, 0x05, 0x24, 0x68, 0x60, 0x28, 0x45,
-	0x07, 0xc8, 0x19, 0xf2, 0x9f, 0x03, 0xe4, 0x12, 0xb9, 0x40, 0x4e, 0x90, 0x7c, 0xe5, 0x00, 0xa9,
-	0x5c, 0x20, 0x35, 0x83, 0x01, 0x08, 0x90, 0x90, 0x2d, 0x7f, 0xed, 0x0f, 0x0b, 0xfd, 0xba, 0x5f,
-	0x4f, 0x4f, 0x77, 0xa3, 0x67, 0x40, 0xd8, 0xb1, 0x67, 0xde, 0xab, 0x8b, 0x8b, 0xc8, 0x9b, 0xc4,
-	0xbf, 0x87, 0xb3, 0x30, 0xa0, 0x01, 0xaa, 0x72, 0x61, 0xef, 0xc9, 0x4d, 0xe0, 0xd3, 0x6b, 0x7b,
-	0xcc, 0xc1, 0xe8, 0x55, 0x30, 0x23, 0xd3, 0xc0, 0xa7, 0xb1, 0xcd, 0xde, 0x41, 0x5e, 0x49, 0x89,
-	0x73, 0xcd, 0x9e, 0x2f, 0x3d, 0x9f, 0xc4, 0x16, 0xf2, 0xbf, 0xcb, 0x50, 0x33, 0x0d, 0xdd, 0x0c,
-	0x42, 0x8a, 0xda, 0x50, 0xd6, 0x7a, 0x9d, 0xd2, 0x41, 0xe9, 0x79, 0x15, 0x97, 0xb5, 0x1e, 0xda,
-	0x87, 0x86, 0x31, 0x23, 0xa1, 0x45, 0x6d, 0x4a, 0x3a, 0xe5, 0x83, 0xd2, 0xf3, 0x06, 0x5e, 0x00,
-	0xe8, 0x19, 0xb4, 0xb4, 0x29, 0x25, 0xe1, 0xd4, 0xf6, 0x63, 0x8b, 0x0a, 0xb7, 0xc8, 0x83, 0xe8,
-	0x00, 0x9a, 0xa6, 0xed, 0xfc, 0x89, 0xd0, 0x6e, 0x30, 0x9f, 0xd2, 0xce, 0xfa, 0x41, 0xe9, 0xf9,
-	0x3a, 0xce, 0x42, 0xe8, 0x04, 0xb6, 0x14, 0xdf, 0x0f, 0x1c, 0x9b, 0x12, 0xd7, 0x98, 0xce, 0x35,
-	0x37, 0xea, 0x54, 0x0f, 0x2a, 0xcf, 0x9b, 0x47, 0xfb, 0x87, 0xf1, 0x76, 0xcd, 0x60, 0x9a, 0x1a,
-	0x60, 0x12, 0x05, 0xf3, 0xd0, 0x21, 0x11, 0x5e, 0x26, 0xa1, 0x9f, 0x61, 0x3b, 0x85, 0xfa, 0x64,
-	0xc2, 0x76, 0x14, 0x75, 0x36, 0x1e, 0xe0, 0x69, 0x95, 0x96, 0xf3, 0xc5, 0x1f, 0x58, 0x54, 0xb5,
-	0xaf, 0xf2, 0x95, 0xd0, 0xe4, 0x53, 0xd8, 0x29, 0xb4, 0x45, 0x32, 0x6c, 0x5a, 0x24, 0xf4, 0x6c,
-	0x5f, 0x9f, 0x4f, 0x2e, 0x48, 0xc8, 0x13, 0xdf, 0xc0, 0x39, 0x8c, 0x97, 0xc4, 0xe5, 0xb9, 0x67,
-	0x25, 0x71, 0xe5, 0xdf, 0x43, 0x4d, 0xd7, 0xb5, 0xaf, 0xaf, 0x96, 0xfc, 0x9f, 0x12, 0x54, 0x0c,
-	0x7f, 0x95, 0xb5, 0x1c, 0x44, 0xb9, 0x20, 0x88, 0x9c, 0xe7, 0xca, 0x17, 0xfb, 0x60, 0xbd, 0xa8,
-	0x0f, 0xd8, 0xba, 0x66, 0xa7, 0xc6, 0x55, 0x65, 0xcd, 0x44, 0x2f, 0xa1, 0x2e, 0x36, 0x92, 0x94,
-	0xbb, 0x2d, 0x12, 0x2b, 0x60, 0x9c, 0xea, 0x99, 0xad, 0x68, 0xd1, 0xa4, 0xa0, 0x89, 0xad, 0x80,
-	0x71, 0xaa, 0x97, 0xff, 0x52, 0x82, 0x8e, 0xe1, 0xd3, 0x95, 0x74, 0x0f, 0xef, 0x66, 0x04, 0xbd,
-	0x85, 0x75, 0x7a, 0x37, 0x23, 0x7c, 0xfb, 0xed, 0xa3, 0x67, 0xc2, 0xc9, 0x7d, 0xe6, 0x87, 0xec,
-	0x07, 0x73, 0x86, 0xfc, 0x0a, 0xd6, 0xb9, 0x87, 0x26, 0xd4, 0x46, 0xfa, 0xa9, 0x6e, 0x7c, 0xd0,
-	0xa5, 0x35, 0xb4, 0x09, 0x75, 0x65, 0x30, 0x30, 0xba, 0x63, 0xad, 0x27, 0x95, 0x98, 0xd4, 0x57,
-	0xcf, 0xc6, 0xa6, 0x81, 0x87, 0x52, 0x59, 0xfe, 0x7b, 0x09, 0x1e, 0x17, 0x39, 0x46, 0x28, 0xf6,
-	0x24, 0xaa, 0x1d, 0x7b, 0xdd, 0x87, 0x86, 0x19, 0x4c, 0xd9, 0x06, 0x44, 0xb1, 0x5b, 0x78, 0x01,
-	0xa0, 0xc7, 0x50, 0xe5, 0x2d, 0xce, 0x53, 0xdf, 0xc2, 0xb1, 0x80, 0x76, 0x61, 0x83, 0xe9, 0xf5,
-	0x80, 0xe7, 0xbb, 0x85, 0x85, 0x84, 0x7e, 0x05, 0x90, 0xac, 0xa5, 0xb9, 0x9d, 0x2a, 0x2f, 0x74,
-	0x06, 0x61, 0xbc, 0x13, 0x3f, 0xb8, 0xd5, 0xdc, 0xce, 0x06, 0x7f, 0x17, 0x85, 0x24, 0x63, 0xd8,
-	0x29, 0x8a, 0x37, 0x42, 0xef, 0xa0, 0x11, 0x26, 0x42, 0xa7, 0xc4, 0xd3, 0xff, 0xe4, 0x33, 0x99,
-	0xc3, 0x0b, 0x6b, 0xf9, 0x7f, 0x15, 0xa8, 0x18, 0xfa, 0xe8, 0x17, 0x6b, 0xba, 0x4c, 0x5e, 0x7b,
-	0x22, 0x15, 0x0b, 0x80, 0x69, 0xdf, 0xdf, 0x2a, 0xae, 0x1b, 0x92, 0x28, 0xea, 0xd4, 0xe3, 0x15,
-	0x52, 0x20, 0x93, 0xdf, 0x06, 0x27, 0x26, 0xf9, 0x7d, 0x09, 0xf5, 0x88, 0x84, 0x37, 0x1e, 0xcb,
-	0x06, 0xe4, 0x9a, 0xd1, 0x8a, 0x61, 0x9c, 0xea, 0x51, 0x0f, 0xbe, 0xd5, 0x26, 0xf6, 0x15, 0xb1,
-	0x82, 0x4b, 0x7a, 0x6b, 0x87, 0x44, 0xfd, 0xf3, 0x8c, 0x38, 0x94, 0xb8, 0x16, 0x71, 0xa8, 0x17,
-	0x4c, 0xa3, 0x4e, 0x93, 0xbb, 0xfe, 0xbc, 0xd1, 0x8a, 0x17, 0x4c, 0x1c, 0xe2, 0xdd, 0x64, 0xbc,
-	0x6c, 0x16, 0x78, 0x59, 0x36, 0x42, 0x3f, 0xc2, 0x23, 0xc5, 0xa1, 0xde, 0x0d, 0xe1, 0x66, 0xea,
-	0x94, 0x7a, 0xf4, 0x4e, 0x73, 0x3b, 0x2d, 0xce, 0x2d, 0x52, 0xa1, 0x9f, 0x60, 0xb7, 0x1b, 0x4c,
-	0x26, 0x1e, 0xa5, 0xc4, 0xcd, 0x93, 0xda, 0x9c, 0x74, 0x8f, 0x56, 0xfe, 0x6f, 0x19, 0x6a, 0x22,
-	0x17, 0xac, 0xdb, 0x75, 0x7b, 0x92, 0x76, 0x3b, 0x7b, 0xce, 0xe7, 0xbd, 0xbc, 0x9c, 0xf7, 0xb8,
-	0xdb, 0xad, 0xa9, 0xa8, 0x79, 0x2c, 0x30, 0x3f, 0xd6, 0xd0, 0xbe, 0xe2, 0x65, 0xae, 0x62, 0xfe,
-	0xcc, 0xb0, 0x2e, 0xc3, 0xe2, 0xc2, 0xf2, 0x67, 0xd6, 0xfd, 0x3a, 0x21, 0x6e, 0xa4, 0xda, 0xb3,
-	0xc0, 0xe7, 0x1d, 0x5e, 0xc7, 0x19, 0x84, 0xad, 0xcd, 0xa5, 0xde, 0xb5, 0x33, 0xe3, 0xd3, 0xa8,
-	0x8e, 0x17, 0x40, 0xaa, 0xd5, 0xae, 0x26, 0x33, 0xde, 0x11, 0x89, 0x96, 0x01, 0xa8, 0x03, 0x35,
-	0x71, 0x40, 0x88, 0x96, 0x48, 0x44, 0xb6, 0x2a, 0x77, 0x1f, 0xb7, 0x22, 0xf0, 0xc0, 0x33, 0x08,
-	0xf3, 0xcb, 0xfc, 0xc7, 0xea, 0x66, 0xbc, 0xe3, 0x14, 0x58, 0xed, 0xe5, 0xcd, 0x7b, 0x7a, 0x59,
-	0xeb, 0x9f, 0x99, 0xb1, 0x45, 0x2b, 0xf6, 0x91, 0x02, 0xb2, 0x0d, 0x8f, 0x0d, 0x7d, 0x34, 0x0c,
-	0xed, 0xcb, 0x4b, 0xcf, 0xb1, 0x9c, 0x6b, 0xe2, 0xce, 0x7d, 0x12, 0x46, 0x48, 0x83, 0x2d, 0xca,
-	0xc0, 0x05, 0xc4, 0x4b, 0xd1, 0x3c, 0x7a, 0x7a, 0x98, 0xbb, 0x0c, 0xac, 0x30, 0xf1, 0x32, 0x4f,
-	0x7e, 0x0e, 0xeb, 0x86, 0x3e, 0x8a, 0xd0, 0x01, 0x54, 0x3d, 0x4a, 0x26, 0xc9, 0x2c, 0x80, 0x64,
-	0x16, 0xe8, 0x23, 0x1c, 0x2b, 0xe4, 0x1f, 0xa1, 0x6e, 0x25, 0xaf, 0xc0, 0xb3, 0xbc, 0xf5, 0xf2,
-	0xbb, 0x92, 0x32, 0x80, 0xf1, 0xc9, 0xa7, 0x39, 0x89, 0xe8, 0x43, 0x0e, 0x46, 0xf9, 0x25, 0x80,
-	0x69, 0xe8, 0x09, 0x23, 0x37, 0x40, 0x4b, 0x4b, 0x03, 0x54, 0xfe, 0x57, 0x05, 0x1a, 0x8a, 0x6f,
-	0x87, 0x13, 0x36, 0x6c, 0xe5, 0x7f, 0x56, 0xa0, 0xca, 0x1e, 0x22, 0x54, 0x83, 0xca, 0xc0, 0xb0,
-	0xa4, 0x35, 0xd4, 0x06, 0xe8, 0x7d, 0xd4, 0xf4, 0xfe, 0xb8, 0xaf, 0x58, 0xa6, 0x54, 0x42, 0x2d,
-	0x68, 0x18, 0xfa, 0x68, 0xac, 0x0c, 0x14, 0x7c, 0x26, 0x95, 0xd1, 0x37, 0xf0, 0x88, 0x89, 0xd6,
-	0x50, 0xc1, 0xc3, 0x91, 0x39, 0x3e, 0x51, 0xb4, 0xc1, 0x08, 0xab, 0x52, 0x05, 0xed, 0x02, 0xe2,
-	0x0a, 0xad, 0xaf, 0x2b, 0x83, 0x71, 0x4f, 0xed, 0x63, 0xa5, 0xa7, 0x4a, 0xeb, 0x09, 0xa1, 0x87,
-	0xb5, 0x93, 0xe1, 0xd8, 0x38, 0x19, 0x7f, 0xd0, 0xf4, 0x9e, 0xf1, 0x41, 0xaa, 0xa2, 0x7d, 0xe8,
-	0x30, 0xc5, 0xc0, 0xb0, 0x2c, 0x86, 0x1b, 0x67, 0x5d, 0x6d, 0xdc, 0x7d, 0xaf, 0xe8, 0xba, 0x3a,
-	0x90, 0x36, 0xd2, 0x75, 0xb8, 0x3b, 0x2b, 0x5d, 0xa7, 0x86, 0x5e, 0xc0, 0xf7, 0x4c, 0x31, 0xc4,
-	0x8a, 0x6e, 0x9d, 0x69, 0x96, 0xa5, 0x19, 0xfa, 0x58, 0xd3, 0x87, 0x2a, 0x3e, 0x51, 0xb1, 0xaa,
-	0x77, 0xd5, 0xf1, 0x07, 0x05, 0xeb, 0x9a, 0xde, 0x97, 0xea, 0x68, 0x0f, 0x76, 0x79, 0xe8, 0xdd,
-	0xa1, 0x76, 0xae, 0x0c, 0x99, 0x61, 0xe2, 0xa6, 0x81, 0x3a, 0xbc, 0x49, 0xc6, 0x26, 0x36, 0xba,
-	0xaa, 0x65, 0xb1, 0xfd, 0xaa, 0x18, 0x1b, 0x58, 0x02, 0x74, 0x00, 0xfb, 0xd9, 0xb8, 0x4e, 0xd5,
-	0x8f, 0x63, 0xeb, 0xa3, 0xde, 0x4d, 0xb9, 0x4d, 0xb4, 0x03, 0xdb, 0xcc, 0x42, 0x1b, 0x8e, 0xc6,
-	0xa6, 0xa1, 0xb3, 0x5c, 0x0c, 0x2d, 0x69, 0x13, 0x6d, 0x43, 0x2b, 0xcd, 0x14, 0xa3, 0x4b, 0xad,
-	0x65, 0xe8, 0x58, 0x6a, 0x27, 0x1b, 0x4b, 0x20, 0xb3, 0x3b, 0x66, 0xbb, 0x90, 0xb6, 0x92, 0x7c,
-	0xe4, 0x14, 0x5d, 0x11, 0x95, 0x84, 0x10, 0xb4, 0xb3, 0xda, 0x13, 0x4d, 0xda, 0x46, 0x8f, 0x60,
-	0x2b, 0x8b, 0x29, 0x67, 0x9a, 0x84, 0xe4, 0xb7, 0xd0, 0xe6, 0xf5, 0x35, 0xed, 0xd0, 0x9e, 0x10,
-	0x4a, 0x42, 0x24, 0x41, 0xe5, 0x94, 0xdc, 0x89, 0xce, 0x61, 0x8f, 0x6c, 0xae, 0x9c, 0xdb, 0xfe,
-	0x3c, 0xb9, 0x1a, 0xc5, 0x82, 0xfc, 0xb7, 0x12, 0xf7, 0xc7, 0xd9, 0x99, 0x66, 0x4a, 0xbb, 0x45,
-	0x78, 0x58, 0x00, 0x0f, 0x3a, 0xbb, 0x76, 0x61, 0x83, 0xbd, 0x96, 0xf3, 0x48, 0x0c, 0x31, 0x21,
-	0xa1, 0xdf, 0x01, 0xa4, 0x21, 0x46, 0x9d, 0x75, 0xfe, 0x46, 0xec, 0x88, 0x37, 0x22, 0xbf, 0x01,
-	0x9c, 0x31, 0x94, 0x3f, 0xc1, 0x96, 0x31, 0x18, 0xe6, 0x62, 0x3c, 0x80, 0x26, 0x1f, 0x0f, 0x97,
-	0xb6, 0x43, 0xc4, 0xd1, 0xda, 0xc2, 0x59, 0x28, 0x9d, 0x2a, 0x4c, 0xe4, 0x3b, 0x29, 0x67, 0xa6,
-	0x4a, 0x02, 0xde, 0x17, 0x29, 0xbb, 0x46, 0xb5, 0xce, 0x49, 0x18, 0x79, 0xc1, 0x54, 0xec, 0xa9,
-	0x03, 0xb5, 0x9b, 0x18, 0x10, 0x39, 0x49, 0x44, 0x96, 0xaf, 0x8b, 0xb9, 0xe7, 0xbb, 0x43, 0x6f,
-	0x92, 0x5e, 0x3c, 0x53, 0x80, 0xcd, 0x46, 0x87, 0x9f, 0x13, 0xef, 0xed, 0xe8, 0x5a, 0xac, 0x92,
-	0x41, 0x18, 0xfb, 0xca, 0xa3, 0x22, 0x88, 0xf8, 0x14, 0x5f, 0x00, 0xf2, 0x5b, 0xa8, 0x0f, 0x82,
-	0xab, 0x01, 0xb9, 0x21, 0x3e, 0xab, 0xa0, 0xcf, 0x1e, 0xc4, 0xfa, 0xb1, 0xc0, 0x76, 0xe0, 0xd8,
-	0xbe, 0x2f, 0x2a, 0x51, 0xc7, 0x42, 0x92, 0x55, 0xa8, 0x63, 0x12, 0xcd, 0x82, 0x69, 0x44, 0xd0,
-	0x53, 0x68, 0x46, 0xdc, 0xdf, 0xd8, 0x09, 0x5c, 0x22, 0x2e, 0x22, 0x10, 0x43, 0xdd, 0xc0, 0x25,
-	0x6c, 0x73, 0x13, 0x12, 0x45, 0xf6, 0x55, 0xb2, 0x81, 0x44, 0x94, 0xff, 0x5a, 0x82, 0x26, 0x9b,
-	0xfe, 0x49, 0xe2, 0x5f, 0xc0, 0x86, 0x31, 0x9d, 0x63, 0xf2, 0x49, 0xcc, 0xd1, 0xed, 0xcc, 0xf8,
-	0x8b, 0x4d, 0xb0, 0x30, 0x40, 0xef, 0x60, 0xd3, 0x9a, 0x5f, 0x28, 0xfc, 0xfc, 0x3d, 0xb7, 0x7d,
-	0xee, 0xb9, 0x9d, 0xd6, 0x3b, 0x55, 0xf1, 0x59, 0x84, 0x73, 0xa6, 0xac, 0xc9, 0xfa, 0x61, 0x30,
-	0x9f, 0x25, 0xa7, 0x64, 0x9c, 0xb6, 0x1c, 0x26, 0x9f, 0x42, 0x95, 0x5d, 0xdd, 0x22, 0xf4, 0x2d,
-	0xc0, 0xa5, 0x1f, 0xdc, 0x8e, 0x1d, 0xfe, 0x85, 0x25, 0xa6, 0x1f, 0x43, 0xe2, 0xef, 0xab, 0xef,
-	0xa0, 0xca, 0x04, 0x76, 0xd4, 0xb2, 0x7e, 0x6b, 0x1d, 0x26, 0x9f, 0x88, 0x8c, 0x8d, 0x63, 0x9d,
-	0xfc, 0x14, 0x6a, 0xac, 0x5a, 0xc1, 0x9c, 0xb2, 0x34, 0xbb, 0xc4, 0xb7, 0xef, 0x84, 0xa7, 0x58,
-	0x90, 0x6b, 0x50, 0x55, 0x27, 0x33, 0x7a, 0xf7, 0xf2, 0x35, 0xb4, 0xf3, 0xa1, 0xa3, 0x3a, 0xac,
-	0xff, 0x6c, 0x68, 0xec, 0x42, 0xdc, 0x80, 0xea, 0x40, 0x55, 0xce, 0x55, 0xa9, 0x84, 0x00, 0x36,
-	0x18, 0x78, 0xfe, 0x46, 0x2a, 0x1f, 0xfd, 0xa3, 0x09, 0xd5, 0xe3, 0x63, 0xcb, 0x9b, 0xa0, 0x57,
-	0x50, 0x13, 0x5d, 0x85, 0x36, 0x45, 0x1e, 0xb8, 0xd7, 0xbd, 0xc7, 0x42, 0xca, 0xf5, 0x9c, 0xbc,
-	0x86, 0x5e, 0x43, 0xd3, 0x22, 0x34, 0x6d, 0x81, 0x2d, 0x61, 0x96, 0x00, 0x7b, 0xcb, 0x80, 0xbc,
-	0x86, 0x9e, 0xc1, 0x46, 0x9f, 0x50, 0xf6, 0xad, 0x93, 0x5f, 0x02, 0x16, 0x97, 0x56, 0x79, 0x0d,
-	0xfd, 0x11, 0x3a, 0xb1, 0x55, 0xc1, 0x8d, 0xf7, 0xe9, 0x17, 0x3e, 0x0c, 0xf6, 0xf6, 0x3f, 0x63,
-	0x10, 0xc9, 0x6b, 0xe8, 0x07, 0x00, 0x33, 0xb8, 0x25, 0x61, 0x30, 0x5d, 0x0d, 0x23, 0x89, 0x38,
-	0x69, 0x4e, 0x79, 0x0d, 0x1d, 0x42, 0xd3, 0xba, 0x9e, 0x53, 0x37, 0xb8, 0x7d, 0x98, 0xfd, 0x6f,
-	0xa0, 0x81, 0xc9, 0x45, 0x10, 0xd0, 0x07, 0x59, 0xb3, 0x82, 0xd1, 0x60, 0x76, 0x85, 0xcd, 0x2e,
-	0x3b, 0x75, 0x49, 0xf8, 0x65, 0xca, 0x11, 0x6c, 0x59, 0xd4, 0x0e, 0xe9, 0xd7, 0x70, 0x7e, 0x82,
-	0x6d, 0x4c, 0xa2, 0x25, 0x56, 0x72, 0xdc, 0x8b, 0xde, 0x2a, 0xe2, 0xbd, 0x88, 0xcb, 0xa5, 0x8f,
-	0xd0, 0xea, 0xab, 0xb4, 0x97, 0xb9, 0x5c, 0xc8, 0x6b, 0xe8, 0xd7, 0xec, 0x02, 0x46, 0xf9, 0x25,
-	0x24, 0x1f, 0x4e, 0x73, 0x61, 0x16, 0xc5, 0xf9, 0xec, 0x13, 0x9a, 0x5e, 0x41, 0x8a, 0x43, 0x4f,
-	0xd4, 0x3c, 0xf4, 0x36, 0xf3, 0x3b, 0x9d, 0xa7, 0x94, 0x82, 0x50, 0x0a, 0x78, 0x6f, 0x32, 0x75,
-	0x2b, 0x8e, 0xff, 0x9e, 0xdc, 0x0a, 0x92, 0xe2, 0xfb, 0x05, 0x9b, 0x29, 0xe0, 0xbc, 0x83, 0xed,
-	0xcc, 0x42, 0x91, 0x31, 0x35, 0x0d, 0x3d, 0x5d, 0x6e, 0x71, 0x0d, 0x2a, 0x5e, 0x2e, 0x6d, 0xc5,
-	0x07, 0x87, 0xf8, 0x1a, 0xda, 0x82, 0xf3, 0xe0, 0x08, 0xdf, 0x82, 0xb4, 0x58, 0xe6, 0xab, 0x02,
-	0xfc, 0x2d, 0x6c, 0x8a, 0xbe, 0x89, 0x6f, 0xe8, 0x0f, 0x0b, 0xf1, 0x0d, 0x34, 0x05, 0x8b, 0x5f,
-	0xdc, 0x1f, 0x46, 0x3a, 0x86, 0x1d, 0x8b, 0xd7, 0x99, 0x1f, 0xa5, 0xda, 0xd4, 0xf5, 0x1c, 0x9b,
-	0x8d, 0x31, 0xb4, 0xbb, 0xa0, 0x67, 0x4f, 0xd9, 0xcf, 0xf8, 0x60, 0x2f, 0xfe, 0x3d, 0x3e, 0xf2,
-	0x27, 0x75, 0x91, 0x8f, 0x1f, 0xa0, 0xde, 0x27, 0x34, 0x1e, 0xde, 0x05, 0x91, 0x27, 0xc9, 0xe6,
-	0x06, 0x3c, 0xb7, 0x5b, 0xdd, 0x6b, 0x7b, 0x7a, 0x45, 0xd8, 0x39, 0x14, 0x7f, 0x0c, 0x20, 0x61,
-	0x92, 0x39, 0x99, 0x8a, 0x16, 0x3a, 0x85, 0x6f, 0xe2, 0xc6, 0x5e, 0xfd, 0x30, 0x28, 0x58, 0xf7,
-	0xc9, 0x02, 0x5a, 0xb1, 0x97, 0xd7, 0x8e, 0xbf, 0xff, 0xc3, 0x77, 0x57, 0x1e, 0xbd, 0x9e, 0x5f,
-	0x1c, 0x3a, 0xc1, 0x84, 0xff, 0xcf, 0xe8, 0x04, 0xa1, 0x2b, 0xfe, 0x98, 0x4c, 0xff, 0xa2, 0xbc,
-	0xd8, 0xe0, 0xff, 0x2b, 0xbe, 0xf9, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xce, 0x0d, 0xfb, 0x2c,
-	0xb6, 0x14, 0x00, 0x00,
+	// 2026 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x58, 0x5d, 0x72, 0xdb, 0xc8,
+	0x11, 0x16, 0xff, 0x44, 0xb2, 0x29, 0x52, 0xd0, 0xd8, 0xd2, 0xa2, 0x64, 0xed, 0x5a, 0x85, 0xf5,
+	0xa6, 0x64, 0x57, 0x56, 0x5e, 0xdb, 0xc9, 0xc6, 0x7e, 0x84, 0x48, 0x8a, 0xc6, 0x8a, 0x02, 0x58,
+	0x03, 0x52, 0x2e, 0x27, 0x0f, 0x2c, 0x88, 0x18, 0x49, 0xa8, 0x80, 0x00, 0x0d, 0x0c, 0xa5, 0xe8,
+	0x00, 0x39, 0x41, 0x1e, 0xf2, 0x9e, 0x03, 0xe4, 0x2c, 0x39, 0x41, 0xf2, 0x94, 0x03, 0xa4, 0x72,
+	0x81, 0xd4, 0x0c, 0x06, 0x20, 0x40, 0x42, 0x36, 0xfd, 0x94, 0x17, 0xd6, 0xf4, 0xd7, 0x3f, 0xd3,
+	0xd3, 0xdd, 0xd3, 0xd3, 0x20, 0xec, 0x5a, 0x33, 0xe7, 0xe5, 0xe5, 0x65, 0xe8, 0x4c, 0xa3, 0xdf,
+	0xe3, 0x59, 0xe0, 0x53, 0x1f, 0x55, 0x38, 0xb1, 0xff, 0xe4, 0xd6, 0x77, 0xe9, 0x8d, 0x35, 0xe6,
+	0x60, 0xf8, 0xd2, 0x9f, 0x11, 0xcf, 0x77, 0x69, 0x24, 0xb3, 0x7f, 0x98, 0x65, 0x52, 0x32, 0xb9,
+	0x61, 0xeb, 0x2b, 0xc7, 0x25, 0x91, 0x84, 0xf2, 0xaf, 0x22, 0x54, 0x07, 0x86, 0x3e, 0xf0, 0x03,
+	0x8a, 0x5a, 0x50, 0xd4, 0x3a, 0x72, 0xe1, 0xb0, 0x70, 0x54, 0xc1, 0x45, 0xad, 0x83, 0x0e, 0xa0,
+	0x6e, 0xcc, 0x48, 0x60, 0x52, 0x8b, 0x12, 0xb9, 0x78, 0x58, 0x38, 0xaa, 0xe3, 0x05, 0x80, 0x9e,
+	0x41, 0x53, 0xf3, 0x28, 0x09, 0x3c, 0xcb, 0x8d, 0x24, 0x4a, 0x5c, 0x22, 0x0b, 0xa2, 0x43, 0x68,
+	0x0c, 0xac, 0xc9, 0x1f, 0x09, 0x6d, 0xfb, 0x73, 0x8f, 0xca, 0xe5, 0xc3, 0xc2, 0x51, 0x19, 0xa7,
+	0x21, 0x74, 0x0a, 0xdb, 0xaa, 0xeb, 0xfa, 0x13, 0x8b, 0x12, 0xdb, 0xf0, 0xe6, 0x9a, 0x1d, 0xca,
+	0x95, 0xc3, 0xd2, 0x51, 0xe3, 0xf5, 0xc1, 0x71, 0x74, 0xdc, 0x81, 0xef, 0x25, 0x02, 0x98, 0x84,
+	0xfe, 0x3c, 0x98, 0x90, 0x10, 0x2f, 0x2b, 0xa1, 0x5f, 0x60, 0x27, 0x81, 0x7a, 0x64, 0xca, 0x4e,
+	0x14, 0xca, 0x9b, 0x6b, 0x58, 0x5a, 0x55, 0xcb, 0xd8, 0xe2, 0x0b, 0xe6, 0x55, 0xf5, 0xab, 0x6c,
+	0xc5, 0x6a, 0xca, 0x19, 0xec, 0xe6, 0xca, 0x22, 0x05, 0xb6, 0x4c, 0x12, 0x38, 0x96, 0xab, 0xcf,
+	0xa7, 0x97, 0x24, 0xe0, 0x81, 0xaf, 0xe3, 0x0c, 0xc6, 0x53, 0x62, 0xf3, 0xd8, 0xb3, 0x94, 0xd8,
+	0xca, 0xef, 0xa0, 0xaa, 0xeb, 0xda, 0xd7, 0x67, 0x4b, 0xf9, 0x77, 0x01, 0x4a, 0x86, 0xbb, 0xaa,
+	0xb5, 0xec, 0x44, 0x31, 0xc7, 0x89, 0x8c, 0xe5, 0xd2, 0x17, 0xeb, 0xa0, 0x9c, 0x57, 0x07, 0x6c,
+	0xdf, 0x81, 0x5c, 0xe5, 0xac, 0xa2, 0x36, 0x40, 0x2f, 0xa0, 0x26, 0x0e, 0x12, 0xa7, 0xbb, 0x25,
+	0x02, 0x2b, 0x60, 0x9c, 0xf0, 0x99, 0xac, 0x28, 0xd1, 0x38, 0xa1, 0xb1, 0xac, 0x80, 0x71, 0xc2,
+	0x57, 0xfe, 0x5c, 0x00, 0xd9, 0x70, 0xe9, 0x4a, 0xb8, 0x87, 0xf7, 0x33, 0x82, 0xde, 0x42, 0x99,
+	0xde, 0xcf, 0x08, 0x3f, 0x7e, 0xeb, 0xf5, 0x33, 0x61, 0xe4, 0x21, 0xf1, 0x63, 0xf6, 0x83, 0xb9,
+	0x86, 0xf2, 0x12, 0xca, 0xdc, 0x42, 0x03, 0xaa, 0x23, 0xfd, 0x4c, 0x37, 0x3e, 0xe8, 0xd2, 0x06,
+	0xda, 0x82, 0x9a, 0xda, 0xef, 0x1b, 0xed, 0xb1, 0xd6, 0x91, 0x0a, 0x8c, 0xea, 0x75, 0xcf, 0xc7,
+	0x03, 0x03, 0x0f, 0xa5, 0xa2, 0xf2, 0xf7, 0x02, 0x3c, 0xce, 0x33, 0x8c, 0x50, 0x64, 0x49, 0x64,
+	0x3b, 0xb2, 0x7a, 0x00, 0xf5, 0x81, 0xef, 0xb1, 0x03, 0x88, 0x64, 0x37, 0xf1, 0x02, 0x40, 0x8f,
+	0xa1, 0xc2, 0x4b, 0x9c, 0x87, 0xbe, 0x89, 0x23, 0x02, 0xed, 0xc1, 0x26, 0xe3, 0xeb, 0x3e, 0x8f,
+	0x77, 0x13, 0x0b, 0x0a, 0x7d, 0x07, 0x10, 0xef, 0xa5, 0xd9, 0x72, 0x85, 0x27, 0x3a, 0x85, 0x30,
+	0xbd, 0x53, 0xd7, 0xbf, 0xd3, 0x6c, 0x79, 0x93, 0xdf, 0x45, 0x41, 0x29, 0x18, 0x76, 0xf3, 0xfc,
+	0x0d, 0xd1, 0x3b, 0xa8, 0x07, 0x31, 0x21, 0x17, 0x78, 0xf8, 0x9f, 0x7c, 0x26, 0x72, 0x78, 0x21,
+	0xad, 0xfc, 0xa5, 0x0c, 0x25, 0x43, 0x1f, 0xfd, 0xdf, 0x8a, 0x2e, 0x15, 0xd7, 0x8e, 0x08, 0xc5,
+	0x02, 0x60, 0xdc, 0xf7, 0x77, 0xaa, 0x6d, 0x07, 0x24, 0x0c, 0xe5, 0x5a, 0xb4, 0x43, 0x02, 0xa4,
+	0xe2, 0x5b, 0xe7, 0x8a, 0x71, 0x7c, 0x5f, 0x40, 0x2d, 0x24, 0xc1, 0xad, 0xc3, 0xa2, 0x01, 0x99,
+	0x62, 0x34, 0x23, 0x18, 0x27, 0x7c, 0xd4, 0x81, 0x6f, 0xb5, 0xa9, 0x75, 0x4d, 0x4c, 0xff, 0x8a,
+	0xde, 0x59, 0x01, 0xe9, 0xfe, 0x69, 0x46, 0x26, 0x94, 0xd8, 0x26, 0x99, 0x50, 0xc7, 0xf7, 0x42,
+	0xb9, 0xc1, 0x4d, 0x7f, 0x5e, 0x68, 0xc5, 0x0a, 0x26, 0x13, 0xe2, 0xdc, 0xa6, 0xac, 0x6c, 0xe5,
+	0x58, 0x59, 0x16, 0x42, 0x3f, 0xc1, 0x23, 0x75, 0x42, 0x9d, 0x5b, 0xc2, 0xc5, 0xba, 0x1e, 0x75,
+	0xe8, 0xbd, 0x66, 0xcb, 0x4d, 0xae, 0x9b, 0xc7, 0x42, 0x3f, 0xc3, 0x5e, 0xdb, 0x9f, 0x4e, 0x1d,
+	0x4a, 0x89, 0x9d, 0x55, 0x6a, 0x71, 0xa5, 0x07, 0xb8, 0xe8, 0x3b, 0x28, 0xcf, 0x3d, 0x27, 0x94,
+	0xb7, 0x79, 0x74, 0x40, 0x44, 0x67, 0xa4, 0x6b, 0x98, 0xe3, 0x4a, 0x08, 0xa5, 0x91, 0xae, 0xad,
+	0x14, 0x85, 0x28, 0xf3, 0x8e, 0xe8, 0x76, 0x11, 0x21, 0x50, 0xd3, 0x13, 0x25, 0x10, 0x11, 0xec,
+	0x12, 0x9d, 0x13, 0xad, 0x23, 0x4a, 0x9f, 0xaf, 0xb3, 0x05, 0x53, 0x59, 0xee, 0x7f, 0xff, 0x29,
+	0x42, 0x55, 0x24, 0x88, 0x69, 0xeb, 0xd6, 0x34, 0xb9, 0x82, 0x6c, 0x9d, 0x2d, 0x86, 0xe2, 0x72,
+	0x31, 0x3c, 0xe8, 0x85, 0x39, 0xb4, 0xae, 0xb9, 0x17, 0x15, 0xcc, 0xd7, 0x0c, 0x6b, 0x33, 0x2c,
+	0xaa, 0x36, 0xbe, 0x66, 0x57, 0x52, 0x27, 0xc4, 0x0e, 0xbb, 0xd6, 0xcc, 0x77, 0xf9, 0xb5, 0xab,
+	0xe1, 0x14, 0xc2, 0xf6, 0xe6, 0x54, 0xe7, 0x66, 0x32, 0xe3, 0x2d, 0xb2, 0x86, 0x17, 0x40, 0xc2,
+	0xd5, 0xae, 0xa7, 0x33, 0x5e, 0xa6, 0x31, 0x97, 0x01, 0x48, 0x86, 0xaa, 0x78, 0xb5, 0x44, 0x9d,
+	0xc6, 0x24, 0xdb, 0x95, 0x9b, 0x8f, 0x02, 0x02, 0xdc, 0xf1, 0x14, 0xc2, 0xec, 0x32, 0xfb, 0x11,
+	0xbb, 0x11, 0x9d, 0x38, 0x01, 0x56, 0x2f, 0xd8, 0xd6, 0x03, 0x17, 0x4c, 0xeb, 0x9d, 0x0f, 0x22,
+	0x89, 0x66, 0x64, 0x23, 0x01, 0x14, 0x0b, 0x1e, 0x1b, 0xfa, 0x68, 0x18, 0x58, 0x57, 0x57, 0xce,
+	0xc4, 0x9c, 0xdc, 0x10, 0x7b, 0xee, 0x92, 0x20, 0x44, 0x1a, 0x6c, 0x53, 0x06, 0x2e, 0x20, 0x9e,
+	0x8a, 0xc6, 0xeb, 0xa7, 0xc7, 0x99, 0x09, 0x65, 0x45, 0x13, 0x2f, 0xeb, 0x29, 0x47, 0x50, 0x36,
+	0xf4, 0x51, 0x88, 0x0e, 0xa1, 0xe2, 0x50, 0x32, 0x8d, 0x1b, 0x54, 0x5c, 0x74, 0x86, 0x3e, 0xc2,
+	0x11, 0x43, 0xf9, 0x09, 0x6a, 0x66, 0x7c, 0x2f, 0x9f, 0x65, 0xa5, 0x97, 0x2f, 0xb0, 0xd0, 0x38,
+	0x82, 0xf2, 0x48, 0xd7, 0x1e, 0xb4, 0xcd, 0x0a, 0x3a, 0xb1, 0x0d, 0x6c, 0x27, 0xf2, 0x69, 0x4e,
+	0x42, 0xba, 0xce, 0xbb, 0xae, 0xbc, 0x00, 0x18, 0x18, 0x7a, 0xac, 0x91, 0xe9, 0xff, 0x85, 0xa5,
+	0xfe, 0xaf, 0xfc, 0xb3, 0x04, 0x75, 0xd5, 0xb5, 0x82, 0x29, 0x7b, 0x2b, 0x94, 0x7f, 0x94, 0xa0,
+	0xc2, 0x16, 0x21, 0xaa, 0x42, 0xa9, 0x6f, 0x98, 0xd2, 0x06, 0x6a, 0x01, 0x74, 0x3e, 0x6a, 0x7a,
+	0x6f, 0xdc, 0x53, 0xcd, 0x81, 0x54, 0x40, 0x4d, 0xa8, 0x1b, 0xfa, 0x68, 0xac, 0xf6, 0x55, 0x7c,
+	0x2e, 0x15, 0xd1, 0x37, 0xf0, 0x88, 0x91, 0xe6, 0x50, 0xc5, 0xc3, 0xd1, 0x60, 0x7c, 0xaa, 0x6a,
+	0xfd, 0x11, 0xee, 0x4a, 0x25, 0xb4, 0x07, 0x88, 0x33, 0xb4, 0x9e, 0xae, 0xf6, 0xc7, 0x9d, 0x6e,
+	0x0f, 0xab, 0x9d, 0xae, 0x54, 0x8e, 0x15, 0x3a, 0x58, 0x3b, 0x1d, 0x8e, 0x8d, 0xd3, 0xf1, 0x07,
+	0x4d, 0xef, 0x18, 0x1f, 0xa4, 0x0a, 0x3a, 0x00, 0x99, 0x31, 0xfa, 0x86, 0x69, 0x32, 0xdc, 0x38,
+	0x6f, 0x6b, 0xe3, 0xf6, 0x7b, 0x55, 0xd7, 0xbb, 0x7d, 0x69, 0x33, 0xd9, 0x87, 0x9b, 0x33, 0x93,
+	0x7d, 0xaa, 0xe8, 0x39, 0xfc, 0xc0, 0x18, 0x43, 0xac, 0xea, 0xe6, 0xb9, 0x66, 0x9a, 0x9a, 0xa1,
+	0x8f, 0x35, 0x7d, 0xd8, 0xc5, 0xa7, 0x5d, 0xdc, 0xd5, 0xdb, 0xdd, 0xf1, 0x07, 0x15, 0xeb, 0x9a,
+	0xde, 0x93, 0x6a, 0x68, 0x1f, 0xf6, 0xb8, 0xeb, 0xed, 0xa1, 0x76, 0xa1, 0x0e, 0x99, 0x60, 0x6c,
+	0xa6, 0x8e, 0x64, 0x5e, 0x4e, 0xe3, 0x01, 0x36, 0xda, 0x5d, 0xd3, 0x64, 0xe7, 0xed, 0x62, 0x6c,
+	0x60, 0x09, 0xd0, 0x21, 0x1c, 0xa4, 0xfd, 0x3a, 0xeb, 0x7e, 0x1c, 0x9b, 0x1f, 0xf5, 0x76, 0xa2,
+	0xdb, 0x40, 0xbb, 0xb0, 0xc3, 0x24, 0xb4, 0xe1, 0x68, 0x3c, 0x30, 0x74, 0x16, 0x8b, 0xa1, 0x29,
+	0x6d, 0xa1, 0x1d, 0x68, 0x26, 0x91, 0x62, 0xea, 0x52, 0x73, 0x19, 0x3a, 0x91, 0x5a, 0xf1, 0xc1,
+	0x62, 0x68, 0xd0, 0x1e, 0xb3, 0x53, 0x48, 0xdb, 0x71, 0x3c, 0x32, 0x8c, 0xb6, 0xf0, 0x4a, 0x42,
+	0x08, 0x5a, 0x69, 0xee, 0xa9, 0x26, 0xed, 0xa0, 0x47, 0xb0, 0x9d, 0xc6, 0xd4, 0x73, 0x4d, 0x42,
+	0xca, 0x5b, 0x68, 0xf1, 0xfc, 0x0e, 0xac, 0xc0, 0x9a, 0x12, 0x4a, 0x02, 0x24, 0x41, 0xe9, 0x8c,
+	0xdc, 0x8b, 0xca, 0x61, 0x4b, 0xd6, 0x81, 0x2e, 0x2c, 0x77, 0x1e, 0x4f, 0x76, 0x11, 0xa1, 0xfc,
+	0xad, 0xc0, 0xed, 0x71, 0xed, 0x54, 0x31, 0x25, 0xd5, 0x22, 0x2c, 0x2c, 0x80, 0xb5, 0x9e, 0xde,
+	0x3d, 0xd8, 0x64, 0x17, 0x78, 0x1e, 0x8a, 0x76, 0x27, 0x28, 0xf4, 0x5b, 0x80, 0xc4, 0xc5, 0x50,
+	0x2e, 0xf3, 0xdb, 0xb0, 0x2b, 0x6e, 0x43, 0xf6, 0x00, 0x38, 0x25, 0xa8, 0x7c, 0x82, 0x6d, 0xa3,
+	0x3f, 0xcc, 0xf8, 0x78, 0x08, 0x0d, 0xde, 0x48, 0xae, 0xac, 0x09, 0x11, 0x8f, 0x40, 0x13, 0xa7,
+	0xa1, 0xa4, 0xff, 0x30, 0x92, 0x9f, 0xa4, 0x98, 0xea, 0x3f, 0x31, 0xf8, 0x90, 0xa7, 0x6c, 0x0a,
+	0x6c, 0x5e, 0x90, 0x20, 0x74, 0x7c, 0x4f, 0x9c, 0x49, 0x86, 0xea, 0x6d, 0x04, 0x88, 0x98, 0xc4,
+	0x24, 0x8b, 0xd7, 0xe5, 0xdc, 0x71, 0xed, 0xa1, 0x33, 0x4d, 0xe6, 0xe6, 0x04, 0x60, 0x5d, 0x74,
+	0xc2, 0x9f, 0xb9, 0xf7, 0x56, 0x78, 0x23, 0x76, 0x49, 0x21, 0x4c, 0xfb, 0xda, 0xa1, 0xc2, 0x89,
+	0x68, 0x08, 0x59, 0x00, 0xca, 0x5b, 0xa8, 0xf5, 0xfd, 0xeb, 0x3e, 0xb9, 0x25, 0x2e, 0xcb, 0xa0,
+	0xcb, 0x16, 0x62, 0xff, 0x88, 0x60, 0x27, 0x98, 0x58, 0xae, 0x2b, 0x32, 0x51, 0xc3, 0x82, 0x52,
+	0xba, 0x50, 0xc3, 0x24, 0x9c, 0xf9, 0x5e, 0x48, 0xd0, 0x53, 0x68, 0x84, 0xdc, 0xde, 0x78, 0xe2,
+	0xdb, 0x44, 0x3c, 0x99, 0x10, 0x41, 0x6d, 0xdf, 0x26, 0xec, 0x70, 0x53, 0x12, 0x86, 0xd6, 0x75,
+	0x7c, 0x80, 0x98, 0x54, 0xfe, 0x5a, 0x80, 0x06, 0x7b, 0x27, 0xe2, 0xc0, 0x3f, 0x87, 0x4d, 0xc3,
+	0x9b, 0x63, 0xf2, 0x49, 0x74, 0xdc, 0x9d, 0x54, 0xa3, 0x8c, 0x44, 0xb0, 0x10, 0x40, 0xef, 0x60,
+	0xcb, 0x9c, 0x5f, 0xaa, 0x7c, 0x7c, 0xb8, 0xb0, 0x5c, 0x6e, 0xb9, 0x95, 0xe4, 0x3b, 0x61, 0xf1,
+	0x5e, 0x84, 0x33, 0xa2, 0xac, 0xc8, 0x7a, 0x81, 0x3f, 0x9f, 0xc5, 0xef, 0x69, 0x14, 0xb6, 0x0c,
+	0xa6, 0x9c, 0x41, 0x85, 0x4d, 0x9e, 0x21, 0xfa, 0x16, 0xe0, 0xca, 0xf5, 0xef, 0xc6, 0x13, 0xfe,
+	0x81, 0x28, 0xba, 0x1f, 0x43, 0xa2, 0xcf, 0xc3, 0xef, 0xa1, 0xc2, 0x08, 0xf6, 0x28, 0xb3, 0x7a,
+	0x6b, 0x1e, 0xc7, 0x5f, 0xb8, 0x4c, 0x1b, 0x47, 0x3c, 0xe5, 0x29, 0x54, 0x59, 0xb6, 0xfc, 0x39,
+	0x65, 0x61, 0xb6, 0x89, 0x6b, 0xdd, 0x0b, 0x4b, 0x11, 0xa1, 0x54, 0xa1, 0xd2, 0x9d, 0xce, 0xe8,
+	0xfd, 0x8b, 0x57, 0xd0, 0xca, 0xba, 0x8e, 0x6a, 0x50, 0xfe, 0xc5, 0xd0, 0xd8, 0x3c, 0x5f, 0x87,
+	0x4a, 0xbf, 0xab, 0x5e, 0x74, 0xa5, 0x02, 0x02, 0xd8, 0x64, 0xe0, 0xc5, 0x1b, 0xa9, 0xf8, 0xfa,
+	0xbf, 0x0d, 0xa8, 0x9c, 0x9c, 0x98, 0xce, 0x14, 0xbd, 0x84, 0xaa, 0xa8, 0x2a, 0xb4, 0x25, 0xe2,
+	0xc0, 0xad, 0xee, 0x3f, 0x16, 0x54, 0xa6, 0xe6, 0x94, 0x0d, 0xf4, 0x0a, 0x1a, 0x26, 0xa1, 0x49,
+	0x09, 0x6c, 0x0b, 0xb1, 0x18, 0xd8, 0x5f, 0x06, 0x94, 0x0d, 0xf4, 0x0c, 0x36, 0x7b, 0x84, 0xb2,
+	0x4f, 0xb5, 0xec, 0x16, 0xb0, 0x98, 0xb9, 0x95, 0x0d, 0xf4, 0x07, 0x90, 0x23, 0xa9, 0x9c, 0x81,
+	0xfd, 0xe9, 0x17, 0xbe, 0x6b, 0xf6, 0x0f, 0x3e, 0x23, 0x10, 0x2a, 0x1b, 0xe8, 0x47, 0x80, 0x81,
+	0x7f, 0x47, 0x02, 0xdf, 0x5b, 0x75, 0x23, 0xf6, 0x38, 0x2e, 0x4e, 0x65, 0x03, 0x1d, 0x43, 0xc3,
+	0xbc, 0x99, 0x53, 0xdb, 0xbf, 0x5b, 0x4f, 0xfe, 0xd7, 0x50, 0xc7, 0xe4, 0xd2, 0xf7, 0xe9, 0x5a,
+	0xd2, 0x2c, 0x61, 0xd4, 0x9f, 0x5d, 0xe3, 0x41, 0x9b, 0xbd, 0xcf, 0x24, 0xf8, 0xb2, 0xca, 0x6b,
+	0xd8, 0x36, 0xa9, 0x15, 0xd0, 0xaf, 0xd1, 0xf9, 0x19, 0x76, 0x30, 0x09, 0x97, 0xb4, 0xe2, 0xc1,
+	0x40, 0xd4, 0x56, 0x9e, 0xde, 0xf3, 0x28, 0x5d, 0xfa, 0x08, 0xad, 0x5e, 0xa5, 0xfd, 0xd4, 0x18,
+	0xa2, 0x6c, 0xa0, 0x5f, 0xb1, 0x51, 0x8d, 0xf2, 0x71, 0x25, 0xeb, 0x4e, 0x63, 0x21, 0x16, 0x46,
+	0xf1, 0xec, 0x11, 0x9a, 0x0c, 0x2b, 0xf9, 0xae, 0xc7, 0x6c, 0xee, 0x7a, 0x8b, 0xd9, 0xf5, 0xe6,
+	0x89, 0x4a, 0x8e, 0x2b, 0x39, 0x7a, 0xc7, 0x00, 0x91, 0xde, 0xc8, 0x73, 0x72, 0x75, 0x1a, 0x8b,
+	0x49, 0x87, 0xc9, 0xbf, 0x49, 0xe5, 0x39, 0xff, 0xbc, 0x0f, 0xe4, 0x42, 0x28, 0xa9, 0xae, 0x9b,
+	0x73, 0xf8, 0x1c, 0x9d, 0x77, 0xb0, 0x93, 0xda, 0x28, 0x34, 0xbc, 0x81, 0xa1, 0x27, 0xdb, 0x2d,
+	0xc6, 0xa6, 0xfc, 0xed, 0x92, 0xd2, 0x5d, 0xdb, 0xc5, 0x57, 0xd0, 0x12, 0x3a, 0x6b, 0x7b, 0xf8,
+	0x16, 0xa4, 0xc5, 0x36, 0x5f, 0xe5, 0xe0, 0x6f, 0x60, 0x4b, 0xd4, 0x59, 0x34, 0xfb, 0xaf, 0xe7,
+	0xe2, 0x1b, 0x68, 0x08, 0x2d, 0xfe, 0x49, 0xb0, 0x9e, 0xd2, 0x09, 0xec, 0x9a, 0x3c, 0xbf, 0xfc,
+	0xe9, 0xd5, 0x3c, 0xdb, 0x99, 0x58, 0xac, 0xed, 0xa1, 0xbd, 0x85, 0x7a, 0xfa, 0x55, 0xfe, 0x8c,
+	0x0d, 0xd6, 0x28, 0x1e, 0xb0, 0x91, 0x7d, 0xd9, 0xf3, 0x6c, 0xfc, 0x08, 0xb5, 0x1e, 0xa1, 0x51,
+	0xb3, 0xcf, 0xf1, 0x3c, 0x0e, 0x36, 0x17, 0xe0, 0xb1, 0xdd, 0x6e, 0xdf, 0x58, 0xde, 0x35, 0x61,
+	0xef, 0x56, 0xf4, 0x99, 0x81, 0x84, 0x48, 0xea, 0x25, 0xcb, 0xdb, 0xe8, 0x0c, 0xbe, 0x89, 0x0a,
+	0x7a, 0xf5, 0x93, 0x23, 0x67, 0xdf, 0x27, 0x0b, 0x68, 0x45, 0x5e, 0xd9, 0x38, 0xf9, 0xe1, 0xf7,
+	0xdf, 0x5f, 0x3b, 0xf4, 0x66, 0x7e, 0x79, 0x3c, 0xf1, 0xa7, 0xfc, 0x6f, 0xd5, 0x89, 0x1f, 0xd8,
+	0xe2, 0x7f, 0xd8, 0xe4, 0x1f, 0xd9, 0xcb, 0x4d, 0xfe, 0x37, 0xea, 0x9b, 0xff, 0x05, 0x00, 0x00,
+	0xff, 0xff, 0xaa, 0x2b, 0x80, 0x09, 0xa5, 0x15, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -1774,6 +1898,8 @@
 	GetServices(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Services, error)
 	// Get all the Services of an ONU by serial number
 	GetOnuServices(ctx context.Context, in *ONURequest, opts ...grpc.CallOption) (*Services, error)
+	// Get all the UNIs of an ONU by serial number
+	GetOnuUnis(ctx context.Context, in *ONURequest, opts ...grpc.CallOption) (*UNIs, error)
 	// Shutdown an ONU by serial number
 	ShutdownONU(ctx context.Context, in *ONURequest, opts ...grpc.CallOption) (*Response, error)
 	// Shutdown all ONUs in OLT
@@ -1936,6 +2062,15 @@
 	return out, nil
 }
 
+func (c *bBSimClient) GetOnuUnis(ctx context.Context, in *ONURequest, opts ...grpc.CallOption) (*UNIs, error) {
+	out := new(UNIs)
+	err := c.cc.Invoke(ctx, "/bbsim.BBSim/GetOnuUnis", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 func (c *bBSimClient) ShutdownONU(ctx context.Context, in *ONURequest, opts ...grpc.CallOption) (*Response, error) {
 	out := new(Response)
 	err := c.cc.Invoke(ctx, "/bbsim.BBSim/ShutdownONU", in, out, opts...)
@@ -2082,6 +2217,8 @@
 	GetServices(context.Context, *Empty) (*Services, error)
 	// Get all the Services of an ONU by serial number
 	GetOnuServices(context.Context, *ONURequest) (*Services, error)
+	// Get all the UNIs of an ONU by serial number
+	GetOnuUnis(context.Context, *ONURequest) (*UNIs, error)
 	// Shutdown an ONU by serial number
 	ShutdownONU(context.Context, *ONURequest) (*Response, error)
 	// Shutdown all ONUs in OLT
@@ -2156,6 +2293,9 @@
 func (*UnimplementedBBSimServer) GetOnuServices(ctx context.Context, req *ONURequest) (*Services, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method GetOnuServices not implemented")
 }
+func (*UnimplementedBBSimServer) GetOnuUnis(ctx context.Context, req *ONURequest) (*UNIs, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetOnuUnis not implemented")
+}
 func (*UnimplementedBBSimServer) ShutdownONU(ctx context.Context, req *ONURequest) (*Response, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method ShutdownONU not implemented")
 }
@@ -2452,6 +2592,24 @@
 	return interceptor(ctx, in, info, handler)
 }
 
+func _BBSim_GetOnuUnis_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).GetOnuUnis(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/bbsim.BBSim/GetOnuUnis",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(BBSimServer).GetOnuUnis(ctx, req.(*ONURequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 func _BBSim_ShutdownONU_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 	in := new(ONURequest)
 	if err := dec(in); err != nil {
@@ -2747,6 +2905,10 @@
 			Handler:    _BBSim_GetOnuServices_Handler,
 		},
 		{
+			MethodName: "GetOnuUnis",
+			Handler:    _BBSim_GetOnuUnis_Handler,
+		},
+		{
 			MethodName: "ShutdownONU",
 			Handler:    _BBSim_ShutdownONU_Handler,
 		},
diff --git a/api/bbsim/bbsim.proto b/api/bbsim/bbsim.proto
index 0216eb5..8f01dc6 100644
--- a/api/bbsim/bbsim.proto
+++ b/api/bbsim/bbsim.proto
@@ -89,6 +89,15 @@
     int32 ImageSoftwareReceivedSections = 12;
     int32 ActiveImageEntityId = 13;
     int32 CommittedImageEntityId = 14;
+    repeated UNI unis = 15;
+}
+
+message UNI {
+    int32 ID = 1;
+    int32 OnuID = 2;
+    string OnuSn = 3;
+    uint32 MeID = 4;
+    string OperState = 5;
 }
 
 message Service {
@@ -119,6 +128,10 @@
     repeated Service items = 1;
 }
 
+message UNIs {
+    repeated UNI items = 1;
+}
+
 // Inputs
 
 message ONURequest {
@@ -274,6 +287,10 @@
     rpc GetOnuServices (ONURequest) returns (Services) {
     }
 
+    // Get all the UNIs of an ONU by serial number
+    rpc GetOnuUnis (ONURequest) returns (UNIs) {
+    }
+
     // Shutdown an ONU by serial number
     rpc ShutdownONU (ONURequest) returns (Response) {
     }
diff --git a/internal/bbsim/api/onus_handler.go b/internal/bbsim/api/onus_handler.go
index 8f606d0..9fc73e7 100644
--- a/internal/bbsim/api/onus_handler.go
+++ b/internal/bbsim/api/onus_handler.go
@@ -48,6 +48,7 @@
 				ImageSoftwareExpectedSections: int32(o.ImageSoftwareExpectedSections),
 				ActiveImageEntityId:           int32(o.ActiveImageEntityId),
 				CommittedImageEntityId:        int32(o.CommittedImageEntityId),
+				Unis:                          convertBBsimUniPortsToProtoUniPorts(o.UniPorts),
 			}
 			onus.Items = append(onus.Items, &onu)
 		}
@@ -72,6 +73,7 @@
 		PonPortID:     int32(onu.PonPortID),
 		PortNo:        int32(onu.PortNo),
 		Services:      convertBBsimServicesToProtoServices(onu.Services),
+		Unis:          convertBBsimUniPortsToProtoUniPorts(onu.UniPorts),
 	}
 	return &res, nil
 }
diff --git a/internal/bbsim/api/uni_handler.go b/internal/bbsim/api/uni_handler.go
new file mode 100644
index 0000000..48eb260
--- /dev/null
+++ b/internal/bbsim/api/uni_handler.go
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package api
+
+import (
+	"context"
+	"github.com/opencord/bbsim/api/bbsim"
+	"github.com/opencord/bbsim/internal/bbsim/devices"
+)
+
+func convertBBSimUniPortToProtoUniPort(u *devices.UniPort) *bbsim.UNI {
+	return &bbsim.UNI{
+		ID:        int32(u.ID),
+		OnuID:     int32(u.Onu.ID),
+		OnuSn:     u.Onu.Sn(),
+		MeID:      uint32(u.MeId.ToUint16()),
+		OperState: u.OperState.Current(),
+	}
+}
+
+func convertBBsimUniPortsToProtoUniPorts(list []*devices.UniPort) []*bbsim.UNI {
+	unis := []*bbsim.UNI{}
+	for _, uni := range list {
+		unis = append(unis, convertBBSimUniPortToProtoUniPort(uni))
+	}
+	return unis
+}
+
+func (s BBSimServer) GetOnuUnis(ctx context.Context, req *bbsim.ONURequest) (*bbsim.UNIs, error) {
+	onu, err := s.GetONU(ctx, req)
+
+	if err != nil {
+		return nil, err
+	}
+
+	unis := bbsim.UNIs{
+		Items: onu.Unis,
+	}
+
+	return &unis, nil
+}
diff --git a/internal/bbsim/devices/onu.go b/internal/bbsim/devices/onu.go
index 1afb624..84706fd 100644
--- a/internal/bbsim/devices/onu.go
+++ b/internal/bbsim/devices/onu.go
@@ -52,6 +52,7 @@
 
 const (
 	maxOmciMsgCounter = 10
+	uniPorts          = 4 // TODO this will need to be configurable
 )
 
 const (
@@ -109,9 +110,11 @@
 	// PortNo comes with flows and it's used when sending packetIndications,
 	// There is one PortNo per UNI Port, for now we're only storing the first one
 	// FIXME add support for multiple UNIs (each UNI has a different PortNo)
-	PortNo  uint32
-	Flows   []FlowKey
-	FlowIds []uint64 // keep track of the flows we currently have in the ONU
+	// deprecated
+	PortNo   uint32
+	UniPorts []*UniPort
+	Flows    []FlowKey
+	FlowIds  []uint64 // keep track of the flows we currently have in the ONU
 
 	OperState    *fsm.FSM
 	SerialNumber *openolt.SerialNumber
@@ -131,6 +134,7 @@
 	tid       uint16
 	hpTid     uint16
 	seqNumber uint16
+	MibDb     *omcilib.MibDb
 
 	DoneChannel       chan bool // this channel is used to signal once the onu is complete (when the struct is used by BBR)
 	TrafficSchedulers *tech_profile.TrafficSchedulers
@@ -169,7 +173,9 @@
 	// state as requested by VOLTHA
 	o.OperState = getOperStateFSM(func(e *fsm.Event) {
 		onuLogger.WithFields(log.Fields{
-			"ID": o.ID,
+			"OnuId":  o.ID,
+			"IntfId": o.PonPortID,
+			"OnuSn":  o.Sn(),
 		}).Debugf("Changing ONU OperState from %s to %s", e.Src, e.Dst)
 	})
 	o.onuAlarmsInfo = make(map[omcilib.OnuAlarmInfoMapKey]omcilib.OnuAlarmInfo)
@@ -308,6 +314,29 @@
 		},
 	)
 
+	for i := 0; i < uniPorts; i++ {
+		uni, err := NewUniPort(uint32(i), &o)
+		if err != nil {
+			onuLogger.WithFields(log.Fields{
+				"OnuId":  o.ID,
+				"IntfId": o.PonPortID,
+				"OnuSn":  o.Sn(),
+				"Err":    err,
+			}).Fatal("cannot-create-uni-port")
+		}
+		o.UniPorts = append(o.UniPorts, uni)
+	}
+
+	mibDb, err := omcilib.GenerateMibDatabase(len(o.UniPorts))
+	if err != nil {
+		onuLogger.WithFields(log.Fields{
+			"OnuId":  o.ID,
+			"IntfId": o.PonPortID,
+			"OnuSn":  o.Sn(),
+		}).Fatal("cannot-generate-mibdb-for-onu")
+	}
+	o.MibDb = mibDb
+
 	return &o
 }
 
@@ -748,9 +777,9 @@
 			o.PonPort.removeGemPortBySn(o.SerialNumber)
 		}
 	case omci.MibUploadRequestType:
-		responsePkt, _ = omcilib.CreateMibUploadResponse(msg.OmciMsg.TransactionID)
+		responsePkt, _ = omcilib.CreateMibUploadResponse(msg.OmciMsg.TransactionID, o.MibDb.NumberOfCommands)
 	case omci.MibUploadNextRequestType:
-		responsePkt, _ = omcilib.CreateMibUploadNextResponse(msg.OmciPkt, msg.OmciMsg, o.MibDataSync)
+		responsePkt, _ = omcilib.CreateMibUploadNextResponse(msg.OmciPkt, msg.OmciMsg, o.MibDataSync, o.MibDb)
 	case omci.GetRequestType:
 		onuDown := o.OperState.Current() == "down"
 		responsePkt, _ = omcilib.CreateGetResponse(msg.OmciPkt, msg.OmciMsg, o.SerialNumber, o.MibDataSync, o.ActiveImageEntityId, o.CommittedImageEntityId, onuDown)
diff --git a/internal/bbsim/devices/onu_test_helpers.go b/internal/bbsim/devices/onu_test_helpers.go
index 017cc9c..1d48662 100644
--- a/internal/bbsim/devices/onu_test_helpers.go
+++ b/internal/bbsim/devices/onu_test_helpers.go
@@ -19,6 +19,7 @@
 import (
 	"context"
 	"errors"
+	omcilib "github.com/opencord/bbsim/internal/common/omci"
 	"time"
 
 	"github.com/opencord/bbsim/internal/bbsim/types"
@@ -151,6 +152,15 @@
 	}
 	o.SerialNumber = NewSN(0, ponPortId, o.ID)
 	o.Channel = make(chan types.Message, 10)
+
+	unis := []*UniPort{
+		{ID: 0, Onu: &o, MeId: omcilib.GenerateUniPortEntityId(1)},
+		{ID: 1, Onu: &o, MeId: omcilib.GenerateUniPortEntityId(2)},
+		{ID: 2, Onu: &o, MeId: omcilib.GenerateUniPortEntityId(3)},
+		{ID: 3, Onu: &o, MeId: omcilib.GenerateUniPortEntityId(4)},
+	}
+
+	o.UniPorts = unis
 	return &o
 }
 
diff --git a/internal/bbsim/devices/uni_port.go b/internal/bbsim/devices/uni_port.go
new file mode 100644
index 0000000..78640e3
--- /dev/null
+++ b/internal/bbsim/devices/uni_port.go
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package devices
+
+import (
+	"fmt"
+	"github.com/looplab/fsm"
+	omcilib "github.com/opencord/bbsim/internal/common/omci"
+	log "github.com/sirupsen/logrus"
+)
+
+const maxUniPorts = 4
+
+type UniPort struct {
+	ID        uint32
+	MeId      omcilib.EntityID
+	OperState *fsm.FSM
+	Onu       *Onu
+}
+
+func NewUniPort(ID uint32, onu *Onu) (*UniPort, error) {
+
+	// IDs starts from 0, thus the maximum UNI supported is maxUniPorts - 1
+	if ID > (maxUniPorts - 1) {
+		return nil, fmt.Errorf("%d-is-higher-than-the-maximum-supported-unis-%d", ID, maxUniPorts)
+	}
+
+	uni := UniPort{
+		ID:   ID,
+		Onu:  onu,
+		MeId: omcilib.GenerateUniPortEntityId(ID + 1),
+	}
+
+	uni.OperState = getOperStateFSM(func(e *fsm.Event) {
+		onuLogger.WithFields(log.Fields{
+			"ID":    uni.ID,
+			"OnuSn": onu.Sn(),
+		}).Debugf("changing-uni-operstate-from-%s-to-%s", e.Src, e.Dst)
+	})
+
+	return &uni, nil
+}
diff --git a/internal/bbsimctl/commands/onu.go b/internal/bbsimctl/commands/onu.go
index 33bd5ef..a986205 100644
--- a/internal/bbsimctl/commands/onu.go
+++ b/internal/bbsimctl/commands/onu.go
@@ -34,7 +34,8 @@
 
 const (
 	DEFAULT_ONU_DEVICE_HEADER_FORMAT               = "table{{ .PonPortID }}\t{{ .ID }}\t{{ .PortNo }}\t{{ .SerialNumber }}\t{{ .OperState }}\t{{ .InternalState }}\t{{ .ImageSoftwareExpectedSections }}\t{{ .ImageSoftwareReceivedSections }}\t{{ .ActiveImageEntityId }}\t{{ .CommittedImageEntityId }}"
-	DEFAULT_ONU_DEVICE_HEADER_FORMAT_WITH_SERVICES = "table{{ .PonPortID }}\t{{ .ID }}\t{{ .PortNo }}\t{{ .SerialNumber }}\t{{ .OperState }}\t{{ .InternalState }}\t{{ .ImageSoftwareExpectedSections }}\t{{ .ImageSoftwareReceivedSections }}\t{{ .ActiveImageEntityId }}\t{{ .CommittedImageEntityId }}\t{{ .Services }}"
+	DEFAULT_ONU_DEVICE_HEADER_FORMAT_WITH_SERVICES = "table{{ .PonPortID }}\t{{ .ID }}\t{{ .PortNo }}\t{{ .SerialNumber }}\t{{ .OperState }}\t{{ .InternalState }}\t{{ .ImageSoftwareExpectedSections }}\t{{ .ImageSoftwareReceivedSections }}\t{{ .ActiveImageEntityId }}\t{{ .CommittedImageEntityId }}\t{{ .Unis }}\t{{ .Services }}"
+	DEFAULT_UNI_HEADER_FORMAT                      = "table{{ .OnuSn }}\t{{ .OnuID }}\t{{ .ID }}\t{{ .MeID }}\t{{ .OperState }}"
 )
 
 type OnuSnString string
@@ -64,6 +65,12 @@
 	} `positional-args:"yes" required:"yes"`
 }
 
+type ONUUnis struct {
+	Args struct {
+		OnuSn OnuSnString
+	} `positional-args:"yes" required:"yes"`
+}
+
 type ONUShutDown struct {
 	Args struct {
 		OnuSn OnuSnString
@@ -112,6 +119,7 @@
 	List              ONUList              `command:"list"`
 	Get               ONUGet               `command:"get"`
 	Services          ONUServices          `command:"services"`
+	Unis              ONUUnis              `command:"unis"`
 	ShutDown          ONUShutDown          `command:"shutdown"`
 	PowerOn           ONUPowerOn           `command:"poweron"`
 	RestartEapol      ONUEapolRestart      `command:"auth_restart"`
@@ -214,6 +222,31 @@
 	return nil
 }
 
+func (options *ONUUnis) 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.GetOnuUnis(ctx, &req)
+
+	if err != nil {
+		log.Fatalf("Cannot not get unis for ONU %s: %v", options.Args.OnuSn, err)
+		return err
+	}
+
+	tableFormat := format.Format(DEFAULT_UNI_HEADER_FORMAT)
+	if err := tableFormat.Execute(os.Stdout, true, res.Items); err != nil {
+		log.Fatalf("Error while formatting Unis table: %s", err)
+	}
+
+	return nil
+}
+
 func (options *ONUShutDown) Execute(args []string) error {
 
 	client, conn := connect()
diff --git a/internal/common/omci/get.go b/internal/common/omci/get.go
index 384fc0b..73e53ac 100644
--- a/internal/common/omci/get.go
+++ b/internal/common/omci/get.go
@@ -119,7 +119,7 @@
 		EntityID: entityID,
 		Attributes: me.AttributeValueMap{
 			"ManagedEntityId": entityID,
-			"EquipmentId":     toOctets("12345123451234512345", 20),
+			"EquipmentId":     ToOctets("12345123451234512345", 20),
 			"OpticalNetworkUnitManagementAndControlChannelOmccVersion": 180,
 			"VendorProductCode":                           0,
 			"SecurityCapability":                          1,
@@ -157,8 +157,8 @@
 		EntityID: entityID,
 		Attributes: me.AttributeValueMap{
 			"ManagedEntityId":         entityID,
-			"VendorId":                toOctets("BBSM", 4),
-			"Version":                 toOctets("v0.0.1", 14),
+			"VendorId":                ToOctets("BBSM", 4),
+			"Version":                 ToOctets("v0.0.1", 14),
 			"SerialNumber":            append(onuSn.VendorId, onuSn.VendorSpecific...),
 			"TrafficManagementOption": 0,
 			"Deprecated":              0,
@@ -166,8 +166,8 @@
 			"AdministrativeState":     0,
 			"OperationalState":        0,
 			"OnuSurvivalTime":         10,
-			"LogicalOnuId":            toOctets("BBSM", 24),
-			"LogicalPassword":         toOctets("BBSM", 12),
+			"LogicalOnuId":            ToOctets("BBSM", 24),
+			"LogicalPassword":         ToOctets("BBSM", 12),
 			"CredentialsStatus":       0,
 			"ExtendedTcLayerOptions":  0,
 		},
@@ -224,12 +224,12 @@
 		},
 		Attributes: me.AttributeValueMap{
 			"ManagedEntityId": 0,
-			"Version":         toOctets("00000000000001", 14),
+			"Version":         ToOctets("00000000000001", 14),
 			"IsCommitted":     committed,
 			"IsActive":        active,
 			"IsValid":         1,
-			"ProductCode":     toOctets("product-code", 25),
-			"ImageHash":       toOctets("broadband-sim", 16),
+			"ProductCode":     ToOctets("product-code", 25),
+			"ImageHash":       ToOctets("broadband-sim", 16),
 		},
 		Result:        me.Success,
 		AttributeMask: attributeMask,
@@ -253,7 +253,7 @@
 		},
 		Attributes: me.AttributeValueMap{
 			"ManagedEntityId": 0,
-			"MacAddress":      toOctets("aabbcc", 6),
+			"MacAddress":      ToOctets("aabbcc", 6),
 		},
 		Result:        me.Success,
 		AttributeMask: attributeMask,
@@ -590,7 +590,7 @@
 	}
 }
 
-func toOctets(str string, size int) []byte {
+func ToOctets(str string, size int) []byte {
 	asciiBytes := []byte(str)
 
 	if len(asciiBytes) < size {
diff --git a/internal/common/omci/mib_test.go b/internal/common/omci/mib_test.go
index a4ffbb7..139e3e1 100644
--- a/internal/common/omci/mib_test.go
+++ b/internal/common/omci/mib_test.go
@@ -71,27 +71,99 @@
 
 func TestCreateMibUploadNextResponse(t *testing.T) {
 
+	const uniPortCount = 4
+
+	var (
+		onuDataEntityId = EntityID{0x00, 0x00}
+		onu2gEntityId   = EntityID{0x00, 0x00}
+		anigEntityId    = EntityID{tcontSlotId, aniGId}
+	)
+
+	// create a fake mibDb, we only need to test that given a CommandSequenceNumber
+	// we return the corresponding entry
+	// the only exception is for OnuData in which we need to replace the MibDataSync attribute with the current value
+	mibDb := MibDb{
+		NumberOfCommands: 4,
+		items:            []MibDbEntry{},
+	}
+
+	mibDb.items = append(mibDb.items, MibDbEntry{
+		me.OnuDataClassID,
+		onuDataEntityId,
+		me.AttributeValueMap{"MibDataSync": 0},
+	})
+
+	mibDb.items = append(mibDb.items, MibDbEntry{
+		me.CircuitPackClassID,
+		circuitPackEntityID,
+		me.AttributeValueMap{
+			"Type":          ethernetUnitType,
+			"NumberOfPorts": uniPortCount,
+			"SerialNumber":  ToOctets("BBSM-Circuit-Pack", 20),
+			"Version":       ToOctets("v0.0.1", 20),
+		},
+	})
+
+	mibDb.items = append(mibDb.items, MibDbEntry{
+		me.AniGClassID,
+		anigEntityId,
+		me.AttributeValueMap{
+			"Arc":                         0,
+			"ArcInterval":                 0,
+			"Deprecated":                  0,
+			"GemBlockLength":              48,
+			"LowerOpticalThreshold":       255,
+			"LowerTransmitPowerThreshold": 129,
+			"OnuResponseTime":             0,
+			"OpticalSignalLevel":          57428,
+			"PiggybackDbaReporting":       0,
+			"SignalDegradeThreshold":      9,
+			"SignalFailThreshold":         5,
+			"SrIndication":                1,
+			"TotalTcontNumber":            8,
+			"TransmitOpticalLevel":        3171,
+			"UpperOpticalThreshold":       255,
+			"UpperTransmitPowerThreshold": 129,
+		},
+	})
+
+	mibDb.items = append(mibDb.items, MibDbEntry{
+		me.Onu2GClassID,
+		onu2gEntityId,
+		me.AttributeValueMap{
+			"ConnectivityCapability":                      127,
+			"CurrentConnectivityMode":                     0,
+			"Deprecated":                                  1,
+			"PriorityQueueScaleFactor":                    1,
+			"QualityOfServiceQosConfigurationFlexibility": 63,
+			"Sysuptime":                                   0,
+			"TotalGemPortIdNumber":                        8,
+			"TotalPriorityQueueNumber":                    64,
+			"TotalTrafficSchedulerNumber":                 8,
+		},
+	})
+
 	tests := []struct {
 		name string
 		args mibArgs
 		want mibExpected
 	}{
 		{"mibUploadNext-0", createTestMibUploadNextArgs(t, 1, 0),
-
-			mibExpected{messageType: omci.MibUploadNextResponseType, transactionId: 1, entityID: 0, entityClass: me.OnuDataClassID, attributes: map[string]interface{}{"MibDataSync": MDS}}},
+			mibExpected{messageType: omci.MibUploadNextResponseType, transactionId: 1, entityID: onuDataEntityId.ToUint16(), entityClass: me.OnuDataClassID, attributes: map[string]interface{}{"MibDataSync": MDS}}},
 		{"mibUploadNext-1", createTestMibUploadNextArgs(t, 2, 1),
-			mibExpected{messageType: omci.MibUploadNextResponseType, transactionId: 2, entityID: 257, entityClass: me.CircuitPackClassID, attributes: map[string]interface{}{"Type": uint8(47), "NumberOfPorts": uint8(4)}}},
-		{"mibUploadNext-4", createTestMibUploadNextArgs(t, 3, 4),
-			mibExpected{messageType: omci.MibUploadNextResponseType, transactionId: 3, entityID: 257, entityClass: me.CircuitPackClassID, attributes: map[string]interface{}{"PowerShedOverride": uint32(0)}}},
-		{"mibUploadNext-10", createTestMibUploadNextArgs(t, 4, 10),
-			mibExpected{messageType: omci.MibUploadNextResponseType, transactionId: 4, entityID: 258, entityClass: me.PhysicalPathTerminationPointEthernetUniClassID, attributes: map[string]interface{}{"SensedType": uint8(47)}}},
+			mibExpected{messageType: omci.MibUploadNextResponseType, transactionId: 2, entityID: circuitPackEntityID.ToUint16(), entityClass: me.CircuitPackClassID, attributes: map[string]interface{}{"Type": uint8(47), "NumberOfPorts": uint8(4)}}},
+		{"mibUploadNext-2", createTestMibUploadNextArgs(t, 3, 2),
+			mibExpected{messageType: omci.MibUploadNextResponseType, transactionId: 3, entityID: anigEntityId.ToUint16(), entityClass: me.AniGClassID, attributes: map[string]interface{}{"GemBlockLength": uint16(48)}}},
+		{"mibUploadNext-3", createTestMibUploadNextArgs(t, 4, 3),
+			mibExpected{messageType: omci.MibUploadNextResponseType, transactionId: 4, entityID: onuDataEntityId.ToUint16(), entityClass: me.Onu2GClassID, attributes: map[string]interface{}{"TotalPriorityQueueNumber": uint16(64)}}},
 	}
 
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
 
 			// create the packet starting from the mibUploadNextRequest
-			data, _ := CreateMibUploadNextResponse(tt.args.omciPkt, tt.args.omciMsg, MDS)
+			data, err := CreateMibUploadNextResponse(tt.args.omciPkt, tt.args.omciMsg, MDS, &mibDb)
+			assert.NilError(t, err)
 			omciMsg, omciPkt := omciBytesToMsg(t, data)
 
 			assert.Equal(t, omciMsg.MessageType, tt.want.messageType)
@@ -107,65 +179,15 @@
 			assert.Equal(t, msgObj.ReportedME.GetEntityID(), tt.want.entityID)
 
 			for k, v := range tt.want.attributes {
-				attr, _ := msgObj.ReportedME.GetAttribute(k)
+				attr, err := msgObj.ReportedME.GetAttribute(k)
+				assert.NilError(t, err)
 				assert.Equal(t, attr, v)
 			}
 		})
 	}
-}
 
-type pqueueExpected struct {
-	entityId    uint16
-	relatedPort uint32
-}
-
-func TestGeneratePriorityQueueMe(t *testing.T) {
-
-	tests := []struct {
-		name     string
-		sequence uint16
-		want     pqueueExpected
-	}{
-		{"generate-pq-downstream-1", 26,
-			pqueueExpected{entityId: 1, relatedPort: 16842752}},
-		{"generate-pq-downstream-2", 30,
-			pqueueExpected{entityId: 2, relatedPort: 16842753}},
-		{"generate-pq-downstream-3", 58,
-			pqueueExpected{entityId: 9, relatedPort: 16842760}},
-		{"generate-pq-upstream-1", 28,
-			pqueueExpected{entityId: 32769, relatedPort: 2147549184}},
-		{"generate-pq-upstream-2", 32,
-			pqueueExpected{entityId: 32770, relatedPort: 2147549185}},
-		{"generate-pq-upstream-3", 60,
-			pqueueExpected{entityId: 32777, relatedPort: 2147614720}},
-	}
-
-	for _, tt := range tests {
-		t.Run(tt.name, func(t *testing.T) {
-			reportedMe, meErr := GeneratePriorityQueueMe(tt.sequence)
-			if meErr.GetError() != nil {
-				t.Fatal(meErr.Error())
-			}
-
-			assert.Equal(t, reportedMe.GetEntityID(), tt.want.entityId)
-
-			relatedPort, _ := reportedMe.GetAttribute("RelatedPort")
-			assert.Equal(t, relatedPort, tt.want.relatedPort)
-		})
-	}
-
-	// test that the related ports are unique
-	allRelatedPorts := make(map[uint32]struct{})
-	for v := 26; v <= 281; v++ {
-		reportedMe, meErr := GeneratePriorityQueueMe(uint16(v))
-		if meErr.GetError() != nil {
-			t.Fatal(meErr.Error())
-		}
-		relatedPort, _ := reportedMe.GetAttribute("RelatedPort")
-		allRelatedPorts[relatedPort.(uint32)] = struct{}{}
-	}
-
-	// we report 128 queues total, but each of them is comprised of 2 messages
-	// that's why the 256 iterations
-	assert.Equal(t, len(allRelatedPorts), 128)
+	// now try to get a non existing command from the DB anche expect an error
+	args := createTestMibUploadNextArgs(t, 1, 20)
+	_, err := CreateMibUploadNextResponse(args.omciPkt, args.omciMsg, MDS, &mibDb)
+	assert.Error(t, err, "mibdb-does-not-contain-item")
 }
diff --git a/internal/common/omci/mibpackets.go b/internal/common/omci/mibpackets.go
index 6d22200..8db0709 100755
--- a/internal/common/omci/mibpackets.go
+++ b/internal/common/omci/mibpackets.go
@@ -23,25 +23,12 @@
 	"github.com/opencord/omci-lib-go"
 	me "github.com/opencord/omci-lib-go/generated"
 	log "github.com/sirupsen/logrus"
-	"strconv"
 )
 
 var omciLogger = log.WithFields(log.Fields{
 	"module": "OMCI",
 })
 
-// we have a fixed number of 8 T-CONTS
-var reportedTcontsMeId = []uint16{
-	32769,
-	32770,
-	32771,
-	32772,
-	32773,
-	32774,
-	32775,
-	32776,
-}
-
 // NOTE this is basically the same as https://github.com/opencord/voltha-openonu-adapter-go/blob/master/internal/pkg/onuadaptercore/omci_cc.go#L545-L564
 // we should probably move it in "omci-lib-go"
 func Serialize(msgType omci.MessageType, request gopacket.SerializableLayer, tid uint16) ([]byte, error) {
@@ -112,10 +99,7 @@
 	return HexEncode(pkt)
 }
 
-func CreateMibUploadResponse(tid uint16) ([]byte, error) {
-
-	numberOfCommands := uint16(291) //NOTE should this be configurable? (not until we have moved all the messages away from omci-sim)
-
+func CreateMibUploadResponse(tid uint16, numberOfCommands uint16) ([]byte, error) {
 	request := &omci.MibUploadResponse{
 		MeBasePacket: omci.MeBasePacket{
 			EntityClass: me.OnuDataClassID,
@@ -168,7 +152,7 @@
 	return msgObj, nil
 }
 
-func CreateMibUploadNextResponse(omciPkt gopacket.Packet, omciMsg *omci.OMCI, mds uint8) ([]byte, error) {
+func CreateMibUploadNextResponse(omciPkt gopacket.Packet, omciMsg *omci.OMCI, mds uint8, mibDb *MibDb) ([]byte, error) {
 
 	msgObj, err := ParseMibUploadNextRequest(omciPkt)
 	if err != nil {
@@ -183,256 +167,28 @@
 		"CommandSequenceNumber": msgObj.CommandSequenceNumber,
 	}).Trace("received-omci-mibUploadNext-request")
 
-	var reportedMe *me.ManagedEntity
-	var meErr me.OmciErrors
+	if msgObj.CommandSequenceNumber > mibDb.NumberOfCommands {
+		omciLogger.WithFields(log.Fields{
+			"CommandSequenceNumber": msgObj.CommandSequenceNumber,
+			"MibDbNumberOfCommands": mibDb.NumberOfCommands,
+		}).Error("mibdb-does-not-contain-item")
+		return nil, fmt.Errorf("mibdb-does-not-contain-item")
+	}
+	currentEntry := mibDb.items[int(msgObj.CommandSequenceNumber)]
+	reportedMe, meErr := me.LoadManagedEntityDefinition(currentEntry.classId, me.ParamData{
+		EntityID:   currentEntry.entityId.ToUint16(),
+		Attributes: currentEntry.params,
+	})
 
-	switch msgObj.CommandSequenceNumber {
-	case 0:
-		reportedMe, meErr = me.NewOnuData(me.ParamData{Attributes: me.AttributeValueMap{
-			"MibDataSync": mds,
-		}})
-		if meErr.GetError() != nil {
-			omciLogger.Errorf("NewOnuData %v", meErr.Error())
-		}
+	if meErr.GetError() != nil {
+		omciLogger.Errorf("Error while generating %s: %v", currentEntry.classId.String(), meErr.Error())
+	}
 
-	case 1:
-		reportedMe, meErr = me.NewCircuitPack(me.ParamData{
-			EntityID: 257, // first UNI
-			Attributes: me.AttributeValueMap{
-				"Type":          47,
-				"NumberOfPorts": 4,
-				"SerialNumber":  toOctets("BBSM-Circuit-Pack", 20),
-				"Version":       toOctets("v0.0.1", 20),
-			}})
-		if meErr.GetError() != nil {
-			omciLogger.Errorf("NewCircuitPack %v", meErr.Error())
+	if reportedMe.GetClassID() == me.OnuDataClassID {
+		// if this is ONU-Data we need to replace the MDS
+		if err := reportedMe.SetAttribute("MibDataSync", mds); err.GetError() != nil {
+			omciLogger.Errorf("Error while setting mds in %s: %v", currentEntry.classId.String(), meErr.Error())
 		}
-	case 2:
-		reportedMe, meErr = me.NewCircuitPack(me.ParamData{
-			EntityID: 257, // first UNI
-			Attributes: me.AttributeValueMap{
-				"VendorId":            "ONF",
-				"AdministrativeState": 0,
-				"OperationalState":    0,
-				"BridgedOrIpInd":      0,
-			}})
-		if meErr.GetError() != nil {
-			omciLogger.Errorf("NewCircuitPack %v", meErr.Error())
-		}
-	case 3:
-		reportedMe, meErr = me.NewCircuitPack(me.ParamData{
-			EntityID: 257, // first UNI
-			Attributes: me.AttributeValueMap{
-				"EquipmentId":                 toOctets("BBSM-Circuit-Pack", 20),
-				"CardConfiguration":           0,
-				"TotalTContBufferNumber":      8,
-				"TotalPriorityQueueNumber":    8,
-				"TotalTrafficSchedulerNumber": 16,
-			}})
-		if meErr.GetError() != nil {
-			omciLogger.Errorf("NewCircuitPack %v", meErr.Error())
-		}
-	case 4:
-		reportedMe, meErr = me.NewCircuitPack(me.ParamData{
-			EntityID: 257, // first UNI
-			Attributes: me.AttributeValueMap{
-				"PowerShedOverride": uint32(0),
-			}})
-		if meErr.GetError() != nil {
-			omciLogger.Errorf("NewCircuitPack %v", meErr.Error())
-		}
-	case 5:
-		reportedMe, meErr = me.NewCircuitPack(me.ParamData{
-			EntityID: 257,
-			Attributes: me.AttributeValueMap{
-				"Type":          238,
-				"NumberOfPorts": 4, //number of UNI for this device
-				"SerialNumber":  toOctets("BBSM-Circuit-Pack-2", 20),
-				"Version":       toOctets("v0.0.1", 20),
-			}})
-		if meErr.GetError() != nil {
-			omciLogger.Errorf("NewCircuitPack %v", meErr.Error())
-		}
-	case 6:
-		reportedMe, meErr = me.NewCircuitPack(me.ParamData{
-			EntityID: 257, // first UNI
-			Attributes: me.AttributeValueMap{
-				"VendorId":            "ONF",
-				"AdministrativeState": 0,
-				"OperationalState":    0,
-				"BridgedOrIpInd":      0,
-			}})
-		if meErr.GetError() != nil {
-			omciLogger.Errorf("NewCircuitPack %v", meErr.Error())
-		}
-	case 7:
-		reportedMe, meErr = me.NewCircuitPack(me.ParamData{
-			EntityID: 257, // first UNI
-			Attributes: me.AttributeValueMap{
-				"EquipmentId":                 toOctets("BBSM-Circuit-Pack", 20),
-				"CardConfiguration":           0,
-				"TotalTContBufferNumber":      0,
-				"TotalPriorityQueueNumber":    8,
-				"TotalTrafficSchedulerNumber": 0,
-			}})
-		if meErr.GetError() != nil {
-			omciLogger.Errorf("NewCircuitPack %v", meErr.Error())
-		}
-	case 8:
-		reportedMe, meErr = me.NewCircuitPack(me.ParamData{
-			EntityID: 257, // first UNI
-			Attributes: me.AttributeValueMap{
-				"PowerShedOverride": uint32(0),
-			}})
-		if meErr.GetError() != nil {
-			omciLogger.Errorf("NewCircuitPack %v", meErr.Error())
-		}
-	case 9, 10, 11, 12:
-		// NOTE we're reporting for different UNIs, the IDs are 257, 258, 259, 260
-		meInstance := 248 + msgObj.CommandSequenceNumber
-		reportedMe, meErr = me.NewPhysicalPathTerminationPointEthernetUni(me.ParamData{
-			EntityID: meInstance,
-			Attributes: me.AttributeValueMap{
-				"ExpectedType":                  0,
-				"SensedType":                    47,
-				"AutoDetectionConfiguration":    0,
-				"EthernetLoopbackConfiguration": 0,
-				"AdministrativeState":           0,
-				"OperationalState":              0,
-				"ConfigurationInd":              3,
-				"MaxFrameSize":                  1518,
-				"DteOrDceInd":                   0,
-				"PauseTime":                     0,
-				"BridgedOrIpInd":                2,
-				"Arc":                           0,
-				"ArcInterval":                   0,
-				"PppoeFilter":                   0,
-				"PowerControl":                  0,
-			}})
-		if meErr.GetError() != nil {
-			omciLogger.Errorf("NewPhysicalPathTerminationPointEthernetUni %v", meErr.Error())
-		}
-	case 13, 14, 15, 16, 17, 18, 19, 20:
-		reportedMe, meErr = me.NewTCont(me.ParamData{
-			// NOTE fetch the correct T-CONT MeID based on the sequence number
-			EntityID: reportedTcontsMeId[msgObj.CommandSequenceNumber-13],
-			Attributes: me.AttributeValueMap{
-				"AllocId": 65535,
-			},
-		})
-		if meErr.GetError() != nil {
-			omciLogger.Errorf("NewTCont %v", meErr.Error())
-		}
-	case 21:
-		reportedMe, meErr = me.NewAniG(me.ParamData{
-			EntityID: 32769, // same as the first T-CONT
-			Attributes: me.AttributeValueMap{
-				"Arc":                         0,
-				"ArcInterval":                 0,
-				"Deprecated":                  0,
-				"GemBlockLength":              48,
-				"LowerOpticalThreshold":       255,
-				"LowerTransmitPowerThreshold": 129,
-				"OnuResponseTime":             0,
-				"OpticalSignalLevel":          57428,
-				"PiggybackDbaReporting":       0,
-				"SignalDegradeThreshold":      9,
-				"SignalFailThreshold":         5,
-				"SrIndication":                1,
-				"TotalTcontNumber":            8,
-				"TransmitOpticalLevel":        3171,
-				"UpperOpticalThreshold":       255,
-				"UpperTransmitPowerThreshold": 129,
-			},
-		})
-		if meErr.GetError() != nil {
-			omciLogger.Errorf("NewAniG %v", meErr.Error())
-		}
-	case 22, 23, 24, 25:
-		// NOTE we're reporting for different UNIs, the IDs are 257, 258, 259, 260
-		meInstance := 235 + msgObj.CommandSequenceNumber
-		reportedMe, meErr = me.NewUniG(me.ParamData{
-			EntityID: meInstance,
-			Attributes: me.AttributeValueMap{
-				"AdministrativeState":         0,
-				"Deprecated":                  0,
-				"ManagementCapability":        0,
-				"NonOmciManagementIdentifier": 0,
-				"RelayAgentOptions":           0,
-			}})
-		if meErr.GetError() != nil {
-			omciLogger.Errorf("NewUniG %v", meErr.Error())
-		}
-	// Prior-Q with mask downstream
-	case 26, 30, 34, 38, 42, 46, 50, 54,
-		58, 62, 66, 70, 74, 78, 82, 86,
-		90, 94, 98, 102, 106, 110, 114, 118,
-		122, 126, 130, 134, 138, 142, 146, 150,
-		154, 158, 162, 166, 170, 174, 178, 182,
-		186, 190, 194, 198, 202, 206, 210, 214,
-		218, 222, 226, 230, 234, 238, 242, 246,
-		250, 254, 258, 262, 266, 270, 274, 278,
-		// Prior-Q with attribute list downstream
-		27, 31, 35, 39, 43, 47, 51, 55,
-		59, 63, 67, 71, 75, 79, 83, 87,
-		91, 95, 99, 103, 107, 111, 115, 119,
-		123, 127, 131, 135, 139, 143, 147, 151,
-		155, 159, 163, 167, 171, 175, 179, 183,
-		187, 191, 195, 199, 203, 207, 211, 215,
-		219, 223, 227, 231, 235, 239, 243, 247,
-		251, 255, 259, 263, 267, 271, 275, 279,
-		// Prior-Q with mask upstream
-		28, 32, 36, 40, 44, 48, 52, 56,
-		60, 64, 68, 72, 76, 80, 84, 88,
-		92, 96, 100, 104, 108, 112, 116, 120,
-		124, 128, 132, 136, 140, 144, 148, 152,
-		156, 160, 164, 168, 172, 176, 180, 184,
-		188, 192, 196, 200, 204, 208, 212, 216,
-		220, 224, 228, 232, 236, 240, 244, 248,
-		252, 256, 260, 264, 268, 272, 276, 280,
-		// Prior-Q with attribute list upstream
-		29, 33, 37, 41, 45, 49, 53, 57,
-		61, 65, 69, 73, 77, 81, 85, 89,
-		93, 97, 101, 105, 109, 113, 117, 121,
-		125, 129, 133, 137, 141, 145, 149, 153,
-		157, 161, 165, 169, 173, 177, 181, 185,
-		189, 193, 197, 201, 205, 209, 213, 217,
-		221, 225, 229, 233, 237, 241, 245, 249,
-		253, 257, 261, 265, 269, 273, 277, 281:
-
-		reportedMe, meErr = GeneratePriorityQueueMe(msgObj.CommandSequenceNumber)
-
-		if meErr.GetError() != nil {
-			omciLogger.Errorf("NewPriorityQueue %v", meErr.Error())
-		}
-	case 282, 283, 284, 285, 286, 287, 288, 289:
-		reportedMe, meErr = me.NewTrafficScheduler(me.ParamData{Attributes: me.AttributeValueMap{
-			"TContPointer":            32768, // NOTE does this need to change?
-			"TrafficSchedulerPointer": 0,
-			"Policy":                  02,
-			"PriorityWeight":          0,
-		}})
-		if meErr.GetError() != nil {
-			omciLogger.Errorf("NewTrafficScheduler %v", meErr.Error())
-		}
-	case 290:
-		reportedMe, meErr = me.NewOnu2G(me.ParamData{Attributes: me.AttributeValueMap{
-			"ConnectivityCapability":                      127,
-			"CurrentConnectivityMode":                     0,
-			"Deprecated":                                  1,
-			"PriorityQueueScaleFactor":                    1,
-			"QualityOfServiceQosConfigurationFlexibility": 63,
-			"Sysuptime":                                   0,
-			"TotalGemPortIdNumber":                        8,
-			"TotalPriorityQueueNumber":                    64,
-			"TotalTrafficSchedulerNumber":                 8,
-		}})
-		if meErr.GetError() != nil {
-			omciLogger.Errorf("NewOnu2G %v", meErr.Error())
-		}
-	default:
-		omciLogger.Warn("unsupported-CommandSequenceNumber-in-mib-upload-next", msgObj.CommandSequenceNumber)
-		return nil, nil
 	}
 
 	response := &omci.MibUploadNextResponse{
@@ -457,83 +213,3 @@
 
 	return pkt, nil
 }
-
-func GeneratePriorityQueueMe(sequence uint16) (*me.ManagedEntity, me.OmciErrors) {
-
-	iteration := sequence - 26
-
-	// we report 256 messages for priority queues,
-	// 128 downstream and 128 upstream
-	// we repeat 64 times the quartet:
-	// - downstream with mask
-	// - downstream with attributes (same MeID as the previous)
-	// - upstream with mask
-	// - upstream with attributes (same MeID as the previous)
-
-	// very ugly way to define whether the priority queue is upstream or downstream
-	// (first 2 blocks are downstream, second two are upstream)
-	// for example sequence 26, 27 are downstream
-	// sequence 28, 29 are upstream
-	isDownstream := ((sequence-26)%4 == 0) || ((sequence-27)%4 == 0)
-	// entityIds are:
-	// - 1 to 64 for downstream (hex 0001 to 0040)
-	// - 32769 to 32832 for upstream (hex 8001 to 8040)
-	var entityId uint16
-	if isDownstream {
-		entityId = (iteration)/4 + 1
-	} else {
-		entityId = (iteration)/4 + 32769
-	}
-
-	var relatedPort uint32
-	if isDownstream {
-		// downstream the related port is:
-		// - Circuit Pack/ UNI port of UNI Port (01 01/04)
-		// - priority 0 to 15 -> iteration%16
-
-		// every 16 iteration (of 4 commands) we move to the next the TCONT MeID
-		uniPort := int(iteration/64) + 1
-		priority := (iteration / 4) % 16
-
-		// concat the uniPort and priority in an hex string
-		// we have a single circuit pack, so we hardcode it
-		v := fmt.Sprintf("010%x000%x", uniPort, priority)
-
-		// convert back to int
-		k, _ := strconv.ParseInt(v, 16, 64)
-		relatedPort = uint32(k)
-	} else {
-		// upstream the related port is:
-		// - Tcont MeID -> reportedTcontsMeId[ceil(iteration/4/8)]
-		// - priority 0 to 7 -> iteration%8
-
-		// every 8 iteration (of 4 commands) we move to the next the TCONT MeID
-		tcontMe := reportedTcontsMeId[int(iteration/32)]
-		priority := (iteration / 4) % 8
-
-		// concat the tcontMe and priority in an hex string
-		v := fmt.Sprintf("%x000%x", tcontMe, priority)
-
-		// convert back to int
-		k, _ := strconv.ParseInt(v, 16, 64)
-		relatedPort = uint32(k)
-	}
-
-	return me.NewPriorityQueue(me.ParamData{
-		EntityID: entityId,
-		Attributes: me.AttributeValueMap{
-			"QueueConfigurationOption":                            0,
-			"MaximumQueueSize":                                    100,
-			"AllocatedQueueSize":                                  100,
-			"DiscardBlockCounterResetInterval":                    0,
-			"ThresholdValueForDiscardedBlocksDueToBufferOverflow": 0,
-			"RelatedPort":                                         relatedPort,
-			"TrafficSchedulerPointer":                             264,
-			"Weight":                                              1,
-			"BackPressureOperation":                               1,
-			"BackPressureTime":                                    0,
-			"BackPressureOccurQueueThreshold":                     0,
-			"BackPressureClearQueueThreshold":                     0,
-		},
-	})
-}
diff --git a/internal/common/omci/onu_mib_db.go b/internal/common/omci/onu_mib_db.go
new file mode 100644
index 0000000..c8696a7
--- /dev/null
+++ b/internal/common/omci/onu_mib_db.go
@@ -0,0 +1,362 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package omci
+
+import (
+	"encoding/binary"
+	"encoding/hex"
+	me "github.com/opencord/omci-lib-go/generated"
+)
+
+type MibDbEntry struct {
+	classId  me.ClassID
+	entityId EntityID
+	params   me.AttributeValueMap
+}
+
+type MibDb struct {
+	NumberOfCommands uint16
+	items            []MibDbEntry
+}
+
+type EntityID []byte
+
+func (e EntityID) ToString() string {
+	return hex.EncodeToString(e)
+}
+
+func (e EntityID) ToUint16() uint16 {
+	return binary.BigEndian.Uint16(e)
+}
+
+func (e EntityID) ToUint32() uint32 {
+	return binary.BigEndian.Uint32(e)
+}
+
+const (
+	cardHolderOnuType byte = 0x01 // ONU is a single piece of integrated equipment
+	ethernetUnitType  byte = 0x2f // Ethernet BASE-T
+	xgsPonUnitType    byte = 0xee // XG-PON10G10
+	cardHolderSlotID  byte = 0x01
+	tcontSlotId       byte = 0x80 // why is this not the same as the cardHolderSlotID, it does not point to anything
+	aniGId            byte = 0x01
+
+	upstreamPriorityQueues   = 8  // Number of queues for each T-CONT
+	downstreamPriorityQueues = 16 // Number of queues for each PPTP
+	tconts                   = 8  // NOTE will we ever need to configure this?
+	// trafficSchedulers        = 8  // NOTE will we ever need to configure this?
+)
+
+var (
+	cardHolderEntityID  = EntityID{cardHolderOnuType, cardHolderSlotID}
+	circuitPackEntityID = cardHolderEntityID // is the same as that of the cardholder ME containing this circuit pack instance
+)
+
+func GenerateUniPortEntityId(id uint32) EntityID {
+	return EntityID{cardHolderSlotID, byte(id)}
+}
+
+// creates a MIB database for a ONU
+// CircuitPack and CardHolder are static, everything else can be configured
+func GenerateMibDatabase(uniPortCount int) (*MibDb, error) {
+
+	mibDb := MibDb{
+		items: []MibDbEntry{},
+	}
+
+	// the first element to return is the ONU-Data
+	mibDb.items = append(mibDb.items, MibDbEntry{
+		me.OnuDataClassID,
+		EntityID{0x00, 0x00},
+		me.AttributeValueMap{"MibDataSync": 0}, // FIXME this needs to be parametrized before sending the response
+	})
+
+	// then we report the CardHolder
+	// NOTE we have not report it till now, so leave it commented out
+	//mibDb.items = append(mibDb.items, MibDbEntry{
+	//	me.CardholderClassID,
+	//	cardHolderEntityID,
+	//	me.AttributeValueMap{
+	//		"ActualPlugInUnitType":   cardHolderOnuType,
+	//		"ExpectedPlugInUnitType": ethernetUnitType,
+	//	},
+	//})
+
+	// circuitPack XG-PON10G10
+	mibDb.items = append(mibDb.items, MibDbEntry{
+		me.CircuitPackClassID,
+		circuitPackEntityID,
+		me.AttributeValueMap{
+			"Type":          xgsPonUnitType,
+			"NumberOfPorts": 1, // NOTE is this the ANI port? must be
+			"SerialNumber":  ToOctets("BBSM-Circuit-Pack-ani", 20),
+			"Version":       ToOctets("v0.0.1", 20),
+		},
+	})
+	mibDb.items = append(mibDb.items, MibDbEntry{
+		me.CircuitPackClassID,
+		circuitPackEntityID,
+		me.AttributeValueMap{
+			"VendorId":            "ONF",
+			"AdministrativeState": 0,
+			"OperationalState":    0,
+			"BridgedOrIpInd":      0,
+		},
+	})
+	mibDb.items = append(mibDb.items, MibDbEntry{
+		me.CircuitPackClassID,
+		circuitPackEntityID,
+		me.AttributeValueMap{
+			"EquipmentId":                 ToOctets("BBSM-Circuit-Pack", 20),
+			"CardConfiguration":           0,
+			"TotalTContBufferNumber":      8,
+			"TotalPriorityQueueNumber":    8,
+			"TotalTrafficSchedulerNumber": 0,
+		},
+	})
+	mibDb.items = append(mibDb.items, MibDbEntry{
+		me.CircuitPackClassID,
+		circuitPackEntityID,
+		me.AttributeValueMap{
+			"PowerShedOverride": uint32(0),
+		},
+	})
+
+	// ANI-G
+	mibDb.items = append(mibDb.items, MibDbEntry{
+		me.AniGClassID,
+		EntityID{tcontSlotId, aniGId},
+		me.AttributeValueMap{
+			"Arc":                         0,
+			"ArcInterval":                 0,
+			"Deprecated":                  0,
+			"GemBlockLength":              48,
+			"LowerOpticalThreshold":       255,
+			"LowerTransmitPowerThreshold": 129,
+			"OnuResponseTime":             0,
+			"OpticalSignalLevel":          57428,
+			"PiggybackDbaReporting":       0,
+			"SignalDegradeThreshold":      9,
+			"SignalFailThreshold":         5,
+			"SrIndication":                1,
+			"TotalTcontNumber":            8,
+			"TransmitOpticalLevel":        3171,
+			"UpperOpticalThreshold":       255,
+			"UpperTransmitPowerThreshold": 129,
+		},
+	})
+
+	// circuitPack Ethernet
+	// NOTE the circuit pack is divided in multiple messages as too big to fit in a single one
+	mibDb.items = append(mibDb.items, MibDbEntry{
+		me.CircuitPackClassID,
+		circuitPackEntityID,
+		me.AttributeValueMap{
+			"Type":          ethernetUnitType,
+			"NumberOfPorts": uniPortCount,
+			"SerialNumber":  ToOctets("BBSM-Circuit-Pack", 20),
+			"Version":       ToOctets("v0.0.1", 20),
+		},
+	})
+	mibDb.items = append(mibDb.items, MibDbEntry{
+		me.CircuitPackClassID,
+		circuitPackEntityID,
+		me.AttributeValueMap{
+			"VendorId":            "ONF",
+			"AdministrativeState": 0,
+			"OperationalState":    0,
+			"BridgedOrIpInd":      0,
+		},
+	})
+	mibDb.items = append(mibDb.items, MibDbEntry{
+		me.CircuitPackClassID,
+		circuitPackEntityID,
+		me.AttributeValueMap{
+			"EquipmentId":                 ToOctets("BBSM-Circuit-Pack", 20),
+			"CardConfiguration":           0,
+			"TotalTContBufferNumber":      8,
+			"TotalPriorityQueueNumber":    8,
+			"TotalTrafficSchedulerNumber": 16,
+		},
+	})
+	mibDb.items = append(mibDb.items, MibDbEntry{
+		me.CircuitPackClassID,
+		circuitPackEntityID,
+		me.AttributeValueMap{
+			"PowerShedOverride": uint32(0),
+		},
+	})
+
+	// PPTP and UNI-Gs
+	// NOTE this are dependent on the number of UNI this ONU supports
+	// Through an identical ID, the UNI-G ME is implicitly linked to an instance of a PPTP
+	for i := 1; i <= uniPortCount; i++ {
+		uniEntityId := GenerateUniPortEntityId(uint32(i))
+
+		mibDb.items = append(mibDb.items, MibDbEntry{
+			me.PhysicalPathTerminationPointEthernetUniClassID,
+			uniEntityId,
+			me.AttributeValueMap{
+				"ExpectedType":                  0,
+				"SensedType":                    ethernetUnitType,
+				"AutoDetectionConfiguration":    0,
+				"EthernetLoopbackConfiguration": 0,
+				"AdministrativeState":           0,
+				"OperationalState":              0,
+				"ConfigurationInd":              3,
+				"MaxFrameSize":                  1518,
+				"DteOrDceInd":                   0,
+				"PauseTime":                     0,
+				"BridgedOrIpInd":                2,
+				"Arc":                           0,
+				"ArcInterval":                   0,
+				"PppoeFilter":                   0,
+				"PowerControl":                  0,
+			},
+		})
+
+		mibDb.items = append(mibDb.items, MibDbEntry{
+			me.UniGClassID,
+			uniEntityId,
+			me.AttributeValueMap{
+				"AdministrativeState":         0,
+				"Deprecated":                  0,
+				"ManagementCapability":        0,
+				"NonOmciManagementIdentifier": 0,
+				"RelayAgentOptions":           0,
+			},
+		})
+
+		// Downstream Queues (related to PPTP)
+		// 16 priorities queues for each UNI Ports
+		// EntityID = cardHolderSlotID + Uni EntityID (0101)
+		for j := 1; j <= downstreamPriorityQueues; j++ {
+			queueEntityId := EntityID{cardHolderSlotID, byte(j)}
+
+			// we first report the PriorityQueue without any attribute
+			mibDb.items = append(mibDb.items, MibDbEntry{
+				me.PriorityQueueClassID,
+				queueEntityId, //was not reported in the original implementation
+				me.AttributeValueMap{},
+			})
+
+			// then we report it with the required attributes
+			// In the downstream direction, the first byte is the slot number and the second byte is the port number of the queue's destination port.
+			relatedPort := append(uniEntityId, 0x00, byte(j))
+			mibDb.items = append(mibDb.items, MibDbEntry{
+				me.PriorityQueueClassID,
+				queueEntityId, //was not reported in the original implementation
+				me.AttributeValueMap{
+					"QueueConfigurationOption":                            0,
+					"MaximumQueueSize":                                    100,
+					"AllocatedQueueSize":                                  100,
+					"DiscardBlockCounterResetInterval":                    0,
+					"ThresholdValueForDiscardedBlocksDueToBufferOverflow": 0,
+					"RelatedPort":                                         relatedPort.ToUint32(),
+					"TrafficSchedulerPointer":                             0, //it was hardcoded to 0x0108 in the current implementation
+					"Weight":                                              1,
+					"BackPressureOperation":                               1,
+					"BackPressureTime":                                    0,
+					"BackPressureOccurQueueThreshold":                     0,
+					"BackPressureClearQueueThreshold":                     0,
+				},
+			})
+		}
+	}
+
+	// T-CONTS and Traffic Schedulers
+	for i := 1; i <= tconts; i++ {
+		tcontEntityId := EntityID{tcontSlotId, byte(i)}
+
+		mibDb.items = append(mibDb.items, MibDbEntry{
+			me.TContClassID,
+			tcontEntityId,
+			me.AttributeValueMap{
+				"AllocId": 65535,
+			},
+		})
+
+		tsEntityId := EntityID{cardHolderSlotID, byte(i)}
+		mibDb.items = append(mibDb.items, MibDbEntry{
+			me.TrafficSchedulerClassID,
+			tsEntityId, //was not reported in the original implementation
+			me.AttributeValueMap{
+				"TContPointer":            tcontEntityId.ToUint16(), // was hardcoded to a non-existing t-cont
+				"TrafficSchedulerPointer": 0,
+				"Policy":                  02,
+				"PriorityWeight":          0,
+			},
+		})
+
+		for j := 1; j <= upstreamPriorityQueues; j++ {
+			queueEntityId := EntityID{tcontSlotId, byte(j)}
+			// Upstream Queues (related to traffic schedulers)
+			// 8 priorities queues per TCONT
+			// EntityID = tcontSlotId + Uni EntityID (8001)
+
+			// we first report the PriorityQueue without any attribute
+			mibDb.items = append(mibDb.items, MibDbEntry{
+				me.PriorityQueueClassID,
+				queueEntityId, //was not reported in the original implementation
+				me.AttributeValueMap{},
+			})
+
+			// then we report it with the required attributes
+			// In the upstream direction, the first 2 bytes are the ME ID of the associated T- CONT, the first byte of which is a slot number, the second byte a T-CONT number.
+			relatedPort := append(tcontEntityId, 0x00, byte(j))
+			mibDb.items = append(mibDb.items, MibDbEntry{
+				me.PriorityQueueClassID,
+				queueEntityId, //was not reported in the original implementation
+				me.AttributeValueMap{
+					"QueueConfigurationOption":                            0,
+					"MaximumQueueSize":                                    100,
+					"AllocatedQueueSize":                                  100,
+					"DiscardBlockCounterResetInterval":                    0,
+					"ThresholdValueForDiscardedBlocksDueToBufferOverflow": 0,
+					"RelatedPort":                                         relatedPort.ToUint32(),
+					"TrafficSchedulerPointer":                             tsEntityId.ToUint16(), //it was hardcoded to 0x0108 in the current implementation
+					"Weight":                                              1,
+					"BackPressureOperation":                               1,
+					"BackPressureTime":                                    0,
+					"BackPressureOccurQueueThreshold":                     0,
+					"BackPressureClearQueueThreshold":                     0,
+				},
+			})
+		}
+	}
+
+	// ONU-2g
+	mibDb.items = append(mibDb.items, MibDbEntry{
+		me.Onu2GClassID,
+		EntityID{0x00, 0x00},
+		me.AttributeValueMap{
+			"ConnectivityCapability":                      127,
+			"CurrentConnectivityMode":                     0,
+			"Deprecated":                                  1,
+			"PriorityQueueScaleFactor":                    1,
+			"QualityOfServiceQosConfigurationFlexibility": 63,
+			"Sysuptime":                                   0,
+			"TotalGemPortIdNumber":                        8,
+			"TotalPriorityQueueNumber":                    64,
+			"TotalTrafficSchedulerNumber":                 8,
+		},
+	})
+
+	mibDb.NumberOfCommands = uint16(len(mibDb.items))
+
+	return &mibDb, nil
+}
diff --git a/internal/common/omci/onu_mib_db_test.go b/internal/common/omci/onu_mib_db_test.go
new file mode 100644
index 0000000..cea0daf
--- /dev/null
+++ b/internal/common/omci/onu_mib_db_test.go
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package omci
+
+import (
+	"github.com/opencord/omci-lib-go"
+	me "github.com/opencord/omci-lib-go/generated"
+	"github.com/stretchr/testify/assert"
+	"testing"
+)
+
+func TestEntityID_ToUint16(t *testing.T) {
+	var id EntityID
+	var res uint16
+
+	id = EntityID{0x01, 0x01}
+	res = id.ToUint16()
+	assert.Equal(t, uint16(257), res)
+
+	id = EntityID{0x00, 0x00}
+	res = id.ToUint16()
+	assert.Equal(t, uint16(0), res)
+}
+
+func Test_GenerateMibDatabase(t *testing.T) {
+	const uniPortCount = 4
+	mibDb, err := GenerateMibDatabase(uniPortCount)
+
+	expectedItems := 9                     //ONU-G + 2 Circuit Packs (4 messages each)
+	expectedItems += 2 * uniPortCount      // 1 PPTP and 1 UniG per UNI
+	expectedItems += 1                     // ANI-G
+	expectedItems += 2 * tconts            // T-CONT and traffic schedulers
+	expectedItems += 1                     // ONU-2g
+	expectedItems += 2 * 8 * tconts        // 8 upstream queues for each T-CONT, and we report each queue twice
+	expectedItems += 2 * 16 * uniPortCount // 16 downstream queues for each T-CONT, and we report each queue twice
+
+	assert.NoError(t, err)
+	assert.NotNil(t, mibDb)
+	assert.Equal(t, expectedItems, int(mibDb.NumberOfCommands))
+
+	// now try to serialize all messages to check on the attributes
+	for _, entry := range mibDb.items {
+		reportedMe, meErr := me.LoadManagedEntityDefinition(entry.classId, me.ParamData{
+			EntityID:   entry.entityId.ToUint16(),
+			Attributes: entry.params,
+		})
+		assert.NoError(t, meErr.GetError())
+
+		response := &omci.MibUploadNextResponse{
+			MeBasePacket: omci.MeBasePacket{
+				EntityClass: me.OnuDataClassID,
+			},
+			ReportedME: *reportedMe,
+		}
+
+		_, err := Serialize(omci.MibUploadNextResponseType, response, uint16(10))
+		assert.NoError(t, err)
+	}
+
+}
