[VOL-4482] openonu-go-adapter: test reconcilement with MDS mismatch

Preconditions are:
https://gerrit.opencord.org/c/voltha-openolt-adapter/+/30389
https://gerrit.opencord.org/c/olt/+/30307 (comming up in a new ONOS release)

Change-Id: I591701f4e0b9e7e48eb76b6aa1bf8a4e56492f1c
diff --git a/Makefile b/Makefile
index 3c1b58e..630d1c4 100755
--- a/Makefile
+++ b/Makefile
@@ -54,6 +54,7 @@
 ROBOT_SANITY_MULTI_UNI_SINGLE_PON_FILE     ?= $(ROOT_DIR)/tests/data/bbsim-kind-multi-uni.yaml
 ROBOT_SANITY_MULTI_UNI_MULTIPLE_OLT_FILE     ?= $(ROOT_DIR)/tests/data/bbsim-kind-multi-uni-2OLTx2ONUx2PON.yaml
 ROBOT_SANITY_TT_MULTI_UNI_SINGLE_PON_FILE    ?= $(ROOT_DIR)/tests/data/bbsim-kind-multi-uni-tt.yaml
+ROBOT_SANITY_TT_MULTI_UNI_MULTIPLE_OLT_FILE     ?= $(ROOT_DIR)/tests/data/bbsim-kind-multi-uni-2OLTx2ONUx2PON-tt.yaml
 
 # for backwards compatibility
 sanity-kind: sanity-single-kind
@@ -188,6 +189,11 @@
 reconcile-openonu-go-adapter-test-tt: ROBOT_CONFIG_FILE := $(ROBOT_SANITY_TT_SINGLE_PON_FILE)
 reconcile-openonu-go-adapter-test-tt: reconcile-openonu-go-adapter-tests-tt
 
+# target to invoke reconcile tests with openonu go adapter at single ONU multi UNI with TT workflow
+reconcile-openonu-go-adapter-multi-uni-test-tt: ROBOT_CONFIG_FILE := $(ROBOT_SANITY_TT_MULTI_UNI_SINGLE_PON_FILE)
+reconcile-openonu-go-adapter-multi-uni-test-tt: ROBOT_MISC_ARGS += -v unitag_sub:True
+reconcile-openonu-go-adapter-multi-uni-test-tt: reconcile-openonu-go-adapter-tests-tt
+
 # target to invoke reconcile tests with openonu go adapter with multiple OLTs scenario with ATT workflow (default workflow)
 reconcile-openonu-go-adapter-multi-olt-test-att: ROBOT_CONFIG_FILE := $(ROBOT_SANITY_MULTIPLE_OLT_FILE)
 reconcile-openonu-go-adapter-multi-olt-test-att: reconcile-openonu-go-adapter-tests-att
@@ -200,6 +206,11 @@
 reconcile-openonu-go-adapter-multi-olt-test-tt: ROBOT_CONFIG_FILE := $(ROBOT_SANITY_TT_MULTIPLE_OLT_FILE)
 reconcile-openonu-go-adapter-multi-olt-test-tt: reconcile-openonu-go-adapter-tests-tt
 
+# target to invoke reconcile tests with openonu go adapter with multiple OLTs multi UNI scenario with TT workflow
+reconcile-openonu-go-adapter-multi-olt-multi-uni-test-tt: ROBOT_CONFIG_FILE := $(ROBOT_SANITY_TT_MULTI_UNI_MULTIPLE_OLT_FILE)
+reconcile-openonu-go-adapter-multi-olt-multi-uni-test-tt: ROBOT_MISC_ARGS += -v unitag_sub:True
+reconcile-openonu-go-adapter-multi-olt-multi-uni-test-tt: reconcile-openonu-go-adapter-tests-tt
+
 # target to invoke reconcile tests with openonu go adapter with ATT workflow
 reconcile-openonu-go-adapter-tests-att: ROBOT_MISC_ARGS += -v workflow:ATT
 reconcile-openonu-go-adapter-tests-att: reconcile-openonu-go-adapter-tests
diff --git a/libraries/bbsim.robot b/libraries/bbsim.robot
index bc13d4d..049385c 100755
--- a/libraries/bbsim.robot
+++ b/libraries/bbsim.robot
@@ -82,6 +82,15 @@
     ...    bbsimctl onu shutdown ${onu}
     Should Contain    ${result}    successfully    msg=Can not shutdown ${onu}    values=False
 
+Set Wrong MDS Counter ONU
+    [Documentation]    This keyword sets wrong MDS counter for onu device.
+    [Arguments]    ${namespace}    ${bbsim_pod_name}    ${onu}
+    ${result}    ${rc}=    Exec Pod And Return Output And RC    ${namespace}    ${bbsim_pod_name}
+    ...    bbsimctl onu invalidate_mds ${onu}
+    Should Be Equal as Integers    ${rc}    0
+    Should Contain    ${result}    MDS counter of ONU    msg=Can not invalidate MDS counter ${onu}    values=False
+    Should Contain    ${result}    , set to    msg=Can not invalidate MDS counter ${onu}    values=False
+
 Get ONUs List
     [Documentation]    Fetches ONUs via BBSimctl
     [Arguments]    ${namespace}    ${bbsim_pod_name}
diff --git a/libraries/onu_utilities.robot b/libraries/onu_utilities.robot
index 83d50fd..f338699 100755
--- a/libraries/onu_utilities.robot
+++ b/libraries/onu_utilities.robot
@@ -15,6 +15,7 @@
 *** Settings ***
 Documentation     Library for various openonu-go-adpter utilities
 Library           grpc_robot.VolthaTools     WITH NAME    volthatools
+Resource          ./bbsim.robot
 
 
 *** Keywords ***
@@ -70,10 +71,16 @@
 Power On ONU Device per OLT
     [Documentation]    This keyword turns on the power for all onus.
     [Arguments]    ${namespace}    ${olt_serial_number}    ${bbsim_pod}
+    @{onu_list}=    Create List
     FOR    ${I}    IN RANGE    0    ${num_all_onus}
         ${src}=    Set Variable    ${hosts.src[${I}]}
         Continue For Loop If    "${olt_serial_number}"!="${src['olt']}"
-        Power On ONU    ${namespace}    ${bbsim_pod}    ${src['onu']}
+        ${sn}=     Set Variable    ${src['onu']}
+        # make sure all actions are done only once per onu
+        ${onu_id}=    Get Index From List    ${onu_list}   ${sn}
+        Continue For Loop If    -1 != ${onu_id}
+        Append To List    ${onu_list}    ${sn}
+        Power On ONU    ${namespace}    ${bbsim_pod}    ${sn}
     END
 
 Power Off ONU Device
@@ -89,10 +96,41 @@
 Power Off ONU Device per OLT
     [Documentation]    This keyword turns off the power for all onus per olt.
     [Arguments]    ${namespace}    ${olt_serial_number}    ${bbsim_pod}
+    @{onu_list}=    Create List
     FOR    ${I}    IN RANGE    0    ${num_all_onus}
         ${src}=    Set Variable    ${hosts.src[${I}]}
         Continue For Loop If    "${olt_serial_number}"!="${src['olt']}"
-        Power Off ONU    ${namespace}    ${bbsim_pod}    ${src['onu']}
+        ${sn}=     Set Variable    ${src['onu']}
+        # make sure all actions are done only once per onu
+        ${onu_id}=    Get Index From List    ${onu_list}   ${sn}
+        Continue For Loop If    -1 != ${onu_id}
+        Append To List    ${onu_list}    ${sn}
+        Power Off ONU    ${namespace}    ${bbsim_pod}    ${sn}
+    END
+
+Set Wrong MDS Counter All ONUs
+    [Documentation]    This keyword sets wrong MDS counter for all onus.
+    [Arguments]    ${namespace}
+    FOR    ${J}    IN RANGE    0    ${num_olts}
+        ${olt_serial_number}=    Set Variable    ${list_olts}[${J}][sn]
+        ${bbsim}=    Catenate    SEPARATOR=    bbsim    ${J}
+        ${bbsim_pod}=    Get Pod Name By Label    ${namespace}    release     ${bbsim}
+        Set Wrong MDS Counter per OLT    ${namespace}   ${olt_serial_number}    ${bbsim_pod}
+    END
+
+Set Wrong MDS Counter per OLT
+    [Documentation]    This keyword sets wrong MDS counter for all onus per olt.
+    [Arguments]    ${namespace}    ${olt_serial_number}    ${bbsim_pod}
+    @{onu_list}=    Create List
+    FOR    ${I}    IN RANGE    0    ${num_all_onus}
+        ${src}=    Set Variable    ${hosts.src[${I}]}
+        Continue For Loop If    "${olt_serial_number}"!="${src['olt']}"
+        ${sn}=     Set Variable    ${src['onu']}
+        # make sure all actions are done only once per onu
+        ${onu_id}=    Get Index From List    ${onu_list}   ${sn}
+        Continue For Loop If    -1 != ${onu_id}
+        Append To List    ${onu_list}    ${sn}
+        Set Wrong MDS Counter ONU    ${namespace}    ${bbsim_pod}    ${sn}
     END
 
 Current State Test
@@ -131,7 +169,7 @@
 Reconcile Onu Adapter
     [Documentation]     Restarts the openonu adapter and waits for reconciling is finished and expected oper-state is reached
     [Arguments]     ${namespace}    ${usekill2restart}    ${oper_status}    ${olt_to_be_deleted_sn}=${EMPTY}
-    ...             ${flow_delete_params}=&{EMPTY}
+    ...             ${flow_delete_params}=&{EMPTY}    ${wrong_MDS_counter}=False
     # get last ready timestamp of openonu adapter
     ${previous_ready_ts}=    Get Pod Ready Timestamp by Label    ${namespace}    app    adapter-open-onu
     # restart OpenONU adapter
@@ -146,9 +184,10 @@
     ...    Get OLTDeviceID From OLT List    ${olt_to_be_deleted_sn}
     Run Keyword If  "${olt_to_be_deleted_sn}"!="${EMPTY}"    Delete Device    ${olt_to_be_deleted_device_id}
     # remove flows if params passed for it (special feature II)
-    Run Keyword If    ${flow_delete_params}!=&{EMPTY}    Wait Until Keyword Succeeds    ${timeout}    2s
-    ...    Execute ONOS CLI Command use single connection    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}
-    ...    volt-remove-subscriber-access ${flow_delete_params['of_id']} ${flow_delete_params['onu_port']}
+    Run Keyword If    ${flow_delete_params}!=&{EMPTY}    Remove Flows Conditional    ${flow_delete_params['unitag']}
+    ...    ${flow_delete_params['onu_sn']}    ${flow_delete_params['of_id']}    ${flow_delete_params['onu_port']}
+    # Set wrong MDS counter (for all ONUs) if required (special feature III)
+    Run Keyword If    ${wrong_MDS_counter}    Set Wrong MDS Counter All ONUs   ${namespace}
     # wait for the reconcile to complete
     # - we check that communication to openonu-adapter is established again
     # - we check that all ONUs leave reconcile state by validate a simple voltctl request will not responds with error
@@ -184,6 +223,26 @@
         Should Be True    ${rc}==0    Onu ${src['onu']} (${onu_device_id}) still not accessible.
     END
 
+Remove Flows Conditional
+    [Documentation]    This keyword removes the flows (subscriber) conditional depending on unitag.
+    ...                In case of unitagsub==False (normal case) single subscriber remove will be executed.
+    ...                In case of multi uni each uni id will be deleted.
+    [Arguments]        ${unitagsub}    ${onu_sn}    ${of_id}    ${onu_port}
+    # first handle 'normal' case without uni ports
+    Run Keyword If    ${unitagsub}==False    Wait Until Keyword Succeeds    ${timeout}    2s
+    ...    Execute ONOS CLI Command use single connection    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}
+    ...    volt-remove-subscriber-access ${of_id} ${onu_port}
+    Return From Keyword If    ${unitagsub}==False
+    # handle multi uni case
+    FOR    ${I}    IN RANGE    0    ${num_all_onus}
+        ${src}=    Set Variable    ${hosts.src[${I}]}
+        Continue For Loop If    "${onu_sn}"!="${src['onu']}"
+        ${add_sub_cmd}=   Catenate    volt-remove-subscriber-unitag --tpId ${src['tp_id']} --sTag ${src['s_tag']}
+        ...    --cTag ${src['c_tag']} ${src['onu']}-${src['uni_id']}
+        Wait Until Keyword Succeeds    ${timeout}    2s    Execute ONOS CLI Command use single connection
+        ...    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    ${add_sub_cmd}
+    END
+
 Log Ports
     [Documentation]    This keyword logs all port data available in ONOS of first port per ONU
     [Arguments]    ${onlyenabled}=False
@@ -275,31 +334,32 @@
 
 Set Tech Profile
     [Documentation]    This keyword sets the passed TechProfile for the test
-    [Arguments]    ${TechProfile}    ${namespace}=default
-    Log To Console    \nTechProfile:${TechProfile}
+    [Arguments]    ${TechProfile}    ${namespace}=default    ${tp_id}=64
+    Log To Console    \nSet TechProfile:${TechProfile} tp_id:${tp_id}
     ${podname}=    Set Variable    etcd
     ${label}=    Set Variable    app.kubernetes.io/name=${podname}
     ${src}=    Set Variable    ${data_dir}/TechProfile-${TechProfile}.json
     ${dest}=    Set Variable    /tmp/flexpod.json
     ${command}    Catenate
-    ...    /bin/sh -c 'cat    ${dest} | ETCDCTL_API=3 etcdctl put service/voltha/technology_profiles/XGS-PON/64'
+    ...    /bin/sh -c 'cat    ${dest} | ETCDCTL_API=3 etcdctl put service/voltha/technology_profiles/XGS-PON/${tp_id}'
     Copy File To Pod    ${namespace}    ${label}    ${src}    ${dest}
     Exec Pod In Kube    ${namespace}    ${podname}    ${command}
     ${commandget}    Catenate
-    ...    /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/voltha/technology_profiles/XGS-PON/64'
+    ...    /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/voltha/technology_profiles/XGS-PON/${tp_id}'
     ${result}=    Exec Pod In Kube    ${namespace}    ${podname}    ${commandget}
     Should Not Be Empty    ${result}    No Tech Profile stored in etcd!
 
 Remove Tech Profile
     [Documentation]    This keyword removes TechProfile
-    [Arguments]    ${namespace}=default
-    Log To Console    \nTechProfile:${TechProfile}
+    [Arguments]    ${namespace}=default    ${tp_id}=64
+    Run Keyword If    "${TechProfile}"!="${EMPTY}"    Log To Console    \nRemove TechProfile:${TechProfile} tp_id:${tp_id}
+    ...    ELSE    Log To Console    \nRemove Tech Profile template at tp_id:${tp_id}
     ${podname}=    Set Variable    etcd
     ${command}    Catenate
-    ...    /bin/sh -c 'ETCDCTL_API=3 etcdctl del --prefix service/voltha/technology_profiles/XGS-PON/64'
+    ...    /bin/sh -c 'ETCDCTL_API=3 etcdctl del --prefix service/voltha/technology_profiles/XGS-PON/${tp_id}'
     Exec Pod In Kube    ${namespace}    ${podname}    ${command}
     ${commandget}    Catenate
-    ...    /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/voltha/technology_profiles/XGS-PON/64'
+    ...    /bin/sh -c 'ETCDCTL_API=3 etcdctl get --prefix service/voltha/technology_profiles/XGS-PON/${tp_id}'
     Exec Pod In Kube    ${namespace}    ${podname}    ${commandget}
 
 Do Onu Subscriber Add Per OLT
@@ -398,6 +458,7 @@
     ...                It checks checks presence/absence of tech profiles and flows depending on must_exist.
     ...                The values/content of tech profiles and flows will be not validated!
     [Arguments]    ${onu_sn}    ${namespace}=default    ${defaultkvstoreprefix}=voltha_voltha    ${must_exist}=True
+    ...            ${check_tcont_map_empty}=False
     ${kvstoreprefix}=    Get Kv Store Prefix    ${defaultkvstoreprefix}
     ${etcddata}=    Get ONU Go Adapter ETCD Data    namespace=${namespace}    defaultkvstoreprefix=${kvstoreprefix}
     #prepare result for json convert
@@ -411,6 +472,7 @@
         ${uni_config}=    Get From Dictionary    ${value}     uni_config
         ${uni_config}=    Set Variable    ${uni_config[0]}
         ${sn}=    Get From Dictionary    ${value}    serial_number
