# 1. Overview

The BBSim (Broadband Simulator) is for emulating the control message response sent from OLTs and ONUs which are connected to VOLTHA Adapter.
It is implemetend as a software process which runs outside VOLTHA, and acts as if it was multiple OLTs and ONUs.
This enables the scalability test of VOLTHA without actual hardware OLTs / ONUs.
The difference from the existing PONsim is to focus on emulating control messages, not data-path traffic which PONsim targets.

It currently supports the following VOLTHA mode:
(Reference to https://github.com/opencord/voltha/blob/master/BUILD.md)
* Run in stand-alone mode
* Run with the "voltha ensamble"

**Please note: Kubernetes mode is NOT supported by the current version.**

==============
VOLTHA
OpenOLT Adapter
==============
|||
|||  gRPC connections
|||
==============
BBSim
==============

# 2. PON Simulator Usage

```
Usage of ./bbsim:
  -H
    	IP and Port number which BBSim listens (default 172.17.0.1:50060)
  -N
        Number of OLTs
  -i
    	Number of PON interfaces provided per OLT
  -n
    	Number of ONUs per PON interface
```

# 3. Requirements

# Golang Installation

If you plan on running the simulator locally, i.e. not in a container, you will need to first 
install setup Golang on your system.  Install using existing packages for your operating system 
or issue the following commands (Linux).

```
cd /tmp
wget https://storage.googleapis.com/golang/go1.9.3.linux-amd64.tar.gz
tar -C /usr/local -xzf /tmp/go1.9.3.linux-amd64.tar.gz
rm -f /tmp/go1.9.3.linux-amd64.tar.gz
mkdir ~/go
```

Edit your profile (e.g. .bashrc) and add the following configuration

```
export GOROOT=/usr/local/go
export GOPATH=~/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
```

# 4. Run BBSim and VOLTHA-CLI commands

```
# in VOLTHA docker
cd /cord/incubator/voltha/voltha/bbsim
./bbsim -H 172.17.0.1:50060 -N 1 -i 1 -n 16

# After this, execute the following commands from VOLTHA-CLI
(voltha) health
{
    "state": "HEALTHY"
}
(voltha) preprovision_olt -t openolt -H 172.17.0.1:50060
success (device id = <deviceid>)
(voltha) enable
enabling <deviceid>
waiting for device to be enabled...
success (device id = <deviceid>)
(voltha) devices
## You can see the list of devices (OLT/ONUs) ##
```

