diff --git a/VERSION b/VERSION
index 8ce222e..bb0915f 100755
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-5.4.5
+5.4.6
diff --git a/go/common/common.pb.go b/go/common/common.pb.go
index 47987d1..f7472d5 100644
--- a/go/common/common.pb.go
+++ b/go/common/common.pb.go
@@ -80,7 +80,7 @@
 }
 
 func (AdminState_Types) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_c2e3fd231961e826, []int{3, 0}
+	return fileDescriptor_c2e3fd231961e826, []int{4, 0}
 }
 
 // Operational Status
@@ -136,7 +136,7 @@
 }
 
 func (OperStatus_Types) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_c2e3fd231961e826, []int{4, 0}
+	return fileDescriptor_c2e3fd231961e826, []int{5, 0}
 }
 
 // Connectivity Status
@@ -168,7 +168,7 @@
 }
 
 func (ConnectStatus_Types) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_c2e3fd231961e826, []int{5, 0}
+	return fileDescriptor_c2e3fd231961e826, []int{6, 0}
 }
 
 type OperationResp_OperationReturnCode int32
@@ -199,7 +199,47 @@
 }
 
 func (OperationResp_OperationReturnCode) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_c2e3fd231961e826, []int{6, 0}
+	return fileDescriptor_c2e3fd231961e826, []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:"-"`
+}
+
+func (m *Key) Reset()         { *m = Key{} }
+func (m *Key) String() string { return proto.CompactTextString(m) }
+func (*Key) ProtoMessage()    {}
+func (*Key) Descriptor() ([]byte, []int) {
+	return fileDescriptor_c2e3fd231961e826, []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
+	}
+	return ""
 }
 
 // Convey a resource identifier
@@ -214,7 +254,7 @@
 func (m *ID) String() string { return proto.CompactTextString(m) }
 func (*ID) ProtoMessage()    {}
 func (*ID) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c2e3fd231961e826, []int{0}
+	return fileDescriptor_c2e3fd231961e826, []int{1}
 }
 
 func (m *ID) XXX_Unmarshal(b []byte) error {
@@ -254,7 +294,7 @@
 func (m *IDs) String() string { return proto.CompactTextString(m) }
 func (*IDs) ProtoMessage()    {}
 func (*IDs) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c2e3fd231961e826, []int{1}
+	return fileDescriptor_c2e3fd231961e826, []int{2}
 }
 
 func (m *IDs) XXX_Unmarshal(b []byte) error {
@@ -299,7 +339,7 @@
 func (m *Connection) String() string { return proto.CompactTextString(m) }
 func (*Connection) ProtoMessage()    {}
 func (*Connection) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c2e3fd231961e826, []int{2}
+	return fileDescriptor_c2e3fd231961e826, []int{3}
 }
 
 func (m *Connection) XXX_Unmarshal(b []byte) error {
@@ -351,7 +391,7 @@
 func (m *AdminState) String() string { return proto.CompactTextString(m) }
 func (*AdminState) ProtoMessage()    {}
 func (*AdminState) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c2e3fd231961e826, []int{3}
+	return fileDescriptor_c2e3fd231961e826, []int{4}
 }
 
 func (m *AdminState) XXX_Unmarshal(b []byte) error {
@@ -382,7 +422,7 @@
 func (m *OperStatus) String() string { return proto.CompactTextString(m) }
 func (*OperStatus) ProtoMessage()    {}
 func (*OperStatus) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c2e3fd231961e826, []int{4}
+	return fileDescriptor_c2e3fd231961e826, []int{5}
 }
 
 func (m *OperStatus) XXX_Unmarshal(b []byte) error {
@@ -413,7 +453,7 @@
 func (m *ConnectStatus) String() string { return proto.CompactTextString(m) }
 func (*ConnectStatus) ProtoMessage()    {}
 func (*ConnectStatus) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c2e3fd231961e826, []int{5}
+	return fileDescriptor_c2e3fd231961e826, []int{6}
 }
 
 func (m *ConnectStatus) XXX_Unmarshal(b []byte) error {
@@ -448,7 +488,7 @@
 func (m *OperationResp) String() string { return proto.CompactTextString(m) }
 func (*OperationResp) ProtoMessage()    {}
 func (*OperationResp) Descriptor() ([]byte, []int) {
-	return fileDescriptor_c2e3fd231961e826, []int{6}
+	return fileDescriptor_c2e3fd231961e826, []int{7}
 }
 
 func (m *OperationResp) XXX_Unmarshal(b []byte) error {
@@ -489,6 +529,7 @@
 	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")
@@ -501,42 +542,43 @@
 func init() { proto.RegisterFile("voltha_protos/common.proto", fileDescriptor_c2e3fd231961e826) }
 
 var fileDescriptor_c2e3fd231961e826 = []byte{
-	// 579 bytes of a gzipped FileDescriptorProto
+	// 593 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x53, 0xdd, 0x4e, 0xdb, 0x30,
-	0x14, 0x26, 0x09, 0x14, 0x38, 0x85, 0x12, 0xcc, 0x98, 0x3a, 0xb4, 0x8b, 0x2a, 0x37, 0xb0, 0x49,
+	0x14, 0x26, 0x09, 0x14, 0x38, 0x85, 0x12, 0xcc, 0xd8, 0x3a, 0xb4, 0x8b, 0x2a, 0x37, 0xb0, 0x49,
 	0x6b, 0x25, 0xb6, 0x5d, 0xee, 0x22, 0x24, 0x5e, 0x67, 0x01, 0x76, 0xe5, 0xa4, 0x20, 0x71, 0x13,
-	0x85, 0xc6, 0x83, 0x68, 0xad, 0x1d, 0x25, 0xa6, 0x1a, 0x7b, 0x8a, 0xbd, 0xc1, 0xde, 0x71, 0x4f,
-	0x30, 0x39, 0x0d, 0x2b, 0x48, 0xbd, 0xcb, 0xf7, 0x7d, 0x27, 0xe7, 0xef, 0xf3, 0x81, 0xa3, 0xb9,
-	0x9a, 0xea, 0xfb, 0x34, 0x29, 0x4a, 0xa5, 0x55, 0x35, 0x98, 0xa8, 0xd9, 0x4c, 0xc9, 0x7e, 0x8d,
-	0x50, 0x6b, 0x81, 0xbc, 0x57, 0x60, 0x93, 0x10, 0x75, 0xc0, 0xce, 0xb3, 0xae, 0xd5, 0xb3, 0x4e,
-	0xb6, 0xb9, 0x9d, 0x67, 0xde, 0x31, 0x38, 0x24, 0xac, 0x50, 0x0f, 0x36, 0x72, 0x2d, 0x66, 0x55,
-	0xd7, 0xea, 0x39, 0x27, 0xed, 0x53, 0xe8, 0x37, 0x29, 0x48, 0xc8, 0x17, 0x82, 0xf7, 0x0b, 0x20,
-	0x50, 0x52, 0x8a, 0x89, 0xce, 0x95, 0x44, 0x47, 0xb0, 0x25, 0x64, 0x56, 0xa8, 0x5c, 0xea, 0x26,
-	0xd9, 0x7f, 0x8c, 0x7a, 0xd0, 0x9e, 0x28, 0xa9, 0xc5, 0x4f, 0x4d, 0xe4, 0x77, 0xd5, 0xb5, 0x6b,
-	0xf9, 0x39, 0x85, 0xfa, 0x70, 0xf0, 0x43, 0x88, 0x22, 0x49, 0xa7, 0xf9, 0x5c, 0x24, 0xb9, 0xd4,
-	0xa2, 0x9c, 0xa7, 0xd3, 0xae, 0xd3, 0xb3, 0x4e, 0x1c, 0xbe, 0x6f, 0x24, 0xdf, 0x28, 0xa4, 0x11,
-	0xbc, 0x7b, 0x00, 0x3f, 0x9b, 0xe5, 0x32, 0xd2, 0xa9, 0x16, 0xde, 0x0d, 0x6c, 0xc4, 0x8f, 0x85,
-	0xa8, 0x50, 0x1b, 0x36, 0xc7, 0xf4, 0x9c, 0xb2, 0x6b, 0xea, 0xae, 0x21, 0x04, 0x9d, 0x11, 0xc7,
-	0x23, 0xce, 0xae, 0x48, 0x44, 0x18, 0xc5, 0xa1, 0x6b, 0x99, 0x00, 0x4c, 0xfd, 0xb3, 0x0b, 0x1c,
-	0xba, 0x36, 0xda, 0x81, 0xad, 0x90, 0x44, 0x0b, 0xe4, 0xa0, 0x43, 0xd8, 0x0f, 0xd9, 0x35, 0xbd,
-	0x60, 0x7e, 0x48, 0xe8, 0x30, 0x21, 0x97, 0xfe, 0x10, 0xbb, 0xeb, 0xde, 0x1f, 0x0b, 0x80, 0x15,
-	0xa2, 0x34, 0x95, 0x1e, 0x2a, 0xef, 0xb7, 0xb5, 0xb2, 0x56, 0x07, 0x20, 0x24, 0x51, 0xc0, 0xae,
-	0x30, 0xaf, 0xeb, 0x74, 0x00, 0xfc, 0x20, 0x26, 0x57, 0x7e, 0x4c, 0xe8, 0xd0, 0xb5, 0x4d, 0x70,
-	0x8c, 0xa3, 0x1a, 0x38, 0x08, 0xa0, 0x55, 0x8b, 0xd8, 0x5d, 0x37, 0xdf, 0x5f, 0x7d, 0x62, 0x3a,
-	0xd8, 0x40, 0x7b, 0xd0, 0xe6, 0x38, 0x60, 0x34, 0x20, 0x17, 0x26, 0xb0, 0x85, 0x5e, 0x03, 0x7a,
-	0x46, 0x24, 0x4d, 0xe0, 0xa6, 0x69, 0x9c, 0xe3, 0x33, 0xc6, 0x62, 0x1c, 0xba, 0x5b, 0x1e, 0x86,
-	0xdd, 0xc6, 0x87, 0xa6, 0xc7, 0x4f, 0x2b, 0x5b, 0xdc, 0x83, 0xf6, 0x98, 0x72, 0xec, 0x07, 0xdf,
-	0xcc, 0xc4, 0xae, 0x85, 0x76, 0x61, 0x7b, 0x09, 0x6d, 0xef, 0xaf, 0x05, 0xbb, 0x66, 0xd0, 0xd4,
-	0xd8, 0xc9, 0x45, 0x55, 0xa0, 0x2f, 0xb0, 0x3e, 0x51, 0x99, 0xa8, 0xed, 0xec, 0x9c, 0xbe, 0x7b,
-	0x7a, 0x01, 0x2f, 0x82, 0x9e, 0x23, 0xfd, 0x50, 0xca, 0x40, 0x65, 0x82, 0xd7, 0xbf, 0xa1, 0x63,
-	0xd8, 0x4b, 0xb3, 0x2c, 0x37, 0x5a, 0x3a, 0x4d, 0xf2, 0xa5, 0xf3, 0x9d, 0x25, 0x6d, 0xcc, 0xf7,
-	0x1e, 0xe1, 0x60, 0x45, 0x16, 0x63, 0x08, 0x1b, 0x61, 0xee, 0xc7, 0x84, 0xd1, 0x24, 0x1a, 0x07,
-	0x01, 0x8e, 0x22, 0x77, 0xed, 0x25, 0x6d, 0x56, 0x32, 0xe6, 0x66, 0x9a, 0x37, 0x70, 0xb8, 0xa4,
-	0xc7, 0x34, 0x1a, 0x8f, 0x46, 0x8c, 0xc7, 0xb5, 0xcf, 0x2f, 0x24, 0x42, 0x93, 0x11, 0x67, 0x43,
-	0x6e, 0x92, 0x39, 0xef, 0xdf, 0xc2, 0x4e, 0x2c, 0x2a, 0x7d, 0xa9, 0x32, 0x71, 0x2e, 0x1e, 0x2b,
-	0xb3, 0xd9, 0xb4, 0xc8, 0x13, 0x2d, 0x2a, 0xed, 0xae, 0x9d, 0x61, 0x38, 0x50, 0xe5, 0x5d, 0x5f,
-	0x15, 0x42, 0x4e, 0x54, 0x99, 0xf5, 0x17, 0x37, 0x75, 0xd3, 0xbf, 0xcb, 0xf5, 0xfd, 0xc3, 0xad,
-	0xd9, 0xc7, 0xe0, 0x49, 0x1b, 0x2c, 0xb4, 0x0f, 0xcd, 0xbd, 0xcd, 0x3f, 0x0f, 0xee, 0x54, 0x73,
-	0x75, 0xb7, 0xad, 0x9a, 0xfc, 0xf8, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x0d, 0xae, 0x93, 0x94,
-	0x03, 0x00, 0x00,
+	0x85, 0xc6, 0x83, 0x88, 0xd6, 0x8e, 0x1a, 0x53, 0xad, 0x7b, 0x8a, 0xbd, 0xc1, 0xde, 0x71, 0x4f,
+	0x30, 0x39, 0x0d, 0x2b, 0x48, 0xbd, 0xf3, 0xf7, 0x7d, 0x27, 0xe7, 0xef, 0xcb, 0x81, 0xa3, 0x99,
+	0x1a, 0xeb, 0xfb, 0x34, 0x29, 0xa6, 0x4a, 0xab, 0xb2, 0x37, 0x52, 0x93, 0x89, 0x92, 0xdd, 0x0a,
+	0xa1, 0xc6, 0x02, 0x79, 0x6f, 0xc0, 0x39, 0x17, 0x73, 0xe4, 0x82, 0xf3, 0x20, 0xe6, 0x6d, 0xab,
+	0x63, 0x9d, 0x6c, 0x73, 0xf3, 0xf4, 0x5e, 0x81, 0x4d, 0x42, 0xd4, 0x02, 0x3b, 0xcf, 0x6a, 0xda,
+	0xce, 0x33, 0xef, 0x18, 0x1c, 0x12, 0x96, 0xa8, 0x03, 0x1b, 0xb9, 0x16, 0x93, 0xb2, 0x6d, 0x75,
+	0x9c, 0x93, 0xe6, 0x29, 0x74, 0xeb, 0xdc, 0x24, 0xe4, 0x0b, 0xc1, 0xfb, 0x05, 0x10, 0x28, 0x29,
+	0xc5, 0x48, 0xe7, 0x4a, 0xa2, 0x23, 0xd8, 0x12, 0x32, 0x2b, 0x54, 0x2e, 0x75, 0x9d, 0xec, 0x3f,
+	0x46, 0x1d, 0x68, 0x8e, 0x94, 0xd4, 0xe2, 0xa7, 0x26, 0xf2, 0x87, 0x6a, 0xdb, 0x95, 0xfc, 0x9c,
+	0x42, 0x5d, 0x38, 0x78, 0x10, 0xa2, 0x48, 0xd2, 0x71, 0x3e, 0x13, 0x49, 0x2e, 0xb5, 0x98, 0xce,
+	0xd2, 0x71, 0xdb, 0xe9, 0x58, 0x27, 0x0e, 0xdf, 0x37, 0x92, 0x6f, 0x14, 0x52, 0x0b, 0xde, 0x3d,
+	0x80, 0x9f, 0x4d, 0x72, 0x19, 0xe9, 0x54, 0x0b, 0xef, 0x06, 0x36, 0xe2, 0x79, 0x21, 0x4a, 0xd4,
+	0x84, 0xcd, 0x21, 0x3d, 0xa7, 0xec, 0x9a, 0xba, 0x6b, 0x08, 0x41, 0x6b, 0xc0, 0xf1, 0x80, 0xb3,
+	0x2b, 0x12, 0x11, 0x46, 0x71, 0xe8, 0x5a, 0x26, 0x00, 0x53, 0xff, 0xec, 0x02, 0x87, 0xae, 0x8d,
+	0x76, 0x60, 0x2b, 0x24, 0xd1, 0x02, 0x39, 0xe8, 0x10, 0xf6, 0x43, 0x76, 0x4d, 0x2f, 0x98, 0x1f,
+	0x12, 0xda, 0x4f, 0xc8, 0xa5, 0xdf, 0xc7, 0xee, 0xba, 0xf7, 0xc7, 0x02, 0x60, 0x85, 0x98, 0x9a,
+	0x4a, 0x8f, 0xa5, 0xf7, 0xdb, 0x5a, 0x59, 0xab, 0x05, 0x10, 0x92, 0x28, 0x60, 0x57, 0x98, 0x57,
+	0x75, 0x5a, 0x00, 0x7e, 0x10, 0x93, 0x2b, 0x3f, 0x26, 0xb4, 0xef, 0xda, 0x26, 0x38, 0xc6, 0x51,
+	0x05, 0x1c, 0x04, 0xd0, 0xa8, 0x44, 0xec, 0xae, 0x9b, 0xf7, 0x37, 0x9f, 0x98, 0x0e, 0x36, 0xd0,
+	0x1e, 0x34, 0x39, 0x0e, 0x18, 0x0d, 0xc8, 0x85, 0x09, 0x6c, 0xa0, 0xd7, 0x80, 0x9e, 0x11, 0x49,
+	0x1d, 0xb8, 0x69, 0x1a, 0xe7, 0xf8, 0x8c, 0xb1, 0x18, 0x87, 0xee, 0x96, 0x87, 0x61, 0xb7, 0xf6,
+	0xa1, 0xee, 0xf1, 0xf3, 0xca, 0x16, 0xf7, 0xa0, 0x39, 0xa4, 0x1c, 0xfb, 0xc1, 0x77, 0x33, 0xb1,
+	0x6b, 0xa1, 0x5d, 0xd8, 0x5e, 0x42, 0xdb, 0xfb, 0x6b, 0xc1, 0xae, 0x19, 0x34, 0x35, 0x76, 0x72,
+	0x51, 0x16, 0xe8, 0x2b, 0xac, 0x8f, 0x54, 0x26, 0x2a, 0x3b, 0x5b, 0xa7, 0xef, 0x9f, 0xfe, 0x80,
+	0x17, 0x41, 0xcf, 0x91, 0x7e, 0x9c, 0xca, 0x40, 0x65, 0x82, 0x57, 0x9f, 0xa1, 0x63, 0xd8, 0x4b,
+	0xb3, 0x2c, 0x37, 0x5a, 0x3a, 0x4e, 0xf2, 0xa5, 0xf3, 0xad, 0x25, 0x6d, 0xcc, 0xf7, 0xe6, 0x70,
+	0xb0, 0x22, 0x8b, 0x31, 0x84, 0x0d, 0x30, 0xf7, 0x63, 0xc2, 0x68, 0x12, 0x0d, 0x83, 0x00, 0x47,
+	0x91, 0xbb, 0xf6, 0x92, 0x36, 0x2b, 0x19, 0x72, 0x33, 0xcd, 0x5b, 0x38, 0x5c, 0xd2, 0x43, 0x1a,
+	0x0d, 0x07, 0x03, 0xc6, 0xe3, 0xca, 0xe7, 0x17, 0x12, 0xa1, 0xc9, 0x80, 0xb3, 0x3e, 0x37, 0xc9,
+	0x9c, 0x0f, 0xef, 0x60, 0x27, 0x16, 0xa5, 0xbe, 0x54, 0x99, 0x38, 0x17, 0xf3, 0xd2, 0x6c, 0x36,
+	0x2d, 0xf2, 0x44, 0x8b, 0x52, 0xbb, 0x6b, 0x67, 0x18, 0x0e, 0xd4, 0xf4, 0xae, 0xab, 0x0a, 0x21,
+	0x47, 0x6a, 0x9a, 0x75, 0x17, 0xc7, 0x76, 0xd3, 0xbd, 0xcb, 0xf5, 0xfd, 0xe3, 0xad, 0xd9, 0x47,
+	0xef, 0x49, 0xeb, 0x2d, 0xb4, 0x8f, 0xf5, 0x21, 0xce, 0xbe, 0xf4, 0xee, 0x54, 0x7d, 0x8e, 0xb7,
+	0x8d, 0x8a, 0xfc, 0xf4, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x78, 0x80, 0xdb, 0x29, 0xad, 0x03, 0x00,
+	0x00,
 }
diff --git a/go/voip_system_profile/voip_system_profile.pb.go b/go/voip_system_profile/voip_system_profile.pb.go
new file mode 100644
index 0000000..b0aeb8e
--- /dev/null
+++ b/go/voip_system_profile/voip_system_profile.pb.go
@@ -0,0 +1,1694 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: voltha_protos/voip_system_profile.proto
+
+package voip_system_profile
+
+import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	math "math"
+)
+
+// 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
+
+type VoipSystemProfileRequest struct {
+	Key                  string             `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
+	VoipSystemProfile    *VoipSystemProfile `protobuf:"bytes,2,opt,name=voipSystemProfile,proto3" json:"voipSystemProfile,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
+	XXX_unrecognized     []byte             `json:"-"`
+	XXX_sizecache        int32              `json:"-"`
+}
+
+func (m *VoipSystemProfileRequest) Reset()         { *m = VoipSystemProfileRequest{} }
+func (m *VoipSystemProfileRequest) String() string { return proto.CompactTextString(m) }
+func (*VoipSystemProfileRequest) ProtoMessage()    {}
+func (*VoipSystemProfileRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_02a00a136081bca5, []int{0}
+}
+
+func (m *VoipSystemProfileRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_VoipSystemProfileRequest.Unmarshal(m, b)
+}
+func (m *VoipSystemProfileRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_VoipSystemProfileRequest.Marshal(b, m, deterministic)
+}
+func (m *VoipSystemProfileRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_VoipSystemProfileRequest.Merge(m, src)
+}
+func (m *VoipSystemProfileRequest) XXX_Size() int {
+	return xxx_messageInfo_VoipSystemProfileRequest.Size(m)
+}
+func (m *VoipSystemProfileRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_VoipSystemProfileRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_VoipSystemProfileRequest proto.InternalMessageInfo
+
+func (m *VoipSystemProfileRequest) GetKey() string {
+	if m != nil {
+		return m.Key
+	}
+	return ""
+}
+
+func (m *VoipSystemProfileRequest) GetVoipSystemProfile() *VoipSystemProfile {
+	if m != nil {
+		return m.VoipSystemProfile
+	}
+	return nil
+}
+
+// A system wide profile for voip service that can be stored into voltha KV anytime.
+// Designed based on G988-2017 (also designed flexible to be able to be modified later on)
+type VoipSystemProfile struct {
+	SipConfig            *SipConfig  `protobuf:"bytes,1,opt,name=sipConfig,proto3" json:"sipConfig,omitempty"`
+	VoipConfig           *VoipConfig `protobuf:"bytes,2,opt,name=voipConfig,proto3" json:"voipConfig,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}    `json:"-"`
+	XXX_unrecognized     []byte      `json:"-"`
+	XXX_sizecache        int32       `json:"-"`
+}
+
+func (m *VoipSystemProfile) Reset()         { *m = VoipSystemProfile{} }
+func (m *VoipSystemProfile) String() string { return proto.CompactTextString(m) }
+func (*VoipSystemProfile) ProtoMessage()    {}
+func (*VoipSystemProfile) Descriptor() ([]byte, []int) {
+	return fileDescriptor_02a00a136081bca5, []int{1}
+}
+
+func (m *VoipSystemProfile) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_VoipSystemProfile.Unmarshal(m, b)
+}
+func (m *VoipSystemProfile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_VoipSystemProfile.Marshal(b, m, deterministic)
+}
+func (m *VoipSystemProfile) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_VoipSystemProfile.Merge(m, src)
+}
+func (m *VoipSystemProfile) XXX_Size() int {
+	return xxx_messageInfo_VoipSystemProfile.Size(m)
+}
+func (m *VoipSystemProfile) XXX_DiscardUnknown() {
+	xxx_messageInfo_VoipSystemProfile.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_VoipSystemProfile proto.InternalMessageInfo
+
+func (m *VoipSystemProfile) GetSipConfig() *SipConfig {
+	if m != nil {
+		return m.SipConfig
+	}
+	return nil
+}
+
+func (m *VoipSystemProfile) GetVoipConfig() *VoipConfig {
+	if m != nil {
+		return m.VoipConfig
+	}
+	return nil
+}
+
+// Common voip fields are grouped here
+type VoipConfig struct {
+	IpHostConfig         *IpHostConfig        `protobuf:"bytes,1,opt,name=ipHostConfig,proto3" json:"ipHostConfig,omitempty"`
+	TcpUdpConfig         *TcpUdpConfig        `protobuf:"bytes,2,opt,name=tcpUdpConfig,proto3" json:"tcpUdpConfig,omitempty"`
+	VoipVoiceCtp         *VoipVoiceCtp        `protobuf:"bytes,3,opt,name=voipVoiceCtp,proto3" json:"voipVoiceCtp,omitempty"`
+	VoipMediaProfile     *VoipMediaProfile    `protobuf:"bytes,4,opt,name=voipMediaProfile,proto3" json:"voipMediaProfile,omitempty"`
+	VoiceServiceProfile  *VoiceServiceProfile `protobuf:"bytes,5,opt,name=voiceServiceProfile,proto3" json:"voiceServiceProfile,omitempty"`
+	RtpProfile           *RtpProfile          `protobuf:"bytes,6,opt,name=rtpProfile,proto3" json:"rtpProfile,omitempty"`
+	PptpPotsUni          *PptpPotsUni         `protobuf:"bytes,7,opt,name=pptpPotsUni,proto3" json:"pptpPotsUni,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *VoipConfig) Reset()         { *m = VoipConfig{} }
+func (m *VoipConfig) String() string { return proto.CompactTextString(m) }
+func (*VoipConfig) ProtoMessage()    {}
+func (*VoipConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_02a00a136081bca5, []int{2}
+}
+
+func (m *VoipConfig) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_VoipConfig.Unmarshal(m, b)
+}
+func (m *VoipConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_VoipConfig.Marshal(b, m, deterministic)
+}
+func (m *VoipConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_VoipConfig.Merge(m, src)
+}
+func (m *VoipConfig) XXX_Size() int {
+	return xxx_messageInfo_VoipConfig.Size(m)
+}
+func (m *VoipConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_VoipConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_VoipConfig proto.InternalMessageInfo
+
+func (m *VoipConfig) GetIpHostConfig() *IpHostConfig {
+	if m != nil {
+		return m.IpHostConfig
+	}
+	return nil
+}
+
+func (m *VoipConfig) GetTcpUdpConfig() *TcpUdpConfig {
+	if m != nil {
+		return m.TcpUdpConfig
+	}
+	return nil
+}
+
+func (m *VoipConfig) GetVoipVoiceCtp() *VoipVoiceCtp {
+	if m != nil {
+		return m.VoipVoiceCtp
+	}
+	return nil
+}
+
+func (m *VoipConfig) GetVoipMediaProfile() *VoipMediaProfile {
+	if m != nil {
+		return m.VoipMediaProfile
+	}
+	return nil
+}
+
+func (m *VoipConfig) GetVoiceServiceProfile() *VoiceServiceProfile {
+	if m != nil {
+		return m.VoiceServiceProfile
+	}
+	return nil
+}
+
+func (m *VoipConfig) GetRtpProfile() *RtpProfile {
+	if m != nil {
+		return m.RtpProfile
+	}
+	return nil
+}
+
+func (m *VoipConfig) GetPptpPotsUni() *PptpPotsUni {
+	if m != nil {
+		return m.PptpPotsUni
+	}
+	return nil
+}
+
+type IpHostConfig struct {
+	IpOptions            uint32   `protobuf:"varint,1,opt,name=ipOptions,proto3" json:"ipOptions,omitempty"`
+	OnuIdentifier        string   `protobuf:"bytes,2,opt,name=onuIdentifier,proto3" json:"onuIdentifier,omitempty"`
+	IpAddress            string   `protobuf:"bytes,3,opt,name=ipAddress,proto3" json:"ipAddress,omitempty"`
+	Mask                 string   `protobuf:"bytes,4,opt,name=mask,proto3" json:"mask,omitempty"`
+	Gateway              string   `protobuf:"bytes,5,opt,name=gateway,proto3" json:"gateway,omitempty"`
+	PrimaryDns           string   `protobuf:"bytes,6,opt,name=primaryDns,proto3" json:"primaryDns,omitempty"`
+	SecondaryDns         string   `protobuf:"bytes,7,opt,name=secondaryDns,proto3" json:"secondaryDns,omitempty"`
+	RelayAgentOptions    string   `protobuf:"bytes,8,opt,name=relayAgentOptions,proto3" json:"relayAgentOptions,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *IpHostConfig) Reset()         { *m = IpHostConfig{} }
+func (m *IpHostConfig) String() string { return proto.CompactTextString(m) }
+func (*IpHostConfig) ProtoMessage()    {}
+func (*IpHostConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_02a00a136081bca5, []int{3}
+}
+
+func (m *IpHostConfig) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_IpHostConfig.Unmarshal(m, b)
+}
+func (m *IpHostConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_IpHostConfig.Marshal(b, m, deterministic)
+}
+func (m *IpHostConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_IpHostConfig.Merge(m, src)
+}
+func (m *IpHostConfig) XXX_Size() int {
+	return xxx_messageInfo_IpHostConfig.Size(m)
+}
+func (m *IpHostConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_IpHostConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_IpHostConfig proto.InternalMessageInfo
+
+func (m *IpHostConfig) GetIpOptions() uint32 {
+	if m != nil {
+		return m.IpOptions
+	}
+	return 0
+}
+
+func (m *IpHostConfig) GetOnuIdentifier() string {
+	if m != nil {
+		return m.OnuIdentifier
+	}
+	return ""
+}
+
+func (m *IpHostConfig) GetIpAddress() string {
+	if m != nil {
+		return m.IpAddress
+	}
+	return ""
+}
+
+func (m *IpHostConfig) GetMask() string {
+	if m != nil {
+		return m.Mask
+	}
+	return ""
+}
+
+func (m *IpHostConfig) GetGateway() string {
+	if m != nil {
+		return m.Gateway
+	}
+	return ""
+}
+
+func (m *IpHostConfig) GetPrimaryDns() string {
+	if m != nil {
+		return m.PrimaryDns
+	}
+	return ""
+}
+
+func (m *IpHostConfig) GetSecondaryDns() string {
+	if m != nil {
+		return m.SecondaryDns
+	}
+	return ""
+}
+
+func (m *IpHostConfig) GetRelayAgentOptions() string {
+	if m != nil {
+		return m.RelayAgentOptions
+	}
+	return ""
+}
+
+type TcpUdpConfig struct {
+	Protocol             uint32   `protobuf:"varint,1,opt,name=protocol,proto3" json:"protocol,omitempty"`
+	TosField             string   `protobuf:"bytes,2,opt,name=tosField,proto3" json:"tosField,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *TcpUdpConfig) Reset()         { *m = TcpUdpConfig{} }
+func (m *TcpUdpConfig) String() string { return proto.CompactTextString(m) }
+func (*TcpUdpConfig) ProtoMessage()    {}
+func (*TcpUdpConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_02a00a136081bca5, []int{4}
+}
+
+func (m *TcpUdpConfig) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TcpUdpConfig.Unmarshal(m, b)
+}
+func (m *TcpUdpConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TcpUdpConfig.Marshal(b, m, deterministic)
+}
+func (m *TcpUdpConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TcpUdpConfig.Merge(m, src)
+}
+func (m *TcpUdpConfig) XXX_Size() int {
+	return xxx_messageInfo_TcpUdpConfig.Size(m)
+}
+func (m *TcpUdpConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_TcpUdpConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TcpUdpConfig proto.InternalMessageInfo
+
+func (m *TcpUdpConfig) GetProtocol() uint32 {
+	if m != nil {
+		return m.Protocol
+	}
+	return 0
+}
+
+func (m *TcpUdpConfig) GetTosField() string {
+	if m != nil {
+		return m.TosField
+	}
+	return ""
+}
+
+type VoipVoiceCtp struct {
+	SignallingCode       uint32   `protobuf:"varint,1,opt,name=signallingCode,proto3" json:"signallingCode,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *VoipVoiceCtp) Reset()         { *m = VoipVoiceCtp{} }
+func (m *VoipVoiceCtp) String() string { return proto.CompactTextString(m) }
+func (*VoipVoiceCtp) ProtoMessage()    {}
+func (*VoipVoiceCtp) Descriptor() ([]byte, []int) {
+	return fileDescriptor_02a00a136081bca5, []int{5}
+}
+
+func (m *VoipVoiceCtp) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_VoipVoiceCtp.Unmarshal(m, b)
+}
+func (m *VoipVoiceCtp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_VoipVoiceCtp.Marshal(b, m, deterministic)
+}
+func (m *VoipVoiceCtp) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_VoipVoiceCtp.Merge(m, src)
+}
+func (m *VoipVoiceCtp) XXX_Size() int {
+	return xxx_messageInfo_VoipVoiceCtp.Size(m)
+}
+func (m *VoipVoiceCtp) XXX_DiscardUnknown() {
+	xxx_messageInfo_VoipVoiceCtp.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_VoipVoiceCtp proto.InternalMessageInfo
+
+func (m *VoipVoiceCtp) GetSignallingCode() uint32 {
+	if m != nil {
+		return m.SignallingCode
+	}
+	return 0
+}
+
+type VoipMediaProfile struct {
+	FaxMode                uint32   `protobuf:"varint,1,opt,name=faxMode,proto3" json:"faxMode,omitempty"`
+	CodecSelection1        uint32   `protobuf:"varint,2,opt,name=codecSelection1,proto3" json:"codecSelection1,omitempty"`
+	PacketPeriodSelection1 uint32   `protobuf:"varint,3,opt,name=packetPeriodSelection1,proto3" json:"packetPeriodSelection1,omitempty"`
+	SilenceSuppression1    uint32   `protobuf:"varint,4,opt,name=silenceSuppression1,proto3" json:"silenceSuppression1,omitempty"`
+	CodecSelection2        uint32   `protobuf:"varint,5,opt,name=codecSelection2,proto3" json:"codecSelection2,omitempty"`
+	PacketPeriodSelection2 uint32   `protobuf:"varint,6,opt,name=packetPeriodSelection2,proto3" json:"packetPeriodSelection2,omitempty"`
+	SilenceSuppression2    uint32   `protobuf:"varint,7,opt,name=silenceSuppression2,proto3" json:"silenceSuppression2,omitempty"`
+	CodecSelection3        uint32   `protobuf:"varint,8,opt,name=codecSelection3,proto3" json:"codecSelection3,omitempty"`
+	PacketPeriodSelection3 uint32   `protobuf:"varint,9,opt,name=packetPeriodSelection3,proto3" json:"packetPeriodSelection3,omitempty"`
+	SilenceSuppression3    uint32   `protobuf:"varint,10,opt,name=silenceSuppression3,proto3" json:"silenceSuppression3,omitempty"`
+	CodecSelection4        uint32   `protobuf:"varint,11,opt,name=codecSelection4,proto3" json:"codecSelection4,omitempty"`
+	PacketPeriodSelection4 uint32   `protobuf:"varint,12,opt,name=packetPeriodSelection4,proto3" json:"packetPeriodSelection4,omitempty"`
+	SilenceSuppression4    uint32   `protobuf:"varint,13,opt,name=silenceSuppression4,proto3" json:"silenceSuppression4,omitempty"`
+	OobDtmf                uint32   `protobuf:"varint,14,opt,name=oobDtmf,proto3" json:"oobDtmf,omitempty"`
+	XXX_NoUnkeyedLiteral   struct{} `json:"-"`
+	XXX_unrecognized       []byte   `json:"-"`
+	XXX_sizecache          int32    `json:"-"`
+}
+
+func (m *VoipMediaProfile) Reset()         { *m = VoipMediaProfile{} }
+func (m *VoipMediaProfile) String() string { return proto.CompactTextString(m) }
+func (*VoipMediaProfile) ProtoMessage()    {}
+func (*VoipMediaProfile) Descriptor() ([]byte, []int) {
+	return fileDescriptor_02a00a136081bca5, []int{6}
+}
+
+func (m *VoipMediaProfile) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_VoipMediaProfile.Unmarshal(m, b)
+}
+func (m *VoipMediaProfile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_VoipMediaProfile.Marshal(b, m, deterministic)
+}
+func (m *VoipMediaProfile) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_VoipMediaProfile.Merge(m, src)
+}
+func (m *VoipMediaProfile) XXX_Size() int {
+	return xxx_messageInfo_VoipMediaProfile.Size(m)
+}
+func (m *VoipMediaProfile) XXX_DiscardUnknown() {
+	xxx_messageInfo_VoipMediaProfile.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_VoipMediaProfile proto.InternalMessageInfo
+
+func (m *VoipMediaProfile) GetFaxMode() uint32 {
+	if m != nil {
+		return m.FaxMode
+	}
+	return 0
+}
+
+func (m *VoipMediaProfile) GetCodecSelection1() uint32 {
+	if m != nil {
+		return m.CodecSelection1
+	}
+	return 0
+}
+
+func (m *VoipMediaProfile) GetPacketPeriodSelection1() uint32 {
+	if m != nil {
+		return m.PacketPeriodSelection1
+	}
+	return 0
+}
+
+func (m *VoipMediaProfile) GetSilenceSuppression1() uint32 {
+	if m != nil {
+		return m.SilenceSuppression1
+	}
+	return 0
+}
+
+func (m *VoipMediaProfile) GetCodecSelection2() uint32 {
+	if m != nil {
+		return m.CodecSelection2
+	}
+	return 0
+}
+
+func (m *VoipMediaProfile) GetPacketPeriodSelection2() uint32 {
+	if m != nil {
+		return m.PacketPeriodSelection2
+	}
+	return 0
+}
+
+func (m *VoipMediaProfile) GetSilenceSuppression2() uint32 {
+	if m != nil {
+		return m.SilenceSuppression2
+	}
+	return 0
+}
+
+func (m *VoipMediaProfile) GetCodecSelection3() uint32 {
+	if m != nil {
+		return m.CodecSelection3
+	}
+	return 0
+}
+
+func (m *VoipMediaProfile) GetPacketPeriodSelection3() uint32 {
+	if m != nil {
+		return m.PacketPeriodSelection3
+	}
+	return 0
+}
+
+func (m *VoipMediaProfile) GetSilenceSuppression3() uint32 {
+	if m != nil {
+		return m.SilenceSuppression3
+	}
+	return 0
+}
+
+func (m *VoipMediaProfile) GetCodecSelection4() uint32 {
+	if m != nil {
+		return m.CodecSelection4
+	}
+	return 0
+}
+
+func (m *VoipMediaProfile) GetPacketPeriodSelection4() uint32 {
+	if m != nil {
+		return m.PacketPeriodSelection4
+	}
+	return 0
+}
+
+func (m *VoipMediaProfile) GetSilenceSuppression4() uint32 {
+	if m != nil {
+		return m.SilenceSuppression4
+	}
+	return 0
+}
+
+func (m *VoipMediaProfile) GetOobDtmf() uint32 {
+	if m != nil {
+		return m.OobDtmf
+	}
+	return 0
+}
+
+type VoiceServiceProfile struct {
+	AnnouncementType     uint32   `protobuf:"varint,1,opt,name=announcementType,proto3" json:"announcementType,omitempty"`
+	JitterTarget         uint32   `protobuf:"varint,2,opt,name=jitterTarget,proto3" json:"jitterTarget,omitempty"`
+	JitterBufferMax      uint32   `protobuf:"varint,3,opt,name=jitterBufferMax,proto3" json:"jitterBufferMax,omitempty"`
+	EchoCancelInd        bool     `protobuf:"varint,4,opt,name=echoCancelInd,proto3" json:"echoCancelInd,omitempty"`
+	PstnProtocolVariant  uint32   `protobuf:"varint,5,opt,name=pstnProtocolVariant,proto3" json:"pstnProtocolVariant,omitempty"`
+	DtmfDigitLevels      uint32   `protobuf:"varint,6,opt,name=dtmfDigitLevels,proto3" json:"dtmfDigitLevels,omitempty"`
+	DtmfDigitDuration    uint32   `protobuf:"varint,7,opt,name=dtmfDigitDuration,proto3" json:"dtmfDigitDuration,omitempty"`
+	HookFlashMinimumTime uint32   `protobuf:"varint,8,opt,name=hookFlashMinimumTime,proto3" json:"hookFlashMinimumTime,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *VoiceServiceProfile) Reset()         { *m = VoiceServiceProfile{} }
+func (m *VoiceServiceProfile) String() string { return proto.CompactTextString(m) }
+func (*VoiceServiceProfile) ProtoMessage()    {}
+func (*VoiceServiceProfile) Descriptor() ([]byte, []int) {
+	return fileDescriptor_02a00a136081bca5, []int{7}
+}
+
+func (m *VoiceServiceProfile) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_VoiceServiceProfile.Unmarshal(m, b)
+}
+func (m *VoiceServiceProfile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_VoiceServiceProfile.Marshal(b, m, deterministic)
+}
+func (m *VoiceServiceProfile) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_VoiceServiceProfile.Merge(m, src)
+}
+func (m *VoiceServiceProfile) XXX_Size() int {
+	return xxx_messageInfo_VoiceServiceProfile.Size(m)
+}
+func (m *VoiceServiceProfile) XXX_DiscardUnknown() {
+	xxx_messageInfo_VoiceServiceProfile.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_VoiceServiceProfile proto.InternalMessageInfo
+
+func (m *VoiceServiceProfile) GetAnnouncementType() uint32 {
+	if m != nil {
+		return m.AnnouncementType
+	}
+	return 0
+}
+
+func (m *VoiceServiceProfile) GetJitterTarget() uint32 {
+	if m != nil {
+		return m.JitterTarget
+	}
+	return 0
+}
+
+func (m *VoiceServiceProfile) GetJitterBufferMax() uint32 {
+	if m != nil {
+		return m.JitterBufferMax
+	}
+	return 0
+}
+
+func (m *VoiceServiceProfile) GetEchoCancelInd() bool {
+	if m != nil {
+		return m.EchoCancelInd
+	}
+	return false
+}
+
+func (m *VoiceServiceProfile) GetPstnProtocolVariant() uint32 {
+	if m != nil {
+		return m.PstnProtocolVariant
+	}
+	return 0
+}
+
+func (m *VoiceServiceProfile) GetDtmfDigitLevels() uint32 {
+	if m != nil {
+		return m.DtmfDigitLevels
+	}
+	return 0
+}
+
+func (m *VoiceServiceProfile) GetDtmfDigitDuration() uint32 {
+	if m != nil {
+		return m.DtmfDigitDuration
+	}
+	return 0
+}
+
+func (m *VoiceServiceProfile) GetHookFlashMinimumTime() uint32 {
+	if m != nil {
+		return m.HookFlashMinimumTime
+	}
+	return 0
+}
+
+type RtpProfile struct {
+	LocalPortMin         uint32   `protobuf:"varint,1,opt,name=localPortMin,proto3" json:"localPortMin,omitempty"`
+	LocalPortMax         uint32   `protobuf:"varint,2,opt,name=localPortMax,proto3" json:"localPortMax,omitempty"`
+	DscpMark             string   `protobuf:"bytes,3,opt,name=dscpMark,proto3" json:"dscpMark,omitempty"`
+	PiggyBackEvents      uint32   `protobuf:"varint,4,opt,name=piggyBackEvents,proto3" json:"piggyBackEvents,omitempty"`
+	ToneEvents           uint32   `protobuf:"varint,5,opt,name=toneEvents,proto3" json:"toneEvents,omitempty"`
+	DtmfEvents           uint32   `protobuf:"varint,6,opt,name=dtmfEvents,proto3" json:"dtmfEvents,omitempty"`
+	CasEvents            uint32   `protobuf:"varint,7,opt,name=casEvents,proto3" json:"casEvents,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *RtpProfile) Reset()         { *m = RtpProfile{} }
+func (m *RtpProfile) String() string { return proto.CompactTextString(m) }
+func (*RtpProfile) ProtoMessage()    {}
+func (*RtpProfile) Descriptor() ([]byte, []int) {
+	return fileDescriptor_02a00a136081bca5, []int{8}
+}
+
+func (m *RtpProfile) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RtpProfile.Unmarshal(m, b)
+}
+func (m *RtpProfile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RtpProfile.Marshal(b, m, deterministic)
+}
+func (m *RtpProfile) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RtpProfile.Merge(m, src)
+}
+func (m *RtpProfile) XXX_Size() int {
+	return xxx_messageInfo_RtpProfile.Size(m)
+}
+func (m *RtpProfile) XXX_DiscardUnknown() {
+	xxx_messageInfo_RtpProfile.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RtpProfile proto.InternalMessageInfo
+
+func (m *RtpProfile) GetLocalPortMin() uint32 {
+	if m != nil {
+		return m.LocalPortMin
+	}
+	return 0
+}
+
+func (m *RtpProfile) GetLocalPortMax() uint32 {
+	if m != nil {
+		return m.LocalPortMax
+	}
+	return 0
+}
+
+func (m *RtpProfile) GetDscpMark() string {
+	if m != nil {
+		return m.DscpMark
+	}
+	return ""
+}
+
+func (m *RtpProfile) GetPiggyBackEvents() uint32 {
+	if m != nil {
+		return m.PiggyBackEvents
+	}
+	return 0
+}
+
+func (m *RtpProfile) GetToneEvents() uint32 {
+	if m != nil {
+		return m.ToneEvents
+	}
+	return 0
+}
+
+func (m *RtpProfile) GetDtmfEvents() uint32 {
+	if m != nil {
+		return m.DtmfEvents
+	}
+	return 0
+}
+
+func (m *RtpProfile) GetCasEvents() uint32 {
+	if m != nil {
+		return m.CasEvents
+	}
+	return 0
+}
+
+type PptpPotsUni struct {
+	Arc                  string   `protobuf:"bytes,1,opt,name=arc,proto3" json:"arc,omitempty"`
+	ArcInterval          string   `protobuf:"bytes,2,opt,name=arcInterval,proto3" json:"arcInterval,omitempty"`
+	Impedance            uint32   `protobuf:"varint,3,opt,name=impedance,proto3" json:"impedance,omitempty"`
+	TransmissionPath     uint32   `protobuf:"varint,4,opt,name=transmissionPath,proto3" json:"transmissionPath,omitempty"`
+	RxGain               int32    `protobuf:"zigzag32,5,opt,name=rxGain,proto3" json:"rxGain,omitempty"`
+	TxGain               int32    `protobuf:"zigzag32,6,opt,name=txGain,proto3" json:"txGain,omitempty"`
+	PotsHoldOverTime     uint32   `protobuf:"varint,7,opt,name=potsHoldOverTime,proto3" json:"potsHoldOverTime,omitempty"`
+	NominalFeedVoltage   uint32   `protobuf:"varint,8,opt,name=nominalFeedVoltage,proto3" json:"nominalFeedVoltage,omitempty"`
+	LossOfSoftSwitch     uint32   `protobuf:"varint,9,opt,name=lossOfSoftSwitch,proto3" json:"lossOfSoftSwitch,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *PptpPotsUni) Reset()         { *m = PptpPotsUni{} }
+func (m *PptpPotsUni) String() string { return proto.CompactTextString(m) }
+func (*PptpPotsUni) ProtoMessage()    {}
+func (*PptpPotsUni) Descriptor() ([]byte, []int) {
+	return fileDescriptor_02a00a136081bca5, []int{9}
+}
+
+func (m *PptpPotsUni) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_PptpPotsUni.Unmarshal(m, b)
+}
+func (m *PptpPotsUni) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_PptpPotsUni.Marshal(b, m, deterministic)
+}
+func (m *PptpPotsUni) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_PptpPotsUni.Merge(m, src)
+}
+func (m *PptpPotsUni) XXX_Size() int {
+	return xxx_messageInfo_PptpPotsUni.Size(m)
+}
+func (m *PptpPotsUni) XXX_DiscardUnknown() {
+	xxx_messageInfo_PptpPotsUni.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_PptpPotsUni proto.InternalMessageInfo
+
+func (m *PptpPotsUni) GetArc() string {
+	if m != nil {
+		return m.Arc
+	}
+	return ""
+}
+
+func (m *PptpPotsUni) GetArcInterval() string {
+	if m != nil {
+		return m.ArcInterval
+	}
+	return ""
+}
+
+func (m *PptpPotsUni) GetImpedance() uint32 {
+	if m != nil {
+		return m.Impedance
+	}
+	return 0
+}
+
+func (m *PptpPotsUni) GetTransmissionPath() uint32 {
+	if m != nil {
+		return m.TransmissionPath
+	}
+	return 0
+}
+
+func (m *PptpPotsUni) GetRxGain() int32 {
+	if m != nil {
+		return m.RxGain
+	}
+	return 0
+}
+
+func (m *PptpPotsUni) GetTxGain() int32 {
+	if m != nil {
+		return m.TxGain
+	}
+	return 0
+}
+
+func (m *PptpPotsUni) GetPotsHoldOverTime() uint32 {
+	if m != nil {
+		return m.PotsHoldOverTime
+	}
+	return 0
+}
+
+func (m *PptpPotsUni) GetNominalFeedVoltage() uint32 {
+	if m != nil {
+		return m.NominalFeedVoltage
+	}
+	return 0
+}
+
+func (m *PptpPotsUni) GetLossOfSoftSwitch() uint32 {
+	if m != nil {
+		return m.LossOfSoftSwitch
+	}
+	return 0
+}
+
+// Sip specific fields are grouped here
+type SipConfig struct {
+	SipUserData                   *SipUserData                   `protobuf:"bytes,1,opt,name=sipUserData,proto3" json:"sipUserData,omitempty"`
+	SipAgentConfig                *SipAgentConfig                `protobuf:"bytes,2,opt,name=sipAgentConfig,proto3" json:"sipAgentConfig,omitempty"`
+	NetworkDialPlan               *NetworkDialPlan               `protobuf:"bytes,3,opt,name=networkDialPlan,proto3" json:"networkDialPlan,omitempty"`
+	VoipFeatureAccessCodes        *VoipFeatureAccessCodes        `protobuf:"bytes,4,opt,name=voipFeatureAccessCodes,proto3" json:"voipFeatureAccessCodes,omitempty"`
+	VoipApplicationServiceProfile *VoipApplicationServiceProfile `protobuf:"bytes,5,opt,name=voipApplicationServiceProfile,proto3" json:"voipApplicationServiceProfile,omitempty"`
+	XXX_NoUnkeyedLiteral          struct{}                       `json:"-"`
+	XXX_unrecognized              []byte                         `json:"-"`
+	XXX_sizecache                 int32                          `json:"-"`
+}
+
+func (m *SipConfig) Reset()         { *m = SipConfig{} }
+func (m *SipConfig) String() string { return proto.CompactTextString(m) }
+func (*SipConfig) ProtoMessage()    {}
+func (*SipConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_02a00a136081bca5, []int{10}
+}
+
+func (m *SipConfig) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SipConfig.Unmarshal(m, b)
+}
+func (m *SipConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SipConfig.Marshal(b, m, deterministic)
+}
+func (m *SipConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SipConfig.Merge(m, src)
+}
+func (m *SipConfig) XXX_Size() int {
+	return xxx_messageInfo_SipConfig.Size(m)
+}
+func (m *SipConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_SipConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SipConfig proto.InternalMessageInfo
+
+func (m *SipConfig) GetSipUserData() *SipUserData {
+	if m != nil {
+		return m.SipUserData
+	}
+	return nil
+}
+
+func (m *SipConfig) GetSipAgentConfig() *SipAgentConfig {
+	if m != nil {
+		return m.SipAgentConfig
+	}
+	return nil
+}
+
+func (m *SipConfig) GetNetworkDialPlan() *NetworkDialPlan {
+	if m != nil {
+		return m.NetworkDialPlan
+	}
+	return nil
+}
+
+func (m *SipConfig) GetVoipFeatureAccessCodes() *VoipFeatureAccessCodes {
+	if m != nil {
+		return m.VoipFeatureAccessCodes
+	}
+	return nil
+}
+
+func (m *SipConfig) GetVoipApplicationServiceProfile() *VoipApplicationServiceProfile {
+	if m != nil {
+		return m.VoipApplicationServiceProfile
+	}
+	return nil
+}
+
+type SipUserData struct {
+	UserPartAor                         string               `protobuf:"bytes,1,opt,name=userPartAor,proto3" json:"userPartAor,omitempty"`
+	UsernameAndPassword                 *UsernameAndPassword `protobuf:"bytes,2,opt,name=usernameAndPassword,proto3" json:"usernameAndPassword,omitempty"`
+	VoicemailServerSipUri               string               `protobuf:"bytes,3,opt,name=voicemailServerSipUri,proto3" json:"voicemailServerSipUri,omitempty"`
+	VoicemailSubscriptionExpirationTime int32                `protobuf:"varint,4,opt,name=voicemailSubscriptionExpirationTime,proto3" json:"voicemailSubscriptionExpirationTime,omitempty"`
+	ReleaseTimer                        int32                `protobuf:"varint,5,opt,name=releaseTimer,proto3" json:"releaseTimer,omitempty"`
+	RohTimer                            int32                `protobuf:"varint,6,opt,name=rohTimer,proto3" json:"rohTimer,omitempty"`
+	XXX_NoUnkeyedLiteral                struct{}             `json:"-"`
+	XXX_unrecognized                    []byte               `json:"-"`
+	XXX_sizecache                       int32                `json:"-"`
+}
+
+func (m *SipUserData) Reset()         { *m = SipUserData{} }
+func (m *SipUserData) String() string { return proto.CompactTextString(m) }
+func (*SipUserData) ProtoMessage()    {}
+func (*SipUserData) Descriptor() ([]byte, []int) {
+	return fileDescriptor_02a00a136081bca5, []int{11}
+}
+
+func (m *SipUserData) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SipUserData.Unmarshal(m, b)
+}
+func (m *SipUserData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SipUserData.Marshal(b, m, deterministic)
+}
+func (m *SipUserData) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SipUserData.Merge(m, src)
+}
+func (m *SipUserData) XXX_Size() int {
+	return xxx_messageInfo_SipUserData.Size(m)
+}
+func (m *SipUserData) XXX_DiscardUnknown() {
+	xxx_messageInfo_SipUserData.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SipUserData proto.InternalMessageInfo
+
+func (m *SipUserData) GetUserPartAor() string {
+	if m != nil {
+		return m.UserPartAor
+	}
+	return ""
+}
+
+func (m *SipUserData) GetUsernameAndPassword() *UsernameAndPassword {
+	if m != nil {
+		return m.UsernameAndPassword
+	}
+	return nil
+}
+
+func (m *SipUserData) GetVoicemailServerSipUri() string {
+	if m != nil {
+		return m.VoicemailServerSipUri
+	}
+	return ""
+}
+
+func (m *SipUserData) GetVoicemailSubscriptionExpirationTime() int32 {
+	if m != nil {
+		return m.VoicemailSubscriptionExpirationTime
+	}
+	return 0
+}
+
+func (m *SipUserData) GetReleaseTimer() int32 {
+	if m != nil {
+		return m.ReleaseTimer
+	}
+	return 0
+}
+
+func (m *SipUserData) GetRohTimer() int32 {
+	if m != nil {
+		return m.RohTimer
+	}
+	return 0
+}
+
+type SipAgentConfig struct {
+	OutboundProxyAddress     string            `protobuf:"bytes,1,opt,name=outboundProxyAddress,proto3" json:"outboundProxyAddress,omitempty"`
+	PrimarySipDns            string            `protobuf:"bytes,2,opt,name=primarySipDns,proto3" json:"primarySipDns,omitempty"`
+	SecondarySipDns          string            `protobuf:"bytes,3,opt,name=secondarySipDns,proto3" json:"secondarySipDns,omitempty"`
+	SipRegExpTime            int32             `protobuf:"varint,4,opt,name=sipRegExpTime,proto3" json:"sipRegExpTime,omitempty"`
+	SipReregHeadStartTime    int32             `protobuf:"varint,5,opt,name=sipReregHeadStartTime,proto3" json:"sipReregHeadStartTime,omitempty"`
+	SipRegistrar             string            `protobuf:"bytes,6,opt,name=SipRegistrar,proto3" json:"SipRegistrar,omitempty"`
+	SoftSwitch               string            `protobuf:"bytes,7,opt,name=softSwitch,proto3" json:"softSwitch,omitempty"`
+	SipResponseTable         *SipResponseTable `protobuf:"bytes,8,opt,name=sipResponseTable,proto3" json:"sipResponseTable,omitempty"`
+	SipOptionTransmitControl bool              `protobuf:"varint,9,opt,name=sipOptionTransmitControl,proto3" json:"sipOptionTransmitControl,omitempty"`
+	SipUriFormat             string            `protobuf:"bytes,10,opt,name=sipUriFormat,proto3" json:"sipUriFormat,omitempty"`
+	RedundantSipAgentPointer string            `protobuf:"bytes,11,opt,name=redundantSipAgentPointer,proto3" json:"redundantSipAgentPointer,omitempty"`
+	XXX_NoUnkeyedLiteral     struct{}          `json:"-"`
+	XXX_unrecognized         []byte            `json:"-"`
+	XXX_sizecache            int32             `json:"-"`
+}
+
+func (m *SipAgentConfig) Reset()         { *m = SipAgentConfig{} }
+func (m *SipAgentConfig) String() string { return proto.CompactTextString(m) }
+func (*SipAgentConfig) ProtoMessage()    {}
+func (*SipAgentConfig) Descriptor() ([]byte, []int) {
+	return fileDescriptor_02a00a136081bca5, []int{12}
+}
+
+func (m *SipAgentConfig) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SipAgentConfig.Unmarshal(m, b)
+}
+func (m *SipAgentConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SipAgentConfig.Marshal(b, m, deterministic)
+}
+func (m *SipAgentConfig) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SipAgentConfig.Merge(m, src)
+}
+func (m *SipAgentConfig) XXX_Size() int {
+	return xxx_messageInfo_SipAgentConfig.Size(m)
+}
+func (m *SipAgentConfig) XXX_DiscardUnknown() {
+	xxx_messageInfo_SipAgentConfig.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SipAgentConfig proto.InternalMessageInfo
+
+func (m *SipAgentConfig) GetOutboundProxyAddress() string {
+	if m != nil {
+		return m.OutboundProxyAddress
+	}
+	return ""
+}
+
+func (m *SipAgentConfig) GetPrimarySipDns() string {
+	if m != nil {
+		return m.PrimarySipDns
+	}
+	return ""
+}
+
+func (m *SipAgentConfig) GetSecondarySipDns() string {
+	if m != nil {
+		return m.SecondarySipDns
+	}
+	return ""
+}
+
+func (m *SipAgentConfig) GetSipRegExpTime() int32 {
+	if m != nil {
+		return m.SipRegExpTime
+	}
+	return 0
+}
+
+func (m *SipAgentConfig) GetSipReregHeadStartTime() int32 {
+	if m != nil {
+		return m.SipReregHeadStartTime
+	}
+	return 0
+}
+
+func (m *SipAgentConfig) GetSipRegistrar() string {
+	if m != nil {
+		return m.SipRegistrar
+	}
+	return ""
+}
+
+func (m *SipAgentConfig) GetSoftSwitch() string {
+	if m != nil {
+		return m.SoftSwitch
+	}
+	return ""
+}
+
+func (m *SipAgentConfig) GetSipResponseTable() *SipResponseTable {
+	if m != nil {
+		return m.SipResponseTable
+	}
+	return nil
+}
+
+func (m *SipAgentConfig) GetSipOptionTransmitControl() bool {
+	if m != nil {
+		return m.SipOptionTransmitControl
+	}
+	return false
+}
+
+func (m *SipAgentConfig) GetSipUriFormat() string {
+	if m != nil {
+		return m.SipUriFormat
+	}
+	return ""
+}
+
+func (m *SipAgentConfig) GetRedundantSipAgentPointer() string {
+	if m != nil {
+		return m.RedundantSipAgentPointer
+	}
+	return ""
+}
+
+type NetworkDialPlan struct {
+	CriticalDialTimeout  uint32         `protobuf:"varint,1,opt,name=criticalDialTimeout,proto3" json:"criticalDialTimeout,omitempty"`
+	PartialDialTimeout   uint32         `protobuf:"varint,2,opt,name=partialDialTimeout,proto3" json:"partialDialTimeout,omitempty"`
+	DialPlanFormat       uint32         `protobuf:"varint,3,opt,name=dialPlanFormat,proto3" json:"dialPlanFormat,omitempty"`
+	DialPlanTable        *DialPlanTable `protobuf:"bytes,4,opt,name=dialPlanTable,proto3" json:"dialPlanTable,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
+	XXX_unrecognized     []byte         `json:"-"`
+	XXX_sizecache        int32          `json:"-"`
+}
+
+func (m *NetworkDialPlan) Reset()         { *m = NetworkDialPlan{} }
+func (m *NetworkDialPlan) String() string { return proto.CompactTextString(m) }
+func (*NetworkDialPlan) ProtoMessage()    {}
+func (*NetworkDialPlan) Descriptor() ([]byte, []int) {
+	return fileDescriptor_02a00a136081bca5, []int{13}
+}
+
+func (m *NetworkDialPlan) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_NetworkDialPlan.Unmarshal(m, b)
+}
+func (m *NetworkDialPlan) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_NetworkDialPlan.Marshal(b, m, deterministic)
+}
+func (m *NetworkDialPlan) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_NetworkDialPlan.Merge(m, src)
+}
+func (m *NetworkDialPlan) XXX_Size() int {
+	return xxx_messageInfo_NetworkDialPlan.Size(m)
+}
+func (m *NetworkDialPlan) XXX_DiscardUnknown() {
+	xxx_messageInfo_NetworkDialPlan.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_NetworkDialPlan proto.InternalMessageInfo
+
+func (m *NetworkDialPlan) GetCriticalDialTimeout() uint32 {
+	if m != nil {
+		return m.CriticalDialTimeout
+	}
+	return 0
+}
+
+func (m *NetworkDialPlan) GetPartialDialTimeout() uint32 {
+	if m != nil {
+		return m.PartialDialTimeout
+	}
+	return 0
+}
+
+func (m *NetworkDialPlan) GetDialPlanFormat() uint32 {
+	if m != nil {
+		return m.DialPlanFormat
+	}
+	return 0
+}
+
+func (m *NetworkDialPlan) GetDialPlanTable() *DialPlanTable {
+	if m != nil {
+		return m.DialPlanTable
+	}
+	return nil
+}
+
+type UsernameAndPassword struct {
+	ValidationScheme     int32    `protobuf:"varint,1,opt,name=validationScheme,proto3" json:"validationScheme,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UsernameAndPassword) Reset()         { *m = UsernameAndPassword{} }
+func (m *UsernameAndPassword) String() string { return proto.CompactTextString(m) }
+func (*UsernameAndPassword) ProtoMessage()    {}
+func (*UsernameAndPassword) Descriptor() ([]byte, []int) {
+	return fileDescriptor_02a00a136081bca5, []int{14}
+}
+
+func (m *UsernameAndPassword) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UsernameAndPassword.Unmarshal(m, b)
+}
+func (m *UsernameAndPassword) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UsernameAndPassword.Marshal(b, m, deterministic)
+}
+func (m *UsernameAndPassword) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UsernameAndPassword.Merge(m, src)
+}
+func (m *UsernameAndPassword) XXX_Size() int {
+	return xxx_messageInfo_UsernameAndPassword.Size(m)
+}
+func (m *UsernameAndPassword) XXX_DiscardUnknown() {
+	xxx_messageInfo_UsernameAndPassword.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UsernameAndPassword proto.InternalMessageInfo
+
+func (m *UsernameAndPassword) GetValidationScheme() int32 {
+	if m != nil {
+		return m.ValidationScheme
+	}
+	return 0
+}
+
+type SipResponseTable struct {
+	SipResponseCode      string   `protobuf:"bytes,1,opt,name=sipResponseCode,proto3" json:"sipResponseCode,omitempty"`
+	Tone                 string   `protobuf:"bytes,2,opt,name=tone,proto3" json:"tone,omitempty"`
+	TextMessage          string   `protobuf:"bytes,3,opt,name=textMessage,proto3" json:"textMessage,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *SipResponseTable) Reset()         { *m = SipResponseTable{} }
+func (m *SipResponseTable) String() string { return proto.CompactTextString(m) }
+func (*SipResponseTable) ProtoMessage()    {}
+func (*SipResponseTable) Descriptor() ([]byte, []int) {
+	return fileDescriptor_02a00a136081bca5, []int{15}
+}
+
+func (m *SipResponseTable) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SipResponseTable.Unmarshal(m, b)
+}
+func (m *SipResponseTable) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SipResponseTable.Marshal(b, m, deterministic)
+}
+func (m *SipResponseTable) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SipResponseTable.Merge(m, src)
+}
+func (m *SipResponseTable) XXX_Size() int {
+	return xxx_messageInfo_SipResponseTable.Size(m)
+}
+func (m *SipResponseTable) XXX_DiscardUnknown() {
+	xxx_messageInfo_SipResponseTable.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SipResponseTable proto.InternalMessageInfo
+
+func (m *SipResponseTable) GetSipResponseCode() string {
+	if m != nil {
+		return m.SipResponseCode
+	}
+	return ""
+}
+
+func (m *SipResponseTable) GetTone() string {
+	if m != nil {
+		return m.Tone
+	}
+	return ""
+}
+
+func (m *SipResponseTable) GetTextMessage() string {
+	if m != nil {
+		return m.TextMessage
+	}
+	return ""
+}
+
+type DialPlanTable struct {
+	DialPlanId           uint32   `protobuf:"varint,1,opt,name=dialPlanId,proto3" json:"dialPlanId,omitempty"`
+	Action               uint32   `protobuf:"varint,2,opt,name=action,proto3" json:"action,omitempty"`
+	DialPlanToken        string   `protobuf:"bytes,3,opt,name=dialPlanToken,proto3" json:"dialPlanToken,omitempty"`
+	DialPlanTableMaxSize uint32   `protobuf:"varint,4,opt,name=dialPlanTableMaxSize,proto3" json:"dialPlanTableMaxSize,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DialPlanTable) Reset()         { *m = DialPlanTable{} }
+func (m *DialPlanTable) String() string { return proto.CompactTextString(m) }
+func (*DialPlanTable) ProtoMessage()    {}
+func (*DialPlanTable) Descriptor() ([]byte, []int) {
+	return fileDescriptor_02a00a136081bca5, []int{16}
+}
+
+func (m *DialPlanTable) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DialPlanTable.Unmarshal(m, b)
+}
+func (m *DialPlanTable) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DialPlanTable.Marshal(b, m, deterministic)
+}
+func (m *DialPlanTable) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DialPlanTable.Merge(m, src)
+}
+func (m *DialPlanTable) XXX_Size() int {
+	return xxx_messageInfo_DialPlanTable.Size(m)
+}
+func (m *DialPlanTable) XXX_DiscardUnknown() {
+	xxx_messageInfo_DialPlanTable.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DialPlanTable proto.InternalMessageInfo
+
+func (m *DialPlanTable) GetDialPlanId() uint32 {
+	if m != nil {
+		return m.DialPlanId
+	}
+	return 0
+}
+
+func (m *DialPlanTable) GetAction() uint32 {
+	if m != nil {
+		return m.Action
+	}
+	return 0
+}
+
+func (m *DialPlanTable) GetDialPlanToken() string {
+	if m != nil {
+		return m.DialPlanToken
+	}
+	return ""
+}
+
+func (m *DialPlanTable) GetDialPlanTableMaxSize() uint32 {
+	if m != nil {
+		return m.DialPlanTableMaxSize
+	}
+	return 0
+}
+
+type VoipFeatureAccessCodes struct {
+	CancelCallWaiting        string   `protobuf:"bytes,1,opt,name=cancelCallWaiting,proto3" json:"cancelCallWaiting,omitempty"`
+	CallHold                 string   `protobuf:"bytes,2,opt,name=callHold,proto3" json:"callHold,omitempty"`
+	CallPark                 string   `protobuf:"bytes,3,opt,name=callPark,proto3" json:"callPark,omitempty"`
+	CallerIdActivate         string   `protobuf:"bytes,4,opt,name=callerIdActivate,proto3" json:"callerIdActivate,omitempty"`
+	CallerIdDeactivate       string   `protobuf:"bytes,5,opt,name=callerIdDeactivate,proto3" json:"callerIdDeactivate,omitempty"`
+	DoNotDisturbActivation   string   `protobuf:"bytes,6,opt,name=doNotDisturbActivation,proto3" json:"doNotDisturbActivation,omitempty"`
+	DoNotDisturbDeactivation string   `protobuf:"bytes,7,opt,name=doNotDisturbDeactivation,proto3" json:"doNotDisturbDeactivation,omitempty"`
+	DoNotDisturbPinChange    string   `protobuf:"bytes,8,opt,name=doNotDisturbPinChange,proto3" json:"doNotDisturbPinChange,omitempty"`
+	EmergencyServiceNumber   string   `protobuf:"bytes,9,opt,name=emergencyServiceNumber,proto3" json:"emergencyServiceNumber,omitempty"`
+	IntercomService          string   `protobuf:"bytes,10,opt,name=intercomService,proto3" json:"intercomService,omitempty"`
+	UnattendedCallTransfer   string   `protobuf:"bytes,11,opt,name=unattendedCallTransfer,proto3" json:"unattendedCallTransfer,omitempty"`
+	AttendedCallTransfer     string   `protobuf:"bytes,12,opt,name=attendedCallTransfer,proto3" json:"attendedCallTransfer,omitempty"`
+	XXX_NoUnkeyedLiteral     struct{} `json:"-"`
+	XXX_unrecognized         []byte   `json:"-"`
+	XXX_sizecache            int32    `json:"-"`
+}
+
+func (m *VoipFeatureAccessCodes) Reset()         { *m = VoipFeatureAccessCodes{} }
+func (m *VoipFeatureAccessCodes) String() string { return proto.CompactTextString(m) }
+func (*VoipFeatureAccessCodes) ProtoMessage()    {}
+func (*VoipFeatureAccessCodes) Descriptor() ([]byte, []int) {
+	return fileDescriptor_02a00a136081bca5, []int{17}
+}
+
+func (m *VoipFeatureAccessCodes) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_VoipFeatureAccessCodes.Unmarshal(m, b)
+}
+func (m *VoipFeatureAccessCodes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_VoipFeatureAccessCodes.Marshal(b, m, deterministic)
+}
+func (m *VoipFeatureAccessCodes) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_VoipFeatureAccessCodes.Merge(m, src)
+}
+func (m *VoipFeatureAccessCodes) XXX_Size() int {
+	return xxx_messageInfo_VoipFeatureAccessCodes.Size(m)
+}
+func (m *VoipFeatureAccessCodes) XXX_DiscardUnknown() {
+	xxx_messageInfo_VoipFeatureAccessCodes.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_VoipFeatureAccessCodes proto.InternalMessageInfo
+
+func (m *VoipFeatureAccessCodes) GetCancelCallWaiting() string {
+	if m != nil {
+		return m.CancelCallWaiting
+	}
+	return ""
+}
+
+func (m *VoipFeatureAccessCodes) GetCallHold() string {
+	if m != nil {
+		return m.CallHold
+	}
+	return ""
+}
+
+func (m *VoipFeatureAccessCodes) GetCallPark() string {
+	if m != nil {
+		return m.CallPark
+	}
+	return ""
+}
+
+func (m *VoipFeatureAccessCodes) GetCallerIdActivate() string {
+	if m != nil {
+		return m.CallerIdActivate
+	}
+	return ""
+}
+
+func (m *VoipFeatureAccessCodes) GetCallerIdDeactivate() string {
+	if m != nil {
+		return m.CallerIdDeactivate
+	}
+	return ""
+}
+
+func (m *VoipFeatureAccessCodes) GetDoNotDisturbActivation() string {
+	if m != nil {
+		return m.DoNotDisturbActivation
+	}
+	return ""
+}
+
+func (m *VoipFeatureAccessCodes) GetDoNotDisturbDeactivation() string {
+	if m != nil {
+		return m.DoNotDisturbDeactivation
+	}
+	return ""
+}
+
+func (m *VoipFeatureAccessCodes) GetDoNotDisturbPinChange() string {
+	if m != nil {
+		return m.DoNotDisturbPinChange
+	}
+	return ""
+}
+
+func (m *VoipFeatureAccessCodes) GetEmergencyServiceNumber() string {
+	if m != nil {
+		return m.EmergencyServiceNumber
+	}
+	return ""
+}
+
+func (m *VoipFeatureAccessCodes) GetIntercomService() string {
+	if m != nil {
+		return m.IntercomService
+	}
+	return ""
+}
+
+func (m *VoipFeatureAccessCodes) GetUnattendedCallTransfer() string {
+	if m != nil {
+		return m.UnattendedCallTransfer
+	}
+	return ""
+}
+
+func (m *VoipFeatureAccessCodes) GetAttendedCallTransfer() string {
+	if m != nil {
+		return m.AttendedCallTransfer
+	}
+	return ""
+}
+
+type VoipApplicationServiceProfile struct {
+	CidFeatures                    uint32   `protobuf:"varint,1,opt,name=cidFeatures,proto3" json:"cidFeatures,omitempty"`
+	CallWaitingFeatures            uint32   `protobuf:"varint,2,opt,name=callWaitingFeatures,proto3" json:"callWaitingFeatures,omitempty"`
+	CallProgressOrTransferFeatures uint32   `protobuf:"varint,3,opt,name=callProgressOrTransferFeatures,proto3" json:"callProgressOrTransferFeatures,omitempty"`
+	CallPresentationFeatures       uint32   `protobuf:"varint,4,opt,name=callPresentationFeatures,proto3" json:"callPresentationFeatures,omitempty"`
+	DirectConnectFeature           uint32   `protobuf:"varint,5,opt,name=directConnectFeature,proto3" json:"directConnectFeature,omitempty"`
+	DirectConnectUriPointer        string   `protobuf:"bytes,6,opt,name=directConnectUriPointer,proto3" json:"directConnectUriPointer,omitempty"`
+	BridgedLineAgentUriPointer     string   `protobuf:"bytes,7,opt,name=bridgedLineAgentUriPointer,proto3" json:"bridgedLineAgentUriPointer,omitempty"`
+	ConferenceFactoryUriPointer    string   `protobuf:"bytes,8,opt,name=conferenceFactoryUriPointer,proto3" json:"conferenceFactoryUriPointer,omitempty"`
+	DialToneDelayTimer             uint32   `protobuf:"varint,9,opt,name=dialToneDelayTimer,proto3" json:"dialToneDelayTimer,omitempty"`
+	XXX_NoUnkeyedLiteral           struct{} `json:"-"`
+	XXX_unrecognized               []byte   `json:"-"`
+	XXX_sizecache                  int32    `json:"-"`
+}
+
+func (m *VoipApplicationServiceProfile) Reset()         { *m = VoipApplicationServiceProfile{} }
+func (m *VoipApplicationServiceProfile) String() string { return proto.CompactTextString(m) }
+func (*VoipApplicationServiceProfile) ProtoMessage()    {}
+func (*VoipApplicationServiceProfile) Descriptor() ([]byte, []int) {
+	return fileDescriptor_02a00a136081bca5, []int{18}
+}
+
+func (m *VoipApplicationServiceProfile) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_VoipApplicationServiceProfile.Unmarshal(m, b)
+}
+func (m *VoipApplicationServiceProfile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_VoipApplicationServiceProfile.Marshal(b, m, deterministic)
+}
+func (m *VoipApplicationServiceProfile) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_VoipApplicationServiceProfile.Merge(m, src)
+}
+func (m *VoipApplicationServiceProfile) XXX_Size() int {
+	return xxx_messageInfo_VoipApplicationServiceProfile.Size(m)
+}
+func (m *VoipApplicationServiceProfile) XXX_DiscardUnknown() {
+	xxx_messageInfo_VoipApplicationServiceProfile.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_VoipApplicationServiceProfile proto.InternalMessageInfo
+
+func (m *VoipApplicationServiceProfile) GetCidFeatures() uint32 {
+	if m != nil {
+		return m.CidFeatures
+	}
+	return 0
+}
+
+func (m *VoipApplicationServiceProfile) GetCallWaitingFeatures() uint32 {
+	if m != nil {
+		return m.CallWaitingFeatures
+	}
+	return 0
+}
+
+func (m *VoipApplicationServiceProfile) GetCallProgressOrTransferFeatures() uint32 {
+	if m != nil {
+		return m.CallProgressOrTransferFeatures
+	}
+	return 0
+}
+
+func (m *VoipApplicationServiceProfile) GetCallPresentationFeatures() uint32 {
+	if m != nil {
+		return m.CallPresentationFeatures
+	}
+	return 0
+}
+
+func (m *VoipApplicationServiceProfile) GetDirectConnectFeature() uint32 {
+	if m != nil {
+		return m.DirectConnectFeature
+	}
+	return 0
+}
+
+func (m *VoipApplicationServiceProfile) GetDirectConnectUriPointer() string {
+	if m != nil {
+		return m.DirectConnectUriPointer
+	}
+	return ""
+}
+
+func (m *VoipApplicationServiceProfile) GetBridgedLineAgentUriPointer() string {
+	if m != nil {
+		return m.BridgedLineAgentUriPointer
+	}
+	return ""
+}
+
+func (m *VoipApplicationServiceProfile) GetConferenceFactoryUriPointer() string {
+	if m != nil {
+		return m.ConferenceFactoryUriPointer
+	}
+	return ""
+}
+
+func (m *VoipApplicationServiceProfile) GetDialToneDelayTimer() uint32 {
+	if m != nil {
+		return m.DialToneDelayTimer
+	}
+	return 0
+}
+
+func init() {
+	proto.RegisterType((*VoipSystemProfileRequest)(nil), "voip_system_profile.VoipSystemProfileRequest")
+	proto.RegisterType((*VoipSystemProfile)(nil), "voip_system_profile.VoipSystemProfile")
+	proto.RegisterType((*VoipConfig)(nil), "voip_system_profile.VoipConfig")
+	proto.RegisterType((*IpHostConfig)(nil), "voip_system_profile.IpHostConfig")
+	proto.RegisterType((*TcpUdpConfig)(nil), "voip_system_profile.TcpUdpConfig")
+	proto.RegisterType((*VoipVoiceCtp)(nil), "voip_system_profile.VoipVoiceCtp")
+	proto.RegisterType((*VoipMediaProfile)(nil), "voip_system_profile.VoipMediaProfile")
+	proto.RegisterType((*VoiceServiceProfile)(nil), "voip_system_profile.VoiceServiceProfile")
+	proto.RegisterType((*RtpProfile)(nil), "voip_system_profile.RtpProfile")
+	proto.RegisterType((*PptpPotsUni)(nil), "voip_system_profile.PptpPotsUni")
+	proto.RegisterType((*SipConfig)(nil), "voip_system_profile.SipConfig")
+	proto.RegisterType((*SipUserData)(nil), "voip_system_profile.SipUserData")
+	proto.RegisterType((*SipAgentConfig)(nil), "voip_system_profile.SipAgentConfig")
+	proto.RegisterType((*NetworkDialPlan)(nil), "voip_system_profile.NetworkDialPlan")
+	proto.RegisterType((*UsernameAndPassword)(nil), "voip_system_profile.UsernameAndPassword")
+	proto.RegisterType((*SipResponseTable)(nil), "voip_system_profile.SipResponseTable")
+	proto.RegisterType((*DialPlanTable)(nil), "voip_system_profile.DialPlanTable")
+	proto.RegisterType((*VoipFeatureAccessCodes)(nil), "voip_system_profile.VoipFeatureAccessCodes")
+	proto.RegisterType((*VoipApplicationServiceProfile)(nil), "voip_system_profile.VoipApplicationServiceProfile")
+}
+
+func init() {
+	proto.RegisterFile("voltha_protos/voip_system_profile.proto", fileDescriptor_02a00a136081bca5)
+}
+
+var fileDescriptor_02a00a136081bca5 = []byte{
+	// 2057 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x58, 0x5f, 0x73, 0x1b, 0x49,
+	0x11, 0x2f, 0x3b, 0x4e, 0x2e, 0x1a, 0xdb, 0xf9, 0x33, 0x81, 0xa0, 0x0a, 0x77, 0x21, 0xec, 0x1d,
+	0x77, 0x29, 0xfe, 0xd8, 0x60, 0x9b, 0x2b, 0x0a, 0x28, 0xc0, 0xb1, 0x62, 0xe2, 0xe2, 0x9c, 0x88,
+	0x95, 0x63, 0xaa, 0xee, 0xe5, 0x6a, 0x3c, 0xdb, 0x5a, 0x0d, 0xde, 0x9d, 0x59, 0x66, 0x46, 0x8a,
+	0xc4, 0x23, 0x9f, 0x80, 0xa2, 0x0a, 0x78, 0xa6, 0xf8, 0x28, 0x3c, 0xf2, 0x06, 0x9f, 0x81, 0x4f,
+	0xc0, 0x0b, 0x8f, 0x54, 0xcf, 0xcc, 0x4a, 0xbb, 0xda, 0x5d, 0xc3, 0x9b, 0xe6, 0xf7, 0xeb, 0x6e,
+	0xb5, 0xba, 0x7b, 0xba, 0x7b, 0x44, 0x3e, 0x99, 0xa9, 0xcc, 0x4e, 0xd8, 0x17, 0x85, 0x56, 0x56,
+	0x99, 0xfd, 0x99, 0x12, 0xc5, 0x17, 0x66, 0x61, 0x2c, 0xe4, 0x08, 0x8d, 0x45, 0x06, 0x7b, 0x8e,
+	0xa2, 0x8f, 0x5a, 0xa8, 0x27, 0xef, 0xa7, 0x4a, 0xa5, 0x19, 0xec, 0xb3, 0x42, 0xec, 0x33, 0x29,
+	0x95, 0x65, 0x56, 0x28, 0x69, 0xbc, 0x4a, 0xf4, 0xbb, 0x0d, 0xd2, 0xbf, 0x54, 0xa2, 0x18, 0x39,
+	0xa5, 0xa1, 0xd7, 0x89, 0xe1, 0x37, 0x53, 0x30, 0x96, 0x3e, 0x20, 0xb7, 0xae, 0x61, 0xd1, 0xdf,
+	0x78, 0xb6, 0xf1, 0xbc, 0x17, 0xe3, 0x47, 0x7a, 0x41, 0x1e, 0xce, 0xd6, 0xa5, 0xfb, 0x9b, 0xcf,
+	0x36, 0x9e, 0x6f, 0x1f, 0x7c, 0xbc, 0xd7, 0xe6, 0x58, 0xd3, 0x76, 0xd3, 0x40, 0xf4, 0x87, 0x0d,
+	0xf2, 0xb0, 0x21, 0x48, 0x7f, 0x4c, 0x7a, 0x46, 0x14, 0x27, 0x4a, 0x8e, 0x45, 0xea, 0x7c, 0xd8,
+	0x3e, 0x78, 0xda, 0xfa, 0x1d, 0xa3, 0x52, 0x2a, 0x5e, 0x29, 0xd0, 0x9f, 0x12, 0x82, 0xb2, 0x41,
+	0xdd, 0xbb, 0xf8, 0xb5, 0x4e, 0x17, 0x83, 0x7e, 0x45, 0x25, 0xfa, 0xe3, 0x16, 0x21, 0x2b, 0x8a,
+	0xbe, 0x24, 0x3b, 0xa2, 0x78, 0xa5, 0x8c, 0xad, 0x39, 0xf4, 0xf5, 0x56, 0x8b, 0x67, 0x15, 0xc1,
+	0xb8, 0xa6, 0x86, 0x66, 0x2c, 0x2f, 0xde, 0x26, 0x75, 0xc7, 0xda, 0xcd, 0x5c, 0x54, 0x04, 0xe3,
+	0x9a, 0x1a, 0x9a, 0x41, 0x8d, 0x4b, 0x25, 0x38, 0x9c, 0xd8, 0xa2, 0x7f, 0xeb, 0x06, 0x33, 0x97,
+	0x15, 0xc1, 0xb8, 0xa6, 0x46, 0x7f, 0x49, 0x1e, 0xe0, 0xf9, 0x1c, 0x12, 0xc1, 0xca, 0x6c, 0x6e,
+	0x39, 0x53, 0xdf, 0xe8, 0x34, 0x55, 0x15, 0x8e, 0x1b, 0xea, 0xf4, 0x73, 0x82, 0x55, 0xc8, 0x61,
+	0x04, 0x7a, 0x26, 0x38, 0x94, 0x56, 0x6f, 0x3b, 0xab, 0xcf, 0xbb, 0xac, 0xae, 0xcb, 0xc7, 0x6d,
+	0x46, 0x30, 0xa7, 0xda, 0x16, 0xa5, 0xc9, 0x3b, 0x37, 0xe4, 0x34, 0x5e, 0x8a, 0xc5, 0x15, 0x15,
+	0xfa, 0x82, 0x6c, 0x17, 0x85, 0x2d, 0x86, 0xca, 0x9a, 0xb7, 0x52, 0xf4, 0xdf, 0x73, 0x16, 0x9e,
+	0xb5, 0x5a, 0x18, 0xae, 0xe4, 0xe2, 0xaa, 0x52, 0xf4, 0xfb, 0x4d, 0xb2, 0x53, 0x4d, 0x30, 0x7d,
+	0x9f, 0xf4, 0x44, 0xf1, 0xa6, 0x70, 0xb7, 0xca, 0x95, 0xc5, 0x6e, 0xbc, 0x02, 0xe8, 0x47, 0x64,
+	0x57, 0xc9, 0xe9, 0x59, 0x02, 0xd2, 0x8a, 0xb1, 0x00, 0xed, 0x32, 0xde, 0x8b, 0xeb, 0xa0, 0xb7,
+	0x71, 0x9c, 0x24, 0x1a, 0x8c, 0x71, 0xc9, 0xec, 0xc5, 0x2b, 0x80, 0x52, 0xb2, 0x95, 0x33, 0x73,
+	0xed, 0x52, 0xd3, 0x8b, 0xdd, 0x67, 0xda, 0x27, 0xef, 0xa5, 0xcc, 0xc2, 0x3b, 0xb6, 0x70, 0xb1,
+	0xed, 0xc5, 0xe5, 0x91, 0x3e, 0x25, 0xa4, 0xd0, 0x22, 0x67, 0x7a, 0x31, 0x90, 0xc6, 0x45, 0xa9,
+	0x17, 0x57, 0x10, 0x1a, 0x91, 0x1d, 0x03, 0x5c, 0xc9, 0x24, 0x48, 0xbc, 0xe7, 0x24, 0x6a, 0x18,
+	0xfd, 0x36, 0x79, 0xa8, 0x21, 0x63, 0x8b, 0xe3, 0x14, 0xa4, 0x2d, 0x7f, 0xdb, 0x5d, 0x27, 0xd8,
+	0x24, 0xa2, 0x53, 0xb2, 0x53, 0xad, 0x55, 0xfa, 0x84, 0xdc, 0x75, 0xdd, 0x85, 0xab, 0x2c, 0x04,
+	0x64, 0x79, 0x46, 0xce, 0x2a, 0x73, 0x2a, 0x20, 0x4b, 0x42, 0x28, 0x96, 0xe7, 0xe8, 0x53, 0xb2,
+	0x53, 0x2d, 0x56, 0xfa, 0x31, 0xb9, 0x67, 0x44, 0x2a, 0x59, 0x96, 0x09, 0x99, 0x9e, 0xa8, 0x04,
+	0x82, 0xb5, 0x35, 0x34, 0xfa, 0xd3, 0x6d, 0xf2, 0x60, 0xbd, 0x34, 0x31, 0x40, 0x63, 0x36, 0x3f,
+	0x5f, 0x69, 0x95, 0x47, 0xfa, 0x9c, 0xdc, 0xe7, 0x2a, 0x01, 0x3e, 0x82, 0x0c, 0x38, 0xfe, 0x82,
+	0xef, 0x39, 0x4f, 0x76, 0xe3, 0x75, 0x98, 0x7e, 0x4a, 0x1e, 0x17, 0x8c, 0x5f, 0x83, 0x1d, 0x82,
+	0x16, 0x2a, 0xa9, 0x28, 0xdc, 0x72, 0x0a, 0x1d, 0x2c, 0xfd, 0x2e, 0x79, 0x64, 0x44, 0x06, 0x92,
+	0xc3, 0x68, 0x5a, 0x14, 0x98, 0x43, 0xa7, 0xb4, 0xe5, 0x94, 0xda, 0xa8, 0xa6, 0x4f, 0x07, 0x2e,
+	0xad, 0x0d, 0x9f, 0x0e, 0x3a, 0x7d, 0x3a, 0x70, 0xa9, 0xee, 0xf2, 0xe9, 0xa0, 0xdd, 0xa7, 0x03,
+	0x97, 0xfd, 0x56, 0x9f, 0x0e, 0x9a, 0x3e, 0x1d, 0xba, 0x12, 0x68, 0xf8, 0x74, 0xd8, 0xe9, 0xd3,
+	0x61, 0xbf, 0x77, 0x83, 0x4f, 0x87, 0xed, 0x3e, 0x1d, 0xf6, 0x49, 0x97, 0x4f, 0x87, 0x4d, 0x9f,
+	0x8e, 0xfa, 0xdb, 0x6d, 0x3e, 0x1d, 0x75, 0xfa, 0x74, 0xd4, 0xdf, 0xb9, 0xc1, 0xa7, 0xa3, 0x76,
+	0x9f, 0x8e, 0xfa, 0xbb, 0x5d, 0x3e, 0x1d, 0x61, 0xa5, 0x29, 0x75, 0x35, 0xb0, 0xf9, 0xb8, 0x7f,
+	0xcf, 0x57, 0x5a, 0x38, 0x46, 0xff, 0xde, 0x24, 0x8f, 0x5a, 0xba, 0x1b, 0xfd, 0x26, 0x79, 0x80,
+	0xa3, 0x78, 0x2a, 0x39, 0xe4, 0x20, 0xed, 0xc5, 0xa2, 0x28, 0x8b, 0xb4, 0x81, 0xe3, 0x75, 0xfd,
+	0xb5, 0xb0, 0x16, 0xf4, 0x05, 0xd3, 0x29, 0xd8, 0x50, 0xaa, 0x35, 0x0c, 0xa3, 0xe2, 0xcf, 0x2f,
+	0xa6, 0xe3, 0x31, 0xe8, 0x73, 0x36, 0x0f, 0x05, 0xba, 0x0e, 0x63, 0x3b, 0x02, 0x3e, 0x51, 0x27,
+	0x4c, 0x72, 0xc8, 0xce, 0x64, 0xe2, 0x6a, 0xf2, 0x6e, 0x5c, 0x07, 0x31, 0x06, 0x85, 0xb1, 0x72,
+	0x18, 0x2e, 0xed, 0x25, 0xd3, 0x82, 0x49, 0x1b, 0x2a, 0xb2, 0x8d, 0x42, 0x0f, 0x12, 0x9b, 0x8f,
+	0x07, 0x22, 0x15, 0xf6, 0x33, 0x98, 0x41, 0x66, 0x42, 0x39, 0xae, 0xc3, 0xd8, 0x5a, 0x96, 0xd0,
+	0x60, 0xaa, 0xdd, 0x36, 0x12, 0xaa, 0xb0, 0x49, 0xd0, 0x03, 0xf2, 0xa5, 0x89, 0x52, 0xd7, 0xa7,
+	0x19, 0x33, 0x93, 0x73, 0x21, 0x45, 0x3e, 0xcd, 0x2f, 0x44, 0x0e, 0xa1, 0x10, 0x5b, 0xb9, 0xe8,
+	0x3f, 0x1b, 0x84, 0xac, 0x06, 0x00, 0x06, 0x30, 0x53, 0x9c, 0x65, 0x43, 0xa5, 0xed, 0xb9, 0x90,
+	0x21, 0xd0, 0x35, 0xac, 0x2e, 0xc3, 0xe6, 0x65, 0x90, 0xab, 0x18, 0x76, 0xae, 0xc4, 0xf0, 0xe2,
+	0x9c, 0xe9, 0xeb, 0xd0, 0xa2, 0x97, 0x67, 0xfc, 0xf9, 0x85, 0x48, 0xd3, 0xc5, 0x0b, 0xc6, 0xaf,
+	0x5f, 0xce, 0x40, 0x5a, 0x13, 0x2e, 0xfb, 0x3a, 0x8c, 0xdd, 0xd9, 0x2a, 0x09, 0x41, 0xc8, 0x47,
+	0xb4, 0x82, 0x20, 0x8f, 0x51, 0x08, 0xbc, 0x8f, 0x61, 0x05, 0xc1, 0x49, 0xc1, 0x99, 0x09, 0xb4,
+	0x0f, 0xdb, 0x0a, 0x88, 0xfe, 0xb6, 0x49, 0xb6, 0x2b, 0x93, 0x0b, 0x37, 0x38, 0xa6, 0x79, 0xb9,
+	0xc1, 0x31, 0xcd, 0xe9, 0x33, 0xb2, 0xcd, 0x34, 0x3f, 0x93, 0x16, 0xf4, 0x8c, 0x65, 0xa1, 0x05,
+	0x57, 0x21, 0x37, 0x8b, 0xf2, 0x02, 0x12, 0xac, 0x86, 0x50, 0x46, 0x2b, 0x00, 0x4b, 0xd7, 0x6a,
+	0x26, 0x4d, 0x2e, 0x5c, 0xf5, 0x0f, 0x99, 0x9d, 0x84, 0x9f, 0xda, 0xc0, 0xe9, 0x63, 0x72, 0x47,
+	0xcf, 0x7f, 0xce, 0x84, 0x74, 0xbf, 0xf3, 0x61, 0x1c, 0x4e, 0x88, 0x5b, 0x8f, 0xdf, 0xf1, 0xb8,
+	0x3f, 0xa1, 0xed, 0x42, 0x59, 0xf3, 0x4a, 0x65, 0xc9, 0x9b, 0x19, 0x68, 0x97, 0x68, 0xff, 0x13,
+	0x1b, 0x38, 0xdd, 0x23, 0x54, 0xaa, 0x5c, 0x48, 0x96, 0x9d, 0x02, 0x24, 0x97, 0x2a, 0xb3, 0x2c,
+	0x2d, 0xcb, 0xa2, 0x85, 0x41, 0xdb, 0x99, 0x32, 0xe6, 0xcd, 0x78, 0xa4, 0xc6, 0x76, 0xf4, 0x4e,
+	0x58, 0x3e, 0x09, 0xcd, 0xa9, 0x81, 0x47, 0x7f, 0xbf, 0x45, 0x7a, 0xcb, 0xa5, 0x12, 0x97, 0x06,
+	0x23, 0x8a, 0xb7, 0x06, 0xf4, 0x80, 0x59, 0x16, 0x16, 0xbf, 0x67, 0x5d, 0x9b, 0x68, 0x29, 0x17,
+	0x57, 0x95, 0xe8, 0x2f, 0x70, 0x92, 0x15, 0x6e, 0x68, 0xd6, 0x16, 0xbf, 0x0f, 0xbb, 0xcc, 0x54,
+	0x44, 0xe3, 0x35, 0x55, 0xfa, 0x9a, 0xdc, 0x97, 0x60, 0xdf, 0x29, 0x7d, 0x3d, 0x10, 0x2c, 0x1b,
+	0x66, 0x4c, 0x86, 0xfd, 0xef, 0xa3, 0x56, 0x6b, 0xaf, 0xeb, 0xb2, 0xf1, 0xba, 0x32, 0xe5, 0xe4,
+	0x31, 0xea, 0x9d, 0x02, 0xb3, 0x53, 0x0d, 0xc7, 0x9c, 0x83, 0x31, 0x38, 0x57, 0x4d, 0xd8, 0x05,
+	0xbf, 0xd5, 0xb9, 0x0b, 0x36, 0x55, 0xe2, 0x0e, 0x53, 0x74, 0x4e, 0x3e, 0x40, 0xe6, 0xb8, 0x28,
+	0x32, 0xc1, 0xdd, 0xdd, 0x6e, 0xdd, 0x10, 0x0f, 0x3a, 0xbf, 0xab, 0x53, 0x33, 0xbe, 0xd9, 0x70,
+	0xf4, 0xcf, 0x4d, 0xb2, 0x5d, 0x49, 0x0c, 0xde, 0x80, 0xa9, 0x01, 0x3d, 0x64, 0xda, 0x1e, 0x2b,
+	0x1d, 0xee, 0x46, 0x15, 0xc2, 0x1d, 0x16, 0x8f, 0x92, 0xe5, 0x70, 0x2c, 0x93, 0x21, 0x33, 0xe6,
+	0x9d, 0xd2, 0x49, 0x48, 0x59, 0xfb, 0x0e, 0xfb, 0xb6, 0x29, 0x1f, 0xb7, 0x19, 0xa1, 0x47, 0xe4,
+	0xcb, 0x6e, 0xb5, 0xcd, 0x99, 0xc8, 0xd0, 0x51, 0xd0, 0xe8, 0x9b, 0x16, 0xa1, 0xa5, 0xb4, 0x93,
+	0x74, 0x48, 0x3e, 0x5c, 0x11, 0xd3, 0x2b, 0xc3, 0xb5, 0x70, 0xbb, 0xd7, 0xcb, 0x79, 0x21, 0x7c,
+	0xa7, 0x74, 0x97, 0x05, 0xf3, 0x75, 0x3b, 0xfe, 0x7f, 0x44, 0xb1, 0xe3, 0x69, 0xc8, 0x80, 0x19,
+	0xc0, 0xa3, 0x76, 0xe1, 0xbf, 0x1d, 0xd7, 0x30, 0xec, 0x78, 0x5a, 0x4d, 0x3c, 0x7f, 0xc7, 0xf1,
+	0xcb, 0x73, 0xf4, 0xd7, 0x2d, 0x72, 0xaf, 0x5e, 0xa7, 0xd8, 0xab, 0xd5, 0xd4, 0x5e, 0xa9, 0xa9,
+	0x4c, 0x86, 0x5a, 0xcd, 0x17, 0xe5, 0x3e, 0xeb, 0x23, 0xdc, 0xca, 0xe1, 0x3c, 0x0a, 0xab, 0xe9,
+	0x48, 0x14, 0xb8, 0x8d, 0x86, 0xf5, 0xb8, 0x06, 0x62, 0x7b, 0x5d, 0xae, 0xa7, 0x41, 0xce, 0x87,
+	0x6b, 0x1d, 0x46, 0x7b, 0x46, 0x14, 0x31, 0xa4, 0x2f, 0xe7, 0x45, 0x25, 0x24, 0x75, 0x10, 0x93,
+	0xe0, 0x00, 0x0d, 0xe9, 0x2b, 0x60, 0xc9, 0xc8, 0x32, 0x6d, 0x9d, 0xb4, 0x8f, 0x42, 0x3b, 0x89,
+	0x21, 0x1b, 0x39, 0x33, 0xc2, 0x58, 0xcd, 0x74, 0x58, 0xad, 0x6b, 0x18, 0xb6, 0x6f, 0xb3, 0x6a,
+	0x30, 0x7e, 0xb5, 0xae, 0x20, 0xf8, 0xe2, 0x72, 0xc6, 0x4d, 0xa1, 0xa4, 0x81, 0x0b, 0x76, 0x95,
+	0xf9, 0xa6, 0xd5, 0xf5, 0xe2, 0x1a, 0xad, 0x09, 0xc7, 0x0d, 0x75, 0xfa, 0x43, 0xd2, 0x37, 0xe5,
+	0x7b, 0xe3, 0xc2, 0xb7, 0x60, 0xcc, 0x88, 0xd5, 0x2a, 0x73, 0x1d, 0xee, 0x6e, 0xdc, 0xc9, 0xbb,
+	0xb7, 0x80, 0xab, 0xb0, 0x53, 0xa5, 0x73, 0x66, 0xdd, 0xe6, 0x85, 0x6f, 0x81, 0x0a, 0x86, 0xf6,
+	0x35, 0x24, 0x53, 0x99, 0x30, 0x69, 0xcb, 0x8c, 0x0f, 0x95, 0xc0, 0x71, 0xe1, 0x76, 0xaf, 0x5e,
+	0xdc, 0xc9, 0x47, 0xff, 0xda, 0x20, 0xf7, 0xd7, 0xfa, 0x0f, 0x2e, 0x17, 0x5c, 0x0b, 0x2b, 0x38,
+	0xcb, 0x10, 0xc3, 0xd0, 0xaa, 0xa9, 0x0d, 0x63, 0xb9, 0x8d, 0xc2, 0x5e, 0x5f, 0x30, 0x6d, 0x45,
+	0x5d, 0xc1, 0xcf, 0xe8, 0x16, 0x06, 0xdf, 0x0d, 0x49, 0xf8, 0xb6, 0xf0, 0xbb, 0xfc, 0x18, 0x5b,
+	0x43, 0xe9, 0x2b, 0xb2, 0x5b, 0x22, 0x3e, 0x13, 0xbe, 0xdf, 0x45, 0xad, 0x99, 0x18, 0x54, 0x25,
+	0xe3, 0xba, 0x62, 0x74, 0x4c, 0x1e, 0xb5, 0x74, 0x00, 0x1c, 0x3a, 0x33, 0x96, 0x89, 0xc4, 0xb7,
+	0x25, 0x3e, 0x81, 0xdc, 0xef, 0x79, 0xb7, 0xe3, 0x06, 0x1e, 0x69, 0xf2, 0x60, 0x3d, 0xd9, 0xae,
+	0xee, 0x57, 0xd8, 0xf2, 0x05, 0x84, 0x75, 0x5f, 0x87, 0xf1, 0x89, 0x88, 0x4b, 0x44, 0xb8, 0x3e,
+	0xee, 0x33, 0x36, 0x3a, 0x0b, 0x73, 0x7b, 0x0e, 0xc6, 0xe0, 0x6c, 0xf4, 0x37, 0xa6, 0x0a, 0x45,
+	0x7f, 0xd9, 0x20, 0xbb, 0xb5, 0xdf, 0xe5, 0xd6, 0x8f, 0x00, 0x9c, 0x25, 0x21, 0x27, 0x15, 0x04,
+	0x47, 0x37, 0x73, 0x8b, 0x72, 0x08, 0x7f, 0x38, 0xe1, 0xbd, 0x5b, 0x46, 0x44, 0x5d, 0x83, 0x0c,
+	0xdf, 0x56, 0x07, 0xb1, 0x43, 0xd4, 0xe2, 0x76, 0xce, 0xe6, 0x23, 0xf1, 0x5b, 0x08, 0x0b, 0x44,
+	0x2b, 0x17, 0xfd, 0x63, 0x8b, 0x3c, 0x6e, 0x9f, 0x35, 0xb8, 0x4a, 0x72, 0xb7, 0xb3, 0x9e, 0xb0,
+	0x2c, 0xfb, 0x15, 0x13, 0x56, 0xc8, 0x34, 0x04, 0xa8, 0x49, 0x60, 0x37, 0xe3, 0x2c, 0xcb, 0x70,
+	0x8b, 0x28, 0x5f, 0x9e, 0xe5, 0xb9, 0xe4, 0x86, 0x95, 0xdd, 0xae, 0x3c, 0x63, 0x12, 0xf1, 0x33,
+	0xe8, 0xb3, 0xe4, 0x98, 0x5b, 0x31, 0x63, 0x16, 0xc2, 0x4b, 0xbc, 0x81, 0x63, 0xa5, 0x96, 0xd8,
+	0x00, 0x58, 0x29, 0xed, 0x1f, 0xe8, 0x2d, 0x0c, 0x3e, 0x52, 0x12, 0xf5, 0x5a, 0xd9, 0x81, 0x30,
+	0x76, 0xaa, 0xaf, 0x82, 0x1d, 0x0c, 0xaf, 0x6f, 0x2e, 0x1d, 0x2c, 0xde, 0xc9, 0x2a, 0xb3, 0xb4,
+	0x58, 0xee, 0xd2, 0xbd, 0xb8, 0x93, 0xc7, 0xe6, 0x57, 0xe5, 0x86, 0x42, 0x9e, 0x4c, 0x98, 0x0c,
+	0xcb, 0x53, 0x2f, 0x6e, 0x27, 0xd1, 0x53, 0xc8, 0x41, 0xa7, 0x20, 0xf9, 0x22, 0x0c, 0xd8, 0xd7,
+	0xd3, 0xfc, 0x0a, 0xb4, 0xeb, 0x31, 0xbd, 0xb8, 0x83, 0xc5, 0x12, 0x76, 0xad, 0x80, 0xab, 0x3c,
+	0x10, 0xa1, 0xc9, 0xac, 0xc3, 0xf8, 0x0d, 0x53, 0xc9, 0xac, 0x05, 0x99, 0x40, 0x82, 0x89, 0x73,
+	0xcd, 0x6a, 0xbc, 0xec, 0x32, 0x1d, 0x2c, 0x16, 0x55, 0xab, 0xd6, 0x8e, 0x1f, 0x3b, 0x6d, 0x5c,
+	0xf4, 0xe7, 0x2d, 0xf2, 0xc1, 0x8d, 0x4b, 0x05, 0x5e, 0x1e, 0x2e, 0x92, 0x50, 0x74, 0xe5, 0xff,
+	0x3a, 0x55, 0xc8, 0xf5, 0xb1, 0x55, 0x79, 0x2d, 0x25, 0x37, 0x43, 0x1f, 0x6b, 0x52, 0xf4, 0x94,
+	0x3c, 0x75, 0x55, 0xa5, 0x55, 0x8a, 0xc3, 0xef, 0x8d, 0x2e, 0xfd, 0x59, 0x2a, 0xfb, 0x3e, 0xf5,
+	0x3f, 0xa4, 0x30, 0xfb, 0x5e, 0x02, 0x0c, 0x48, 0xff, 0x7f, 0xee, 0xd2, 0x82, 0xbf, 0x4a, 0x9d,
+	0xbc, 0xbf, 0x82, 0x1a, 0x38, 0x8e, 0x00, 0x09, 0xdc, 0x06, 0x22, 0xbc, 0x44, 0x5a, 0x39, 0xfa,
+	0x03, 0xf2, 0x95, 0x1a, 0xfe, 0x56, 0x8b, 0x72, 0x00, 0xf8, 0x32, 0xed, 0xa2, 0xe9, 0x4f, 0xc8,
+	0x93, 0x2b, 0x2d, 0x92, 0x14, 0x92, 0xcf, 0x84, 0x04, 0x37, 0x1a, 0x2a, 0xca, 0xbe, 0x52, 0x6f,
+	0x90, 0xa0, 0x3f, 0x23, 0x5f, 0xe5, 0x4a, 0x8e, 0x41, 0xe3, 0xa3, 0xfb, 0x94, 0x71, 0xab, 0xf4,
+	0xa2, 0x62, 0xc0, 0x57, 0xec, 0x4d, 0x22, 0x78, 0x23, 0xb1, 0xad, 0x5c, 0x28, 0x09, 0x03, 0xc8,
+	0xd8, 0xc2, 0x6f, 0x33, 0x7e, 0xf3, 0x6f, 0x61, 0x5e, 0x8c, 0xc9, 0x27, 0x4a, 0xa7, 0x7b, 0xaa,
+	0x00, 0xc9, 0x95, 0x4e, 0xf6, 0xfc, 0x7f, 0xef, 0x6d, 0x13, 0xe1, 0xf3, 0x1f, 0xa5, 0xc2, 0x4e,
+	0xa6, 0x57, 0x7b, 0x5c, 0xe5, 0xfb, 0xa5, 0xfc, 0xbe, 0x97, 0xff, 0x4e, 0xf9, 0x5f, 0xfd, 0xf7,
+	0xf7, 0x53, 0xd5, 0xf6, 0x8f, 0xfd, 0xd5, 0x1d, 0x27, 0x71, 0xf8, 0xdf, 0x00, 0x00, 0x00, 0xff,
+	0xff, 0xac, 0x32, 0x52, 0x2e, 0xdd, 0x17, 0x00, 0x00,
+}
diff --git a/go/voip_user_profile/voip_user_profile.pb.go b/go/voip_user_profile/voip_user_profile.pb.go
new file mode 100644
index 0000000..a4f90f7
--- /dev/null
+++ b/go/voip_user_profile/voip_user_profile.pb.go
@@ -0,0 +1,200 @@
+// Code generated by protoc-gen-go. DO NOT EDIT.
+// source: voltha_protos/voip_user_profile.proto
+
+package voip_user_profile
+
+import (
+	fmt "fmt"
+	proto "github.com/golang/protobuf/proto"
+	_ "google.golang.org/genproto/googleapis/api/annotations"
+	math "math"
+)
+
+// 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
+
+// A user specific profile for voip service
+type VoipUserProfileRequest struct {
+	// for the path in KV store
+	Key                  string           `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
+	VoipUserProfile      *VoipUserProfile `protobuf:"bytes,2,opt,name=voipUserProfile,proto3" json:"voipUserProfile,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}         `json:"-"`
+	XXX_unrecognized     []byte           `json:"-"`
+	XXX_sizecache        int32            `json:"-"`
+}
+
+func (m *VoipUserProfileRequest) Reset()         { *m = VoipUserProfileRequest{} }
+func (m *VoipUserProfileRequest) String() string { return proto.CompactTextString(m) }
+func (*VoipUserProfileRequest) ProtoMessage()    {}
+func (*VoipUserProfileRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0ecf0ef501fce1bc, []int{0}
+}
+
+func (m *VoipUserProfileRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_VoipUserProfileRequest.Unmarshal(m, b)
+}
+func (m *VoipUserProfileRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_VoipUserProfileRequest.Marshal(b, m, deterministic)
+}
+func (m *VoipUserProfileRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_VoipUserProfileRequest.Merge(m, src)
+}
+func (m *VoipUserProfileRequest) XXX_Size() int {
+	return xxx_messageInfo_VoipUserProfileRequest.Size(m)
+}
+func (m *VoipUserProfileRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_VoipUserProfileRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_VoipUserProfileRequest proto.InternalMessageInfo
+
+func (m *VoipUserProfileRequest) GetKey() string {
+	if m != nil {
+		return m.Key
+	}
+	return ""
+}
+
+func (m *VoipUserProfileRequest) GetVoipUserProfile() *VoipUserProfile {
+	if m != nil {
+		return m.VoipUserProfile
+	}
+	return nil
+}
+
+type VoipUserProfile struct {
+	VoipSystemProfileKey string   `protobuf:"bytes,1,opt,name=voipSystemProfileKey,proto3" json:"voipSystemProfileKey,omitempty"`
+	Username             string   `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"`
+	Password             string   `protobuf:"bytes,3,opt,name=password,proto3" json:"password,omitempty"`
+	Domain               string   `protobuf:"bytes,4,opt,name=domain,proto3" json:"domain,omitempty"`
+	Proxy                string   `protobuf:"bytes,5,opt,name=proxy,proto3" json:"proxy,omitempty"`
+	Port                 uint32   `protobuf:"varint,6,opt,name=port,proto3" json:"port,omitempty"`
+	SipDisplayName       string   `protobuf:"bytes,7,opt,name=sipDisplayName,proto3" json:"sipDisplayName,omitempty"`
+	Realm                string   `protobuf:"bytes,8,opt,name=realm,proto3" json:"realm,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *VoipUserProfile) Reset()         { *m = VoipUserProfile{} }
+func (m *VoipUserProfile) String() string { return proto.CompactTextString(m) }
+func (*VoipUserProfile) ProtoMessage()    {}
+func (*VoipUserProfile) Descriptor() ([]byte, []int) {
+	return fileDescriptor_0ecf0ef501fce1bc, []int{1}
+}
+
+func (m *VoipUserProfile) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_VoipUserProfile.Unmarshal(m, b)
+}
+func (m *VoipUserProfile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_VoipUserProfile.Marshal(b, m, deterministic)
+}
+func (m *VoipUserProfile) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_VoipUserProfile.Merge(m, src)
+}
+func (m *VoipUserProfile) XXX_Size() int {
+	return xxx_messageInfo_VoipUserProfile.Size(m)
+}
+func (m *VoipUserProfile) XXX_DiscardUnknown() {
+	xxx_messageInfo_VoipUserProfile.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_VoipUserProfile proto.InternalMessageInfo
+
+func (m *VoipUserProfile) GetVoipSystemProfileKey() string {
+	if m != nil {
+		return m.VoipSystemProfileKey
+	}
+	return ""
+}
+
+func (m *VoipUserProfile) GetUsername() string {
+	if m != nil {
+		return m.Username
+	}
+	return ""
+}
+
+func (m *VoipUserProfile) GetPassword() string {
+	if m != nil {
+		return m.Password
+	}
+	return ""
+}
+
+func (m *VoipUserProfile) GetDomain() string {
+	if m != nil {
+		return m.Domain
+	}
+	return ""
+}
+
+func (m *VoipUserProfile) GetProxy() string {
+	if m != nil {
+		return m.Proxy
+	}
+	return ""
+}
+
+func (m *VoipUserProfile) GetPort() uint32 {
+	if m != nil {
+		return m.Port
+	}
+	return 0
+}
+
+func (m *VoipUserProfile) GetSipDisplayName() string {
+	if m != nil {
+		return m.SipDisplayName
+	}
+	return ""
+}
+
+func (m *VoipUserProfile) GetRealm() string {
+	if m != nil {
+		return m.Realm
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterType((*VoipUserProfileRequest)(nil), "voip_user_profile.VoipUserProfileRequest")
+	proto.RegisterType((*VoipUserProfile)(nil), "voip_user_profile.VoipUserProfile")
+}
+
+func init() {
+	proto.RegisterFile("voltha_protos/voip_user_profile.proto", fileDescriptor_0ecf0ef501fce1bc)
+}
+
+var fileDescriptor_0ecf0ef501fce1bc = []byte{
+	// 322 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x52, 0xcb, 0x4b, 0x33, 0x31,
+	0x10, 0x67, 0xbf, 0x3e, 0xbe, 0x76, 0x44, 0xab, 0xa1, 0x94, 0x50, 0x3c, 0x94, 0x42, 0xa5, 0x17,
+	0x77, 0xa1, 0xe2, 0xc1, 0xab, 0x78, 0x53, 0x44, 0x56, 0xf4, 0xe0, 0xa5, 0xa4, 0x6d, 0xdc, 0x06,
+	0x77, 0x77, 0x62, 0x92, 0xd6, 0xee, 0x1f, 0x2f, 0x48, 0x92, 0x6e, 0xc1, 0x5d, 0x6f, 0xf3, 0x7b,
+	0xcd, 0x0c, 0xc9, 0xc0, 0x64, 0x8b, 0xa9, 0x59, 0xb3, 0xb9, 0x54, 0x68, 0x50, 0x47, 0x5b, 0x14,
+	0x72, 0xbe, 0xd1, 0x5c, 0x59, 0xe2, 0x5d, 0xa4, 0x3c, 0x74, 0x02, 0x39, 0xab, 0x09, 0xc3, 0xf3,
+	0x04, 0x31, 0x49, 0x79, 0xc4, 0xa4, 0x88, 0x58, 0x9e, 0xa3, 0x61, 0x46, 0x60, 0xae, 0x7d, 0x60,
+	0xbc, 0x83, 0xc1, 0x2b, 0x0a, 0xf9, 0xa2, 0xb9, 0x7a, 0xf2, 0x81, 0x98, 0x7f, 0x6e, 0xb8, 0x36,
+	0xe4, 0x14, 0x1a, 0x1f, 0xbc, 0xa0, 0xc1, 0x28, 0x98, 0x76, 0x63, 0x5b, 0x92, 0x07, 0xe8, 0x6d,
+	0x7f, 0x7b, 0xe9, 0xbf, 0x51, 0x30, 0x3d, 0x9a, 0x8d, 0xc3, 0xfa, 0x3e, 0xd5, 0xae, 0xd5, 0xe8,
+	0xf8, 0x3b, 0x80, 0x5e, 0xc5, 0x44, 0x66, 0xd0, 0xb7, 0xb6, 0xe7, 0x42, 0x1b, 0x9e, 0xed, 0xc9,
+	0xfb, 0xc3, 0x12, 0x7f, 0x6a, 0x64, 0x08, 0x1d, 0x3b, 0x38, 0x67, 0x99, 0x5f, 0xa7, 0x1b, 0x1f,
+	0xb0, 0xd5, 0x24, 0xd3, 0xfa, 0x0b, 0xd5, 0x8a, 0x36, 0xbc, 0x56, 0x62, 0x32, 0x80, 0xf6, 0x0a,
+	0x33, 0x26, 0x72, 0xda, 0x74, 0xca, 0x1e, 0x91, 0x3e, 0xb4, 0xa4, 0xc2, 0x5d, 0x41, 0x5b, 0x8e,
+	0xf6, 0x80, 0x10, 0x68, 0x4a, 0x54, 0x86, 0xb6, 0x47, 0xc1, 0xf4, 0x38, 0x76, 0x35, 0xb9, 0x80,
+	0x13, 0x2d, 0xe4, 0x9d, 0xd0, 0x32, 0x65, 0xc5, 0xa3, 0x9d, 0xff, 0xdf, 0x45, 0x2a, 0xac, 0xed,
+	0xa8, 0x38, 0x4b, 0x33, 0xda, 0xf1, 0x1d, 0x1d, 0xb8, 0x5d, 0xc0, 0x04, 0x55, 0x12, 0xa2, 0xe4,
+	0xf9, 0x12, 0xd5, 0x2a, 0xf4, 0x1f, 0x5c, 0x7f, 0xc9, 0xb7, 0x9b, 0x44, 0x98, 0xf5, 0x66, 0x11,
+	0x2e, 0x31, 0x8b, 0x4a, 0x77, 0xe4, 0xdd, 0x97, 0xe5, 0x39, 0x5c, 0x47, 0x09, 0xd6, 0x8f, 0x62,
+	0xd1, 0x76, 0xfa, 0xd5, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x84, 0x23, 0x54, 0x5a, 0x3e, 0x02,
+	0x00, 0x00,
+}
diff --git a/go/voltha/voltha.pb.go b/go/voltha/voltha.pb.go
index d157d23..acd0402 100644
--- a/go/voltha/voltha.pb.go
+++ b/go/voltha/voltha.pb.go
@@ -13,6 +13,8 @@
 	health "github.com/opencord/voltha-protos/v5/go/health"
 	omci "github.com/opencord/voltha-protos/v5/go/omci"
 	openflow_13 "github.com/opencord/voltha-protos/v5/go/openflow_13"
+	voip_system_profile "github.com/opencord/voltha-protos/v5/go/voip_system_profile"
+	voip_user_profile "github.com/opencord/voltha-protos/v5/go/voip_user_profile"
 	_ "google.golang.org/genproto/googleapis/api/annotations"
 	grpc "google.golang.org/grpc"
 	codes "google.golang.org/grpc/codes"
@@ -31,6 +33,9 @@
 // proto package needs to be updated.
 const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
 
+// Key from public import voltha_protos/common.proto
+type Key = common.Key
+
 // ID from public import voltha_protos/common.proto
 type ID = common.ID
 
@@ -304,141 +309,149 @@
 func init() { proto.RegisterFile("voltha_protos/voltha.proto", fileDescriptor_e084f1a60ce7016c) }
 
 var fileDescriptor_e084f1a60ce7016c = []byte{
-	// 2130 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0xeb, 0x6e, 0x1b, 0xb9,
-	0x15, 0xde, 0x71, 0x76, 0x73, 0xa1, 0x25, 0xdb, 0xa2, 0x7c, 0x91, 0x25, 0xf9, 0xc6, 0x64, 0xb3,
-	0x5e, 0x25, 0x91, 0x92, 0x38, 0xd9, 0xb6, 0xd9, 0x2e, 0x0a, 0xaf, 0x6f, 0xf5, 0x36, 0x81, 0x0d,
-	0x29, 0x71, 0xda, 0x62, 0xb3, 0xc2, 0x48, 0x43, 0xcb, 0x83, 0x8e, 0x66, 0xd4, 0x21, 0x65, 0x27,
-	0x30, 0xf6, 0x4f, 0x2f, 0x40, 0x8a, 0xa2, 0xe8, 0x8f, 0x7d, 0x8b, 0x3e, 0x45, 0xff, 0xf5, 0x01,
-	0xfa, 0x0a, 0x7d, 0x90, 0x82, 0x87, 0xa4, 0x3c, 0xd4, 0xcc, 0xc8, 0x56, 0xba, 0x40, 0xff, 0x58,
-	0x26, 0x0f, 0xf9, 0x7d, 0x1f, 0xcf, 0x39, 0xbc, 0x0e, 0x2a, 0x9e, 0x06, 0x1e, 0x3f, 0xb1, 0x9b,
-	0xbd, 0x30, 0xe0, 0x01, 0xab, 0xc9, 0x52, 0x15, 0x4a, 0xf8, 0xba, 0x2c, 0x15, 0xcb, 0x9d, 0x20,
-	0xe8, 0x78, 0xb4, 0x66, 0xf7, 0xdc, 0x9a, 0xed, 0xfb, 0x01, 0xb7, 0xb9, 0x1b, 0xf8, 0x4c, 0xb6,
-	0x2a, 0x96, 0x94, 0x15, 0x4a, 0xad, 0xfe, 0x71, 0x8d, 0x76, 0x7b, 0xfc, 0x9d, 0x32, 0x0e, 0xc1,
-	0xb7, 0x83, 0x6e, 0x37, 0xf0, 0x93, 0x6d, 0x27, 0xd4, 0xf6, 0xf8, 0x89, 0xb2, 0x11, 0xd3, 0xe6,
-	0x05, 0x1d, 0xb7, 0x6d, 0x7b, 0x4d, 0x87, 0x9e, 0xba, 0x6d, 0x9a, 0xdc, 0xdf, 0xb0, 0x95, 0x4c,
-	0x9b, 0xed, 0xd8, 0x3d, 0x4e, 0x43, 0x65, 0x5c, 0x31, 0x8d, 0x41, 0x8f, 0xfa, 0xc7, 0x5e, 0x70,
-	0xd6, 0x7c, 0xb4, 0x91, 0x8c, 0x4c, 0x4f, 0xa9, 0xcf, 0xf5, 0x70, 0x97, 0x87, 0x6c, 0x6f, 0x39,
-	0xf5, 0x59, 0xc4, 0x1d, 0xc3, 0xe0, 0xdd, 0xb6, 0xdb, 0xec, 0xba, 0xad, 0xa6, 0xd3, 0x52, 0x0d,
-	0xd6, 0x12, 0x1a, 0xd8, 0x9e, 0x1d, 0x76, 0x2f, 0x9a, 0x2c, 0x25, 0x34, 0xe1, 0x94, 0x71, 0x69,
-	0x26, 0x6f, 0x50, 0x66, 0x2b, 0x08, 0xe9, 0xbe, 0xcf, 0xb8, 0xed, 0xb7, 0x29, 0x5e, 0x41, 0x93,
-	0xae, 0xfa, 0xbf, 0xe9, 0x3a, 0x05, 0x6b, 0xd5, 0x5a, 0xbf, 0x55, 0x47, 0xba, 0x6a, 0xdf, 0xc1,
-	0xf7, 0xd1, 0x75, 0xe9, 0xdd, 0xc2, 0xc4, 0xaa, 0xb5, 0x3e, 0xf9, 0x78, 0xb6, 0xaa, 0x9c, 0xfd,
-	0x4b, 0xf8, 0x69, 0x70, 0x9b, 0xf7, 0x59, 0x5d, 0xb5, 0x21, 0x5f, 0xa2, 0x6c, 0x14, 0x9e, 0xe1,
-	0x0a, 0xfa, 0xc4, 0xe5, 0xb4, 0xcb, 0x0a, 0xd6, 0xea, 0x35, 0xe8, 0xad, 0xb2, 0x24, 0xda, 0xaa,
-	0x2e, 0x9b, 0x90, 0x7f, 0x5e, 0x43, 0xd7, 0x8f, 0xc0, 0x8c, 0x0b, 0xe8, 0xc6, 0x29, 0x0d, 0x85,
-	0x6f, 0x94, 0x24, 0x5d, 0xc4, 0xf7, 0xd1, 0x4d, 0x15, 0x11, 0x56, 0x98, 0x00, 0xcc, 0x99, 0xaa,
-	0x0e, 0xd1, 0xa6, 0xfc, 0xad, 0x0f, 0x5a, 0xe0, 0x5d, 0x34, 0x6d, 0xc6, 0x9f, 0x15, 0xae, 0x41,
-	0xa7, 0xa5, 0xea, 0x50, 0x5e, 0x3c, 0x97, 0xc5, 0x6d, 0x28, 0xd5, 0xa7, 0xbc, 0x68, 0x91, 0xe1,
-	0x75, 0x74, 0x43, 0xf7, 0xff, 0x18, 0xfa, 0x4f, 0x55, 0x55, 0x3f, 0xd5, 0x41, 0x9b, 0xf1, 0x53,
-	0x94, 0x91, 0xff, 0x36, 0xf9, 0xbb, 0x1e, 0x65, 0x85, 0x4f, 0xa0, 0x39, 0x36, 0x9b, 0xbf, 0x7c,
-	0xd7, 0xa3, 0xf5, 0x49, 0x67, 0xf0, 0x3f, 0xc3, 0x3f, 0x41, 0x59, 0x48, 0x95, 0xe6, 0xb1, 0xeb,
-	0xc1, 0xd8, 0x6e, 0xa8, 0x7e, 0x50, 0x5b, 0xdd, 0x11, 0x7f, 0x77, 0xc1, 0x54, 0xcf, 0xd0, 0x8b,
-	0x02, 0xc3, 0xbf, 0x40, 0xb9, 0x8b, 0x3c, 0xb1, 0xb9, 0xdd, 0xb2, 0x19, 0x2d, 0x94, 0xa1, 0x73,
-	0xbe, 0x2a, 0x2c, 0xd5, 0x17, 0x6e, 0x4b, 0xb2, 0x6e, 0xdb, 0xdc, 0xae, 0x4f, 0x8b, 0x3a, 0x51,
-	0xa5, 0xda, 0xe2, 0x1d, 0x94, 0x8f, 0xe6, 0x91, 0x86, 0x58, 0x02, 0x88, 0x39, 0x09, 0xb1, 0x29,
-	0x6c, 0x11, 0x10, 0xa0, 0x94, 0x95, 0xaa, 0xfd, 0x37, 0x1f, 0xdf, 0xbc, 0x3e, 0x73, 0xe3, 0xf1,
-	0xbf, 0x36, 0x50, 0x56, 0x86, 0xb0, 0x41, 0x43, 0xd1, 0x1c, 0x6f, 0xa3, 0x5b, 0x7b, 0x94, 0xab,
-	0xb0, 0xce, 0x57, 0xe5, 0x84, 0xaf, 0xea, 0x09, 0x5f, 0xdd, 0x11, 0x13, 0xbe, 0x38, 0xa5, 0xd3,
-	0x42, 0xb6, 0x23, 0xd3, 0x7f, 0xf8, 0xf7, 0x7f, 0x7e, 0x98, 0xb8, 0x85, 0x6f, 0xc0, 0xba, 0x71,
-	0xfa, 0x08, 0xbf, 0x41, 0xb9, 0xe7, 0x2e, 0xe3, 0x66, 0x6e, 0xa5, 0xa1, 0xcd, 0x25, 0x25, 0x19,
-	0x23, 0x8b, 0x00, 0x9a, 0xc7, 0x39, 0x05, 0x5a, 0x73, 0x07, 0x48, 0x0d, 0x34, 0xbd, 0x47, 0x0d,
-	0x74, 0x8c, 0xaa, 0x6a, 0xc1, 0xd9, 0xdf, 0x2e, 0x26, 0x66, 0x2d, 0x59, 0x06, 0xbc, 0x02, 0x9e,
-	0x8f, 0xe1, 0xd5, 0xce, 0x5d, 0xe7, 0x7b, 0xdc, 0x40, 0x19, 0xa1, 0x79, 0x53, 0xe7, 0x62, 0x9a,
-	0xdc, 0xdc, 0x70, 0xfe, 0x32, 0x52, 0x00, 0x68, 0x8c, 0x67, 0x34, 0xf4, 0x20, 0xa1, 0xbb, 0x08,
-	0x0b, 0xd0, 0xe7, 0x66, 0x7a, 0xa6, 0x41, 0x2f, 0x8f, 0xcc, 0x72, 0x46, 0x56, 0x80, 0x67, 0x11,
-	0x2f, 0x68, 0x9e, 0xa1, 0xc9, 0x82, 0xdb, 0x68, 0x66, 0x8f, 0x9a, 0x6c, 0x86, 0x67, 0x46, 0x4f,
-	0x23, 0x72, 0x07, 0xf0, 0x97, 0x71, 0x39, 0x05, 0x5f, 0x3a, 0xca, 0x47, 0xf3, 0xb1, 0x31, 0x1d,
-	0x06, 0x21, 0x67, 0x06, 0x55, 0x39, 0x85, 0x0a, 0x5a, 0x92, 0x0a, 0x30, 0xdd, 0xc1, 0x64, 0x14,
-	0x53, 0xad, 0x07, 0xa8, 0xef, 0x2d, 0x34, 0x3b, 0x3c, 0x2a, 0x81, 0x82, 0x97, 0x46, 0x50, 0xec,
-	0x3b, 0xc5, 0xd2, 0x08, 0x33, 0x79, 0x02, 0x02, 0xaa, 0xf8, 0xfe, 0xe5, 0x02, 0x6a, 0xe7, 0xe2,
-	0xa7, 0x29, 0x86, 0xfe, 0x37, 0x0b, 0x2d, 0xec, 0xf8, 0x76, 0xcb, 0xa3, 0x63, 0xab, 0x49, 0x89,
-	0x39, 0xf9, 0x12, 0x84, 0x3c, 0x25, 0x1b, 0xe3, 0x08, 0xa9, 0x51, 0x10, 0x81, 0xff, 0x6e, 0xa1,
-	0xc2, 0xb6, 0xcb, 0x7e, 0x54, 0x41, 0x3f, 0x07, 0x41, 0x5f, 0x90, 0x27, 0x63, 0x09, 0x72, 0xa4,
-	0x0a, 0xec, 0x24, 0x24, 0xc7, 0xae, 0x17, 0x9c, 0x99, 0xc9, 0x81, 0xab, 0xd1, 0x9d, 0x18, 0xec,
-	0x57, 0x4c, 0x89, 0x63, 0xc0, 0xfa, 0xa3, 0x85, 0xca, 0xaf, 0x7a, 0x8e, 0xcd, 0x69, 0x8c, 0xe8,
-	0x25, 0xc8, 0x28, 0xc7, 0x08, 0xa0, 0x5e, 0xf6, 0x49, 0x1d, 0xfa, 0x03, 0x90, 0xf0, 0x19, 0xb9,
-	0x82, 0x84, 0x67, 0x56, 0x05, 0xff, 0xc9, 0x42, 0x4b, 0x09, 0x2a, 0x5e, 0x50, 0x4e, 0x43, 0x29,
-	0xa3, 0x64, 0xc8, 0x00, 0xc3, 0x8b, 0xc0, 0xb9, 0x44, 0x45, 0x15, 0x54, 0xac, 0x93, 0xdb, 0x23,
-	0x55, 0x74, 0x05, 0x18, 0xc8, 0xe8, 0xa0, 0x85, 0x98, 0xcb, 0x81, 0xca, 0xf4, 0x79, 0x3e, 0xae,
-	0x85, 0x91, 0x7b, 0xc0, 0xf5, 0x29, 0xbe, 0x0a, 0x17, 0xe6, 0xa8, 0x94, 0x18, 0xdb, 0xbd, 0x30,
-	0xe8, 0xf7, 0x4c, 0xb2, 0x85, 0x98, 0xff, 0x65, 0x23, 0xf2, 0x10, 0x08, 0x2b, 0x78, 0xfd, 0x52,
-	0x17, 0x37, 0x3b, 0x12, 0xf6, 0x07, 0x0b, 0xad, 0xa5, 0xc4, 0x1a, 0x30, 0xa5, 0xa7, 0xd7, 0x92,
-	0x09, 0xaf, 0x12, 0xf5, 0x0d, 0x90, 0xf4, 0x80, 0x5c, 0x59, 0x92, 0x70, 0xfa, 0x01, 0x9a, 0x14,
-	0xbe, 0xb8, 0x6c, 0x45, 0x9f, 0x36, 0x0f, 0x12, 0x8c, 0x2c, 0x00, 0x59, 0x0e, 0x4f, 0x6b, 0x32,
-	0xbd, 0x74, 0x1f, 0xa0, 0xec, 0x05, 0xe0, 0xbe, 0x93, 0x0e, 0x39, 0x79, 0xe1, 0xe6, 0x84, 0x4d,
-	0x52, 0xc2, 0xb9, 0x0e, 0xc3, 0xaf, 0xd0, 0x4c, 0x9d, 0xb6, 0x03, 0xbf, 0xed, 0x7a, 0x54, 0xcb,
-	0x8c, 0xf6, 0x4d, 0xf5, 0x47, 0x19, 0x30, 0xe7, 0x49, 0x1c, 0x53, 0x0c, 0x7c, 0x07, 0x0e, 0x08,
-	0x09, 0x7b, 0xcb, 0xd0, 0x11, 0x4b, 0xc3, 0xe0, 0xd9, 0xa1, 0x91, 0xca, 0x4d, 0xe4, 0x1b, 0x94,
-	0xd9, 0x0a, 0xa9, 0xcd, 0x95, 0x34, 0x3c, 0xd4, 0x3b, 0x86, 0x56, 0x04, 0xb4, 0x59, 0x32, 0xec,
-	0x37, 0x21, 0xe9, 0x35, 0xca, 0xc8, 0x45, 0x39, 0x41, 0x55, 0xda, 0x20, 0x6f, 0x03, 0xde, 0x12,
-	0x29, 0x25, 0xa9, 0xd3, 0xcb, 0xeb, 0x6f, 0x50, 0x56, 0xad, 0xae, 0x63, 0x20, 0xab, 0x4d, 0x94,
-	0x94, 0x13, 0x91, 0xf5, 0x3a, 0xf9, 0x1a, 0x65, 0xea, 0xb4, 0x15, 0x04, 0xfc, 0x47, 0xd3, 0x1c,
-	0x02, 0x9c, 0x00, 0xde, 0xa6, 0x1e, 0xe5, 0x1f, 0xe0, 0x8c, 0x4a, 0x32, 0xb0, 0x03, 0x70, 0xb8,
-	0x85, 0x72, 0xbb, 0x41, 0xd8, 0xa6, 0x63, 0xa3, 0x7f, 0x0e, 0xe8, 0xb7, 0x2b, 0x6b, 0x89, 0xe8,
-	0xc7, 0x02, 0xb3, 0xa9, 0x38, 0xde, 0xa2, 0xec, 0x76, 0x70, 0xe6, 0x7b, 0x81, 0xed, 0xec, 0x77,
-	0xed, 0x0e, 0xc5, 0x73, 0x3a, 0x0d, 0xa0, 0xa8, 0x6d, 0xc5, 0x39, 0x4d, 0x7b, 0xd0, 0xa3, 0x21,
-	0x5c, 0x51, 0xeb, 0x94, 0xf5, 0xc8, 0xcf, 0x80, 0xe9, 0x21, 0xb9, 0x97, 0xc8, 0xe4, 0x0a, 0x88,
-	0xa6, 0xa3, 0x30, 0x58, 0xed, 0xdc, 0xb7, 0xbb, 0xf4, 0xfb, 0x67, 0x56, 0xe5, 0xfd, 0x84, 0x85,
-	0xff, 0x6c, 0xa1, 0xf9, 0x3d, 0xca, 0x0d, 0x1a, 0x79, 0x59, 0x4a, 0xd7, 0x90, 0x54, 0x4d, 0xbe,
-	0x02, 0x0d, 0x4f, 0xf0, 0xe3, 0x31, 0x34, 0xd4, 0x18, 0x30, 0x09, 0x1d, 0x6f, 0xe1, 0x04, 0x67,
-	0x40, 0x8e, 0x29, 0xe0, 0x0b, 0xb9, 0x9c, 0xe1, 0x71, 0x9c, 0x20, 0x98, 0x5d, 0x79, 0x54, 0x35,
-	0xc0, 0xd8, 0x50, 0x80, 0x93, 0x08, 0x19, 0xa9, 0x01, 0xe3, 0x5d, 0x7c, 0xe7, 0x2a, 0x8c, 0x82,
-	0xea, 0x1c, 0xe5, 0xb7, 0xc4, 0xc9, 0xdb, 0xbb, 0xe2, 0x38, 0x13, 0x83, 0xad, 0xc6, 0x59, 0x19,
-	0x77, 0x9c, 0x7f, 0xb5, 0x50, 0x7e, 0xb3, 0xcd, 0xdd, 0x53, 0x9b, 0x53, 0x20, 0x92, 0xdb, 0xc3,
-	0x98, 0xec, 0xbb, 0xc0, 0xfe, 0x15, 0xf9, 0xe9, 0x38, 0x61, 0x96, 0xd5, 0x7d, 0xe0, 0x53, 0x79,
-	0xf7, 0x17, 0x0b, 0xe5, 0xea, 0xf4, 0x94, 0x86, 0xfc, 0xff, 0xa2, 0x25, 0x04, 0x6a, 0xa5, 0xe5,
-	0xbd, 0x85, 0xe6, 0x8c, 0xe9, 0xf7, 0x32, 0x50, 0xd3, 0x9c, 0x98, 0xab, 0xb1, 0xa1, 0xaa, 0x4e,
-	0x7f, 0xdf, 0xa7, 0x8c, 0x17, 0x4b, 0x09, 0x6d, 0x84, 0xbc, 0xc0, 0x67, 0x54, 0x9f, 0x69, 0xf0,
-	0xdd, 0x61, 0x89, 0x20, 0x83, 0xd5, 0xb4, 0xbc, 0xa6, 0x2c, 0xe3, 0x33, 0x34, 0xa5, 0xa7, 0x81,
-	0x9a, 0x85, 0xc5, 0x44, 0xf8, 0x2b, 0x50, 0xdf, 0x4f, 0xcb, 0x4e, 0x45, 0x2d, 0x7f, 0x9a, 0x72,
-	0x0a, 0x8a, 0x78, 0x2c, 0x6e, 0xb6, 0x82, 0x41, 0x38, 0x3a, 0xa1, 0xed, 0x5c, 0xf8, 0xe1, 0x83,
-	0x45, 0x6c, 0xa4, 0x4d, 0x4a, 0x25, 0xc2, 0x16, 0x94, 0xcd, 0xbe, 0xa4, 0xd3, 0x4e, 0x38, 0x42,
-	0x99, 0x3d, 0xca, 0x0f, 0xfc, 0xfe, 0xbe, 0x2c, 0x47, 0xe7, 0x62, 0x4e, 0xb3, 0x0d, 0xcc, 0xe4,
-	0x33, 0xe0, 0x58, 0xc3, 0x2b, 0x89, 0x69, 0x10, 0xf8, 0x7d, 0x8d, 0x7b, 0x8e, 0xb2, 0xc6, 0x04,
-	0xf8, 0xf0, 0x61, 0x3d, 0x02, 0xca, 0x7b, 0x24, 0x2d, 0xac, 0xb6, 0xa2, 0x51, 0xcc, 0x62, 0xb3,
-	0x3e, 0x43, 0x93, 0x5b, 0x41, 0xb7, 0xeb, 0xf2, 0xff, 0x91, 0x5a, 0x2e, 0x3a, 0x9f, 0x93, 0xb4,
-	0xb0, 0xb6, 0x81, 0x24, 0x42, 0x7c, 0x88, 0xa6, 0x2f, 0x0e, 0x58, 0xf1, 0xfb, 0x6a, 0x56, 0x93,
-	0xc9, 0x0b, 0x2a, 0x01, 0xf8, 0x32, 0x2e, 0x26, 0x3a, 0x53, 0x5e, 0x4c, 0xdf, 0xa0, 0x7c, 0x04,
-	0xb1, 0xbb, 0x15, 0xf8, 0xc7, 0x6e, 0x27, 0x25, 0x4c, 0x03, 0xf3, 0x25, 0x61, 0xea, 0x75, 0x9b,
-	0x6d, 0x85, 0xe3, 0xa3, 0x39, 0xb9, 0x1c, 0x0c, 0x13, 0xc4, 0x41, 0x53, 0xf7, 0x5e, 0x75, 0xa9,
-	0x22, 0x97, 0x91, 0x09, 0x07, 0xbd, 0x8a, 0x3a, 0xe8, 0x6a, 0x77, 0xb6, 0xd1, 0x5e, 0x92, 0x77,
-	0x35, 0x8a, 0x66, 0x4d, 0xd8, 0x71, 0xae, 0x0b, 0xeb, 0x40, 0x40, 0xf0, 0x6a, 0x2a, 0x81, 0xbe,
-	0x26, 0x7c, 0x1b, 0x55, 0x2f, 0x1f, 0xe9, 0xd2, 0x4e, 0xd0, 0xf9, 0xf8, 0xeb, 0x1e, 0x4b, 0x3b,
-	0xae, 0xca, 0x67, 0x41, 0x5c, 0x47, 0xd9, 0xc1, 0xa9, 0x57, 0xb4, 0x1f, 0xf2, 0x4c, 0x0c, 0x8f,
-	0xac, 0x01, 0x5c, 0x09, 0x2f, 0x26, 0xc1, 0xc9, 0x23, 0xf0, 0x2e, 0x9a, 0x69, 0xf0, 0x90, 0xda,
-	0xdd, 0x43, 0xbb, 0xfd, 0x3b, 0xca, 0xd9, 0x41, 0x9f, 0xe3, 0x79, 0xc3, 0x11, 0xd2, 0x70, 0xd0,
-	0xe7, 0xa9, 0xf1, 0xfd, 0x68, 0xdd, 0xc2, 0x3b, 0x70, 0xd0, 0xa7, 0xee, 0x29, 0x55, 0x40, 0xfb,
-	0xfe, 0x88, 0xb7, 0xb6, 0x38, 0xfe, 0xbe, 0x4f, 0x3e, 0x7a, 0x68, 0xe1, 0x5f, 0xa1, 0xbc, 0x82,
-	0xd9, 0x3a, 0xb1, 0xfd, 0x0e, 0x85, 0x37, 0xcc, 0x74, 0x27, 0x16, 0x0c, 0xa4, 0x48, 0x17, 0x00,
-	0x7b, 0x83, 0x72, 0xf2, 0x78, 0x1f, 0x79, 0x09, 0xc5, 0x09, 0xaf, 0xa3, 0xc5, 0x84, 0x3a, 0xb2,
-	0x0a, 0xbe, 0x2b, 0x92, 0x39, 0xed, 0x3b, 0xe3, 0xa9, 0x55, 0xa6, 0xaa, 0xd8, 0x1e, 0xa2, 0xd8,
-	0xe6, 0x4d, 0x37, 0x86, 0x99, 0x90, 0xaa, 0x06, 0xa8, 0x8c, 0x48, 0x0b, 0xe5, 0xe4, 0x8c, 0xfb,
-	0x10, 0xd5, 0x9f, 0x02, 0xc1, 0x4a, 0x71, 0x04, 0x81, 0x90, 0xde, 0x46, 0x39, 0x79, 0x82, 0xbe,
-	0x8c, 0x23, 0x2d, 0xe4, 0x6a, 0x20, 0x95, 0x51, 0x03, 0xf9, 0x0e, 0xcd, 0x88, 0xc9, 0x10, 0x75,
-	0xc0, 0x88, 0xd9, 0x90, 0xe0, 0xad, 0x25, 0x20, 0x59, 0xc0, 0xc9, 0x21, 0xc0, 0xcf, 0xe1, 0x12,
-	0x98, 0xb0, 0x2d, 0x4d, 0x19, 0x07, 0x17, 0xa6, 0x6f, 0x16, 0xb8, 0x94, 0x7e, 0x34, 0x61, 0xf8,
-	0xd7, 0xe8, 0x66, 0x83, 0x7a, 0xc7, 0x2f, 0x29, 0xe3, 0x06, 0x58, 0x41, 0x83, 0x69, 0xeb, 0x60,
-	0xf1, 0xbf, 0x0b, 0xb0, 0xab, 0x64, 0x39, 0x11, 0x96, 0x51, 0xef, 0x18, 0x3e, 0xa2, 0xe0, 0x23,
-	0x38, 0x4d, 0x1b, 0x2f, 0xea, 0xc3, 0x6f, 0x22, 0xb1, 0x27, 0xf7, 0xf8, 0xd4, 0x15, 0x89, 0x2e,
-	0xda, 0xa9, 0xc7, 0x10, 0xb7, 0x85, 0xbf, 0x45, 0x78, 0x8f, 0xf2, 0xa1, 0x67, 0x76, 0x03, 0x39,
-	0xf9, 0x25, 0x3e, 0xee, 0x0f, 0x13, 0x1b, 0x1e, 0xf5, 0x31, 0x43, 0xd9, 0x86, 0xdb, 0xed, 0x7b,
-	0x36, 0xa7, 0xd0, 0x1f, 0x97, 0x07, 0x8e, 0x88, 0x56, 0xeb, 0x6d, 0x32, 0xe5, 0x54, 0x18, 0x7b,
-	0xcc, 0x32, 0x7d, 0xa4, 0x90, 0x9a, 0x02, 0x49, 0xe4, 0xe5, 0x0b, 0x84, 0xe4, 0x25, 0x1a, 0xde,
-	0x0e, 0x33, 0xd1, 0xdd, 0x30, 0x35, 0x15, 0xd5, 0xeb, 0x03, 0x99, 0x12, 0xf0, 0x17, 0xbd, 0xd5,
-	0xfb, 0x88, 0xba, 0x3a, 0x8f, 0x81, 0x77, 0x71, 0xc9, 0x3f, 0x7d, 0x54, 0x8b, 0x74, 0x17, 0x80,
-	0xdf, 0xa1, 0x49, 0x31, 0xe5, 0xdf, 0xf2, 0x23, 0xdb, 0xeb, 0x53, 0xbc, 0x58, 0x1d, 0x7c, 0x8e,
-	0xab, 0x42, 0x4d, 0xa3, 0x47, 0xdb, 0xee, 0xb1, 0x4b, 0xc3, 0xe2, 0x42, 0xc4, 0x54, 0xa7, 0xbc,
-	0x1f, 0xfa, 0xd0, 0x80, 0x91, 0x12, 0xc0, 0xcf, 0xe1, 0xbc, 0xf6, 0x48, 0x14, 0xf0, 0x35, 0x9a,
-	0x6c, 0x44, 0x8a, 0xf9, 0x18, 0x3e, 0x4d, 0xd7, 0x1d, 0x03, 0x8e, 0x22, 0x39, 0x28, 0xdf, 0xe0,
-	0x76, 0xc8, 0x0f, 0xba, 0x6d, 0x57, 0x24, 0xb1, 0x38, 0x7a, 0x05, 0x3e, 0x56, 0x09, 0xa2, 0x6b,
-	0x75, 0x30, 0xb1, 0xac, 0x36, 0xb2, 0x5d, 0xcd, 0x78, 0x32, 0x78, 0xf6, 0x67, 0x02, 0xaf, 0x39,
-	0xf8, 0x56, 0xf8, 0xcc, 0xaa, 0x7c, 0xed, 0xa1, 0x7c, 0x10, 0x76, 0x60, 0x4d, 0x6e, 0x07, 0xa1,
-	0xa3, 0xbe, 0x80, 0x7c, 0x9d, 0x91, 0x5f, 0x68, 0x0e, 0xe1, 0xeb, 0xe2, 0x6f, 0xab, 0x1d, 0x97,
-	0x9f, 0xf4, 0x5b, 0x22, 0x5f, 0x6a, 0xba, 0xa5, 0xfa, 0x0e, 0xfc, 0x40, 0x7f, 0x15, 0x7e, 0x5a,
-	0xeb, 0x04, 0xaa, 0xee, 0x1f, 0x13, 0xf3, 0x07, 0x1a, 0xef, 0x28, 0xfa, 0xc1, 0xe7, 0x70, 0xa2,
-	0x75, 0x1d, 0xda, 0x6f, 0xfc, 0x37, 0x00, 0x00, 0xff, 0xff, 0x37, 0x95, 0xcc, 0x79, 0x55, 0x1e,
-	0x00, 0x00,
+	// 2265 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0xeb, 0x6e, 0x1b, 0xc7,
+	0x15, 0xce, 0x2a, 0x89, 0x2f, 0xa3, 0x2b, 0x87, 0xba, 0x50, 0x24, 0x65, 0x4b, 0xe3, 0x9b, 0x4c,
+	0xdb, 0x4b, 0x5f, 0x93, 0x36, 0x69, 0x50, 0x38, 0xba, 0x55, 0x89, 0x0d, 0x09, 0xa4, 0x2d, 0xb7,
+	0x45, 0x1c, 0x62, 0xc9, 0x1d, 0xd2, 0x8b, 0x2c, 0x77, 0xd9, 0x9d, 0xa1, 0x64, 0x41, 0xf0, 0x9f,
+	0xb6, 0x01, 0x5c, 0x14, 0x45, 0x7f, 0xe4, 0x2d, 0xfa, 0xa3, 0xcf, 0xd0, 0x77, 0xe8, 0x2b, 0xf4,
+	0x41, 0x8a, 0x39, 0x33, 0x43, 0xee, 0x95, 0x22, 0xdd, 0x00, 0xfd, 0x63, 0x6a, 0xe6, 0x9c, 0xf9,
+	0xbe, 0x6f, 0xce, 0x9c, 0xb9, 0xae, 0x51, 0xf1, 0xd8, 0x77, 0xf9, 0x1b, 0xab, 0xd1, 0x0b, 0x7c,
+	0xee, 0xb3, 0xaa, 0x2c, 0x99, 0x50, 0xc2, 0x17, 0x64, 0xa9, 0x58, 0xee, 0xf8, 0x7e, 0xc7, 0xa5,
+	0x55, 0xab, 0xe7, 0x54, 0x2d, 0xcf, 0xf3, 0xb9, 0xc5, 0x1d, 0xdf, 0x63, 0xd2, 0xab, 0x58, 0x52,
+	0x56, 0x28, 0x35, 0xfb, 0xed, 0x2a, 0xed, 0xf6, 0xf8, 0xa9, 0x32, 0xc6, 0xe0, 0x5b, 0x7e, 0xb7,
+	0xeb, 0x7b, 0xe9, 0xb6, 0x37, 0xd4, 0x72, 0xf9, 0x1b, 0x65, 0x23, 0x51, 0x9b, 0xeb, 0x77, 0x9c,
+	0x96, 0xe5, 0x36, 0x6c, 0x7a, 0xec, 0xb4, 0x68, 0x7a, 0xfb, 0x88, 0xad, 0x14, 0xb5, 0x59, 0xb6,
+	0xd5, 0xe3, 0x34, 0x50, 0xc6, 0xab, 0x51, 0xa3, 0xdf, 0xa3, 0x5e, 0xdb, 0xf5, 0x4f, 0x1a, 0x0f,
+	0x1e, 0xa5, 0x23, 0xd3, 0x63, 0xea, 0x71, 0xdd, 0xdd, 0x2b, 0x31, 0xdb, 0x5b, 0x4e, 0x3d, 0x16,
+	0x0a, 0xc7, 0xad, 0x78, 0x40, 0x9d, 0x5e, 0x83, 0x9d, 0x32, 0x4e, 0xbb, 0xa2, 0xaa, 0xed, 0xb8,
+	0x5a, 0xe2, 0x8d, 0x14, 0xc7, 0x3e, 0xa3, 0x41, 0xcc, 0x2d, 0x2e, 0xb6, 0xdb, 0x72, 0x1a, 0x5d,
+	0xa7, 0xd9, 0xb0, 0x9b, 0xca, 0x61, 0x23, 0xc5, 0xc1, 0x72, 0xad, 0xa0, 0x3b, 0x74, 0x59, 0x4b,
+	0x71, 0xe1, 0x94, 0x71, 0x69, 0x26, 0xaf, 0xd1, 0xcc, 0x96, 0x1f, 0xd0, 0x7d, 0x8f, 0x71, 0xcb,
+	0x6b, 0x51, 0x7c, 0x15, 0x4d, 0x3b, 0xea, 0xef, 0x86, 0x63, 0x17, 0x8c, 0x75, 0x63, 0xf3, 0x72,
+	0x0d, 0xe9, 0xaa, 0x7d, 0x1b, 0xdf, 0x45, 0x17, 0xe4, 0x68, 0x15, 0xa6, 0xd6, 0x8d, 0xcd, 0xe9,
+	0x87, 0x8b, 0xa6, 0x1a, 0xbc, 0xdf, 0xc0, 0x4f, 0x9d, 0x5b, 0xbc, 0xcf, 0x6a, 0xca, 0x87, 0x7c,
+	0x89, 0x66, 0xc3, 0xf0, 0x0c, 0x57, 0xd0, 0xa7, 0x0e, 0xa7, 0x5d, 0x56, 0x30, 0xd6, 0x3f, 0x86,
+	0xd6, 0x2a, 0xeb, 0xc2, 0x5e, 0x35, 0xe9, 0x42, 0xfe, 0xf5, 0x31, 0xba, 0x70, 0x04, 0x66, 0x5c,
+	0x40, 0x17, 0x8f, 0x69, 0x20, 0x62, 0xad, 0x24, 0xe9, 0x22, 0xbe, 0x8b, 0x2e, 0xa9, 0x11, 0x66,
+	0x85, 0x29, 0xc0, 0x5c, 0x30, 0xf5, 0x90, 0x3f, 0x95, 0xbf, 0xb5, 0x81, 0x07, 0xde, 0x45, 0xf3,
+	0xd1, 0x7c, 0x62, 0x85, 0x8f, 0xa1, 0xd1, 0x9a, 0x19, 0xcb, 0xb3, 0x67, 0xb2, 0xb8, 0x0d, 0xa5,
+	0xda, 0x9c, 0x1b, 0x2e, 0x32, 0xbc, 0x89, 0x2e, 0xea, 0xf6, 0x9f, 0x40, 0xfb, 0x39, 0x53, 0xb5,
+	0x53, 0x0d, 0xb4, 0x19, 0x3f, 0x41, 0x33, 0xf2, 0xcf, 0x06, 0x3f, 0xed, 0x51, 0x56, 0xf8, 0x14,
+	0xdc, 0x71, 0xd4, 0xfd, 0xc5, 0x69, 0x8f, 0xd6, 0xa6, 0xed, 0xc1, 0xdf, 0x0c, 0x7f, 0x8e, 0x66,
+	0x21, 0xf5, 0x1a, 0x6d, 0xc7, 0x85, 0xbe, 0x5d, 0x54, 0xed, 0xa0, 0xd6, 0xdc, 0x11, 0xff, 0xee,
+	0x82, 0xa9, 0x36, 0x43, 0x87, 0x05, 0x86, 0x7f, 0x8d, 0x72, 0xc3, 0x3c, 0xb1, 0xb8, 0xd5, 0xb4,
+	0x18, 0x2d, 0x94, 0xa1, 0x71, 0xde, 0x14, 0x16, 0xf3, 0xb9, 0xd3, 0x94, 0xac, 0xdb, 0x16, 0xb7,
+	0x6a, 0xf3, 0xa2, 0x4e, 0x54, 0x29, 0x5f, 0xbc, 0x83, 0xf2, 0xe1, 0x3c, 0xd2, 0x10, 0x6b, 0x00,
+	0xb1, 0x24, 0x21, 0x9e, 0x0a, 0x5b, 0x08, 0x04, 0x28, 0x65, 0xa5, 0xf2, 0xff, 0xe6, 0x93, 0x4b,
+	0x17, 0x16, 0x2e, 0x3e, 0xfc, 0xe7, 0xe7, 0x68, 0x56, 0x0e, 0x61, 0x9d, 0x06, 0xc2, 0x1d, 0x6f,
+	0xa3, 0xcb, 0x7b, 0x94, 0xab, 0x61, 0x5d, 0x36, 0xe5, 0x02, 0x62, 0xea, 0x05, 0xc4, 0xdc, 0x11,
+	0x0b, 0x48, 0x71, 0x4e, 0xa7, 0x85, 0xf4, 0x23, 0xf3, 0x7f, 0xfc, 0xf7, 0x7f, 0x7e, 0x9a, 0xba,
+	0x8c, 0x2f, 0xc2, 0x3a, 0x74, 0xfc, 0x00, 0xbf, 0x46, 0xb9, 0x67, 0x0e, 0xe3, 0xd1, 0xdc, 0xca,
+	0x42, 0x5b, 0x4a, 0x4b, 0x32, 0x46, 0x56, 0x01, 0x34, 0x8f, 0x73, 0x0a, 0xb4, 0xea, 0x0c, 0x90,
+	0xea, 0x68, 0x7e, 0x8f, 0x46, 0xd0, 0x31, 0x32, 0xd5, 0x02, 0xb6, 0xbf, 0x5d, 0x4c, 0xcd, 0x5a,
+	0x72, 0x05, 0xf0, 0x0a, 0x78, 0x39, 0x81, 0x57, 0x3d, 0x73, 0xec, 0x77, 0xb8, 0x8e, 0x66, 0x84,
+	0xe6, 0xa7, 0x3a, 0x17, 0xb3, 0xe4, 0xe6, 0xe2, 0xf9, 0xcb, 0x48, 0x01, 0xa0, 0x31, 0x5e, 0xd0,
+	0xd0, 0x83, 0x84, 0xee, 0x22, 0x2c, 0x40, 0x9f, 0x45, 0xd3, 0x33, 0x0b, 0xfa, 0xca, 0xc8, 0x2c,
+	0x67, 0xe4, 0x2a, 0xf0, 0xac, 0xe2, 0x15, 0xcd, 0x13, 0x9b, 0x2c, 0xb8, 0x85, 0x16, 0xf6, 0x68,
+	0x94, 0x2d, 0x12, 0x99, 0xd1, 0xd3, 0x88, 0x5c, 0x07, 0xfc, 0x2b, 0xb8, 0x9c, 0x81, 0x2f, 0x03,
+	0xe5, 0xa1, 0xe5, 0x44, 0x9f, 0x0e, 0xfd, 0x80, 0xb3, 0x08, 0x55, 0x39, 0x83, 0x0a, 0x3c, 0x49,
+	0x05, 0x98, 0xae, 0x63, 0x32, 0x8a, 0xa9, 0xda, 0x03, 0xd4, 0xf7, 0x06, 0x5a, 0x8c, 0xf7, 0x4a,
+	0xa0, 0xe0, 0xb5, 0x11, 0x14, 0xfb, 0x76, 0xb1, 0x34, 0xc2, 0x4c, 0x1e, 0x83, 0x00, 0x13, 0xdf,
+	0x3d, 0x5f, 0x40, 0xf5, 0x4c, 0xfc, 0x34, 0x44, 0xd7, 0xff, 0x66, 0xa0, 0x95, 0x1d, 0xcf, 0x6a,
+	0xba, 0x74, 0x62, 0x35, 0x19, 0x63, 0x4e, 0xbe, 0x04, 0x21, 0x4f, 0xc8, 0xa3, 0x49, 0x84, 0x54,
+	0x29, 0x88, 0xc0, 0x7f, 0x37, 0x50, 0x61, 0xdb, 0x61, 0x3f, 0xab, 0xa0, 0x5f, 0x81, 0xa0, 0xcf,
+	0xc8, 0xe3, 0x89, 0x04, 0xd9, 0x52, 0x05, 0xb6, 0x53, 0x92, 0x63, 0xd7, 0xf5, 0x4f, 0xa2, 0xc9,
+	0x81, 0xcd, 0xf0, 0xce, 0x0e, 0xf6, 0x31, 0x53, 0xa2, 0x0d, 0x58, 0x7f, 0x32, 0x50, 0xf9, 0x65,
+	0xcf, 0xb6, 0x38, 0x4d, 0x10, 0xbd, 0x00, 0x19, 0xe5, 0x04, 0x01, 0xd4, 0xcb, 0x36, 0x99, 0x5d,
+	0xbf, 0x07, 0x12, 0x6e, 0x91, 0x31, 0x24, 0x7c, 0x61, 0x54, 0xf0, 0x9f, 0x0d, 0xb4, 0x96, 0xa2,
+	0xe2, 0x39, 0xe5, 0x34, 0x90, 0x32, 0x4a, 0x11, 0x19, 0x60, 0x78, 0xee, 0xdb, 0xe7, 0xa8, 0x30,
+	0x41, 0xc5, 0x26, 0xb9, 0x36, 0x52, 0x45, 0x57, 0x80, 0x81, 0x8c, 0x0e, 0x5a, 0x49, 0x84, 0x1c,
+	0xa8, 0xa2, 0x31, 0xcf, 0x27, 0xb5, 0x30, 0x72, 0x07, 0xb8, 0x6e, 0xe0, 0x71, 0xb8, 0x30, 0x47,
+	0xa5, 0xd4, 0xb1, 0xdd, 0x0b, 0xfc, 0x7e, 0x2f, 0x4a, 0xb6, 0x92, 0x88, 0xbf, 0x74, 0x22, 0xf7,
+	0x81, 0xb0, 0x82, 0x37, 0xcf, 0x0d, 0x71, 0xa3, 0x23, 0x61, 0x7f, 0x32, 0xd0, 0x46, 0xc6, 0x58,
+	0x03, 0xa6, 0x8c, 0xf4, 0x46, 0x3a, 0xe1, 0x38, 0xa3, 0xfe, 0x08, 0x24, 0xdd, 0x23, 0x63, 0x4b,
+	0x12, 0x41, 0x3f, 0x40, 0xd3, 0x22, 0x16, 0xe7, 0xad, 0xe8, 0xf3, 0xd1, 0x83, 0x04, 0x23, 0x2b,
+	0x40, 0x96, 0xc3, 0xf3, 0x9a, 0x4c, 0x2f, 0xdd, 0x07, 0x68, 0x76, 0x08, 0xb8, 0x6f, 0x67, 0x43,
+	0x4e, 0x0f, 0xc3, 0x9c, 0xb2, 0x49, 0x4a, 0x38, 0xc7, 0x66, 0xf8, 0x25, 0x5a, 0xa8, 0xd1, 0x96,
+	0xef, 0xb5, 0x1c, 0x97, 0x6a, 0x99, 0xe1, 0xb6, 0x99, 0xf1, 0x28, 0x03, 0xe6, 0x32, 0x49, 0x62,
+	0x8a, 0x8e, 0xef, 0xc0, 0x01, 0x21, 0x65, 0x6f, 0x89, 0x1d, 0xb1, 0x34, 0x0c, 0x5e, 0x8c, 0xf5,
+	0x54, 0x6e, 0x22, 0xdf, 0xa0, 0x99, 0xad, 0x80, 0x5a, 0x5c, 0x49, 0xc3, 0xb1, 0xd6, 0x09, 0xb4,
+	0x22, 0xa0, 0x2d, 0x92, 0x78, 0xdc, 0x84, 0xa4, 0x57, 0x68, 0x46, 0x2e, 0xca, 0x29, 0xaa, 0xb2,
+	0x3a, 0x79, 0x0d, 0xf0, 0xd6, 0x48, 0x29, 0x4d, 0x9d, 0x5e, 0x5e, 0x7f, 0x87, 0x66, 0xd5, 0xea,
+	0x3a, 0x01, 0xb2, 0xda, 0x44, 0x49, 0x39, 0x15, 0x59, 0xaf, 0x93, 0xaf, 0xd0, 0x4c, 0x8d, 0x36,
+	0x7d, 0x9f, 0xff, 0x6c, 0x9a, 0x03, 0x80, 0x13, 0xc0, 0xdb, 0xd4, 0xa5, 0xfc, 0x03, 0x82, 0x51,
+	0x49, 0x07, 0xb6, 0x01, 0x0e, 0x37, 0x51, 0x6e, 0xd7, 0x0f, 0x5a, 0x74, 0x62, 0xf4, 0xdb, 0x80,
+	0x7e, 0xad, 0xb2, 0x91, 0x8a, 0xde, 0x16, 0x98, 0x0d, 0xc5, 0xf1, 0x16, 0xcd, 0x6e, 0xfb, 0x27,
+	0x9e, 0xeb, 0x5b, 0xf6, 0x7e, 0xd7, 0xea, 0x50, 0xbc, 0xa4, 0xd3, 0x00, 0x8a, 0xda, 0x56, 0x5c,
+	0xd2, 0xb4, 0x07, 0x3d, 0x1a, 0xc0, 0x95, 0xb7, 0x46, 0x59, 0x8f, 0xfc, 0x12, 0x98, 0xee, 0x93,
+	0x3b, 0xa9, 0x4c, 0x8e, 0x80, 0x68, 0xd8, 0x0a, 0x83, 0x55, 0xcf, 0x3c, 0xab, 0x4b, 0xdf, 0x7d,
+	0x61, 0x54, 0xde, 0x4f, 0x19, 0xf8, 0x47, 0x03, 0x2d, 0xef, 0x51, 0x1e, 0xa1, 0x91, 0x97, 0xa5,
+	0x6c, 0x0d, 0x69, 0xd5, 0xe4, 0x2b, 0xd0, 0xf0, 0x18, 0x3f, 0x9c, 0x40, 0x43, 0x95, 0x01, 0x93,
+	0xd0, 0xf1, 0x16, 0x4e, 0x70, 0x11, 0xc8, 0x09, 0x05, 0x7c, 0x26, 0x97, 0x33, 0x3c, 0x49, 0x10,
+	0x04, 0xb3, 0x23, 0x8f, 0xaa, 0x11, 0x30, 0x16, 0x1b, 0xe0, 0x34, 0x42, 0x46, 0xaa, 0xc0, 0x78,
+	0x13, 0x5f, 0x1f, 0x87, 0x51, 0x50, 0x9d, 0xa1, 0xfc, 0x96, 0x38, 0x79, 0xbb, 0x63, 0xf6, 0x33,
+	0x75, 0xb0, 0x55, 0x3f, 0x2b, 0x93, 0xf6, 0xf3, 0xaf, 0x06, 0xca, 0x3f, 0x6d, 0x71, 0xe7, 0xd8,
+	0xe2, 0x14, 0x88, 0xe4, 0xf6, 0x30, 0x21, 0xfb, 0x2e, 0xb0, 0x7f, 0x45, 0x7e, 0x31, 0xc9, 0x30,
+	0xcb, 0xea, 0x3e, 0xf0, 0xa9, 0xbc, 0xfb, 0x8b, 0x81, 0x72, 0x35, 0x7a, 0x4c, 0x03, 0xfe, 0x7f,
+	0xd1, 0x12, 0x00, 0xb5, 0xd2, 0xf2, 0xde, 0x40, 0x4b, 0x91, 0xe9, 0xf7, 0xc2, 0x57, 0xd3, 0x9c,
+	0x44, 0x57, 0xe3, 0x88, 0xaa, 0x1a, 0xfd, 0x43, 0x9f, 0x32, 0x5e, 0x2c, 0xa5, 0xf8, 0x08, 0x79,
+	0xbe, 0xc7, 0xa8, 0x3e, 0xd3, 0xe0, 0x9b, 0x71, 0x89, 0x20, 0x83, 0x55, 0xb5, 0xbc, 0x86, 0x2c,
+	0xe3, 0x13, 0x34, 0xa7, 0xa7, 0x81, 0x9a, 0x85, 0xc5, 0x54, 0xf8, 0x31, 0xa8, 0xef, 0x66, 0x65,
+	0xa7, 0xa2, 0x96, 0x3f, 0x0d, 0x39, 0x05, 0xc5, 0x78, 0xac, 0x3e, 0x6d, 0xfa, 0x83, 0xe1, 0xe8,
+	0x04, 0x96, 0x3d, 0x8c, 0xc3, 0x07, 0x8b, 0x78, 0x94, 0x35, 0x29, 0x95, 0x08, 0x4b, 0x50, 0x36,
+	0xfa, 0x92, 0x4e, 0x07, 0xe1, 0x08, 0xcd, 0xec, 0x51, 0x7e, 0xe0, 0xf5, 0xf7, 0x65, 0x39, 0x3c,
+	0x17, 0x73, 0x9a, 0x6d, 0x60, 0x26, 0xb7, 0x80, 0x63, 0x03, 0x5f, 0x4d, 0x4d, 0x03, 0xdf, 0xeb,
+	0x6b, 0xdc, 0x33, 0x34, 0x1b, 0x99, 0x00, 0x1f, 0xde, 0xad, 0x07, 0x40, 0x79, 0x87, 0x64, 0x0d,
+	0xab, 0xa5, 0x68, 0x14, 0xb3, 0xd8, 0xac, 0x4f, 0xd0, 0xf4, 0x96, 0xdf, 0xed, 0x3a, 0xfc, 0x7f,
+	0xa4, 0x96, 0x8b, 0xce, 0x6d, 0x92, 0x35, 0xac, 0x2d, 0x20, 0x09, 0x11, 0x1f, 0xa2, 0xf9, 0xe1,
+	0x01, 0x2b, 0x79, 0x5f, 0x9d, 0xd5, 0x64, 0xf2, 0x82, 0x4a, 0x00, 0xbe, 0x8c, 0x8b, 0xa9, 0xc1,
+	0x94, 0x17, 0xd3, 0xd7, 0x28, 0x1f, 0x42, 0xec, 0x6e, 0xf9, 0x5e, 0xdb, 0xe9, 0x64, 0x0c, 0xd3,
+	0xc0, 0x7c, 0xce, 0x30, 0xf5, 0xba, 0x8d, 0x96, 0xc2, 0xf1, 0xd0, 0x92, 0x5c, 0x0e, 0xe2, 0x04,
+	0x49, 0xd0, 0xcc, 0xbd, 0x57, 0x5d, 0xaa, 0xc8, 0x79, 0x64, 0x22, 0x40, 0x2f, 0xc3, 0x01, 0x1a,
+	0xef, 0xce, 0x36, 0x3a, 0x4a, 0xf2, 0xae, 0x46, 0xd1, 0x62, 0x14, 0x76, 0x92, 0xeb, 0xc2, 0x26,
+	0x10, 0x10, 0xbc, 0x9e, 0x49, 0xa0, 0xaf, 0x09, 0xdf, 0x85, 0xd5, 0xcb, 0x47, 0xba, 0xac, 0x13,
+	0x74, 0x3e, 0xf9, 0xba, 0xc7, 0xb2, 0x8e, 0xab, 0xf2, 0x59, 0x10, 0xd7, 0xd0, 0xec, 0xe0, 0xd4,
+	0x2b, 0xfc, 0x63, 0x91, 0x49, 0xe0, 0x91, 0x0d, 0x80, 0x2b, 0xe1, 0xd5, 0x34, 0x38, 0x79, 0x04,
+	0xde, 0x45, 0x0b, 0x75, 0x1e, 0x50, 0xab, 0x7b, 0x68, 0xb5, 0x7e, 0xa0, 0x9c, 0x1d, 0xf4, 0x39,
+	0x5e, 0x8e, 0x04, 0x42, 0x1a, 0x0e, 0xfa, 0x3c, 0x73, 0x7c, 0x3f, 0xda, 0x34, 0xf0, 0x0e, 0x1c,
+	0xf4, 0xa9, 0x73, 0x4c, 0x15, 0xd0, 0xbe, 0x37, 0xe2, 0xad, 0x2d, 0x89, 0xbf, 0xef, 0x91, 0x8f,
+	0xee, 0x1b, 0xf8, 0x5b, 0x94, 0x57, 0x30, 0x5b, 0x6f, 0x2c, 0xaf, 0x43, 0xe1, 0x0d, 0x33, 0x3b,
+	0x88, 0x85, 0x08, 0x52, 0xa8, 0x09, 0x80, 0xbd, 0x46, 0x39, 0x79, 0xbc, 0x0f, 0xbd, 0x84, 0xe2,
+	0x94, 0xd7, 0xd1, 0x62, 0x4a, 0x1d, 0x59, 0x87, 0xd8, 0x15, 0xc9, 0x92, 0x8e, 0x5d, 0xe4, 0xa9,
+	0x55, 0xa6, 0xaa, 0xd8, 0x1e, 0xc2, 0xd8, 0xd1, 0x9b, 0x6e, 0x02, 0x33, 0x25, 0x55, 0x23, 0xa0,
+	0x72, 0x44, 0x9a, 0x28, 0x27, 0x67, 0xdc, 0x87, 0xa8, 0xbe, 0x01, 0x04, 0x57, 0x8b, 0x23, 0x08,
+	0x84, 0xf4, 0x16, 0xca, 0xc9, 0x13, 0xf4, 0x79, 0x1c, 0x59, 0x43, 0xae, 0x3a, 0x52, 0x19, 0xd5,
+	0x91, 0xef, 0xd1, 0x82, 0x98, 0x0c, 0xe1, 0x00, 0x8c, 0x98, 0x0d, 0x29, 0xd1, 0x5a, 0x03, 0x92,
+	0x15, 0x9c, 0x3e, 0x04, 0xf8, 0x19, 0x5c, 0x02, 0x53, 0xb6, 0xa5, 0xb9, 0xc8, 0xc1, 0x85, 0xe9,
+	0x9b, 0x05, 0x2e, 0x65, 0x1f, 0x4d, 0x18, 0xfe, 0x2d, 0xba, 0x54, 0xa7, 0x6e, 0xfb, 0x05, 0x65,
+	0x3c, 0x02, 0x56, 0xd0, 0x60, 0xda, 0x3a, 0x58, 0xfc, 0x6f, 0x02, 0xec, 0x3a, 0xb9, 0x92, 0x0a,
+	0xcb, 0xa8, 0xdb, 0x86, 0x8f, 0x28, 0xf8, 0x08, 0x4e, 0xd3, 0x91, 0x17, 0xf5, 0xf8, 0x9b, 0x48,
+	0xe2, 0xc9, 0x3d, 0x39, 0x75, 0x45, 0xa2, 0x0b, 0x3f, 0xf5, 0x18, 0xe2, 0x34, 0xf1, 0x77, 0x08,
+	0xef, 0x51, 0x1e, 0x7b, 0x66, 0x8f, 0x20, 0xa7, 0xbf, 0xc4, 0x27, 0xe3, 0x11, 0xc5, 0x86, 0x47,
+	0x7d, 0xcc, 0xd0, 0x6c, 0xdd, 0xe9, 0xf6, 0x5d, 0x8b, 0x53, 0x68, 0x8f, 0xcb, 0x83, 0x40, 0x84,
+	0xab, 0xf5, 0x36, 0x99, 0x71, 0x2a, 0x4c, 0x3c, 0x66, 0x45, 0x63, 0xa4, 0x90, 0x1a, 0x02, 0x49,
+	0xe4, 0xe5, 0x73, 0x84, 0xe4, 0x25, 0x1a, 0xde, 0x0e, 0x67, 0xc2, 0xbb, 0x61, 0x66, 0x2a, 0xaa,
+	0xd7, 0x07, 0x32, 0x27, 0xe0, 0x87, 0xad, 0xd5, 0xfb, 0x88, 0xba, 0x3a, 0x4f, 0x80, 0x37, 0xbc,
+	0xe4, 0x1f, 0x3f, 0xa8, 0x86, 0x9a, 0x0b, 0xc0, 0xef, 0xd1, 0xb4, 0x98, 0xf2, 0x6f, 0xf9, 0x91,
+	0xe5, 0xf6, 0x29, 0x5e, 0x35, 0x07, 0x9f, 0xf7, 0x4c, 0xa8, 0xa9, 0xf7, 0x68, 0xcb, 0x69, 0x3b,
+	0x34, 0x28, 0xae, 0x84, 0x4c, 0x35, 0xca, 0xfb, 0x81, 0x07, 0x0e, 0x8c, 0x94, 0x00, 0x7e, 0x09,
+	0xe7, 0x75, 0x44, 0xc2, 0x80, 0xaf, 0xd0, 0x74, 0x3d, 0x54, 0xcc, 0x27, 0xf0, 0x69, 0xb6, 0xee,
+	0x04, 0x70, 0x18, 0xc9, 0x46, 0xf9, 0x3a, 0xb7, 0x02, 0x7e, 0xd0, 0x6d, 0x39, 0x22, 0x89, 0xc5,
+	0xd1, 0xcb, 0xf7, 0xb0, 0x4a, 0x10, 0x5d, 0xab, 0x07, 0x13, 0xcb, 0xea, 0x48, 0xb6, 0xab, 0x19,
+	0x4f, 0x06, 0xcf, 0xfe, 0x4c, 0xe0, 0x35, 0x06, 0xdf, 0x0a, 0x45, 0x78, 0x7e, 0x34, 0xd0, 0xe2,
+	0x61, 0x9f, 0x1f, 0xf9, 0x4e, 0xaf, 0x0e, 0x9f, 0x34, 0x0f, 0xe5, 0xa7, 0x4a, 0x7c, 0xcf, 0x4c,
+	0xfb, 0xce, 0x99, 0xf0, 0xd3, 0xfc, 0x59, 0x5d, 0xd4, 0x33, 0x6e, 0x90, 0xb8, 0x29, 0xa8, 0x42,
+	0x47, 0x0f, 0xad, 0xc8, 0xe5, 0x2d, 0xa9, 0x64, 0xf0, 0xf8, 0xf4, 0x2d, 0x3d, 0xcd, 0xe4, 0x51,
+	0xef, 0x83, 0x95, 0xcd, 0x11, 0x3c, 0xd5, 0xb3, 0x1f, 0xe8, 0xe9, 0xe0, 0x5d, 0xe2, 0x1d, 0xc2,
+	0xaa, 0xe3, 0x2f, 0x19, 0x0d, 0x34, 0xd9, 0x6d, 0x33, 0xf9, 0xd5, 0x36, 0xe6, 0x73, 0x5e, 0x97,
+	0xf5, 0x43, 0xce, 0x6a, 0x44, 0x4a, 0x18, 0x51, 0x74, 0xd8, 0x45, 0x4b, 0xc3, 0x0e, 0x87, 0x15,
+	0x8c, 0xd5, 0x5d, 0x75, 0x2f, 0xaa, 0xdc, 0xcc, 0xe4, 0x88, 0x74, 0xf6, 0x6b, 0x17, 0xe5, 0xfd,
+	0xa0, 0x03, 0x5b, 0x6f, 0xcb, 0x0f, 0x6c, 0xf5, 0xa1, 0xeb, 0xeb, 0x19, 0xf9, 0x21, 0xee, 0x10,
+	0x3e, 0x22, 0xff, 0xde, 0xec, 0x38, 0xfc, 0x4d, 0xbf, 0x29, 0xf8, 0xab, 0xda, 0x53, 0xfd, 0xf7,
+	0x81, 0x7b, 0xfa, 0x93, 0xf6, 0x93, 0x6a, 0xc7, 0x57, 0x75, 0xff, 0x98, 0x5a, 0x3e, 0xd0, 0x78,
+	0x47, 0xe1, 0xef, 0x7a, 0x87, 0x53, 0xcd, 0x0b, 0xe0, 0xff, 0xe8, 0xbf, 0x01, 0x00, 0x00, 0xff,
+	0xff, 0xda, 0x32, 0x13, 0xef, 0x8c, 0x20, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -610,6 +623,14 @@
 	SetExtValue(ctx context.Context, in *extension.ValueSet, opts ...grpc.CallOption) (*empty.Empty, error)
 	// omci start and stop cli implementation
 	StartOmciTestAction(ctx context.Context, in *omci.OmciTestRequest, opts ...grpc.CallOption) (*omci.TestResponse, error)
+	// Saves or updates system wide configuration into voltha KV
+	PutVoipSystemProfile(ctx context.Context, in *voip_system_profile.VoipSystemProfileRequest, opts ...grpc.CallOption) (*empty.Empty, error)
+	// Deletes the given profile from voltha KV
+	DeleteVoipSystemProfile(ctx context.Context, in *common.Key, opts ...grpc.CallOption) (*empty.Empty, error)
+	// Saves or updates a profile (VOIP) into voltha KV
+	PutVoipUserProfile(ctx context.Context, in *voip_user_profile.VoipUserProfileRequest, opts ...grpc.CallOption) (*empty.Empty, error)
+	// Deletes the given profile from voltha KV
+	DeleteVoipUserProfile(ctx context.Context, in *common.Key, opts ...grpc.CallOption) (*empty.Empty, error)
 }
 
 type volthaServiceClient struct {
@@ -1274,6 +1295,42 @@
 	return out, nil
 }
 
+func (c *volthaServiceClient) PutVoipSystemProfile(ctx context.Context, in *voip_system_profile.VoipSystemProfileRequest, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/PutVoipSystemProfile", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) DeleteVoipSystemProfile(ctx context.Context, in *common.Key, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/DeleteVoipSystemProfile", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) PutVoipUserProfile(ctx context.Context, in *voip_user_profile.VoipUserProfileRequest, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/PutVoipUserProfile", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *volthaServiceClient) DeleteVoipUserProfile(ctx context.Context, in *common.Key, opts ...grpc.CallOption) (*empty.Empty, error) {
+	out := new(empty.Empty)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/DeleteVoipUserProfile", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // VolthaServiceServer is the server API for VolthaService service.
 type VolthaServiceServer interface {
 	// Get high level information on the Voltha cluster
@@ -1433,6 +1490,14 @@
 	SetExtValue(context.Context, *extension.ValueSet) (*empty.Empty, error)
 	// omci start and stop cli implementation
 	StartOmciTestAction(context.Context, *omci.OmciTestRequest) (*omci.TestResponse, error)
+	// Saves or updates system wide configuration into voltha KV
+	PutVoipSystemProfile(context.Context, *voip_system_profile.VoipSystemProfileRequest) (*empty.Empty, error)
+	// Deletes the given profile from voltha KV
+	DeleteVoipSystemProfile(context.Context, *common.Key) (*empty.Empty, error)
+	// Saves or updates a profile (VOIP) into voltha KV
+	PutVoipUserProfile(context.Context, *voip_user_profile.VoipUserProfileRequest) (*empty.Empty, error)
+	// Deletes the given profile from voltha KV
+	DeleteVoipUserProfile(context.Context, *common.Key) (*empty.Empty, error)
 }
 
 // UnimplementedVolthaServiceServer can be embedded to have forward compatible implementations.
@@ -1631,6 +1696,18 @@
 func (*UnimplementedVolthaServiceServer) StartOmciTestAction(ctx context.Context, req *omci.OmciTestRequest) (*omci.TestResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method StartOmciTestAction not implemented")
 }
+func (*UnimplementedVolthaServiceServer) PutVoipSystemProfile(ctx context.Context, req *voip_system_profile.VoipSystemProfileRequest) (*empty.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method PutVoipSystemProfile not implemented")
+}
+func (*UnimplementedVolthaServiceServer) DeleteVoipSystemProfile(ctx context.Context, req *common.Key) (*empty.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DeleteVoipSystemProfile not implemented")
+}
+func (*UnimplementedVolthaServiceServer) PutVoipUserProfile(ctx context.Context, req *voip_user_profile.VoipUserProfileRequest) (*empty.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method PutVoipUserProfile not implemented")
+}
+func (*UnimplementedVolthaServiceServer) DeleteVoipUserProfile(ctx context.Context, req *common.Key) (*empty.Empty, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DeleteVoipUserProfile not implemented")
+}
 
 func RegisterVolthaServiceServer(s *grpc.Server, srv VolthaServiceServer) {
 	s.RegisterService(&_VolthaService_serviceDesc, srv)
@@ -2802,6 +2879,78 @@
 	return interceptor(ctx, in, info, handler)
 }
 
+func _VolthaService_PutVoipSystemProfile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voip_system_profile.VoipSystemProfileRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).PutVoipSystemProfile(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/PutVoipSystemProfile",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).PutVoipSystemProfile(ctx, req.(*voip_system_profile.VoipSystemProfileRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_DeleteVoipSystemProfile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.Key)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).DeleteVoipSystemProfile(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/DeleteVoipSystemProfile",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).DeleteVoipSystemProfile(ctx, req.(*common.Key))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_PutVoipUserProfile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(voip_user_profile.VoipUserProfileRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).PutVoipUserProfile(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/PutVoipUserProfile",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).PutVoipUserProfile(ctx, req.(*voip_user_profile.VoipUserProfileRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _VolthaService_DeleteVoipUserProfile_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(common.Key)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).DeleteVoipUserProfile(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/DeleteVoipUserProfile",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).DeleteVoipUserProfile(ctx, req.(*common.Key))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 var _VolthaService_serviceDesc = grpc.ServiceDesc{
 	ServiceName: "voltha.VolthaService",
 	HandlerType: (*VolthaServiceServer)(nil),
@@ -3050,6 +3199,22 @@
 			MethodName: "StartOmciTestAction",
 			Handler:    _VolthaService_StartOmciTestAction_Handler,
 		},
+		{
+			MethodName: "PutVoipSystemProfile",
+			Handler:    _VolthaService_PutVoipSystemProfile_Handler,
+		},
+		{
+			MethodName: "DeleteVoipSystemProfile",
+			Handler:    _VolthaService_DeleteVoipSystemProfile_Handler,
+		},
+		{
+			MethodName: "PutVoipUserProfile",
+			Handler:    _VolthaService_PutVoipUserProfile_Handler,
+		},
+		{
+			MethodName: "DeleteVoipUserProfile",
+			Handler:    _VolthaService_DeleteVoipUserProfile_Handler,
+		},
 	},
 	Streams: []grpc.StreamDesc{
 		{
diff --git a/protos/voltha_protos/common.proto b/protos/voltha_protos/common.proto
index 7ff3229..d44611f 100755
--- a/protos/voltha_protos/common.proto
+++ b/protos/voltha_protos/common.proto
@@ -6,6 +6,11 @@
 
 option java_package = "org.opencord.voltha";
 
+// Full path for KV store
+message Key {
+    string key = 1;
+}
+
 // Convey a resource identifier
 message ID {
     string id = 1;
diff --git a/protos/voltha_protos/voip_system_profile.proto b/protos/voltha_protos/voip_system_profile.proto
new file mode 100644
index 0000000..814b086
--- /dev/null
+++ b/protos/voltha_protos/voip_system_profile.proto
@@ -0,0 +1,197 @@
+// Copyright (c) 2018 Open Networking Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at:
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+option go_package = "github.com/opencord/voltha-protos/v5/go/voip_system_profile";
+option java_package = "org.opencord.voltha.voip_system_profile";
+
+package voip_system_profile;
+import "google/api/annotations.proto";
+
+message VoipSystemProfileRequest {
+  string key = 1;
+  VoipSystemProfile voipSystemProfile = 2;
+}
+
+// A system wide profile for voip service that can be stored into voltha KV anytime.
+// Designed based on G988-2017 (also designed flexible to be able to be modified later on)
+message VoipSystemProfile {
+  SipConfig sipConfig = 1;
+  VoipConfig voipConfig = 2;
+}
+
+// Common voip fields are grouped here
+message VoipConfig {
+  IpHostConfig ipHostConfig = 1;
+  TcpUdpConfig tcpUdpConfig = 2;
+  VoipVoiceCtp voipVoiceCtp = 3;
+  VoipMediaProfile voipMediaProfile = 4;
+  VoiceServiceProfile voiceServiceProfile = 5;
+  RtpProfile rtpProfile = 6;
+  PptpPotsUni pptpPotsUni = 7;
+}
+
+message IpHostConfig {
+  uint32 ipOptions = 1;
+  string onuIdentifier = 2;
+  string ipAddress = 3;
+  string mask = 4;
+  string gateway = 5;
+  string primaryDns = 6;
+  string secondaryDns = 7;
+  string relayAgentOptions = 8;
+}
+
+message TcpUdpConfig {
+  uint32 protocol = 1;
+  string tosField = 2;
+}
+
+message VoipVoiceCtp {
+  uint32 signallingCode = 1;
+}
+
+message VoipMediaProfile {
+  uint32 faxMode = 1;
+  uint32 codecSelection1 = 2;
+  uint32 packetPeriodSelection1 = 3;
+  uint32 silenceSuppression1 = 4;
+  uint32 codecSelection2 = 5;
+  uint32 packetPeriodSelection2 = 6;
+  uint32 silenceSuppression2 = 7;
+  uint32 codecSelection3 = 8;
+  uint32 packetPeriodSelection3 = 9;
+  uint32 silenceSuppression3 = 10;
+  uint32 codecSelection4 = 11;
+  uint32 packetPeriodSelection4 = 12;
+  uint32 silenceSuppression4 = 13;
+  uint32 oobDtmf = 14;
+}
+
+message VoiceServiceProfile {
+  uint32 announcementType = 1;
+  uint32 jitterTarget = 2;
+  uint32 jitterBufferMax = 3;
+  bool echoCancelInd = 4;
+  uint32 pstnProtocolVariant = 5;
+  uint32 dtmfDigitLevels = 6;
+  uint32 dtmfDigitDuration = 7;
+  uint32 hookFlashMinimumTime = 8;
+}
+
+message RtpProfile {
+  uint32 localPortMin = 1;
+  uint32 localPortMax = 2;
+  string dscpMark = 3;
+  uint32 piggyBackEvents = 4;
+  uint32 toneEvents = 5;
+  uint32 dtmfEvents = 6;
+  uint32 casEvents = 7;
+}
+
+message PptpPotsUni {
+  string arc = 1;
+  string arcInterval = 2;
+  uint32 impedance = 3;
+  uint32 transmissionPath = 4;
+  sint32 rxGain = 5;
+  sint32 txGain = 6;
+  uint32 potsHoldOverTime = 7;
+  uint32 nominalFeedVoltage = 8;
+  uint32 lossOfSoftSwitch = 9;
+}
+
+// Sip specific fields are grouped here
+message SipConfig {
+  SipUserData sipUserData = 1;
+  SipAgentConfig sipAgentConfig = 2;
+  NetworkDialPlan  networkDialPlan = 3;
+  VoipFeatureAccessCodes voipFeatureAccessCodes = 4;
+  VoipApplicationServiceProfile voipApplicationServiceProfile = 5;
+}
+
+message SipUserData {
+  string userPartAor = 1;
+  UsernameAndPassword usernameAndPassword = 2;
+  string voicemailServerSipUri = 3;
+  int32 voicemailSubscriptionExpirationTime = 4;
+  int32 releaseTimer = 5;
+  int32 rohTimer = 6;
+}
+
+message SipAgentConfig {
+  string outboundProxyAddress = 1;
+  string primarySipDns = 2;
+  string secondarySipDns = 3;
+  int32 sipRegExpTime = 4;
+  int32 sipReregHeadStartTime = 5;
+  string SipRegistrar = 6;
+  string softSwitch = 7;
+  SipResponseTable sipResponseTable = 8;
+  bool sipOptionTransmitControl = 9;
+  string sipUriFormat = 10;
+  string redundantSipAgentPointer = 11;
+}
+
+message NetworkDialPlan {
+  uint32 criticalDialTimeout = 1;
+  uint32 partialDialTimeout = 2;
+  uint32 dialPlanFormat = 3;
+  DialPlanTable dialPlanTable = 4;
+}
+
+message UsernameAndPassword {
+  int32 validationScheme = 1;
+}
+
+message SipResponseTable {
+  string sipResponseCode = 1;
+  string tone = 2;
+  string textMessage = 3;
+}
+
+message DialPlanTable {
+  uint32 dialPlanId = 1;
+  uint32 action = 2;
+  string dialPlanToken = 3;
+  uint32 dialPlanTableMaxSize = 4;
+}
+
+message VoipFeatureAccessCodes {
+  string cancelCallWaiting = 1;
+  string callHold = 2;
+  string callPark = 3;
+  string callerIdActivate = 4;
+  string callerIdDeactivate = 5;
+  string doNotDisturbActivation = 6;
+  string doNotDisturbDeactivation = 7;
+  string doNotDisturbPinChange = 8;
+  string emergencyServiceNumber = 9;
+  string intercomService = 10;
+  string unattendedCallTransfer = 11;
+  string attendedCallTransfer = 12;
+}
+
+message VoipApplicationServiceProfile {
+  uint32 cidFeatures = 1;
+  uint32 callWaitingFeatures = 2;
+  uint32 callProgressOrTransferFeatures = 3;
+  uint32 callPresentationFeatures = 4;
+  uint32 directConnectFeature = 5;
+  string directConnectUriPointer = 6;
+  string bridgedLineAgentUriPointer = 7;
+  string conferenceFactoryUriPointer = 8;
+  uint32 dialToneDelayTimer = 9;
+}
\ No newline at end of file
diff --git a/protos/voltha_protos/voip_user_profile.proto b/protos/voltha_protos/voip_user_profile.proto
new file mode 100644
index 0000000..b5a48e5
--- /dev/null
+++ b/protos/voltha_protos/voip_user_profile.proto
@@ -0,0 +1,39 @@
+// Copyright (c) 2018 Open Networking Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at:
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+syntax = "proto3";
+
+option go_package = "github.com/opencord/voltha-protos/v5/go/voip_user_profile";
+option java_package = "org.opencord.voltha.voip_user_profile";
+
+package voip_user_profile;
+import "google/api/annotations.proto";
+
+// A user specific profile for voip service
+message VoipUserProfileRequest {
+  // for the path in KV store
+  string key = 1;
+  VoipUserProfile voipUserProfile = 2;
+}
+
+message VoipUserProfile {
+  string voipSystemProfileKey = 1;
+  string username = 2;
+  string password = 3;
+  string domain = 4;
+  string proxy = 5;
+  uint32 port = 6;
+  string sipDisplayName = 7;
+  string realm = 8;
+}
\ No newline at end of file
diff --git a/protos/voltha_protos/voltha.proto b/protos/voltha_protos/voltha.proto
index 359858e..be9ff96 100755
--- a/protos/voltha_protos/voltha.proto
+++ b/protos/voltha_protos/voltha.proto
@@ -21,6 +21,8 @@
 import "voltha_protos/openflow_13.proto";
 import "voltha_protos/events.proto";
 import "voltha_protos/extensions.proto";
+import "voltha_protos/voip_system_profile.proto";
+import "voltha_protos/voip_user_profile.proto";
 
 import "voltha_protos/omci_mib_db.proto";
 import "voltha_protos/omci_alarm_db.proto";
@@ -576,5 +578,35 @@
             body: "*"
         };
     }
+
+    // Saves or updates system wide configuration into voltha KV
+    rpc PutVoipSystemProfile(voip_system_profile.VoipSystemProfileRequest) returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            post: "/api/v1/voip_system_profile"
+            body: "*"
+        };
+    }
+
+    // Deletes the given profile from voltha KV
+    rpc DeleteVoipSystemProfile(common.Key) returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            delete: "/api/v1/voip_system_profile/{key}/delete"
+        };
+    }
+
+    // Saves or updates a profile (VOIP) into voltha KV
+    rpc PutVoipUserProfile(voip_user_profile.VoipUserProfileRequest) returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            post: "/api/v1/voip_user_profile"
+            body: "*"
+        };
+    }
+
+    // Deletes the given profile from voltha KV
+    rpc DeleteVoipUserProfile(common.Key) returns(google.protobuf.Empty) {
+        option (google.api.http) = {
+            delete: "/api/v1/voip_user_profile/{key}/delete"
+        };
+    }
 }
 
diff --git a/voltha.pb b/voltha.pb
index b6df8ba..b5c9f4b 100644
--- a/voltha.pb
+++ b/voltha.pb
Binary files differ
