Skip to content
Snippets Groups Projects
Commit cc07f0d2 authored by Martin Stiemerling's avatar Martin Stiemerling :speech_balloon:
Browse files

AddPeer knows know its serving QLE

parent 522ba73e
Branches
Tags
1 merge request!9First working draft version
......@@ -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()
......
......@@ -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,
......
......@@ -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,
}
}
......
This diff is collapsed.
......@@ -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 {
......
......@@ -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,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment