Merge "SEBA-782 cordctl SEBA tutorial"
diff --git a/developer/workflows/onos-apps.md b/developer/workflows/onos-apps.md
index 105276a..352cbfa 100644
--- a/developer/workflows/onos-apps.md
+++ b/developer/workflows/onos-apps.md
@@ -115,7 +115,7 @@
 
 
 ```yaml
-aaaAppUrl: "myregistrydomain.com:30160/repository/aaa-app-1.10.0-SNAPSHOT.oar"
+aaaAppUrl: "http://myregistrydomain.com:30160/repository/aaa-app-1.10.0-SNAPSHOT.oar"
 aaaAppVersion: "1.10.0.SNAPSHOT"
 ```
 
@@ -128,5 +128,5 @@
 ```
 
 > You can find a full list of the application names and URLs here:
-> - https://github.com/opencord/helm-charts/blob/master/xos-profiles/seba-services/values.yaml#L43-L53 
-> - https://github.com/opencord/helm-charts/blob/master/workflows/att-workflow/values.yaml#L40-L41
\ No newline at end of file
+> - https://github.com/opencord/helm-charts/blob/master/xos-profiles/seba-services/values.yaml#L43-L53
+> - https://github.com/opencord/helm-charts/blob/master/workflows/att-workflow/values.yaml#L40-L41
diff --git a/installation/platform.md b/installation/platform.md
index d8666fc..67deb21 100644
--- a/installation/platform.md
+++ b/installation/platform.md
@@ -10,7 +10,7 @@
 Then, to install the CORD Platform you can use the corresponding chart:
 
 ```shell
-helm install -n cord-platform cord/cord-platform --version=6.1.0
+helm install -n cord-platform cord/cord-platform --version=7.0.0
 ```
 
 ### Disabling monitoring and logging
@@ -28,7 +28,7 @@
 To disable both of them you can use:
 
 ```shell
-helm install -n cord-platform cord/cord-platform --version=6.1.0 --set logging.enabled=false --set nem-monitoring.enabled=false
+helm install -n cord-platform cord/cord-platform --version=7.0.0 --set logging.enabled=false --set nem-monitoring.enabled=false
 ```
 
 ## Alternatively, install the CORD Platform as set of Separate Components
diff --git a/operating_cord/elk_stack.md b/operating_cord/elk_stack.md
index 6546452..80c2326 100644
--- a/operating_cord/elk_stack.md
+++ b/operating_cord/elk_stack.md
@@ -196,4 +196,33 @@
   }
 }
 ' | jq .hits.hits
-```
\ No newline at end of file
+```
+
+### Get Operational status of the RADIUS server
+
+Operational status can be queried from Elastic search using Rest API calls.
+Three possible values for operational status are: 
+1) In Use
+2) Unknown
+3) Unavailable 
+
+```bash
+curl -XGET "http://localhost:$ELK_PORT/_search" -H 'Content-Type: application/json' -d'
+{
+  "query": {
+    "bool": {
+      "filter": {
+        "term": {
+          "kafka_topic": "radiusoperationalstatus.events"
+        }
+      }
+    }
+  }
+}' | jq .hits.hits[0]._source.radiusoperationalstatus
+```
+
+Example Response:
+
+```bash
+"In Use"
+```
diff --git a/prereqs/hardware.md b/prereqs/hardware.md
index dabfe11..6f1173e 100644
--- a/prereqs/hardware.md
+++ b/prereqs/hardware.md
@@ -84,7 +84,7 @@
             * Celestica Tellion GP-1204
             * Movistar ONU (with CPE included) (manifactured by Telefonica: <http://www.movistar.es/particulares/movil/moviles/hgu>)
     * **XGS-PON**
-        * **OLT**: EdgeCore ASFVOLT16 (for more info <bartek_raszczyk@edge-core.com>)
+        * **OLT**: Edgecore ASXvOLT16 (for more info <bartek_raszczyk@edge-core.com>)
             * Compatible **OLT optics**
                 * Hisense/Ligent: LTH7226-PC, LTH7226-PC+
                 * Source Photonics: XPP-XG2-N1-CDFA
diff --git a/profiles/seba/configuration.md b/profiles/seba/configuration.md
index 780ea1a..0df79b0 100644
--- a/profiles/seba/configuration.md
+++ b/profiles/seba/configuration.md
@@ -6,8 +6,8 @@
 
 In this page we are describing the process as a three steps process:
 
-- [Fabric Setup](./configuration.md#fabric-setup)
-- [OLT Provisioning](./configuration.md#olt-provisioning)
+- [POD Setup](./configuration.md#pod-setup)
+- [PON Provisioning](./configuration.md#pon-provisioning)
 - [Subscriber Provisioning](./configuration.md#subscriber-provisioning)
 
 as that is what logically makes sense, but be aware that all the configurations
@@ -17,7 +17,15 @@
 you will need to create your own, but the following can serve as a
 reference:
 
-## Fabric Setup
+## POD Setup
+
+The POD Setup consists of
+
+- Fabric configuration (In this case a single aggregation switch, see [Fabric](../../fabric/README.md) for more information)
+- `BNGPortMapping` configuration (see [Fabric-crossconnet](../../fabric-crossconnect/README.md) for more information)
+- DHCP L2 Relay configuration (see [ONOS DHCP L2 RELAY Application](https://github.com/opencord/dhcpl2relay/#configuration) for more information)
+
+For simplicity this is encapsulated in a single TOSCA recipe:
 
 ```yaml
 tosca_definitions_version: tosca_simple_yaml_1_0