+        ${tcont_map}=    Get From Dictionary    ${value}     tcont_map
         ${matched}=    Set Variable If    '${sn}'=='${onu_sn}'    True    False
         Exit For Loop If    ${matched}
     END
@@ -451,6 +513,8 @@
     END
     Run Keyword If    ${must_exist}    Should Not Be Empty    ${flow_params}
     ...               ELSE             Should Be Empty        ${flow_params}
+    Run Keyword If    ${check_tcont_map_empty}    Log    ${tcont_map}
+    Run Keyword If    ${check_tcont_map_empty}    Should Be Empty    ${tcont_map}
 
 Validate Onu Data In Etcd
     [Documentation]    This keyword validates openonu-go-adapter Data stored in etcd.
@@ -685,12 +749,14 @@
 
 Wait for all ONU Ports in ONOS Disabled
     [Documentation]    Waits untill a all ONU ports are disabled in all ONOS
-    [Arguments]    ${host}    ${port}
+    [Arguments]    ${host}    ${port}    ${unitag}=False
     FOR    ${I}    IN RANGE    0    ${num_all_onus}
         ${src}=    Set Variable    ${hosts.src[${I}]}
         ${of_id}=    Wait Until Keyword Succeeds    ${timeout}    15s    Validate OLT Device in ONOS
         ...    ${src['olt']}
-       ${onu_port}=    Wait Until Keyword Succeeds    ${timeout}    2s    Get ONU Port in ONOS    ${src['onu']}    ${of_id}
+        ${onu_uni_id}=    Set Variable If    ${unitag}    ${src['uni_id']}    1
+        ${onu_port}=    Wait Until Keyword Succeeds    ${timeout}    2s    Get ONU Port in ONOS    ${src['onu']}    ${of_id}
+        ...    ${onu_uni_id}
         Wait Until Keyword Succeeds    ${timeout}    2s    Assert ONU Port Is Disabled    ${host}    ${port}    ${of_id}
         ...    ${onu_port}
     END
