diff --git a/go/common/common.pb.go b/go/common/common.pb.go
index 593ef2d..0312ed7 100644
--- a/go/common/common.pb.go
+++ b/go/common/common.pb.go
@@ -1,24 +1,25 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.36.11
+// 	protoc        v4.25.8
 // source: voltha_protos/common.proto
 
 package common
 
 import (
-	fmt "fmt"
-	proto "github.com/golang/protobuf/proto"
-	math "math"
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	sync "sync"
+	unsafe "unsafe"
 )
 
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = proto.Marshal
-var _ = fmt.Errorf
-var _ = math.Inf
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the proto package it is being compiled against.
-// A compilation error at this line likely means your copy of the
-// proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
 
 type TestModeKeys int32
 
@@ -26,20 +27,41 @@
 	TestModeKeys_api_test TestModeKeys = 0
 )
 
-var TestModeKeys_name = map[int32]string{
-	0: "api_test",
-}
+// Enum value maps for TestModeKeys.
+var (
+	TestModeKeys_name = map[int32]string{
+		0: "api_test",
+	}
+	TestModeKeys_value = map[string]int32{
+		"api_test": 0,
+	}
+)
 
-var TestModeKeys_value = map[string]int32{
-	"api_test": 0,
+func (x TestModeKeys) Enum() *TestModeKeys {
+	p := new(TestModeKeys)
+	*p = x
+	return p
 }
 
 func (x TestModeKeys) String() string {
-	return proto.EnumName(TestModeKeys_name, int32(x))
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
 }
 
+func (TestModeKeys) Descriptor() protoreflect.EnumDescriptor {
+	return file_voltha_protos_common_proto_enumTypes[0].Descriptor()
+}
+
+func (TestModeKeys) Type() protoreflect.EnumType {
+	return &file_voltha_protos_common_proto_enumTypes[0]
+}
+
+func (x TestModeKeys) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use TestModeKeys.Descriptor instead.
 func (TestModeKeys) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_c2e3fd231961e826, []int{0}
+	return file_voltha_protos_common_proto_rawDescGZIP(), []int{0}
 }
 
 // Administrative State
@@ -59,28 +81,49 @@
 	AdminState_DOWNLOADING_IMAGE AdminState_Types = 4
 )
 
-var AdminState_Types_name = map[int32]string{
-	0: "UNKNOWN",
-	1: "PREPROVISIONED",
-	2: "ENABLED",
-	3: "DISABLED",
-	4: "DOWNLOADING_IMAGE",
-}
+// Enum value maps for AdminState_Types.
+var (
+	AdminState_Types_name = map[int32]string{
+		0: "UNKNOWN",
+		1: "PREPROVISIONED",
+		2: "ENABLED",
+		3: "DISABLED",
+		4: "DOWNLOADING_IMAGE",
+	}
+	AdminState_Types_value = map[string]int32{
+		"UNKNOWN":           0,
+		"PREPROVISIONED":    1,
+		"ENABLED":           2,
+		"DISABLED":          3,
+		"DOWNLOADING_IMAGE": 4,
+	}
+)
 
-var AdminState_Types_value = map[string]int32{
-	"UNKNOWN":           0,
-	"PREPROVISIONED":    1,
-	"ENABLED":           2,
-	"DISABLED":          3,
-	"DOWNLOADING_IMAGE": 4,
+func (x AdminState_Types) Enum() *AdminState_Types {
+	p := new(AdminState_Types)
+	*p = x
+	return p
 }
 
 func (x AdminState_Types) String() string {
-	return proto.EnumName(AdminState_Types_name, int32(x))
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
 }
 
+func (AdminState_Types) Descriptor() protoreflect.EnumDescriptor {
+	return file_voltha_protos_common_proto_enumTypes[1].Descriptor()
+}
+
+func (AdminState_Types) Type() protoreflect.EnumType {
+	return &file_voltha_protos_common_proto_enumTypes[1]
+}
+
+func (x AdminState_Types) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use AdminState_Types.Descriptor instead.
 func (AdminState_Types) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_c2e3fd231961e826, []int{4, 0}
+	return file_voltha_protos_common_proto_rawDescGZIP(), []int{4, 0}
 }
 
 // Operational Status
@@ -107,36 +150,57 @@
 	OperStatus_REBOOTED OperStatus_Types = 8
 )
 
-var OperStatus_Types_name = map[int32]string{
-	0: "UNKNOWN",
-	1: "DISCOVERED",
-	2: "ACTIVATING",
-	3: "TESTING",
-	4: "ACTIVE",
-	5: "FAILED",
-	6: "RECONCILING",
-	7: "RECONCILING_FAILED",
-	8: "REBOOTED",
-}
+// Enum value maps for OperStatus_Types.
+var (
+	OperStatus_Types_name = map[int32]string{
+		0: "UNKNOWN",
+		1: "DISCOVERED",
+		2: "ACTIVATING",
+		3: "TESTING",
+		4: "ACTIVE",
+		5: "FAILED",
+		6: "RECONCILING",
+		7: "RECONCILING_FAILED",
+		8: "REBOOTED",
+	}
+	OperStatus_Types_value = map[string]int32{
+		"UNKNOWN":            0,
+		"DISCOVERED":         1,
+		"ACTIVATING":         2,
+		"TESTING":            3,
+		"ACTIVE":             4,
+		"FAILED":             5,
+		"RECONCILING":        6,
+		"RECONCILING_FAILED": 7,
+		"REBOOTED":           8,
+	}
+)
 
-var OperStatus_Types_value = map[string]int32{
-	"UNKNOWN":            0,
-	"DISCOVERED":         1,
-	"ACTIVATING":         2,
-	"TESTING":            3,
-	"ACTIVE":             4,
-	"FAILED":             5,
-	"RECONCILING":        6,
-	"RECONCILING_FAILED": 7,
-	"REBOOTED":           8,
+func (x OperStatus_Types) Enum() *OperStatus_Types {
+	p := new(OperStatus_Types)
+	*p = x
+	return p
 }
 
 func (x OperStatus_Types) String() string {
-	return proto.EnumName(OperStatus_Types_name, int32(x))
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
 }
 
+func (OperStatus_Types) Descriptor() protoreflect.EnumDescriptor {
+	return file_voltha_protos_common_proto_enumTypes[2].Descriptor()
+}
+
+func (OperStatus_Types) Type() protoreflect.EnumType {
+	return &file_voltha_protos_common_proto_enumTypes[2]
+}
+
+func (x OperStatus_Types) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use OperStatus_Types.Descriptor instead.
 func (OperStatus_Types) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_c2e3fd231961e826, []int{5, 0}
+	return file_voltha_protos_common_proto_rawDescGZIP(), []int{5, 0}
 }
 
 // Connectivity Status
@@ -151,24 +215,45 @@
 	ConnectStatus_REACHABLE ConnectStatus_Types = 2
 )
 
-var ConnectStatus_Types_name = map[int32]string{
-	0: "UNKNOWN",
-	1: "UNREACHABLE",
-	2: "REACHABLE",
-}
+// Enum value maps for ConnectStatus_Types.
+var (
+	ConnectStatus_Types_name = map[int32]string{
+		0: "UNKNOWN",
+		1: "UNREACHABLE",
+		2: "REACHABLE",
+	}
+	ConnectStatus_Types_value = map[string]int32{
+		"UNKNOWN":     0,
+		"UNREACHABLE": 1,
+		"REACHABLE":   2,
+	}
+)
 
-var ConnectStatus_Types_value = map[string]int32{
-	"UNKNOWN":     0,
-	"UNREACHABLE": 1,
-	"REACHABLE":   2,
+func (x ConnectStatus_Types) Enum() *ConnectStatus_Types {
+	p := new(ConnectStatus_Types)
+	*p = x
+	return p
 }
 
 func (x ConnectStatus_Types) String() string {
-	return proto.EnumName(ConnectStatus_Types_name, int32(x))
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
 }
 
+func (ConnectStatus_Types) Descriptor() protoreflect.EnumDescriptor {
+	return file_voltha_protos_common_proto_enumTypes[3].Descriptor()
+}
+
+func (ConnectStatus_Types) Type() protoreflect.EnumType {
+	return &file_voltha_protos_common_proto_enumTypes[3]
+}
+
+func (x ConnectStatus_Types) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use ConnectStatus_Types.Descriptor instead.
 func (ConnectStatus_Types) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_c2e3fd231961e826, []int{6, 0}
+	return file_voltha_protos_common_proto_rawDescGZIP(), []int{6, 0}
 }
 
 type OperationResp_OperationReturnCode int32
@@ -180,362 +265,434 @@
 	OperationResp_OPERATION_IN_PROGRESS OperationResp_OperationReturnCode = 3
 )
 
-var OperationResp_OperationReturnCode_name = map[int32]string{
-	0: "OPERATION_SUCCESS",
-	1: "OPERATION_FAILURE",
-	2: "OPERATION_UNSUPPORTED",
-	3: "OPERATION_IN_PROGRESS",
-}
+// Enum value maps for OperationResp_OperationReturnCode.
+var (
+	OperationResp_OperationReturnCode_name = map[int32]string{
+		0: "OPERATION_SUCCESS",
+		1: "OPERATION_FAILURE",
+		2: "OPERATION_UNSUPPORTED",
+		3: "OPERATION_IN_PROGRESS",
+	}
+	OperationResp_OperationReturnCode_value = map[string]int32{
+		"OPERATION_SUCCESS":     0,
+		"OPERATION_FAILURE":     1,
+		"OPERATION_UNSUPPORTED": 2,
+		"OPERATION_IN_PROGRESS": 3,
+	}
+)
 
-var OperationResp_OperationReturnCode_value = map[string]int32{
-	"OPERATION_SUCCESS":     0,
-	"OPERATION_FAILURE":     1,
-	"OPERATION_UNSUPPORTED": 2,
-	"OPERATION_IN_PROGRESS": 3,
+func (x OperationResp_OperationReturnCode) Enum() *OperationResp_OperationReturnCode {
+	p := new(OperationResp_OperationReturnCode)
+	*p = x
+	return p
 }
 
 func (x OperationResp_OperationReturnCode) String() string {
-	return proto.EnumName(OperationResp_OperationReturnCode_name, int32(x))
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
 }
 
+func (OperationResp_OperationReturnCode) Descriptor() protoreflect.EnumDescriptor {
+	return file_voltha_protos_common_proto_enumTypes[4].Descriptor()
+}
+
+func (OperationResp_OperationReturnCode) Type() protoreflect.EnumType {
+	return &file_voltha_protos_common_proto_enumTypes[4]
+}
+
+func (x OperationResp_OperationReturnCode) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use OperationResp_OperationReturnCode.Descriptor instead.
 func (OperationResp_OperationReturnCode) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_c2e3fd231961e826, []int{7, 0}
+	return file_voltha_protos_common_proto_rawDescGZIP(), []int{7, 0}
 }
 
 // Full path for KV store
 type Key struct {
-	Key                  string   `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	state         protoimpl.MessageState `protogen:"open.v1"`
+	Key           string                 `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
-func (m *Key) Reset()         { *m = Key{} }
-func (m *Key) String() string { return proto.CompactTextString(m) }
-func (*Key) ProtoMessage()    {}
+func (x *Key) Reset() {
+	*x = Key{}
+	mi := &file_voltha_protos_common_proto_msgTypes[0]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *Key) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Key) ProtoMessage() {}
+
+func (x *Key) ProtoReflect() protoreflect.Message {
+	mi := &file_voltha_protos_common_proto_msgTypes[0]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Key.ProtoReflect.Descriptor instead.
 func (*Key) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c2e3fd231961e826, []int{0}
+	return file_voltha_protos_common_proto_rawDescGZIP(), []int{0}
 }
 