@@ -103,7 +111,13 @@
 For instructions on how to push TOSCA into a CORD POD, please
 refer to this [guide](../../xos-tosca/README.md).
 
-## OLT Provisioning
+## PON Provisioning
+
+The PON Provisioning consists of preparing all the configurations needed by ONOS and VOLTHA to manage the PON network,
+su as:
+
+- [OLT](../../olt-service/README.md#create-an-OLT)
+- [Technology Profile](https://github.com/opencord/voltha/tree/master/common/tech_profile)
 
 ```yaml
 tosca_definitions_version: tosca_simple_yaml_1_0
@@ -111,6 +125,7 @@
   - custom_types/oltdevice.yaml
   - custom_types/onudevice.yaml
   - custom_types/voltservice.yaml
+  - custom_types/technologyprofile.yaml
 description: Create an OLT Device in VOLTHA
 topology_template:
   node_templates:
@@ -128,16 +143,78 @@
         device_type: openolt
         host: 10.90.0.122
         port: 9191
-        switch_datapath_id: of:0000000000000002 # the openflow switch to which the OLT is connected
+        switch_datapath_id: of:0000000000000002 # the openflow id of the switch to which the OLT is connected
         switch_port: "1" # the port on the switch on which the OLT is connected
         outer_tpid: "0x8100"
         uplink: "65536"
         nas_id: "NAS_ID"
-        serial_number: "10.90.0.122:9191"
+        serial_number: EC1721000208 # the serial number of the OLT device
       requirements:
         - volt_service:
             node: service#volt
             relationship: tosca.relationships.BelongsToOne
+            
+    technologyProfile:
+      type: tosca.nodes.TechnologyProfile
+      properties:
+        profile_id: 64
+        technology: xgspon
+        profile_value: >
+          {
+            "name": "4QueueHybridProfileMap1",
+            "profile_type": "XPON",
+            "version": 1.0,
+            "num_gem_ports": 1,
+            "instance_control": {
+              "onu": "multi-instance",
+              "uni": "single-instance",
+              "max_gem_payload_size": "auto"
+            },
+            "us_scheduler": {
+              "additional_bw": "auto",
+              "direction": "UPSTREAM",
+              "priority": 0,
+              "weight": 0,
+              "q_sched_policy": "hybrid"
+            },
+            "ds_scheduler": {
+              "additional_bw": "auto",
+              "direction": "DOWNSTREAM",
+              "priority": 0,
+              "weight": 0,
+              "q_sched_policy": "hybrid"
+            },
+            "upstream_gem_port_attribute_list": [{
+                "pbit_map": "0b11000000",
+                "aes_encryption": "True",
+                "scheduling_policy": "StrictPriority",
+                "priority_q": 1,
+                "weight": 0,
+                "discard_policy": "TailDrop",
+                "max_q_size": "auto",
+                "discard_config": {
+                  "min_threshold": 0,
+                  "max_threshold": 0,
+                  "max_probability": 0
+                }
+              }
+            ],
+            "downstream_gem_port_attribute_list": [{
+                "pbit_map": "0b11000000",
+                "aes_encryption": "True",
+                "scheduling_policy": "StrictPriority",
+                "priority_q": 1,
+                "weight": 0,
+                "discard_policy": "TailDrop",
+                "max_q_size": "auto",
+                "discard_config": {
+                  "min_threshold": 0,
+                  "max_threshold": 0,
+                  "max_probability": 0
+                }
+              }
+            ]
+          }
 ```
 
 For instructions on how to push TOSCA into a CORD POD, please
@@ -147,6 +224,8 @@
 
 Once the POD has been configured, you can create a subscriber.
 
+This section will guide you through the configuration of `Subscriber` and associated `BandwidthProfile`s.
+
 To create a subscriber, you'll need to know the serial number of the ONU it is
 attached to.
 
@@ -221,17 +300,41 @@
 tosca_definitions_version: tosca_simple_yaml_1_0
 imports:
   - custom_types/rcordsubscriber.yaml
+  - custom_types/bandwidthprofile.yaml
 description: Create a test subscriber
 topology_template:
   node_templates:
+  
+    high_speed_bp:
+      type: tosca.nodes.BandwidthProfile
+      properties:
+         air: 2000
+         cbs: 2000
+         cir: 2000
+         ebs: 2000
+         eir: 2000
+         name: High Speed Internet
+
     # A subscriber
     my_house:
       type: tosca.nodes.RCORDSubscriber
       properties:
         name: My House
+        status: pre-provisioned # the status we want to create the subscriber in
         c_tag: 111
         s_tag: 222
-        onu_device: BRCM1234 # Serial Number of the ONU Device to which this subscriber is connected
+        onu_device: BRCM22222222 # Serial Number of the ONU Device to which this subscriber is connected
+        tech_profile_id: 64 # The ID of the technology profile that needs to be applied to this subscriber
+        nas_port_id : some-value # radius specific attributes
+        circuit_id: some-value # radius specific attributes
+        remote_id: some-value # radius specific attributes
+      requirements:
+        - upstream_bps:
+            node: high_speed_bp
+            relationship: tosca.relationships.BelongsToOne
+        - downstream_bps:
+            node: high_speed_bp
+            relationship: tosca.relationships.BelongsToOne
 ```
 
 For instructions on how to push TOSCA into a CORD POD, please
diff --git a/profiles/seba/install.md b/profiles/seba/install.md
index 8b18206..c9761dc 100644
--- a/profiles/seba/install.md
+++ b/profiles/seba/install.md
@@ -24,7 +24,7 @@
 Then, proceed with the SEBA chart installation:
 
 ```shell
-helm install -n seba cord/seba --version=1.0.0
+helm install -n seba cord/seba --version=2.0.0-alpha1
 ```
 
 ### Alternatively, install SEBA as separate components
diff --git a/profiles/seba/known-issues.md b/profiles/seba/known-issues.md
index f9fb8f8..78fbfad 100644
--- a/profiles/seba/known-issues.md
+++ b/profiles/seba/known-issues.md
@@ -1,35 +1,20 @@
 # Known Issues
 
-## SEBA 1.0 Release
+## SEBA 2.0-alpha Release
 
-There are known major issues having to do with rebooting of the physical hardware, both
-the OLT and the AGG switch, as well as continuously deleting/re-creating of an OLT Device via NEM. These issues are described in more detail in below:
+This release of SEBA is qualified as 'alpha' due to known major issues related to the use of OLT software from Broadcom referred to as BAL - Broadband Adaptation Layer. The SEBA 2.0-alpha release uses [BAL 2.6](https://github.com/balapi/bal-api-2.6), which is no longer supported by Broadcom.
 
-* [SEBA-388](https://jira.opencord.org/browse/SEBA-388)
-   With this issue, DHCP may not work after AGG switch reboot. A possible workaround is to use a different config for the DHCPl2Relay app that uses the OLT's uplink to reach the DHCP Server, instead of the Switch's uplink. More details are described [here](troubleshoot/no-dhcp.md)
-* [SEBA-385](https://jira.opencord.org/browse/SEBA-385)
-   With this issue, the OLT may not pass traffic anymore after reboot. Currently, the only workaround is to, enter the ONOS CLI and force a 'device-remove <&lt;device-id>' for the device from VOLTHA (in other words, force VOLTHA to reconnect to ONOS), and then perform the authentication/dhcp steps again for the subscribers
-* [SEBA-393](https://jira.opencord.org/browse/SEBA-393)
-   With this issue, if an OLT device gets deleted and re-created many times within a short period of time (10+ times within an hour or so), VOLTHA may run into an issue where it's unable to save any information pertaining the OLT device such as its ports or any ONU devices connected to those ports. The workaround for this issue is to re-install VOLTHA and re-create the OLT device through NEM.
+These issues are described in more detail in below:
 
-Fixes to these issues will be addressed soon after the release.
+* [SEBA-670](https://jira.opencord.org/browse/SEBA-670)
+   This issue can be triggered by disable and subsequent re-enable of the ONU via NEM (or VOLTHA). In the SEBA pod, using the AT&T workflow, these actions are accompanied by the removal of subscriber flows upon disable of the ONU, and the reprogramming of eapol flows upon re-enable of the ONU. An irrecoverable error is seen in BAL (specifically bal_core_dist) which does not allow flows to be added to the OLT. As a result authentication of RG's fail.
+* [SEBA-775](https://jira.opencord.org/browse/SEBA-775)
+   This issue is closely related to SEBA-670. The fundamental issue is the removal of flows in the OLT which possibly leaves behind state in BAL 2.6 that does not allow the subsequent reprogramming of flows. It can be triggered by the disable/re-enable of ONUs (as in SEBA-670) or by the remove-subscriber followed by the add-subscriber calls (without change of ONU state). It can be triggered in systems with a single-ONU, as well as in multi-ONU cases. Empirically the issue is more easily reproduced in multi-ONU scenarios. It is observed with single gem ports as well as when multiple gem ports are used for a subscriber in the technology profile.
+* [SEBA-777](https://jira.opencord.org/browse/SEBA-777)
+   Due to the issues mentioned above, subscriber speed profiles cannot be updated reliably, as the update requires the removal of subscriber flows that point to a bandwidth meter, and the reprogramming of flows that point to a new meter.
+* [SEBA-776](https://jira.opencord.org/browse/SEBA-776)
+   This issue is seen sometimes with the use of multiple gem ports in a technology profile. Packet duplication appears to mirror the number of gem ports - using 4 gem ports results in 4 packets for every packet transmitted.
 
-Another minor issue that does not affect functionality is related to the state of an ONU on the VOLTHA CLI, after disable/re-enable of the ONU.
+Fixes to these issues will be addressed in a future release  as we upgrade the OLT software to BAL 3.0.
 
-```shell
-(voltha) devices
-Devices:
-+------------------+-------------------+------+------------------+------------------+-------------+-------------+----------------+----------------+------------------+------------------------+-------------------------+--------------------------+----------------------+------------------------------+
-|               id |              type | root |        parent_id |    serial_number | admin_state | oper_status | connect_status | parent_port_no |    host_and_port |                 reason | proxy_address.device_id | proxy_address.channel_id | proxy_address.onu_id | proxy_address.onu_session_id |
-+------------------+-------------------+------+------------------+------------------+-------------+-------------+----------------+----------------+------------------+------------------------+-------------------------+--------------------------+----------------------+------------------------------+
-| 0001a82d21249c28 |           openolt | True | 000100000a5a007a | 10.90.0.122:9191 |     ENABLED |      ACTIVE |      REACHABLE |                | 10.90.0.122:9191 |                        |                         |                          |                      |                              |
-| 00014f81e9f21dbb | brcm_openomci_onu | True | 0001a82d21249c28 |     ALPHe3d1cf9d |     ENABLED |      ACTIVE |      REACHABLE |      536870912 |                  | initial-mib-downloaded |        0001a82d21249c28 |                          |                    1 |                            1 |
-| 0001666321e17127 | brcm_openomci_onu | True | 0001a82d21249c28 |     ALPHe3d1ced5 |     ENABLED |      ACTIVE |      REACHABLE |      536870912 |                  | initial-mib-downloaded |        0001a82d21249c28 |                          |                    2 |                            2 |
-| 000175a511654437 | brcm_openomci_onu | True | 0001a82d21249c28 |     ISKT71e80080 |     ENABLED |      ACTIVE |      REACHABLE |      536870927 |                  |      omci-flows-pushed |        0001a82d21249c28 |                       15 |                    1 |                            1 |
-| 0001cb66a703449d | brcm_openomci_onu | True | 0001a82d21249c28 |     ALPHe3d1cfe3 |     ENABLED |      ACTIVE |      REACHABLE |      536870912 |                  | initial-mib-downloaded |        0001a82d21249c28 |                          |                    3 |                            3 |
-| 0001246c72a99ddd | brcm_openomci_onu | True | 0001a82d21249c28 |     ALPHe3d1cf8e |     ENABLED |      ACTIVE |      REACHABLE |      536870912 |                  | initial-mib-downloaded |        0001a82d21249c28 |                          |                    4 |                            4 |
-| 000192f54601ecb4 | brcm_openomci_onu | True | 0001a82d21249c28 |     ALPHe3d1cf70 |     ENABLED |      ACTIVE |      REACHABLE |      536870912 |                  | initial-mib-downloaded |        0001a82d21249c28 |                          |                    5 |                            5 |
-+------------------+-------------------+------+------------------+------------------+-------------+-------------+----------------+----------------+------------------+------------------------+-------------------------+--------------------------+----------------------+------------------------------+
-```
-
-In the `reason` column of the devices table, the state of the ONU devices are displayed. Normally after an ONU is disabled, and then re-enabled, it should display the `initial-mib-downloaded` state, indicating that the RG behind the ONU should be ready to re-authenticate (as per the AT&T workflow). However, in this release, the state is incorrectly displayed as `omci-flows-pushed`. This does not affect authentication, dhcp or the subscribers.
+In addition, OLT-reboot [SEBA-385](https://jira.opencord.org/browse/SEBA-385) can result in some ONUs not returning to ACTIVE state in VOLTHA.
diff --git a/profiles/seba/siab.md b/profiles/seba/siab.md
index 84f6eb3..d81a26c 100644
--- a/profiles/seba/siab.md
+++ b/profiles/seba/siab.md
@@ -31,11 +31,14 @@
 To build a SiaB that uses the released service versions specified in the Helm charts:
 
 ```bash
-make    # or 'make stable'
+make [stable] [NUM_OLTS=n] [NUM_ONUS_PER_OLT=m]    # `make` and `make stable` are the same
 ```
 
 > NOTE that `make` or `make stable` will install SEBA with the container versions that are
-> defined in the helm charts. If you want to install SEBA 1.0 please use: `make siab-1.0`
+> defined in the helm charts. If you want to install SEBA 2.0 please use: `make siab-2.0-alpha1`
+
+You can specify the number of OLTs (up to 4) and number of ONUs per OLT (up to 4) that you want to
+create.
 
 After a successful install, you will see the message:
 
@@ -57,60 +60,18 @@
 make run-tests
 ```
 
+Note that the tests currently assume a single OLT/ONU, so some tests will
+likely fail if you have configured multiple OLTs and ONUs.
+
 ### Quick start: Build SiaB using latest development code
 
 To build a SiaB that uses the latest development code:
 
 ```bash
-make latest [NUM_OLTS=n]
+make latest [NUM_OLTS=n] [NUM_ONUS_PER_OLT=m]
 ```
-
-With the `latest` target, you can specify the number of OLT/ONU/RG chains (up to 4) that you want to
-create.  Each OLT associates with a single ONU; adding multiple ONUs per OLT is future work.  If you
-specify more than one OLT you will see several OLT/ONU/RG containers when you run `kubectl -n voltha
-get pod`:
-
-```bash
-$ kubectl -n voltha get pod
-NAME                                        READY   STATUS    RESTARTS   AGE
-...
-olt0-774f9cb5f7-2z256                       1/1     Running   0          6m31s
-olt1-5f7c44f554-rkdbq                       1/1     Running   0          6m31s
-olt2-d949c6c9f-jcmgz                        1/1     Running   0          6m31s
-onu0-7db8455577-8n8ks                       1/1     Running   0          6m30s
-onu1-d64b87d79-kqmd5                        1/1     Running   0          6m31s
-onu2-5bb54b889-8g6w8                        1/1     Running   0          6m31s
-rg0-84b6654764-ztb4r                        1/1     Running   0          6m30s
-rg1-b8ccb5cfd-r2586                         1/1     Running   0          6m30s
-rg2-574c7d9f6-f5knh                         1/1     Running   0          6m30s
-...
-```
-
-Likewise `brctl show` will output:
-
-```bash
-$ brctl show
-bridge name bridge id           STP enabled   interfaces
-docker0     8000.02429b163213   no
-nni0        8000.e62fcf80f1ed   no            vethac65f4a9
-                                              vethcdad8664
-nni1        8000.06298b5e03f5   no            veth4c8048bf
-                                              vethdd2f29d1
-nni2        8000.aef29aa3595a   no            vetha7186d8a
-                                              vethd9610930
-pon0        8000.a24b3df352ac   no            veth1b61ec08
-                                              veth3f1056c1
-pon1        8000.824c4346fb80   no            veth631eb0a8
-                                              vethdae92661
-pon2        8000.6e30a2216b3c   no            veth66b840fa
-                                              veth72f061ad
-```
-
-Above there are three separate datapath chains: `rg0 -> pon0 -> onu0 -> olt0 -> nni0`, `rg1 -> pon1
--> onu1 -> olt1 -> nni1`, etc.  All of the `nniX` bridges connect to the agg switch in Mininet on
-different ports.   A subscriber is created for each RG `rgX` with S-tag of `222+X` and C-tag of
-`111`.  After `rgX` is authenticated, it will get an IP address on subnet `172.18.X.0/24` and ping
-`172.18.X.10` as its BNG.
+You can specify the number of OLTs (up to 4) and number of ONUs per OLT (up to 4) that you want to
+create.
 
 After a successful install, you will see the message:
 
@@ -126,11 +87,12 @@
 make run-tests-latest
 ```
 
-Note that the tests currently assume a single OLT, so some tests will likely fail if you have configured multiple OLTs.
+Note that the tests currently assume a single OLT/ONU, so some tests will
+likely fail if you have configured multiple OLTs and ONUs.
 
 ## Installation procedure
 
-The rest of this page describes a manual method for installing SEBA-in-a-Box.
+The rest of this page describes a manual method for installing SEBA-in-a-Box.  It also provides an overview of what is installed by each chart.
 
 ### Prerequisites
 
@@ -219,7 +181,7 @@
 Install the `cordctl` command line tool:
 
 ```bash
-export CORDCTL_VERSION=1.0.0
+export CORDCTL_VERSION=1.1.1
 export CORDCTL_PLATFORM=linux-amd64
 curl -L -o /tmp/cordctl "https://github.com/opencord/cordctl/releases/download/$CORDCTL_VERSION/cordctl-$CORDCTL_PLATFORM"
 sudo mv /tmp/cordctl /usr/local/bin/cordctl
@@ -255,6 +217,16 @@
 helm install -n onos onos
 ```
 
+You should see the following pods running:
+
+```bash
+$ kubectl get pod
+NAME                     READY   STATUS    RESTARTS   AGE
+cord-kafka-0             1/1     Running   1          14h
+cord-kafka-zookeeper-0   1/1     Running   0          14h
+onos-558445d9bc-c2cd5    2/2     Running   0          14h
+```
+
 ## Install VOLTHA charts
 
 Run these commands to install VOLTHA:
@@ -269,57 +241,83 @@
 kubectl get crd | grep etcd
 # After EtcdCluster CRD is in place
 helm dep up voltha
-helm install -n voltha -f configs/seba-ponsim.yaml voltha
+helm install -n voltha voltha  --set etcd-cluster.clusterSize=1
 ```
 
 **Before proceeding**
 
-Run: `kubectl get pod|grep etcd-cluster`
+Run: `kubectl get pod -l app=etcd`
 
 You should see the etcd-cluster pod up and running.
 
 ```bash
-$ kubectl get pod|grep etcd-cluster
-etcd-cluster-q9zhrwvllh                                       1/1       Running     0          20m
+$ kubectl get pod -l app=etcd
+NAME                      READY   STATUS    RESTARTS   AGE
+etcd-cluster-jcjk2x97w6   1/1     Running   0          14h
 ```
 
+You should see the VOLTHA pods created:
+
+```bash
+$ kubectl get pod -n voltha
+NAME                                        READY   STATUS    RESTARTS   AGE
+default-http-backend-798fb4f44c-fb696       1/1     Running   0          14h
+freeradius-754bc76b5-22lcm                  1/1     Running   0          14h
+netconf-66b767bddc-hbsgr                    1/1     Running   0          14h
+nginx-ingress-controller-5fc7b87c86-bd55x   1/1     Running   0          14h
+ofagent-556cd6c978-lknd4                    1/1     Running   0          14h
+vcli-67c996f87d-vw4pk                       1/1     Running   0          14h
+vcore-0                                     1/1     Running   0          14h
+voltha-6f8d7bf7b-4gkkj                      1/1     Running   1          14h
+```
+
+
 ## Install Ponsim charts
 
 Run these commands to install Ponsim (after installing VOLTHA):
 
 ```bash
 cd ~/cord/helm-charts
-helm install -n ponnet ponnet
+NUM_OLTS=1          # can be between 1 and 4
+NUM_ONUS_PER_OLT=1  # can be between 1 and 4
+helm install -n ponnet ponnet --set numOlts=$(NUM_OLTS) --set numOnus=$(NUM_ONUS_PER_OLT)
 # Wait for CNI changes
 ~/cord/helm-charts/scripts/wait_for_pods.sh kube-system
-helm install -n ponsimv2 ponsimv2
+helm install -n ponsimv2 ponsimv2 --set numOlts=$(NUM_OLTS) --set numOnus=$(NUM_ONUS_PER_OLT)
 # Iptables setup
 sudo iptables -P FORWARD ACCEPT
 ```
 
+Setting `numOlts` and `numOnus` is optional; the default is 1.
+
 **Before proceeding**
 
-Run: `kubectl -n voltha get pod`
+Run: `kubectl -n voltha get pod -l app=ponsim`
 
-Make sure that all of the pods in the voltha namespace are in Running state.
 
 ```bash
-$ kubectl -n voltha get pod
-NAME                                        READY     STATUS    RESTARTS   AGE
-default-http-backend-846b65fb5f-rklfb       1/1       Running   0          6h
-freeradius-765c9b486c-6qs7t                 1/1       Running   0          6h
-netconf-7d7c96c88b-29cv2                    1/1       Running   0          6h
-nginx-ingress-controller-6db99757f7-d9cpk   1/1       Running   0          6h
-ofagent-7d7b854cd4-fx6gq                    1/1       Running   0          6h
-olt0-5455744678-hqbwh                       1/1       Running   0          6h
-onu0-5df655b9c9-prfjz                       1/1       Running   0          6h
-rg0-75845c54bc-fjgrf                        1/1       Running   0          6h
-vcli-6875544cf-rfdrh                        1/1       Running   0          6h
-vcore-0                                     1/1       Running   0          6h
-voltha-546cb8fd7f-5n9x4                     1/1       Running   3          6h
+$ kubectl -n voltha get pod -l app=ponsim
+NAME                      READY   STATUS    RESTARTS   AGE
+olt0-f4744dc5-xdrjb       1/1     Running   0          15h
+onu0-0-6bf67bf6c6-76gn7   1/1     Running   0          15h
+rg0-0-7b9d5cdb5c-jc8p5    1/1     Running   0          14h
 ```
 
-If you see the olt pod in CrashLoopBackOff state, try deleting (`helm delete --purge`) and reinstalling the ponsimv2 chart.
+Make sure that all of the pods in the voltha namespace are in Running state.
+If you see the `olt0` pod in CrashLoopBackOff state, try deleting (`helm delete --purge`) and reinstalling the ponsimv2 chart.
+
+If you install more than one OLT/ONU then you will see more containers above.  The naming convention:
+```
+1st OLT - olt0-xxx
+2nd OLT - olt1-xxx
+1st ONU attached to 1st OLT - onu0-0-xx (onu<olt>-<onu>)
+2nd ONU attached to 1st OLT - onu0-1-xx
+1st ONU attached to 2nd OLT - onu1-0-xx
+2nd ONU attached to 2nd OLT - onu1-1-xx
+RG follows the same naming logic as ONU (rg0-0-xx, rg0-1-xx, rg1-0-xx, rg1-1-xx)
+Linux bridges interconnecting ONU and RG follow the same naming logic as ONU (pon0.0, pon0.1 ...)
+Linux bridges interconnecting OLT and Mininet follow same naming logic as OLT (nni0, nni1, ...)
+```
 
 Run `http GET http://127.0.0.1:30125/health|jq '.state'`.  It should return `"HEALTHY"`:
 
@@ -328,6 +326,7 @@
 "HEALTHY"
 ```
 
+
 ## Install NEM charts
 
 Run these commands:
@@ -360,26 +359,26 @@
 Run these commands:
 
 ```bash
-helm install -n ponsim-pod xos-profiles/ponsim-pod
+helm install -n ponsim-pod xos-profiles/ponsim-pod --set numOlts=$(NUM_OLTS) --set numOnus=$(NUM_ONUS_PER_OLT)
 ~/cord/helm-charts/scripts/wait_for_pods.sh
 ```
 
+The TOSCA creates a subscriber for each RG `rg<olt>-<onu>` with S-tag of `222+<olt>` and C-tag of `111+<onu>`.
+
 **Before proceeding**
 
-Log into the XOS GUI at `http://<hostname>:30001` (credentials: admin@opencord.org / letmein).  You should see an AttWorkflowDriver Service Instance with authentication state AWAITING.
-
-To run the check from the command line:
+Log into the XOS GUI at `http://<hostname>:30001` (credentials: admin@opencord.org / letmein).  You should see an AttWorkflowDriver Service Instance with authentication state AWAITING.  To check this from the command line:
 
 ```bash
 cordctl model list AttWorkflowDriverServiceInstance -f "authentication_state=AWAITING"
 ```
 
-This will show only the AttWorkflowDriver Service Instances in AWAITING state.  Wait until you see something like:
+This will show only the AttWorkflowDriver Service Instances in AWAITING state.  Wait until you see a line for each ONU:
 
 ```bash
 $ cordctl model list AttWorkflowDriverServiceInstance -f "authentication_state=AWAITING"
-OWNER_ID    SERIAL_NUMBER    OF_DPID                UNI_PORT_ID    STATUS_MESSAGE                                      ID    NAME
-2           PSMO12345678     of:0000aabbccddeeff    128            ONU has been validated - Awaiting Authentication    56
+ID    NAME    OF_DPID                OWNER_ID    SERIAL_NUMBER    STATUS_MESSAGE                                      UNI_PORT_ID
+56            of:0000d0d3e158fede    2           PSMO00000000     ONU has been validated - Awaiting Authentication    128
 ```
 
 ## Install Mininet
@@ -400,7 +399,7 @@
 
 ```bash
 cd ~/cord/helm-charts
-helm install -n mininet mininet
+helm install -n mininet mininet --set numOlts=$(NUM_OLTS) --set numOnus=$(NUM_ONUS_PER_OLT)
 ~/cord/helm-charts/scripts/wait_for_pods.sh
 ```
 
@@ -416,30 +415,32 @@
 
 Run: `brctl show`
 
-You should see two interfaces on each of the pon0 and nni0 Linux bridges.
+You should see two interfaces on the `ponX.Y` and `nniX` Linux bridges.
 
 ```bash
 $ brctl show
 bridge name     bridge id               STP enabled     interfaces
 docker0         8000.02429d07b4e2       no
-pon0            8000.bec4912b1f6a       no              veth25c1f40b
+pon0.0          8000.bec4912b1f6a       no              veth25c1f40b
                                                         veth2a4c914f
 nni0            8000.0a580a170001       no              veth3cc603fe
                                                         vethb6820963
 ```
 
-## Enable pon0 to forward EAPOL packets
+You will see more bridges if you've configured multiple OLTs and ONUs.  All of the `nniX` Linux bridges connect to the agg switch in Mininet on different ports.
 
-This is necessary to enable the RG to authenticate.  Run these commands:
+## Enable pon bridges to forward EAPOL packets
+
+This is necessary to enable the RG to authenticate:
 
 ```bash
-echo 8 > /tmp/pon0_group_fwd_mask
-sudo cp /tmp/pon0_group_fwd_mask /sys/class/net/pon0/bridge/group_fwd_mask
+echo 8 > /tmp/group_fwd_mask
+for BRIDGE in /sys/class/net/pon*; do sudo cp /tmp/group_fwd_mask $BRIDGE/bridge/group_fwd_mask; done
 ```
 
 ## ONOS customizations
 
-Right now it’s necessary to install some custom configuration to ONOS directly.  Run this command:
+It’s necessary to install some custom configuration to ONOS directly.  Run this command:
 
 ```bash
 http -a karaf:karaf POST \
@@ -448,7 +449,7 @@
 
 The above command instructs the ONU to exchange untagged packets with the RG, rather than packets tagged with VLAN 0.
 
-At this point the system should be fully installed and functional.  
+At this point the system should be fully installed and functional.
 
 ## Validating the install
 
@@ -457,10 +458,11 @@
 Enter the RG pod in the voltha namespace:
 
 ```bash
-RG_POD=$( kubectl -n voltha get pod -l "app=rg0" -o jsonpath='{.items[0].metadata.name}' )
+RG_POD=$( kubectl -n voltha get pod | grep rg0-0 | awk '{print $1}' )
 kubectl -n voltha exec -ti $RG_POD bash
 ```
 
+If you built SiaB with multiple OLTs and ONUs, you can choose any RG to authenticate.
 Inside the pod, run this command:
 
 ```bash
@@ -484,8 +486,7 @@
 
 **Before proceeding**
 
-In the XOS GUI, the AttDriverWorkflow Service Instance should now be in APPROVED state.  
-You can check for this on the command line by running:
+In the XOS GUI, the AttDriverWorkflow Service Instance should now be in APPROVED state.  You can check for this on the command line by running:
 
 ```bash
 cordctl model list AttWorkflowDriverServiceInstance -f "authentication_state=APPROVED"
@@ -495,12 +496,11 @@
 
 ```bash
 $ cordctl model list AttWorkflowDriverServiceInstance -f "authentication_state=APPROVED"
-OF_DPID                UNI_PORT_ID    STATUS_MESSAGE                                       ID    NAME    OWNER_ID    SERIAL_NUMBER
-of:0000aabbccddeeff    128            ONU has been validated - Authentication succeeded    56            2           PSMO12345678
+ID    NAME    OF_DPID                OWNER_ID    SERIAL_NUMBER    STATUS_MESSAGE                                       UNI_PORT_ID
+56            of:0000d0d3e158fede    2           PSMO00000000     ONU has been validated - Authentication succeeded    128
 ```
 
-The FabricCrossconnect Service Instance should have a check in the Backend status column in the GUI.
-You can check for this on the command line by running:
+The FabricCrossconnect Service Instance should have a check in the Backend status column in the GUI.  You can check for this on the command line by running:
 
 ```bash
 cordctl model list FabricCrossconnectServiceInstance -f 'backend_status=OK'
@@ -510,8 +510,8 @@
 
 ```bash
 $ cordctl model list FabricCrossconnectServiceInstance -f 'backend_status=OK'
-SWITCH_DATAPATH_ID     SOURCE_PORT    ID    NAME    OWNER_ID    S_TAG
-of:0000000000000001    2              59            5           222
+ID    NAME    OWNER_ID    S_TAG    SOURCE_PORT    SWITCH_DATAPATH_ID
+59            4           222      2              of:0000000000000001
 ```
 
 ### Obtain an IP address for the RG
@@ -540,7 +540,7 @@
 
 **Before proceeding**
 
-Make sure that eth0 inside the RG container has an IP address on the 172.18.0.0/24 subnet:
+`rg<olt>-<onu>` will get an IP address on subnet `172.18+<olt>.<onu>.0/24`.  Make sure that eth0 inside the RG container has an IP address on the proper subnet:
 
 ```bash
 $ ifconfig eth0
@@ -555,7 +555,7 @@
 
 ### Ping the emulated BNG
 
-The emulated BNG has an IP address of 172.18.0.10.  After successfully running dhclient you should be able to ping it from the RG.
+`rg<olt>-<onu>` pings `172.18+<olt>.<onu>.10` as its BNG.
 
 ```bash
 $ ping -c 3 172.18.0.10
diff --git a/profiles/seba/workflows/att-install.md b/profiles/seba/workflows/att-install.md
index e1182de..3a80da0 100644
--- a/profiles/seba/workflows/att-install.md
+++ b/profiles/seba/workflows/att-install.md
@@ -5,7 +5,7 @@
 ## Install the `att-workflow` chart
 
 ```shell
-helm install -n att-workflow cord/att-workflow --version=1.0.2
+helm install -n att-workflow cord/att-workflow --version=1.2.4
 ```
 
 > NOTE: if you have installed the `cord-platform` chart as a sum of its components,
diff --git a/quickstart/seba_quickstart.md b/quickstart/seba_quickstart.md
index 10a9cc7..1aa43c0 100644
--- a/quickstart/seba_quickstart.md
+++ b/quickstart/seba_quickstart.md
@@ -6,26 +6,30 @@
 
 ## Install components as a whole
 
+The commands below will bring up the SEBA 2.0-alpha release
+
 ```shell
 # Add the CORD repository and update indexes
 helm repo add cord https://charts.opencord.org
 helm repo update
 
 # Install the CORD platform
-helm install -n cord-platform --version 6.1.0 cord/cord-platform
+helm install -n cord-platform --version 7.0.0 cord/cord-platform
 
 # Wait until 3 etcd CRDs are present in Kubernetes
 kubectl get crd | grep -i etcd | wc -l
 
 # Install the SEBA profile
-helm install -n seba --version 1.0.0 cord/seba
+helm install -n seba --version 2.0.0-alpha1 cord/seba
 
 # Install the AT&T workflow
-helm install -n att-workflow --version 1.0.2 cord/att-workflow
+helm install -n att-workflow --version 1.2.4 cord/att-workflow
 ```
 
 ## Alternatively, install as separate components
 
+The commands below will bring up SEBA using the latest released versions of the Helm charts.  The resulting system should work but it may not correspond to an official SEBA release.
+
 ```shell
 # Add the official Kubernetes incubator repostiory (for Kafka) and update the indexes
 helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator
@@ -63,12 +67,12 @@
 kubectl get crd | grep -i etcd | wc -l
 
 # Install the rest of the SEBA profile components
-helm install -n voltha cord/voltha
+helm install -n voltha --version 1.0.6 cord/voltha     # Install VOLTHA 1.7.0
 helm install -n seba-service cord/seba-services
 helm install -n base-kubernetes cord/base-kubernetes
 
 # Install the AT&T workflow
-helm install -n att-workflow --version 1.0.2 cord/att-workflow
+helm install -n att-workflow cord/att-workflow
 ```
 
 ## Verify your installation and next steps