diff --git a/tests/data/bbsim-kind-multi-uni-2OLTx2ONUx2PON-tt.yaml b/tests/data/bbsim-kind-multi-uni-2OLTx2ONUx2PON-tt.yaml
new file mode 100755
index 0000000..6bd7f85
--- /dev/null
+++ b/tests/data/bbsim-kind-multi-uni-2OLTx2ONUx2PON-tt.yaml
@@ -0,0 +1,1067 @@
+---
+
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Automated deployment configuration for systems running BBSim
+
+# Change default values in tests
+workflow: TT
+has_dataplane: false
+external_libs: false
+teardown_device: true
+ONOS_REST_PORT: 8181
+ONOS_SSH_PORT: 8101
+OLT_PORT: 50060
+
+nodes:
+  -
+    ip: '127.0.0.1'
+
+olts:
+  -
+    ip: bbsim0.voltha.svc
+    serial: BBSIM_OLT_10
+  -
+    ip: bbsim1.voltha.svc
+    serial: BBSIM_OLT_11
+
+hosts:
+  src:
+    - onu: 'BBSM000a0001'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '900'
+      s_tag: '900'
+      service_type: 'hsia'
+      uni_id: 1
+      tp_id: '64'
+    - onu: 'BBSM000a0001'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 1
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000a0001'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 1
+      tp_id: '66'
+    - onu: 'BBSM000a0001'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 1
+      tp_id: '66'
+    - onu: 'BBSM000a0001'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '901'
+      s_tag: '900'
+      service_type: 'hsia'
+      uni_id: 2
+      tp_id: '64'
+    - onu: 'BBSM000a0001'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 2
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000a0001'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 2
+      tp_id: '66'
+    - onu: 'BBSM000a0001'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 2
+      tp_id: '66'
+    - onu: 'BBSM000a0001'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '902'
+      s_tag: '900'
+      service_type: 'hsia'
+      uni_id: 3
+      tp_id: '64'
+    - onu: 'BBSM000a0001'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 3
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000a0001'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 3
+      tp_id: '66'
+    - onu: 'BBSM000a0001'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 3
+      tp_id: '66'
+    - onu: 'BBSM000a0001'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '903'
+      s_tag: '900'
+      service_type: 'hsia'
+      uni_id: 4
+      tp_id: '64'
+    - onu: 'BBSM000a0001'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 4
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000a0001'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 4
+      tp_id: '66'
+    - onu: 'BBSM000a0001'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 4
+      tp_id: '66'
+    - onu: 'BBSM000a0002'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '904'
+      s_tag: '900'
+      service_type: 'hsia'
+      uni_id: 1
+      tp_id: '64'
+    - onu: 'BBSM000a0002'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 1
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000a0002'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 1
+      tp_id: '66'
+    - onu: 'BBSM000a0002'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 1
+      tp_id: '66'
+    - onu: 'BBSM000a0002'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '905'
+      s_tag: '900'
+      service_type: 'hsia'
+      uni_id: 2
+      tp_id: '64'
+    - onu: 'BBSM000a0002'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 2
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000a0002'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 2
+      tp_id: '66'
+    - onu: 'BBSM000a0002'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 2
+      tp_id: '66'
+    - onu: 'BBSM000a0002'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '906'
+      s_tag: '900'
+      service_type: 'hsia'
+      uni_id: 3
+      tp_id: '64'
+    - onu: 'BBSM000a0002'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 3
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000a0002'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 3
+      tp_id: '66'
+    - onu: 'BBSM000a0002'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 3
+      tp_id: '66'
+    - onu: 'BBSM000a0002'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '907'
+      s_tag: '900'
+      service_type: 'hsia'
+      uni_id: 4
+      tp_id: '64'
+    - onu: 'BBSM000a0002'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 4
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000a0002'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 4
+      tp_id: '66'
+    - onu: 'BBSM000a0002'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 4
+      tp_id: '66'
+    - onu: 'BBSM000a0101'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '908'
+      s_tag: '900'
+      service_type: 'hsia'
+      uni_id: 1
+      tp_id: '64'
+    - onu: 'BBSM000a0101'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 1
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000a0101'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 1
+      tp_id: '66'
+    - onu: 'BBSM000a0101'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 1
+      tp_id: '66'
+    - onu: 'BBSM000a0101'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '909'
+      s_tag: '900'
+      service_type: 'hsia'
+      uni_id: 2
+      tp_id: '64'
+    - onu: 'BBSM000a0101'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 2
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000a0101'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 2
+      tp_id: '66'
+    - onu: 'BBSM000a0101'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 2
+      tp_id: '66'
+    - onu: 'BBSM000a0101'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '910'
+      s_tag: '900'
+      service_type: 'hsia'
+      uni_id: 3
+      tp_id: '64'
+    - onu: 'BBSM000a0101'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 3
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000a0101'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 3
+      tp_id: '66'
+    - onu: 'BBSM000a0101'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 3
+      tp_id: '66'
+    - onu: 'BBSM000a0101'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '911'
+      s_tag: '900'
+      service_type: 'hsia'
+      uni_id: 4
+      tp_id: '64'
+    - onu: 'BBSM000a0101'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 4
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000a0101'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 4
+      tp_id: '66'
+    - onu: 'BBSM000a0101'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 4
+      tp_id: '66'
+    - onu: 'BBSM000a0102'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '912'
+      s_tag: '900'
+      service_type: 'hsia'
+      uni_id: 1
+      tp_id: '64'
+    - onu: 'BBSM000a0102'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 1
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000a0102'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 1
+      tp_id: '66'
+    - onu: 'BBSM000a0102'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 1
+      tp_id: '66'
+    - onu: 'BBSM000a0102'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '913'
+      s_tag: '900'
+      service_type: 'hsia'
+      uni_id: 2
+      tp_id: '64'
+    - onu: 'BBSM000a0102'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 2
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000a0102'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 2
+      tp_id: '66'
+    - onu: 'BBSM000a0102'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 2
+      tp_id: '66'
+    - onu: 'BBSM000a0102'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '914'
+      s_tag: '900'
+      service_type: 'hsia'
+      uni_id: 3
+      tp_id: '64'
+    - onu: 'BBSM000a0102'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 3
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000a0102'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 3
+      tp_id: '66'
+    - onu: 'BBSM000a0102'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 3
+      tp_id: '66'
+    - onu: 'BBSM000a0102'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '915'
+      s_tag: '900'
+      service_type: 'hsia'
+      uni_id: 4
+      tp_id: '64'
+    - onu: 'BBSM000a0102'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 4
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000a0102'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 4
+      tp_id: '66'
+    - onu: 'BBSM000a0102'
+      olt: 'BBSIM_OLT_10'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 4
+      tp_id: '66'
+    - onu: 'BBSM000b0001'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '900'
+      s_tag: '901'
+      service_type: 'hsia'
+      uni_id: 1
+      tp_id: '64'
+    - onu: 'BBSM000b0001'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 1
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000b0001'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 1
+      tp_id: '66'
+    - onu: 'BBSM000b0001'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 1
+      tp_id: '66'
+    - onu: 'BBSM000b0001'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '901'
+      s_tag: '901'
+      service_type: 'hsia'
+      uni_id: 2
+      tp_id: '64'
+    - onu: 'BBSM000b0001'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 2
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000b0001'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 2
+      tp_id: '66'
+    - onu: 'BBSM000b0001'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 2
+      tp_id: '66'
+    - onu: 'BBSM000b0001'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '902'
+      s_tag: '901'
+      service_type: 'hsia'
+      uni_id: 3
+      tp_id: '64'
+    - onu: 'BBSM000b0001'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 3
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000b0001'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 3
+      tp_id: '66'
+    - onu: 'BBSM000b0001'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 3
+      tp_id: '66'
+    - onu: 'BBSM000b0001'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '903'
+      s_tag: '901'
+      service_type: 'hsia'
+      uni_id: 4
+      tp_id: '64'
+    - onu: 'BBSM000b0001'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 4
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000b0001'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 4
+      tp_id: '66'
+    - onu: 'BBSM000b0001'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 4
+      tp_id: '66'
+    - onu: 'BBSM000b0002'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '904'
+      s_tag: '901'
+      service_type: 'hsia'
+      uni_id: 1
+      tp_id: '64'
+    - onu: 'BBSM000b0002'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 1
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000b0002'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 1
+      tp_id: '66'
+    - onu: 'BBSM000b0002'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 1
+      tp_id: '66'
+    - onu: 'BBSM000b0002'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '905'
+      s_tag: '901'
+      service_type: 'hsia'
+      uni_id: 2
+      tp_id: '64'
+    - onu: 'BBSM000b0002'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 2
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000b0002'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 2
+      tp_id: '66'
+    - onu: 'BBSM000b0002'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 2
+      tp_id: '66'
+    - onu: 'BBSM000b0002'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '906'
+      s_tag: '901'
+      service_type: 'hsia'
+      uni_id: 3
+      tp_id: '64'
+    - onu: 'BBSM000b0002'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 3
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000b0002'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 3
+      tp_id: '66'
+    - onu: 'BBSM000b0002'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 3
+      tp_id: '66'
+    - onu: 'BBSM000b0002'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '907'
+      s_tag: '901'
+      service_type: 'hsia'
+      uni_id: 4
+      tp_id: '64'
+    - onu: 'BBSM000b0002'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 4
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000b0002'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 4
+      tp_id: '66'
+    - onu: 'BBSM000b0002'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 4
+      tp_id: '66'
+    - onu: 'BBSM000b0101'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '908'
+      s_tag: '901'
+      service_type: 'hsia'
+      uni_id: 1
+      tp_id: '64'
+    - onu: 'BBSM000b0101'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 1
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000b0101'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 1
+      tp_id: '66'
+    - onu: 'BBSM000b0101'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 1
+      tp_id: '66'
+    - onu: 'BBSM000b0101'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '909'
+      s_tag: '901'
+      service_type: 'hsia'
+      uni_id: 2
+      tp_id: '64'
+    - onu: 'BBSM000b0101'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 2
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000b0101'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 2
+      tp_id: '66'
+    - onu: 'BBSM000b0101'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 2
+      tp_id: '66'
+    - onu: 'BBSM000b0101'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '910'
+      s_tag: '901'
+      service_type: 'hsia'
+      uni_id: 3
+      tp_id: '64'
+    - onu: 'BBSM000b0101'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 3
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000b0101'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 3
+      tp_id: '66'
+    - onu: 'BBSM000b0101'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 3
+      tp_id: '66'
+    - onu: 'BBSM000b0101'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '911'
+      s_tag: '901'
+      service_type: 'hsia'
+      uni_id: 4
+      tp_id: '64'
+    - onu: 'BBSM000b0101'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 4
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000b0101'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 4
+      tp_id: '66'
+    - onu: 'BBSM000b0101'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 4
+      tp_id: '66'
+    - onu: 'BBSM000b0102'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '912'
+      s_tag: '901'
+      service_type: 'hsia'
+      uni_id: 1
+      tp_id: '64'
+    - onu: 'BBSM000b0102'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 1
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000b0102'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 1
+      tp_id: '66'
+    - onu: 'BBSM000b0102'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 1
+      tp_id: '66'
+    - onu: 'BBSM000b0102'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '913'
+      s_tag: '901'
+      service_type: 'hsia'
+      uni_id: 2
+      tp_id: '64'
+    - onu: 'BBSM000b0102'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 2
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000b0102'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 2
+      tp_id: '66'
+    - onu: 'BBSM000b0102'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 2
+      tp_id: '66'
+    - onu: 'BBSM000b0102'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '914'
+      s_tag: '901'
+      service_type: 'hsia'
+      uni_id: 3
+      tp_id: '64'
+    - onu: 'BBSM000b0102'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 3
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000b0102'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 3
+      tp_id: '66'
+    - onu: 'BBSM000b0102'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 3
+      tp_id: '66'
+    - onu: 'BBSM000b0102'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '915'
+      s_tag: '901'
+      service_type: 'hsia'
+      uni_id: 4
+      tp_id: '64'
+    - onu: 'BBSM000b0102'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '444'
+      s_tag: '333'
+      uni_id: 4
+      service_type: 'voip'
+      tp_id: '65'
+    - onu: 'BBSM000b0102'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '555'
+      service_type: 'vod'
+      uni_id: 4
+      tp_id: '66'
+    - onu: 'BBSM000b0102'
+      olt: 'BBSIM_OLT_11'
+      c_tag: '55'
+      s_tag: '550'
+      service_type: 'mcast'
+      uni_id: 4
+      tp_id: '66'
+
+  dst:
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
+    - ip: null
diff --git a/tests/openonu-go-adapter/Voltha_ONUReconcileTests.robot b/tests/openonu-go-adapter/Voltha_ONUReconcileTests.robot
index ee47082..f4e492c 100755
--- a/tests/openonu-go-adapter/Voltha_ONUReconcileTests.robot
+++ b/tests/openonu-go-adapter/Voltha_ONUReconcileTests.robot
@@ -14,8 +14,6 @@
 
 *** Settings ***
 Documentation     Test different Reconcile scenarios of ONU Go adapter with all three workflows ATT, DT and TT.
