diff --git a/VERSION b/VERSION
index 561ad33..9edf2a4 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-4.1.6
+4.1.7
diff --git a/go/extension/extensions.pb.go b/go/extension/extensions.pb.go
index bd962dc..2de4df6 100644
--- a/go/extension/extensions.pb.go
+++ b/go/extension/extensions.pb.go
@@ -246,7 +246,7 @@
 }
 
 func (GetValueResponse_Status) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_7ecf6e9799a9202d, []int{13, 0}
+	return fileDescriptor_7ecf6e9799a9202d, []int{17, 0}
 }
 
 type GetValueResponse_ErrorReason int32
@@ -259,6 +259,7 @@
 	GetValueResponse_TIMEOUT           GetValueResponse_ErrorReason = 4
 	GetValueResponse_INVALID_REQ_TYPE  GetValueResponse_ErrorReason = 5
 	GetValueResponse_INTERNAL_ERROR    GetValueResponse_ErrorReason = 6
+	GetValueResponse_INVALID_DEVICE    GetValueResponse_ErrorReason = 7
 )
 
 var GetValueResponse_ErrorReason_name = map[int32]string{
@@ -269,6 +270,7 @@
 	4: "TIMEOUT",
 	5: "INVALID_REQ_TYPE",
 	6: "INTERNAL_ERROR",
+	7: "INVALID_DEVICE",
 }
 
 var GetValueResponse_ErrorReason_value = map[string]int32{
@@ -279,6 +281,7 @@
 	"TIMEOUT":           4,
 	"INVALID_REQ_TYPE":  5,
 	"INTERNAL_ERROR":    6,
+	"INVALID_DEVICE":    7,
 }
 
 func (x GetValueResponse_ErrorReason) String() string {
@@ -286,7 +289,7 @@
 }
 
 func (GetValueResponse_ErrorReason) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_7ecf6e9799a9202d, []int{13, 1}
+	return fileDescriptor_7ecf6e9799a9202d, []int{17, 1}
 }
 
 type SetValueResponse_Status int32
@@ -314,7 +317,7 @@
 }
 
 func (SetValueResponse_Status) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_7ecf6e9799a9202d, []int{15, 0}
+	return fileDescriptor_7ecf6e9799a9202d, []int{19, 0}
 }
 
 type SetValueResponse_ErrorReason int32
@@ -339,7 +342,7 @@
 }
 
 func (SetValueResponse_ErrorReason) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_7ecf6e9799a9202d, []int{15, 1}
+	return fileDescriptor_7ecf6e9799a9202d, []int{19, 1}
 }
 
 type GetDistanceRequest struct {
@@ -1094,6 +1097,1324 @@
 	return 0
 }
 
