[VOL-4111] Dinamically generating the MibDB during ONU creation and use
that to drive the MibUploadNextResponse generation
Change-Id: I67dbbe0700a7fbec802516fc6b2a9aff496022de
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)
+ }
+
+}