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,