| .. BBSim documentation master file, created by |
| sphinx-quickstart on Fri Oct 25 12:03:42 2019. |
| You can adapt this file completely to your liking, but it should at least |
| contain the root `toctree` directive. |
| |
| BBSim, a Broadband Simulator |
| ============================ |
| |
| .. toctree:: |
| :maxdepth: 2 |
| :caption: Contents: |
| |
| operations.rst |
| onu-state-machine.rst |
| olt-state-machine.rst |
| development-dependencies.rst |
| bbr.rst |
| bbsimctl.rst |
| api.rst |
| |
| |
| Quickstart |
| ---------- |
| |
| BBSim (a.k.a. BroadBand Simulator) is a tool designed to emulate an `Openolt |
| <https://github.com/opencord/openolt>`_ compatible device. |
| |
| In order to use BBSim you need to have: |
| |
| - a Kubernetes cluster |
| - helm |
| - a working installation of VOLTHA |
| |
| We strongly recommend the utilization of `kind-voltha |
| <https://github.com/ciena/kind-voltha>`_ to setup such environment. |
| |
| Installation |
| ------------ |
| |
| Once VOLTHA is up and running, you can deploy BBSim with this command: |
| |
| .. code:: bash |
| |
| helm install -n bbsim cord/bbsim |
| |
| If you need to specify a custom image for BBSim you can: |
| |
| .. code:: bash |
| |
| helm install -n bbsim cord/bbsim --set images.bbsim.repository=bbsim --set images.bbsim.tag=candidate --set images.bbsim.pullPolicy=Never |
| |
| The BBSim installation can be customized to emulate multiple ONUs and multiple |
| PON Ports: |
| |
| .. code:: bash |
| |
| helm install -n bbsim cord/bbsim --set onu=8 --set pon=2 |
| |
| BBSim can also be configured to automatically start Authentication or DHCP: |
| |
| .. code:: bash |
| |
| helm install -n bbsim cord/bbsim --set auth=true --set dhcp=true |
| |
| Once BBSim is installed you can verify that it's running with: |
| |
| .. code:: bash |
| |
| kubectl logs -n voltha -f $(kubectl get pods -n voltha | grep bbsim | awk '{print $1}') |
| |
| Provision a BBSim OLT in VOLTHA |
| ------------------------------- |
| |
| Create the device: |
| |
| .. code:: bash |
| |
| voltctl device create -t openolt -H $(kubectl get -n voltha service/bbsim -o go-template='{{.spec.clusterIP}}'):50060 |
| |
| Enable the device: |
| |
| .. code:: bash |
| |
| voltctl device enable $(voltctl device list --filter Type~openolt -q) |
| |
| BBSim startup options |
| --------------------- |
| |
| ``BBSim`` supports a series of options that can be set at startup, you can see |
| the list via ``./bbsim --help`` |
| |
| .. code:: bash |
| |
| $ ./bbsim --help |
| Usage of ./bbsim: |
| -api_address string |
| IP address:port (default ":50070") |
| -auth |
| Set this flag if you want authentication to start automatically |
| -c_tag int |
| C-Tag starting value, each ONU will get a sequential one (targeting 1024 ONUs per BBSim instance the range is big enough) (default 900) |
| -c_tag_allocation string |
| Use 'unique' for incremental values, 'shared' to use the same value in all the ONUs (default "unique") |
| -ca string |
| Set the mode for controlled activation of PON ports and ONUs (default "default") |
| -cpuprofile string |
| write cpu profile to file |
| -delay int |
| The delay between ONU DISCOVERY batches in milliseconds (1 ONU per each PON PORT at a time (default 200) |
| -dhcp |
| Set this flag if you want DHCP to start automatically |
| -enableEvents |
| Enable sending BBSim events on configured kafka server |
| -enableperf |
| Setting this flag will cause BBSim to not store data like traffic schedulers, flows of ONUs etc.. |
| -kafkaAddress string |
| IP:Port for kafka (default ":9092") |
| -logCaller |
| Whether to print the caller filename or not |
| -logLevel string |
| Set the log level (trace, debug, info, warn, error) (default "debug") |
| -nni int |
| Number of NNI ports per OLT device to be emulated (default 1) |
| -olt_id int |
| OLT device ID |
| -onu int |
| Number of ONU devices per PON port to be emulated (default 1) |
| -openolt_address string |
| IP address:port (default ":50060") |
| -pon int |
| Number of PON ports per OLT device to be emulated (default 1) |
| -rest_api_address string |
| IP address:port (default ":50071") |
| -s_tag int |
| S-Tag initial value (default 900) |
| -s_tag_allocation string |
| Use 'unique' for incremental values, 'shared' to use the same value in all the ONUs (default "shared") |
| -sadisFormat string |
| Which format should sadis expose? [att|dt|tt] (default "att") |
| -enableEvents |
| Set this flag for publishing BBSim events on configured kafkaAddress |
| -kafkaAddress string |
| IP:Port for kafka, used only when bbsimEvents flag is set (default ":9092") |
| -ca string |
| Set the mode for controlled activation of PON ports and ONUs |
| -enableperf bool |
| Setting this flag will cause BBSim to not store data like traffic schedulers, flows of ONUs etc |
| -kafkaEventTopic string |
| Set the topic on which BBSim publishes events on kafka |
| -igmp |
| Set this flag to start IGMP automatically |
| -dhcpRetry bool |
| Set this flag if BBSim should retry DHCP upon failure until success |
| -authRetry bool |
| Set this flag if BBSim should retry EAPOL (Authentication) upon failure until success |
| |
| ``BBSim`` also looks for a configuration file in ``configs/bbsim.yaml`` from |
| which it reads a number of default settings. The command line options listed |
| above override the corresponding configuration file settings. A sample |
| configuration file is given below: |
| |
| .. literalinclude:: ../../configs/bbsim.yaml |
| |
| Specifying different tagging schemes |
| ------------------------------------ |
| |
| BBSim supports two different tagging schemes: |
| - ``-s_tag_allocation shared -c_tag_allocation unique`` |
| - ``-s_tag_allocation unique -c_tag_allocation shared`` |
| |
| Where the former will use the same ``S-Tag`` for all the ONUs and a unique ``C-Tag`` for each of them |
| and the latter will use a unique ``S-Tag`` for each ONU and the same ``C-Tag`` for all of them. |
| |
| For example: |
| |
| .. code:: bash |
| |
| # -s_tag_allocation shared -c_tag_allocation unique |
| PONPORTID ID PORTNO SERIALNUMBER HWADDRESS STAG CTAG OPERSTATE INTERNALSTATE |
| 0 0 0 BBSM00000001 2e:60:70:00:00:01 900 900 down created |
| 1 0 0 BBSM00000101 2e:60:70:00:01:01 900 901 down created |
| 2 0 0 BBSM00000201 2e:60:70:00:02:01 900 902 down created |
| 3 0 0 BBSM00000301 2e:60:70:00:03:01 900 903 down created |
| |
| |
| # -s_tag_allocation unique -c_tag_allocation shared |
| PONPORTID ID PORTNO SERIALNUMBER HWADDRESS STAG CTAG OPERSTATE INTERNALSTATE |
| 0 0 0 BBSM00000001 2e:60:70:00:00:01 900 7 down created |
| 1 0 0 BBSM00000101 2e:60:70:00:01:01 901 7 down created |
| 2 0 0 BBSM00000201 2e:60:70:00:02:01 902 7 down created |
| 3 0 0 BBSM00000301 2e:60:70:00:03:01 903 7 down created |
| |
| |
| |
| Using the BBSim Sadis server in ONOS |
| ------------------------------------ |
| |
| BBSim provides a simple server for testing with the ONOS Sadis app. The server |
| listens on port 50074 by default and provides the endpoints |
| ``subscribers/<id>`` and ``bandwidthprofiles/<id>``. |
| |
| To configure ONOS to use the BBSim ``Sadis`` server endpoints, the Sadis app |
| must use be configured as follows (see ``examples/sadis-in-bbsim.json``): |
| |
| .. literalinclude:: ../../examples/sadis-in-bbsim.json |
| |
| This base configuration may also be obtained directly from the BBSim Sadis |
| server: |
| |
| .. code:: bash |
| |
| curl http://<BBSIM_IP>:50074/v2/cfg -o examples/sadis.json |
| |
| It can then be pushed to the Sadis app using the following command: |
| |
| .. code:: bash |
| |
| curl -sSL --user karaf:karaf \ |
| -X POST \ |
| -H Content-Type:application/json \ |
| http://localhost:8181/onos/v1/network/configuration/apps/org.opencord.sadis \ |
| --data @examples/sadis-in-bbsim.json |
| |
| You can verify the current Sadis configuration: |
| |
| .. code:: bash |
| |
| curl --user karaf:karaf http://localhost:8181/onos/v1/network/configuration/apps/org.opencord.sadis |
| |
| In ONOS subscriber information can be queried using ``sadis <id>``. |
| |
| *Note that BBSim supports both sadis configuration versions, |
| if you need to support the configuration for release older than VOLTHA-2.3 |
| you can use the following command:* |
| |
| .. code:: bash |
| |
| curl http://<BBSIM_IP>:50074/v1/cfg -o examples/sadis.json |
| |
| Configure the Sadis format for different workflows |
| ************************************************** |
| |
| BBSim support different sadis formats, required for different workflows. |
| The desired sadis format can be specified via the ``-sadisFormat`` flag. |
| |
| The difference in the format is restricted to the ``uniTagList`` property, |
| for example: |
| |
| **ATT** |
| |
| .. code:: json |
| |
| { |
| "id": "BBSM00000003-1", |
| "nasPortId": "BBSM00000003-1", |
| "circuitId": "BBSM00000003-1", |
| "remoteId": "BBSM00000003-1", |
| "uniTagList": [ |
| { |
| "DownstreamBandwidthProfile": "User_Bandwidth1", |
| "IsDhcpRequired": true, |
| "IsIgmpRequired": true, |
| "PonCTag": 903, |
| "PonSTag": 900, |
| "TechnologyProfileID": 64, |
| "UpstreamBandwidthProfile": "Default" |
| } |
| ] |
| } |
| |
| |
| **DT** |
| |
| .. code:: json |
| |
| { |
| "id": "BBSM00000003-1", |
| "nasPortId": "BBSM00000003-1", |
| "circuitId": "BBSM00000003-1", |
| "remoteId": "BBSM00000003-1", |
| "uniTagList": [ |
| { |
| "DownstreamBandwidthProfile": "User_Bandwidth1", |
| "PonCTag": 4096, |
| "PonSTag": 903, |
| "TechnologyProfileID": 64, |
| "UniTagMatch": 4096, |
| "UpstreamBandwidthProfile": "Default" |
| } |
| ] |
| } |
| |
| |
| **TT** |
| |
| *Coming soon...* |
| |
| Controlled PON and ONU activation |
| --------------------------------- |
| |
| BBSim provides support for controlled PON and ONU activation. By default both |
| PON ports and ONUs are automatically activated when OLT is enabled. This can |
| be controlled using ``-ca`` option. |
| |
| ``-ca`` can be set to one of below four modes: |
| |
| - default: PON ports and ONUs are automatic activated (default behavior). |
| |
| - only-onu: PON ports automatically enabled and ONUs dynamically activated |
| On Enable OLT, IntfIndications for all PON ports are sent but ONU discovery indications are not sent. |
| When PoweronONU request is received at BBSim API server then ONU discovery indication is sent for that ONU. |
| |
| - only-pon: PON ports dynamically enabled and ONUs automatically activated |
| On Enable OLT, neither IntfIndications for PON ports nor ONU discovery indications are sent. |
| When EnablePonIf request is received at OpenOLT server, then that PON port is enabled and |
| IntfIndication is sent for that PON and all ONUs under that ports are discovered automatically. |
| |
| - both: Both PON ports and ONUs are dynamically activated |
| On Enable OLT, neither IntfIndication for PON ports nor ONU discovery indications are sent. |
| When EnablePonIf request is received on OpenOLT server then |
| IntfIndication is sent for that PON but no ONU discovery indication |
| will be sent. |
| When PoweronONU request is received at BBSim API server then ONU discovery indication is sent for that ONU. |
| |
| |
| Publishing BBSim Events on kafka |
| -------------------------------- |
| |
| BBSim provides option for publishing events on kafka. To publish events on |
| kafka, set BBSimEvents flag and configure kafkaAddress. |
| |
| Once BBSim is started, it will publish events (as and when they happen) on |
| topic ``BBSim-OLT-<id>-Events``. |
| |
| Types of Events: |
| - OLT-enable-received |
| - OLT-disable-received |
| - OLT-reboot-received |
| - OLT-reenable-received |
| - ONU-discovery-indication-sent |
| - ONU-activate-indication-received |
| - MIB-upload-received |
| - MIB-upload-done |
| - Flow-add-received |
| - Flow-remove-received |
| - ONU-authentication-done |
| - ONU-DHCP-ACK-received |
| |
| Sample output of kafkacat consumer for BBSim with OLT-ID 4: |
| |
| .. code:: bash |
| |
| $ kafkacat -b localhost:9092 -t BBSim-OLT-4-Events -C |
| {"EventType":"OLT-enable-received","OnuSerial":"","OltID":4,"IntfID":-1,"OnuID":-1,"EpochTime":1583152243144,"Timestamp":"2020-03-02 12:30:43.144449453"} |
| {"EventType":"ONU-discovery-indication-sent","OnuSerial":"BBSM00040001","OltID":4,"IntfID":0,"OnuID":0,"EpochTime":1583152243227,"Timestamp":"2020-03-02 12:30:43.227183506"} |
| {"EventType":"ONU-activate-indication-received","OnuSerial":"BBSM00040001","OltID":4,"IntfID":0,"OnuID":1,"EpochTime":1583152243248,"Timestamp":"2020-03-02 12:30:43.248225467"} |
| {"EventType":"MIB-upload-received","OnuSerial":"BBSM00040001","OltID":4,"IntfID":0,"OnuID":1,"EpochTime":1583152243299,"Timestamp":"2020-03-02 12:30:43.299480183"} |