diff --git a/proto/gosdn/gosdn.pb.go b/proto/gosdn/gosdn.pb.go
index 13887e9431a0a8f41fd6f3ecc06972a9efc3d7c0..f3664ce9c9c7b3974a621801ad4dd4b1e7290f00 100644
--- a/proto/gosdn/gosdn.pb.go
+++ b/proto/gosdn/gosdn.pb.go
@@ -26,52 +26,6 @@ const (
 // of the legacy proto package is being used.
 const _ = proto.ProtoPackageIsVersion4
 
-type GetRequestGetType int32
-
-const (
-	GetRequest_PND  GetRequestGetType = 0
-	GetRequest_PNDS GetRequestGetType = 1
-)
-
-// Enum value maps for GetRequestGetType.
-var (
-	GetRequestGetType_name = map[int32]string{
-		0: "PND",
-		1: "PNDS",
-	}
-	GetRequestGetType_value = map[string]int32{
-		"PND":  0,
-		"PNDS": 1,
-	}
-)
-
-func (x GetRequestGetType) Enum() *GetRequestGetType {
-	p := new(GetRequestGetType)
-	*p = x
-	return p
-}
-
-func (x GetRequestGetType) String() string {
-	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
-}
-
-func (GetRequestGetType) Descriptor() protoreflect.EnumDescriptor {
-	return file_proto_gosdn_gosdn_proto_enumTypes[0].Descriptor()
-}
-
-func (GetRequestGetType) Type() protoreflect.EnumType {
-	return &file_proto_gosdn_gosdn_proto_enumTypes[0]
-}
-
-func (x GetRequestGetType) Number() protoreflect.EnumNumber {
-	return protoreflect.EnumNumber(x)
-}
-
-// Deprecated: Use GetRequestGetType.Descriptor instead.
-func (GetRequestGetType) EnumDescriptor() ([]byte, []int) {
-	return file_proto_gosdn_gosdn_proto_rawDescGZIP(), []int{0, 0}
-}
-
 type SetResponseStatus int32
 
 const (
@@ -102,11 +56,11 @@ func (x SetResponseStatus) String() string {
 }
 
 func (SetResponseStatus) Descriptor() protoreflect.EnumDescriptor {
-	return file_proto_gosdn_gosdn_proto_enumTypes[1].Descriptor()
+	return file_proto_gosdn_gosdn_proto_enumTypes[0].Descriptor()
 }
 
 func (SetResponseStatus) Type() protoreflect.EnumType {
-	return &file_proto_gosdn_gosdn_proto_enumTypes[1]
+	return &file_proto_gosdn_gosdn_proto_enumTypes[0]
 }
 
 func (x SetResponseStatus) Number() protoreflect.EnumNumber {
@@ -123,9 +77,9 @@ type GetRequest struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Timestamp int64             `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch.
-	Type      GetRequestGetType `protobuf:"varint,2,opt,name=type,proto3,enum=gosdn.GetRequestGetType" json:"type,omitempty"`
-	Id        string            `protobuf:"bytes,3,opt,name=id,proto3" json:"id,omitempty"`
+	Timestamp int64    `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch.
+	All       bool     `protobuf:"varint,2,opt,name=all,proto3" json:"all,omitempty"`
+	Pid       []string `protobuf:"bytes,3,rep,name=pid,proto3" json:"pid,omitempty"`
 }
 
 func (x *GetRequest) Reset() {
@@ -167,18 +121,18 @@ func (x *GetRequest) GetTimestamp() int64 {
 	return 0
 }
 
-func (x *GetRequest) GetType() GetRequestGetType {
+func (x *GetRequest) GetAll() bool {
 	if x != nil {
-		return x.Type
+		return x.All
 	}
-	return GetRequest_PND
+	return false
 }
 
-func (x *GetRequest) GetId() string {
+func (x *GetRequest) GetPid() []string {
 	if x != nil {
-		return x.Id
+		return x.Pid
 	}
-	return ""
+	return nil
 }
 
 type GetResponse struct {
@@ -186,11 +140,8 @@ type GetResponse struct {
 	sizeCache     protoimpl.SizeCache
 	unknownFields protoimpl.UnknownFields
 
-	Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch.
-	// Types that are assignable to GetOneof:
-	//	*GetResponse_Pnds
-	//	*GetResponse_Pnd
-	GetOneof isGetResponse_GetOneof `protobuf_oneof:"get_oneof"`
+	Timestamp int64                         `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Timestamp in nanoseconds since Epoch.
+	Pnd       []*pnd.PrincipalNetworkDomain `protobuf:"bytes,2,rep,name=pnd,proto3" json:"pnd,omitempty"`
 }
 
 func (x *GetResponse) Reset() {
@@ -232,43 +183,13 @@ func (x *GetResponse) GetTimestamp() int64 {
 	return 0
 }
 
-func (m *GetResponse) GetGetOneof() isGetResponse_GetOneof {
-	if m != nil {
-		return m.GetOneof
-	}
-	return nil
-}
-
-func (x *GetResponse) GetPnds() *PrincipalNetworkDomains {
-	if x, ok := x.GetGetOneof().(*GetResponse_Pnds); ok {
-		return x.Pnds
-	}
-	return nil
-}
-
-func (x *GetResponse) GetPnd() *pnd.PrincipalNetworkDomain {
-	if x, ok := x.GetGetOneof().(*GetResponse_Pnd); ok {
+func (x *GetResponse) GetPnd() []*pnd.PrincipalNetworkDomain {
+	if x != nil {
 		return x.Pnd
 	}
 	return nil
 }
 
-type isGetResponse_GetOneof interface {
-	isGetResponse_GetOneof()
-}
-
-type GetResponse_Pnds struct {
-	Pnds *PrincipalNetworkDomains `protobuf:"bytes,2,opt,name=pnds,proto3,oneof"`
-}
-
-type GetResponse_Pnd struct {
-	Pnd *pnd.PrincipalNetworkDomain `protobuf:"bytes,3,opt,name=pnd,proto3,oneof"`
-}
-
-func (*GetResponse_Pnds) isGetResponse_GetOneof() {}
-
-func (*GetResponse_Pnd) isGetResponse_GetOneof() {}
-
 type SetRequest struct {
 	state         protoimpl.MessageState
 	sizeCache     protoimpl.SizeCache
@@ -363,106 +284,39 @@ func (x *SetResponse) GetTimestamp() int64 {
 	return 0
 }
 
-type PrincipalNetworkDomains struct {
-	state         protoimpl.MessageState
-	sizeCache     protoimpl.SizeCache
-	unknownFields protoimpl.UnknownFields
-
-	Pnds map[string]*pnd.PrincipalNetworkDomain `protobuf:"bytes,1,rep,name=pnds,proto3" json:"pnds,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
-}
-
-func (x *PrincipalNetworkDomains) Reset() {
-	*x = PrincipalNetworkDomains{}
-	if protoimpl.UnsafeEnabled {
-		mi := &file_proto_gosdn_gosdn_proto_msgTypes[4]
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		ms.StoreMessageInfo(mi)
-	}
-}
-
-func (x *PrincipalNetworkDomains) String() string {
-	return protoimpl.X.MessageStringOf(x)
-}
-
-func (*PrincipalNetworkDomains) ProtoMessage() {}
-
-func (x *PrincipalNetworkDomains) ProtoReflect() protoreflect.Message {
-	mi := &file_proto_gosdn_gosdn_proto_msgTypes[4]
-	if protoimpl.UnsafeEnabled && x != nil {
-		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
-		if ms.LoadMessageInfo() == nil {
-			ms.StoreMessageInfo(mi)
-		}
-		return ms
-	}
-	return mi.MessageOf(x)
-}
-
-// Deprecated: Use PrincipalNetworkDomains.ProtoReflect.Descriptor instead.
-func (*PrincipalNetworkDomains) Descriptor() ([]byte, []int) {
-	return file_proto_gosdn_gosdn_proto_rawDescGZIP(), []int{4}
-}
-
-func (x *PrincipalNetworkDomains) GetPnds() map[string]*pnd.PrincipalNetworkDomain {
-	if x != nil {
-		return x.Pnds
-	}
-	return nil
-}
-
 var File_proto_gosdn_gosdn_proto protoreflect.FileDescriptor
 
 var file_proto_gosdn_gosdn_proto_rawDesc = []byte{
 	0x0a, 0x17, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x67, 0x6f,
 	0x73, 0x64, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x67, 0x6f, 0x73, 0x64, 0x6e,
 	0x1a, 0x19, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2f, 0x70, 0x6e,
-	0x64, 0x2f, 0x70, 0x6e, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x89, 0x01, 0x0a, 0x0a,
-	0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69,
-	0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74,
-	0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65,
-	0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x47,
-	0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x79,
-	0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03,
-	0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x1d, 0x0a, 0x08, 0x67, 0x65, 0x74, 0x5f,
-	0x74, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x50, 0x4e, 0x44, 0x10, 0x00, 0x12, 0x08, 0x0a,
-	0x04, 0x50, 0x4e, 0x44, 0x53, 0x10, 0x01, 0x22, 0xa5, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52,
-	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73,
-	0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65,
-	0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x34, 0x0a, 0x04, 0x70, 0x6e, 0x64, 0x73, 0x18, 0x02, 0x20,
-	0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x50, 0x72, 0x69, 0x6e,
-	0x63, 0x69, 0x70, 0x61, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f, 0x6d, 0x61,
-	0x69, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6e, 0x64, 0x73, 0x12, 0x35, 0x0a, 0x03, 0x70,
-	0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e,
-	0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x4e, 0x65,
-	0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x03, 0x70,
-	0x6e, 0x64, 0x42, 0x0b, 0x0a, 0x09, 0x67, 0x65, 0x74, 0x5f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x22,
-	0x2a, 0x0a, 0x0a, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a,
-	0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
-	0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x48, 0x0a, 0x0b, 0x53,
+	0x64, 0x2f, 0x70, 0x6e, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x4e, 0x0a, 0x0a, 0x47,
+	0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d,
+	0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69,
+	0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64,
+	0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x70, 0x69, 0x64, 0x22, 0x60, 0x0a, 0x0b, 0x47,
 	0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69,
 	0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74,
-	0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x1b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74,
-	0x75, 0x73, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52,
-	0x52, 0x4f, 0x52, 0x10, 0x01, 0x22, 0xb3, 0x01, 0x0a, 0x17, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69,
-	0x70, 0x61, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e,
-	0x73, 0x12, 0x3c, 0x0a, 0x04, 0x70, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
-	0x28, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61,
-	0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x2e,
-	0x50, 0x6e, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x70, 0x6e, 0x64, 0x73, 0x1a,
-	0x5a, 0x0a, 0x09, 0x50, 0x6e, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
-	0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x37,
-	0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e,
-	0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e, 0x64, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69,
-	0x70, 0x61, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e,
-	0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x32, 0x63, 0x0a, 0x05, 0x67,
-	0x6f, 0x73, 0x64, 0x6e, 0x12, 0x2c, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x11, 0x2e, 0x67, 0x6f,
-	0x73, 0x64, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12,
-	0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
-	0x73, 0x65, 0x12, 0x2c, 0x0a, 0x03, 0x53, 0x65, 0x74, 0x12, 0x11, 0x2e, 0x67, 0x6f, 0x73, 0x64,
-	0x6e, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x67,
-	0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
-	0x42, 0x0d, 0x5a, 0x0b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x62,
-	0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+	0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x33, 0x0a, 0x03, 0x70, 0x6e, 0x64, 0x18,
+	0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x70, 0x6e,
+	0x64, 0x2e, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x4e, 0x65, 0x74, 0x77, 0x6f,
+	0x72, 0x6b, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x03, 0x70, 0x6e, 0x64, 0x22, 0x2a, 0x0a,
+	0x0a, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74,
+	0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09,
+	0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x48, 0x0a, 0x0b, 0x53, 0x65, 0x74,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65,
+	0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d,
+	0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x1b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
+	0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f,
+	0x52, 0x10, 0x01, 0x32, 0x63, 0x0a, 0x05, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x12, 0x2c, 0x0a, 0x03,
+	0x47, 0x65, 0x74, 0x12, 0x11, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x47,
+	0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x03, 0x53, 0x65,
+	0x74, 0x12, 0x11, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x2e, 0x53, 0x65, 0x74,
+	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x0d, 0x5a, 0x0b, 0x70, 0x72, 0x6f, 0x74,
+	0x6f, 0x2f, 0x67, 0x6f, 0x73, 0x64, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 }
 
 var (
@@ -477,34 +331,27 @@ func file_proto_gosdn_gosdn_proto_rawDescGZIP() []byte {
 	return file_proto_gosdn_gosdn_proto_rawDescData
 }
 
-var file_proto_gosdn_gosdn_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
-var file_proto_gosdn_gosdn_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
+var file_proto_gosdn_gosdn_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_proto_gosdn_gosdn_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
 var file_proto_gosdn_gosdn_proto_goTypes = []interface{}{
-	(GetRequestGetType)(0),             // 0: gosdn.GetRequest.get_type
-	(SetResponseStatus)(0),             // 1: gosdn.SetResponse.status
-	(*GetRequest)(nil),                 // 2: gosdn.GetRequest
-	(*GetResponse)(nil),                // 3: gosdn.GetResponse
-	(*SetRequest)(nil),                 // 4: gosdn.SetRequest
-	(*SetResponse)(nil),                // 5: gosdn.SetResponse
-	(*PrincipalNetworkDomains)(nil),    // 6: gosdn.PrincipalNetworkDomains
-	nil,                                // 7: gosdn.PrincipalNetworkDomains.PndsEntry
-	(*pnd.PrincipalNetworkDomain)(nil), // 8: gosdn.pnd.PrincipalNetworkDomain
+	(SetResponseStatus)(0),             // 0: gosdn.SetResponse.status
+	(*GetRequest)(nil),                 // 1: gosdn.GetRequest
+	(*GetResponse)(nil),                // 2: gosdn.GetResponse
+	(*SetRequest)(nil),                 // 3: gosdn.SetRequest
+	(*SetResponse)(nil),                // 4: gosdn.SetResponse
+	(*pnd.PrincipalNetworkDomain)(nil), // 5: gosdn.pnd.PrincipalNetworkDomain
 }
 var file_proto_gosdn_gosdn_proto_depIdxs = []int32{
-	0, // 0: gosdn.GetRequest.type:type_name -> gosdn.GetRequest.get_type
-	6, // 1: gosdn.GetResponse.pnds:type_name -> gosdn.PrincipalNetworkDomains
-	8, // 2: gosdn.GetResponse.pnd:type_name -> gosdn.pnd.PrincipalNetworkDomain
-	7, // 3: gosdn.PrincipalNetworkDomains.pnds:type_name -> gosdn.PrincipalNetworkDomains.PndsEntry
-	8, // 4: gosdn.PrincipalNetworkDomains.PndsEntry.value:type_name -> gosdn.pnd.PrincipalNetworkDomain
-	2, // 5: gosdn.gosdn.Get:input_type -> gosdn.GetRequest
-	4, // 6: gosdn.gosdn.Set:input_type -> gosdn.SetRequest
-	3, // 7: gosdn.gosdn.Get:output_type -> gosdn.GetResponse
-	5, // 8: gosdn.gosdn.Set:output_type -> gosdn.SetResponse
-	7, // [7:9] is the sub-list for method output_type
-	5, // [5:7] is the sub-list for method input_type
-	5, // [5:5] is the sub-list for extension type_name
-	5, // [5:5] is the sub-list for extension extendee
-	0, // [0:5] is the sub-list for field type_name
+	5, // 0: gosdn.GetResponse.pnd:type_name -> gosdn.pnd.PrincipalNetworkDomain
+	1, // 1: gosdn.gosdn.Get:input_type -> gosdn.GetRequest
+	3, // 2: gosdn.gosdn.Set:input_type -> gosdn.SetRequest
+	2, // 3: gosdn.gosdn.Get:output_type -> gosdn.GetResponse
+	4, // 4: gosdn.gosdn.Set:output_type -> gosdn.SetResponse
+	3, // [3:5] is the sub-list for method output_type
+	1, // [1:3] is the sub-list for method input_type
+	1, // [1:1] is the sub-list for extension type_name
+	1, // [1:1] is the sub-list for extension extendee
+	0, // [0:1] is the sub-list for field type_name
 }
 
 func init() { file_proto_gosdn_gosdn_proto_init() }
@@ -561,30 +408,14 @@ func file_proto_gosdn_gosdn_proto_init() {
 				return nil
 			}
 		}
-		file_proto_gosdn_gosdn_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
-			switch v := v.(*PrincipalNetworkDomains); i {
-			case 0:
-				return &v.state
-			case 1:
-				return &v.sizeCache
-			case 2:
-				return &v.unknownFields
-			default:
-				return nil
-			}
-		}
-	}
-	file_proto_gosdn_gosdn_proto_msgTypes[1].OneofWrappers = []interface{}{
-		(*GetResponse_Pnds)(nil),
-		(*GetResponse_Pnd)(nil),
 	}
 	type x struct{}
 	out := protoimpl.TypeBuilder{
 		File: protoimpl.DescBuilder{
 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 			RawDescriptor: file_proto_gosdn_gosdn_proto_rawDesc,
-			NumEnums:      2,
-			NumMessages:   6,
+			NumEnums:      1,
+			NumMessages:   4,
 			NumExtensions: 0,
 			NumServices:   1,
 		},
diff --git a/proto/gosdn/gosdn.proto b/proto/gosdn/gosdn.proto
index c1c3a0aa3bbddc2fe455fa0644d74dae3d33f4ce..96f5f99973b7c5c8668a18cd166c48a2f623c465 100644
--- a/proto/gosdn/gosdn.proto
+++ b/proto/gosdn/gosdn.proto
@@ -13,31 +13,21 @@ service gosdn {
 
 message GetRequest {
   int64 timestamp = 1;          // Timestamp in nanoseconds since Epoch.
-  enum get_type {
-    PND = 0;
-    PNDS = 1;
-  }
-  get_type type = 2;
-  string id = 3;
+  bool all = 2;
+  repeated string pid = 3;
 }
 message GetResponse {
   int64 timestamp = 1;          // Timestamp in nanoseconds since Epoch.
-  oneof get_oneof {
-    PrincipalNetworkDomains pnds = 2;
-    pnd.PrincipalNetworkDomain pnd = 3;
-  }
+  repeated pnd.PrincipalNetworkDomain pnd = 2;
 }
 message SetRequest {
   int64 timestamp = 1;          // Timestamp in nanoseconds since Epoch.
 }
+
 message SetResponse {
   int64 timestamp = 1;          // Timestamp in nanoseconds since Epoch.
   enum status {
     OK = 0;
     ERROR = 1;
   }
-}
-
-message PrincipalNetworkDomains {
-  map<string, pnd.PrincipalNetworkDomain> pnds = 1;
 }
\ No newline at end of file