blob: 296d42f0d6085b8d5f7cd009ec359ca48242b365 [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
Shrey Baide72b3cc2020-05-12 00:03:06 +0530150 -igmp
151 Set this flag to start IGMP automatically
Zdravko Bozakov3ddb2452019-11-29 14:33:41 +0100152
Zack Williams4b0ef4d2019-12-18 14:25:20 -0700153``BBSim`` also looks for a configuration file in ``configs/bbsim.yaml`` from
154which it reads a number of default settings. The command line options listed
155above override the corresponding configuration file settings. A sample
156configuration file is given below:
Zdravko Bozakov3ddb2452019-11-29 14:33:41 +0100157
158.. literalinclude:: ../../configs/bbsim.yaml
Zdravko Bozakov958d81c2019-12-13 22:09:48 +0100159
Matteo Scandolof65e6872020-04-15 15:18:43 -0700160Specifying different tagging schemes
161------------------------------------
162
163BBSim supports two different tagging schemes:
164- ``-s_tag_allocation shared -c_tag_allocation unique``
165- ``-s_tag_allocation unique -c_tag_allocation shared``
166
167Where the former will use the same ``S-Tag`` for all the ONUs and a unique ``C-Tag`` for each of them
168and the latter will use a unique ``S-Tag`` for each ONU and the same ``C-Tag`` for all of them.
169
170For example:
171
172.. code:: bash
173
174 # -s_tag_allocation shared -c_tag_allocation unique
175 PONPORTID ID PORTNO SERIALNUMBER HWADDRESS STAG CTAG OPERSTATE INTERNALSTATE
176 0 0 0 BBSM00000001 2e:60:70:00:00:01 900 900 down created
177 1 0 0 BBSM00000101 2e:60:70:00:01:01 900 901 down created
178 2 0 0 BBSM00000201 2e:60:70:00:02:01 900 902 down created
179 3 0 0 BBSM00000301 2e:60:70:00:03:01 900 903 down created
180
181
182 # -s_tag_allocation unique -c_tag_allocation shared
183 PONPORTID ID PORTNO SERIALNUMBER HWADDRESS STAG CTAG OPERSTATE INTERNALSTATE
184 0 0 0 BBSM00000001 2e:60:70:00:00:01 900 7 down created
185 1 0 0 BBSM00000101 2e:60:70:00:01:01 901 7 down created
186 2 0 0 BBSM00000201 2e:60:70:00:02:01 902 7 down created
187 3 0 0 BBSM00000301 2e:60:70:00:03:01 903 7 down created
188
189
190
Zdravko Bozakov958d81c2019-12-13 22:09:48 +0100191Using the BBSim Sadis server in ONOS
192------------------------------------
193
Zack Williams4b0ef4d2019-12-18 14:25:20 -0700194BBSim provides a simple server for testing with the ONOS Sadis app. The server
195listens on port 50074 by default and provides the endpoints
196``subscribers/<id>`` and ``bandwidthprofiles/<id>``.
Zdravko Bozakov958d81c2019-12-13 22:09:48 +0100197
Zack Williams4b0ef4d2019-12-18 14:25:20 -0700198To configure ONOS to use the BBSim ``Sadis`` server endpoints, the Sadis app
199must use be configured as follows (see ``examples/sadis-in-bbsim.json``):
Zdravko Bozakov958d81c2019-12-13 22:09:48 +0100200
Matteo Scandolof65e6872020-04-15 15:18:43 -0700201.. literalinclude:: ../../examples/sadis-in-bbsim.json
Zdravko Bozakov958d81c2019-12-13 22:09:48 +0100202
Zack Williams4b0ef4d2019-12-18 14:25:20 -0700203This base configuration may also be obtained directly from the BBSim Sadis
204server:
Zdravko Bozakov958d81c2019-12-13 22:09:48 +0100205
206.. code:: bash
207
Matteo Scandolof65e6872020-04-15 15:18:43 -0700208 curl http://<BBSIM_IP>:50074/v2/cfg -o examples/sadis.json
Zdravko Bozakov958d81c2019-12-13 22:09:48 +0100209
210It can then be pushed to the Sadis app using the following command:
211
212.. code:: bash
213
214 curl -sSL --user karaf:karaf \
215 -X POST \
216 -H Content-Type:application/json \
217 http://localhost:8181/onos/v1/network/configuration/apps/org.opencord.sadis \
218 --data @examples/sadis-in-bbsim.json
219
220You can verify the current Sadis configuration:
221
222.. code:: bash
223
224 curl --user karaf:karaf http://localhost:8181/onos/v1/network/configuration/apps/org.opencord.sadis
225
226In ONOS subscriber information can be queried using ``sadis <id>``.
Pragya Arya324337e2020-02-20 14:35:08 +0530227
Matteo Scandolof65e6872020-04-15 15:18:43 -0700228*Note that BBSim supports both sadis configuration versions,
229if you need to support the configuration for release older than VOLTHA-2.3
230you can use the following command:*
Matteo Scandolo9d08be52020-03-12 09:43:53 -0700231
Matteo Scandolof65e6872020-04-15 15:18:43 -0700232.. code:: bash
233
234 curl http://<BBSIM_IP>:50074/v1/cfg -o examples/sadis.json
235
236Configure the Sadis format for different workflows
237**************************************************
238
239BBSim support different sadis formats, required for different workflows.
240The desired sadis format can be specified via the ``-sadisFormat`` flag.
241
242The difference in the format is restricted to the ``uniTagList`` property,
243for example:
244
245**ATT**
246
247.. code:: json
248
249 {
Matteo Scandolo5ff80082019-12-20 13:20:57 -0800250 "id": "BBSM00000003-1",
251 "nasPortId": "BBSM00000003-1",
252 "circuitId": "BBSM00000003-1",
253 "remoteId": "BBSM00000003-1",
254 "uniTagList": [
255 {
256 "DownstreamBandwidthProfile": "User_Bandwidth1",
257 "IsDhcpRequired": true,
258 "IsIgmpRequired": true,
259 "PonCTag": 903,
260 "PonSTag": 900,
261 "TechnologyProfileID": 64,
262 "UpstreamBandwidthProfile": "Default"
263 }
264 ]
265 }
266
Matteo Scandolof65e6872020-04-15 15:18:43 -0700267
268**DT**
269
270.. code:: json
271
272 {
Matteo Scandolo5ff80082019-12-20 13:20:57 -0800273 "id": "BBSM00000003-1",
274 "nasPortId": "BBSM00000003-1",
275 "circuitId": "BBSM00000003-1",
276 "remoteId": "BBSM00000003-1",
277 "uniTagList": [
278 {
279 "DownstreamBandwidthProfile": "User_Bandwidth1",
280 "PonCTag": 4096,
281 "PonSTag": 903,
282 "TechnologyProfileID": 64,
283 "UniTagMatch": 4096,
284 "UpstreamBandwidthProfile": "Default"
285 }
286 ]
287 }
288
Matteo Scandolof65e6872020-04-15 15:18:43 -0700289
290**TT**
291
292*Coming soon...*
Matteo Scandolo9d08be52020-03-12 09:43:53 -0700293
Pragya Arya3f8fdc62020-03-16 11:12:27 +0530294Controlled PON and ONU activation
295---------------------------------
296
Zack Williamsd2907e62020-04-03 10:23:02 -0700297BBSim provides support for controlled PON and ONU activation. By default both
298PON ports and ONUs are automatically activated when OLT is enabled. This can
299be controlled using ``-ca`` option.
Pragya Arya3f8fdc62020-03-16 11:12:27 +0530300
301``-ca`` can be set to one of below four modes:
302
303- default: PON ports and ONUs are automatic activated (default behavior).
304
305- only-onu: PON ports automatically enabled and ONUs dynamically activated
306 On Enable OLT, IntfIndications for all PON ports are sent but ONU discovery indications are not sent.
307 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 -0700308
Pragya Arya3f8fdc62020-03-16 11:12:27 +0530309- only-pon: PON ports dynamically enabled and ONUs automatically activated
310 On Enable OLT, neither IntfIndications for PON ports nor ONU discovery indications are sent.
311 When EnablePonIf request is received at OpenOLT server, then that PON port is enabled and
312 IntfIndication is sent for that PON and all ONUs under that ports are discovered automatically.
Zack Williamsd2907e62020-04-03 10:23:02 -0700313
Pragya Arya3f8fdc62020-03-16 11:12:27 +0530314- both: Both PON ports and ONUs are dynamically activated
315 On Enable OLT, neither IntfIndication for PON ports nor ONU discovery indications are sent.
Zack Williamsd2907e62020-04-03 10:23:02 -0700316 When EnablePonIf request is received on OpenOLT server then
317 IntfIndication is sent for that PON but no ONU discovery indication
318 will be sent.
Pragya Arya3f8fdc62020-03-16 11:12:27 +0530319 When PoweronONU request is received at BBSim API server then ONU discovery indication is sent for that ONU.
320
321
Pragya Arya324337e2020-02-20 14:35:08 +0530322Publishing BBSim Events on kafka
323--------------------------------
324
Zack Williamsd2907e62020-04-03 10:23:02 -0700325BBSim provides option for publishing events on kafka. To publish events on
326kafka, set BBSimEvents flag and configure kafkaAddress.
327
328Once BBSim is started, it will publish events (as and when they happen) on
329topic ``BBSim-OLT-<id>-Events``.
Pragya Arya324337e2020-02-20 14:35:08 +0530330
331Types of Events:
332 - OLT-enable-received
333 - OLT-disable-received
334 - OLT-reboot-received
335 - OLT-reenable-received
336 - ONU-discovery-indication-sent
337 - ONU-activate-indication-received
338 - MIB-upload-received
339 - MIB-upload-done
340 - Flow-add-received
341 - Flow-remove-received
342 - ONU-authentication-done
343 - ONU-DHCP-ACK-received
344
345Sample output of kafkacat consumer for BBSim with OLT-ID 4:
346
347.. code:: bash
348
349 $ kafkacat -b localhost:9092 -t BBSim-OLT-4-Events -C
350 {"EventType":"OLT-enable-received","OnuSerial":"","OltID":4,"IntfID":-1,"OnuID":-1,"EpochTime":1583152243144,"Timestamp":"2020-03-02 12:30:43.144449453"}
351 {"EventType":"ONU-discovery-indication-sent","OnuSerial":"BBSM00040001","OltID":4,"IntfID":0,"OnuID":0,"EpochTime":1583152243227,"Timestamp":"2020-03-02 12:30:43.227183506"}
352 {"EventType":"ONU-activate-indication-received","OnuSerial":"BBSM00040001","OltID":4,"IntfID":0,"OnuID":1,"EpochTime":1583152243248,"Timestamp":"2020-03-02 12:30:43.248225467"}
353 {"EventType":"MIB-upload-received","OnuSerial":"BBSM00040001","OltID":4,"IntfID":0,"OnuID":1,"EpochTime":1583152243299,"Timestamp":"2020-03-02 12:30:43.299480183"}