+type GetOnuCountersRequest struct {
+	IntfId               uint32   `protobuf:"fixed32,1,opt,name=intf_id,json=intfId,proto3" json:"intf_id,omitempty"`
+	OnuId                uint32   `protobuf:"fixed32,2,opt,name=onu_id,json=onuId,proto3" json:"onu_id,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetOnuCountersRequest) Reset()         { *m = GetOnuCountersRequest{} }
+func (m *GetOnuCountersRequest) String() string { return proto.CompactTextString(m) }
+func (*GetOnuCountersRequest) ProtoMessage()    {}
+func (*GetOnuCountersRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7ecf6e9799a9202d, []int{12}
+}
+
+func (m *GetOnuCountersRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetOnuCountersRequest.Unmarshal(m, b)
+}
+func (m *GetOnuCountersRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetOnuCountersRequest.Marshal(b, m, deterministic)
+}
+func (m *GetOnuCountersRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetOnuCountersRequest.Merge(m, src)
+}
+func (m *GetOnuCountersRequest) XXX_Size() int {
+	return xxx_messageInfo_GetOnuCountersRequest.Size(m)
+}
+func (m *GetOnuCountersRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetOnuCountersRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetOnuCountersRequest proto.InternalMessageInfo
+
+func (m *GetOnuCountersRequest) GetIntfId() uint32 {
+	if m != nil {
+		return m.IntfId
+	}
+	return 0
+}
+
+func (m *GetOnuCountersRequest) GetOnuId() uint32 {
+	if m != nil {
+		return m.OnuId
+	}
+	return 0
+}
+
+type GetOnuOMCICountersRequest struct {
+	OnuDeviceId          string   `protobuf:"bytes,1,opt,name=onuDeviceId,proto3" json:"onuDeviceId,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetOnuOMCICountersRequest) Reset()         { *m = GetOnuOMCICountersRequest{} }
+func (m *GetOnuOMCICountersRequest) String() string { return proto.CompactTextString(m) }
+func (*GetOnuOMCICountersRequest) ProtoMessage()    {}
+func (*GetOnuOMCICountersRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7ecf6e9799a9202d, []int{13}
+}
+
+func (m *GetOnuOMCICountersRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetOnuOMCICountersRequest.Unmarshal(m, b)
+}
+func (m *GetOnuOMCICountersRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetOnuOMCICountersRequest.Marshal(b, m, deterministic)
+}
+func (m *GetOnuOMCICountersRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetOnuOMCICountersRequest.Merge(m, src)
+}
+func (m *GetOnuOMCICountersRequest) XXX_Size() int {
+	return xxx_messageInfo_GetOnuOMCICountersRequest.Size(m)
+}
+func (m *GetOnuOMCICountersRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetOnuOMCICountersRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetOnuOMCICountersRequest proto.InternalMessageInfo
+
+func (m *GetOnuOMCICountersRequest) GetOnuDeviceId() string {
+	if m != nil {
+		return m.OnuDeviceId
+	}
+	return ""
+}
+
+type GetOnuCountersResponse struct {
+	// Types that are valid to be assigned to IsIntfId:
+	//	*GetOnuCountersResponse_IntfId
+	IsIntfId isGetOnuCountersResponse_IsIntfId `protobuf_oneof:"is_intf_id"`
+	// Types that are valid to be assigned to IsOnuId:
+	//	*GetOnuCountersResponse_OnuId
+	IsOnuId isGetOnuCountersResponse_IsOnuId `protobuf_oneof:"is_onu_id"`
+	// Types that are valid to be assigned to IsPositiveDrift:
+	//	*GetOnuCountersResponse_PositiveDrift
+	IsPositiveDrift isGetOnuCountersResponse_IsPositiveDrift `protobuf_oneof:"is_positive_drift"`
+	// Types that are valid to be assigned to IsNegativeDrift:
+	//	*GetOnuCountersResponse_NegativeDrift
+	IsNegativeDrift isGetOnuCountersResponse_IsNegativeDrift `protobuf_oneof:"is_negative_drift"`
+	// Types that are valid to be assigned to IsDelimiterMissDetection:
+	//	*GetOnuCountersResponse_DelimiterMissDetection
+	IsDelimiterMissDetection isGetOnuCountersResponse_IsDelimiterMissDetection `protobuf_oneof:"is_delimiter_miss_detection"`
+	// Types that are valid to be assigned to IsBipErrors:
+	//	*GetOnuCountersResponse_BipErrors
+	IsBipErrors isGetOnuCountersResponse_IsBipErrors `protobuf_oneof:"is_bip_errors"`
+	// Types that are valid to be assigned to IsBipUnits:
+	//	*GetOnuCountersResponse_BipUnits
+	IsBipUnits isGetOnuCountersResponse_IsBipUnits `protobuf_oneof:"is_bip_units"`
+	// Types that are valid to be assigned to IsFecCorrectedSymbols:
+	//	*GetOnuCountersResponse_FecCorrectedSymbols
+	IsFecCorrectedSymbols isGetOnuCountersResponse_IsFecCorrectedSymbols `protobuf_oneof:"is_fec_corrected_symbols"`
+	// Types that are valid to be assigned to IsFecCodewordsCorrected:
+	//	*GetOnuCountersResponse_FecCodewordsCorrected
+	IsFecCodewordsCorrected isGetOnuCountersResponse_IsFecCodewordsCorrected `protobuf_oneof:"is_fec_codewords_corrected"`
+	// Types that are valid to be assigned to IsFecCodewordsUncorrectable:
+	//	*GetOnuCountersResponse_FecCodewordsUncorrectable
+	IsFecCodewordsUncorrectable isGetOnuCountersResponse_IsFecCodewordsUncorrectable `protobuf_oneof:"is_fec_codewords_uncorrectable"`
+	// Types that are valid to be assigned to IsFecCodewords:
+	//	*GetOnuCountersResponse_FecCodewords
+	IsFecCodewords isGetOnuCountersResponse_IsFecCodewords `protobuf_oneof:"is_fec_codewords"`
+	// Types that are valid to be assigned to IsFecCorrectedUnits:
+	//	*GetOnuCountersResponse_FecCorrectedUnits
+	IsFecCorrectedUnits isGetOnuCountersResponse_IsFecCorrectedUnits `protobuf_oneof:"is_fec_corrected_units"`
+	// Types that are valid to be assigned to IsXgemKeyErrors:
+	//	*GetOnuCountersResponse_XgemKeyErrors
+	IsXgemKeyErrors isGetOnuCountersResponse_IsXgemKeyErrors `protobuf_oneof:"is_xgem_key_errors"`
+	// Types that are valid to be assigned to IsXgemLoss:
+	//	*GetOnuCountersResponse_XgemLoss
+	IsXgemLoss isGetOnuCountersResponse_IsXgemLoss `protobuf_oneof:"is_xgem_loss"`
+	// Types that are valid to be assigned to IsRxPloamsError:
+	//	*GetOnuCountersResponse_RxPloamsError
+	IsRxPloamsError isGetOnuCountersResponse_IsRxPloamsError `protobuf_oneof:"is_rx_ploams_error"`
+	// Types that are valid to be assigned to IsRxPloamsNonIdle:
+	//	*GetOnuCountersResponse_RxPloamsNonIdle
+	IsRxPloamsNonIdle isGetOnuCountersResponse_IsRxPloamsNonIdle `protobuf_oneof:"is_rx_ploams_non_idle"`
+	// Types that are valid to be assigned to IsRxOmci:
+	//	*GetOnuCountersResponse_RxOmci
+	IsRxOmci isGetOnuCountersResponse_IsRxOmci `protobuf_oneof:"is_rx_omci"`
+	// Types that are valid to be assigned to IsTxOmci:
+	//	*GetOnuCountersResponse_TxOmci
+	IsTxOmci isGetOnuCountersResponse_IsTxOmci `protobuf_oneof:"is_tx_omci"`
+	// Types that are valid to be assigned to IsRxOmciPacketsCrcError:
+	//	*GetOnuCountersResponse_RxOmciPacketsCrcError
+	IsRxOmciPacketsCrcError isGetOnuCountersResponse_IsRxOmciPacketsCrcError `protobuf_oneof:"is_rx_omci_packets_crc_error"`
+	// Types that are valid to be assigned to IsRxBytes:
+	//	*GetOnuCountersResponse_RxBytes
+	IsRxBytes isGetOnuCountersResponse_IsRxBytes `protobuf_oneof:"is_rx_bytes"`
+	// Types that are valid to be assigned to IsRxPackets:
+	//	*GetOnuCountersResponse_RxPackets
+	IsRxPackets isGetOnuCountersResponse_IsRxPackets `protobuf_oneof:"is_rx_packets"`
+	// Types that are valid to be assigned to IsTxBytes:
+	//	*GetOnuCountersResponse_TxBytes
+	IsTxBytes isGetOnuCountersResponse_IsTxBytes `protobuf_oneof:"is_tx_bytes"`
+	// Types that are valid to be assigned to IsTxPackets:
+	//	*GetOnuCountersResponse_TxPackets
+	IsTxPackets isGetOnuCountersResponse_IsTxPackets `protobuf_oneof:"is_tx_packets"`
+	// Types that are valid to be assigned to IsBerReported:
+	//	*GetOnuCountersResponse_BerReported
+	IsBerReported isGetOnuCountersResponse_IsBerReported `protobuf_oneof:"is_ber_reported"`
+	// Types that are valid to be assigned to IsLcdgErrors:
+	//	*GetOnuCountersResponse_LcdgErrors
+	IsLcdgErrors isGetOnuCountersResponse_IsLcdgErrors `protobuf_oneof:"is_lcdg_errors"`
+	// Types that are valid to be assigned to IsRdiErrors:
+	//	*GetOnuCountersResponse_RdiErrors
+	IsRdiErrors isGetOnuCountersResponse_IsRdiErrors `protobuf_oneof:"is_rdi_errors"`
+	// Types that are valid to be assigned to IsTimestamp:
+	//	*GetOnuCountersResponse_Timestamp
+	IsTimestamp          isGetOnuCountersResponse_IsTimestamp `protobuf_oneof:"is_timestamp"`
+	XXX_NoUnkeyedLiteral struct{}                             `json:"-"`
+	XXX_unrecognized     []byte                               `json:"-"`
+	XXX_sizecache        int32                                `json:"-"`
+}
+
+func (m *GetOnuCountersResponse) Reset()         { *m = GetOnuCountersResponse{} }
+func (m *GetOnuCountersResponse) String() string { return proto.CompactTextString(m) }
+func (*GetOnuCountersResponse) ProtoMessage()    {}
+func (*GetOnuCountersResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7ecf6e9799a9202d, []int{14}
+}
+
+func (m *GetOnuCountersResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetOnuCountersResponse.Unmarshal(m, b)
+}
+func (m *GetOnuCountersResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetOnuCountersResponse.Marshal(b, m, deterministic)
+}
+func (m *GetOnuCountersResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetOnuCountersResponse.Merge(m, src)
+}
+func (m *GetOnuCountersResponse) XXX_Size() int {
+	return xxx_messageInfo_GetOnuCountersResponse.Size(m)
+}
+func (m *GetOnuCountersResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetOnuCountersResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetOnuCountersResponse proto.InternalMessageInfo
+
+type isGetOnuCountersResponse_IsIntfId interface {
+	isGetOnuCountersResponse_IsIntfId()
+}
+
+type GetOnuCountersResponse_IntfId struct {
+	IntfId uint32 `protobuf:"fixed32,1,opt,name=intf_id,json=intfId,proto3,oneof"`
+}
+
+func (*GetOnuCountersResponse_IntfId) isGetOnuCountersResponse_IsIntfId() {}
+
+func (m *GetOnuCountersResponse) GetIsIntfId() isGetOnuCountersResponse_IsIntfId {
+	if m != nil {
+		return m.IsIntfId
+	}
+	return nil
+}
+
+func (m *GetOnuCountersResponse) GetIntfId() uint32 {
+	if x, ok := m.GetIsIntfId().(*GetOnuCountersResponse_IntfId); ok {
+		return x.IntfId
+	}
+	return 0
+}
+
+type isGetOnuCountersResponse_IsOnuId interface {
+	isGetOnuCountersResponse_IsOnuId()
+}
+
+type GetOnuCountersResponse_OnuId struct {
+	OnuId uint32 `protobuf:"fixed32,2,opt,name=onu_id,json=onuId,proto3,oneof"`
+}
+
+func (*GetOnuCountersResponse_OnuId) isGetOnuCountersResponse_IsOnuId() {}
+
+func (m *GetOnuCountersResponse) GetIsOnuId() isGetOnuCountersResponse_IsOnuId {
+	if m != nil {
+		return m.IsOnuId
+	}
+	return nil
+}
+
+func (m *GetOnuCountersResponse) GetOnuId() uint32 {
+	if x, ok := m.GetIsOnuId().(*GetOnuCountersResponse_OnuId); ok {
+		return x.OnuId
+	}
+	return 0
+}
+
+type isGetOnuCountersResponse_IsPositiveDrift interface {
+	isGetOnuCountersResponse_IsPositiveDrift()
+}
+
+type GetOnuCountersResponse_PositiveDrift struct {
+	PositiveDrift uint64 `protobuf:"fixed64,3,opt,name=positive_drift,json=positiveDrift,proto3,oneof"`
+}
+
+func (*GetOnuCountersResponse_PositiveDrift) isGetOnuCountersResponse_IsPositiveDrift() {}
+
+func (m *GetOnuCountersResponse) GetIsPositiveDrift() isGetOnuCountersResponse_IsPositiveDrift {
+	if m != nil {
+		return m.IsPositiveDrift
+	}
+	return nil
+}
+
+func (m *GetOnuCountersResponse) GetPositiveDrift() uint64 {
+	if x, ok := m.GetIsPositiveDrift().(*GetOnuCountersResponse_PositiveDrift); ok {
+		return x.PositiveDrift
+	}
+	return 0
+}
+
+type isGetOnuCountersResponse_IsNegativeDrift interface {
+	isGetOnuCountersResponse_IsNegativeDrift()
+}
+
+type GetOnuCountersResponse_NegativeDrift struct {
+	NegativeDrift uint64 `protobuf:"fixed64,4,opt,name=negative_drift,json=negativeDrift,proto3,oneof"`
+}
+
+func (*GetOnuCountersResponse_NegativeDrift) isGetOnuCountersResponse_IsNegativeDrift() {}
+
+func (m *GetOnuCountersResponse) GetIsNegativeDrift() isGetOnuCountersResponse_IsNegativeDrift {
+	if m != nil {
+		return m.IsNegativeDrift
+	}
+	return nil
+}
+
+func (m *GetOnuCountersResponse) GetNegativeDrift() uint64 {
+	if x, ok := m.GetIsNegativeDrift().(*GetOnuCountersResponse_NegativeDrift); ok {
+		return x.NegativeDrift
+	}
+	return 0
+}
+
+type isGetOnuCountersResponse_IsDelimiterMissDetection interface {
+	isGetOnuCountersResponse_IsDelimiterMissDetection()
+}
+
+type GetOnuCountersResponse_DelimiterMissDetection struct {
+	DelimiterMissDetection uint64 `protobuf:"fixed64,5,opt,name=delimiter_miss_detection,json=delimiterMissDetection,proto3,oneof"`
+}
+
+func (*GetOnuCountersResponse_DelimiterMissDetection) isGetOnuCountersResponse_IsDelimiterMissDetection() {
+}
+
+func (m *GetOnuCountersResponse) GetIsDelimiterMissDetection() isGetOnuCountersResponse_IsDelimiterMissDetection {
+	if m != nil {
+		return m.IsDelimiterMissDetection
+	}
+	return nil
+}
+
+func (m *GetOnuCountersResponse) GetDelimiterMissDetection() uint64 {
+	if x, ok := m.GetIsDelimiterMissDetection().(*GetOnuCountersResponse_DelimiterMissDetection); ok {
+		return x.DelimiterMissDetection
+	}
+	return 0
+}
+
+type isGetOnuCountersResponse_IsBipErrors interface {
+	isGetOnuCountersResponse_IsBipErrors()
+}
+
+type GetOnuCountersResponse_BipErrors struct {
+	BipErrors uint64 `protobuf:"fixed64,6,opt,name=bip_errors,json=bipErrors,proto3,oneof"`
+}
+
+func (*GetOnuCountersResponse_BipErrors) isGetOnuCountersResponse_IsBipErrors() {}
+
+func (m *GetOnuCountersResponse) GetIsBipErrors() isGetOnuCountersResponse_IsBipErrors {
+	if m != nil {
+		return m.IsBipErrors
+	}
+	return nil
+}
+
+func (m *GetOnuCountersResponse) GetBipErrors() uint64 {
+	if x, ok := m.GetIsBipErrors().(*GetOnuCountersResponse_BipErrors); ok {
+		return x.BipErrors
+	}
+	return 0
+}
+
+type isGetOnuCountersResponse_IsBipUnits interface {
+	isGetOnuCountersResponse_IsBipUnits()
+}
+
+type GetOnuCountersResponse_BipUnits struct {
+	BipUnits uint64 `protobuf:"fixed64,7,opt,name=bip_units,json=bipUnits,proto3,oneof"`
+}
+
+func (*GetOnuCountersResponse_BipUnits) isGetOnuCountersResponse_IsBipUnits() {}
+
+func (m *GetOnuCountersResponse) GetIsBipUnits() isGetOnuCountersResponse_IsBipUnits {
+	if m != nil {
+		return m.IsBipUnits
+	}
+	return nil
+}
+
+func (m *GetOnuCountersResponse) GetBipUnits() uint64 {
+	if x, ok := m.GetIsBipUnits().(*GetOnuCountersResponse_BipUnits); ok {
+		return x.BipUnits
+	}
+	return 0
+}
+
+type isGetOnuCountersResponse_IsFecCorrectedSymbols interface {
+	isGetOnuCountersResponse_IsFecCorrectedSymbols()
+}
+
+type GetOnuCountersResponse_FecCorrectedSymbols struct {
+	FecCorrectedSymbols uint64 `protobuf:"fixed64,8,opt,name=fec_corrected_symbols,json=fecCorrectedSymbols,proto3,oneof"`
+}
+
+func (*GetOnuCountersResponse_FecCorrectedSymbols) isGetOnuCountersResponse_IsFecCorrectedSymbols() {}
+
+func (m *GetOnuCountersResponse) GetIsFecCorrectedSymbols() isGetOnuCountersResponse_IsFecCorrectedSymbols {
+	if m != nil {
+		return m.IsFecCorrectedSymbols
+	}
+	return nil
+}
+
+func (m *GetOnuCountersResponse) GetFecCorrectedSymbols() uint64 {
+	if x, ok := m.GetIsFecCorrectedSymbols().(*GetOnuCountersResponse_FecCorrectedSymbols); ok {
+		return x.FecCorrectedSymbols
+	}
+	return 0
+}
+
+type isGetOnuCountersResponse_IsFecCodewordsCorrected interface {
+	isGetOnuCountersResponse_IsFecCodewordsCorrected()
+}
+
+type GetOnuCountersResponse_FecCodewordsCorrected struct {
+	FecCodewordsCorrected uint64 `protobuf:"fixed64,9,opt,name=fec_codewords_corrected,json=fecCodewordsCorrected,proto3,oneof"`
+}
+
+func (*GetOnuCountersResponse_FecCodewordsCorrected) isGetOnuCountersResponse_IsFecCodewordsCorrected() {
+}
+
+func (m *GetOnuCountersResponse) GetIsFecCodewordsCorrected() isGetOnuCountersResponse_IsFecCodewordsCorrected {
+	if m != nil {
+		return m.IsFecCodewordsCorrected
+	}
+	return nil
+}
+
+func (m *GetOnuCountersResponse) GetFecCodewordsCorrected() uint64 {
+	if x, ok := m.GetIsFecCodewordsCorrected().(*GetOnuCountersResponse_FecCodewordsCorrected); ok {
+		return x.FecCodewordsCorrected
+	}
+	return 0
+}
+
+type isGetOnuCountersResponse_IsFecCodewordsUncorrectable interface {
+	isGetOnuCountersResponse_IsFecCodewordsUncorrectable()
+}
+
+type GetOnuCountersResponse_FecCodewordsUncorrectable struct {
+	FecCodewordsUncorrectable uint64 `protobuf:"fixed64,10,opt,name=fec_codewords_uncorrectable,json=fecCodewordsUncorrectable,proto3,oneof"`
+}
+
+func (*GetOnuCountersResponse_FecCodewordsUncorrectable) isGetOnuCountersResponse_IsFecCodewordsUncorrectable() {
+}
+
+func (m *GetOnuCountersResponse) GetIsFecCodewordsUncorrectable() isGetOnuCountersResponse_IsFecCodewordsUncorrectable {
+	if m != nil {
+		return m.IsFecCodewordsUncorrectable
+	}
+	return nil
+}
+
+func (m *GetOnuCountersResponse) GetFecCodewordsUncorrectable() uint64 {
+	if x, ok := m.GetIsFecCodewordsUncorrectable().(*GetOnuCountersResponse_FecCodewordsUncorrectable); ok {
+		return x.FecCodewordsUncorrectable
+	}
+	return 0
+}
+
+type isGetOnuCountersResponse_IsFecCodewords interface {
+	isGetOnuCountersResponse_IsFecCodewords()
+}
+
+type GetOnuCountersResponse_FecCodewords struct {
+	FecCodewords uint64 `protobuf:"fixed64,11,opt,name=fec_codewords,json=fecCodewords,proto3,oneof"`
+}
+
+func (*GetOnuCountersResponse_FecCodewords) isGetOnuCountersResponse_IsFecCodewords() {}
+
+func (m *GetOnuCountersResponse) GetIsFecCodewords() isGetOnuCountersResponse_IsFecCodewords {
+	if m != nil {
+		return m.IsFecCodewords
+	}
+	return nil
+}
+
+func (m *GetOnuCountersResponse) GetFecCodewords() uint64 {
+	if x, ok := m.GetIsFecCodewords().(*GetOnuCountersResponse_FecCodewords); ok {
+		return x.FecCodewords
+	}
+	return 0
+}
+
+type isGetOnuCountersResponse_IsFecCorrectedUnits interface {
+	isGetOnuCountersResponse_IsFecCorrectedUnits()
+}
+
+type GetOnuCountersResponse_FecCorrectedUnits struct {
+	FecCorrectedUnits uint64 `protobuf:"fixed64,12,opt,name=fec_corrected_units,json=fecCorrectedUnits,proto3,oneof"`
+}
+
+func (*GetOnuCountersResponse_FecCorrectedUnits) isGetOnuCountersResponse_IsFecCorrectedUnits() {}
+
+func (m *GetOnuCountersResponse) GetIsFecCorrectedUnits() isGetOnuCountersResponse_IsFecCorrectedUnits {
+	if m != nil {
+		return m.IsFecCorrectedUnits
+	}
+	return nil
+}
+
+func (m *GetOnuCountersResponse) GetFecCorrectedUnits() uint64 {
+	if x, ok := m.GetIsFecCorrectedUnits().(*GetOnuCountersResponse_FecCorrectedUnits); ok {
+		return x.FecCorrectedUnits
+	}
+	return 0
+}
+
+type isGetOnuCountersResponse_IsXgemKeyErrors interface {
+	isGetOnuCountersResponse_IsXgemKeyErrors()
+}
+
+type GetOnuCountersResponse_XgemKeyErrors struct {
+	XgemKeyErrors uint64 `protobuf:"fixed64,13,opt,name=xgem_key_errors,json=xgemKeyErrors,proto3,oneof"`
+}
+
+func (*GetOnuCountersResponse_XgemKeyErrors) isGetOnuCountersResponse_IsXgemKeyErrors() {}
+
+func (m *GetOnuCountersResponse) GetIsXgemKeyErrors() isGetOnuCountersResponse_IsXgemKeyErrors {
+	if m != nil {
+		return m.IsXgemKeyErrors
+	}
+	return nil
+}
+
+func (m *GetOnuCountersResponse) GetXgemKeyErrors() uint64 {
+	if x, ok := m.GetIsXgemKeyErrors().(*GetOnuCountersResponse_XgemKeyErrors); ok {
+		return x.XgemKeyErrors
+	}
+	return 0
+}
+
+type isGetOnuCountersResponse_IsXgemLoss interface {
+	isGetOnuCountersResponse_IsXgemLoss()
+}
+
+type GetOnuCountersResponse_XgemLoss struct {
+	XgemLoss uint64 `protobuf:"fixed64,14,opt,name=xgem_loss,json=xgemLoss,proto3,oneof"`
+}
+
+func (*GetOnuCountersResponse_XgemLoss) isGetOnuCountersResponse_IsXgemLoss() {}
+
+func (m *GetOnuCountersResponse) GetIsXgemLoss() isGetOnuCountersResponse_IsXgemLoss {
+	if m != nil {
+		return m.IsXgemLoss
+	}
+	return nil
+}
+
+func (m *GetOnuCountersResponse) GetXgemLoss() uint64 {
+	if x, ok := m.GetIsXgemLoss().(*GetOnuCountersResponse_XgemLoss); ok {
+		return x.XgemLoss
+	}
+	return 0
+}
+
+type isGetOnuCountersResponse_IsRxPloamsError interface {
+	isGetOnuCountersResponse_IsRxPloamsError()
+}
+
+type GetOnuCountersResponse_RxPloamsError struct {
+	RxPloamsError uint64 `protobuf:"fixed64,15,opt,name=rx_ploams_error,json=rxPloamsError,proto3,oneof"`
+}
+
+func (*GetOnuCountersResponse_RxPloamsError) isGetOnuCountersResponse_IsRxPloamsError() {}
+
+func (m *GetOnuCountersResponse) GetIsRxPloamsError() isGetOnuCountersResponse_IsRxPloamsError {
+	if m != nil {
+		return m.IsRxPloamsError
+	}
+	return nil
+}
+
+func (m *GetOnuCountersResponse) GetRxPloamsError() uint64 {
+	if x, ok := m.GetIsRxPloamsError().(*GetOnuCountersResponse_RxPloamsError); ok {
+		return x.RxPloamsError
+	}
+	return 0
+}
+
+type isGetOnuCountersResponse_IsRxPloamsNonIdle interface {
+	isGetOnuCountersResponse_IsRxPloamsNonIdle()
+}
+
+type GetOnuCountersResponse_RxPloamsNonIdle struct {
+	RxPloamsNonIdle uint64 `protobuf:"fixed64,16,opt,name=rx_ploams_non_idle,json=rxPloamsNonIdle,proto3,oneof"`
+}
+
+func (*GetOnuCountersResponse_RxPloamsNonIdle) isGetOnuCountersResponse_IsRxPloamsNonIdle() {}
+
+func (m *GetOnuCountersResponse) GetIsRxPloamsNonIdle() isGetOnuCountersResponse_IsRxPloamsNonIdle {
+	if m != nil {
+		return m.IsRxPloamsNonIdle
+	}
+	return nil
+}
+
+func (m *GetOnuCountersResponse) GetRxPloamsNonIdle() uint64 {
+	if x, ok := m.GetIsRxPloamsNonIdle().(*GetOnuCountersResponse_RxPloamsNonIdle); ok {
+		return x.RxPloamsNonIdle
+	}
+	return 0
+}
+
+type isGetOnuCountersResponse_IsRxOmci interface {
+	isGetOnuCountersResponse_IsRxOmci()
+}
+
+type GetOnuCountersResponse_RxOmci struct {
+	RxOmci uint64 `protobuf:"fixed64,17,opt,name=rx_omci,json=rxOmci,proto3,oneof"`
+}
+
+func (*GetOnuCountersResponse_RxOmci) isGetOnuCountersResponse_IsRxOmci() {}
+
+func (m *GetOnuCountersResponse) GetIsRxOmci() isGetOnuCountersResponse_IsRxOmci {
+	if m != nil {
+		return m.IsRxOmci
+	}
+	return nil
+}
+
+func (m *GetOnuCountersResponse) GetRxOmci() uint64 {
+	if x, ok := m.GetIsRxOmci().(*GetOnuCountersResponse_RxOmci); ok {
+		return x.RxOmci
+	}
+	return 0
+}
+
+type isGetOnuCountersResponse_IsTxOmci interface {
+	isGetOnuCountersResponse_IsTxOmci()
+}
+
+type GetOnuCountersResponse_TxOmci struct {
+	TxOmci uint64 `protobuf:"fixed64,18,opt,name=tx_omci,json=txOmci,proto3,oneof"`
+}
+
+func (*GetOnuCountersResponse_TxOmci) isGetOnuCountersResponse_IsTxOmci() {}
+
+func (m *GetOnuCountersResponse) GetIsTxOmci() isGetOnuCountersResponse_IsTxOmci {
+	if m != nil {
+		return m.IsTxOmci
+	}
+	return nil
+}
+
+func (m *GetOnuCountersResponse) GetTxOmci() uint64 {
+	if x, ok := m.GetIsTxOmci().(*GetOnuCountersResponse_TxOmci); ok {
+		return x.TxOmci
+	}
+	return 0
+}
+
+type isGetOnuCountersResponse_IsRxOmciPacketsCrcError interface {
+	isGetOnuCountersResponse_IsRxOmciPacketsCrcError()
+}
+
+type GetOnuCountersResponse_RxOmciPacketsCrcError struct {
+	RxOmciPacketsCrcError uint64 `protobuf:"fixed64,19,opt,name=rx_omci_packets_crc_error,json=rxOmciPacketsCrcError,proto3,oneof"`
+}
+
+func (*GetOnuCountersResponse_RxOmciPacketsCrcError) isGetOnuCountersResponse_IsRxOmciPacketsCrcError() {
+}
+
+func (m *GetOnuCountersResponse) GetIsRxOmciPacketsCrcError() isGetOnuCountersResponse_IsRxOmciPacketsCrcError {
+	if m != nil {
+		return m.IsRxOmciPacketsCrcError
+	}
+	return nil
+}
+
+func (m *GetOnuCountersResponse) GetRxOmciPacketsCrcError() uint64 {
+	if x, ok := m.GetIsRxOmciPacketsCrcError().(*GetOnuCountersResponse_RxOmciPacketsCrcError); ok {
+		return x.RxOmciPacketsCrcError
+	}
+	return 0
+}
+
+type isGetOnuCountersResponse_IsRxBytes interface {
+	isGetOnuCountersResponse_IsRxBytes()
+}
+
+type GetOnuCountersResponse_RxBytes struct {
+	RxBytes uint64 `protobuf:"fixed64,20,opt,name=rx_bytes,json=rxBytes,proto3,oneof"`
+}
+
+func (*GetOnuCountersResponse_RxBytes) isGetOnuCountersResponse_IsRxBytes() {}
+
+func (m *GetOnuCountersResponse) GetIsRxBytes() isGetOnuCountersResponse_IsRxBytes {
+	if m != nil {
+		return m.IsRxBytes
+	}
+	return nil
+}
+
+func (m *GetOnuCountersResponse) GetRxBytes() uint64 {
+	if x, ok := m.GetIsRxBytes().(*GetOnuCountersResponse_RxBytes); ok {
+		return x.RxBytes
+	}
+	return 0
+}
+
+type isGetOnuCountersResponse_IsRxPackets interface {
+	isGetOnuCountersResponse_IsRxPackets()
+}
+
+type GetOnuCountersResponse_RxPackets struct {
+	RxPackets uint64 `protobuf:"fixed64,21,opt,name=rx_packets,json=rxPackets,proto3,oneof"`
+}
+
+func (*GetOnuCountersResponse_RxPackets) isGetOnuCountersResponse_IsRxPackets() {}
+
+func (m *GetOnuCountersResponse) GetIsRxPackets() isGetOnuCountersResponse_IsRxPackets {
+	if m != nil {
+		return m.IsRxPackets
+	}
+	return nil
+}
+
+func (m *GetOnuCountersResponse) GetRxPackets() uint64 {
+	if x, ok := m.GetIsRxPackets().(*GetOnuCountersResponse_RxPackets); ok {
+		return x.RxPackets
+	}
+	return 0
+}
+
+type isGetOnuCountersResponse_IsTxBytes interface {
+	isGetOnuCountersResponse_IsTxBytes()
+}
+
+type GetOnuCountersResponse_TxBytes struct {
+	TxBytes uint64 `protobuf:"fixed64,22,opt,name=tx_bytes,json=txBytes,proto3,oneof"`
+}
+
+func (*GetOnuCountersResponse_TxBytes) isGetOnuCountersResponse_IsTxBytes() {}
+
+func (m *GetOnuCountersResponse) GetIsTxBytes() isGetOnuCountersResponse_IsTxBytes {
+	if m != nil {
+		return m.IsTxBytes
+	}
+	return nil
+}
+
+func (m *GetOnuCountersResponse) GetTxBytes() uint64 {
+	if x, ok := m.GetIsTxBytes().(*GetOnuCountersResponse_TxBytes); ok {
+		return x.TxBytes
+	}
+	return 0
+}
+
+type isGetOnuCountersResponse_IsTxPackets interface {
+	isGetOnuCountersResponse_IsTxPackets()
+}
+
+type GetOnuCountersResponse_TxPackets struct {
+	TxPackets uint64 `protobuf:"fixed64,23,opt,name=tx_packets,json=txPackets,proto3,oneof"`
+}
+
+func (*GetOnuCountersResponse_TxPackets) isGetOnuCountersResponse_IsTxPackets() {}
+
+func (m *GetOnuCountersResponse) GetIsTxPackets() isGetOnuCountersResponse_IsTxPackets {
+	if m != nil {
+		return m.IsTxPackets
+	}
+	return nil
+}
+
+func (m *GetOnuCountersResponse) GetTxPackets() uint64 {
+	if x, ok := m.GetIsTxPackets().(*GetOnuCountersResponse_TxPackets); ok {
+		return x.TxPackets
+	}
+	return 0
+}
+
+type isGetOnuCountersResponse_IsBerReported interface {
+	isGetOnuCountersResponse_IsBerReported()
+}
+
+type GetOnuCountersResponse_BerReported struct {
+	BerReported uint64 `protobuf:"fixed64,24,opt,name=ber_reported,json=berReported,proto3,oneof"`
+}
+
+func (*GetOnuCountersResponse_BerReported) isGetOnuCountersResponse_IsBerReported() {}
+
+func (m *GetOnuCountersResponse) GetIsBerReported() isGetOnuCountersResponse_IsBerReported {
+	if m != nil {
+		return m.IsBerReported
+	}
+	return nil
+}
+
+func (m *GetOnuCountersResponse) GetBerReported() uint64 {
+	if x, ok := m.GetIsBerReported().(*GetOnuCountersResponse_BerReported); ok {
+		return x.BerReported
+	}
+	return 0
+}
+
+type isGetOnuCountersResponse_IsLcdgErrors interface {
+	isGetOnuCountersResponse_IsLcdgErrors()
+}
+
+type GetOnuCountersResponse_LcdgErrors struct {
+	LcdgErrors uint64 `protobuf:"fixed64,25,opt,name=lcdg_errors,json=lcdgErrors,proto3,oneof"`
+}
+
+func (*GetOnuCountersResponse_LcdgErrors) isGetOnuCountersResponse_IsLcdgErrors() {}
+
+func (m *GetOnuCountersResponse) GetIsLcdgErrors() isGetOnuCountersResponse_IsLcdgErrors {
+	if m != nil {
+		return m.IsLcdgErrors
+	}
+	return nil
+}
+
+func (m *GetOnuCountersResponse) GetLcdgErrors() uint64 {
+	if x, ok := m.GetIsLcdgErrors().(*GetOnuCountersResponse_LcdgErrors); ok {
+		return x.LcdgErrors
+	}
+	return 0
+}
+
+type isGetOnuCountersResponse_IsRdiErrors interface {
+	isGetOnuCountersResponse_IsRdiErrors()
+}
+
+type GetOnuCountersResponse_RdiErrors struct {
+	RdiErrors uint64 `protobuf:"fixed64,26,opt,name=rdi_errors,json=rdiErrors,proto3,oneof"`
+}
+
+func (*GetOnuCountersResponse_RdiErrors) isGetOnuCountersResponse_IsRdiErrors() {}
+
+func (m *GetOnuCountersResponse) GetIsRdiErrors() isGetOnuCountersResponse_IsRdiErrors {
+	if m != nil {
+		return m.IsRdiErrors
+	}
+	return nil
+}
+
+func (m *GetOnuCountersResponse) GetRdiErrors() uint64 {
+	if x, ok := m.GetIsRdiErrors().(*GetOnuCountersResponse_RdiErrors); ok {
+		return x.RdiErrors
+	}
+	return 0
+}
+
+type isGetOnuCountersResponse_IsTimestamp interface {
+	isGetOnuCountersResponse_IsTimestamp()
+}
+
+type GetOnuCountersResponse_Timestamp struct {
+	Timestamp uint32 `protobuf:"fixed32,27,opt,name=timestamp,proto3,oneof"`
+}
+
+func (*GetOnuCountersResponse_Timestamp) isGetOnuCountersResponse_IsTimestamp() {}
+
+func (m *GetOnuCountersResponse) GetIsTimestamp() isGetOnuCountersResponse_IsTimestamp {
+	if m != nil {
+		return m.IsTimestamp
+	}
+	return nil
+}
+
+func (m *GetOnuCountersResponse) GetTimestamp() uint32 {
+	if x, ok := m.GetIsTimestamp().(*GetOnuCountersResponse_Timestamp); ok {
+		return x.Timestamp
+	}
+	return 0
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*GetOnuCountersResponse) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*GetOnuCountersResponse_IntfId)(nil),
+		(*GetOnuCountersResponse_OnuId)(nil),
+		(*GetOnuCountersResponse_PositiveDrift)(nil),
+		(*GetOnuCountersResponse_NegativeDrift)(nil),
+		(*GetOnuCountersResponse_DelimiterMissDetection)(nil),
+		(*GetOnuCountersResponse_BipErrors)(nil),
+		(*GetOnuCountersResponse_BipUnits)(nil),
+		(*GetOnuCountersResponse_FecCorrectedSymbols)(nil),
+		(*GetOnuCountersResponse_FecCodewordsCorrected)(nil),
+		(*GetOnuCountersResponse_FecCodewordsUncorrectable)(nil),
+		(*GetOnuCountersResponse_FecCodewords)(nil),
+		(*GetOnuCountersResponse_FecCorrectedUnits)(nil),
+		(*GetOnuCountersResponse_XgemKeyErrors)(nil),
+		(*GetOnuCountersResponse_XgemLoss)(nil),
+		(*GetOnuCountersResponse_RxPloamsError)(nil),
+		(*GetOnuCountersResponse_RxPloamsNonIdle)(nil),
+		(*GetOnuCountersResponse_RxOmci)(nil),
+		(*GetOnuCountersResponse_TxOmci)(nil),
+		(*GetOnuCountersResponse_RxOmciPacketsCrcError)(nil),
+		(*GetOnuCountersResponse_RxBytes)(nil),
+		(*GetOnuCountersResponse_RxPackets)(nil),
+		(*GetOnuCountersResponse_TxBytes)(nil),
+		(*GetOnuCountersResponse_TxPackets)(nil),
+		(*GetOnuCountersResponse_BerReported)(nil),
+		(*GetOnuCountersResponse_LcdgErrors)(nil),
+		(*GetOnuCountersResponse_RdiErrors)(nil),
+		(*GetOnuCountersResponse_Timestamp)(nil),
+	}
+}
+
+type GetOnuOMCICountersResponse struct {
+	// Types that are valid to be assigned to IsDropEvents:
+	//	*GetOnuOMCICountersResponse_DropEvents
+	IsDropEvents isGetOnuOMCICountersResponse_IsDropEvents `protobuf_oneof:"is_drop_events"`
+	// Types that are valid to be assigned to IsOctets:
+	//	*GetOnuOMCICountersResponse_Octets
+	IsOctets isGetOnuOMCICountersResponse_IsOctets `protobuf_oneof:"is_octets"`
+	// Types that are valid to be assigned to IsFrames:
+	//	*GetOnuOMCICountersResponse_Frames
+	IsFrames isGetOnuOMCICountersResponse_IsFrames `protobuf_oneof:"is_frames"`
+	// Types that are valid to be assigned to IsBroadcastFrames:
+	//	*GetOnuOMCICountersResponse_BroadcastFrames
+	IsBroadcastFrames isGetOnuOMCICountersResponse_IsBroadcastFrames `protobuf_oneof:"is_broadcast_frames"`
+	// Types that are valid to be assigned to IsMulticastFrames:
+	//	*GetOnuOMCICountersResponse_MulticastFrames
+	IsMulticastFrames isGetOnuOMCICountersResponse_IsMulticastFrames `protobuf_oneof:"is_multicast_frames"`
+	// Types that are valid to be assigned to IsCrcErroredFrames:
+	//	*GetOnuOMCICountersResponse_CrcErroredFrames
+	IsCrcErroredFrames isGetOnuOMCICountersResponse_IsCrcErroredFrames `protobuf_oneof:"is_crc_errored_frames"`
+	// Types that are valid to be assigned to IsUndersizeFrames:
+	//	*GetOnuOMCICountersResponse_UndersizeFrames
+	IsUndersizeFrames isGetOnuOMCICountersResponse_IsUndersizeFrames `protobuf_oneof:"is_undersize_frames"`
+	// Types that are valid to be assigned to IsOversizeFrames:
+	//	*GetOnuOMCICountersResponse_OversizeFrames
+	IsOversizeFrames isGetOnuOMCICountersResponse_IsOversizeFrames `protobuf_oneof:"is_oversize_frames"`
+	// Types that are valid to be assigned to IsFrames_64Octets:
+	//	*GetOnuOMCICountersResponse_Frames_64Octets
+	IsFrames_64Octets isGetOnuOMCICountersResponse_IsFrames_64Octets `protobuf_oneof:"is_frames_64_octets"`
+	// Types that are valid to be assigned to IsFrames_65To_127Octets:
+	//	*GetOnuOMCICountersResponse_Frames_65To_127Octets
+	IsFrames_65To_127Octets isGetOnuOMCICountersResponse_IsFrames_65To_127Octets `protobuf_oneof:"is_frames_65_to_127_octets"`
+	// Types that are valid to be assigned to IsFrames_128To_255Octets:
+	//	*GetOnuOMCICountersResponse_Frames_128To_255Octets
+	IsFrames_128To_255Octets isGetOnuOMCICountersResponse_IsFrames_128To_255Octets `protobuf_oneof:"is_frames_128_to_255_octets"`
+	// Types that are valid to be assigned to IsFrames_256To_511Octets:
+	//	*GetOnuOMCICountersResponse_Frames_256To_511Octets
+	IsFrames_256To_511Octets isGetOnuOMCICountersResponse_IsFrames_256To_511Octets `protobuf_oneof:"is_frames_256_to_511_octets"`
+	// Types that are valid to be assigned to IsFrames_512To_1023Octets:
+	//	*GetOnuOMCICountersResponse_Frames_512To_1023Octets
+	IsFrames_512To_1023Octets isGetOnuOMCICountersResponse_IsFrames_512To_1023Octets `protobuf_oneof:"is_frames_512_to_1023_octets"`
+	// Types that are valid to be assigned to IsFrames_1024To_1518Octets:
+	//	*GetOnuOMCICountersResponse_Frames_1024To_1518Octets
+	IsFrames_1024To_1518Octets isGetOnuOMCICountersResponse_IsFrames_1024To_1518Octets `protobuf_oneof:"is_frames_1024_to_1518_octets"`
+	XXX_NoUnkeyedLiteral       struct{}                                                `json:"-"`
+	XXX_unrecognized           []byte                                                  `json:"-"`
+	XXX_sizecache              int32                                                   `json:"-"`
+}
+
+func (m *GetOnuOMCICountersResponse) Reset()         { *m = GetOnuOMCICountersResponse{} }
+func (m *GetOnuOMCICountersResponse) String() string { return proto.CompactTextString(m) }
+func (*GetOnuOMCICountersResponse) ProtoMessage()    {}
+func (*GetOnuOMCICountersResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7ecf6e9799a9202d, []int{15}
+}
+
+func (m *GetOnuOMCICountersResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetOnuOMCICountersResponse.Unmarshal(m, b)
+}
+func (m *GetOnuOMCICountersResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetOnuOMCICountersResponse.Marshal(b, m, deterministic)
+}
+func (m *GetOnuOMCICountersResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetOnuOMCICountersResponse.Merge(m, src)
+}
+func (m *GetOnuOMCICountersResponse) XXX_Size() int {
+	return xxx_messageInfo_GetOnuOMCICountersResponse.Size(m)
+}
+func (m *GetOnuOMCICountersResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetOnuOMCICountersResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetOnuOMCICountersResponse proto.InternalMessageInfo
+
+type isGetOnuOMCICountersResponse_IsDropEvents interface {
+	isGetOnuOMCICountersResponse_IsDropEvents()
+}
+
+type GetOnuOMCICountersResponse_DropEvents struct {
+	DropEvents uint64 `protobuf:"fixed64,1,opt,name=drop_events,json=dropEvents,proto3,oneof"`
+}
+
+func (*GetOnuOMCICountersResponse_DropEvents) isGetOnuOMCICountersResponse_IsDropEvents() {}
+
+func (m *GetOnuOMCICountersResponse) GetIsDropEvents() isGetOnuOMCICountersResponse_IsDropEvents {
+	if m != nil {
+		return m.IsDropEvents
+	}
+	return nil
+}
+
+func (m *GetOnuOMCICountersResponse) GetDropEvents() uint64 {
+	if x, ok := m.GetIsDropEvents().(*GetOnuOMCICountersResponse_DropEvents); ok {
+		return x.DropEvents
+	}
+	return 0
+}
+
+type isGetOnuOMCICountersResponse_IsOctets interface {
+	isGetOnuOMCICountersResponse_IsOctets()
+}
+
+type GetOnuOMCICountersResponse_Octets struct {
+	Octets uint64 `protobuf:"fixed64,2,opt,name=octets,proto3,oneof"`
+}
+
+func (*GetOnuOMCICountersResponse_Octets) isGetOnuOMCICountersResponse_IsOctets() {}
+
+func (m *GetOnuOMCICountersResponse) GetIsOctets() isGetOnuOMCICountersResponse_IsOctets {
+	if m != nil {
+		return m.IsOctets
+	}
+	return nil
+}
+
+func (m *GetOnuOMCICountersResponse) GetOctets() uint64 {
+	if x, ok := m.GetIsOctets().(*GetOnuOMCICountersResponse_Octets); ok {
+		return x.Octets
+	}
+	return 0
+}
+
+type isGetOnuOMCICountersResponse_IsFrames interface {
+	isGetOnuOMCICountersResponse_IsFrames()
+}
+
+type GetOnuOMCICountersResponse_Frames struct {
+	Frames uint64 `protobuf:"fixed64,3,opt,name=frames,proto3,oneof"`
+}
+
+func (*GetOnuOMCICountersResponse_Frames) isGetOnuOMCICountersResponse_IsFrames() {}
+
+func (m *GetOnuOMCICountersResponse) GetIsFrames() isGetOnuOMCICountersResponse_IsFrames {
+	if m != nil {
+		return m.IsFrames
+	}
+	return nil
+}
+
+func (m *GetOnuOMCICountersResponse) GetFrames() uint64 {
+	if x, ok := m.GetIsFrames().(*GetOnuOMCICountersResponse_Frames); ok {
+		return x.Frames
+	}
+	return 0
+}
+
+type isGetOnuOMCICountersResponse_IsBroadcastFrames interface {
+	isGetOnuOMCICountersResponse_IsBroadcastFrames()
+}
+
+type GetOnuOMCICountersResponse_BroadcastFrames struct {
+	BroadcastFrames uint64 `protobuf:"fixed64,4,opt,name=broadcast_frames,json=broadcastFrames,proto3,oneof"`
+}
+
+func (*GetOnuOMCICountersResponse_BroadcastFrames) isGetOnuOMCICountersResponse_IsBroadcastFrames() {}
+
+func (m *GetOnuOMCICountersResponse) GetIsBroadcastFrames() isGetOnuOMCICountersResponse_IsBroadcastFrames {
+	if m != nil {
+		return m.IsBroadcastFrames
+	}
+	return nil
+}
+
+func (m *GetOnuOMCICountersResponse) GetBroadcastFrames() uint64 {
+	if x, ok := m.GetIsBroadcastFrames().(*GetOnuOMCICountersResponse_BroadcastFrames); ok {
+		return x.BroadcastFrames
+	}
+	return 0
+}
+
+type isGetOnuOMCICountersResponse_IsMulticastFrames interface {
+	isGetOnuOMCICountersResponse_IsMulticastFrames()
+}
+
+type GetOnuOMCICountersResponse_MulticastFrames struct {
+	MulticastFrames uint64 `protobuf:"fixed64,5,opt,name=multicast_frames,json=multicastFrames,proto3,oneof"`
+}
+
+func (*GetOnuOMCICountersResponse_MulticastFrames) isGetOnuOMCICountersResponse_IsMulticastFrames() {}
+
+func (m *GetOnuOMCICountersResponse) GetIsMulticastFrames() isGetOnuOMCICountersResponse_IsMulticastFrames {
+	if m != nil {
+		return m.IsMulticastFrames
+	}
+	return nil
+}
+
+func (m *GetOnuOMCICountersResponse) GetMulticastFrames() uint64 {
+	if x, ok := m.GetIsMulticastFrames().(*GetOnuOMCICountersResponse_MulticastFrames); ok {
+		return x.MulticastFrames
+	}
+	return 0
+}
+
+type isGetOnuOMCICountersResponse_IsCrcErroredFrames interface {
+	isGetOnuOMCICountersResponse_IsCrcErroredFrames()
+}
+
+type GetOnuOMCICountersResponse_CrcErroredFrames struct {
+	CrcErroredFrames uint64 `protobuf:"fixed64,6,opt,name=crc_errored_frames,json=crcErroredFrames,proto3,oneof"`
+}
+
+func (*GetOnuOMCICountersResponse_CrcErroredFrames) isGetOnuOMCICountersResponse_IsCrcErroredFrames() {
+}
+
+func (m *GetOnuOMCICountersResponse) GetIsCrcErroredFrames() isGetOnuOMCICountersResponse_IsCrcErroredFrames {
+	if m != nil {
+		return m.IsCrcErroredFrames
+	}
+	return nil
+}
+
+func (m *GetOnuOMCICountersResponse) GetCrcErroredFrames() uint64 {
+	if x, ok := m.GetIsCrcErroredFrames().(*GetOnuOMCICountersResponse_CrcErroredFrames); ok {
+		return x.CrcErroredFrames
+	}
+	return 0
+}
+
+type isGetOnuOMCICountersResponse_IsUndersizeFrames interface {
+	isGetOnuOMCICountersResponse_IsUndersizeFrames()
+}
+
+type GetOnuOMCICountersResponse_UndersizeFrames struct {
+	UndersizeFrames uint64 `protobuf:"fixed64,7,opt,name=undersize_frames,json=undersizeFrames,proto3,oneof"`
+}
+
+func (*GetOnuOMCICountersResponse_UndersizeFrames) isGetOnuOMCICountersResponse_IsUndersizeFrames() {}
+
+func (m *GetOnuOMCICountersResponse) GetIsUndersizeFrames() isGetOnuOMCICountersResponse_IsUndersizeFrames {
+	if m != nil {
+		return m.IsUndersizeFrames
+	}
+	return nil
+}
+
+func (m *GetOnuOMCICountersResponse) GetUndersizeFrames() uint64 {
+	if x, ok := m.GetIsUndersizeFrames().(*GetOnuOMCICountersResponse_UndersizeFrames); ok {
+		return x.UndersizeFrames
+	}
+	return 0
+}
+
+type isGetOnuOMCICountersResponse_IsOversizeFrames interface {
+	isGetOnuOMCICountersResponse_IsOversizeFrames()
+}
+
+type GetOnuOMCICountersResponse_OversizeFrames struct {
+	OversizeFrames uint64 `protobuf:"fixed64,8,opt,name=oversize_frames,json=oversizeFrames,proto3,oneof"`
+}
+
+func (*GetOnuOMCICountersResponse_OversizeFrames) isGetOnuOMCICountersResponse_IsOversizeFrames() {}
+
+func (m *GetOnuOMCICountersResponse) GetIsOversizeFrames() isGetOnuOMCICountersResponse_IsOversizeFrames {
+	if m != nil {
+		return m.IsOversizeFrames
+	}
+	return nil
+}
+
+func (m *GetOnuOMCICountersResponse) GetOversizeFrames() uint64 {
+	if x, ok := m.GetIsOversizeFrames().(*GetOnuOMCICountersResponse_OversizeFrames); ok {
+		return x.OversizeFrames
+	}
+	return 0
+}
+
+type isGetOnuOMCICountersResponse_IsFrames_64Octets interface {
+	isGetOnuOMCICountersResponse_IsFrames_64Octets()
+}
+
+type GetOnuOMCICountersResponse_Frames_64Octets struct {
+	Frames_64Octets uint64 `protobuf:"fixed64,9,opt,name=frames_64_octets,json=frames64Octets,proto3,oneof"`
+}
+
+func (*GetOnuOMCICountersResponse_Frames_64Octets) isGetOnuOMCICountersResponse_IsFrames_64Octets() {}
+
+func (m *GetOnuOMCICountersResponse) GetIsFrames_64Octets() isGetOnuOMCICountersResponse_IsFrames_64Octets {
+	if m != nil {
+		return m.IsFrames_64Octets
+	}
+	return nil
+}
+
+func (m *GetOnuOMCICountersResponse) GetFrames_64Octets() uint64 {
+	if x, ok := m.GetIsFrames_64Octets().(*GetOnuOMCICountersResponse_Frames_64Octets); ok {
+		return x.Frames_64Octets
+	}
+	return 0
+}
+
+type isGetOnuOMCICountersResponse_IsFrames_65To_127Octets interface {
+	isGetOnuOMCICountersResponse_IsFrames_65To_127Octets()
+}
+
+type GetOnuOMCICountersResponse_Frames_65To_127Octets struct {
+	Frames_65To_127Octets uint64 `protobuf:"fixed64,10,opt,name=frames_65_to_127_octets,json=frames65To127Octets,proto3,oneof"`
+}
+
+func (*GetOnuOMCICountersResponse_Frames_65To_127Octets) isGetOnuOMCICountersResponse_IsFrames_65To_127Octets() {
+}
+
+func (m *GetOnuOMCICountersResponse) GetIsFrames_65To_127Octets() isGetOnuOMCICountersResponse_IsFrames_65To_127Octets {
+	if m != nil {
+		return m.IsFrames_65To_127Octets
+	}
+	return nil
+}
+
+func (m *GetOnuOMCICountersResponse) GetFrames_65To_127Octets() uint64 {
+	if x, ok := m.GetIsFrames_65To_127Octets().(*GetOnuOMCICountersResponse_Frames_65To_127Octets); ok {
+		return x.Frames_65To_127Octets
+	}
+	return 0
+}
+
+type isGetOnuOMCICountersResponse_IsFrames_128To_255Octets interface {
+	isGetOnuOMCICountersResponse_IsFrames_128To_255Octets()
+}
+
+type GetOnuOMCICountersResponse_Frames_128To_255Octets struct {
+	Frames_128To_255Octets uint64 `protobuf:"fixed64,11,opt,name=frames_128_to_255_octets,json=frames128To255Octets,proto3,oneof"`
+}
+
+func (*GetOnuOMCICountersResponse_Frames_128To_255Octets) isGetOnuOMCICountersResponse_IsFrames_128To_255Octets() {
+}
+
+func (m *GetOnuOMCICountersResponse) GetIsFrames_128To_255Octets() isGetOnuOMCICountersResponse_IsFrames_128To_255Octets {
+	if m != nil {
+		return m.IsFrames_128To_255Octets
+	}
+	return nil
+}
+
+func (m *GetOnuOMCICountersResponse) GetFrames_128To_255Octets() uint64 {
+	if x, ok := m.GetIsFrames_128To_255Octets().(*GetOnuOMCICountersResponse_Frames_128To_255Octets); ok {
+		return x.Frames_128To_255Octets
+	}
+	return 0
+}
+
+type isGetOnuOMCICountersResponse_IsFrames_256To_511Octets interface {
+	isGetOnuOMCICountersResponse_IsFrames_256To_511Octets()
+}
+
+type GetOnuOMCICountersResponse_Frames_256To_511Octets struct {
+	Frames_256To_511Octets uint64 `protobuf:"fixed64,12,opt,name=frames_256_to_511_octets,json=frames256To511Octets,proto3,oneof"`
+}
+
+func (*GetOnuOMCICountersResponse_Frames_256To_511Octets) isGetOnuOMCICountersResponse_IsFrames_256To_511Octets() {
+}
+
+func (m *GetOnuOMCICountersResponse) GetIsFrames_256To_511Octets() isGetOnuOMCICountersResponse_IsFrames_256To_511Octets {
+	if m != nil {
+		return m.IsFrames_256To_511Octets
+	}
+	return nil
+}
+
+func (m *GetOnuOMCICountersResponse) GetFrames_256To_511Octets() uint64 {
+	if x, ok := m.GetIsFrames_256To_511Octets().(*GetOnuOMCICountersResponse_Frames_256To_511Octets); ok {
+		return x.Frames_256To_511Octets
+	}
+	return 0
+}
+
+type isGetOnuOMCICountersResponse_IsFrames_512To_1023Octets interface {
+	isGetOnuOMCICountersResponse_IsFrames_512To_1023Octets()
+}
+
+type GetOnuOMCICountersResponse_Frames_512To_1023Octets struct {
+	Frames_512To_1023Octets uint64 `protobuf:"fixed64,13,opt,name=frames_512_to_1023_octets,json=frames512To1023Octets,proto3,oneof"`
+}
+
+func (*GetOnuOMCICountersResponse_Frames_512To_1023Octets) isGetOnuOMCICountersResponse_IsFrames_512To_1023Octets() {
+}
+
+func (m *GetOnuOMCICountersResponse) GetIsFrames_512To_1023Octets() isGetOnuOMCICountersResponse_IsFrames_512To_1023Octets {
+	if m != nil {
+		return m.IsFrames_512To_1023Octets
+	}
+	return nil
+}
+
+func (m *GetOnuOMCICountersResponse) GetFrames_512To_1023Octets() uint64 {
+	if x, ok := m.GetIsFrames_512To_1023Octets().(*GetOnuOMCICountersResponse_Frames_512To_1023Octets); ok {
+		return x.Frames_512To_1023Octets
+	}
+	return 0
+}
+
+type isGetOnuOMCICountersResponse_IsFrames_1024To_1518Octets interface {
+	isGetOnuOMCICountersResponse_IsFrames_1024To_1518Octets()
+}
+
+type GetOnuOMCICountersResponse_Frames_1024To_1518Octets struct {
+	Frames_1024To_1518Octets uint64 `protobuf:"fixed64,14,opt,name=frames_1024_to_1518_octets,json=frames1024To1518Octets,proto3,oneof"`
+}
+
+func (*GetOnuOMCICountersResponse_Frames_1024To_1518Octets) isGetOnuOMCICountersResponse_IsFrames_1024To_1518Octets() {
+}
+
+func (m *GetOnuOMCICountersResponse) GetIsFrames_1024To_1518Octets() isGetOnuOMCICountersResponse_IsFrames_1024To_1518Octets {
+	if m != nil {
+		return m.IsFrames_1024To_1518Octets
+	}
+	return nil
+}
+
+func (m *GetOnuOMCICountersResponse) GetFrames_1024To_1518Octets() uint64 {
+	if x, ok := m.GetIsFrames_1024To_1518Octets().(*GetOnuOMCICountersResponse_Frames_1024To_1518Octets); ok {
+		return x.Frames_1024To_1518Octets
+	}
+	return 0
+}
+
+// XXX_OneofWrappers is for the internal use of the proto package.
+func (*GetOnuOMCICountersResponse) XXX_OneofWrappers() []interface{} {
+	return []interface{}{
+		(*GetOnuOMCICountersResponse_DropEvents)(nil),
+		(*GetOnuOMCICountersResponse_Octets)(nil),
+		(*GetOnuOMCICountersResponse_Frames)(nil),
+		(*GetOnuOMCICountersResponse_BroadcastFrames)(nil),
+		(*GetOnuOMCICountersResponse_MulticastFrames)(nil),
+		(*GetOnuOMCICountersResponse_CrcErroredFrames)(nil),
+		(*GetOnuOMCICountersResponse_UndersizeFrames)(nil),
+		(*GetOnuOMCICountersResponse_OversizeFrames)(nil),
+		(*GetOnuOMCICountersResponse_Frames_64Octets)(nil),
+		(*GetOnuOMCICountersResponse_Frames_65To_127Octets)(nil),
+		(*GetOnuOMCICountersResponse_Frames_128To_255Octets)(nil),
+		(*GetOnuOMCICountersResponse_Frames_256To_511Octets)(nil),
+		(*GetOnuOMCICountersResponse_Frames_512To_1023Octets)(nil),
+		(*GetOnuOMCICountersResponse_Frames_1024To_1518Octets)(nil),
+	}
+}
+
 type GetValueRequest struct {
 	// Types that are valid to be assigned to Request:
 	//	*GetValueRequest_Distance
@@ -1102,6 +2423,8 @@
 	//	*GetValueRequest_OnuOpticalInfo
 	//	*GetValueRequest_EthBridgePort
 	//	*GetValueRequest_FecHistory
+	//	*GetValueRequest_OnuPonInfo
+	//	*GetValueRequest_OnuInfo
 	Request              isGetValueRequest_Request `protobuf_oneof:"request"`
 	XXX_NoUnkeyedLiteral struct{}                  `json:"-"`
 	XXX_unrecognized     []byte                    `json:"-"`
@@ -1112,7 +2435,7 @@
 func (m *GetValueRequest) String() string { return proto.CompactTextString(m) }
 func (*GetValueRequest) ProtoMessage()    {}
 func (*GetValueRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7ecf6e9799a9202d, []int{12}
+	return fileDescriptor_7ecf6e9799a9202d, []int{16}
 }
 
 func (m *GetValueRequest) XXX_Unmarshal(b []byte) error {
@@ -1161,6 +2484,14 @@
 	FecHistory *GetOnuFecHistory `protobuf:"bytes,6,opt,name=fecHistory,proto3,oneof"`
 }
 
+type GetValueRequest_OnuPonInfo struct {
+	OnuPonInfo *GetOnuCountersRequest `protobuf:"bytes,7,opt,name=onuPonInfo,proto3,oneof"`
+}
+
+type GetValueRequest_OnuInfo struct {
+	OnuInfo *GetOnuOMCICountersRequest `protobuf:"bytes,8,opt,name=onuInfo,proto3,oneof"`
+}
+
 func (*GetValueRequest_Distance) isGetValueRequest_Request() {}
 
 func (*GetValueRequest_UniInfo) isGetValueRequest_Request() {}
@@ -1173,6 +2504,10 @@
 
 func (*GetValueRequest_FecHistory) isGetValueRequest_Request() {}
 
+func (*GetValueRequest_OnuPonInfo) isGetValueRequest_Request() {}
+
+func (*GetValueRequest_OnuInfo) isGetValueRequest_Request() {}
+
 func (m *GetValueRequest) GetRequest() isGetValueRequest_Request {
 	if m != nil {
 		return m.Request
@@ -1222,6 +2557,20 @@
 	return nil
 }
 
+func (m *GetValueRequest) GetOnuPonInfo() *GetOnuCountersRequest {
+	if x, ok := m.GetRequest().(*GetValueRequest_OnuPonInfo); ok {
+		return x.OnuPonInfo
+	}
+	return nil
+}
+
+func (m *GetValueRequest) GetOnuInfo() *GetOnuOMCICountersRequest {
+	if x, ok := m.GetRequest().(*GetValueRequest_OnuInfo); ok {
+		return x.OnuInfo
+	}
+	return nil
+}
+
 // XXX_OneofWrappers is for the internal use of the proto package.
 func (*GetValueRequest) XXX_OneofWrappers() []interface{} {
 	return []interface{}{
@@ -1231,6 +2580,8 @@
 		(*GetValueRequest_OnuOpticalInfo)(nil),
 		(*GetValueRequest_EthBridgePort)(nil),
 		(*GetValueRequest_FecHistory)(nil),
+		(*GetValueRequest_OnuPonInfo)(nil),
+		(*GetValueRequest_OnuInfo)(nil),
 	}
 }
 
@@ -1244,6 +2595,8 @@
 	//	*GetValueResponse_OnuOpticalInfo
 	//	*GetValueResponse_EthBridgePortInfo
 	//	*GetValueResponse_FecHistory
+	//	*GetValueResponse_OnuPonCounters
+	//	*GetValueResponse_OnuOMCICounters
 	Response             isGetValueResponse_Response `protobuf_oneof:"response"`
 	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
 	XXX_unrecognized     []byte                      `json:"-"`
@@ -1254,7 +2607,7 @@
 func (m *GetValueResponse) String() string { return proto.CompactTextString(m) }
 func (*GetValueResponse) ProtoMessage()    {}
 func (*GetValueResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7ecf6e9799a9202d, []int{13}
+	return fileDescriptor_7ecf6e9799a9202d, []int{17}
 }
 
 func (m *GetValueResponse) XXX_Unmarshal(b []byte) error {
@@ -1317,6 +2670,14 @@
 	FecHistory *GetOnuFecHistoryResponse `protobuf:"bytes,8,opt,name=fecHistory,proto3,oneof"`
 }
 
+type GetValueResponse_OnuPonCounters struct {
+	OnuPonCounters *GetOnuCountersResponse `protobuf:"bytes,9,opt,name=onuPonCounters,proto3,oneof"`
+}
+
+type GetValueResponse_OnuOMCICounters struct {
+	OnuOMCICounters *GetOnuOMCICountersResponse `protobuf:"bytes,10,opt,name=onuOMCICounters,proto3,oneof"`
+}
+
 func (*GetValueResponse_Distance) isGetValueResponse_Response() {}
 
 func (*GetValueResponse_UniInfo) isGetValueResponse_Response() {}
@@ -1329,6 +2690,10 @@
 
 func (*GetValueResponse_FecHistory) isGetValueResponse_Response() {}
 
+func (*GetValueResponse_OnuPonCounters) isGetValueResponse_Response() {}
+
+func (*GetValueResponse_OnuOMCICounters) isGetValueResponse_Response() {}
+
 func (m *GetValueResponse) GetResponse() isGetValueResponse_Response {
 	if m != nil {
 		return m.Response
@@ -1378,6 +2743,20 @@
 	return nil
 }
 
+func (m *GetValueResponse) GetOnuPonCounters() *GetOnuCountersResponse {
+	if x, ok := m.GetResponse().(*GetValueResponse_OnuPonCounters); ok {
+		return x.OnuPonCounters
+	}
+	return nil
+}
+
+func (m *GetValueResponse) GetOnuOMCICounters() *GetOnuOMCICountersResponse {
+	if x, ok := m.GetResponse().(*GetValueResponse_OnuOMCICounters); ok {
+		return x.OnuOMCICounters
+	}
+	return nil
+}
+
 // XXX_OneofWrappers is for the internal use of the proto package.
 func (*GetValueResponse) XXX_OneofWrappers() []interface{} {
 	return []interface{}{
@@ -1387,6 +2766,8 @@
 		(*GetValueResponse_OnuOpticalInfo)(nil),
 		(*GetValueResponse_EthBridgePortInfo)(nil),
 		(*GetValueResponse_FecHistory)(nil),
+		(*GetValueResponse_OnuPonCounters)(nil),
+		(*GetValueResponse_OnuOMCICounters)(nil),
 	}
 }
 
@@ -1403,7 +2784,7 @@
 func (m *SetValueRequest) String() string { return proto.CompactTextString(m) }
 func (*SetValueRequest) ProtoMessage()    {}
 func (*SetValueRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7ecf6e9799a9202d, []int{14}
+	return fileDescriptor_7ecf6e9799a9202d, []int{18}
 }
 
 func (m *SetValueRequest) XXX_Unmarshal(b []byte) error {
@@ -1467,7 +2848,7 @@
 func (m *SetValueResponse) String() string { return proto.CompactTextString(m) }
 func (*SetValueResponse) ProtoMessage()    {}
 func (*SetValueResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7ecf6e9799a9202d, []int{15}
+	return fileDescriptor_7ecf6e9799a9202d, []int{19}
 }
 
 func (m *SetValueResponse) XXX_Unmarshal(b []byte) error {
@@ -1514,7 +2895,7 @@
 func (m *SingleGetValueRequest) String() string { return proto.CompactTextString(m) }
 func (*SingleGetValueRequest) ProtoMessage()    {}
 func (*SingleGetValueRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7ecf6e9799a9202d, []int{16}
+	return fileDescriptor_7ecf6e9799a9202d, []int{20}
 }
 
 func (m *SingleGetValueRequest) XXX_Unmarshal(b []byte) error {
@@ -1560,7 +2941,7 @@
 func (m *SingleGetValueResponse) String() string { return proto.CompactTextString(m) }
 func (*SingleGetValueResponse) ProtoMessage()    {}
 func (*SingleGetValueResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7ecf6e9799a9202d, []int{17}
+	return fileDescriptor_7ecf6e9799a9202d, []int{21}
 }
 
 func (m *SingleGetValueResponse) XXX_Unmarshal(b []byte) error {
@@ -1600,7 +2981,7 @@
 func (m *SingleSetValueRequest) String() string { return proto.CompactTextString(m) }
 func (*SingleSetValueRequest) ProtoMessage()    {}
 func (*SingleSetValueRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7ecf6e9799a9202d, []int{18}
+	return fileDescriptor_7ecf6e9799a9202d, []int{22}
 }
 
 func (m *SingleSetValueRequest) XXX_Unmarshal(b []byte) error {
@@ -1646,7 +3027,7 @@
 func (m *SingleSetValueResponse) String() string { return proto.CompactTextString(m) }
 func (*SingleSetValueResponse) ProtoMessage()    {}
 func (*SingleSetValueResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_7ecf6e9799a9202d, []int{19}
+	return fileDescriptor_7ecf6e9799a9202d, []int{23}
 }
 
 func (m *SingleSetValueResponse) XXX_Unmarshal(b []byte) error {
@@ -1696,6 +3077,10 @@
 	proto.RegisterType((*GetOnuEthernetBridgePortHistoryResponse)(nil), "extension.GetOnuEthernetBridgePortHistoryResponse")
 	proto.RegisterType((*GetOnuFecHistory)(nil), "extension.GetOnuFecHistory")
 	proto.RegisterType((*GetOnuFecHistoryResponse)(nil), "extension.GetOnuFecHistoryResponse")
+	proto.RegisterType((*GetOnuCountersRequest)(nil), "extension.GetOnuCountersRequest")
+	proto.RegisterType((*GetOnuOMCICountersRequest)(nil), "extension.GetOnuOMCICountersRequest")
+	proto.RegisterType((*GetOnuCountersResponse)(nil), "extension.GetOnuCountersResponse")
+	proto.RegisterType((*GetOnuOMCICountersResponse)(nil), "extension.GetOnuOMCICountersResponse")
 	proto.RegisterType((*GetValueRequest)(nil), "extension.GetValueRequest")
 	proto.RegisterType((*GetValueResponse)(nil), "extension.GetValueResponse")
 	proto.RegisterType((*SetValueRequest)(nil), "extension.SetValueRequest")
@@ -1709,121 +3094,190 @@
 func init() { proto.RegisterFile("voltha_protos/extensions.proto", fileDescriptor_7ecf6e9799a9202d) }
 
 var fileDescriptor_7ecf6e9799a9202d = []byte{
-	// 1816 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xdd, 0x52, 0xe3, 0xc8,
-	0x15, 0xc6, 0x06, 0x8c, 0x7d, 0x0c, 0x8c, 0xa6, 0x67, 0x60, 0x29, 0x76, 0x77, 0x76, 0xa2, 0x54,
-	0x66, 0xb6, 0xb6, 0x36, 0x66, 0xed, 0x85, 0x59, 0x2a, 0xbb, 0xa9, 0x8a, 0x8d, 0x05, 0xb8, 0x00,
-	0xd9, 0xd3, 0x92, 0x99, 0x4d, 0x6e, 0x5c, 0xc2, 0xea, 0x31, 0xae, 0x18, 0xb5, 0xd3, 0x6a, 0x13,
-	0x26, 0xd7, 0x79, 0x83, 0x5c, 0xe5, 0x29, 0x72, 0x91, 0x8b, 0xb9, 0xcf, 0x75, 0x5e, 0x22, 0xaf,
-	0x90, 0x07, 0x48, 0xa5, 0xfa, 0x47, 0xb2, 0x24, 0xdb, 0x30, 0xb3, 0xc9, 0x9d, 0xfb, 0x9c, 0xef,
-	0xfb, 0xba, 0xdd, 0xe7, 0xeb, 0xa3, 0x96, 0xe0, 0xd9, 0x2d, 0x1d, 0xf1, 0x6b, 0xaf, 0x37, 0x66,
-	0x94, 0xd3, 0x70, 0x8f, 0xdc, 0x71, 0x12, 0x84, 0x43, 0x1a, 0x84, 0x15, 0x19, 0x41, 0xa5, 0x38,
-	0xb2, 0x3b, 0x0b, 0xed, 0xf5, 0x69, 0xf0, 0x76, 0x38, 0x50, 0xd0, 0xdd, 0x4f, 0x07, 0x94, 0x0e,
-	0x46, 0x64, 0x4f, 0x8e, 0xae, 0x26, 0x6f, 0xf7, 0xc8, 0xcd, 0x98, 0xbf, 0x53, 0x49, 0xf3, 0x15,
-	0xa0, 0x13, 0xc2, 0x9b, 0xc3, 0x90, 0x7b, 0x41, 0x9f, 0x60, 0xf2, 0x87, 0x09, 0x09, 0x39, 0x7a,
-	0x0e, 0x65, 0x1a, 0x4c, 0x9a, 0xe4, 0x76, 0xd8, 0x27, 0x2d, 0x7f, 0x27, 0xf7, 0x3c, 0xf7, 0x65,
-	0x09, 0x27, 0x43, 0x66, 0x15, 0x9e, 0xa4, 0x78, 0xe1, 0x98, 0x06, 0x21, 0x41, 0xbb, 0x50, 0xf4,
-	0x75, 0x4c, 0xb2, 0x36, 0x70, 0x3c, 0x36, 0x6b, 0xf0, 0xf4, 0x84, 0xf0, 0x76, 0x30, 0xe9, 0x06,
-	0xc3, 0x56, 0xf0, 0x96, 0x46, 0x93, 0xed, 0x42, 0x71, 0x22, 0x22, 0x3e, 0xb9, 0x8b, 0x38, 0xd1,
-	0xd8, 0xfc, 0xd7, 0x0a, 0x6c, 0x65, 0x48, 0x7a, 0xa6, 0x0e, 0x14, 0x3d, 0xff, 0xc6, 0xe1, 0x1e,
-	0x57, 0x33, 0x6d, 0xd6, 0xf6, 0x2b, 0xf1, 0x9e, 0x54, 0xe6, 0x72, 0x2a, 0x75, 0xff, 0x66, 0x18,
-	0x0c, 0x43, 0xce, 0x3c, 0x3e, 0xbc, 0x25, 0x92, 0x8b, 0x63, 0x15, 0xd4, 0x86, 0x12, 0x1d, 0x13,
-	0xa6, 0x24, 0xf3, 0x52, 0xb2, 0xfa, 0xa0, 0x64, 0x7b, 0x4c, 0x84, 0x1a, 0x0d, 0xbc, 0x91, 0xd2,
-	0x9b, 0x6a, 0x08, 0x41, 0x55, 0x88, 0x56, 0xe0, 0xef, 0x2c, 0x7f, 0xa0, 0xe0, 0x91, 0x64, 0x4c,
-	0x94, 0x68, 0x2b, 0xf0, 0xf1, 0x54, 0xc3, 0xfc, 0x47, 0x0e, 0x8c, 0x6c, 0x1e, 0x01, 0x14, 0xba,
-	0xf6, 0x59, 0xfb, 0x8d, 0x6d, 0x2c, 0x21, 0x04, 0x9b, 0xae, 0x65, 0xf7, 0x1a, 0x75, 0xc7, 0xea,
-	0xb9, 0xbd, 0xe3, 0xe6, 0x8f, 0x46, 0x0e, 0x6d, 0x03, 0x3a, 0xed, 0xda, 0x4d, 0x6c, 0x35, 0x93,
-	0xf1, 0x3c, 0xda, 0x81, 0xa7, 0x27, 0xad, 0x93, 0x7a, 0xa3, 0xe5, 0xf6, 0x2c, 0xf7, 0xd4, 0xc2,
-	0xb6, 0xa5, 0x32, 0xcb, 0x82, 0x21, 0x54, 0x4e, 0xd2, 0xf1, 0x95, 0x8c, 0xfa, 0x69, 0xf3, 0x47,
-	0x63, 0x75, 0x8e, 0xba, 0x88, 0x17, 0xe6, 0xaa, 0x8b, 0xcc, 0x9a, 0x79, 0x02, 0x4f, 0xe6, 0xd4,
-	0x41, 0x08, 0xd5, 0x9b, 0x17, 0x8e, 0x5b, 0x77, 0xad, 0x5e, 0xd7, 0x6e, 0x5a, 0xc7, 0x2d, 0xdb,
-	0x6a, 0x1a, 0x4b, 0xe2, 0xef, 0x9d, 0xb7, 0x8f, 0xce, 0xac, 0xa6, 0x91, 0x43, 0xeb, 0x50, 0xec,
-	0xda, 0x7a, 0x94, 0x37, 0x8f, 0xc1, 0xc8, 0xee, 0x3e, 0xfa, 0x04, 0x9e, 0xb4, 0x3b, 0x16, 0x9e,
-	0x95, 0x29, 0xc3, 0x9a, 0x65, 0xd7, 0x1b, 0xe7, 0x91, 0x4e, 0xb3, 0xe5, 0xa8, 0x51, 0xde, 0x7c,
-	0x9f, 0x93, 0x67, 0xa0, 0x3d, 0xe2, 0x1d, 0xca, 0xf8, 0x11, 0x9d, 0x04, 0x9c, 0xb0, 0x10, 0x6d,
-	0x43, 0x61, 0x4c, 0x19, 0xb7, 0xa9, 0x36, 0xa5, 0x1e, 0xa1, 0x06, 0x14, 0xc5, 0x2f, 0xf7, 0xdd,
-	0x38, 0x72, 0xc9, 0x8b, 0x4c, 0x51, 0xd3, 0x42, 0x95, 0x8e, 0x46, 0xe3, 0x98, 0x67, 0x5a, 0x50,
-	0x8c, 0xa2, 0xc8, 0x80, 0x75, 0xf1, 0xbb, 0xd7, 0xb5, 0xcf, 0x6c, 0x55, 0xc5, 0x2d, 0x78, 0x2c,
-	0x23, 0xf1, 0xc6, 0xd9, 0x76, 0xcb, 0xc8, 0xc5, 0xc0, 0x4e, 0xdb, 0xee, 0xb5, 0xcf, 0x5d, 0x23,
-	0x6f, 0xfe, 0x73, 0x19, 0x76, 0x67, 0x27, 0x8c, 0x8f, 0xc8, 0x0e, 0xac, 0xf1, 0xbb, 0xc6, 0x3b,
-	0x4e, 0x42, 0xf9, 0x17, 0x56, 0x70, 0x34, 0x14, 0x19, 0xa6, 0x33, 0x79, 0x95, 0xd1, 0x43, 0xf4,
-	0x19, 0x94, 0xf8, 0x5d, 0xc7, 0xeb, 0xff, 0x9e, 0xf0, 0x50, 0x7a, 0x76, 0x05, 0x4f, 0x03, 0x22,
-	0xcb, 0xe2, 0xec, 0x8a, 0xca, 0xc6, 0x01, 0xf4, 0x02, 0x36, 0xf9, 0x9d, 0xc5, 0x18, 0x65, 0x11,
-	0x64, 0x55, 0x42, 0x32, 0x51, 0x81, 0x63, 0x69, 0x5c, 0x41, 0xe1, 0xd8, 0x0c, 0x8e, 0xdf, 0x35,
-	0xfa, 0x5e, 0xc8, 0x23, 0xdc, 0x5a, 0xa4, 0x97, 0x8c, 0x2a, 0xbd, 0x14, 0xae, 0x18, 0xe9, 0x65,
-	0x71, 0xfc, 0xae, 0x9b, 0xc4, 0x95, 0x22, 0xbd, 0xee, 0x8c, 0x5e, 0x0a, 0x07, 0x91, 0x5e, 0x77,
-	0x46, 0xef, 0x22, 0x89, 0x2b, 0x47, 0x7a, 0x17, 0x33, 0x7a, 0x29, 0xdc, 0x7a, 0xa4, 0x97, 0x8c,
-	0x9a, 0xcd, 0xa8, 0x41, 0x76, 0x68, 0xd0, 0x1e, 0xf3, 0x61, 0xdf, 0x1b, 0x89, 0xd6, 0x80, 0xbe,
-	0x86, 0x55, 0xd9, 0xb2, 0x65, 0x15, 0xcb, 0xb5, 0xed, 0x8a, 0x6a, 0xe8, 0x95, 0xa8, 0xa1, 0x57,
-	0x2c, 0x91, 0xc5, 0x0a, 0x64, 0xfe, 0x39, 0x0f, 0x9f, 0xcd, 0x93, 0x89, 0x6d, 0xf1, 0x15, 0x18,
-	0x63, 0xfa, 0x47, 0xc2, 0x8e, 0x09, 0xf1, 0x2f, 0xe9, 0x88, 0x7b, 0x03, 0xd5, 0x41, 0xf3, 0x78,
-	0x26, 0x8e, 0x6a, 0xf0, 0x94, 0x91, 0x3e, 0x19, 0xde, 0x12, 0x5f, 0x4b, 0x75, 0x04, 0x44, 0xba,
-	0x26, 0x8f, 0xe7, 0xe6, 0xd0, 0x2b, 0xd8, 0xbe, 0x21, 0x5e, 0x34, 0xf5, 0xb9, 0x37, 0x09, 0xfa,
-	0xd7, 0x8a, 0xb5, 0x2c, 0x59, 0x0b, 0xb2, 0x62, 0x5d, 0x23, 0x2f, 0x24, 0xac, 0x31, 0xf4, 0xc2,
-	0xa3, 0x09, 0x63, 0x24, 0xe0, 0xd2, 0x63, 0x79, 0x3c, 0x13, 0x17, 0x0f, 0x28, 0x4e, 0x6e, 0xe4,
-	0xe9, 0x9f, 0x30, 0x22, 0x7d, 0x96, 0xc7, 0xc9, 0x90, 0xf9, 0xb7, 0x1c, 0x7c, 0xa1, 0xb6, 0xc1,
-	0xe2, 0xd7, 0x84, 0x05, 0x84, 0x37, 0xd8, 0xd0, 0x1f, 0x10, 0x71, 0x52, 0x4e, 0x87, 0x21, 0xa7,
-	0xec, 0x1d, 0xc2, 0x50, 0xf2, 0x87, 0x8c, 0xf4, 0x45, 0x07, 0x59, 0xf8, 0x10, 0x59, 0x48, 0xaf,
-	0x34, 0x23, 0x2e, 0x9e, 0xca, 0x98, 0x87, 0x50, 0x8a, 0xe3, 0x68, 0x03, 0x4a, 0xc9, 0x26, 0x24,
-	0xfa, 0x57, 0xc7, 0x71, 0xb1, 0x55, 0xbf, 0x30, 0x72, 0x68, 0x13, 0xa0, 0xd9, 0x7e, 0x63, 0xeb,
-	0x71, 0xde, 0xfc, 0xcb, 0x2a, 0xbc, 0x7c, 0x60, 0xca, 0xb8, 0x86, 0xcf, 0x00, 0x7c, 0x46, 0xc7,
-	0xd6, 0x2d, 0x09, 0x78, 0xa8, 0x1b, 0x54, 0x22, 0x22, 0x9a, 0x17, 0xed, 0x73, 0x61, 0xb5, 0xbc,
-	0x6a, 0x5e, 0x6a, 0x24, 0x0e, 0xfe, 0x38, 0x71, 0xb8, 0x37, 0x70, 0x34, 0x14, 0xbb, 0x7f, 0xc5,
-	0xa8, 0xe7, 0x27, 0x6d, 0xba, 0x22, 0x21, 0x33, 0x71, 0x81, 0xbd, 0x99, 0x8c, 0x44, 0x01, 0xa7,
-	0xd8, 0x55, 0x85, 0xcd, 0xc6, 0xd1, 0xd7, 0xf0, 0xb8, 0xcf, 0xfa, 0xf2, 0x5c, 0x13, 0x3f, 0x79,
-	0xde, 0x37, 0xf0, 0x6c, 0x42, 0x28, 0x4f, 0x02, 0x9f, 0xb0, 0x70, 0xf8, 0x27, 0x92, 0x3c, 0xf4,
-	0x1b, 0x78, 0x26, 0x8e, 0xbe, 0x84, 0x47, 0xf4, 0x36, 0x0d, 0x2d, 0x4a, 0x68, 0x36, 0x2c, 0x90,
-	0xfa, 0x6f, 0xbe, 0xda, 0xd7, 0xdb, 0x52, 0x52, 0xc8, 0x4c, 0x58, 0xf8, 0x3d, 0x0a, 0x1d, 0xb8,
-	0xb4, 0x5a, 0xfb, 0x4e, 0xc3, 0x41, 0xc2, 0xe7, 0xe6, 0xd0, 0x3e, 0x6c, 0xe9, 0x78, 0xb5, 0x76,
-	0xe8, 0xd2, 0xda, 0xc1, 0x41, 0x5b, 0x91, 0xca, 0x92, 0x34, 0x3f, 0x99, 0x60, 0xd5, 0x0e, 0x5e,
-	0xb9, 0xf4, 0xa0, 0x5a, 0xd5, 0x53, 0xad, 0xa7, 0x58, 0xe9, 0xa4, 0x38, 0x5b, 0x3a, 0x71, 0x50,
-	0xad, 0xb9, 0xb4, 0xfa, 0x4d, 0xed, 0x5b, 0x4d, 0xdb, 0x90, 0xb4, 0x05, 0x59, 0x74, 0x08, 0x9f,
-	0x44, 0xcb, 0xf8, 0xa6, 0xb6, 0xef, 0xd2, 0xea, 0x41, 0xf5, 0x50, 0x13, 0x37, 0x25, 0x71, 0x51,
-	0xda, 0xfc, 0x0d, 0x18, 0xca, 0x94, 0xc7, 0xa4, 0x1f, 0x9d, 0x9b, 0x8f, 0x6b, 0x48, 0xff, 0xce,
-	0xc1, 0x4e, 0x56, 0x22, 0x36, 0xf2, 0x0b, 0xd8, 0xec, 0x53, 0x26, 0xce, 0x0b, 0xf1, 0xa7, 0x8f,
-	0xaa, 0x0d, 0x9c, 0x89, 0xa2, 0x0a, 0xa0, 0x38, 0x72, 0x44, 0x7d, 0xf2, 0x86, 0x32, 0x3f, 0x32,
-	0xf7, 0x9c, 0x8c, 0x38, 0x20, 0x6f, 0x49, 0xdf, 0x21, 0x7d, 0x1a, 0xf8, 0x91, 0xd7, 0x13, 0x11,
-	0xd9, 0xbb, 0x29, 0xf7, 0x46, 0x53, 0x2d, 0x65, 0xf6, 0x4c, 0x54, 0x6c, 0xf8, 0x24, 0xd0, 0xfa,
-	0xde, 0xd5, 0x88, 0x4c, 0xf1, 0xca, 0xf0, 0x0b, 0xb2, 0xe6, 0xfb, 0x65, 0x78, 0x74, 0x42, 0xf8,
-	0xa5, 0x37, 0x9a, 0xc4, 0xb7, 0xea, 0xef, 0x33, 0x97, 0xe3, 0x72, 0xed, 0xf3, 0x74, 0xb7, 0xc9,
-	0x5c, 0xc3, 0x4f, 0x97, 0xa6, 0xb7, 0x67, 0xf4, 0x3d, 0xac, 0x4d, 0xd4, 0x55, 0x51, 0xfe, 0xeb,
-	0x72, 0xed, 0x8b, 0xc5, 0x57, 0xc9, 0x88, 0x1d, 0x31, 0x50, 0x1d, 0xca, 0x54, 0x5d, 0x12, 0xa4,
-	0xc0, 0xf2, 0xbc, 0xc9, 0x33, 0xb7, 0x88, 0xd3, 0x25, 0x9c, 0xe4, 0xa0, 0x16, 0x6c, 0xd2, 0x60,
-	0x92, 0x78, 0x9e, 0xc8, 0x0d, 0x9b, 0xb7, 0x8c, 0xf4, 0x63, 0xe7, 0x74, 0x09, 0x67, 0x88, 0x08,
-	0xc3, 0x06, 0xe1, 0xd7, 0xd3, 0xe6, 0x26, 0xb7, 0xb2, 0x5c, 0xfb, 0xea, 0xc3, 0x5b, 0xef, 0xe9,
-	0x12, 0x4e, 0x4b, 0xa0, 0x5f, 0xcb, 0x7a, 0xeb, 0xb4, 0xec, 0x2f, 0xe5, 0xda, 0xa7, 0x33, 0x82,
-	0x53, 0x03, 0x9e, 0x2e, 0xe1, 0x04, 0xa1, 0x51, 0x82, 0x35, 0xa6, 0xb6, 0xcd, 0x7c, 0x5f, 0x90,
-	0x8e, 0xd7, 0x95, 0xd3, 0x36, 0xfd, 0x15, 0x14, 0x42, 0xee, 0xf1, 0x49, 0xa8, 0x1f, 0x13, 0x66,
-	0x5a, 0x3a, 0x05, 0xae, 0x38, 0x12, 0x89, 0x35, 0x03, 0x59, 0x50, 0x22, 0x8c, 0x61, 0xe2, 0x85,
-	0x34, 0xd0, 0x37, 0xc6, 0x97, 0xf7, 0xd1, 0x65, 0x4b, 0x54, 0x70, 0x3c, 0x65, 0xa2, 0x1f, 0x12,
-	0xee, 0x51, 0x05, 0x7c, 0xb6, 0xc8, 0x3d, 0x4a, 0x28, 0x65, 0x9f, 0x1f, 0xa6, 0xf6, 0x51, 0x75,
-	0x7b, 0xfe, 0xd0, 0x9b, 0x48, 0xd2, 0x3f, 0x67, 0xb0, 0x3e, 0x56, 0xde, 0xe0, 0x01, 0x61, 0xa1,
-	0x2e, 0xd8, 0x2f, 0xee, 0x35, 0x50, 0x42, 0x27, 0x45, 0x46, 0xaf, 0x67, 0x9c, 0xa4, 0xca, 0xf5,
-	0xf2, 0x01, 0x27, 0x25, 0x04, 0xb3, 0x8e, 0xba, 0x82, 0xc7, 0x29, 0x3b, 0x48, 0xd5, 0x35, 0xa9,
-	0x5a, 0xfb, 0x70, 0x57, 0x25, 0x26, 0x98, 0x95, 0x43, 0x56, 0xca, 0x61, 0x45, 0x29, 0xfe, 0xf3,
-	0x7b, 0x1c, 0x96, 0x50, 0x4b, 0x10, 0xcd, 0x2a, 0x14, 0x94, 0x3f, 0xd0, 0x53, 0x30, 0xc4, 0x7b,
-	0x4a, 0xd7, 0x49, 0xbd, 0xa8, 0x14, 0x20, 0xdf, 0x3e, 0x33, 0x72, 0xa8, 0x04, 0xab, 0x16, 0xc6,
-	0x6d, 0x6c, 0xe4, 0xcd, 0xbf, 0xe6, 0xa0, 0x9c, 0x30, 0x85, 0x20, 0x62, 0xab, 0xee, 0xb4, 0xed,
-	0x14, 0xf1, 0x11, 0x94, 0xbb, 0xb6, 0xd3, 0xed, 0x74, 0xda, 0xd8, 0x95, 0x6f, 0x39, 0x5b, 0xf0,
-	0xb8, 0x65, 0x5f, 0xd6, 0xcf, 0x5b, 0xcd, 0x5e, 0xd3, 0xba, 0x6c, 0x1d, 0x59, 0xbd, 0x56, 0xd3,
-	0xc8, 0x27, 0xc3, 0x02, 0xda, 0x73, 0x7f, 0xdb, 0xb1, 0x8c, 0x65, 0xf1, 0x82, 0xe4, 0xb6, 0x2e,
-	0xac, 0x76, 0xd7, 0x35, 0x56, 0xc4, 0x0c, 0x11, 0x06, 0x5b, 0xaf, 0x15, 0x64, 0x55, 0xbc, 0xff,
-	0xb5, 0x6c, 0xd7, 0xc2, 0x76, 0xfd, 0xbc, 0xa7, 0xd6, 0x56, 0x68, 0x00, 0x14, 0x99, 0xfe, 0xa3,
-	0xe6, 0x25, 0x3c, 0x72, 0x32, 0x2d, 0xef, 0x10, 0xd6, 0xbd, 0x91, 0xc7, 0x6e, 0xf4, 0x17, 0x09,
-	0xdd, 0xf6, 0x9e, 0x54, 0xf4, 0x07, 0x8a, 0xba, 0xc8, 0xa9, 0x37, 0x5a, 0xd1, 0x6f, 0xbc, 0xe9,
-	0x30, 0x79, 0x22, 0xff, 0x93, 0x03, 0xc3, 0xf9, 0x98, 0x13, 0xe9, 0xfc, 0x6f, 0x27, 0xd2, 0xf9,
-	0xb0, 0x13, 0xf9, 0x53, 0x4a, 0xb9, 0xff, 0x53, 0x2a, 0x69, 0x0e, 0x61, 0xcb, 0x19, 0x06, 0x83,
-	0x11, 0xc9, 0x3e, 0x51, 0x76, 0xa1, 0xc8, 0x3d, 0x36, 0x20, 0x3c, 0xfe, 0x48, 0x13, 0x8f, 0xd1,
-	0x7e, 0xbc, 0x81, 0xfa, 0x81, 0xb1, 0x3b, 0xb7, 0xe9, 0x48, 0x04, 0x8e, 0xf7, 0xfa, 0x35, 0x6c,
-	0x67, 0xa7, 0xd2, 0x1b, 0xfe, 0xdd, 0xb4, 0xd2, 0xba, 0x8c, 0x9f, 0xde, 0xd3, 0xc5, 0xf0, 0xd4,
-	0x16, 0xf1, 0xea, 0x9d, 0xff, 0xd7, 0xea, 0x9d, 0x07, 0x57, 0xef, 0x7c, 0xdc, 0xea, 0x9d, 0x85,
-	0xab, 0xaf, 0xfd, 0x3d, 0x07, 0x25, 0x2b, 0x02, 0x22, 0x0c, 0xe5, 0x13, 0xc2, 0xad, 0x3b, 0x05,
-	0x47, 0xc9, 0x26, 0x3a, 0xb7, 0x42, 0xbb, 0x3f, 0xbb, 0x07, 0xa1, 0x97, 0x86, 0xa1, 0xec, 0xdc,
-	0xab, 0xe9, 0x3c, 0xa8, 0x99, 0x5d, 0x7f, 0x03, 0xc3, 0xe7, 0x94, 0x0d, 0x2a, 0x74, 0x4c, 0xc4,
-	0xf5, 0xc4, 0xaf, 0xa8, 0x4f, 0x84, 0x53, 0xde, 0xef, 0xaa, 0x83, 0x21, 0xbf, 0x9e, 0x5c, 0x55,
-	0xfa, 0xf4, 0x66, 0x2f, 0x42, 0xed, 0x29, 0xd4, 0x2f, 0xf5, 0x87, 0xc4, 0xdb, 0xfd, 0xbd, 0x01,
-	0x9d, 0x7e, 0x79, 0xec, 0x2c, 0x5d, 0x15, 0x64, 0xe6, 0xdb, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff,
-	0x04, 0xc2, 0xa6, 0x22, 0x9d, 0x14, 0x00, 0x00,
+	// 2926 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x5a, 0x4b, 0x73, 0x1b, 0xc7,
+	0xb5, 0x26, 0x20, 0x12, 0x8f, 0x03, 0x82, 0x00, 0x9b, 0x2f, 0x88, 0xd4, 0x13, 0xbe, 0xb6, 0x7c,
+	0x7d, 0x6d, 0x48, 0x80, 0x09, 0x59, 0x25, 0xdb, 0x55, 0xe6, 0x10, 0x23, 0x02, 0x25, 0x09, 0x80,
+	0x1a, 0x80, 0xec, 0x7b, 0x37, 0x53, 0x43, 0x4c, 0x93, 0x9a, 0x32, 0x30, 0x8d, 0x3b, 0x33, 0x90,
+	0xa1, 0xac, 0xf3, 0x0f, 0xf2, 0x3b, 0x52, 0x59, 0x64, 0x91, 0x55, 0x36, 0x59, 0xe7, 0x4f, 0xa4,
+	0x2a, 0xbb, 0xec, 0xb2, 0x4d, 0x55, 0x2a, 0xd5, 0xaf, 0x79, 0x01, 0xa4, 0x64, 0x27, 0x3b, 0xce,
+	0x39, 0xdf, 0xf7, 0x4d, 0x4f, 0xf7, 0xd7, 0xa7, 0xcf, 0x0c, 0x08, 0x77, 0xde, 0xd2, 0x89, 0xff,
+	0xc6, 0x34, 0x66, 0x2e, 0xf5, 0xa9, 0xf7, 0x90, 0x2c, 0x7c, 0xe2, 0x78, 0x36, 0x75, 0xbc, 0x1a,
+	0x8f, 0xa0, 0x7c, 0x10, 0x39, 0x5c, 0x86, 0x1a, 0x63, 0xea, 0x5c, 0xd8, 0x97, 0x02, 0x7a, 0x78,
+	0x74, 0x49, 0xe9, 0xe5, 0x84, 0x3c, 0xe4, 0x57, 0xe7, 0xf3, 0x8b, 0x87, 0x64, 0x3a, 0xf3, 0xdf,
+	0x89, 0x64, 0xf5, 0x31, 0xa0, 0x33, 0xe2, 0xb7, 0x6c, 0xcf, 0x37, 0x9d, 0x31, 0xc1, 0xe4, 0xff,
+	0xe7, 0xc4, 0xf3, 0xd1, 0x3d, 0x28, 0x50, 0x67, 0xde, 0x22, 0x6f, 0xed, 0x31, 0xe9, 0x58, 0x95,
+	0xd4, 0xbd, 0xd4, 0xa7, 0x79, 0x1c, 0x0d, 0x55, 0xeb, 0xb0, 0x13, 0xe3, 0x79, 0x33, 0xea, 0x78,
+	0x04, 0x1d, 0x42, 0xce, 0x92, 0x31, 0xce, 0x2a, 0xe2, 0xe0, 0xba, 0xda, 0x80, 0xdd, 0x33, 0xe2,
+	0xf7, 0x9c, 0xf9, 0xc8, 0xb1, 0x3b, 0xce, 0x05, 0x55, 0x37, 0x3b, 0x84, 0xdc, 0x9c, 0x45, 0x2c,
+	0xb2, 0x50, 0x1c, 0x75, 0x5d, 0xfd, 0xcb, 0x3a, 0xec, 0x25, 0x48, 0xf2, 0x4e, 0x7d, 0xc8, 0x99,
+	0xd6, 0x74, 0xe0, 0x9b, 0xbe, 0xb8, 0xd3, 0x56, 0xe3, 0xb8, 0x16, 0xcc, 0x49, 0x6d, 0x25, 0xa7,
+	0x76, 0x62, 0x4d, 0x6d, 0xc7, 0xf6, 0x7c, 0xd7, 0xf4, 0xed, 0xb7, 0x84, 0x73, 0x71, 0xa0, 0x82,
+	0x7a, 0x90, 0xa7, 0x33, 0xe2, 0x0a, 0xc9, 0x34, 0x97, 0xac, 0xbf, 0x57, 0xb2, 0x37, 0x23, 0x4c,
+	0x8d, 0x3a, 0xe6, 0x44, 0xe8, 0x85, 0x1a, 0x4c, 0x50, 0x2c, 0x44, 0xc7, 0xb1, 0x2a, 0x37, 0x3e,
+	0x50, 0xf0, 0x94, 0x33, 0xe6, 0x42, 0xb4, 0xe3, 0x58, 0x38, 0xd4, 0xa8, 0xfe, 0x29, 0x05, 0xe5,
+	0x64, 0x1e, 0x01, 0x64, 0x46, 0xdd, 0xe7, 0xbd, 0xef, 0xbb, 0xe5, 0x35, 0x84, 0x60, 0x6b, 0xa8,
+	0x77, 0x0d, 0xed, 0x64, 0xa0, 0x1b, 0x43, 0xe3, 0x59, 0xeb, 0x87, 0x72, 0x0a, 0xed, 0x03, 0x6a,
+	0x8f, 0xba, 0x2d, 0xac, 0xb7, 0xa2, 0xf1, 0x34, 0xaa, 0xc0, 0xee, 0x59, 0xe7, 0xec, 0x44, 0xeb,
+	0x0c, 0x0d, 0x7d, 0xd8, 0xd6, 0x71, 0x57, 0x17, 0x99, 0x1b, 0x8c, 0xc1, 0x54, 0xce, 0xe2, 0xf1,
+	0xf5, 0x84, 0x7a, 0xbb, 0xf5, 0x43, 0x79, 0x63, 0x85, 0x3a, 0x8b, 0x67, 0x56, 0xaa, 0xb3, 0x4c,
+	0xb6, 0x7a, 0x06, 0x3b, 0x2b, 0xd6, 0x81, 0x09, 0x9d, 0xb4, 0x5e, 0x0e, 0x86, 0x27, 0x43, 0xdd,
+	0x18, 0x75, 0x5b, 0xfa, 0xb3, 0x4e, 0x57, 0x6f, 0x95, 0xd7, 0xd8, 0xe3, 0xbd, 0xe8, 0x9d, 0x3e,
+	0xd7, 0x5b, 0xe5, 0x14, 0xda, 0x84, 0xdc, 0xa8, 0x2b, 0xaf, 0xd2, 0xd5, 0x67, 0x50, 0x4e, 0xce,
+	0x3e, 0x3a, 0x80, 0x9d, 0x5e, 0x5f, 0xc7, 0xcb, 0x32, 0x05, 0xc8, 0xea, 0xdd, 0x13, 0xed, 0x85,
+	0xd2, 0x69, 0x75, 0x06, 0xe2, 0x2a, 0x5d, 0xfd, 0x43, 0x8a, 0xef, 0x81, 0xde, 0xc4, 0xef, 0x53,
+	0xd7, 0x3f, 0xa5, 0x73, 0xc7, 0x27, 0xae, 0x87, 0xf6, 0x21, 0x33, 0xa3, 0xae, 0xdf, 0xa5, 0xd2,
+	0x94, 0xf2, 0x0a, 0x69, 0x90, 0x63, 0x7f, 0x0d, 0xdf, 0xcd, 0x94, 0x4b, 0x3e, 0x49, 0x2c, 0x6a,
+	0x5c, 0xa8, 0xd6, 0x97, 0x68, 0x1c, 0xf0, 0xaa, 0x3a, 0xe4, 0x54, 0x14, 0x95, 0x61, 0x93, 0xfd,
+	0x6d, 0x8c, 0xba, 0xcf, 0xbb, 0x62, 0x15, 0xf7, 0x60, 0x9b, 0x47, 0x82, 0x89, 0xeb, 0x76, 0x3b,
+	0xe5, 0x54, 0x00, 0xec, 0xf7, 0xba, 0x46, 0xef, 0xc5, 0xb0, 0x9c, 0xae, 0xfe, 0xf9, 0x06, 0x1c,
+	0x2e, 0xdf, 0x30, 0xd8, 0x22, 0x15, 0xc8, 0xfa, 0x0b, 0xed, 0x9d, 0x4f, 0x3c, 0xfe, 0x08, 0xeb,
+	0x58, 0x5d, 0xb2, 0x8c, 0x2b, 0x33, 0x69, 0x91, 0x91, 0x97, 0xe8, 0x16, 0xe4, 0xfd, 0x45, 0xdf,
+	0x1c, 0xff, 0x48, 0x7c, 0x8f, 0x7b, 0x76, 0x1d, 0x87, 0x01, 0x96, 0x75, 0x83, 0xec, 0xba, 0xc8,
+	0x06, 0x01, 0xf4, 0x09, 0x6c, 0xf9, 0x0b, 0xdd, 0x75, 0xa9, 0xab, 0x20, 0x1b, 0x1c, 0x92, 0x88,
+	0x32, 0x9c, 0x1b, 0xc7, 0x65, 0x04, 0xce, 0x5d, 0xc2, 0xf9, 0x0b, 0x6d, 0x6c, 0x7a, 0xbe, 0xc2,
+	0x65, 0x95, 0x5e, 0x34, 0x2a, 0xf4, 0x62, 0xb8, 0x9c, 0xd2, 0x4b, 0xe2, 0xfc, 0xc5, 0x28, 0x8a,
+	0xcb, 0x2b, 0xbd, 0xd1, 0x92, 0x5e, 0x0c, 0x07, 0x4a, 0x6f, 0xb4, 0xa4, 0xf7, 0x32, 0x8a, 0x2b,
+	0x28, 0xbd, 0x97, 0x4b, 0x7a, 0x31, 0xdc, 0xa6, 0xd2, 0x8b, 0x46, 0xab, 0x2d, 0x55, 0x20, 0xfb,
+	0xd4, 0xe9, 0xcd, 0x7c, 0x7b, 0x6c, 0x4e, 0x58, 0x69, 0x40, 0x9f, 0xc3, 0x06, 0x2f, 0xd9, 0x7c,
+	0x15, 0x0b, 0x8d, 0xfd, 0x9a, 0x28, 0xe8, 0x35, 0x55, 0xd0, 0x6b, 0x3a, 0xcb, 0x62, 0x01, 0xaa,
+	0xfe, 0x3a, 0x0d, 0xb7, 0x56, 0xc9, 0x04, 0xb6, 0xf8, 0x0c, 0xca, 0x33, 0xfa, 0x13, 0x71, 0x9f,
+	0x11, 0x62, 0xbd, 0xa6, 0x13, 0xdf, 0xbc, 0x14, 0x15, 0x34, 0x8d, 0x97, 0xe2, 0xa8, 0x01, 0xbb,
+	0x2e, 0x19, 0x13, 0xfb, 0x2d, 0xb1, 0xa4, 0x54, 0x9f, 0x41, 0xb8, 0x6b, 0xd2, 0x78, 0x65, 0x0e,
+	0x3d, 0x86, 0xfd, 0x29, 0x31, 0xd5, 0xad, 0x5f, 0x98, 0x73, 0x67, 0xfc, 0x46, 0xb0, 0x6e, 0x70,
+	0xd6, 0x15, 0x59, 0x36, 0xae, 0x89, 0xe9, 0x11, 0x57, 0xb3, 0x4d, 0xef, 0x74, 0xee, 0xba, 0xc4,
+	0xf1, 0xb9, 0xc7, 0xd2, 0x78, 0x29, 0xce, 0x0e, 0x28, 0x9f, 0x4c, 0xf9, 0xee, 0x9f, 0xbb, 0x84,
+	0xfb, 0x2c, 0x8d, 0xa3, 0xa1, 0xea, 0xef, 0x52, 0x70, 0x57, 0x4c, 0x83, 0xee, 0xbf, 0x21, 0xae,
+	0x43, 0x7c, 0xcd, 0xb5, 0xad, 0x4b, 0xc2, 0x76, 0x4a, 0xdb, 0xf6, 0x7c, 0xea, 0xbe, 0x43, 0x18,
+	0xf2, 0x96, 0xed, 0x92, 0x31, 0xab, 0x20, 0x57, 0x1e, 0x22, 0x57, 0xd2, 0x6b, 0x2d, 0xc5, 0xc5,
+	0xa1, 0x4c, 0xf5, 0x09, 0xe4, 0x83, 0x38, 0x2a, 0x42, 0x3e, 0x5a, 0x84, 0x58, 0xfd, 0xea, 0x0f,
+	0x86, 0x58, 0x3f, 0x79, 0x59, 0x4e, 0xa1, 0x2d, 0x80, 0x56, 0xef, 0xfb, 0xae, 0xbc, 0x4e, 0x57,
+	0x7f, 0xb3, 0x01, 0x0f, 0xde, 0x73, 0xcb, 0x60, 0x0d, 0xef, 0x00, 0x58, 0x2e, 0x9d, 0xe9, 0x6f,
+	0x89, 0xe3, 0x7b, 0xb2, 0x40, 0x45, 0x22, 0xac, 0x78, 0xd1, 0xb1, 0xcf, 0xac, 0x96, 0x16, 0xc5,
+	0x4b, 0x5c, 0xb1, 0x8d, 0x3f, 0x8b, 0x6c, 0xee, 0x22, 0x56, 0x97, 0x6c, 0xf6, 0xcf, 0x5d, 0x6a,
+	0x5a, 0x51, 0x9b, 0xae, 0x73, 0xc8, 0x52, 0x9c, 0x61, 0xa7, 0xf3, 0x09, 0x5b, 0xc0, 0x10, 0xbb,
+	0x21, 0xb0, 0xc9, 0x38, 0xfa, 0x1c, 0xb6, 0xc7, 0xee, 0x98, 0xef, 0x6b, 0x62, 0x45, 0xf7, 0x7b,
+	0x11, 0x2f, 0x27, 0x98, 0xf2, 0xdc, 0xb1, 0x88, 0xeb, 0xd9, 0xbf, 0x22, 0xd1, 0x4d, 0x5f, 0xc4,
+	0x4b, 0x71, 0xf4, 0x29, 0x94, 0xe8, 0xdb, 0x38, 0x34, 0xc7, 0xa1, 0xc9, 0x30, 0x43, 0xca, 0xc7,
+	0x7c, 0x7c, 0x2c, 0xa7, 0x25, 0x2f, 0x90, 0x89, 0x30, 0xf3, 0xbb, 0x0a, 0x35, 0x87, 0xb4, 0xde,
+	0xf8, 0x4a, 0xc2, 0x81, 0xc3, 0x57, 0xe6, 0xd0, 0x31, 0xec, 0xc9, 0x78, 0xbd, 0xf1, 0x64, 0x48,
+	0x1b, 0xcd, 0x66, 0x4f, 0x90, 0x0a, 0x9c, 0xb4, 0x3a, 0x19, 0x61, 0x35, 0x9a, 0x8f, 0x87, 0xb4,
+	0x59, 0xaf, 0xcb, 0x5b, 0x6d, 0xc6, 0x58, 0xf1, 0x24, 0xdb, 0x5b, 0x32, 0xd1, 0xac, 0x37, 0x86,
+	0xb4, 0xfe, 0xa8, 0xf1, 0xa5, 0xa4, 0x15, 0x39, 0xed, 0x8a, 0x2c, 0x7a, 0x02, 0x07, 0x6a, 0x18,
+	0x8f, 0x1a, 0xc7, 0x43, 0x5a, 0x6f, 0xd6, 0x9f, 0x48, 0xe2, 0x16, 0x27, 0x5e, 0x95, 0xae, 0x7e,
+	0x07, 0x65, 0x61, 0xca, 0x67, 0x64, 0xac, 0xf6, 0xcd, 0xcf, 0x2b, 0x48, 0x7f, 0x4f, 0x41, 0x25,
+	0x29, 0x11, 0x18, 0xf9, 0x13, 0xd8, 0x1a, 0x53, 0x97, 0xed, 0x17, 0x62, 0x85, 0x47, 0x55, 0x11,
+	0x27, 0xa2, 0xa8, 0x06, 0x28, 0x88, 0x9c, 0x52, 0x8b, 0x7c, 0x4f, 0x5d, 0x4b, 0x99, 0x7b, 0x45,
+	0x86, 0x6d, 0x90, 0x0b, 0x32, 0x1e, 0x90, 0x31, 0x75, 0x2c, 0xe5, 0xf5, 0x48, 0x84, 0xd7, 0x6e,
+	0xea, 0x9b, 0x93, 0x50, 0x4b, 0x98, 0x3d, 0x11, 0x65, 0x13, 0x3e, 0x77, 0xa4, 0xbe, 0x79, 0x3e,
+	0x21, 0x21, 0x5e, 0x18, 0xfe, 0x8a, 0x6c, 0xf5, 0x4c, 0xf5, 0xad, 0xe1, 0xa9, 0x2c, 0xba, 0xdd,
+	0x03, 0xc8, 0xda, 0x8e, 0x7f, 0x61, 0xd8, 0xa2, 0xad, 0xce, 0xe2, 0x0c, 0xbb, 0xec, 0x58, 0x68,
+	0x0f, 0x32, 0xd4, 0x99, 0xb3, 0x78, 0x9a, 0xc7, 0x37, 0xa8, 0x33, 0xef, 0x58, 0xd5, 0x6f, 0xe1,
+	0xa6, 0x10, 0xea, 0xbd, 0x3c, 0xed, 0x24, 0xc5, 0xde, 0xdf, 0xa7, 0xff, 0x75, 0x13, 0xf6, 0x93,
+	0x03, 0x91, 0x53, 0x7f, 0x33, 0x31, 0x92, 0xf6, 0x5a, 0x30, 0x96, 0x83, 0xf8, 0x58, 0xda, 0x29,
+	0x39, 0x1a, 0xf4, 0x00, 0xb6, 0x66, 0xd4, 0xb3, 0x59, 0xdb, 0x66, 0x58, 0xae, 0x7d, 0xe1, 0xf3,
+	0xa9, 0xcd, 0xb4, 0xd3, 0xb8, 0xa8, 0xe2, 0x2d, 0x16, 0x66, 0x40, 0x87, 0x5c, 0x9a, 0x11, 0xe0,
+	0x3a, 0x07, 0xde, 0xc0, 0x45, 0x15, 0x17, 0xc0, 0xa7, 0x50, 0xb1, 0xc8, 0xc4, 0x9e, 0xda, 0x3e,
+	0x71, 0x8d, 0xa9, 0xed, 0x79, 0x86, 0x45, 0x7c, 0x59, 0x92, 0x37, 0x38, 0x65, 0x1d, 0xef, 0x07,
+	0x88, 0x97, 0xb6, 0xe7, 0xb5, 0x54, 0x1e, 0xdd, 0x05, 0x38, 0xb7, 0x67, 0x06, 0x61, 0x35, 0x44,
+	0x14, 0x95, 0x4c, 0x7b, 0x03, 0xe7, 0xcf, 0xed, 0x19, 0x2f, 0x2b, 0x1e, 0xba, 0x0d, 0xec, 0xc2,
+	0x98, 0x3b, 0xb6, 0xac, 0x23, 0x99, 0x76, 0x06, 0xe7, 0xce, 0xed, 0xd9, 0x88, 0x45, 0xd8, 0x1e,
+	0xbc, 0x20, 0x63, 0x23, 0xb0, 0x8f, 0xe1, 0xbd, 0x9b, 0x9e, 0xd3, 0x89, 0xa8, 0x23, 0x99, 0x76,
+	0x16, 0xef, 0x5c, 0x90, 0xf1, 0xa9, 0xca, 0x0e, 0x44, 0x92, 0xed, 0x25, 0xc1, 0xb2, 0xc8, 0x4f,
+	0x6c, 0xad, 0x43, 0x3e, 0xaf, 0x2a, 0x99, 0x76, 0x0e, 0xef, 0x71, 0x9e, 0xcc, 0x07, 0x02, 0xe8,
+	0x3b, 0x38, 0x8a, 0x33, 0x63, 0xe6, 0xe1, 0x45, 0x26, 0xd3, 0xce, 0xe3, 0x9b, 0x51, 0xf6, 0x28,
+	0x0a, 0x41, 0x1f, 0x43, 0x31, 0xa6, 0xc0, 0x6b, 0x4c, 0xa6, 0x0d, 0x78, 0x33, 0xca, 0x41, 0x8f,
+	0x60, 0x27, 0xfe, 0x60, 0x62, 0x06, 0x36, 0x39, 0xb8, 0x80, 0xb7, 0xa3, 0x8f, 0x25, 0xa6, 0xe2,
+	0x53, 0x28, 0x2d, 0x2e, 0xc9, 0xd4, 0xf8, 0x91, 0xbc, 0x53, 0xf3, 0x59, 0xe4, 0xe8, 0x4d, 0x5c,
+	0x64, 0x89, 0xe7, 0xe4, 0x5d, 0x38, 0xa7, 0x1c, 0x39, 0xa1, 0x9e, 0x28, 0x1e, 0x99, 0x76, 0x11,
+	0xe7, 0x58, 0xe8, 0x05, 0xf5, 0xb8, 0x90, 0xbb, 0x30, 0x66, 0x13, 0x6a, 0x4e, 0x3d, 0xa1, 0x54,
+	0x29, 0x71, 0xd0, 0x16, 0x2e, 0xba, 0x8b, 0x3e, 0x8f, 0x73, 0x25, 0xf4, 0x05, 0xa0, 0x10, 0xe9,
+	0x50, 0xc7, 0xb0, 0xad, 0x09, 0xa9, 0x94, 0x39, 0xb8, 0x84, 0x4b, 0x0a, 0xdc, 0xa5, 0x4e, 0xc7,
+	0x9a, 0x70, 0xbb, 0xba, 0x0b, 0x83, 0x4e, 0xc7, 0x76, 0x65, 0x9b, 0x63, 0xca, 0x38, 0xe3, 0x2e,
+	0x7a, 0xd3, 0xb1, 0xcd, 0x52, 0xbe, 0x4c, 0x21, 0x9e, 0xda, 0xc6, 0x19, 0x5f, 0xa4, 0x9e, 0xc2,
+	0x4d, 0xc9, 0x32, 0x64, 0x85, 0x33, 0xc6, 0xee, 0x58, 0x0e, 0x6c, 0x87, 0x83, 0x11, 0xde, 0x13,
+	0x3a, 0xf2, 0xb8, 0x38, 0x95, 0xa7, 0x12, 0x3a, 0x82, 0x9c, 0xbb, 0x30, 0xce, 0x79, 0x55, 0xda,
+	0xe5, 0xd0, 0x9d, 0xb0, 0x51, 0xbe, 0x0b, 0xc0, 0x46, 0x2f, 0x0f, 0x9e, 0x3d, 0x9e, 0xde, 0x8d,
+	0x76, 0xc3, 0x47, 0x90, 0xf3, 0x15, 0x7b, 0x9f, 0xa7, 0xf7, 0xc2, 0x06, 0xfc, 0x2e, 0x80, 0x1f,
+	0xb2, 0x0f, 0x78, 0x7a, 0x3f, 0xda, 0x69, 0x7f, 0x04, 0x9b, 0xe7, 0xc4, 0x35, 0x5c, 0xc2, 0xde,
+	0x19, 0x88, 0x55, 0xa9, 0x70, 0xc8, 0x01, 0x2e, 0x9c, 0x13, 0x17, 0xcb, 0x20, 0xba, 0x0f, 0x85,
+	0xc9, 0xd8, 0xba, 0x54, 0x0b, 0x76, 0x93, 0x63, 0x2a, 0x18, 0x58, 0x50, 0xae, 0x16, 0x1b, 0xa6,
+	0x65, 0x2b, 0xc4, 0x21, 0x47, 0xdc, 0xc4, 0x79, 0xd7, 0xb2, 0x25, 0xe0, 0x0e, 0xe4, 0x7d, 0x7b,
+	0x4a, 0x3c, 0xdf, 0x9c, 0xce, 0x2a, 0x47, 0x7c, 0xb7, 0x1f, 0xe2, 0x30, 0xa4, 0x6d, 0x02, 0xd8,
+	0x9e, 0x21, 0x0b, 0x85, 0x56, 0x80, 0xbc, 0xed, 0x19, 0xa2, 0x36, 0x68, 0x3b, 0xb0, 0x6d, 0x7b,
+	0x46, 0xbc, 0x1e, 0xc8, 0x60, 0x7c, 0xef, 0x6b, 0xb7, 0xe1, 0xc8, 0x66, 0x1b, 0x7b, 0xf5, 0x3e,
+	0xd7, 0x4a, 0x50, 0xb4, 0x3d, 0x23, 0xdc, 0xca, 0xda, 0x16, 0x6c, 0xca, 0x00, 0x37, 0xae, 0x76,
+	0x08, 0x15, 0xdb, 0x33, 0x56, 0xee, 0x55, 0xed, 0x16, 0x1c, 0x06, 0xb9, 0xa5, 0x1d, 0xa9, 0xdd,
+	0x83, 0x3b, 0x4b, 0xd9, 0xd8, 0xae, 0xd3, 0x10, 0x94, 0x93, 0x08, 0xad, 0x02, 0xfb, 0x4b, 0xf7,
+	0x13, 0x23, 0xd9, 0x05, 0x64, 0x7b, 0x46, 0x62, 0xab, 0xc8, 0xf1, 0x06, 0xdb, 0x42, 0xa2, 0x12,
+	0xfb, 0x40, 0x3b, 0x80, 0xbd, 0x58, 0x54, 0x79, 0x5e, 0xce, 0xb1, 0xf4, 0xa9, 0xbc, 0x92, 0x86,
+	0xd6, 0xee, 0xc0, 0xad, 0x30, 0xb7, 0xec, 0x61, 0xad, 0x08, 0x05, 0x91, 0xe7, 0x4e, 0x93, 0x53,
+	0x19, 0x3a, 0x53, 0xe6, 0xfd, 0x78, 0x3e, 0xf4, 0x9e, 0xb6, 0x0d, 0x25, 0x36, 0xd5, 0x11, 0xaf,
+	0x69, 0x65, 0xd8, 0xb2, 0x3d, 0x23, 0xe2, 0x2c, 0xa5, 0x1a, 0x18, 0x49, 0x3e, 0x70, 0xe0, 0x92,
+	0xea, 0x3f, 0xb2, 0xe2, 0x4d, 0x34, 0x79, 0x4c, 0xc9, 0xa3, 0xe6, 0x3e, 0x14, 0x58, 0x73, 0x6a,
+	0x90, 0xb0, 0x5f, 0xcd, 0xb4, 0xd7, 0x62, 0x1d, 0x6b, 0x25, 0xd6, 0xb1, 0x66, 0xda, 0xa9, 0x48,
+	0xcf, 0x9a, 0xb9, 0x70, 0xcd, 0x29, 0xf1, 0x82, 0xb3, 0x46, 0x5e, 0xa3, 0xff, 0x89, 0xf4, 0xac,
+	0x86, 0xc4, 0xa8, 0x63, 0xa6, 0x14, 0x64, 0x9e, 0x05, 0xe0, 0xa0, 0x39, 0x55, 0x60, 0x75, 0xc0,
+	0x94, 0x82, 0x8c, 0x04, 0xb3, 0x76, 0x43, 0x4d, 0x31, 0xb1, 0x14, 0x5c, 0x9d, 0x30, 0xe5, 0xb0,
+	0x71, 0x0d, 0xc5, 0x83, 0xfe, 0x54, 0xa1, 0xd5, 0x79, 0x53, 0x0a, 0x32, 0x12, 0xfc, 0xdf, 0x61,
+	0xe3, 0xaa, 0xb0, 0xea, 0xc0, 0xd9, 0x52, 0x09, 0x09, 0xfd, 0x0c, 0xca, 0x02, 0x61, 0x3c, 0x3e,
+	0x36, 0x22, 0xad, 0x2b, 0x3b, 0x64, 0xb6, 0x44, 0xe6, 0xf1, 0x71, 0x4f, 0xf5, 0x86, 0x07, 0x0a,
+	0xdb, 0x34, 0x7c, 0x6a, 0xd4, 0x1b, 0x5f, 0x19, 0x91, 0xf6, 0x95, 0x9d, 0x2c, 0x3b, 0x92, 0x22,
+	0xfa, 0xd7, 0x9e, 0xea, 0x0d, 0x2b, 0x92, 0x57, 0x6f, 0x3c, 0x61, 0xc4, 0x46, 0xb3, 0xa9, 0x88,
+	0xea, 0x78, 0xd9, 0x15, 0x88, 0x44, 0x0f, 0x1b, 0x32, 0x1b, 0xcd, 0xc7, 0x8c, 0xd9, 0xac, 0xd7,
+	0x8d, 0x48, 0x1b, 0xcb, 0xce, 0x1a, 0xc9, 0x54, 0x7d, 0xac, 0x64, 0x3e, 0x85, 0x9b, 0x92, 0xd9,
+	0xac, 0x37, 0xf8, 0x60, 0x1f, 0x35, 0xbe, 0x34, 0x22, 0xad, 0x2c, 0x3b, 0x78, 0xf6, 0x04, 0x24,
+	0xe8, 0x65, 0x25, 0xf7, 0x1b, 0x38, 0x54, 0xe3, 0x7d, 0xd4, 0x38, 0xe6, 0xe4, 0x66, 0xfd, 0x89,
+	0x11, 0x69, 0x67, 0xd9, 0x89, 0xb4, 0x2f, 0x47, 0x1c, 0xf4, 0xb3, 0x82, 0x2d, 0xcd, 0x1d, 0x71,
+	0xa3, 0xaa, 0x69, 0x22, 0x2d, 0x2e, 0x04, 0x57, 0xdb, 0x83, 0x1d, 0xb6, 0x37, 0x12, 0x16, 0x93,
+	0xe1, 0xa4, 0x99, 0xe4, 0xf6, 0x5e, 0xb6, 0x8d, 0xc4, 0x27, 0xfd, 0x21, 0x8b, 0x44, 0xc2, 0x09,
+	0x12, 0x9c, 0x5c, 0x74, 0x55, 0xe5, 0x56, 0xaf, 0xaf, 0xac, 0xaf, 0x57, 0xad, 0x62, 0x3c, 0xbd,
+	0xb4, 0x54, 0xb2, 0xc4, 0x5c, 0xb9, 0x1e, 0xda, 0x5d, 0xb8, 0x1d, 0x51, 0x5f, 0x9e, 0xf3, 0xea,
+	0x1f, 0xd7, 0xa1, 0x74, 0x46, 0xfc, 0xd7, 0xe6, 0x64, 0x1e, 0x7c, 0x42, 0xfe, 0x3a, 0xf1, 0x25,
+	0xb8, 0xd0, 0xb8, 0x1d, 0x7f, 0xb5, 0x4e, 0x7c, 0x73, 0x6e, 0xaf, 0x85, 0x9f, 0x8a, 0xd1, 0xd7,
+	0x90, 0x9d, 0x8b, 0xef, 0xa2, 0xbc, 0x1a, 0x14, 0x1a, 0x77, 0xaf, 0xfe, 0x6e, 0xaa, 0xd8, 0x8a,
+	0x81, 0x4e, 0xa0, 0x40, 0xc5, 0x17, 0x31, 0x2e, 0x70, 0x63, 0xd5, 0xcd, 0x13, 0x9f, 0xcc, 0xda,
+	0x6b, 0x38, 0xca, 0x41, 0x1d, 0xd8, 0xa2, 0xce, 0x3c, 0xf2, 0xf1, 0x84, 0x97, 0x95, 0x55, 0xc3,
+	0x88, 0x7f, 0x63, 0x69, 0xaf, 0xe1, 0x04, 0x11, 0x61, 0x28, 0x12, 0xff, 0x4d, 0xf8, 0x26, 0xcf,
+	0x6b, 0x4e, 0xa1, 0xf1, 0xd9, 0x87, 0x7f, 0x67, 0x68, 0xaf, 0xe1, 0xb8, 0x04, 0xfa, 0x96, 0xbf,
+	0xdc, 0xc8, 0x34, 0xaf, 0x4a, 0x85, 0xc6, 0xd1, 0x92, 0x60, 0xf8, 0xb6, 0xc5, 0x4a, 0x6d, 0x48,
+	0x40, 0x1a, 0x00, 0xe5, 0x23, 0xe7, 0x4f, 0x96, 0xe5, 0xf4, 0x7b, 0x4b, 0xf4, 0xc4, 0xbb, 0x06,
+	0xd3, 0x08, 0x59, 0xe8, 0x3b, 0xc8, 0xb2, 0x37, 0x02, 0x26, 0x90, 0xe3, 0x02, 0xff, 0xb5, 0x24,
+	0xb0, 0xe2, 0x85, 0x85, 0x2d, 0x93, 0xa4, 0x69, 0x79, 0xc8, 0xba, 0x22, 0x5a, 0xfd, 0x5b, 0x96,
+	0xbf, 0x64, 0x4a, 0xff, 0xc8, 0x33, 0xe3, 0x29, 0x64, 0x3c, 0xdf, 0xf4, 0xe7, 0x9e, 0xfc, 0x32,
+	0x53, 0x8d, 0xdf, 0x20, 0x06, 0xae, 0x0d, 0x38, 0x12, 0x4b, 0x06, 0xd2, 0x21, 0x4f, 0x5c, 0x17,
+	0x13, 0xd3, 0xa3, 0x8e, 0xfc, 0x48, 0xfb, 0xe0, 0x3a, 0x3a, 0x2f, 0xe6, 0x02, 0x8e, 0x43, 0x26,
+	0xfa, 0x26, 0xe2, 0x61, 0x61, 0xa3, 0x3b, 0x57, 0x79, 0x58, 0x08, 0xc5, 0x4c, 0xfc, 0x4d, 0x68,
+	0xe2, 0xf5, 0x2b, 0xe6, 0x38, 0xf1, 0xf1, 0x3f, 0xea, 0xe2, 0xe7, 0xb0, 0x39, 0x13, 0x0e, 0xf5,
+	0x1d, 0xe2, 0x7a, 0xd2, 0x36, 0x1f, 0x5f, 0x6b, 0xe3, 0x88, 0x4e, 0x8c, 0x8c, 0x5e, 0x2d, 0xf9,
+	0x59, 0x98, 0xe6, 0xc1, 0x7b, 0xfc, 0x1c, 0x11, 0x4c, 0xfa, 0xfa, 0x1c, 0xb6, 0x63, 0xa6, 0x8c,
+	0x78, 0xa9, 0xf1, 0xe1, 0xde, 0x8e, 0xdc, 0x60, 0x59, 0x0e, 0xe9, 0x31, 0x9f, 0x0b, 0x9f, 0x7d,
+	0x74, 0x8d, 0xcf, 0x23, 0x6a, 0x51, 0xbf, 0x3f, 0xe7, 0x4f, 0xdf, 0xa7, 0x8e, 0x9a, 0x27, 0x7e,
+	0x84, 0x16, 0x1a, 0xf7, 0xaf, 0xf1, 0x7c, 0xec, 0xb9, 0x23, 0x54, 0xf4, 0x0a, 0x4a, 0x34, 0xee,
+	0x6d, 0x7e, 0xba, 0x2e, 0x2f, 0xcd, 0xea, 0x56, 0xa8, 0xbd, 0x86, 0x93, 0xfc, 0x6a, 0x1d, 0x32,
+	0xc2, 0xbf, 0x68, 0x17, 0xca, 0x83, 0xe1, 0xc9, 0x70, 0x34, 0x88, 0xfd, 0x76, 0x91, 0x81, 0x74,
+	0xef, 0x79, 0x39, 0x85, 0xf2, 0xb0, 0xa1, 0x63, 0xdc, 0xc3, 0xe5, 0x74, 0xf5, 0xb7, 0x29, 0x28,
+	0x44, 0x4c, 0xcb, 0x88, 0x58, 0x3f, 0x19, 0xf4, 0xba, 0x31, 0x62, 0x09, 0x0a, 0xa3, 0xee, 0x60,
+	0xd4, 0xef, 0xf7, 0xf0, 0x90, 0xff, 0xf0, 0xb1, 0x07, 0xdb, 0x9d, 0xee, 0xeb, 0x93, 0x17, 0x9d,
+	0x96, 0xd1, 0xd2, 0x5f, 0x77, 0x4e, 0x75, 0xa3, 0xd3, 0x2a, 0xa7, 0xa3, 0x61, 0x06, 0x35, 0x86,
+	0xff, 0xdb, 0xd7, 0xcb, 0x37, 0x50, 0x01, 0xb2, 0xc3, 0xce, 0x4b, 0xbd, 0x37, 0x1a, 0x96, 0xd7,
+	0xd9, 0x1d, 0x14, 0x06, 0xeb, 0xaf, 0x04, 0x64, 0x03, 0x21, 0xd8, 0xea, 0x74, 0x87, 0x3a, 0xee,
+	0x9e, 0xbc, 0x30, 0xc4, 0xd8, 0x32, 0x22, 0x16, 0xbd, 0x49, 0x39, 0xab, 0x01, 0xe4, 0x5c, 0x39,
+	0x03, 0xd5, 0xd7, 0x50, 0x1a, 0x24, 0x0e, 0x8b, 0x27, 0xb0, 0x69, 0x4e, 0x4c, 0x77, 0x2a, 0x7f,
+	0xb8, 0x94, 0x07, 0xc6, 0x4e, 0x4d, 0xfe, 0x8e, 0x79, 0xc2, 0x72, 0xe2, 0x87, 0x2f, 0x56, 0xa9,
+	0xcd, 0xf0, 0x32, 0x5a, 0x45, 0xfe, 0x99, 0x82, 0xf2, 0xe0, 0xe7, 0x54, 0x91, 0xc1, 0xbf, 0x57,
+	0x45, 0x06, 0x1f, 0x56, 0x45, 0x7e, 0xc9, 0xf2, 0x1e, 0xff, 0x92, 0xd5, 0xad, 0xda, 0xb0, 0x37,
+	0xb0, 0x9d, 0xcb, 0x09, 0x49, 0x9e, 0xc5, 0x87, 0x90, 0xf3, 0x4d, 0xf7, 0x92, 0xf8, 0xc1, 0x37,
+	0xa2, 0xe0, 0x1a, 0x1d, 0x07, 0x13, 0x28, 0x8f, 0xda, 0xc3, 0x95, 0x85, 0x92, 0x23, 0x70, 0x30,
+	0xd7, 0xaf, 0x60, 0x3f, 0x79, 0x2b, 0x39, 0xe1, 0x5f, 0x85, 0x2b, 0x2d, 0x97, 0xf1, 0xe8, 0x9a,
+	0xca, 0x8b, 0x43, 0x5b, 0x04, 0xa3, 0x1f, 0xfc, 0xa7, 0x46, 0x3f, 0x78, 0xef, 0xe8, 0x07, 0x3f,
+	0x6f, 0xf4, 0x83, 0x2b, 0x47, 0xdf, 0xf8, 0x7d, 0x0a, 0xf2, 0xba, 0x02, 0x22, 0x0c, 0x85, 0x33,
+	0xe2, 0xeb, 0x0b, 0x01, 0x47, 0xd1, 0xc2, 0xbf, 0x72, 0x85, 0x0e, 0xef, 0x5f, 0x83, 0x90, 0x43,
+	0xc3, 0x50, 0x18, 0x5c, 0xab, 0x39, 0x78, 0xaf, 0x66, 0x72, 0xfc, 0x1a, 0x86, 0xdb, 0xd4, 0xbd,
+	0xac, 0xd1, 0x19, 0x61, 0xaf, 0xc4, 0x56, 0x4d, 0xfc, 0x27, 0x41, 0xc8, 0xfb, 0xbf, 0xfa, 0xa5,
+	0xed, 0xbf, 0x99, 0x9f, 0xd7, 0xc6, 0x74, 0xfa, 0x50, 0xa1, 0x1e, 0x0a, 0xd4, 0x17, 0xf2, 0xff,
+	0x0d, 0xde, 0x1e, 0x3f, 0xbc, 0xa4, 0xe1, 0x3f, 0x28, 0xf4, 0xd7, 0xce, 0x33, 0x3c, 0xf3, 0xe5,
+	0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0x09, 0x36, 0x59, 0xed, 0xc4, 0x20, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
diff --git a/protos/voltha_protos/extensions.proto b/protos/voltha_protos/extensions.proto
index 849934f..43c012a 100644
--- a/protos/voltha_protos/extensions.proto
+++ b/protos/voltha_protos/extensions.proto
@@ -140,6 +140,145 @@
     uint32 uncorrectableCodeWords = 5;
 }
 
+message GetOnuCountersRequest {
+    fixed32 intf_id = 1;
+    fixed32 onu_id = 2;
+}
+
+message GetOnuOMCICountersRequest {
+    string onuDeviceId = 1;
+}
+
+message GetOnuCountersResponse {
+    oneof is_intf_id {
+        fixed32 intf_id = 1;
+    }
+    oneof is_onu_id {
+        fixed32 onu_id = 2;
+    }
+    oneof is_positive_drift {
+        fixed64 positive_drift = 3;
+    }
+    oneof is_negative_drift {
+        fixed64 negative_drift = 4;
+    }
+    oneof is_delimiter_miss_detection {
+        fixed64 delimiter_miss_detection = 5;
+    }
+    oneof is_bip_errors {
+        fixed64 bip_errors = 6;
+    }
+    oneof is_bip_units {
+        fixed64 bip_units = 7;
+    }
+    oneof is_fec_corrected_symbols {
+        fixed64 fec_corrected_symbols = 8;
+    }
+    oneof is_fec_codewords_corrected {
+        fixed64 fec_codewords_corrected = 9;
+    }
+    oneof is_fec_codewords_uncorrectable {
+        fixed64 fec_codewords_uncorrectable = 10;
+    }
+    oneof is_fec_codewords {
+        fixed64 fec_codewords = 11;
+    }
+    oneof is_fec_corrected_units {
+        fixed64 fec_corrected_units = 12;
+    }
+    oneof is_xgem_key_errors {
+        fixed64 xgem_key_errors = 13;
+    }
+    oneof is_xgem_loss {
+        fixed64 xgem_loss = 14;
+    }
+    oneof is_rx_ploams_error {
+        fixed64 rx_ploams_error = 15;
+    }
+    oneof is_rx_ploams_non_idle {
+        fixed64 rx_ploams_non_idle = 16;
+    }
+    oneof is_rx_omci {
+        fixed64 rx_omci = 17;
+    }
+    oneof is_tx_omci {
+        fixed64 tx_omci = 18;
+    }
+    oneof is_rx_omci_packets_crc_error {
+        fixed64 rx_omci_packets_crc_error = 19;
+    }
+    oneof is_rx_bytes {
+        fixed64 rx_bytes = 20;
+    }
+    oneof is_rx_packets {
+        fixed64 rx_packets = 21;
+    }
+    oneof is_tx_bytes {
+        fixed64 tx_bytes = 22;
+    }
+    oneof is_tx_packets {
+        fixed64 tx_packets = 23;
+    }
+    oneof is_ber_reported {
+        fixed64 ber_reported = 24;
+    }
+    oneof is_lcdg_errors {
+        fixed64 lcdg_errors = 25;
+    }
+    oneof is_rdi_errors {
+        fixed64 rdi_errors = 26;
+    }
+    oneof is_timestamp {
+        // reported timestamp in seconds since epoch
+        fixed32 timestamp = 27;
+    }
+}
+
+message GetOnuOMCICountersResponse {
+    oneof is_drop_events {
+        fixed64 drop_events = 1;
+    }
+    oneof is_octets {
+        fixed64 octets = 2;
+    }
+    oneof is_frames {
+        fixed64 frames = 3;
+    }
+    oneof is_broadcast_frames {
+        fixed64 broadcast_frames = 4;
+    }
+    oneof is_multicast_frames {
+        fixed64 multicast_frames = 5;
+    }
+    oneof is_crc_errored_frames {
+        fixed64 crc_errored_frames = 6;
+    }
+    oneof is_undersize_frames {
+        fixed64 undersize_frames = 7;
+    }
+    oneof is_oversize_frames {
+        fixed64 oversize_frames = 8;
+    }
+    oneof is_frames_64_octets {
+        fixed64 frames_64_octets = 9;
+    }
+    oneof is_frames_65_to_127_octets {
+        fixed64 frames_65_to_127_octets = 10;
+    }
+    oneof is_frames_128_to_255_octets {
+        fixed64 frames_128_to_255_octets = 11;
+    }
+    oneof is_frames_256_to_511_octets {
+        fixed64 frames_256_to_511_octets = 12;
+    }
+    oneof is_frames_512_to_1023_octets {
+        fixed64 frames_512_to_1023_octets = 13;
+    }
+    oneof is_frames_1024_to_1518_octets {
+        fixed64 frames_1024_to_1518_octets = 14;
+    }
+}
+
 message GetValueRequest {
     oneof request {
         GetDistanceRequest distance = 1;
@@ -152,6 +291,8 @@
         GetOnuEthernetBridgePortHistory ethBridgePort = 5;
         // Corresponds to PmMetricId.FEC_HISTORY
         GetOnuFecHistory fecHistory= 6;
+        GetOnuCountersRequest onuPonInfo= 7;
+        GetOnuOMCICountersRequest onuInfo=8;
     }
 }
 
@@ -169,7 +310,8 @@
         INVALID_PORT_TYPE = 3;
         TIMEOUT = 4;
         INVALID_REQ_TYPE = 5;
-	INTERNAL_ERROR = 6;
+        INTERNAL_ERROR = 6;
+        INVALID_DEVICE = 7;
     }
     Status status = 1;
     ErrorReason errReason = 2;
@@ -181,6 +323,9 @@
         GetOnuPonOpticalInfoResponse onuOpticalInfo = 6;
         GetOnuEthernetBridgePortHistoryResponse ethBridgePortInfo = 7;
         GetOnuFecHistoryResponse fecHistory = 8;
+        GetOnuCountersResponse onuPonCounters= 9;
+        GetOnuOMCICountersResponse onuOMCICounters= 10;
+
     }
 }
 
diff --git a/voltha.pb b/voltha.pb
index bc01341..3b4117a 100644
--- a/voltha.pb
+++ b/voltha.pb
Binary files differ
