Skip to content
Snippets Groups Projects
assignForwardingHandler.go 2.86 KiB
Newer Older
  • Learn to ignore specific revisions
  • package kmsHandler
    
    Malte Bauch's avatar
    Malte Bauch committed
    
    import (
    	"fmt"
    
    
    	"code.fbi.h-da.de/danet/gnmi-target/handler"
    
    	"code.fbi.h-da.de/danet/quant/goKMS/kms"
    
    	"code.fbi.h-da.de/danet/quant/goKMS/kms/util"
    
    	gnmitargetygot "code.fbi.h-da.de/danet/quant/goKMS/model"
    
    Malte Bauch's avatar
    Malte Bauch committed
    	"github.com/openconfig/gnmi/proto/gnmi"
    	"github.com/openconfig/ygot/ygot"
    
    	log "github.com/sirupsen/logrus"
    
    Malte Bauch's avatar
    Malte Bauch committed
    )
    
    // AssignForwardingHandler is the implementation of a gnmitarget.PathHandler.
    type AssignForwardingHandler struct {
    
    	handler.DefaultPathHandler
    
    	kms *kms.KMS
    
    Malte Bauch's avatar
    Malte Bauch committed
    }
    
    
    func NewAssignForwardingHandler(kms *kms.KMS) *AssignForwardingHandler {
    
    Malte Bauch's avatar
    Malte Bauch committed
    	return &AssignForwardingHandler{
    
    		DefaultPathHandler: handler.DefaultPathHandler{
    			Name: "kms-assign-forwarding-handler",
    			Paths: map[string]struct{}{
    				"/assign-forwarding": {},
    			},
    
    Malte Bauch's avatar
    Malte Bauch committed
    		},
    
    Malte Bauch's avatar
    Malte Bauch committed
    	}
    }
    
    
    func (yh *AssignForwardingHandler) Init(config *handler.Config, publishToSubsFunc func([]*gnmi.Notification) error) error {
    
    Malte Bauch's avatar
    Malte Bauch committed
    	// A initialization is not needed for this handler. The default startup has
    	// no assign forwarding applied.
    
    	yh.Config = config
    	yh.PublishToSubs = publishToSubsFunc
    
    
    Malte Bauch's avatar
    Malte Bauch committed
    	return nil
    }
    
    func (yh *AssignForwardingHandler) Update(c ygot.ValidatedGoStruct, jobs []*gnmi.Update) error {
    	config, ok := c.(*gnmitargetygot.Gnmitarget)
    	if !ok {
    		return fmt.Errorf("failed type assertion for newConfig %T", (*gnmitargetygot.Gnmitarget)(nil))
    	}
    
    
    	log.Debugf("Received Update within AssignForwardingHandler")
    
    
    Malte Bauch's avatar
    Malte Bauch committed
    	forwarding := config.GetOrCreateAssignForwarding()
    
    
    	pathId := forwarding.GetPathId()
    	nextHop := forwarding.GetNextHop()
    	prevHop := forwarding.GetPrevHop()
    
    Malte Bauch's avatar
    Malte Bauch committed
    
    	var nextHopString string
    	var prevHopString string
    
    
    	if nextHop != nil {
    		nextHopString = nextHop.GetNodeId()
    
    		log.Debugf("AssignForwardingHandler - NextHopString: %s", nextHopString)
    
    Malte Bauch's avatar
    Malte Bauch committed
    	}
    
    	if prevHop != nil {
    		prevHopString = prevHop.GetNodeId()
    
    		log.Debugf("AssignForwardingHandler - PrevHopString: %s", prevHopString)
    
    Malte Bauch's avatar
    Malte Bauch committed
    	}
    
    
    	var initKMS *util.RemoteKMS
    
    	// check if initiating kms address is set
    	if initiatingKmsAddress := forwarding.GetInitiatingKmsAddress(); initiatingKmsAddress != nil {
    
    		addressPrefix := ""
    		if initiatingKmsAddress.GetIpAddress() != "" {
    			addressPrefix = initiatingKmsAddress.GetIpAddress()
    		} else if initiatingKmsAddress.GetHostname() != "" {
    			addressPrefix = initiatingKmsAddress.GetHostname()
    		}
    
    		log.Debugf("AssignForwardingHandler - InitiatingKMSAddress was set with the following parameters: NodeId: %s, Hostname: %s, IpAddress: %s, Port: %d", initiatingKmsAddress.GetNodeId(), initiatingKmsAddress.GetHostname(), initiatingKmsAddress.GetIpAddress(), initiatingKmsAddress.GetPort())
    
    		if addressPrefix != "" {
    			initKMS = &util.RemoteKMS{
    				Id:      initiatingKmsAddress.GetNodeId(),
    				Address: addressPrefix,
    				Port:    initiatingKmsAddress.GetPort(),
    			}
    
    	if err := yh.kms.AssignForwardingRoute(pathId, prevHopString, nextHopString, initKMS); err != nil {
    
    Malte Bauch's avatar
    Malte Bauch committed
    		return err
    	}
    
    	return nil
    }