-...               Test suite is dedicated for only one ONU! Run robot with bbsim-kind.yaml only!
-...               Not for DT/TT workflow!
 ...               Hint: default timeout in BBSim to mimic OLT reboot is 60 seconds!
 ...               This behaviour of BBSim can be modified by 'oltRebootDelay: 60' in BBSim section of helm chart or
 ...               used values.yaml during 'voltha up'.
@@ -220,6 +218,24 @@
     ...    AND    Teardown Test
     ...    AND    Stop Logging    FlowDeletionAfterAdapterRestartOnuGo
 
+Wrong MDS Counter After Adapter Restart
+    [Documentation]    Validates wrong MDS Counter of ONU after adapter restart
+    ...    - perform sanity test include add subscriber
+    ...    - restart the ONU adapter preferred via "kubectl delete pod"
+    ...    - manipulate MDS counter
+    ...    - wait until the restart of the ONU adapter and the reconcile processing are finished
+    ...    - check all ONUs come up to previous state
+    [Tags]    functionalOnuGo    WrongMDSCounterAfterAdapterRestartOnuGo
+    [Setup]    Run Keywords    Start Logging    WrongMDSCounterAfterAdapterRestartOnuGo
+    ...    AND    Setup Test
+    Run Keyword If    ${has_dataplane}    Clean Up Linux
+    Do Wrong MDS Counter After Adapter Restart
+    [Teardown]    Run Keywords    Printout ONU Serial Number and Device Id    print2console=${print2console}
+    ...    AND    Run Keyword If    ${logging}    Get Logical Id of OLT
+    ...    AND    Run Keyword If    ${logging}    Collect Logs
+    ...    AND    Teardown Test
+    ...    AND    Stop Logging    WrongMDSCounterAfterAdapterRestartOnuGo
+
 *** Keywords ***
 Setup Suite
     [Documentation]    Set up the test suite
