blob: 3cf65ad2dbc2da4e855f2ff129e3d1f40ece1900 [file] [log] [blame]
/*
* Copyright 2018-present Open Networking Foundation
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package core
import (
"fmt"
"sync"
"github.com/opencord/openolt-scale-tester/config"
"github.com/opencord/voltha-lib-go/v3/pkg/log"
"github.com/opencord/voltha-lib-go/v3/pkg/techprofile"
oop "github.com/opencord/voltha-protos/v3/go/openolt"
"golang.org/x/net/context"
)
func init() {
_, _ = log.AddPackage(log.JSON, log.DebugLevel, nil)
}
const (
SUBSCRIBER_PROVISION_SUCCESS = iota
TP_INSTANCE_CREATION_FAILED
FLOW_ID_GENERATION_FAILED
FLOW_ADD_FAILED
SCHED_CREATION_FAILED
QUEUE_CREATION_FAILED
)
const (
UniPortName = "pon-{%d}/onu-{%d}/uni-{%d}"
)
var Reason = [...]string{
"SUBSCRIBER_PROVISION_SUCCESS",
"TP_INSTANCE_CREATION_FAILED",
"FLOW_ID_GENERATION_FAILED",
"FLOW_ADD_FAILED",
"SCHED_CREATION_FAILED",
"QUEUE_CREATION_FAILED",
}
func ReasonCodeToReasonString(reasonCode int) string {
return Reason[reasonCode]
}
type Subscriber struct {
SubscriberName string `json:"subscriberName"`
OnuID uint32 `json:"onuID"`
UniID uint32 `json:"uniID"`
PonIntf uint32 `json:"ponIntf"`
UniPortNo uint32 `json:"uniPortNo"`
Ctag uint32 `json:"ctag"`
Stag uint32 `json:"stag"`
GemPortIDs []uint32 `json:"gemPortIds"`
AllocIDs []uint32 `json:"allocIds"`
FlowIDs []uint32 `json:"flowIds"`
Reason string `json:"reason"`
FailedFlowCnt uint32 `json:"failedFlowCnt"`
SuccessFlowCnt uint32 `json:"successFlowCnt"`
FailedSchedCnt uint32 `json:"failedSchedCnt"`
SuccessSchedCnt uint32 `json:"successShedCnt"`
FailedQueueCnt uint32 `json:"failedQueueCnt"`
SuccessQueueCnt uint32 `json:"successQueueCnt"`
FailedFlows []oop.Flow `json:"failedFlows"`
FailedScheds []oop.TrafficScheduler `json:"failedScheds"`
FailedQueues []oop.TrafficQueue `json:"failedQueues"`
TpInstance map[int]*techprofile.TechProfile
OpenOltClient oop.OpenoltClient
TestConfig *config.OpenOltScaleTesterConfig
RsrMgr *OpenOltResourceMgr
subWg *sync.WaitGroup
}
func (subs *Subscriber) Start(isGroup bool) {
var err error
log.Infow("workflow-deploy-started-for-subscriber", log.Fields{"subsName": subs.SubscriberName})
subs.TpInstance = make(map[int]*techprofile.TechProfile)
for _, tpID := range subs.TestConfig.TpIDList {
uniPortName := fmt.Sprintf(UniPortName, subs.PonIntf, subs.OnuID, subs.UniID)
subs.RsrMgr.GemIDAllocIDLock[subs.PonIntf].Lock()
subs.TpInstance[tpID], err = subs.RsrMgr.ResourceMgrs[subs.PonIntf].TechProfileMgr.CreateTechProfInstance(context.Background(),
uint32(tpID), uniPortName, subs.PonIntf)
subs.RsrMgr.GemIDAllocIDLock[subs.PonIntf].Unlock()
if err != nil {
log.Errorw("error-creating-tp-instance-for-subs",
log.Fields{"subsName": subs.SubscriberName, "onuID": subs.OnuID, "tpID": tpID})
subs.Reason = ReasonCodeToReasonString(TP_INSTANCE_CREATION_FAILED)
return
}
}
go DeployWorkflow(subs, isGroup)
log.Infow("workflow-deploy-started-for-subscriber", log.Fields{"subsName": subs.SubscriberName})
}