Newer
Older
"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"
"github.com/openconfig/gnmi/proto/gnmi"
"github.com/openconfig/ygot/ygot"
log "github.com/sirupsen/logrus"
)
// AssignForwardingHandler is the implementation of a gnmitarget.PathHandler.
type AssignForwardingHandler struct {
func NewAssignForwardingHandler(kms *kms.KMS) *AssignForwardingHandler {
DefaultPathHandler: handler.DefaultPathHandler{
Name: "kms-assign-forwarding-handler",
Paths: map[string]struct{}{
"/assign-forwarding": {},
},
func (yh *AssignForwardingHandler) Init(config *handler.Config, publishToSubsFunc func([]*gnmi.Notification) error) error {
// A initialization is not needed for this handler. The default startup has
// no assign forwarding applied.
yh.Config = config
yh.PublishToSubs = publishToSubsFunc
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")
pathId := forwarding.GetPathId()
nextHop := forwarding.GetNextHop()
prevHop := forwarding.GetPrevHop()
if nextHop != nil {
nextHopString = nextHop.GetNodeId()
log.Debugf("AssignForwardingHandler - NextHopString: %s", nextHopString)
if prevHop != nil {
prevHopString = prevHop.GetNodeId()
log.Debugf("AssignForwardingHandler - PrevHopString: %s", prevHopString)
// 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 {