blob: 4cd9d467183e2929f44d99d82b598bd7a6daaa25 [file] [log] [blame]
Matteo Scandolo9f619492019-10-25 13:11:58 -07001.. BBSim documentation master file, created by
2 sphinx-quickstart on Fri Oct 25 12:03:42 2019.
3 You can adapt this file completely to your liking, but it should at least
4 contain the root `toctree` directive.
5
Zack Williamsd2907e62020-04-03 10:23:02 -07006BBSim, a Broadband Simulator
7============================
Matteo Scandolo9f619492019-10-25 13:11:58 -07008
9.. toctree::
10 :maxdepth: 2
11 :caption: Contents:
12
Matteo Scandoloe383d5d2019-10-25 14:47:27 -070013 operations.rst
Matteo Scandolo9f619492019-10-25 13:11:58 -070014 onu-state-machine.rst
Matteo Scandolod02b79b2019-12-05 16:42:13 -080015 olt-state-machine.rst
Matteo Scandolo9f619492019-10-25 13:11:58 -070016 development-dependencies.rst
17 bbr.rst
18 bbsimctl.rst
Zdravko Bozakov2da76342019-10-21 09:47:35 +020019 api.rst
Matteo Scandolo9f619492019-10-25 13:11:58 -070020
21
22Quickstart
23----------
24
Zack Williams4b0ef4d2019-12-18 14:25:20 -070025BBSim (a.k.a. BroadBand Simulator) is a tool designed to emulate an `Openolt
26<https://github.com/opencord/openolt>`_ compatible device.
Matteo Scandolo9f619492019-10-25 13:11:58 -070027
28In order to use BBSim you need to have:
29
30- a Kubernetes cluster
31- helm
32- a working installation of VOLTHA
33
Zack Williams4b0ef4d2019-12-18 14:25:20 -070034We strongly recommend the utilization of `kind-voltha
35<https://github.com/ciena/kind-voltha>`_ to setup such environment.
Matteo Scandolo9f619492019-10-25 13:11:58 -070036
37Installation
38------------
39
40Once VOLTHA is up and running, you can deploy BBSim with this command:
41
42.. code:: bash
43
44 helm install -n bbsim cord/bbsim
45
Matteo Scandoloc1147092019-10-29 09:38:33 -070046If you need to specify a custom image for BBSim you can:
47
48.. code:: bash
49
50 helm install -n bbsim cord/bbsim --set images.bbsim.repository=bbsim --set images.bbsim.tag=candidate --set images.bbsim.pullPolicy=Never
51
Zack Williams4b0ef4d2019-12-18 14:25:20 -070052The BBSim installation can be customized to emulate multiple ONUs and multiple
53PON Ports:
Matteo Scandolo9f619492019-10-25 13:11:58 -070054
55.. code:: bash
56
57 helm install -n bbsim cord/bbsim --set onu=8 --set pon=2
58
Matteo Scandoloc1147092019-10-29 09:38:33 -070059BBSim can also be configured to automatically start Authentication or DHCP:
60
61.. code:: bash
62
63 helm install -n bbsim cord/bbsim --set auth=true --set dhcp=true
64
Matteo Scandolo9f619492019-10-25 13:11:58 -070065Once BBSim is installed you can verify that it's running with:
66
67.. code:: bash
68
69 kubectl logs -n voltha -f $(kubectl get pods -n voltha | grep bbsim | awk '{print $1}')
70
71Provision a BBSim OLT in VOLTHA
72-------------------------------
73
74Create the device:
75
76.. code:: bash
77
78 voltctl device create -t openolt -H $(kubectl get -n voltha service/bbsim -o go-template='{{.spec.clusterIP}}'):50060
79
80Enable the device:
81
82.. code:: bash
83
84 voltctl device enable $(voltctl device list --filter Type~openolt -q)
Matteo Scandoloc1147092019-10-29 09:38:33 -070085
86BBSim startup options
87---------------------
88
Zack Williams4b0ef4d2019-12-18 14:25:20 -070089``BBSim`` supports a series of options that can be set at startup, you can see
90the list via ``./bbsim --help``
Matteo Scandoloc1147092019-10-29 09:38:33 -070091
92.. code:: bash
93
94 $ ./bbsim --help
95 Usage of ./bbsim:
Matteo Scandolof65e6872020-04-15 15:18:43 -070096 -api_address string
97 IP address:port (default ":50070")
Matteo Scandoloc1147092019-10-29 09:38:33 -070098 -auth
99 Set this flag if you want authentication to start automatically
100 -c_tag int
101 C-Tag starting value, each ONU will get a sequential one (targeting 1024 ONUs per BBSim instance the range is big enough) (default 900)
Matteo Scandolof65e6872020-04-15 15:18:43 -0700102 -c_tag_allocation string
103 Use 'unique' for incremental values, 'shared' to use the same value in all the ONUs (default "unique")
104 -ca string
105 Set the mode for controlled activation of PON ports and ONUs (default "default")
Matteo Scandoloc1147092019-10-29 09:38:33 -0700106 -cpuprofile string
107 write cpu profile to file
Matteo Scandolocae57b52019-11-12 10:52:53 -0800108 -delay int
109 The delay between ONU DISCOVERY batches in milliseconds (1 ONU per each PON PORT at a time (default 200)
Matteo Scandoloc1147092019-10-29 09:38:33 -0700110 -dhcp
111 Set this flag if you want DHCP to start automatically
Matteo Scandolof65e6872020-04-15 15:18:43 -0700112 -enableEvents
113 Enable sending BBSim events on configured kafka server
114 -enableperf
115 Setting this flag will cause BBSim to not store data like traffic schedulers, flows of ONUs etc..
116 -kafkaAddress string
117 IP:Port for kafka (default ":9092")
Matteo Scandoloc1147092019-10-29 09:38:33 -0700118 -logCaller
119 Whether to print the caller filename or not
120 -logLevel string
121 Set the log level (trace, debug, info, warn, error) (default "debug")
122 -nni int
123 Number of NNI ports per OLT device to be emulated (default 1)
124 -olt_id int
Matteo Scandolof65e6872020-04-15 15:18:43 -0700125 OLT device ID
Matteo Scandoloc1147092019-10-29 09:38:33 -0700126 -onu int
127 Number of ONU devices per PON port to be emulated (default 1)
Matteo Scandolof65e6872020-04-15 15:18:43 -0700128 -openolt_address string
129 IP address:port (default ":50060")
Matteo Scandoloc1147092019-10-29 09:38:33 -0700130 -pon int
131 Number of PON ports per OLT device to be emulated (default 1)
Matteo Scandolof65e6872020-04-15 15:18:43 -0700132 -rest_api_address string
133 IP address:port (default ":50071")
Matteo Scandoloc1147092019-10-29 09:38:33 -0700134 -s_tag int
Matteo Scandolof65e6872020-04-15 15:18:43 -0700135 S-Tag initial value (default 900)
136 -s_tag_allocation string
137 Use 'unique' for incremental values, 'shared' to use the same value in all the ONUs (default "shared")
138 -sadisFormat string
139 Which format should sadis expose? [att|dt|tt] (default "att")
Shrey Baid64cda472020-04-24 18:58:18 +0530140 -enableEvents
141 Set this flag for publishing BBSim events on configured kafkaAddress
142 -kafkaAddress string
143 IP:Port for kafka, used only when bbsimEvents flag is set (default ":9092")
144 -ca string
145 Set the mode for controlled activation of PON ports and ONUs
146 -enableperf bool
147 Setting this flag will cause BBSim to not store data like traffic schedulers, flows of ONUs etc
148 -kafkaEventTopic string
149 Set the topic on which BBSim publishes events on kafka
Zdravko Bozakov3ddb2452019-11-29 14:33:41 +0100150
Zack Williams4b0ef4d2019-12-18 14:25:20 -0700151``BBSim`` also looks for a configuration file in ``configs/bbsim.yaml`` from
152which it reads a number of default settings. The command line options listed
153above override the corresponding configuration file settings. A sample
154configuration file is given below:
Zdravko Bozakov3ddb2452019-11-29 14:33:41 +0100155
156.. literalinclude:: ../../configs/bbsim.yaml
Zdravko Bozakov958d81c2019-12-13 22:09:48 +0100157
Matteo Scandolof65e6872020-04-15 15:18:43 -0700158Specifying different tagging schemes
159------------------------------------
160
161BBSim supports two different tagging schemes:
162- ``-s_tag_allocation shared -c_tag_allocation unique``
163- ``-s_tag_allocation unique -c_tag_allocation shared``
164
165Where the former will use the same ``S-Tag`` for all the ONUs and a unique ``C-Tag`` for each of them
166and the latter will use a unique ``S-Tag`` for each ONU and the same ``C-Tag`` for all of them.
167
168For example:
169
170.. code:: bash
171
172 # -s_tag_allocation shared -c_tag_allocation unique
173 PONPORTID ID PORTNO SERIALNUMBER HWADDRESS STAG CTAG OPERSTATE INTERNALSTATE
174 0 0 0 BBSM00000001 2e:60:70:00:00:01 900 900 down created
175 1 0 0 BBSM00000101 2e:60:70:00:01:01 900 901 down created
176 2 0 0 BBSM00000201 2e:60:70:00:02:01 900 902 down created
177 3 0 0 BBSM00000301 2e:60:70:00:03:01 900 903 down created
178
179
180 # -s_tag_allocation unique -c_tag_allocation shared
181 PONPORTID ID PORTNO SERIALNUMBER HWADDRESS STAG CTAG OPERSTATE INTERNALSTATE
182 0 0 0 BBSM00000001 2e:60:70:00:00:01 900 7 down created
183 1 0 0 BBSM00000101 2e:60:70:00:01:01 901 7 down created
184 2 0 0 BBSM00000201 2e:60:70:00:02:01 902 7 down created
185 3 0 0 BBSM00000301 2e:60:70:00:03:01 903 7 down created
186
187
188
Zdravko Bozakov958d81c2019-12-13 22:09:48 +0100189Using the BBSim Sadis server in ONOS
190------------------------------------
191
Zack Williams4b0ef4d2019-12-18 14:25:20 -0700192BBSim provides a simple server for testing with the ONOS Sadis app. The server
193listens on port 50074 by default and provides the endpoints
194``subscribers/<id>`` and ``bandwidthprofiles/<id>``.
Zdravko Bozakov958d81c2019-12-13 22:09:48 +0100195
Zack Williams4b0ef4d2019-12-18 14:25:20 -0700196To configure ONOS to use the BBSim ``Sadis`` server endpoints, the Sadis app
197must use be configured as follows (see ``examples/sadis-in-bbsim.json``):
Zdravko Bozakov958d81c2019-12-13 22:09:48 +0100198
Matteo Scandolof65e6872020-04-15 15:18:43 -0700199.. literalinclude:: ../../examples/sadis-in-bbsim.json
Zdravko Bozakov958d81c2019-12-13 22:09:48 +0100200
Zack Williams4b0ef4d2019-12-18 14:25:20 -0700201This base configuration may also be obtained directly from the BBSim Sadis
202server:
Zdravko Bozakov958d81c2019-12-13 22:09:48 +0100203
204.. code:: bash
205
Matteo Scandolof65e6872020-04-15 15:18:43 -0700206 curl http://<BBSIM_IP>:50074/v2/cfg -o examples/sadis.json
Zdravko Bozakov958d81c2019-12-13 22:09:48 +0100207
208It can then be pushed to the Sadis app using the following command:
209
210.. code:: bash
211
212 curl -sSL --user karaf:karaf \
213 -X POST \
214 -H Content-Type:application/json \
215 http://localhost:8181/onos/v1/network/configuration/apps/org.opencord.sadis \
216 --data @examples/sadis-in-bbsim.json
217
218You can verify the current Sadis configuration:
219
220.. code:: bash
221
222 curl --user karaf:karaf http://localhost:8181/onos/v1/network/configuration/apps/org.opencord.sadis
223
224In ONOS subscriber information can be queried using ``sadis <id>``.
Pragya Arya324337e2020-02-20 14:35:08 +0530225
Matteo Scandolof65e6872020-04-15 15:18:43 -0700226*Note that BBSim supports both sadis configuration versions,
227if you need to support the configuration for release older than VOLTHA-2.3
228you can use the following command:*
Matteo Scandolo9d08be52020-03-12 09:43:53 -0700229
Matteo Scandolof65e6872020-04-15 15:18:43 -0700230.. code:: bash
231
232 curl http://<BBSIM_IP>:50074/v1/cfg -o examples/sadis.json
233
234Configure the Sadis format for different workflows
235**************************************************
236
237BBSim support different sadis formats, required for different workflows.
238The desired sadis format can be specified via the ``-sadisFormat`` flag.
239
240The difference in the format is restricted to the ``uniTagList`` property,
241for example:
242
243**ATT**
244
245.. code:: json
246
247 {
248 "id": "BBSM00000003-1",
249 "nasPortId": "BBSM00000003-1",
250 "circuitId": "BBSM00000003-1",
251 "remoteId": "BBSM00000003-1",
252 "uniTagList": [
253 {
254 "DownstreamBandwidthProfile": "User_Bandwidth1",
255 "IsDhcpRequired": true,
256 "IsIgmpRequired": true,
257 "PonCTag": 903,
258 "PonSTag": 900,
259 "TechnologyProfileID": 64,
260 "UpstreamBandwidthProfile": "Default"
261 }
262 ]
263}
264
265**DT**
266
267.. code:: json
268
269 {
270 "id": "BBSM00000003-1",
271 "nasPortId": "BBSM00000003-1",
272 "circuitId": "BBSM00000003-1",
273 "remoteId": "BBSM00000003-1",
274 "uniTagList": [
275 {
276 "DownstreamBandwidthProfile": "User_Bandwidth1",
277 "PonCTag": 4096,
278 "PonSTag": 903,
279 "TechnologyProfileID": 64,
280 "UniTagMatch": 4096,
281 "UpstreamBandwidthProfile": "Default"
282 }
283 ]
284}
285
286**TT**
287
288*Coming soon...*
Matteo Scandolo9d08be52020-03-12 09:43:53 -0700289
Pragya Arya3f8fdc62020-03-16 11:12:27 +0530290Controlled PON and ONU activation
291---------------------------------
292
Zack Williamsd2907e62020-04-03 10:23:02 -0700293BBSim provides support for controlled PON and ONU activation. By default both
294PON ports and ONUs are automatically activated when OLT is enabled. This can
295be controlled using ``-ca`` option.
Pragya Arya3f8fdc62020-03-16 11:12:27 +0530296
297``-ca`` can be set to one of below four modes:
298
299- default: PON ports and ONUs are automatic activated (default behavior).
300
301- only-onu: PON ports automatically enabled and ONUs dynamically activated
302 On Enable OLT, IntfIndications for all PON ports are sent but ONU discovery indications are not sent.
303 When PoweronONU request is received at BBSim API server then ONU discovery indication is sent for that ONU.
Zack Williamsd2907e62020-04-03 10:23:02 -0700304
Pragya Arya3f8fdc62020-03-16 11:12:27 +0530305- only-pon: PON ports dynamically enabled and ONUs automatically activated
306 On Enable OLT, neither IntfIndications for PON ports nor ONU discovery indications are sent.
307 When EnablePonIf request is received at OpenOLT server, then that PON port is enabled and
308 IntfIndication is sent for that PON and all ONUs under that ports are discovered automatically.
Zack Williamsd2907e62020-04-03 10:23:02 -0700309
Pragya Arya3f8fdc62020-03-16 11:12:27 +0530310- both: Both PON ports and ONUs are dynamically activated
311 On Enable OLT, neither IntfIndication for PON ports nor ONU discovery indications are sent.
Zack Williamsd2907e62020-04-03 10:23:02 -0700312 When EnablePonIf request is received on OpenOLT server then
313 IntfIndication is sent for that PON but no ONU discovery indication
314 will be sent.
Pragya Arya3f8fdc62020-03-16 11:12:27 +0530315 When PoweronONU request is received at BBSim API server then ONU discovery indication is sent for that ONU.
316
317
Pragya Arya324337e2020-02-20 14:35:08 +0530318Publishing BBSim Events on kafka
319--------------------------------
320
Zack Williamsd2907e62020-04-03 10:23:02 -0700321BBSim provides option for publishing events on kafka. To publish events on
322kafka, set BBSimEvents flag and configure kafkaAddress.
323
324Once BBSim is started, it will publish events (as and when they happen) on
325topic ``BBSim-OLT-<id>-Events``.
Pragya Arya324337e2020-02-20 14:35:08 +0530326
327Types of Events:
328 - OLT-enable-received
329 - OLT-disable-received
330 - OLT-reboot-received
331 - OLT-reenable-received
332 - ONU-discovery-indication-sent
333 - ONU-activate-indication-received
334 - MIB-upload-received
335 - MIB-upload-done
336 - Flow-add-received
337 - Flow-remove-received
338 - ONU-authentication-done
339 - ONU-DHCP-ACK-received
340
341Sample output of kafkacat consumer for BBSim with OLT-ID 4:
342
343.. code:: bash
344
345 $ kafkacat -b localhost:9092 -t BBSim-OLT-4-Events -C
346 {"EventType":"OLT-enable-received","OnuSerial":"","OltID":4,"IntfID":-1,"OnuID":-1,"EpochTime":1583152243144,"Timestamp":"2020-03-02 12:30:43.144449453"}
347 {"EventType":"ONU-discovery-indication-sent","OnuSerial":"BBSM00040001","OltID":4,"IntfID":0,"OnuID":0,"EpochTime":1583152243227,"Timestamp":"2020-03-02 12:30:43.227183506"}
348 {"EventType":"ONU-activate-indication-received","OnuSerial":"BBSM00040001","OltID":4,"IntfID":0,"OnuID":1,"EpochTime":1583152243248,"Timestamp":"2020-03-02 12:30:43.248225467"}
349 {"EventType":"MIB-upload-received","OnuSerial":"BBSM00040001","OltID":4,"IntfID":0,"OnuID":1,"EpochTime":1583152243299,"Timestamp":"2020-03-02 12:30:43.299480183"}