X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=pkg%2Fcontrol%2Fregistry.go;h=c9abdb8aa0fd535ce4ae5f25f9efa11fad56936c;hb=9bcb0a4620d71671f758dce029cb2e3da9ab9dbe;hp=e00062b7b4ea9140b7516ee90aa023ce4bc17fda;hpb=5f8ffa07163f52d65092d63f5d173149cd5c46ad;p=ric-plt%2Fsubmgr.git diff --git a/pkg/control/registry.go b/pkg/control/registry.go index e00062b..c9abdb8 100644 --- a/pkg/control/registry.go +++ b/pkg/control/registry.go @@ -112,8 +112,27 @@ func (r *Registry) AssignToSubscription(trans *TransactionXapp, subReqMsg *e2ap. r.mutex.Lock() defer r.mutex.Unlock() - subs := r.findExistingSubs(trans, subReqMsg) + // + // Check validity of subscription action types + // + actionType, err := r.CheckActionTypes(subReqMsg) + if err != nil { + xapp.Logger.Debug("CREATE %s", err) + return nil, err + } + + // + // Find possible existing Policy subscription + // + if actionType == e2ap.E2AP_ActionTypePolicy { + if subs, ok := r.register[subReqMsg.RequestId.Seq]; ok { + xapp.Logger.Debug("CREATE %s. Existing subscription for Policy found", subs.String()) + subs.SetCachedResponse(nil, true) + return subs, nil + } + } + subs := r.findExistingSubs(trans, subReqMsg) if subs == nil { subs, err = r.allocateSubs(trans, subReqMsg) if err != nil { @@ -158,6 +177,30 @@ func (r *Registry) AssignToSubscription(trans *TransactionXapp, subReqMsg *e2ap. return subs, nil } +func (r *Registry) CheckActionTypes(subReqMsg *e2ap.E2APSubscriptionRequest) (uint64, error) { + var reportFound bool = false + var policyFound bool = false + + for _, acts := range subReqMsg.ActionSetups { + if acts.ActionType == e2ap.E2AP_ActionTypeReport { + reportFound = true + } + if acts.ActionType == e2ap.E2AP_ActionTypePolicy { + policyFound = true + } + } + if reportFound == true && policyFound == true { + return e2ap.E2AP_ActionTypeInvalid, fmt.Errorf("Report and Policy in same RICactions-ToBeSetup-List") + } + if reportFound == true { + return e2ap.E2AP_ActionTypeReport, nil + } + if policyFound == true { + return e2ap.E2AP_ActionTypePolicy, nil + } + return e2ap.E2AP_ActionTypeInvalid, fmt.Errorf("Invalid action type in RICactions-ToBeSetup-List") +} + // TODO: Works with concurrent calls, but check if can be improved func (r *Registry) RemoveFromSubscription(subs *Subscription, trans *TransactionXapp, waitRouteClean time.Duration) error {