@@ -231,6 +247,11 @@
     ...    kvstoreprefix:${kvstoreprefix}
     Log    ${LogInfo}    console=yes
     Common Test Suite Setup
+    # set tech profiles
+    Run Keyword If    ${unitag_sub} and "${workflow}"=="TT"    Set Tech Profile    TT-HSIA    ${INFRA_NAMESPACE}    64
+    Run Keyword If    ${unitag_sub} and "${workflow}"=="TT"    Set Tech Profile    TT-VoIP    ${INFRA_NAMESPACE}    65
+    Run Keyword If    ${unitag_sub} and "${workflow}"=="TT"    Set Tech Profile    TT-multi-uni-MCAST-AdditionalBW-None
+    ...               ${INFRA_NAMESPACE}    66
     # delete etcd MIB Template Data
     Delete MIB Template Data    ${INFRA_NAMESPACE}
     # delete etcd onu data
@@ -255,6 +276,10 @@
     Run Keyword If    ${logging}    Collect Logs
     Stop Logging Setup or Teardown   Teardown-${SUITE NAME}
     Close All ONOS SSH Connections
+    Set Suite Variable    ${TechProfile}    ${EMPTY}
+    Run Keyword If    ${unitag_sub} and "${workflow}"=="TT"    Remove Tech Profile    ${INFRA_NAMESPACE}    64
+    Run Keyword If    ${unitag_sub} and "${workflow}"=="TT"    Remove Tech Profile    ${INFRA_NAMESPACE}    65
+    Run Keyword If    ${unitag_sub} and "${workflow}"=="TT"    Remove Tech Profile    ${INFRA_NAMESPACE}    66
 
 Setup Test
     [Documentation]    Pre-test Setup
@@ -353,9 +378,19 @@
     ...    ELSE       Perform Sanity Test
     Disable Onu Device
     Current State Test All Onus    tech-profile-config-delete-success
+    #check no port is enabled in ONOS
+    Wait for Ports in ONOS for all OLTs    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    0    BBSM
+    Wait for all ONU Ports in ONOS Disabled    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    ${unitag_sub}
+    # validate etcd data
+    ${List_ONU_Serial}    Create List
+    Build ONU SN List    ${List_ONU_Serial}
+    FOR  ${onu_sn}  IN  @{List_ONU_Serial}
+        Wait Until Keyword Succeeds    ${timeout}    2s    Validate Tech Profiles and Flows in ETCD Data Per Onu
+        ...    ${onu_sn}   ${INFRA_NAMESPACE}   ${kvstoreprefix}  must_exist=False    check_tcont_map_empty=True
+    END
     Reconcile Onu Adapter    ${NAMESPACE}    ${usekill2restart}    UNKNOWN
     Current State Test All Onus    tech-profile-config-delete-success
-    Wait for all ONU Ports in ONOS Disabled    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}
+    Wait for all ONU Ports in ONOS Disabled    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    ${unitag_sub}
     Enable Onu Device
     Run Keyword If    "${workflow}"=="DT"    Perform Sanity Test DT     ${suppressaddsubscriber}
     ...    ELSE IF    "${workflow}"=="TT"    Perform Sanity Tests TT    ${suppressaddsubscriber}
@@ -390,7 +425,7 @@
     ...    ELSE       Perform Sanity Test    ${suppressaddsubscriber}
     Disable Onu Device
     Current State Test All Onus    tech-profile-config-delete-success
-    Wait for all ONU Ports in ONOS Disabled    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}
+    Wait for all ONU Ports in ONOS Disabled    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    ${unitag_sub}
     Enable Onu Device
     Run Keyword If    "${workflow}"=="DT"    Perform Sanity Test DT     ${suppressaddsubscriber}
     ...    ELSE IF    "${workflow}"=="TT"    Perform Sanity Tests TT    ${suppressaddsubscriber}
@@ -482,9 +517,19 @@
     END
     # Collect data for remove flow(s)
     ${of_id}=    Wait Until Keyword Succeeds    ${timeout}    15s    Validate OLT Device in ONOS    ${hosts.src[0]['olt']}
-    ${onu_port}=    Wait Until Keyword Succeeds    ${timeout}    2s    Get ONU Port in ONOS    ${hosts.src[0]['onu']}
-    ...    ${of_id}    ${hosts.src[0]['uni_id']}
-    ${params_for_remove_flow}=    Create Dictionary    of_id=${of_id}    onu_port=${onu_port}
+    ${onu_sn}=    Set Variable   ${hosts.src[0]['onu']}
+    ${onu_port_list}    Create List
+    FOR    ${I}    IN RANGE    0    ${num_all_onus}
+        ${src}=    Set Variable    ${hosts.src[${I}]}
+        Continue For Loop If    "${onu_sn}"!="${src['onu']}"
+        ${onu_port}=    Wait Until Keyword Succeeds    ${timeout}    2s    Get ONU Port in ONOS    ${src['onu']}
+        ...    ${of_id}    ${src['uni_id']}
+        ${port_id}=    Get Index From List    ${onu_port_list}   ${onu_port}
+        Continue For Loop If    -1 != ${port_id}
+        Append To List    ${onu_port_list}    ${onu_port}
+    END
+    ${params_for_remove_flow}=    Create Dictionary    unitag=${unitag_sub}    onu_sn=${onu_sn}    of_id=${of_id}
+    ...    onu_port=${onu_port_list[0]}
     # Collect number of flows for comparing after Reconcile
     ${olt_flows_list}    Create List
     FOR    ${I}    IN RANGE    0    ${num_olts}