-func (m *Key) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_Key.Unmarshal(m, b)
-}
-func (m *Key) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_Key.Marshal(b, m, deterministic)
-}
-func (m *Key) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Key.Merge(m, src)
-}
-func (m *Key) XXX_Size() int {
-	return xxx_messageInfo_Key.Size(m)
-}
-func (m *Key) XXX_DiscardUnknown() {
-	xxx_messageInfo_Key.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Key proto.InternalMessageInfo
-
-func (m *Key) GetKey() string {
-	if m != nil {
-		return m.Key
+func (x *Key) GetKey() string {
+	if x != nil {
+		return x.Key
 	}
 	return ""
 }
 
 // Convey a resource identifier
 type ID struct {
-	Id                   string   `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	state         protoimpl.MessageState `protogen:"open.v1"`
+	Id            string                 `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
-func (m *ID) Reset()         { *m = ID{} }
-func (m *ID) String() string { return proto.CompactTextString(m) }
-func (*ID) ProtoMessage()    {}
+func (x *ID) Reset() {
+	*x = ID{}
+	mi := &file_voltha_protos_common_proto_msgTypes[1]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ID) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ID) ProtoMessage() {}
+
+func (x *ID) ProtoReflect() protoreflect.Message {
+	mi := &file_voltha_protos_common_proto_msgTypes[1]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ID.ProtoReflect.Descriptor instead.
 func (*ID) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c2e3fd231961e826, []int{1}
+	return file_voltha_protos_common_proto_rawDescGZIP(), []int{1}
 }
 
-func (m *ID) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_ID.Unmarshal(m, b)
-}
-func (m *ID) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_ID.Marshal(b, m, deterministic)
-}
-func (m *ID) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ID.Merge(m, src)
-}
-func (m *ID) XXX_Size() int {
-	return xxx_messageInfo_ID.Size(m)
-}
-func (m *ID) XXX_DiscardUnknown() {
-	xxx_messageInfo_ID.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ID proto.InternalMessageInfo
-
-func (m *ID) GetId() string {
-	if m != nil {
-		return m.Id
+func (x *ID) GetId() string {
+	if x != nil {
+		return x.Id
 	}
 	return ""
 }
 
 // Represents a list of IDs
 type IDs struct {
-	Items                []*ID    `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	state         protoimpl.MessageState `protogen:"open.v1"`
+	Items         []*ID                  `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
-func (m *IDs) Reset()         { *m = IDs{} }
-func (m *IDs) String() string { return proto.CompactTextString(m) }
-func (*IDs) ProtoMessage()    {}
+func (x *IDs) Reset() {
+	*x = IDs{}
+	mi := &file_voltha_protos_common_proto_msgTypes[2]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *IDs) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*IDs) ProtoMessage() {}
+
+func (x *IDs) ProtoReflect() protoreflect.Message {
+	mi := &file_voltha_protos_common_proto_msgTypes[2]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use IDs.ProtoReflect.Descriptor instead.
 func (*IDs) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c2e3fd231961e826, []int{2}
+	return file_voltha_protos_common_proto_rawDescGZIP(), []int{2}
 }
 
-func (m *IDs) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_IDs.Unmarshal(m, b)
-}
-func (m *IDs) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_IDs.Marshal(b, m, deterministic)
-}
-func (m *IDs) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_IDs.Merge(m, src)
-}
-func (m *IDs) XXX_Size() int {
-	return xxx_messageInfo_IDs.Size(m)
-}
-func (m *IDs) XXX_DiscardUnknown() {
-	xxx_messageInfo_IDs.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_IDs proto.InternalMessageInfo
-
-func (m *IDs) GetItems() []*ID {
-	if m != nil {
-		return m.Items
+func (x *IDs) GetItems() []*ID {
+	if x != nil {
+		return x.Items
 	}
 	return nil
 }
 
 type Connection struct {
+	state protoimpl.MessageState `protogen:"open.v1"`
 	// endpoint is the endpoint sending the request
 	Endpoint string `protobuf:"bytes,1,opt,name=endpoint,proto3" json:"endpoint,omitempty"`
 	// contextInfo represents additional contextual information
 	ContextInfo string `protobuf:"bytes,2,opt,name=contextInfo,proto3" json:"contextInfo,omitempty"`
 	// keep_alive_interval is used to indicate to the remote endpoint how often it
 	// will get a keep alive notification
-	KeepAliveInterval    int64    `protobuf:"varint,3,opt,name=keep_alive_interval,json=keepAliveInterval,proto3" json:"keep_alive_interval,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	KeepAliveInterval int64 `protobuf:"varint,3,opt,name=keep_alive_interval,json=keepAliveInterval,proto3" json:"keep_alive_interval,omitempty"`
+	unknownFields     protoimpl.UnknownFields
+	sizeCache         protoimpl.SizeCache
 }
 
-func (m *Connection) Reset()         { *m = Connection{} }
-func (m *Connection) String() string { return proto.CompactTextString(m) }
-func (*Connection) ProtoMessage()    {}
+func (x *Connection) Reset() {
+	*x = Connection{}
+	mi := &file_voltha_protos_common_proto_msgTypes[3]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *Connection) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Connection) ProtoMessage() {}
+
+func (x *Connection) ProtoReflect() protoreflect.Message {
+	mi := &file_voltha_protos_common_proto_msgTypes[3]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use Connection.ProtoReflect.Descriptor instead.
 func (*Connection) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c2e3fd231961e826, []int{3}
+	return file_voltha_protos_common_proto_rawDescGZIP(), []int{3}
 }
 
-func (m *Connection) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_Connection.Unmarshal(m, b)
-}
-func (m *Connection) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_Connection.Marshal(b, m, deterministic)
-}
-func (m *Connection) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_Connection.Merge(m, src)
-}
-func (m *Connection) XXX_Size() int {
-	return xxx_messageInfo_Connection.Size(m)
-}
-func (m *Connection) XXX_DiscardUnknown() {
-	xxx_messageInfo_Connection.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_Connection proto.InternalMessageInfo
-
-func (m *Connection) GetEndpoint() string {
-	if m != nil {
-		return m.Endpoint
+func (x *Connection) GetEndpoint() string {
+	if x != nil {
+		return x.Endpoint
 	}
 	return ""
 }
 
-func (m *Connection) GetContextInfo() string {
-	if m != nil {
-		return m.ContextInfo
+func (x *Connection) GetContextInfo() string {
+	if x != nil {
+		return x.ContextInfo
 	}
 	return ""
 }
 
-func (m *Connection) GetKeepAliveInterval() int64 {
-	if m != nil {
-		return m.KeepAliveInterval
+func (x *Connection) GetKeepAliveInterval() int64 {
+	if x != nil {
+		return x.KeepAliveInterval
 	}
 	return 0
 }
 
 type AdminState struct {
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	state         protoimpl.MessageState `protogen:"open.v1"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
-func (m *AdminState) Reset()         { *m = AdminState{} }
-func (m *AdminState) String() string { return proto.CompactTextString(m) }
-func (*AdminState) ProtoMessage()    {}
+func (x *AdminState) Reset() {
+	*x = AdminState{}
+	mi := &file_voltha_protos_common_proto_msgTypes[4]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *AdminState) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AdminState) ProtoMessage() {}
+
+func (x *AdminState) ProtoReflect() protoreflect.Message {
+	mi := &file_voltha_protos_common_proto_msgTypes[4]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use AdminState.ProtoReflect.Descriptor instead.
 func (*AdminState) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c2e3fd231961e826, []int{4}
+	return file_voltha_protos_common_proto_rawDescGZIP(), []int{4}
 }
 
-func (m *AdminState) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_AdminState.Unmarshal(m, b)
-}
-func (m *AdminState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_AdminState.Marshal(b, m, deterministic)
-}
-func (m *AdminState) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_AdminState.Merge(m, src)
-}
-func (m *AdminState) XXX_Size() int {
-	return xxx_messageInfo_AdminState.Size(m)
-}
-func (m *AdminState) XXX_DiscardUnknown() {
-	xxx_messageInfo_AdminState.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_AdminState proto.InternalMessageInfo
-
 type OperStatus struct {
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	state         protoimpl.MessageState `protogen:"open.v1"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
-func (m *OperStatus) Reset()         { *m = OperStatus{} }
-func (m *OperStatus) String() string { return proto.CompactTextString(m) }
-func (*OperStatus) ProtoMessage()    {}
+func (x *OperStatus) Reset() {
+	*x = OperStatus{}
+	mi := &file_voltha_protos_common_proto_msgTypes[5]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *OperStatus) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*OperStatus) ProtoMessage() {}
+
+func (x *OperStatus) ProtoReflect() protoreflect.Message {
+	mi := &file_voltha_protos_common_proto_msgTypes[5]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use OperStatus.ProtoReflect.Descriptor instead.
 func (*OperStatus) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c2e3fd231961e826, []int{5}
+	return file_voltha_protos_common_proto_rawDescGZIP(), []int{5}
 }
 
-func (m *OperStatus) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_OperStatus.Unmarshal(m, b)
-}
-func (m *OperStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_OperStatus.Marshal(b, m, deterministic)
-}
-func (m *OperStatus) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_OperStatus.Merge(m, src)
-}
-func (m *OperStatus) XXX_Size() int {
-	return xxx_messageInfo_OperStatus.Size(m)
-}
-func (m *OperStatus) XXX_DiscardUnknown() {
-	xxx_messageInfo_OperStatus.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_OperStatus proto.InternalMessageInfo
-
 type ConnectStatus struct {
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	state         protoimpl.MessageState `protogen:"open.v1"`
+	unknownFields protoimpl.UnknownFields
+	sizeCache     protoimpl.SizeCache
 }
 
-func (m *ConnectStatus) Reset()         { *m = ConnectStatus{} }
-func (m *ConnectStatus) String() string { return proto.CompactTextString(m) }
-func (*ConnectStatus) ProtoMessage()    {}
+func (x *ConnectStatus) Reset() {
+	*x = ConnectStatus{}
+	mi := &file_voltha_protos_common_proto_msgTypes[6]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *ConnectStatus) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ConnectStatus) ProtoMessage() {}
+
+func (x *ConnectStatus) ProtoReflect() protoreflect.Message {
+	mi := &file_voltha_protos_common_proto_msgTypes[6]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ConnectStatus.ProtoReflect.Descriptor instead.
 func (*ConnectStatus) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c2e3fd231961e826, []int{6}
+	return file_voltha_protos_common_proto_rawDescGZIP(), []int{6}
 }
 
-func (m *ConnectStatus) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_ConnectStatus.Unmarshal(m, b)
-}
-func (m *ConnectStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_ConnectStatus.Marshal(b, m, deterministic)
-}
-func (m *ConnectStatus) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_ConnectStatus.Merge(m, src)
-}
-func (m *ConnectStatus) XXX_Size() int {
-	return xxx_messageInfo_ConnectStatus.Size(m)
-}
-func (m *ConnectStatus) XXX_DiscardUnknown() {
-	xxx_messageInfo_ConnectStatus.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_ConnectStatus proto.InternalMessageInfo
-
 type OperationResp struct {
+	state protoimpl.MessageState `protogen:"open.v1"`
 	// Return code
 	Code OperationResp_OperationReturnCode `protobuf:"varint,1,opt,name=code,proto3,enum=common.OperationResp_OperationReturnCode" json:"code,omitempty"`
 	// Additional Info
-	AdditionalInfo       string   `protobuf:"bytes,2,opt,name=additional_info,json=additionalInfo,proto3" json:"additional_info,omitempty"`
-	XXX_NoUnkeyedLiteral struct{} `json:"-"`
-	XXX_unrecognized     []byte   `json:"-"`
-	XXX_sizecache        int32    `json:"-"`
+	AdditionalInfo string `protobuf:"bytes,2,opt,name=additional_info,json=additionalInfo,proto3" json:"additional_info,omitempty"`
+	unknownFields  protoimpl.UnknownFields
+	sizeCache      protoimpl.SizeCache
 }
 
-func (m *OperationResp) Reset()         { *m = OperationResp{} }
-func (m *OperationResp) String() string { return proto.CompactTextString(m) }
-func (*OperationResp) ProtoMessage()    {}
+func (x *OperationResp) Reset() {
+	*x = OperationResp{}
+	mi := &file_voltha_protos_common_proto_msgTypes[7]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *OperationResp) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*OperationResp) ProtoMessage() {}
+
+func (x *OperationResp) ProtoReflect() protoreflect.Message {
+	mi := &file_voltha_protos_common_proto_msgTypes[7]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use OperationResp.ProtoReflect.Descriptor instead.
 func (*OperationResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c2e3fd231961e826, []int{7}
+	return file_voltha_protos_common_proto_rawDescGZIP(), []int{7}
 }
 
-func (m *OperationResp) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_OperationResp.Unmarshal(m, b)
-}
-func (m *OperationResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_OperationResp.Marshal(b, m, deterministic)
-}
-func (m *OperationResp) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_OperationResp.Merge(m, src)
-}
-func (m *OperationResp) XXX_Size() int {
-	return xxx_messageInfo_OperationResp.Size(m)
-}
-func (m *OperationResp) XXX_DiscardUnknown() {
-	xxx_messageInfo_OperationResp.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_OperationResp proto.InternalMessageInfo
-
-func (m *OperationResp) GetCode() OperationResp_OperationReturnCode {
-	if m != nil {
-		return m.Code
+func (x *OperationResp) GetCode() OperationResp_OperationReturnCode {
+	if x != nil {
+		return x.Code
 	}
 	return OperationResp_OPERATION_SUCCESS
 }
 
-func (m *OperationResp) GetAdditionalInfo() string {
-	if m != nil {
-		return m.AdditionalInfo
+func (x *OperationResp) GetAdditionalInfo() string {
+	if x != nil {
+		return x.AdditionalInfo
 	}
 	return ""
 }
 
 type PortStatistics struct {
-	IntfId  uint32 `protobuf:"fixed32,1,opt,name=intf_id,json=intfId,proto3" json:"intf_id,omitempty"`
-	RxBytes uint64 `protobuf:"fixed64,2,opt,name=rx_bytes,json=rxBytes,proto3" json:"rx_bytes,omitempty"`
+	state   protoimpl.MessageState `protogen:"open.v1"`
+	IntfId  uint32                 `protobuf:"fixed32,1,opt,name=intf_id,json=intfId,proto3" json:"intf_id,omitempty"`
+	RxBytes uint64                 `protobuf:"fixed64,2,opt,name=rx_bytes,json=rxBytes,proto3" json:"rx_bytes,omitempty"`
 	// Deprecated: OLT being a Layer 2 device, use rx_frames (field 17) instead
-	RxPackets uint64 `protobuf:"fixed64,3,opt,name=rx_packets,json=rxPackets,proto3" json:"rx_packets,omitempty"` // Deprecated: Do not use.
+	//
+	// Deprecated: Marked as deprecated in voltha_protos/common.proto.
+	RxPackets uint64 `protobuf:"fixed64,3,opt,name=rx_packets,json=rxPackets,proto3" json:"rx_packets,omitempty"`
 	// Deprecated: OLT being a Layer 2 device, use rx_ucast_frames (field 63) instead
-	RxUcastPackets uint64 `protobuf:"fixed64,4,opt,name=rx_ucast_packets,json=rxUcastPackets,proto3" json:"rx_ucast_packets,omitempty"` // Deprecated: Do not use.
+	//
+	// Deprecated: Marked as deprecated in voltha_protos/common.proto.
+	RxUcastPackets uint64 `protobuf:"fixed64,4,opt,name=rx_ucast_packets,json=rxUcastPackets,proto3" json:"rx_ucast_packets,omitempty"`
 	// Deprecated: OLT being a Layer 2 device, use rx_mcast_frames (field 64) instead
-	RxMcastPackets uint64 `protobuf:"fixed64,5,opt,name=rx_mcast_packets,json=rxMcastPackets,proto3" json:"rx_mcast_packets,omitempty"` // Deprecated: Do not use.
+	//
+	// Deprecated: Marked as deprecated in voltha_protos/common.proto.
+	RxMcastPackets uint64 `protobuf:"fixed64,5,opt,name=rx_mcast_packets,json=rxMcastPackets,proto3" json:"rx_mcast_packets,omitempty"`
 	// Deprecated: OLT being a Layer 2 device, use rx_bcast_frames (field 65) instead
-	RxBcastPackets uint64 `protobuf:"fixed64,6,opt,name=rx_bcast_packets,json=rxBcastPackets,proto3" json:"rx_bcast_packets,omitempty"` // Deprecated: Do not use.
+	//
+	// Deprecated: Marked as deprecated in voltha_protos/common.proto.
+	RxBcastPackets uint64 `protobuf:"fixed64,6,opt,name=rx_bcast_packets,json=rxBcastPackets,proto3" json:"rx_bcast_packets,omitempty"`
 	// Deprecated: OLT being a Layer 2 device, use rx_error_frames (field 66) instead
-	RxErrorPackets          uint64 `protobuf:"fixed64,7,opt,name=rx_error_packets,json=rxErrorPackets,proto3" json:"rx_error_packets,omitempty"` // Deprecated: Do not use.
+	//
+	// Deprecated: Marked as deprecated in voltha_protos/common.proto.
+	RxErrorPackets          uint64 `protobuf:"fixed64,7,opt,name=rx_error_packets,json=rxErrorPackets,proto3" json:"rx_error_packets,omitempty"`
 	RxFrames                uint64 `protobuf:"fixed64,17,opt,name=rx_frames,json=rxFrames,proto3" json:"rx_frames,omitempty"`
 	RxFrames_64             uint64 `protobuf:"fixed64,18,opt,name=rx_frames_64,json=rxFrames64,proto3" json:"rx_frames_64,omitempty"`
 	RxFrames_65_127         uint64 `protobuf:"fixed64,19,opt,name=rx_frames_65_127,json=rxFrames65127,proto3" json:"rx_frames_65_127,omitempty"`
@@ -564,710 +721,804 @@
 	RxFcsErrorPackets       uint64 `protobuf:"fixed64,62,opt,name=rxFcsErrorPackets,proto3" json:"rxFcsErrorPackets,omitempty"`
 	TxBytes                 uint64 `protobuf:"fixed64,8,opt,name=tx_bytes,json=txBytes,proto3" json:"tx_bytes,omitempty"`
 	// Deprecated: OLT being a Layer 2 device, use tx_frames (field 28) instead
-	TxPackets uint64 `protobuf:"fixed64,9,opt,name=tx_packets,json=txPackets,proto3" json:"tx_packets,omitempty"` // Deprecated: Do not use.
+	//
+	// Deprecated: Marked as deprecated in voltha_protos/common.proto.
+	TxPackets uint64 `protobuf:"fixed64,9,opt,name=tx_packets,json=txPackets,proto3" json:"tx_packets,omitempty"`
 	// Deprecated: OLT being a Layer 2 device, use tx_ucast_frames (field 68) instead
-	TxUcastPackets uint64 `protobuf:"fixed64,10,opt,name=tx_ucast_packets,json=txUcastPackets,proto3" json:"tx_ucast_packets,omitempty"` // Deprecated: Do not use.
+	//
+	// Deprecated: Marked as deprecated in voltha_protos/common.proto.
+	TxUcastPackets uint64 `protobuf:"fixed64,10,opt,name=tx_ucast_packets,json=txUcastPackets,proto3" json:"tx_ucast_packets,omitempty"`
 	// Deprecated: OLT being a Layer 2 device, use tx_mcast_frames (field 69) instead
-	TxMcastPackets uint64 `protobuf:"fixed64,11,opt,name=tx_mcast_packets,json=txMcastPackets,proto3" json:"tx_mcast_packets,omitempty"` // Deprecated: Do not use.
+	//
+	// Deprecated: Marked as deprecated in voltha_protos/common.proto.
+	TxMcastPackets uint64 `protobuf:"fixed64,11,opt,name=tx_mcast_packets,json=txMcastPackets,proto3" json:"tx_mcast_packets,omitempty"`
 	// Deprecated: OLT being a Layer 2 device, use tx_bcast_frames (field 70) instead
-	TxBcastPackets uint64 `protobuf:"fixed64,12,opt,name=tx_bcast_packets,json=txBcastPackets,proto3" json:"tx_bcast_packets,omitempty"` // Deprecated: Do not use.
+	//
+	// Deprecated: Marked as deprecated in voltha_protos/common.proto.
+	TxBcastPackets uint64 `protobuf:"fixed64,12,opt,name=tx_bcast_packets,json=txBcastPackets,proto3" json:"tx_bcast_packets,omitempty"`
 	// Deprecated: OLT being a Layer 2 device, use tx_error_frames (field 71) instead
-	TxErrorPackets         uint64   `protobuf:"fixed64,13,opt,name=tx_error_packets,json=txErrorPackets,proto3" json:"tx_error_packets,omitempty"` // Deprecated: Do not use.
-	TxFrames               uint64   `protobuf:"fixed64,28,opt,name=tx_frames,json=txFrames,proto3" json:"tx_frames,omitempty"`
-	TxFrames_64            uint64   `protobuf:"fixed64,29,opt,name=tx_frames_64,json=txFrames64,proto3" json:"tx_frames_64,omitempty"`
-	TxFrames_65_127        uint64   `protobuf:"fixed64,30,opt,name=tx_frames_65_127,json=txFrames65127,proto3" json:"tx_frames_65_127,omitempty"`
-	TxFrames_128_255       uint64   `protobuf:"fixed64,31,opt,name=tx_frames_128_255,json=txFrames128255,proto3" json:"tx_frames_128_255,omitempty"`
-	TxFrames_256_511       uint64   `protobuf:"fixed64,32,opt,name=tx_frames_256_511,json=txFrames256511,proto3" json:"tx_frames_256_511,omitempty"`
-	TxFrames_512_1023      uint64   `protobuf:"fixed64,33,opt,name=tx_frames_512_1023,json=txFrames5121023,proto3" json:"tx_frames_512_1023,omitempty"`
-	TxFrames_1024_1518     uint64   `protobuf:"fixed64,34,opt,name=tx_frames_1024_1518,json=txFrames10241518,proto3" json:"tx_frames_1024_1518,omitempty"`
-	TxFrames_1519_2047     uint64   `protobuf:"fixed64,35,opt,name=tx_frames_1519_2047,json=txFrames15192047,proto3" json:"tx_frames_1519_2047,omitempty"`
-	TxFrames_2048_4095     uint64   `protobuf:"fixed64,36,opt,name=tx_frames_2048_4095,json=txFrames20484095,proto3" json:"tx_frames_2048_4095,omitempty"`
-	TxFrames_4096_9216     uint64   `protobuf:"fixed64,37,opt,name=tx_frames_4096_9216,json=txFrames40969216,proto3" json:"tx_frames_4096_9216,omitempty"`
-	TxFrames_9217_16383    uint64   `protobuf:"fixed64,38,opt,name=tx_frames_9217_16383,json=txFrames921716383,proto3" json:"tx_frames_9217_16383,omitempty"`
-	TxUndersizePackets     uint64   `protobuf:"fixed64,41,opt,name=txUndersizePackets,proto3" json:"txUndersizePackets,omitempty"`
-	TxOversizePackets      uint64   `protobuf:"fixed64,42,opt,name=txOversizePackets,proto3" json:"txOversizePackets,omitempty"`
-	TxGem                  uint64   `protobuf:"fixed64,54,opt,name=txGem,proto3" json:"txGem,omitempty"`
-	TxCpu                  uint64   `protobuf:"fixed64,55,opt,name=txCpu,proto3" json:"txCpu,omitempty"`
-	TxOmci                 uint64   `protobuf:"fixed64,56,opt,name=txOmci,proto3" json:"txOmci,omitempty"`
-	TxDroppedIllegalLength uint64   `protobuf:"fixed64,57,opt,name=txDroppedIllegalLength,proto3" json:"txDroppedIllegalLength,omitempty"`
-	TxDroppedTpidMiss      uint64   `protobuf:"fixed64,58,opt,name=txDroppedTpidMiss,proto3" json:"txDroppedTpidMiss,omitempty"`
-	TxDroppedVidMiss       uint64   `protobuf:"fixed64,59,opt,name=txDroppedVidMiss,proto3" json:"txDroppedVidMiss,omitempty"`
-	TxDroppedTotal         uint64   `protobuf:"fixed64,60,opt,name=txDroppedTotal,proto3" json:"txDroppedTotal,omitempty"`
-	BipErrors              uint64   `protobuf:"fixed64,15,opt,name=bip_errors,json=bipErrors,proto3" json:"bip_errors,omitempty"`
-	BipUnits               uint64   `protobuf:"fixed64,61,opt,name=bip_units,json=bipUnits,proto3" json:"bip_units,omitempty"`
-	Timestamp              uint32   `protobuf:"fixed32,16,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
-	RxUcastFrames          uint64   `protobuf:"fixed64,63,opt,name=rx_ucast_frames,json=rxUcastFrames,proto3" json:"rx_ucast_frames,omitempty"`
-	RxMcastFrames          uint64   `protobuf:"fixed64,64,opt,name=rx_mcast_frames,json=rxMcastFrames,proto3" json:"rx_mcast_frames,omitempty"`
-	RxBcastFrames          uint64   `protobuf:"fixed64,65,opt,name=rx_bcast_frames,json=rxBcastFrames,proto3" json:"rx_bcast_frames,omitempty"`
-	RxErrorFrames          uint64   `protobuf:"fixed64,66,opt,name=rx_error_frames,json=rxErrorFrames,proto3" json:"rx_error_frames,omitempty"`
-	RxRightFrames          uint64   `protobuf:"fixed64,67,opt,name=rx_right_frames,json=rxRightFrames,proto3" json:"rx_right_frames,omitempty"`
-	TxUcastFrames          uint64   `protobuf:"fixed64,68,opt,name=tx_ucast_frames,json=txUcastFrames,proto3" json:"tx_ucast_frames,omitempty"`
-	TxMcastFrames          uint64   `protobuf:"fixed64,69,opt,name=tx_mcast_frames,json=txMcastFrames,proto3" json:"tx_mcast_frames,omitempty"`
-	TxBcastFrames          uint64   `protobuf:"fixed64,70,opt,name=tx_bcast_frames,json=txBcastFrames,proto3" json:"tx_bcast_frames,omitempty"`
-	TxErrorFrames          uint64   `protobuf:"fixed64,71,opt,name=tx_error_frames,json=txErrorFrames,proto3" json:"tx_error_frames,omitempty"`
-	RxDiscardedFrames      uint64   `protobuf:"fixed64,72,opt,name=rx_discarded_frames,json=rxDiscardedFrames,proto3" json:"rx_discarded_frames,omitempty"`
-	XXX_NoUnkeyedLiteral   struct{} `json:"-"`
-	XXX_unrecognized       []byte   `json:"-"`
-	XXX_sizecache          int32    `json:"-"`
+	//
+	// Deprecated: Marked as deprecated in voltha_protos/common.proto.
+	TxErrorPackets         uint64 `protobuf:"fixed64,13,opt,name=tx_error_packets,json=txErrorPackets,proto3" json:"tx_error_packets,omitempty"`
+	TxFrames               uint64 `protobuf:"fixed64,28,opt,name=tx_frames,json=txFrames,proto3" json:"tx_frames,omitempty"`
+	TxFrames_64            uint64 `protobuf:"fixed64,29,opt,name=tx_frames_64,json=txFrames64,proto3" json:"tx_frames_64,omitempty"`
+	TxFrames_65_127        uint64 `protobuf:"fixed64,30,opt,name=tx_frames_65_127,json=txFrames65127,proto3" json:"tx_frames_65_127,omitempty"`
+	TxFrames_128_255       uint64 `protobuf:"fixed64,31,opt,name=tx_frames_128_255,json=txFrames128255,proto3" json:"tx_frames_128_255,omitempty"`
+	TxFrames_256_511       uint64 `protobuf:"fixed64,32,opt,name=tx_frames_256_511,json=txFrames256511,proto3" json:"tx_frames_256_511,omitempty"`
+	TxFrames_512_1023      uint64 `protobuf:"fixed64,33,opt,name=tx_frames_512_1023,json=txFrames5121023,proto3" json:"tx_frames_512_1023,omitempty"`
+	TxFrames_1024_1518     uint64 `protobuf:"fixed64,34,opt,name=tx_frames_1024_1518,json=txFrames10241518,proto3" json:"tx_frames_1024_1518,omitempty"`
+	TxFrames_1519_2047     uint64 `protobuf:"fixed64,35,opt,name=tx_frames_1519_2047,json=txFrames15192047,proto3" json:"tx_frames_1519_2047,omitempty"`
+	TxFrames_2048_4095     uint64 `protobuf:"fixed64,36,opt,name=tx_frames_2048_4095,json=txFrames20484095,proto3" json:"tx_frames_2048_4095,omitempty"`
+	TxFrames_4096_9216     uint64 `protobuf:"fixed64,37,opt,name=tx_frames_4096_9216,json=txFrames40969216,proto3" json:"tx_frames_4096_9216,omitempty"`
+	TxFrames_9217_16383    uint64 `protobuf:"fixed64,38,opt,name=tx_frames_9217_16383,json=txFrames921716383,proto3" json:"tx_frames_9217_16383,omitempty"`
+	TxUndersizePackets     uint64 `protobuf:"fixed64,41,opt,name=txUndersizePackets,proto3" json:"txUndersizePackets,omitempty"`
+	TxOversizePackets      uint64 `protobuf:"fixed64,42,opt,name=txOversizePackets,proto3" json:"txOversizePackets,omitempty"`
+	TxGem                  uint64 `protobuf:"fixed64,54,opt,name=txGem,proto3" json:"txGem,omitempty"`
+	TxCpu                  uint64 `protobuf:"fixed64,55,opt,name=txCpu,proto3" json:"txCpu,omitempty"`
+	TxOmci                 uint64 `protobuf:"fixed64,56,opt,name=txOmci,proto3" json:"txOmci,omitempty"`
+	TxDroppedIllegalLength uint64 `protobuf:"fixed64,57,opt,name=txDroppedIllegalLength,proto3" json:"txDroppedIllegalLength,omitempty"`
+	TxDroppedTpidMiss      uint64 `protobuf:"fixed64,58,opt,name=txDroppedTpidMiss,proto3" json:"txDroppedTpidMiss,omitempty"`
+	TxDroppedVidMiss       uint64 `protobuf:"fixed64,59,opt,name=txDroppedVidMiss,proto3" json:"txDroppedVidMiss,omitempty"`
+	TxDroppedTotal         uint64 `protobuf:"fixed64,60,opt,name=txDroppedTotal,proto3" json:"txDroppedTotal,omitempty"`
+	BipErrors              uint64 `protobuf:"fixed64,15,opt,name=bip_errors,json=bipErrors,proto3" json:"bip_errors,omitempty"`
+	BipUnits               uint64 `protobuf:"fixed64,61,opt,name=bip_units,json=bipUnits,proto3" json:"bip_units,omitempty"`
+	Timestamp              uint32 `protobuf:"fixed32,16,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+	RxUcastFrames          uint64 `protobuf:"fixed64,63,opt,name=rx_ucast_frames,json=rxUcastFrames,proto3" json:"rx_ucast_frames,omitempty"`
+	RxMcastFrames          uint64 `protobuf:"fixed64,64,opt,name=rx_mcast_frames,json=rxMcastFrames,proto3" json:"rx_mcast_frames,omitempty"`
+	RxBcastFrames          uint64 `protobuf:"fixed64,65,opt,name=rx_bcast_frames,json=rxBcastFrames,proto3" json:"rx_bcast_frames,omitempty"`
+	RxErrorFrames          uint64 `protobuf:"fixed64,66,opt,name=rx_error_frames,json=rxErrorFrames,proto3" json:"rx_error_frames,omitempty"`
+	RxRightFrames          uint64 `protobuf:"fixed64,67,opt,name=rx_right_frames,json=rxRightFrames,proto3" json:"rx_right_frames,omitempty"`
+	TxUcastFrames          uint64 `protobuf:"fixed64,68,opt,name=tx_ucast_frames,json=txUcastFrames,proto3" json:"tx_ucast_frames,omitempty"`
+	TxMcastFrames          uint64 `protobuf:"fixed64,69,opt,name=tx_mcast_frames,json=txMcastFrames,proto3" json:"tx_mcast_frames,omitempty"`
+	TxBcastFrames          uint64 `protobuf:"fixed64,70,opt,name=tx_bcast_frames,json=txBcastFrames,proto3" json:"tx_bcast_frames,omitempty"`
+	TxErrorFrames          uint64 `protobuf:"fixed64,71,opt,name=tx_error_frames,json=txErrorFrames,proto3" json:"tx_error_frames,omitempty"`
+	RxDiscardedFrames      uint64 `protobuf:"fixed64,72,opt,name=rx_discarded_frames,json=rxDiscardedFrames,proto3" json:"rx_discarded_frames,omitempty"`
+	unknownFields          protoimpl.UnknownFields
+	sizeCache              protoimpl.SizeCache
 }
 
-func (m *PortStatistics) Reset()         { *m = PortStatistics{} }
-func (m *PortStatistics) String() string { return proto.CompactTextString(m) }
-func (*PortStatistics) ProtoMessage()    {}
+func (x *PortStatistics) Reset() {
+	*x = PortStatistics{}
+	mi := &file_voltha_protos_common_proto_msgTypes[8]
+	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+	ms.StoreMessageInfo(mi)
+}
+
+func (x *PortStatistics) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*PortStatistics) ProtoMessage() {}
+
+func (x *PortStatistics) ProtoReflect() protoreflect.Message {
+	mi := &file_voltha_protos_common_proto_msgTypes[8]
+	if x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use PortStatistics.ProtoReflect.Descriptor instead.
 func (*PortStatistics) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c2e3fd231961e826, []int{8}
+	return file_voltha_protos_common_proto_rawDescGZIP(), []int{8}
 }
 
-func (m *PortStatistics) XXX_Unmarshal(b []byte) error {
-	return xxx_messageInfo_PortStatistics.Unmarshal(m, b)
-}
-func (m *PortStatistics) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
-	return xxx_messageInfo_PortStatistics.Marshal(b, m, deterministic)
-}
-func (m *PortStatistics) XXX_Merge(src proto.Message) {
-	xxx_messageInfo_PortStatistics.Merge(m, src)
-}
-func (m *PortStatistics) XXX_Size() int {
-	return xxx_messageInfo_PortStatistics.Size(m)
-}
-func (m *PortStatistics) XXX_DiscardUnknown() {
-	xxx_messageInfo_PortStatistics.DiscardUnknown(m)
-}
-
-var xxx_messageInfo_PortStatistics proto.InternalMessageInfo
-
-func (m *PortStatistics) GetIntfId() uint32 {
-	if m != nil {
-		return m.IntfId
+func (x *PortStatistics) GetIntfId() uint32 {
+	if x != nil {
+		return x.IntfId
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxBytes() uint64 {
-	if m != nil {
-		return m.RxBytes
+func (x *PortStatistics) GetRxBytes() uint64 {
+	if x != nil {
+		return x.RxBytes
 	}
 	return 0
 }
 
-// Deprecated: Do not use.
-func (m *PortStatistics) GetRxPackets() uint64 {
-	if m != nil {
-		return m.RxPackets
+// Deprecated: Marked as deprecated in voltha_protos/common.proto.
+func (x *PortStatistics) GetRxPackets() uint64 {
+	if x != nil {
+		return x.RxPackets
 	}
 	return 0
 }
 
-// Deprecated: Do not use.
-func (m *PortStatistics) GetRxUcastPackets() uint64 {
-	if m != nil {
-		return m.RxUcastPackets
+// Deprecated: Marked as deprecated in voltha_protos/common.proto.
+func (x *PortStatistics) GetRxUcastPackets() uint64 {
+	if x != nil {
+		return x.RxUcastPackets
 	}
 	return 0
 }
 
-// Deprecated: Do not use.
-func (m *PortStatistics) GetRxMcastPackets() uint64 {
-	if m != nil {
-		return m.RxMcastPackets
+// Deprecated: Marked as deprecated in voltha_protos/common.proto.
+func (x *PortStatistics) GetRxMcastPackets() uint64 {
+	if x != nil {
+		return x.RxMcastPackets
 	}
 	return 0
 }
 
-// Deprecated: Do not use.
-func (m *PortStatistics) GetRxBcastPackets() uint64 {
-	if m != nil {
-		return m.RxBcastPackets
+// Deprecated: Marked as deprecated in voltha_protos/common.proto.
+func (x *PortStatistics) GetRxBcastPackets() uint64 {
+	if x != nil {
+		return x.RxBcastPackets
 	}
 	return 0
 }
 
-// Deprecated: Do not use.
-func (m *PortStatistics) GetRxErrorPackets() uint64 {
-	if m != nil {
-		return m.RxErrorPackets
+// Deprecated: Marked as deprecated in voltha_protos/common.proto.
+func (x *PortStatistics) GetRxErrorPackets() uint64 {
+	if x != nil {
+		return x.RxErrorPackets
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxFrames() uint64 {
-	if m != nil {
-		return m.RxFrames
+func (x *PortStatistics) GetRxFrames() uint64 {
+	if x != nil {
+		return x.RxFrames
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxFrames_64() uint64 {
-	if m != nil {
-		return m.RxFrames_64
+func (x *PortStatistics) GetRxFrames_64() uint64 {
+	if x != nil {
+		return x.RxFrames_64
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxFrames_65_127() uint64 {
-	if m != nil {
-		return m.RxFrames_65_127
+func (x *PortStatistics) GetRxFrames_65_127() uint64 {
+	if x != nil {
+		return x.RxFrames_65_127
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxFrames_128_255() uint64 {
-	if m != nil {
-		return m.RxFrames_128_255
+func (x *PortStatistics) GetRxFrames_128_255() uint64 {
+	if x != nil {
+		return x.RxFrames_128_255
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxFrames_256_511() uint64 {
-	if m != nil {
-		return m.RxFrames_256_511
+func (x *PortStatistics) GetRxFrames_256_511() uint64 {
+	if x != nil {
+		return x.RxFrames_256_511
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxFrames_512_1023() uint64 {
-	if m != nil {
-		return m.RxFrames_512_1023
+func (x *PortStatistics) GetRxFrames_512_1023() uint64 {
+	if x != nil {
+		return x.RxFrames_512_1023
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxFrames_1024_1518() uint64 {
-	if m != nil {
-		return m.RxFrames_1024_1518
+func (x *PortStatistics) GetRxFrames_1024_1518() uint64 {
+	if x != nil {
+		return x.RxFrames_1024_1518
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxFrames_1519_2047() uint64 {
-	if m != nil {
-		return m.RxFrames_1519_2047
+func (x *PortStatistics) GetRxFrames_1519_2047() uint64 {
+	if x != nil {
+		return x.RxFrames_1519_2047
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxFrames_2048_4095() uint64 {
-	if m != nil {
-		return m.RxFrames_2048_4095
+func (x *PortStatistics) GetRxFrames_2048_4095() uint64 {
+	if x != nil {
+		return x.RxFrames_2048_4095
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxFrames_4096_9216() uint64 {
-	if m != nil {
-		return m.RxFrames_4096_9216
+func (x *PortStatistics) GetRxFrames_4096_9216() uint64 {
+	if x != nil {
+		return x.RxFrames_4096_9216
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxFrames_9217_16383() uint64 {
-	if m != nil {
-		return m.RxFrames_9217_16383
+func (x *PortStatistics) GetRxFrames_9217_16383() uint64 {
+	if x != nil {
+		return x.RxFrames_9217_16383
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxCrcErrors() uint64 {
-	if m != nil {
-		return m.RxCrcErrors
+func (x *PortStatistics) GetRxCrcErrors() uint64 {
+	if x != nil {
+		return x.RxCrcErrors
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxUndersizePackets() uint64 {
-	if m != nil {
-		return m.RxUndersizePackets
+func (x *PortStatistics) GetRxUndersizePackets() uint64 {
+	if x != nil {
+		return x.RxUndersizePackets
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxOversizePackets() uint64 {
-	if m != nil {
-		return m.RxOversizePackets
+func (x *PortStatistics) GetRxOversizePackets() uint64 {
+	if x != nil {
+		return x.RxOversizePackets
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxGem() uint64 {
-	if m != nil {
-		return m.RxGem
+func (x *PortStatistics) GetRxGem() uint64 {
+	if x != nil {
+		return x.RxGem
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxGemDropped() uint64 {
-	if m != nil {
-		return m.RxGemDropped
+func (x *PortStatistics) GetRxGemDropped() uint64 {
+	if x != nil {
+		return x.RxGemDropped
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxGemIdle() uint64 {
-	if m != nil {
-		return m.RxGemIdle
+func (x *PortStatistics) GetRxGemIdle() uint64 {
+	if x != nil {
+		return x.RxGemIdle
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxGemCorrected() uint64 {
-	if m != nil {
-		return m.RxGemCorrected
+func (x *PortStatistics) GetRxGemCorrected() uint64 {
+	if x != nil {
+		return x.RxGemCorrected
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxGemIllegal() uint64 {
-	if m != nil {
-		return m.RxGemIllegal
+func (x *PortStatistics) GetRxGemIllegal() uint64 {
+	if x != nil {
+		return x.RxGemIllegal
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxFragmentError() uint64 {
-	if m != nil {
-		return m.RxFragmentError
+func (x *PortStatistics) GetRxFragmentError() uint64 {
+	if x != nil {
+		return x.RxFragmentError
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxPacketsDropped() uint64 {
-	if m != nil {
-		return m.RxPacketsDropped
+func (x *PortStatistics) GetRxPacketsDropped() uint64 {
+	if x != nil {
+		return x.RxPacketsDropped
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxCpuOmciPacketsDropped() uint64 {
-	if m != nil {
-		return m.RxCpuOmciPacketsDropped
+func (x *PortStatistics) GetRxCpuOmciPacketsDropped() uint64 {
+	if x != nil {
+		return x.RxCpuOmciPacketsDropped
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxCpu() uint64 {
-	if m != nil {
-		return m.RxCpu
+func (x *PortStatistics) GetRxCpu() uint64 {
+	if x != nil {
+		return x.RxCpu
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxOmci() uint64 {
-	if m != nil {
-		return m.RxOmci
+func (x *PortStatistics) GetRxOmci() uint64 {
+	if x != nil {
+		return x.RxOmci
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxOmciPacketsCrcError() uint64 {
-	if m != nil {
-		return m.RxOmciPacketsCrcError
+func (x *PortStatistics) GetRxOmciPacketsCrcError() uint64 {
+	if x != nil {
+		return x.RxOmciPacketsCrcError
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxFcsErrorPackets() uint64 {
-	if m != nil {
-		return m.RxFcsErrorPackets
+func (x *PortStatistics) GetRxFcsErrorPackets() uint64 {
+	if x != nil {
+		return x.RxFcsErrorPackets
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetTxBytes() uint64 {
-	if m != nil {
-		return m.TxBytes
+func (x *PortStatistics) GetTxBytes() uint64 {
+	if x != nil {
+		return x.TxBytes
 	}
 	return 0
 }
 
-// Deprecated: Do not use.
-func (m *PortStatistics) GetTxPackets() uint64 {
-	if m != nil {
-		return m.TxPackets
+// Deprecated: Marked as deprecated in voltha_protos/common.proto.
+func (x *PortStatistics) GetTxPackets() uint64 {
+	if x != nil {
+		return x.TxPackets
 	}
 	return 0
 }
 
-// Deprecated: Do not use.
-func (m *PortStatistics) GetTxUcastPackets() uint64 {
-	if m != nil {
-		return m.TxUcastPackets
+// Deprecated: Marked as deprecated in voltha_protos/common.proto.
+func (x *PortStatistics) GetTxUcastPackets() uint64 {
+	if x != nil {
+		return x.TxUcastPackets
 	}
 	return 0
 }
 
-// Deprecated: Do not use.
-func (m *PortStatistics) GetTxMcastPackets() uint64 {
-	if m != nil {
-		return m.TxMcastPackets
+// Deprecated: Marked as deprecated in voltha_protos/common.proto.
+func (x *PortStatistics) GetTxMcastPackets() uint64 {
+	if x != nil {
+		return x.TxMcastPackets
 	}
 	return 0
 }
 
-// Deprecated: Do not use.
-func (m *PortStatistics) GetTxBcastPackets() uint64 {
-	if m != nil {
-		return m.TxBcastPackets
+// Deprecated: Marked as deprecated in voltha_protos/common.proto.
+func (x *PortStatistics) GetTxBcastPackets() uint64 {
+	if x != nil {
+		return x.TxBcastPackets
 	}
 	return 0
 }
 
-// Deprecated: Do not use.
-func (m *PortStatistics) GetTxErrorPackets() uint64 {
-	if m != nil {
-		return m.TxErrorPackets
+// Deprecated: Marked as deprecated in voltha_protos/common.proto.
+func (x *PortStatistics) GetTxErrorPackets() uint64 {
+	if x != nil {
+		return x.TxErrorPackets
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetTxFrames() uint64 {
-	if m != nil {
-		return m.TxFrames
+func (x *PortStatistics) GetTxFrames() uint64 {
+	if x != nil {
+		return x.TxFrames
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetTxFrames_64() uint64 {
-	if m != nil {
-		return m.TxFrames_64
+func (x *PortStatistics) GetTxFrames_64() uint64 {
+	if x != nil {
+		return x.TxFrames_64
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetTxFrames_65_127() uint64 {
-	if m != nil {
-		return m.TxFrames_65_127
+func (x *PortStatistics) GetTxFrames_65_127() uint64 {
+	if x != nil {
+		return x.TxFrames_65_127
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetTxFrames_128_255() uint64 {
-	if m != nil {
-		return m.TxFrames_128_255
+func (x *PortStatistics) GetTxFrames_128_255() uint64 {
+	if x != nil {
+		return x.TxFrames_128_255
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetTxFrames_256_511() uint64 {
-	if m != nil {
-		return m.TxFrames_256_511
+func (x *PortStatistics) GetTxFrames_256_511() uint64 {
+	if x != nil {
+		return x.TxFrames_256_511
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetTxFrames_512_1023() uint64 {
-	if m != nil {
-		return m.TxFrames_512_1023
+func (x *PortStatistics) GetTxFrames_512_1023() uint64 {
+	if x != nil {
+		return x.TxFrames_512_1023
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetTxFrames_1024_1518() uint64 {
-	if m != nil {
-		return m.TxFrames_1024_1518
+func (x *PortStatistics) GetTxFrames_1024_1518() uint64 {
+	if x != nil {
+		return x.TxFrames_1024_1518
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetTxFrames_1519_2047() uint64 {
-	if m != nil {
-		return m.TxFrames_1519_2047
+func (x *PortStatistics) GetTxFrames_1519_2047() uint64 {
+	if x != nil {
+		return x.TxFrames_1519_2047
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetTxFrames_2048_4095() uint64 {
-	if m != nil {
-		return m.TxFrames_2048_4095
+func (x *PortStatistics) GetTxFrames_2048_4095() uint64 {
+	if x != nil {
+		return x.TxFrames_2048_4095
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetTxFrames_4096_9216() uint64 {
-	if m != nil {
-		return m.TxFrames_4096_9216
+func (x *PortStatistics) GetTxFrames_4096_9216() uint64 {
+	if x != nil {
+		return x.TxFrames_4096_9216
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetTxFrames_9217_16383() uint64 {
-	if m != nil {
-		return m.TxFrames_9217_16383
+func (x *PortStatistics) GetTxFrames_9217_16383() uint64 {
+	if x != nil {
+		return x.TxFrames_9217_16383
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetTxUndersizePackets() uint64 {
-	if m != nil {
-		return m.TxUndersizePackets
+func (x *PortStatistics) GetTxUndersizePackets() uint64 {
+	if x != nil {
+		return x.TxUndersizePackets
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetTxOversizePackets() uint64 {
-	if m != nil {
-		return m.TxOversizePackets
+func (x *PortStatistics) GetTxOversizePackets() uint64 {
+	if x != nil {
+		return x.TxOversizePackets
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetTxGem() uint64 {
-	if m != nil {
-		return m.TxGem
+func (x *PortStatistics) GetTxGem() uint64 {
+	if x != nil {
+		return x.TxGem
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetTxCpu() uint64 {
-	if m != nil {
-		return m.TxCpu
+func (x *PortStatistics) GetTxCpu() uint64 {
+	if x != nil {
+		return x.TxCpu
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetTxOmci() uint64 {
-	if m != nil {
-		return m.TxOmci
+func (x *PortStatistics) GetTxOmci() uint64 {
+	if x != nil {
+		return x.TxOmci
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetTxDroppedIllegalLength() uint64 {
-	if m != nil {
-		return m.TxDroppedIllegalLength
+func (x *PortStatistics) GetTxDroppedIllegalLength() uint64 {
+	if x != nil {
+		return x.TxDroppedIllegalLength
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetTxDroppedTpidMiss() uint64 {
-	if m != nil {
-		return m.TxDroppedTpidMiss
+func (x *PortStatistics) GetTxDroppedTpidMiss() uint64 {
+	if x != nil {
+		return x.TxDroppedTpidMiss
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetTxDroppedVidMiss() uint64 {
-	if m != nil {
-		return m.TxDroppedVidMiss
+func (x *PortStatistics) GetTxDroppedVidMiss() uint64 {
+	if x != nil {
+		return x.TxDroppedVidMiss
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetTxDroppedTotal() uint64 {
-	if m != nil {
-		return m.TxDroppedTotal
+func (x *PortStatistics) GetTxDroppedTotal() uint64 {
+	if x != nil {
+		return x.TxDroppedTotal
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetBipErrors() uint64 {
-	if m != nil {
-		return m.BipErrors
+func (x *PortStatistics) GetBipErrors() uint64 {
+	if x != nil {
+		return x.BipErrors
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetBipUnits() uint64 {
-	if m != nil {
-		return m.BipUnits
+func (x *PortStatistics) GetBipUnits() uint64 {
+	if x != nil {
+		return x.BipUnits
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetTimestamp() uint32 {
-	if m != nil {
-		return m.Timestamp
+func (x *PortStatistics) GetTimestamp() uint32 {
+	if x != nil {
+		return x.Timestamp
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxUcastFrames() uint64 {
-	if m != nil {
-		return m.RxUcastFrames
+func (x *PortStatistics) GetRxUcastFrames() uint64 {
+	if x != nil {
+		return x.RxUcastFrames
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxMcastFrames() uint64 {
-	if m != nil {
-		return m.RxMcastFrames
+func (x *PortStatistics) GetRxMcastFrames() uint64 {
+	if x != nil {
+		return x.RxMcastFrames
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxBcastFrames() uint64 {
-	if m != nil {
-		return m.RxBcastFrames
+func (x *PortStatistics) GetRxBcastFrames() uint64 {
+	if x != nil {
+		return x.RxBcastFrames
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxErrorFrames() uint64 {
-	if m != nil {
-		return m.RxErrorFrames
+func (x *PortStatistics) GetRxErrorFrames() uint64 {
+	if x != nil {
+		return x.RxErrorFrames
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxRightFrames() uint64 {
-	if m != nil {
-		return m.RxRightFrames
+func (x *PortStatistics) GetRxRightFrames() uint64 {
+	if x != nil {
+		return x.RxRightFrames
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetTxUcastFrames() uint64 {
-	if m != nil {
-		return m.TxUcastFrames
+func (x *PortStatistics) GetTxUcastFrames() uint64 {
+	if x != nil {
+		return x.TxUcastFrames
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetTxMcastFrames() uint64 {
-	if m != nil {
-		return m.TxMcastFrames
+func (x *PortStatistics) GetTxMcastFrames() uint64 {
+	if x != nil {
+		return x.TxMcastFrames
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetTxBcastFrames() uint64 {
-	if m != nil {
-		return m.TxBcastFrames
+func (x *PortStatistics) GetTxBcastFrames() uint64 {
+	if x != nil {
+		return x.TxBcastFrames
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetTxErrorFrames() uint64 {
-	if m != nil {
-		return m.TxErrorFrames
+func (x *PortStatistics) GetTxErrorFrames() uint64 {
+	if x != nil {
+		return x.TxErrorFrames
 	}
 	return 0
 }
 
-func (m *PortStatistics) GetRxDiscardedFrames() uint64 {
-	if m != nil {
-		return m.RxDiscardedFrames
+func (x *PortStatistics) GetRxDiscardedFrames() uint64 {
+	if x != nil {
+		return x.RxDiscardedFrames
 	}
 	return 0
 }
 
+var File_voltha_protos_common_proto protoreflect.FileDescriptor
+
+const file_voltha_protos_common_proto_rawDesc = "" +
+	"\n" +
+	"\x1avoltha_protos/common.proto\x12\x06common\"\x17\n" +
+	"\x03Key\x12\x10\n" +
+	"\x03key\x18\x01 \x01(\tR\x03key\"\x14\n" +
+	"\x02ID\x12\x0e\n" +
+	"\x02id\x18\x01 \x01(\tR\x02id\"'\n" +
+	"\x03IDs\x12 \n" +
+	"\x05items\x18\x01 \x03(\v2\n" +
+	".common.IDR\x05items\"z\n" +
+	"\n" +
+	"Connection\x12\x1a\n" +
+	"\bendpoint\x18\x01 \x01(\tR\bendpoint\x12 \n" +
+	"\vcontextInfo\x18\x02 \x01(\tR\vcontextInfo\x12.\n" +
+	"\x13keep_alive_interval\x18\x03 \x01(\x03R\x11keepAliveInterval\"h\n" +
+	"\n" +
+	"AdminState\"Z\n" +
+	"\x05Types\x12\v\n" +
+	"\aUNKNOWN\x10\x00\x12\x12\n" +
+	"\x0ePREPROVISIONED\x10\x01\x12\v\n" +
+	"\aENABLED\x10\x02\x12\f\n" +
+	"\bDISABLED\x10\x03\x12\x15\n" +
+	"\x11DOWNLOADING_IMAGE\x10\x04\"\x9f\x01\n" +
+	"\n" +
+	"OperStatus\"\x90\x01\n" +
+	"\x05Types\x12\v\n" +
+	"\aUNKNOWN\x10\x00\x12\x0e\n" +
+	"\n" +
+	"DISCOVERED\x10\x01\x12\x0e\n" +
+	"\n" +
+	"ACTIVATING\x10\x02\x12\v\n" +
+	"\aTESTING\x10\x03\x12\n" +
+	"\n" +
+	"\x06ACTIVE\x10\x04\x12\n" +
+	"\n" +
+	"\x06FAILED\x10\x05\x12\x0f\n" +
+	"\vRECONCILING\x10\x06\x12\x16\n" +
+	"\x12RECONCILING_FAILED\x10\a\x12\f\n" +
+	"\bREBOOTED\x10\b\"E\n" +
+	"\rConnectStatus\"4\n" +
+	"\x05Types\x12\v\n" +
+	"\aUNKNOWN\x10\x00\x12\x0f\n" +
+	"\vUNREACHABLE\x10\x01\x12\r\n" +
+	"\tREACHABLE\x10\x02\"\xf2\x01\n" +
+	"\rOperationResp\x12=\n" +
+	"\x04code\x18\x01 \x01(\x0e2).common.OperationResp.OperationReturnCodeR\x04code\x12'\n" +
+	"\x0fadditional_info\x18\x02 \x01(\tR\x0eadditionalInfo\"y\n" +
+	"\x13OperationReturnCode\x12\x15\n" +
+	"\x11OPERATION_SUCCESS\x10\x00\x12\x15\n" +
+	"\x11OPERATION_FAILURE\x10\x01\x12\x19\n" +
+	"\x15OPERATION_UNSUPPORTED\x10\x02\x12\x19\n" +
+	"\x15OPERATION_IN_PROGRESS\x10\x03\"\xdb\x16\n" +
+	"\x0ePortStatistics\x12\x17\n" +
+	"\aintf_id\x18\x01 \x01(\aR\x06intfId\x12\x19\n" +
+	"\brx_bytes\x18\x02 \x01(\x06R\arxBytes\x12!\n" +
+	"\n" +
+	"rx_packets\x18\x03 \x01(\x06B\x02\x18\x01R\trxPackets\x12,\n" +
+	"\x10rx_ucast_packets\x18\x04 \x01(\x06B\x02\x18\x01R\x0erxUcastPackets\x12,\n" +
+	"\x10rx_mcast_packets\x18\x05 \x01(\x06B\x02\x18\x01R\x0erxMcastPackets\x12,\n" +
+	"\x10rx_bcast_packets\x18\x06 \x01(\x06B\x02\x18\x01R\x0erxBcastPackets\x12,\n" +
+	"\x10rx_error_packets\x18\a \x01(\x06B\x02\x18\x01R\x0erxErrorPackets\x12\x1b\n" +
+	"\trx_frames\x18\x11 \x01(\x06R\brxFrames\x12 \n" +
+	"\frx_frames_64\x18\x12 \x01(\x06R\n" +
+	"rxFrames64\x12'\n" +
+	"\x10rx_frames_65_127\x18\x13 \x01(\x06R\rrxFrames65127\x12)\n" +
+	"\x11rx_frames_128_255\x18\x14 \x01(\x06R\x0erxFrames128255\x12)\n" +
+	"\x11rx_frames_256_511\x18\x15 \x01(\x06R\x0erxFrames256511\x12+\n" +
+	"\x12rx_frames_512_1023\x18\x16 \x01(\x06R\x0frxFrames5121023\x12-\n" +
+	"\x13rx_frames_1024_1518\x18\x17 \x01(\x06R\x10rxFrames10241518\x12-\n" +
+	"\x13rx_frames_1519_2047\x18\x18 \x01(\x06R\x10rxFrames15192047\x12-\n" +
+	"\x13rx_frames_2048_4095\x18\x19 \x01(\x06R\x10rxFrames20484095\x12-\n" +
+	"\x13rx_frames_4096_9216\x18\x1a \x01(\x06R\x10rxFrames40969216\x12/\n" +
+	"\x14rx_frames_9217_16383\x18\x1b \x01(\x06R\x11rxFrames921716383\x12\"\n" +
+	"\rrx_crc_errors\x18\x0e \x01(\x06R\vrxCrcErrors\x12.\n" +
+	"\x12rxUndersizePackets\x18' \x01(\x06R\x12rxUndersizePackets\x12,\n" +
+	"\x11rxOversizePackets\x18( \x01(\x06R\x11rxOversizePackets\x12\x14\n" +
+	"\x05rxGem\x18+ \x01(\x06R\x05rxGem\x12\"\n" +
+	"\frxGemDropped\x18, \x01(\x06R\frxGemDropped\x12\x1c\n" +
+	"\trxGemIdle\x18- \x01(\x06R\trxGemIdle\x12&\n" +
+	"\x0erxGemCorrected\x18. \x01(\x06R\x0erxGemCorrected\x12\"\n" +
+	"\frxGemIllegal\x18/ \x01(\x06R\frxGemIllegal\x12(\n" +
+	"\x0frxFragmentError\x180 \x01(\x06R\x0frxFragmentError\x12*\n" +
+	"\x10rxPacketsDropped\x181 \x01(\x06R\x10rxPacketsDropped\x128\n" +
+	"\x17rxCpuOmciPacketsDropped\x182 \x01(\x06R\x17rxCpuOmciPacketsDropped\x12\x14\n" +
+	"\x05rxCpu\x183 \x01(\x06R\x05rxCpu\x12\x16\n" +
+	"\x06rxOmci\x184 \x01(\x06R\x06rxOmci\x124\n" +
+	"\x15rxOmciPacketsCrcError\x185 \x01(\x06R\x15rxOmciPacketsCrcError\x12,\n" +
+	"\x11rxFcsErrorPackets\x18> \x01(\x06R\x11rxFcsErrorPackets\x12\x19\n" +
+	"\btx_bytes\x18\b \x01(\x06R\atxBytes\x12!\n" +
+	"\n" +
+	"tx_packets\x18\t \x01(\x06B\x02\x18\x01R\ttxPackets\x12,\n" +
+	"\x10tx_ucast_packets\x18\n" +
+	" \x01(\x06B\x02\x18\x01R\x0etxUcastPackets\x12,\n" +
+	"\x10tx_mcast_packets\x18\v \x01(\x06B\x02\x18\x01R\x0etxMcastPackets\x12,\n" +
+	"\x10tx_bcast_packets\x18\f \x01(\x06B\x02\x18\x01R\x0etxBcastPackets\x12,\n" +
+	"\x10tx_error_packets\x18\r \x01(\x06B\x02\x18\x01R\x0etxErrorPackets\x12\x1b\n" +
+	"\ttx_frames\x18\x1c \x01(\x06R\btxFrames\x12 \n" +
+	"\ftx_frames_64\x18\x1d \x01(\x06R\n" +
+	"txFrames64\x12'\n" +
+	"\x10tx_frames_65_127\x18\x1e \x01(\x06R\rtxFrames65127\x12)\n" +
+	"\x11tx_frames_128_255\x18\x1f \x01(\x06R\x0etxFrames128255\x12)\n" +
+	"\x11tx_frames_256_511\x18  \x01(\x06R\x0etxFrames256511\x12+\n" +
+	"\x12tx_frames_512_1023\x18! \x01(\x06R\x0ftxFrames5121023\x12-\n" +
+	"\x13tx_frames_1024_1518\x18\" \x01(\x06R\x10txFrames10241518\x12-\n" +
+	"\x13tx_frames_1519_2047\x18# \x01(\x06R\x10txFrames15192047\x12-\n" +
+	"\x13tx_frames_2048_4095\x18$ \x01(\x06R\x10txFrames20484095\x12-\n" +
+	"\x13tx_frames_4096_9216\x18% \x01(\x06R\x10txFrames40969216\x12/\n" +
+	"\x14tx_frames_9217_16383\x18& \x01(\x06R\x11txFrames921716383\x12.\n" +
+	"\x12txUndersizePackets\x18) \x01(\x06R\x12txUndersizePackets\x12,\n" +
+	"\x11txOversizePackets\x18* \x01(\x06R\x11txOversizePackets\x12\x14\n" +
+	"\x05txGem\x186 \x01(\x06R\x05txGem\x12\x14\n" +
+	"\x05txCpu\x187 \x01(\x06R\x05txCpu\x12\x16\n" +
+	"\x06txOmci\x188 \x01(\x06R\x06txOmci\x126\n" +
+	"\x16txDroppedIllegalLength\x189 \x01(\x06R\x16txDroppedIllegalLength\x12,\n" +
+	"\x11txDroppedTpidMiss\x18: \x01(\x06R\x11txDroppedTpidMiss\x12*\n" +
+	"\x10txDroppedVidMiss\x18; \x01(\x06R\x10txDroppedVidMiss\x12&\n" +
+	"\x0etxDroppedTotal\x18< \x01(\x06R\x0etxDroppedTotal\x12\x1d\n" +
+	"\n" +
+	"bip_errors\x18\x0f \x01(\x06R\tbipErrors\x12\x1b\n" +
+	"\tbip_units\x18= \x01(\x06R\bbipUnits\x12\x1c\n" +
+	"\ttimestamp\x18\x10 \x01(\aR\ttimestamp\x12&\n" +
+	"\x0frx_ucast_frames\x18? \x01(\x06R\rrxUcastFrames\x12&\n" +
+	"\x0frx_mcast_frames\x18@ \x01(\x06R\rrxMcastFrames\x12&\n" +
+	"\x0frx_bcast_frames\x18A \x01(\x06R\rrxBcastFrames\x12&\n" +
+	"\x0frx_error_frames\x18B \x01(\x06R\rrxErrorFrames\x12&\n" +
+	"\x0frx_right_frames\x18C \x01(\x06R\rrxRightFrames\x12&\n" +
+	"\x0ftx_ucast_frames\x18D \x01(\x06R\rtxUcastFrames\x12&\n" +
+	"\x0ftx_mcast_frames\x18E \x01(\x06R\rtxMcastFrames\x12&\n" +
+	"\x0ftx_bcast_frames\x18F \x01(\x06R\rtxBcastFrames\x12&\n" +
+	"\x0ftx_error_frames\x18G \x01(\x06R\rtxErrorFrames\x12.\n" +
+	"\x13rx_discarded_frames\x18H \x01(\x06R\x11rxDiscardedFrames*\x1c\n" +
+	"\fTestModeKeys\x12\f\n" +
+	"\bapi_test\x10\x00BE\n" +
+	"\x13org.opencord.volthaZ.github.com/opencord/voltha-protos/v5/go/commonb\x06proto3"
+
+var (
+	file_voltha_protos_common_proto_rawDescOnce sync.Once
+	file_voltha_protos_common_proto_rawDescData []byte
+)
+
-func init() {
-	proto.RegisterEnum("common.TestModeKeys", TestModeKeys_name, TestModeKeys_value)
-	proto.RegisterEnum("common.AdminState_Types", AdminState_Types_name, AdminState_Types_value)
-	proto.RegisterEnum("common.OperStatus_Types", OperStatus_Types_name, OperStatus_Types_value)
-	proto.RegisterEnum("common.ConnectStatus_Types", ConnectStatus_Types_name, ConnectStatus_Types_value)
-	proto.RegisterEnum("common.OperationResp_OperationReturnCode", OperationResp_OperationReturnCode_name, OperationResp_OperationReturnCode_value)
-	proto.RegisterType((*Key)(nil), "common.Key")
-	proto.RegisterType((*ID)(nil), "common.ID")
-	proto.RegisterType((*IDs)(nil), "common.IDs")
-	proto.RegisterType((*Connection)(nil), "common.Connection")
-	proto.RegisterType((*AdminState)(nil), "common.AdminState")
-	proto.RegisterType((*OperStatus)(nil), "common.OperStatus")
-	proto.RegisterType((*ConnectStatus)(nil), "common.ConnectStatus")
-	proto.RegisterType((*OperationResp)(nil), "common.OperationResp")
-	proto.RegisterType((*PortStatistics)(nil), "common.PortStatistics")
+func file_voltha_protos_common_proto_rawDescGZIP() []byte {
+	file_voltha_protos_common_proto_rawDescOnce.Do(func() {
+		file_voltha_protos_common_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_voltha_protos_common_proto_rawDesc), len(file_voltha_protos_common_proto_rawDesc)))
+	})
+	return file_voltha_protos_common_proto_rawDescData
 }
 
-func init() { proto.RegisterFile("voltha_protos/common.proto", fileDescriptor_c2e3fd231961e826) }
+var file_voltha_protos_common_proto_enumTypes = make([]protoimpl.EnumInfo, 5)
+var file_voltha_protos_common_proto_msgTypes = make([]protoimpl.MessageInfo, 9)
+var file_voltha_protos_common_proto_goTypes = []any{
+	(TestModeKeys)(0),                      // 0: common.TestModeKeys
+	(AdminState_Types)(0),                  // 1: common.AdminState.Types
+	(OperStatus_Types)(0),                  // 2: common.OperStatus.Types
+	(ConnectStatus_Types)(0),               // 3: common.ConnectStatus.Types
+	(OperationResp_OperationReturnCode)(0), // 4: common.OperationResp.OperationReturnCode
+	(*Key)(nil),                            // 5: common.Key
+	(*ID)(nil),                             // 6: common.ID
+	(*IDs)(nil),                            // 7: common.IDs
+	(*Connection)(nil),                     // 8: common.Connection
+	(*AdminState)(nil),                     // 9: common.AdminState
+	(*OperStatus)(nil),                     // 10: common.OperStatus
+	(*ConnectStatus)(nil),                  // 11: common.ConnectStatus
+	(*OperationResp)(nil),                  // 12: common.OperationResp
+	(*PortStatistics)(nil),                 // 13: common.PortStatistics
+}
+var file_voltha_protos_common_proto_depIdxs = []int32{
+	6, // 0: common.IDs.items:type_name -> common.ID
+	4, // 1: common.OperationResp.code:type_name -> common.OperationResp.OperationReturnCode
+	2, // [2:2] is the sub-list for method output_type
+	2, // [2:2] is the sub-list for method input_type
+	2, // [2:2] is the sub-list for extension type_name
+	2, // [2:2] is the sub-list for extension extendee
+	0, // [0:2] is the sub-list for field type_name
+}
 
-var fileDescriptor_c2e3fd231961e826 = []byte{
-	// 1578 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x97, 0xfd, 0x52, 0xdb, 0xca,
-	0x15, 0xc0, 0x63, 0x1c, 0x0c, 0x1c, 0x82, 0x31, 0x4b, 0x42, 0x36, 0x1f, 0xb7, 0xe5, 0xba, 0x6d,
-	0x42, 0x72, 0x13, 0x83, 0x84, 0x65, 0xa0, 0xed, 0x6d, 0xeb, 0x0f, 0x85, 0xab, 0x49, 0xb0, 0x19,
-	0xd9, 0xe6, 0xce, 0xdc, 0x7f, 0x34, 0xc6, 0xda, 0x80, 0x26, 0xb6, 0xa4, 0x59, 0x2d, 0x8c, 0xb9,
-	0x4f, 0xd1, 0x37, 0xe8, 0x83, 0xf5, 0x2d, 0xfa, 0x04, 0x9d, 0xdd, 0xd5, 0x5a, 0x92, 0xe5, 0xfc,
-	0xe7, 0x73, 0xce, 0xcf, 0xab, 0xfd, 0x38, 0xfb, 0xb3, 0x05, 0x2f, 0xef, 0x83, 0x09, 0xbb, 0x1d,
-	0x39, 0x21, 0x0d, 0x58, 0x10, 0x1d, 0x8e, 0x83, 0xe9, 0x34, 0xf0, 0x6b, 0x22, 0x42, 0x25, 0x19,
-	0x55, 0x9f, 0x43, 0xf1, 0x33, 0x79, 0x40, 0x15, 0x28, 0x7e, 0x23, 0x0f, 0xb8, 0xb0, 0x5f, 0x38,
-	0xd8, 0xb0, 0xf9, 0xc7, 0xea, 0x53, 0x58, 0xb1, 0x3a, 0xa8, 0x0c, 0x2b, 0x9e, 0x1b, 0xa7, 0x57,
-	0x3c, 0xb7, 0xfa, 0x16, 0x8a, 0x56, 0x27, 0x42, 0xfb, 0xb0, 0xea, 0x31, 0x32, 0x8d, 0x70, 0x61,
-	0xbf, 0x78, 0xb0, 0xa9, 0x43, 0x2d, 0x1e, 0xdb, 0xea, 0xd8, 0xb2, 0x50, 0xfd, 0x1d, 0xa0, 0x1d,
-	0xf8, 0x3e, 0x19, 0x33, 0x2f, 0xf0, 0xd1, 0x4b, 0x58, 0x27, 0xbe, 0x1b, 0x06, 0x9e, 0xcf, 0xe2,
-	0xc1, 0xe6, 0x31, 0xda, 0x87, 0xcd, 0x71, 0xe0, 0x33, 0x32, 0x63, 0x96, 0xff, 0x35, 0xc0, 0x2b,
-	0xa2, 0x9c, 0x4e, 0xa1, 0x1a, 0xec, 0x7e, 0x23, 0x24, 0x74, 0x46, 0x13, 0xef, 0x9e, 0x38, 0x9e,
-	0xcf, 0x08, 0xbd, 0x1f, 0x4d, 0x70, 0x71, 0xbf, 0x70, 0x50, 0xb4, 0x77, 0x78, 0xa9, 0xc9, 0x2b,
-	0x56, 0x5c, 0xa8, 0xde, 0x02, 0x34, 0xdd, 0xa9, 0xe7, 0xf7, 0xd9, 0x88, 0x91, 0xea, 0x6f, 0xb0,
-	0x3a, 0x78, 0x08, 0x49, 0x84, 0x36, 0x61, 0x6d, 0xd8, 0xfd, 0xdc, 0xed, 0xfd, 0xda, 0xad, 0x3c,
-	0x42, 0x08, 0xca, 0x97, 0xb6, 0x79, 0x69, 0xf7, 0xae, 0xac, 0xbe, 0xd5, 0xeb, 0x9a, 0x9d, 0x4a,
-	0x81, 0x03, 0x66, 0xb7, 0xd9, 0xfa, 0x62, 0x76, 0x2a, 0x2b, 0xe8, 0x09, 0xac, 0x77, 0xac, 0xbe,
-	0x8c, 0x8a, 0xe8, 0x19, 0xec, 0x74, 0x7a, 0xbf, 0x76, 0xbf, 0xf4, 0x9a, 0x1d, 0xab, 0x7b, 0xee,
-	0x58, 0x17, 0xcd, 0x73, 0xb3, 0xf2, 0xb8, 0xfa, 0x9f, 0x02, 0x40, 0x2f, 0x24, 0x94, 0x3f, 0xe9,
-	0x2e, 0xaa, 0xfe, 0xbb, 0xb0, 0xf4, 0x59, 0x65, 0x80, 0x8e, 0xd5, 0x6f, 0xf7, 0xae, 0x4c, 0x5b,
-	0x3c, 0xa7, 0x0c, 0xd0, 0x6c, 0x0f, 0xac, 0xab, 0xe6, 0xc0, 0xea, 0x9e, 0x57, 0x56, 0x38, 0x3c,
-	0x30, 0xfb, 0x22, 0x28, 0x22, 0x80, 0x92, 0x28, 0x9a, 0x95, 0xc7, 0xfc, 0xf3, 0xa7, 0xa6, 0xc5,
-	0x67, 0xb0, 0x8a, 0xb6, 0x61, 0xd3, 0x36, 0xdb, 0xbd, 0x6e, 0xdb, 0xfa, 0xc2, 0xc1, 0x12, 0xda,
-	0x03, 0x94, 0x4a, 0x38, 0x31, 0xb8, 0xc6, 0x27, 0x6e, 0x9b, 0xad, 0x5e, 0x6f, 0x60, 0x76, 0x2a,
-	0xeb, 0x55, 0x13, 0xb6, 0xe2, 0x73, 0x88, 0xe7, 0x58, 0x5f, 0x3a, 0xc5, 0x6d, 0xd8, 0x1c, 0x76,
-	0x6d, 0xb3, 0xd9, 0xfe, 0x85, 0xaf, 0xb8, 0x52, 0x40, 0x5b, 0xb0, 0x91, 0x84, 0x2b, 0xd5, 0xff,
-	0x15, 0x60, 0x8b, 0x2f, 0x74, 0xc4, 0x8f, 0xd3, 0x26, 0x51, 0x88, 0x7e, 0x86, 0xc7, 0xe3, 0xc0,
-	0x25, 0xe2, 0x38, 0xcb, 0xfa, 0x3b, 0xd5, 0x01, 0x19, 0x28, 0x1d, 0xb1, 0x3b, 0xea, 0xb7, 0x03,
-	0x97, 0xd8, 0xe2, 0x6b, 0xe8, 0x2d, 0x6c, 0x8f, 0x5c, 0xd7, 0xe3, 0xb5, 0xd1, 0xc4, 0xf1, 0x92,
-	0x93, 0x2f, 0x27, 0x69, 0x7e, 0xf8, 0xd5, 0x07, 0xd8, 0x5d, 0x32, 0x0a, 0x3f, 0x90, 0xde, 0xa5,
-	0x69, 0x37, 0x07, 0x56, 0xaf, 0xeb, 0xf4, 0x87, 0xed, 0xb6, 0xd9, 0xef, 0x57, 0x1e, 0x65, 0xd3,
-	0x7c, 0x4b, 0x86, 0x36, 0x5f, 0xcd, 0x0b, 0x78, 0x96, 0xa4, 0x87, 0xdd, 0xfe, 0xf0, 0xf2, 0xb2,
-	0x67, 0x0f, 0xc4, 0x39, 0x67, 0x4a, 0x56, 0xd7, 0xb9, 0xb4, 0x7b, 0xe7, 0x36, 0x1f, 0xac, 0x58,
-	0xfd, 0xef, 0x1e, 0x94, 0x2f, 0x03, 0x2a, 0x76, 0xce, 0x8b, 0x98, 0x37, 0x8e, 0xd0, 0x73, 0x58,
-	0xf3, 0x7c, 0xf6, 0xd5, 0x89, 0x2f, 0xc5, 0x9a, 0x5d, 0xe2, 0xa1, 0xe5, 0xa2, 0x17, 0xb0, 0x4e,
-	0x67, 0xce, 0xf5, 0x03, 0x23, 0x91, 0x58, 0x48, 0xc9, 0x5e, 0xa3, 0xb3, 0x16, 0x0f, 0xd1, 0x8f,
-	0x00, 0x74, 0xe6, 0x84, 0xa3, 0xf1, 0x37, 0xc2, 0x22, 0xd1, 0xb5, 0xa5, 0xd6, 0x0a, 0x2e, 0xd8,
-	0x1b, 0x74, 0x76, 0x29, 0x93, 0xe8, 0x03, 0x54, 0xe8, 0xcc, 0xb9, 0x1b, 0x8f, 0x22, 0x36, 0x07,
-	0x1f, 0xcf, 0xc1, 0x32, 0x9d, 0x0d, 0x79, 0x29, 0x4b, 0x4f, 0x33, 0xf4, 0x6a, 0x9a, 0xbe, 0xc8,
-	0xd3, 0xd7, 0x19, 0xba, 0x94, 0xa6, 0x5b, 0x79, 0x9a, 0x50, 0x1a, 0xd0, 0x39, 0xbd, 0x96, 0xa6,
-	0x4d, 0x5e, 0x52, 0xf4, 0x2b, 0xd8, 0xa0, 0x33, 0xe7, 0x2b, 0x1d, 0x4d, 0x49, 0x84, 0x77, 0xc4,
-	0xb2, 0xd7, 0xe9, 0xec, 0x93, 0x88, 0xd1, 0x3e, 0x3c, 0x99, 0x17, 0x9d, 0x46, 0x1d, 0x23, 0x51,
-	0x07, 0x55, 0x6f, 0xd4, 0xd1, 0x5b, 0xf1, 0x30, 0x45, 0x18, 0x8e, 0xa6, 0x9f, 0xe0, 0x5d, 0x41,
-	0x6d, 0xcd, 0x29, 0x43, 0xd3, 0x4f, 0xd0, 0x3b, 0xd8, 0x49, 0x40, 0x4d, 0x3f, 0x75, 0x74, 0xc3,
-	0xc0, 0x4f, 0x05, 0x59, 0x56, 0xa4, 0xa6, 0x9f, 0xea, 0x86, 0x91, 0x45, 0x75, 0xa3, 0xe1, 0x18,
-	0x9a, 0x86, 0x9f, 0x65, 0x51, 0xdd, 0x68, 0x18, 0x9a, 0x86, 0x7e, 0x02, 0x94, 0xa0, 0x86, 0xa6,
-	0x3b, 0xda, 0x91, 0x7e, 0x8c, 0xf7, 0x04, 0xbb, 0xad, 0x58, 0x43, 0xd3, 0x79, 0x1a, 0x7d, 0x84,
-	0xdd, 0xd4, 0x14, 0x8e, 0xf4, 0xba, 0xa3, 0x19, 0xda, 0x29, 0x7e, 0x2e, 0xe8, 0xca, 0x7c, 0x12,
-	0x47, 0x7a, 0x9d, 0xe7, 0x17, 0x70, 0x43, 0x3b, 0x73, 0xf4, 0xa3, 0xfa, 0x09, 0xc6, 0x0b, 0xb8,
-	0xa1, 0x9d, 0xf1, 0x7c, 0x16, 0xd7, 0x8f, 0xea, 0xa7, 0x4e, 0xfd, 0xe8, 0xcc, 0xc0, 0x2f, 0xb2,
-	0x38, 0x2f, 0xf0, 0x7c, 0x16, 0xaf, 0x1f, 0x9d, 0x35, 0x9c, 0x33, 0x5d, 0x6b, 0xe0, 0x97, 0x59,
-	0x9c, 0x17, 0x78, 0x1e, 0x1d, 0xc2, 0xd3, 0x04, 0x3f, 0xd3, 0xb5, 0x13, 0x47, 0x6b, 0x1c, 0x9f,
-	0x1e, 0xe3, 0x57, 0x82, 0xdf, 0x51, 0x3c, 0xaf, 0x88, 0x02, 0xaa, 0xc2, 0x16, 0x9d, 0x39, 0x63,
-	0x3a, 0x96, 0x9d, 0x10, 0xe1, 0xb2, 0x20, 0x37, 0xe9, 0xac, 0x4d, 0xc7, 0xa2, 0x03, 0x22, 0x54,
-	0xe3, 0xbb, 0x37, 0xf4, 0x5d, 0x42, 0x23, 0xef, 0x77, 0x12, 0x77, 0x04, 0x7e, 0x2b, 0xc0, 0x25,
-	0x15, 0xf4, 0x81, 0x1f, 0x4c, 0xef, 0x3e, 0x8b, 0x1f, 0xa8, 0x19, 0x2c, 0x14, 0xd0, 0x53, 0x58,
-	0xa5, 0xb3, 0x73, 0x32, 0xc5, 0x3f, 0x09, 0x42, 0x06, 0xa8, 0xca, 0x5b, 0xea, 0x9c, 0x4c, 0x3b,
-	0x34, 0x08, 0x43, 0xe2, 0xe2, 0x0f, 0xa2, 0x98, 0xc9, 0xa1, 0xd7, 0xbc, 0x27, 0xcf, 0xc9, 0xd4,
-	0x72, 0x27, 0x04, 0x7f, 0x14, 0x40, 0x92, 0x40, 0x6f, 0xa0, 0x2c, 0x82, 0x76, 0x40, 0x29, 0x19,
-	0x33, 0xe2, 0xe2, 0x9a, 0xea, 0x8d, 0x74, 0x76, 0xfe, 0x24, 0x6b, 0x32, 0x21, 0x37, 0xa3, 0x09,
-	0x3e, 0x4c, 0x3d, 0x29, 0xce, 0xa1, 0x03, 0x90, 0x5d, 0x72, 0x33, 0x25, 0x3e, 0x13, 0xbb, 0x82,
-	0x8f, 0x52, 0xcd, 0x93, 0xa4, 0xd1, 0x7b, 0xde, 0xe8, 0xf1, 0xd2, 0xd4, 0xdc, 0x35, 0x75, 0x58,
-	0xd9, 0x3c, 0x3a, 0x85, 0xe7, 0x74, 0xd6, 0x0e, 0xef, 0x7a, 0xd3, 0xb1, 0xb7, 0xf0, 0x15, 0x5d,
-	0x7c, 0xe5, 0x7b, 0x65, 0xb9, 0x67, 0xed, 0xf0, 0x0e, 0x1f, 0xab, 0x3d, 0x6b, 0x87, 0x77, 0x68,
-	0x0f, 0x4a, 0x74, 0xc6, 0x69, 0x5c, 0x17, 0xe9, 0x38, 0x42, 0x75, 0x78, 0x26, 0x3f, 0xc5, 0xa3,
-	0xa8, 0x93, 0xc5, 0x86, 0xc0, 0x96, 0x17, 0xe5, 0x29, 0x7e, 0x1a, 0x47, 0x69, 0x0d, 0xe0, 0x7f,
-	0xcc, 0xfb, 0x28, 0x5b, 0xe0, 0x56, 0x64, 0xca, 0x8a, 0xeb, 0xd2, 0x8a, 0x2c, 0xb1, 0x22, 0x4b,
-	0xac, 0xb8, 0x91, 0x58, 0x91, 0xa5, 0xad, 0xc8, 0x16, 0xad, 0x08, 0x89, 0x8b, 0x58, 0xce, 0x8a,
-	0x6c, 0xd1, 0x8a, 0x9b, 0x69, 0xfa, 0x22, 0x4f, 0x67, 0xad, 0xf8, 0x24, 0x4d, 0xb7, 0xf2, 0x74,
-	0xd6, 0x8a, 0x5b, 0x69, 0x7a, 0xd1, 0x8a, 0x6c, 0x6e, 0xc5, 0xd7, 0xd2, 0x8a, 0x2c, 0x65, 0x45,
-	0x96, 0xb6, 0xe2, 0x0f, 0xd2, 0x8a, 0x2c, 0x63, 0x45, 0xb6, 0x68, 0xc5, 0x3f, 0x48, 0x2b, 0xb2,
-	0x45, 0x2b, 0xb2, 0x9c, 0x15, 0xff, 0x28, 0xdb, 0x99, 0xe5, 0xac, 0xc8, 0x72, 0x56, 0xdc, 0xcf,
-	0xa2, 0x89, 0x15, 0x59, 0xde, 0x8a, 0x3f, 0xca, 0xc6, 0x66, 0x79, 0x2b, 0xb2, 0x25, 0x56, 0xac,
-	0xca, 0xde, 0x66, 0x4b, 0xac, 0xc8, 0x96, 0x58, 0xf1, 0x4f, 0x0b, 0x78, 0xca, 0x8a, 0x6c, 0x89,
-	0x15, 0xff, 0x9c, 0xc5, 0xd3, 0x56, 0x64, 0x4b, 0xac, 0xf8, 0x97, 0x2c, 0x9e, 0xb6, 0x22, 0x5b,
-	0x66, 0xc5, 0x37, 0xb2, 0x9b, 0x59, 0xce, 0x8a, 0x35, 0xbe, 0x33, 0x39, 0xe3, 0xbd, 0x93, 0xc6,
-	0x63, 0x4b, 0x8d, 0xc7, 0x72, 0xc6, 0x7b, 0xaf, 0x46, 0x5f, 0x62, 0x3c, 0x26, 0x8c, 0xd7, 0x90,
-	0xb7, 0x57, 0x04, 0x32, 0xcb, 0xef, 0xf4, 0x89, 0xca, 0xc6, 0x77, 0x9a, 0xc9, 0x3b, 0x7d, 0x2a,
-	0xef, 0xb4, 0x8c, 0x50, 0x03, 0xf6, 0xd8, 0x2c, 0xd6, 0x41, 0x6c, 0xa9, 0x2f, 0xc4, 0xbf, 0x61,
-	0xb7, 0xf8, 0x4c, 0x70, 0xdf, 0xa9, 0xca, 0x99, 0xc6, 0x95, 0x41, 0xe8, 0xb9, 0x17, 0x5e, 0x14,
-	0xe1, 0xbf, 0xaa, 0x99, 0x2e, 0x14, 0xb8, 0xcd, 0xe6, 0xc9, 0xab, 0x18, 0xfe, 0x9b, 0xda, 0xe4,
-	0x6c, 0x9e, 0xfb, 0x36, 0x19, 0x20, 0x60, 0xa3, 0x09, 0xfe, 0xbb, 0xea, 0xba, 0x74, 0x16, 0xfd,
-	0x00, 0x70, 0xed, 0x85, 0xea, 0xe7, 0x66, 0x5b, 0x6a, 0xfb, 0xda, 0x0b, 0xe3, 0x1f, 0x9b, 0x57,
-	0xc0, 0x03, 0xe7, 0xce, 0xf7, 0x58, 0x84, 0x7f, 0x96, 0x57, 0xea, 0xda, 0x0b, 0x87, 0x3c, 0xe6,
-	0xc6, 0x67, 0xde, 0x94, 0x44, 0x6c, 0x34, 0x0d, 0x71, 0x45, 0xfc, 0x2d, 0x4b, 0x12, 0xe8, 0x0d,
-	0xb7, 0x74, 0x6c, 0x91, 0xf8, 0x4e, 0xfe, 0x53, 0xfd, 0xc7, 0x10, 0x02, 0x89, 0x2f, 0xa6, 0xe4,
-	0xa6, 0x69, 0xee, 0x5f, 0x8a, 0xbb, 0xc8, 0x71, 0xd7, 0x69, 0xae, 0xa9, 0xb8, 0x56, 0x8e, 0x93,
-	0xce, 0x88, 0xb9, 0x96, 0xe2, 0xc4, 0xaa, 0x32, 0x1c, 0xf5, 0x6e, 0x6e, 0xe7, 0xe3, 0xb5, 0x15,
-	0x67, 0xf3, 0x6c, 0xc2, 0xb1, 0x85, 0x75, 0x74, 0x94, 0x15, 0x16, 0xd6, 0xc1, 0x16, 0xd6, 0x61,
-	0x2a, 0xee, 0x22, 0xc7, 0x65, 0xd6, 0xf1, 0x49, 0x71, 0xad, 0x1c, 0x97, 0x59, 0xc7, 0xb9, 0xe2,
-	0xd2, 0xeb, 0xa8, 0x89, 0xff, 0x24, 0xae, 0x17, 0x8d, 0x47, 0xd4, 0x25, 0xae, 0x62, 0x7f, 0x51,
-	0xbf, 0x0d, 0x1d, 0x55, 0x91, 0xfc, 0xfb, 0xd7, 0xf0, 0x64, 0x40, 0x22, 0x76, 0x11, 0xb8, 0xe4,
-	0x33, 0x79, 0x88, 0xf8, 0x7b, 0xcb, 0x28, 0xf4, 0x1c, 0x46, 0x22, 0x56, 0x79, 0xd4, 0x32, 0x61,
-	0x37, 0xa0, 0x37, 0xb5, 0x20, 0x24, 0xfe, 0x38, 0xa0, 0x6e, 0x4d, 0xbe, 0xca, 0xfe, 0x56, 0xbb,
-	0xf1, 0xd8, 0xed, 0xdd, 0x35, 0x7f, 0xdb, 0x38, 0x54, 0xb5, 0x43, 0x59, 0xfb, 0x18, 0xbf, 0xe6,
-	0xde, 0x1b, 0x87, 0x37, 0x41, 0xfc, 0xb2, 0x7b, 0x5d, 0x12, 0xc9, 0xe3, 0xff, 0x07, 0x00, 0x00,
-	0xff, 0xff, 0x70, 0x09, 0x2f, 0xa5, 0x0b, 0x0f, 0x00, 0x00,
+func init() { file_voltha_protos_common_proto_init() }
+func file_voltha_protos_common_proto_init() {
+	if File_voltha_protos_common_proto != nil {
+		return
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: unsafe.Slice(unsafe.StringData(file_voltha_protos_common_proto_rawDesc), len(file_voltha_protos_common_proto_rawDesc)),
+			NumEnums:      5,
+			NumMessages:   9,
+			NumExtensions: 0,
+			NumServices:   0,
+		},
+		GoTypes:           file_voltha_protos_common_proto_goTypes,
+		DependencyIndexes: file_voltha_protos_common_proto_depIdxs,
+		EnumInfos:         file_voltha_protos_common_proto_enumTypes,
+		MessageInfos:      file_voltha_protos_common_proto_msgTypes,
+	}.Build()
+	File_voltha_protos_common_proto = out.File
+	file_voltha_protos_common_proto_goTypes = nil
+	file_voltha_protos_common_proto_depIdxs = nil
 }
