diff --git a/internal/kms/kms.go b/internal/kms/kms.go index 2cb9be31947eea8572085597cad6b88eb6a18ba8..1d49bae167ae3864fd1a84348ade39266cfe18c8 100644 --- a/internal/kms/kms.go +++ b/internal/kms/kms.go @@ -220,6 +220,37 @@ func (kms *EKMS) AddPeer(kmsPeerSocket string, servingQLE *QuantumElement) (*kms return peer, nil } +func (kms *EKMS) AssignForwardingRoute(pId, pHop, nHop string) error { + pathId, err := uuid.Parse(pId) + if err != nil { + return fmt.Errorf("The given path id %s is no uuid; err = ", pathId, err) + } + + var previousHop *kmsPeer + var nextHop *kmsPeer + var ok bool + if pHop != "" { + previousHop, ok = kms.KmsPeers[pHop] + if !ok { + return fmt.Errorf("No peer found for %s", pHop) + } + } + if nHop != "" { + nextHop, ok = kms.KmsPeers[nHop] + if !ok { + return fmt.Errorf("No peer found for %s", nHop) + } + } + + // set the route within routing table + kms.routingTable[pathId] = &Route{ + Previous: previousHop, + Next: nextHop, + } + + return nil +} + // TODO/XXX error handling func (kms *EKMS) RemovePeer(kmsPeerSocket string) { if _, there := kms.KmsPeers[kmsPeerSocket]; there {