@@ -493,7 +538,11 @@
         ${olt_flows}=    Create Dictionary    olt=${olt_of_id}    flows=${flows}
         Append To List    ${olt_flows_list}    ${olt_flows}
     END
-    ${flows_onu}=    Count flows    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    ${of_id}   added    ${onu_port}
+    ${flows_onu}=    Set Variable    0
+    FOR  ${onu_port}  IN  @{onu_port_list}
+        ${flows_onu_port}=    Count flows    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    ${of_id}   added    ${onu_port}
+        ${flows_onu}=    Evaluate     ${flows_onu} + ${flows_onu_port}
+    END
     # Restart onu adapter with deleting flows from first onu
     Reconcile Onu Adapter    ${NAMESPACE}    ${usekill2restart}    ACTIVE    flow_delete_params=${params_for_remove_flow}
     # validate flows in ONOS after remove
@@ -501,16 +550,19 @@
     ...    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    flows -s any ${of_id}
     Log    ${flow}
     ${expected_flows_onu}=    Set Variable If   "${workflow}"=="ATT"    1    0
-    Wait Until Keyword Succeeds    ${timeout}    2s    Validate number of flows    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}
-    ...    ${expected_flows_onu}  ${of_id}   any    ${onu_port}
+    FOR  ${onu_port}  IN  @{onu_port_list}
+        Wait Until Keyword Succeeds    ${timeout}    2s    Validate number of flows    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}
+        ...    ${expected_flows_onu}  ${of_id}   any    ${onu_port}
+    END
     ${flow}=    Execute ONOS CLI Command use single connection
     ...    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    flows -s any ${of_id}
     Log    ${flow}
-    # Beside onu port specific flows additional flows deleted depending on workflow
-    ${additional_flows_deleted}=    Set Variable If
-    ...    "${workflow}"=="DT"    1
-    ...    "${workflow}"=="TT"    3
-    ...    "${workflow}"=="ATT"   0
+    # Beside onu port specific flows additional flows deleted depending on workflow and number of onu ports
+    ${number_ports}=    Get Length    ${onu_port_list}
+    ${additional_flows_deleted}=    Run Keyword If    "${workflow}"=="DT"    Set Variable    ${number_ports}
+    ...                             ELSE IF           "${workflow}"=="TT"    Evaluate        ${number_ports}*3
+    ...                             ELSE IF           "${workflow}"=="ATT"   Set Variable    0
+    ...                             ELSE                                     Set Variable    0
     FOR    ${I}    IN RANGE    0    ${num_olts}
         ${expected_flows}=    Run Keyword If    "${of_id}"=="${olt_flows_list}[${I}][olt]"
         ...    Evaluate    ${olt_flows_list}[${I}][flows]-${flows_onu}-${additional_flows_deleted}
@@ -536,3 +588,32 @@
         ${must_exist}=    Set Variable If    "${onu_device_id}"=="${onu_device_id_no_flows}"    False    True
         Validate OLT Flows Per Onu   ${onu_device_id}    ${must_exist}
     END
+
+Do Wrong MDS Counter After Adapter Restart
+    [Documentation]    This keyword checks correct handling of a wrong MDS counter after adapter restart
+    ...    - perform sanity test include add subscriber
+    ...    - restart the ONU adapter preferred via "kubectl delete pod"
+    ...    - manipulate MDS counter
+    ...    - wait until the restart of the ONU adapter and the reconcile processing are finished
+    ...    - check all ONUs come up to previous state
+    FOR    ${I}    IN RANGE    0    ${num_olts}
+        #get olt serial number
+        ${olt_serial_number}=    Set Variable    ${list_olts}[${I}][sn]
+        #validate olt states
+        ${olt_device_id}=    Get OLTDeviceID From OLT List    ${olt_serial_number}
+        Enable Device    ${olt_device_id}
+    END
+    Run Keyword If    "${workflow}"=="DT"    Perform Sanity Test DT
+    ...    ELSE IF    "${workflow}"=="TT"    Perform Sanity Tests TT
+    ...    ELSE       Perform Sanity Test
+    Reconcile Onu Adapter    ${NAMESPACE}    ${usekill2restart}    ACTIVE    wrong_MDS_counter=True
+    Run Keyword If    "${workflow}"=="DT"    Perform Sanity Test DT     ${suppressaddsubscriber}
+    ...    ELSE IF    "${workflow}"=="TT"    Perform Sanity Tests TT    ${suppressaddsubscriber}
+    ...    ELSE       Perform Sanity Test    ${suppressaddsubscriber}
+    Disable Onu Device
+    Current State Test All Onus    tech-profile-config-delete-success
+    Wait for all ONU Ports in ONOS Disabled    ${ONOS_SSH_IP}    ${ONOS_SSH_PORT}    ${unitag_sub}
+    Enable Onu Device
+    Run Keyword If    "${workflow}"=="DT"    Perform Sanity Test DT     ${suppressaddsubscriber}
+    ...    ELSE IF    "${workflow}"=="TT"    Perform Sanity Tests TT    ${suppressaddsubscriber}
+    ...    ELSE       Perform Sanity Test    ${suppressaddsubscriber}