[SEBA-836] BBSim Reflector
Change-Id: Ib4ae5a2c24880dc62209bebb81188eca5f57865d
diff --git a/cmd/bbr/bbr.go b/cmd/bbr/bbr.go
new file mode 100644
index 0000000..69b8639
--- /dev/null
+++ b/cmd/bbr/bbr.go
@@ -0,0 +1,80 @@
+/*
+ * 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.
+ */
+
+// BBR (BBSim Reflector) is a tool designed to scale test BBSim
+// It shared most of the code with BBSim itself and replies to messages
+// pretending to be VOLTHA.
+// The idea behind it is that, given that the BBSim and BBR are based on the same
+// codebase, BBR is acting as a wall for BBSim. And you can't beat the wall.
+package main
+
+import (
+ bbrdevices "github.com/opencord/bbsim/internal/bbr/devices"
+ "github.com/opencord/bbsim/internal/bbsim/devices"
+ "github.com/opencord/bbsim/internal/common"
+ log "github.com/sirupsen/logrus"
+ "os"
+ "runtime/pprof"
+ "time"
+)
+
+// usage
+func main() {
+ options := common.GetBBROpts()
+
+ common.SetLogLevel(log.StandardLogger(), options.LogLevel, options.LogCaller)
+
+ if *options.ProfileCpu != "" {
+ // start profiling
+ log.Infof("Creating profile file at: %s", *options.ProfileCpu)
+ f, err := os.Create(*options.ProfileCpu)
+ if err != nil {
+ log.Fatal(err)
+ }
+ pprof.StartCPUProfile(f)
+ }
+
+ log.WithFields(log.Fields{
+ "OltID": options.OltID,
+ "NumNniPerOlt": options.NumNniPerOlt,
+ "NumPonPerOlt": options.NumPonPerOlt,
+ "NumOnuPerPon": options.NumOnuPerPon,
+ }).Info("BroadBand Reflector is on")
+
+ // NOTE this are probably useless in the MockOLT case, check if we can avoid using them in the CreateOlt method
+ oltDoneChannel := make(chan bool)
+ apiDoneChannel := make(chan bool)
+
+ // create the OLT device
+ olt := devices.CreateOLT(options.OltID, options.NumNniPerOlt, options.NumPonPerOlt, options.NumOnuPerPon, options.STag, options.CTagInit, &oltDoneChannel, &apiDoneChannel, true)
+ oltMock := bbrdevices.OltMock{
+ Olt: olt,
+ TargetOnus: options.NumPonPerOlt * options.NumOnuPerPon,
+ CompletedOnus: 0,
+ BBSimIp: options.BBSimIp,
+ BBSimPort: options.BBSimPort,
+ BBSimApiPort: options.BBSimApiPort,
+ }
+
+ // start the enable sequence
+ startTime := time.Now()
+ defer func() {
+ endTime := time.Now()
+ runTime := endTime.Sub(startTime)
+ log.WithField("Duration", runTime).Info("BBR done!")
+ }()
+ oltMock.Start()
+}