diff --git a/kms/kms.go b/kms/kms.go index 46e10dd118bbd66a44367d3c8eb5393dce108a68..11c7a7435a014ee2e9ef5f17b5a2e83338f58141 100644 --- a/kms/kms.go +++ b/kms/kms.go @@ -20,7 +20,7 @@ import ( type Qkdnkms interface { AddQuantumElement() *QuantumElement GlobalKeyHandler(time.Duration) error - AddPeer(kmsPeerSocket string) + AddPeer(kmsPeerSocket string, servingQLE *QuantumElement) RemovePeer(kmsPeerSocket string) } @@ -145,12 +145,12 @@ func (kms *eKMS) GenerateNewQleID() (qlElementId, error) { } // TODO/XXX error handling -func (kms *eKMS) AddPeer(kmsPeerSocket string) { +func (kms *eKMS) AddPeer(kmsPeerSocket string, servingQLE *QuantumElement) { //check if peer exists if _, there := kms.KmsPeers[kmsPeerSocket]; there { log.Fatalf("Trying to add existing peer %s", kmsPeerSocket) } - peer := NewKmsPeer() + peer := NewKmsPeer(servingQLE) peer.tcpSocketStr = kmsPeerSocket kms.kmsPeersMutex.Lock() diff --git a/kms/kmsetsi.go b/kms/kmsetsi.go index 5472595f892beaa477da24e7705568f609ea5344..b1c5b412052bccda7343ea6e441e2d557208f503 100644 --- a/kms/kmsetsi.go +++ b/kms/kmsetsi.go @@ -2,7 +2,9 @@ package kms import ( "context" + "errors" "flag" + "fmt" "log" "net" @@ -27,11 +29,37 @@ func (es *etsiServer) ETSICapabilities(ctx context.Context, in *pb.ETSICapabilit }, nil } +func (es *etsiServer) ETSIGetQuantumInterfaces(ctx context.Context, in *pb.ETSIKMSQuantumInterfaceListRequest) (qleReply *pb.ETSIKMSQuantumInterfaceListReply, err error) { + qleList := make([]*pb.QuantumElementInfo, 1) + + // Walk through QuantumLayerInterfaces and return their information + for _, qlWorks := range es.handlingEkms.QuantumElements { + qleElement := pb.QuantumElementInfo{ + QleID: uint64(qlWorks.qlID), + UdpAddr: fmt.Sprintf("%s:%d", qlWorks.QuantumElementLink.GetLocalQLPort().IP.String(), qlWorks.QuantumElementLink.GetLocalQLPort().Port), + } + qleList = append(qleList, &qleElement) + } + return &pb.ETSIKMSQuantumInterfaceListReply{ + QlElementInfo: qleList, + }, nil +} + func (es *etsiServer) ETSIAddKMSPeer(ctx context.Context, in *pb.ETSIKMSPeerRequest) (*pb.ETSIKMSPeerReply, error) { //determine the kms structure to call log.Printf("AddKMSPeer called.") - es.handlingEkms.AddPeer(in.GetKmsPeerSocket()) + // Check first if KmsLocalQLEId is actually one of ours... + qleID := in.KmsLocalQLEId + servingQLE, _ := es.handlingEkms.QuantumElements[qlElementId(qleID)] + if servingQLE == nil { + //no such element! + err := errors.New(fmt.Sprintf("Unknown local quantum element with ID %d", qleID)) + + return &pb.ETSIKMSPeerReply{}, err + } + + es.handlingEkms.AddPeer(in.GetKmsPeerSocket(), servingQLE) return &pb.ETSIKMSPeerReply{ KmsPeerName: es.handlingEkms.kmsName, diff --git a/kms/kmspeers.go b/kms/kmspeers.go index 37dc1d67928f17a7299fa857ef2affcdaeaa75f1..faea860334f59ba52bae25d7f65b2ce305fb6df9 100644 --- a/kms/kmspeers.go +++ b/kms/kmspeers.go @@ -26,15 +26,17 @@ type kmsPeerInfo interface { type kmsPeer struct { peerStatus kmsPeerStatus + servingQLE *QuantumElement tcpSocket net.TCPAddr // the IP address and TCP port (aka socket) of the kms peer tcpSocketStr string // string rep. of tcpSocket name string // the name of the kms peer id uuid.UUID // uuid of the peer } -func NewKmsPeer() (peer kmsPeer) { +func NewKmsPeer(servQLE *QuantumElement) (peer kmsPeer) { return kmsPeer{ peerStatus: kmsPeerUnknown, + servingQLE: servQLE, } } diff --git a/kmsetsiproto/kmsetsiproto.pb.go b/kmsetsiproto/kmsetsiproto.pb.go index 69bd7dfe333e844cbb70d61fd7bd4e3418ed9a54..874ff56a0b53185059f2136762407d435fcc13a0 100644 --- a/kmsetsiproto/kmsetsiproto.pb.go +++ b/kmsetsiproto/kmsetsiproto.pb.go @@ -116,18 +116,160 @@ func (x *ETSICapabilitiesReply) GetPeerKmsName() string { return "" } +type ETSIKMSQuantumInterfaceListRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ETSIKMSQuantumInterfaceListRequest) Reset() { + *x = ETSIKMSQuantumInterfaceListRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_kmsetsiproto_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ETSIKMSQuantumInterfaceListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ETSIKMSQuantumInterfaceListRequest) ProtoMessage() {} + +func (x *ETSIKMSQuantumInterfaceListRequest) ProtoReflect() protoreflect.Message { + mi := &file_kmsetsiproto_proto_msgTypes[2] + 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 ETSIKMSQuantumInterfaceListRequest.ProtoReflect.Descriptor instead. +func (*ETSIKMSQuantumInterfaceListRequest) Descriptor() ([]byte, []int) { + return file_kmsetsiproto_proto_rawDescGZIP(), []int{2} +} + +// NB for myself: this be used to link QLE mit KMS-Session! +type QuantumElementInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + QleID uint64 `protobuf:"varint,1,opt,name=qleID,proto3" json:"qleID,omitempty"` + UdpAddr string `protobuf:"bytes,2,opt,name=udpAddr,proto3" json:"udpAddr,omitempty"` +} + +func (x *QuantumElementInfo) Reset() { + *x = QuantumElementInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_kmsetsiproto_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QuantumElementInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QuantumElementInfo) ProtoMessage() {} + +func (x *QuantumElementInfo) ProtoReflect() protoreflect.Message { + mi := &file_kmsetsiproto_proto_msgTypes[3] + 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 QuantumElementInfo.ProtoReflect.Descriptor instead. +func (*QuantumElementInfo) Descriptor() ([]byte, []int) { + return file_kmsetsiproto_proto_rawDescGZIP(), []int{3} +} + +func (x *QuantumElementInfo) GetQleID() uint64 { + if x != nil { + return x.QleID + } + return 0 +} + +func (x *QuantumElementInfo) GetUdpAddr() string { + if x != nil { + return x.UdpAddr + } + return "" +} + +type ETSIKMSQuantumInterfaceListReply struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + QlElementInfo []*QuantumElementInfo `protobuf:"bytes,1,rep,name=qlElementInfo,proto3" json:"qlElementInfo,omitempty"` +} + +func (x *ETSIKMSQuantumInterfaceListReply) Reset() { + *x = ETSIKMSQuantumInterfaceListReply{} + if protoimpl.UnsafeEnabled { + mi := &file_kmsetsiproto_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ETSIKMSQuantumInterfaceListReply) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ETSIKMSQuantumInterfaceListReply) ProtoMessage() {} + +func (x *ETSIKMSQuantumInterfaceListReply) ProtoReflect() protoreflect.Message { + mi := &file_kmsetsiproto_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 ETSIKMSQuantumInterfaceListReply.ProtoReflect.Descriptor instead. +func (*ETSIKMSQuantumInterfaceListReply) Descriptor() ([]byte, []int) { + return file_kmsetsiproto_proto_rawDescGZIP(), []int{4} +} + +func (x *ETSIKMSQuantumInterfaceListReply) GetQlElementInfo() []*QuantumElementInfo { + if x != nil { + return x.QlElementInfo + } + return nil +} + type ETSIKMSPeerRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields KmsPeerSocket string `protobuf:"bytes,1,opt,name=kmsPeerSocket,proto3" json:"kmsPeerSocket,omitempty"` + KmsLocalQLEId uint64 `protobuf:"varint,2,opt,name=kmsLocalQLEId,proto3" json:"kmsLocalQLEId,omitempty"` } func (x *ETSIKMSPeerRequest) Reset() { *x = ETSIKMSPeerRequest{} if protoimpl.UnsafeEnabled { - mi := &file_kmsetsiproto_proto_msgTypes[2] + mi := &file_kmsetsiproto_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -140,7 +282,7 @@ func (x *ETSIKMSPeerRequest) String() string { func (*ETSIKMSPeerRequest) ProtoMessage() {} func (x *ETSIKMSPeerRequest) ProtoReflect() protoreflect.Message { - mi := &file_kmsetsiproto_proto_msgTypes[2] + mi := &file_kmsetsiproto_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -153,7 +295,7 @@ func (x *ETSIKMSPeerRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ETSIKMSPeerRequest.ProtoReflect.Descriptor instead. func (*ETSIKMSPeerRequest) Descriptor() ([]byte, []int) { - return file_kmsetsiproto_proto_rawDescGZIP(), []int{2} + return file_kmsetsiproto_proto_rawDescGZIP(), []int{5} } func (x *ETSIKMSPeerRequest) GetKmsPeerSocket() string { @@ -163,6 +305,13 @@ func (x *ETSIKMSPeerRequest) GetKmsPeerSocket() string { return "" } +func (x *ETSIKMSPeerRequest) GetKmsLocalQLEId() uint64 { + if x != nil { + return x.KmsLocalQLEId + } + return 0 +} + type ETSIKMSPeerReply struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -174,7 +323,7 @@ type ETSIKMSPeerReply struct { func (x *ETSIKMSPeerReply) Reset() { *x = ETSIKMSPeerReply{} if protoimpl.UnsafeEnabled { - mi := &file_kmsetsiproto_proto_msgTypes[3] + mi := &file_kmsetsiproto_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -187,7 +336,7 @@ func (x *ETSIKMSPeerReply) String() string { func (*ETSIKMSPeerReply) ProtoMessage() {} func (x *ETSIKMSPeerReply) ProtoReflect() protoreflect.Message { - mi := &file_kmsetsiproto_proto_msgTypes[3] + mi := &file_kmsetsiproto_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -200,7 +349,7 @@ func (x *ETSIKMSPeerReply) ProtoReflect() protoreflect.Message { // Deprecated: Use ETSIKMSPeerReply.ProtoReflect.Descriptor instead. func (*ETSIKMSPeerReply) Descriptor() ([]byte, []int) { - return file_kmsetsiproto_proto_rawDescGZIP(), []int{3} + return file_kmsetsiproto_proto_rawDescGZIP(), []int{6} } func (x *ETSIKMSPeerReply) GetKmsPeerName() string { @@ -219,7 +368,7 @@ type ETSIKMSPeerListRequest struct { func (x *ETSIKMSPeerListRequest) Reset() { *x = ETSIKMSPeerListRequest{} if protoimpl.UnsafeEnabled { - mi := &file_kmsetsiproto_proto_msgTypes[4] + mi := &file_kmsetsiproto_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -232,7 +381,7 @@ func (x *ETSIKMSPeerListRequest) String() string { func (*ETSIKMSPeerListRequest) ProtoMessage() {} func (x *ETSIKMSPeerListRequest) ProtoReflect() protoreflect.Message { - mi := &file_kmsetsiproto_proto_msgTypes[4] + mi := &file_kmsetsiproto_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -245,7 +394,7 @@ func (x *ETSIKMSPeerListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ETSIKMSPeerListRequest.ProtoReflect.Descriptor instead. func (*ETSIKMSPeerListRequest) Descriptor() ([]byte, []int) { - return file_kmsetsiproto_proto_rawDescGZIP(), []int{4} + return file_kmsetsiproto_proto_rawDescGZIP(), []int{7} } type ETSIKMSPeer struct { @@ -260,7 +409,7 @@ type ETSIKMSPeer struct { func (x *ETSIKMSPeer) Reset() { *x = ETSIKMSPeer{} if protoimpl.UnsafeEnabled { - mi := &file_kmsetsiproto_proto_msgTypes[5] + mi := &file_kmsetsiproto_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -273,7 +422,7 @@ func (x *ETSIKMSPeer) String() string { func (*ETSIKMSPeer) ProtoMessage() {} func (x *ETSIKMSPeer) ProtoReflect() protoreflect.Message { - mi := &file_kmsetsiproto_proto_msgTypes[5] + mi := &file_kmsetsiproto_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -286,7 +435,7 @@ func (x *ETSIKMSPeer) ProtoReflect() protoreflect.Message { // Deprecated: Use ETSIKMSPeer.ProtoReflect.Descriptor instead. func (*ETSIKMSPeer) Descriptor() ([]byte, []int) { - return file_kmsetsiproto_proto_rawDescGZIP(), []int{5} + return file_kmsetsiproto_proto_rawDescGZIP(), []int{8} } func (x *ETSIKMSPeer) GetPeerName() string { @@ -314,7 +463,7 @@ type ETSIKMSPeerListReply struct { func (x *ETSIKMSPeerListReply) Reset() { *x = ETSIKMSPeerListReply{} if protoimpl.UnsafeEnabled { - mi := &file_kmsetsiproto_proto_msgTypes[6] + mi := &file_kmsetsiproto_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -327,7 +476,7 @@ func (x *ETSIKMSPeerListReply) String() string { func (*ETSIKMSPeerListReply) ProtoMessage() {} func (x *ETSIKMSPeerListReply) ProtoReflect() protoreflect.Message { - mi := &file_kmsetsiproto_proto_msgTypes[6] + mi := &file_kmsetsiproto_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -340,7 +489,7 @@ func (x *ETSIKMSPeerListReply) ProtoReflect() protoreflect.Message { // Deprecated: Use ETSIKMSPeerListReply.ProtoReflect.Descriptor instead. func (*ETSIKMSPeerListReply) Descriptor() ([]byte, []int) { - return file_kmsetsiproto_proto_rawDescGZIP(), []int{6} + return file_kmsetsiproto_proto_rawDescGZIP(), []int{9} } func (x *ETSIKMSPeerListReply) GetPeer() []*ETSIKMSPeer { @@ -361,7 +510,7 @@ type ETSIGetEncryptKeys256BitRequest struct { func (x *ETSIGetEncryptKeys256BitRequest) Reset() { *x = ETSIGetEncryptKeys256BitRequest{} if protoimpl.UnsafeEnabled { - mi := &file_kmsetsiproto_proto_msgTypes[7] + mi := &file_kmsetsiproto_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -374,7 +523,7 @@ func (x *ETSIGetEncryptKeys256BitRequest) String() string { func (*ETSIGetEncryptKeys256BitRequest) ProtoMessage() {} func (x *ETSIGetEncryptKeys256BitRequest) ProtoReflect() protoreflect.Message { - mi := &file_kmsetsiproto_proto_msgTypes[7] + mi := &file_kmsetsiproto_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -387,7 +536,7 @@ func (x *ETSIGetEncryptKeys256BitRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ETSIGetEncryptKeys256BitRequest.ProtoReflect.Descriptor instead. func (*ETSIGetEncryptKeys256BitRequest) Descriptor() ([]byte, []int) { - return file_kmsetsiproto_proto_rawDescGZIP(), []int{7} + return file_kmsetsiproto_proto_rawDescGZIP(), []int{10} } func (x *ETSIGetEncryptKeys256BitRequest) GetAmount() int64 { @@ -409,7 +558,7 @@ type ETSIGetEncryptKeys256BitReply struct { func (x *ETSIGetEncryptKeys256BitReply) Reset() { *x = ETSIGetEncryptKeys256BitReply{} if protoimpl.UnsafeEnabled { - mi := &file_kmsetsiproto_proto_msgTypes[8] + mi := &file_kmsetsiproto_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -422,7 +571,7 @@ func (x *ETSIGetEncryptKeys256BitReply) String() string { func (*ETSIGetEncryptKeys256BitReply) ProtoMessage() {} func (x *ETSIGetEncryptKeys256BitReply) ProtoReflect() protoreflect.Message { - mi := &file_kmsetsiproto_proto_msgTypes[8] + mi := &file_kmsetsiproto_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -435,7 +584,7 @@ func (x *ETSIGetEncryptKeys256BitReply) ProtoReflect() protoreflect.Message { // Deprecated: Use ETSIGetEncryptKeys256BitReply.ProtoReflect.Descriptor instead. func (*ETSIGetEncryptKeys256BitReply) Descriptor() ([]byte, []int) { - return file_kmsetsiproto_proto_rawDescGZIP(), []int{8} + return file_kmsetsiproto_proto_rawDescGZIP(), []int{11} } func (x *ETSIGetEncryptKeys256BitReply) GetKeyID() string { @@ -464,68 +613,92 @@ var file_kmsetsiproto_proto_rawDesc = []byte{ 0x54, 0x53, 0x49, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x65, 0x65, 0x72, 0x4b, 0x6d, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x65, 0x65, 0x72, 0x4b, - 0x6d, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3a, 0x0a, 0x12, 0x45, 0x54, 0x53, 0x49, 0x4b, 0x4d, - 0x53, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x0d, - 0x6b, 0x6d, 0x73, 0x50, 0x65, 0x65, 0x72, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6b, 0x6d, 0x73, 0x50, 0x65, 0x65, 0x72, 0x53, 0x6f, 0x63, 0x6b, - 0x65, 0x74, 0x22, 0x34, 0x0a, 0x10, 0x45, 0x54, 0x53, 0x49, 0x4b, 0x4d, 0x53, 0x50, 0x65, 0x65, - 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x6b, 0x6d, 0x73, 0x50, 0x65, 0x65, - 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6b, 0x6d, 0x73, - 0x50, 0x65, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x45, 0x54, 0x53, 0x49, - 0x4b, 0x4d, 0x53, 0x50, 0x65, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x49, 0x0a, 0x0b, 0x45, 0x54, 0x53, 0x49, 0x4b, 0x4d, 0x53, 0x50, 0x65, 0x65, - 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x65, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, - 0x0a, 0x70, 0x65, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x70, 0x65, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x45, 0x0a, - 0x14, 0x45, 0x54, 0x53, 0x49, 0x4b, 0x4d, 0x53, 0x50, 0x65, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x2d, 0x0a, 0x04, 0x70, 0x65, 0x65, 0x72, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x45, 0x54, 0x53, 0x49, 0x4b, 0x4d, 0x53, 0x50, 0x65, 0x65, 0x72, 0x52, 0x04, - 0x70, 0x65, 0x65, 0x72, 0x22, 0x39, 0x0a, 0x1f, 0x45, 0x54, 0x53, 0x49, 0x47, 0x65, 0x74, 0x45, - 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x32, 0x35, 0x36, 0x42, 0x69, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, - 0x47, 0x0a, 0x1d, 0x45, 0x54, 0x53, 0x49, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x4b, 0x65, 0x79, 0x73, 0x32, 0x35, 0x36, 0x42, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x6b, 0x65, 0x79, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x6b, 0x65, 0x79, 0x49, 0x44, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x32, 0xf3, 0x03, 0x0a, 0x07, 0x4b, 0x6d, 0x73, - 0x45, 0x54, 0x53, 0x49, 0x12, 0x60, 0x0a, 0x10, 0x45, 0x54, 0x53, 0x49, 0x43, 0x61, 0x70, 0x61, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x25, 0x2e, 0x6b, 0x6d, 0x73, 0x65, 0x74, - 0x73, 0x69, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x54, 0x53, 0x49, 0x43, 0x61, 0x70, 0x61, - 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x23, 0x2e, 0x6b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, - 0x54, 0x53, 0x49, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, - 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0e, 0x45, 0x54, 0x53, 0x49, 0x41, 0x64, - 0x64, 0x4b, 0x4d, 0x53, 0x50, 0x65, 0x65, 0x72, 0x12, 0x20, 0x2e, 0x6b, 0x6d, 0x73, 0x65, 0x74, - 0x73, 0x69, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x54, 0x53, 0x49, 0x4b, 0x4d, 0x53, 0x50, - 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6b, 0x6d, 0x73, - 0x65, 0x74, 0x73, 0x69, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x54, 0x53, 0x49, 0x4b, 0x4d, - 0x53, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x11, - 0x45, 0x54, 0x53, 0x49, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x4d, 0x53, 0x50, 0x65, 0x65, - 0x72, 0x12, 0x20, 0x2e, 0x6b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x45, 0x54, 0x53, 0x49, 0x4b, 0x4d, 0x53, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x45, 0x54, 0x53, 0x49, 0x4b, 0x4d, 0x53, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, - 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x0f, 0x45, 0x54, 0x53, 0x49, 0x47, 0x65, 0x74, - 0x50, 0x65, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x24, 0x2e, 0x6b, 0x6d, 0x73, 0x65, 0x74, + 0x6d, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x24, 0x0a, 0x22, 0x45, 0x54, 0x53, 0x49, 0x4b, 0x4d, + 0x53, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x75, 0x6d, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, + 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x44, 0x0a, 0x12, + 0x51, 0x75, 0x61, 0x6e, 0x74, 0x75, 0x6d, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x6c, 0x65, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x05, 0x71, 0x6c, 0x65, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x75, 0x64, 0x70, 0x41, + 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x75, 0x64, 0x70, 0x41, 0x64, + 0x64, 0x72, 0x22, 0x6a, 0x0a, 0x20, 0x45, 0x54, 0x53, 0x49, 0x4b, 0x4d, 0x53, 0x51, 0x75, 0x61, + 0x6e, 0x74, 0x75, 0x6d, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x46, 0x0a, 0x0d, 0x71, 0x6c, 0x45, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x6b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x51, 0x75, 0x61, + 0x6e, 0x74, 0x75, 0x6d, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x0d, 0x71, 0x6c, 0x45, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x60, + 0x0a, 0x12, 0x45, 0x54, 0x53, 0x49, 0x4b, 0x4d, 0x53, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x6b, 0x6d, 0x73, 0x50, 0x65, 0x65, 0x72, 0x53, + 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6b, 0x6d, 0x73, + 0x50, 0x65, 0x65, 0x72, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x6b, 0x6d, + 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x51, 0x4c, 0x45, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0d, 0x6b, 0x6d, 0x73, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x51, 0x4c, 0x45, 0x49, 0x64, + 0x22, 0x34, 0x0a, 0x10, 0x45, 0x54, 0x53, 0x49, 0x4b, 0x4d, 0x53, 0x50, 0x65, 0x65, 0x72, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x6b, 0x6d, 0x73, 0x50, 0x65, 0x65, 0x72, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6b, 0x6d, 0x73, 0x50, 0x65, + 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x45, 0x54, 0x53, 0x49, 0x4b, 0x4d, + 0x53, 0x50, 0x65, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0x49, 0x0a, 0x0b, 0x45, 0x54, 0x53, 0x49, 0x4b, 0x4d, 0x53, 0x50, 0x65, 0x65, 0x72, 0x12, + 0x1a, 0x0a, 0x08, 0x70, 0x65, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, + 0x65, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x70, 0x65, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x45, 0x0a, 0x14, 0x45, + 0x54, 0x53, 0x49, 0x4b, 0x4d, 0x53, 0x50, 0x65, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x70, 0x6c, 0x79, 0x12, 0x2d, 0x0a, 0x04, 0x70, 0x65, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x6b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x45, 0x54, 0x53, 0x49, 0x4b, 0x4d, 0x53, 0x50, 0x65, 0x65, 0x72, 0x52, 0x04, 0x70, 0x65, + 0x65, 0x72, 0x22, 0x39, 0x0a, 0x1f, 0x45, 0x54, 0x53, 0x49, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x32, 0x35, 0x36, 0x42, 0x69, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x47, 0x0a, + 0x1d, 0x45, 0x54, 0x53, 0x49, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x4b, + 0x65, 0x79, 0x73, 0x32, 0x35, 0x36, 0x42, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x6b, 0x65, 0x79, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, + 0x65, 0x79, 0x49, 0x44, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x32, 0xf3, 0x04, 0x0a, 0x07, 0x4b, 0x6d, 0x73, 0x45, 0x54, + 0x53, 0x49, 0x12, 0x60, 0x0a, 0x10, 0x45, 0x54, 0x53, 0x49, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x25, 0x2e, 0x6b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x54, 0x53, 0x49, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, + 0x6b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x54, 0x53, + 0x49, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x70, + 0x6c, 0x79, 0x22, 0x00, 0x12, 0x7e, 0x0a, 0x18, 0x45, 0x54, 0x53, 0x49, 0x47, 0x65, 0x74, 0x51, + 0x75, 0x61, 0x6e, 0x74, 0x75, 0x6d, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, + 0x12, 0x30, 0x2e, 0x6b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x45, 0x54, 0x53, 0x49, 0x4b, 0x4d, 0x53, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x75, 0x6d, 0x49, 0x6e, + 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x45, 0x54, 0x53, 0x49, 0x4b, 0x4d, 0x53, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x75, 0x6d, + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, + 0x6c, 0x79, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0e, 0x45, 0x54, 0x53, 0x49, 0x41, 0x64, 0x64, 0x4b, + 0x4d, 0x53, 0x50, 0x65, 0x65, 0x72, 0x12, 0x20, 0x2e, 0x6b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x54, 0x53, 0x49, 0x4b, 0x4d, 0x53, 0x50, 0x65, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x54, 0x53, 0x49, 0x4b, 0x4d, 0x53, 0x50, - 0x65, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, + 0x65, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x11, 0x45, 0x54, + 0x53, 0x49, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x4d, 0x53, 0x50, 0x65, 0x65, 0x72, 0x12, + 0x20, 0x2e, 0x6b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, + 0x54, 0x53, 0x49, 0x4b, 0x4d, 0x53, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1e, 0x2e, 0x6b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x45, 0x54, 0x53, 0x49, 0x4b, 0x4d, 0x53, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, + 0x79, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x0f, 0x45, 0x54, 0x53, 0x49, 0x47, 0x65, 0x74, 0x50, 0x65, + 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x24, 0x2e, 0x6b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x54, 0x53, 0x49, 0x4b, 0x4d, 0x53, 0x50, 0x65, 0x65, + 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x6b, + 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x54, 0x53, 0x49, + 0x4b, 0x4d, 0x53, 0x50, 0x65, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, + 0x22, 0x00, 0x12, 0x78, 0x0a, 0x18, 0x45, 0x54, 0x53, 0x49, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x32, 0x35, 0x36, 0x42, 0x69, 0x74, 0x12, 0x2d, 0x2e, 0x6b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x54, - 0x53, 0x49, 0x4b, 0x4d, 0x53, 0x50, 0x65, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x70, - 0x6c, 0x79, 0x22, 0x00, 0x12, 0x78, 0x0a, 0x18, 0x45, 0x54, 0x53, 0x49, 0x47, 0x65, 0x74, 0x45, - 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x32, 0x35, 0x36, 0x42, 0x69, 0x74, - 0x12, 0x2d, 0x2e, 0x6b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x45, 0x54, 0x53, 0x49, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x4b, 0x65, - 0x79, 0x73, 0x32, 0x35, 0x36, 0x42, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2b, 0x2e, 0x6b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, - 0x54, 0x53, 0x49, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x4b, 0x65, 0x79, - 0x73, 0x32, 0x35, 0x36, 0x42, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42, 0x37, - 0x5a, 0x35, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x66, 0x62, 0x69, 0x2e, 0x68, 0x2d, 0x64, 0x61, 0x2e, - 0x64, 0x65, 0x2f, 0x6d, 0x2e, 0x73, 0x74, 0x69, 0x65, 0x6d, 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x67, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2d, 0x6b, 0x6d, 0x73, 0x2f, 0x6b, 0x6d, 0x73, 0x65, 0x74, - 0x73, 0x69, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x53, 0x49, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x4b, 0x65, 0x79, 0x73, + 0x32, 0x35, 0x36, 0x42, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, + 0x6b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x54, 0x53, + 0x49, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x32, + 0x35, 0x36, 0x42, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42, 0x37, 0x5a, 0x35, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x66, 0x62, 0x69, 0x2e, 0x68, 0x2d, 0x64, 0x61, 0x2e, 0x64, 0x65, + 0x2f, 0x6d, 0x2e, 0x73, 0x74, 0x69, 0x65, 0x6d, 0x65, 0x72, 0x6c, 0x69, 0x6e, 0x67, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2d, 0x6b, 0x6d, 0x73, 0x2f, 0x6b, 0x6d, 0x73, 0x65, 0x74, 0x73, 0x69, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -540,35 +713,41 @@ func file_kmsetsiproto_proto_rawDescGZIP() []byte { return file_kmsetsiproto_proto_rawDescData } -var file_kmsetsiproto_proto_msgTypes = make([]protoimpl.MessageInfo, 9) +var file_kmsetsiproto_proto_msgTypes = make([]protoimpl.MessageInfo, 12) var file_kmsetsiproto_proto_goTypes = []interface{}{ - (*ETSICapabilitiesRequest)(nil), // 0: kmsetsiproto.ETSICapabilitiesRequest - (*ETSICapabilitiesReply)(nil), // 1: kmsetsiproto.ETSICapabilitiesReply - (*ETSIKMSPeerRequest)(nil), // 2: kmsetsiproto.ETSIKMSPeerRequest - (*ETSIKMSPeerReply)(nil), // 3: kmsetsiproto.ETSIKMSPeerReply - (*ETSIKMSPeerListRequest)(nil), // 4: kmsetsiproto.ETSIKMSPeerListRequest - (*ETSIKMSPeer)(nil), // 5: kmsetsiproto.ETSIKMSPeer - (*ETSIKMSPeerListReply)(nil), // 6: kmsetsiproto.ETSIKMSPeerListReply - (*ETSIGetEncryptKeys256BitRequest)(nil), // 7: kmsetsiproto.ETSIGetEncryptKeys256BitRequest - (*ETSIGetEncryptKeys256BitReply)(nil), // 8: kmsetsiproto.ETSIGetEncryptKeys256BitReply + (*ETSICapabilitiesRequest)(nil), // 0: kmsetsiproto.ETSICapabilitiesRequest + (*ETSICapabilitiesReply)(nil), // 1: kmsetsiproto.ETSICapabilitiesReply + (*ETSIKMSQuantumInterfaceListRequest)(nil), // 2: kmsetsiproto.ETSIKMSQuantumInterfaceListRequest + (*QuantumElementInfo)(nil), // 3: kmsetsiproto.QuantumElementInfo + (*ETSIKMSQuantumInterfaceListReply)(nil), // 4: kmsetsiproto.ETSIKMSQuantumInterfaceListReply + (*ETSIKMSPeerRequest)(nil), // 5: kmsetsiproto.ETSIKMSPeerRequest + (*ETSIKMSPeerReply)(nil), // 6: kmsetsiproto.ETSIKMSPeerReply + (*ETSIKMSPeerListRequest)(nil), // 7: kmsetsiproto.ETSIKMSPeerListRequest + (*ETSIKMSPeer)(nil), // 8: kmsetsiproto.ETSIKMSPeer + (*ETSIKMSPeerListReply)(nil), // 9: kmsetsiproto.ETSIKMSPeerListReply + (*ETSIGetEncryptKeys256BitRequest)(nil), // 10: kmsetsiproto.ETSIGetEncryptKeys256BitRequest + (*ETSIGetEncryptKeys256BitReply)(nil), // 11: kmsetsiproto.ETSIGetEncryptKeys256BitReply } var file_kmsetsiproto_proto_depIdxs = []int32{ - 5, // 0: kmsetsiproto.ETSIKMSPeerListReply.peer:type_name -> kmsetsiproto.ETSIKMSPeer - 0, // 1: kmsetsiproto.KmsETSI.ETSICapabilities:input_type -> kmsetsiproto.ETSICapabilitiesRequest - 2, // 2: kmsetsiproto.KmsETSI.ETSIAddKMSPeer:input_type -> kmsetsiproto.ETSIKMSPeerRequest - 2, // 3: kmsetsiproto.KmsETSI.ETSIRemoveKMSPeer:input_type -> kmsetsiproto.ETSIKMSPeerRequest - 4, // 4: kmsetsiproto.KmsETSI.ETSIGetPeerList:input_type -> kmsetsiproto.ETSIKMSPeerListRequest - 7, // 5: kmsetsiproto.KmsETSI.ETSIGetEncryptKeys256Bit:input_type -> kmsetsiproto.ETSIGetEncryptKeys256BitRequest - 1, // 6: kmsetsiproto.KmsETSI.ETSICapabilities:output_type -> kmsetsiproto.ETSICapabilitiesReply - 3, // 7: kmsetsiproto.KmsETSI.ETSIAddKMSPeer:output_type -> kmsetsiproto.ETSIKMSPeerReply - 3, // 8: kmsetsiproto.KmsETSI.ETSIRemoveKMSPeer:output_type -> kmsetsiproto.ETSIKMSPeerReply - 6, // 9: kmsetsiproto.KmsETSI.ETSIGetPeerList:output_type -> kmsetsiproto.ETSIKMSPeerListReply - 8, // 10: kmsetsiproto.KmsETSI.ETSIGetEncryptKeys256Bit:output_type -> kmsetsiproto.ETSIGetEncryptKeys256BitReply - 6, // [6:11] is the sub-list for method output_type - 1, // [1:6] 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 + 3, // 0: kmsetsiproto.ETSIKMSQuantumInterfaceListReply.qlElementInfo:type_name -> kmsetsiproto.QuantumElementInfo + 8, // 1: kmsetsiproto.ETSIKMSPeerListReply.peer:type_name -> kmsetsiproto.ETSIKMSPeer + 0, // 2: kmsetsiproto.KmsETSI.ETSICapabilities:input_type -> kmsetsiproto.ETSICapabilitiesRequest + 2, // 3: kmsetsiproto.KmsETSI.ETSIGetQuantumInterfaces:input_type -> kmsetsiproto.ETSIKMSQuantumInterfaceListRequest + 5, // 4: kmsetsiproto.KmsETSI.ETSIAddKMSPeer:input_type -> kmsetsiproto.ETSIKMSPeerRequest + 5, // 5: kmsetsiproto.KmsETSI.ETSIRemoveKMSPeer:input_type -> kmsetsiproto.ETSIKMSPeerRequest + 7, // 6: kmsetsiproto.KmsETSI.ETSIGetPeerList:input_type -> kmsetsiproto.ETSIKMSPeerListRequest + 10, // 7: kmsetsiproto.KmsETSI.ETSIGetEncryptKeys256Bit:input_type -> kmsetsiproto.ETSIGetEncryptKeys256BitRequest + 1, // 8: kmsetsiproto.KmsETSI.ETSICapabilities:output_type -> kmsetsiproto.ETSICapabilitiesReply + 4, // 9: kmsetsiproto.KmsETSI.ETSIGetQuantumInterfaces:output_type -> kmsetsiproto.ETSIKMSQuantumInterfaceListReply + 6, // 10: kmsetsiproto.KmsETSI.ETSIAddKMSPeer:output_type -> kmsetsiproto.ETSIKMSPeerReply + 6, // 11: kmsetsiproto.KmsETSI.ETSIRemoveKMSPeer:output_type -> kmsetsiproto.ETSIKMSPeerReply + 9, // 12: kmsetsiproto.KmsETSI.ETSIGetPeerList:output_type -> kmsetsiproto.ETSIKMSPeerListReply + 11, // 13: kmsetsiproto.KmsETSI.ETSIGetEncryptKeys256Bit:output_type -> kmsetsiproto.ETSIGetEncryptKeys256BitReply + 8, // [8:14] is the sub-list for method output_type + 2, // [2:8] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name } func init() { file_kmsetsiproto_proto_init() } @@ -602,7 +781,7 @@ func file_kmsetsiproto_proto_init() { } } file_kmsetsiproto_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ETSIKMSPeerRequest); i { + switch v := v.(*ETSIKMSQuantumInterfaceListRequest); i { case 0: return &v.state case 1: @@ -614,7 +793,7 @@ func file_kmsetsiproto_proto_init() { } } file_kmsetsiproto_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ETSIKMSPeerReply); i { + switch v := v.(*QuantumElementInfo); i { case 0: return &v.state case 1: @@ -626,7 +805,7 @@ func file_kmsetsiproto_proto_init() { } } file_kmsetsiproto_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ETSIKMSPeerListRequest); i { + switch v := v.(*ETSIKMSQuantumInterfaceListReply); i { case 0: return &v.state case 1: @@ -638,7 +817,7 @@ func file_kmsetsiproto_proto_init() { } } file_kmsetsiproto_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ETSIKMSPeer); i { + switch v := v.(*ETSIKMSPeerRequest); i { case 0: return &v.state case 1: @@ -650,7 +829,7 @@ func file_kmsetsiproto_proto_init() { } } file_kmsetsiproto_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ETSIKMSPeerListReply); i { + switch v := v.(*ETSIKMSPeerReply); i { case 0: return &v.state case 1: @@ -662,7 +841,7 @@ func file_kmsetsiproto_proto_init() { } } file_kmsetsiproto_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ETSIGetEncryptKeys256BitRequest); i { + switch v := v.(*ETSIKMSPeerListRequest); i { case 0: return &v.state case 1: @@ -674,6 +853,42 @@ func file_kmsetsiproto_proto_init() { } } file_kmsetsiproto_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ETSIKMSPeer); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_kmsetsiproto_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ETSIKMSPeerListReply); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_kmsetsiproto_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ETSIGetEncryptKeys256BitRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_kmsetsiproto_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ETSIGetEncryptKeys256BitReply); i { case 0: return &v.state @@ -692,7 +907,7 @@ func file_kmsetsiproto_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_kmsetsiproto_proto_rawDesc, NumEnums: 0, - NumMessages: 9, + NumMessages: 12, NumExtensions: 0, NumServices: 1, }, diff --git a/kmsetsiproto/kmsetsiproto.proto b/kmsetsiproto/kmsetsiproto.proto index e27ad82c61dad89e5815c17a53d25df6e23303ff..4e6e978792589b8bc7a816f461500d8288704a87 100644 --- a/kmsetsiproto/kmsetsiproto.proto +++ b/kmsetsiproto/kmsetsiproto.proto @@ -7,6 +7,7 @@ package kmsetsiproto; service KmsETSI { // Sends a greeting rpc ETSICapabilities (ETSICapabilitiesRequest) returns (ETSICapabilitiesReply) {} + rpc ETSIGetQuantumInterfaces(ETSIKMSQuantumInterfaceListRequest) returns (ETSIKMSQuantumInterfaceListReply) {} rpc ETSIAddKMSPeer(ETSIKMSPeerRequest) returns (ETSIKMSPeerReply) {} rpc ETSIRemoveKMSPeer(ETSIKMSPeerRequest) returns (ETSIKMSPeerReply) {} rpc ETSIGetPeerList(ETSIKMSPeerListRequest) returns (ETSIKMSPeerListReply) {} @@ -16,15 +17,31 @@ service KmsETSI { // The request message containing the user's name. message ETSICapabilitiesRequest { string myKmsName = 1; - } +} // The response message containing the greetings message ETSICapabilitiesReply { - string peerKmsName= 1; - } + string peerKmsName = 1; +} + +message ETSIKMSQuantumInterfaceListRequest { + +} + +// NB for myself: this be used to link QLE mit KMS-Session! +message QuantumElementInfo { + uint64 qleID = 1; + string udpAddr = 2; +} + +message ETSIKMSQuantumInterfaceListReply { + repeated QuantumElementInfo qlElementInfo = 1; +} + message ETSIKMSPeerRequest { string kmsPeerSocket = 1; + uint64 kmsLocalQLEId = 2; } message ETSIKMSPeerReply { diff --git a/kmsetsiproto/kmsetsiproto_grpc.pb.go b/kmsetsiproto/kmsetsiproto_grpc.pb.go index 7aefb1ef1e3b77d9fdac5b8e687c3d125d6c217e..afddac06ab886e0f74626ee24dc1231726ecb61d 100644 --- a/kmsetsiproto/kmsetsiproto_grpc.pb.go +++ b/kmsetsiproto/kmsetsiproto_grpc.pb.go @@ -24,6 +24,7 @@ const _ = grpc.SupportPackageIsVersion7 type KmsETSIClient interface { // Sends a greeting ETSICapabilities(ctx context.Context, in *ETSICapabilitiesRequest, opts ...grpc.CallOption) (*ETSICapabilitiesReply, error) + ETSIGetQuantumInterfaces(ctx context.Context, in *ETSIKMSQuantumInterfaceListRequest, opts ...grpc.CallOption) (*ETSIKMSQuantumInterfaceListReply, error) ETSIAddKMSPeer(ctx context.Context, in *ETSIKMSPeerRequest, opts ...grpc.CallOption) (*ETSIKMSPeerReply, error) ETSIRemoveKMSPeer(ctx context.Context, in *ETSIKMSPeerRequest, opts ...grpc.CallOption) (*ETSIKMSPeerReply, error) ETSIGetPeerList(ctx context.Context, in *ETSIKMSPeerListRequest, opts ...grpc.CallOption) (*ETSIKMSPeerListReply, error) @@ -47,6 +48,15 @@ func (c *kmsETSIClient) ETSICapabilities(ctx context.Context, in *ETSICapabiliti return out, nil } +func (c *kmsETSIClient) ETSIGetQuantumInterfaces(ctx context.Context, in *ETSIKMSQuantumInterfaceListRequest, opts ...grpc.CallOption) (*ETSIKMSQuantumInterfaceListReply, error) { + out := new(ETSIKMSQuantumInterfaceListReply) + err := c.cc.Invoke(ctx, "/kmsetsiproto.KmsETSI/ETSIGetQuantumInterfaces", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *kmsETSIClient) ETSIAddKMSPeer(ctx context.Context, in *ETSIKMSPeerRequest, opts ...grpc.CallOption) (*ETSIKMSPeerReply, error) { out := new(ETSIKMSPeerReply) err := c.cc.Invoke(ctx, "/kmsetsiproto.KmsETSI/ETSIAddKMSPeer", in, out, opts...) @@ -89,6 +99,7 @@ func (c *kmsETSIClient) ETSIGetEncryptKeys256Bit(ctx context.Context, in *ETSIGe type KmsETSIServer interface { // Sends a greeting ETSICapabilities(context.Context, *ETSICapabilitiesRequest) (*ETSICapabilitiesReply, error) + ETSIGetQuantumInterfaces(context.Context, *ETSIKMSQuantumInterfaceListRequest) (*ETSIKMSQuantumInterfaceListReply, error) ETSIAddKMSPeer(context.Context, *ETSIKMSPeerRequest) (*ETSIKMSPeerReply, error) ETSIRemoveKMSPeer(context.Context, *ETSIKMSPeerRequest) (*ETSIKMSPeerReply, error) ETSIGetPeerList(context.Context, *ETSIKMSPeerListRequest) (*ETSIKMSPeerListReply, error) @@ -103,6 +114,9 @@ type UnimplementedKmsETSIServer struct { func (UnimplementedKmsETSIServer) ETSICapabilities(context.Context, *ETSICapabilitiesRequest) (*ETSICapabilitiesReply, error) { return nil, status.Errorf(codes.Unimplemented, "method ETSICapabilities not implemented") } +func (UnimplementedKmsETSIServer) ETSIGetQuantumInterfaces(context.Context, *ETSIKMSQuantumInterfaceListRequest) (*ETSIKMSQuantumInterfaceListReply, error) { + return nil, status.Errorf(codes.Unimplemented, "method ETSIGetQuantumInterfaces not implemented") +} func (UnimplementedKmsETSIServer) ETSIAddKMSPeer(context.Context, *ETSIKMSPeerRequest) (*ETSIKMSPeerReply, error) { return nil, status.Errorf(codes.Unimplemented, "method ETSIAddKMSPeer not implemented") } @@ -146,6 +160,24 @@ func _KmsETSI_ETSICapabilities_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } +func _KmsETSI_ETSIGetQuantumInterfaces_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ETSIKMSQuantumInterfaceListRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(KmsETSIServer).ETSIGetQuantumInterfaces(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/kmsetsiproto.KmsETSI/ETSIGetQuantumInterfaces", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(KmsETSIServer).ETSIGetQuantumInterfaces(ctx, req.(*ETSIKMSQuantumInterfaceListRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _KmsETSI_ETSIAddKMSPeer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(ETSIKMSPeerRequest) if err := dec(in); err != nil { @@ -229,6 +261,10 @@ var KmsETSI_ServiceDesc = grpc.ServiceDesc{ MethodName: "ETSICapabilities", Handler: _KmsETSI_ETSICapabilities_Handler, }, + { + MethodName: "ETSIGetQuantumInterfaces", + Handler: _KmsETSI_ETSIGetQuantumInterfaces_Handler, + }, { MethodName: "ETSIAddKMSPeer", Handler: _KmsETSI_ETSIAddKMSPeer_Handler,