From 8e8fec1e1996ad800950292255f8829ceb2e846a Mon Sep 17 00:00:00 2001
From: Cedric Roux <cedric.roux@eurecom.fr>
Date: Fri, 10 Mar 2017 20:18:36 +0100
Subject: [PATCH] test setup v2: add TDD tests

New tests: 0186xx for TDD with the huawei 3276 dongle.
All necessary files to configure and use it have been added.
Existing code has been adapted for the TDD tests.
Only the test setup v2 has been adapted.
The file test_case_list.xml has been changed to add tests
0186xx, but only to work with test setup v2. It won't
work with test setup v1. To be completed if needed.

The tests are similar to FDD tests.
Throughputs for TDD have to be adjusted, the throughputs
of FDD are used for the moment.
---
 cmake_targets/autotests/README.txt            |  26 +++
 cmake_targets/autotests/test_case_list.xml    |  24 +++
 .../autotests/v2/actions/start_3276.bash      |  11 ++
 .../autotests/v2/actions/start_3276.py        |  59 ++++++
 .../autotests/v2/actions/stop_3276.py         |  29 +++
 .../autotests/v2/actions/wvdial.3276.conf     |  27 +++
 cmake_targets/autotests/v2/alu_test.py        | 169 +++++++++--------
 .../enb.band38.tm1.usrpb210.tdd.10MHz.conf    | 175 ++++++++++++++++++
 .../enb.band38.tm1.usrpb210.tdd.20MHz.conf    | 175 ++++++++++++++++++
 .../enb.band38.tm1.usrpb210.tdd.5MHz.conf     | 175 ++++++++++++++++++
 ... => enb.band7.tm1.usrpb210.fdd.10MHz.conf} |   0
 ... => enb.band7.tm1.usrpb210.fdd.20MHz.conf} |   0
 ...f => enb.band7.tm1.usrpb210.fdd.5MHz.conf} |   0
 cmake_targets/autotests/v2/main.py            | 105 +++++++----
 14 files changed, 869 insertions(+), 106 deletions(-)
 create mode 100644 cmake_targets/autotests/v2/actions/start_3276.bash
 create mode 100644 cmake_targets/autotests/v2/actions/start_3276.py
 create mode 100644 cmake_targets/autotests/v2/actions/stop_3276.py
 create mode 100644 cmake_targets/autotests/v2/actions/wvdial.3276.conf
 create mode 100644 cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf
 create mode 100644 cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf
 create mode 100644 cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf
 rename cmake_targets/autotests/v2/config/{enb.band7.tm1.usrpb210.10MHz.conf => enb.band7.tm1.usrpb210.fdd.10MHz.conf} (100%)
 rename cmake_targets/autotests/v2/config/{enb.band7.tm1.usrpb210.20MHz.conf => enb.band7.tm1.usrpb210.fdd.20MHz.conf} (100%)
 rename cmake_targets/autotests/v2/config/{enb.band7.tm1.usrpb210.5MHz.conf => enb.band7.tm1.usrpb210.fdd.5MHz.conf} (100%)

diff --git a/cmake_targets/autotests/README.txt b/cmake_targets/autotests/README.txt
index ca53680f36..6cd0307b48 100644
--- a/cmake_targets/autotests/README.txt
+++ b/cmake_targets/autotests/README.txt
@@ -255,6 +255,32 @@ Obj.#   Case#   Test#	Description
 01      85      04      Band 7 FDD 10MHz DL Throughput for 300 sec for 1TX/1RX
 01      85      05      Band 7 FDD 20MHz DL Throughput for 300 sec for 1TX/1RX
 
+01      86              lte-softmodem tests with USRP B210 RF as eNB and ALU EPC w/ Huawei e3276 COTS UE for 1TX/1RX (TM1), 2TX/2RX (TM2)
+01      86      00      Band 38 TDD 5MHz UL Throughput (UDP) for 300 sec for 1TX/1RX
+01      86      01      Band 38 TDD 10MHz UL Throughput (UDP) for 300 sec for 1TX/1RX
+01      86      02      Band 38 TDD 20MHz UL Throughput (UDP) for 300 sec for 1TX/1RX
+01      86      03      Band 38 TDD 5MHz DL Throughput (UDP) for 300 sec for 1TX/1RX
+01      86      04      Band 38 TDD 10MHz DL Throughput (UDP) for 300 sec for 1TX/1RX
+01      86      05      Band 38 TDD 20MHz DL Throughput (UDP) for 300 sec for 1TX/1RX
+01      86      06      Band 38 TDD 5MHz UL Throughput (UDP) for 300 sec for 2TX/2RX (TM2)
+01      86      07      Band 38 TDD 10MHz UL Throughput (UDP) for 300 sec for 2TX/2RX (TM2)
+01      86      08      Band 38 TDD 20MHz UL Throughput (UDP) for 300 sec for 2TX/2RX (TM2)
+01      86      09      Band 38 TDD 5MHz DL Throughput (UDP) for 300 sec for 2TX/2RX (TM2)
+01      86      10      Band 38 TDD 10MHz DL Throughput (UDP) for 300 sec for 2TX/2RX (TM2)
+01      86      11      Band 38 TDD 20MHz DL Throughput (UDP) for 300 sec for 2TX/2RX (TM2)
+01      86      12      Band 38 TDD 5MHz UL Throughput (TCP) for 300 sec for 1TX/1RX
+01      86      13      Band 38 TDD 10MHz UL Throughput (TCP) for 300 sec for 1TX/1RX
+01      86      14      Band 38 TDD 20MHz UL Throughput (TCP) for 300 sec for 1TX/1RX
+01      86      15      Band 38 TDD 5MHz DL Throughput (TCP) for 300 sec for 1TX/1RX
+01      86      16      Band 38 TDD 10MHz DL Throughput (TCP) for 300 sec for 1TX/1RX
+01      86      17      Band 38 TDD 20MHz DL Throughput (TCP) for 300 sec for 1TX/1RX
+01      86      18      Band 38 TDD 5MHz UL Throughput (TCP) for 300 sec for 2TX/2RX  (TM2)
+01      86      19      Band 38 TDD 10MHz UL Throughput (TCP) for 300 sec for 2TX/2RX (TM2)
+01      86      20      Band 38 TDD 20MHz UL Throughput (TCP) for 300 sec for 2TX/2RX (TM2)
+01      86      21      Band 38 TDD 5MHz DL Throughput (TCP) for 300 sec for 2TX/2RX (TM2)
+01      86      22      Band 38 TDD 10MHz DL Throughput (TCP) for 300 sec for 2TX/2RX (TM2)
+01      86      23      Band 38 TDD 20MHz DL Throughput (TCP) for 300 sec for 2TX/2RX (TM2)
+
 02      55              lte-softmodem tests with USRP B210 RF as eNB and ALU EPC w/ Sony Experia M4 COTS UE for 1TX/1RX and 2TX/2RX (TM2)
 02      55      00      Band 7 FDD 5MHz UL Throughput (UDP) for 300 sec for 1TX/1RX
 02      55      01      Band 7 FDD 10MHz UL Throughput (UDP) for 300 sec for 1TX/1RX
diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml
index f37c265462..c55a29c975 100644
--- a/cmake_targets/autotests/test_case_list.xml
+++ b/cmake_targets/autotests/test_case_list.xml
@@ -8664,6 +8664,30 @@ c
     <nruns>10</nruns>
     </testCase> 
 
+  <testCase id="018600"></testCase>
+  <testCase id="018601"></testCase>
+  <testCase id="018602"></testCase>
+  <testCase id="018603"></testCase>
+  <testCase id="018604"></testCase>
+  <testCase id="018605"></testCase>
+  <testCase id="018606"></testCase>
+  <testCase id="018607"></testCase>
+  <testCase id="018608"></testCase>
+  <testCase id="018609"></testCase>
+  <testCase id="018610"></testCase>
+  <testCase id="018611"></testCase>
+  <testCase id="018612"></testCase>
+  <testCase id="018613"></testCase>
+  <testCase id="018614"></testCase>
+  <testCase id="018615"></testCase>
+  <testCase id="018616"></testCase>
+  <testCase id="018617"></testCase>
+  <testCase id="018618"></testCase>
+  <testCase id="018619"></testCase>
+  <testCase id="018620"></testCase>
+  <testCase id="018621"></testCase>
+  <testCase id="018622"></testCase>
+  <testCase id="018623"></testCase>
 
   <testCase id="025500" >
     <class>lte-softmodem</class>
diff --git a/cmake_targets/autotests/v2/actions/start_3276.bash b/cmake_targets/autotests/v2/actions/start_3276.bash
new file mode 100644
index 0000000000..c6fbdcedd9
--- /dev/null
+++ b/cmake_targets/autotests/v2/actions/start_3276.bash
@@ -0,0 +1,11 @@
+#enable control+C reception (to be refined if it does not work)
+stty isig intr ^C
+
+cd /tmp/oai_test_setup/oai
+source oaienv
+cd cmake_targets/autotests/v2/actions
+sudo python start_3276.py
+
+sudo wvdial -C wvdial.3276.conf || true
+
+sudo python stop_3276.py
diff --git a/cmake_targets/autotests/v2/actions/start_3276.py b/cmake_targets/autotests/v2/actions/start_3276.py
new file mode 100644
index 0000000000..cf0629213a
--- /dev/null
+++ b/cmake_targets/autotests/v2/actions/start_3276.py
@@ -0,0 +1,59 @@
+import time
+
+from modem import quit, Modem
+
+try:
+    modem = Modem("/dev/ttyUSB0")
+
+    #test that modem is there
+    print "INFO: check modem's presence"
+    modem.send('AT')
+    if modem.wait().ret != True:
+        print "ERROR: no modem?"
+        quit(1)
+
+    #first deactivate
+    print "INFO: deactivate the modem"
+    modem.send('AT+CFUN=0')
+    if modem.wait().ret != True:
+        print "ERROR: failed deactivating the modem"
+        quit(1)
+
+    #activate the modem
+    print "INFO: activate the modem"
+    modem.send('AT+CFUN=1')
+    if modem.wait().ret != True:
+        print "ERROR: failed asking modem for activation"
+        quit(1)
+
+    #wait for modem to be connected
+    #timeout after one minute
+    print "INFO: wait for modem to be connected (timeout: one minute)"
+    start_time = time.time()
+    while True:
+        modem.send('AT+CGATT?')
+        r = modem.wait()
+        if r.ret != True:
+            print "ERROR: failed checking attachment status of modem"
+            quit(1)
+        if "+CGATT: 1" in r.data:
+            break
+        if not "CGATT: 0" in r.data:
+            print "ERROR: bad data when checking attachment status of modem"
+            quit(1)
+        time.sleep(0.1)
+        if time.time() > start_time + 60:
+            print "ERROR: modem not connected after one minute, close modem"
+            modem.send('AT+CFUN=0')
+            r = modem.wait()
+            if r.ret != True:
+                print "ERROR: closing modem failed"
+            quit(1)
+
+    print "INFO: modem is connected"
+
+except BaseException, e:
+    print "ERROR: " + str(e)
+    quit(1)
+
+quit(0)
diff --git a/cmake_targets/autotests/v2/actions/stop_3276.py b/cmake_targets/autotests/v2/actions/stop_3276.py
new file mode 100644
index 0000000000..3eb7e889c6
--- /dev/null
+++ b/cmake_targets/autotests/v2/actions/stop_3276.py
@@ -0,0 +1,29 @@
+import time
+
+from modem import quit, Modem
+
+try:
+    modem = Modem("/dev/ttyUSB0")
+
+    #test that modem is there
+    print "INFO: check modem's presence"
+    modem.send('AT')
+    r = modem.wait()
+    if r.ret != True and "NO CARRIER" not in r.data:
+        print "ERROR: no modem?"
+        quit(1)
+    if "NO CARRIER" in r.data:
+        print "WARNING: 'NO CARRIER' detected, not sure if handled correctly"
+
+    #deactivate the modem
+    print "INFO: deactivate the modem"
+    modem.send('AT+CFUN=0')
+    if modem.wait().ret != True:
+        print "ERROR: failed asking modem for deactivation"
+        quit(1)
+
+except BaseException, e:
+    print "ERROR: " + str(e)
+    quit(1)
+
+quit(0)
diff --git a/cmake_targets/autotests/v2/actions/wvdial.3276.conf b/cmake_targets/autotests/v2/actions/wvdial.3276.conf
new file mode 100644
index 0000000000..81fedc8df2
--- /dev/null
+++ b/cmake_targets/autotests/v2/actions/wvdial.3276.conf
@@ -0,0 +1,27 @@
+[Dialer Defaults]
+Modem = /dev/ttyUSB0
+ISDN = off
+Modem Type = Analog Modem
+Baud = 9600
+Init1 = ATZ
+Init2 = AT&F &D2 &C1
+Init3 = AT+CGDCONT=1,"IP","oai.ipv4"
+Phone = *99#
+Phone1 = 
+Phone2 = 
+Phone3 = 
+Phone4 = 
+Ask Password = off
+Password = ''
+Username = ImaginLab
+Auto Reconnect = off
+Abort on Busy = off
+Carrier Check = on
+Check Def Route = on
+Abort on No Dialtone = on
+Stupid Mode = on
+Idle Seconds = 0
+Auto DNS = on
+;Minimize = off
+;Dock = off
+;Do NOT edit this file by hand!
diff --git a/cmake_targets/autotests/v2/alu_test.py b/cmake_targets/autotests/v2/alu_test.py
index 7992ce7f3c..8ba6ab857a 100644
--- a/cmake_targets/autotests/v2/alu_test.py
+++ b/cmake_targets/autotests/v2/alu_test.py
@@ -102,7 +102,7 @@ class alu_test:
     # compile_enb
     ##########################################################################
     def compile_enb(self, build_arguments):
-        log("INFO: ALU test: compile softmodem")
+        log("INFO: ALU test: compile softmodem on " + self.enb_machine)
         envcomp = list(self.env)
         envcomp.append('BUILD_ARGUMENTS="' + build_arguments + '"')
         #we don't care about BUILD_OUTPUT but required (TODO: change that)
@@ -163,24 +163,24 @@ class alu_test:
             #os._exit(1)
 
     ##########################################################################
-    # start_bandrich_ue
+    # start_ue
     ##########################################################################
-    def start_bandrich_ue(self):
-        log("INFO: ALU test: start bandrich UE")
-        self.task_ue = Task("actions/start_bandrich.bash",
-                "start_bandrich",
+    def start_ue(self, ue):
+        log("INFO: ALU test: start " + ue + " UE")
+        self.task_ue = Task("actions/start_" + ue + ".bash",
+                "start_" + ue,
                 self.ue_machine,
                 self.oai_user,
                 self.oai_password,
                 self.env,
-                self.logdir + "/start_bandrich." + self.ue_machine,
+                self.logdir + "/start_" + ue + "." + self.ue_machine,
                 event=self.event)
         self.task_ue.waitlog("local  IP address", event=self.event)
         self.event.wait()
 
         #at this point one task has died or we have the line in the log
         if self.task_ue.waitlog_state != WAITLOG_SUCCESS:
-            log("ERROR: ALU test: bandrich UE did not connect")
+            log("ERROR: ALU test: " + ue + " UE did not connect")
             raise TestFailed()
 
         self.event.clear()
@@ -191,21 +191,21 @@ class alu_test:
             log("ERROR: ALU test: eNB, HSS or UE task died")
             raise TestFailed()
 
-        #get bandrich UE IP
+        #get UE IP
         l = open(self.task_ue.logfile, "r").read()
-        self.bandrich_ue_ip = re.search("local  IP address (.*)\n", l) \
-                                .groups()[0]
-        log("INFO: ALU test: bandrich UE IP address: " + self.bandrich_ue_ip)
+        self.ue_ip = re.search("local  IP address (.*)\n", l) \
+                       .groups()[0]
+        log("INFO: ALU test: " + ue + " UE IP address: " + self.ue_ip)
 
     ##########################################################################
-    # stop_bandrich_ue
+    # stop_ue
     ##########################################################################
-    def stop_bandrich_ue(self):
-        log("INFO: ALU test: stop bandrich UE")
+    def stop_ue(self, ue):
+        log("INFO: ALU test: stop " + ue + " UE")
         self.task_ue.sendnow("%c" % 3)
         ret = self.task_ue.wait()
         if ret != 0:
-            log("ERROR: ALU test: task bandrich UE failed")
+            log("ERROR: ALU test: task " + ue + " UE failed")
             #not sure if we have to quit here or not
             #os._exit(1)
 
@@ -286,47 +286,47 @@ class alu_test:
     ##########################################################################
     # dl_tcp
     ##########################################################################
-    def dl_tcp(self):
-        self._do_traffic("bandrich downlink TCP",
-                         "server_tcp", self.ue_machine, self.bandrich_ue_ip,
+    def dl_tcp(self, ue):
+        self._do_traffic(ue + " downlink TCP",
+                         "server_tcp", self.ue_machine, self.ue_ip,
                          "client_tcp", self.epc_machine,
                          "Server listening on TCP port 5001",
-                         "bandrich_downlink_tcp_server",
-                         "bandrich_downlink_tcp_client")
+                         ue + "_downlink_tcp_server",
+                         ue + "_downlink_tcp_client")
 
     ##########################################################################
     # ul_tcp
     ##########################################################################
-    def ul_tcp(self):
-        self._do_traffic("bandrich uplink TCP",
+    def ul_tcp(self, ue):
+        self._do_traffic(ue + " uplink TCP",
                          "server_tcp", self.epc_machine, "192.172.0.1",
                          "client_tcp", self.ue_machine,
                          "Server listening on TCP port 5001",
-                         "bandrich_uplink_tcp_server",
-                         "bandrich_uplink_tcp_client")
+                         ue + "_uplink_tcp_server",
+                         ue + "_uplink_tcp_client")
 
     ##########################################################################
     # dl_udp
     ##########################################################################
-    def dl_udp(self, bandwidth):
-        self._do_traffic("bandrich downlink UDP",
-                         "server_udp", self.ue_machine, self.bandrich_ue_ip,
+    def dl_udp(self, ue, bandwidth):
+        self._do_traffic(ue + " downlink UDP",
+                         "server_udp", self.ue_machine, self.ue_ip,
                          "client_udp", self.epc_machine,
                          "Server listening on UDP port 5001",
-                         "bandrich_downlink_udp_server",
-                         "bandrich_downlink_udp_client",
+                         ue + "_downlink_udp_server",
+                         ue + "_downlink_udp_client",
                          udp_bandwidth=bandwidth)
 
     ##########################################################################
     # ul_udp
     ##########################################################################
-    def ul_udp(self, bandwidth):
-        self._do_traffic("bandrich uplink UDP",
+    def ul_udp(self, ue, bandwidth):
+        self._do_traffic(ue + " uplink UDP",
                          "server_udp", self.epc_machine, "192.172.0.1",
                          "client_udp", self.ue_machine,
                          "Server listening on UDP port 5001",
-                         "bandrich_uplink_udp_server",
-                         "bandrich_uplink_udp_client",
+                         ue + "_uplink_udp_server",
+                         ue + "_uplink_udp_client",
                          udp_bandwidth=bandwidth)
 
 ##############################################################################
@@ -337,19 +337,33 @@ def run_b210_alu(tests, openair_dir, oai_user, oai_password, env):
     if not do_tests(tests['b210']['alu']):
         return
 
-    #compile eNB
-
-    alu = alu_test(epc='amerique', enb='hutch', ue='stevens',
-                   openair=openair_dir,
-                   user=oai_user, password=oai_password,
-                   log_subdir='enb_tests/b210_alu/compile_enb',
-                   env=env)
-
-    try:
-        alu.compile_enb("--eNB -w USRP -x -c --disable-cpu-affinity")
-    except BaseException, e:
-        log("ERROR: ALU test failed: eNB compilation failed: " + str(e))
-        return
+    #compile eNB (two cases: one for FDD and one for TDD)
+
+    if do_tests(tests['b210']['alu']['fdd']):
+        alu = alu_test(epc='amerique', enb='hutch', ue='stevens',
+                       openair=openair_dir,
+                       user=oai_user, password=oai_password,
+                       log_subdir='enb_tests/b210_alu/compile_enb_fdd',
+                       env=env)
+
+        try:
+            alu.compile_enb("--eNB -w USRP -x -c --disable-cpu-affinity")
+        except BaseException, e:
+            log("ERROR: ALU test failed: eNB compilation failed: " + str(e))
+            return
+
+    if do_tests(tests['b210']['alu']['tdd']):
+        alu = alu_test(epc='amerique', enb='calisson', ue='mozart',
+                       openair=openair_dir,
+                       user=oai_user, password=oai_password,
+                       log_subdir='enb_tests/b210_alu/compile_enb_tdd',
+                       env=env)
+
+        try:
+            alu.compile_enb("--eNB -w USRP -x -c --disable-cpu-affinity")
+        except BaseException, e:
+            log("ERROR: ALU test failed: eNB compilation failed: " + str(e))
+            return
 
     #run tests
 
@@ -361,29 +375,38 @@ def run_b210_alu(tests, openair_dir, oai_user, oai_password, env):
                          "10" : "15M",
                          "20" : "15M" }
 
-    for bw in ('5', '10', '20'):
-        if do_tests(tests['b210']['alu'][bw]):
-            log("INFO: ALU test: run tests for bandwidth " + bw + " MHz")
-            ctest = tests['b210']['alu'][bw]
-            alu = alu_test(epc='amerique', enb='hutch', ue='stevens',
-                           openair=openair_dir,
-                           user=oai_user, password=oai_password,
-                           log_subdir='enb_tests/b210_alu/' + bw,
-                           env=env)
-            try:
-                alu.start_epc()
-                alu.start_enb("enb.band7.tm1.usrpb210." + bw + "MHz.conf")
-                if do_tests(ctest['bandrich']):
-                    alu.start_bandrich_ue()
-                    if do_tests(ctest['bandrich']['tcp']['dl']): alu.dl_tcp()
-                    if do_tests(ctest['bandrich']['tcp']['ul']): alu.ul_tcp()
-                    if do_tests(ctest['bandrich']['udp']['dl']):
-                        alu.dl_udp(udp_dl_bandwidth[bw])
-                    if do_tests(ctest['bandrich']['udp']['ul']):
-                        alu.ul_udp(udp_ul_bandwidth[bw])
-                    alu.stop_bandrich_ue()
-                alu.stop_enb()
-                alu.stop_epc()
-            except BaseException, e:
-                log("ERROR: ALU test failed: " + str(e))
-                alu.finish()
+    ue_machine = { "fdd" : "stevens",
+                   "tdd" : "mozart" }
+
+    enb_machine = { "fdd" : "hutch",
+                    "tdd" : "calisson" }
+
+    band = { "fdd" : "7",
+             "tdd" : "38" }
+
+    for mode in ('fdd', 'tdd'):
+        for bw in ('5', '10', '20'):
+            if do_tests(tests['b210']['alu'][mode][bw]):
+                log("INFO: ALU test: run tests for bandwidth " + bw + " MHz")
+                ctest = tests['b210']['alu'][mode][bw]
+                alu = alu_test(epc='amerique', enb=enb_machine[mode], ue=ue_machine[mode],
+                               openair=openair_dir,
+                               user=oai_user, password=oai_password,
+                               log_subdir='enb_tests/b210_alu/' + mode + "/" + bw,
+                               env=env)
+                try:
+                    alu.start_epc()
+                    alu.start_enb("enb.band" + band[mode] + ".tm1.usrpb210." + mode + "." + bw + "MHz.conf")
+                    for ue in ('bandrich', '3276'):
+                        if ue in ctest and do_tests(ctest[ue]):
+                            alu.start_ue(ue)
+                            if do_tests(ctest[ue]['tcp']['dl']): alu.dl_tcp(ue)
+                            if do_tests(ctest[ue]['tcp']['ul']): alu.ul_tcp(ue)
+                            if do_tests(ctest[ue]['udp']['dl']): alu.dl_udp(ue, udp_dl_bandwidth[bw])
+                            if do_tests(ctest[ue]['udp']['ul']): alu.ul_udp(ue, udp_ul_bandwidth[bw])
+                            alu.stop_ue(ue)
+                    alu.stop_enb()
+                    alu.stop_epc()
+                except BaseException, e:
+                    log("ERROR: ALU test failed: " + str(e))
+                    alu.finish()
diff --git a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf
new file mode 100644
index 0000000000..c25b954e1a
--- /dev/null
+++ b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.10MHz.conf
@@ -0,0 +1,175 @@
+Active_eNBs = ( "eNB_Eurecom_LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+    ////////// Identification parameters:
+    eNB_ID    =  0xe00;
+
+    cell_type =  "CELL_MACRO_ENB";
+
+    eNB_name  =  "eNB_Eurecom_LTEBox";
+
+    // Tracking area code, 0x0000 and 0xfffe are reserved values
+    tracking_area_code  =  "1";
+
+    mobile_country_code =  "208";
+
+    mobile_network_code =  "92";
+
+       ////////// Physical parameters:
+
+    component_carriers = (
+      {
+        node_function                                         = "eNodeB_3GPP";
+	node_timing                                           = "synch_to_ext_device";
+	node_synch_ref                                        = 0;
+        frame_type					      = "TDD";
+        tdd_config 					      = 3;
+        tdd_config_s            			      = 0;
+        prefix_type             			      = "NORMAL";
+        eutra_band              			      = 38;
+        downlink_frequency      			      = 2580000000L;
+        uplink_frequency_offset 			      = 0;
+        Nid_cell					      = 0;
+        N_RB_DL                 			      = 50;
+        Nid_cell_mbsfn          			      = 0;
+        nb_antenna_ports          			      = 1;
+        nb_antennas_tx          			      = 1;
+        nb_antennas_rx          			      = 1;
+        tx_gain                                            = 90;
+        rx_gain                                            = 125;
+        prach_root              			      = 0;
+        prach_config_index      			      = 0;
+        prach_high_speed        			      = "DISABLE";
+        prach_zero_correlation  			      = 1;
+        prach_freq_offset       			      = 2;
+        pucch_delta_shift       			      = 1;
+        pucch_nRB_CQI           			      = 1;
+        pucch_nCS_AN            			      = 0;
+        pucch_n1_AN             			      = 32;
+        pdsch_referenceSignalPower 			      = -24;
+        pdsch_p_b                  			      = 0;
+        pusch_n_SB                 			      = 1;
+        pusch_enable64QAM          			      = "DISABLE";
+        pusch_hoppingMode                                  = "interSubFrame";
+        pusch_hoppingOffset                                = 0;
+        pusch_groupHoppingEnabled  			      = "ENABLE";
+        pusch_groupAssignment      			      = 0;
+        pusch_sequenceHoppingEnabled		   	      = "DISABLE";
+        pusch_nDMRS1                                       = 1;
+        phich_duration                                     = "NORMAL";
+        phich_resource                                     = "ONESIXTH";
+        srs_enable                                         = "DISABLE";
+        /*  srs_BandwidthConfig                                =;
+        srs_SubframeConfig                                 =;
+        srs_ackNackST                                      =;
+        srs_MaxUpPts                                       =;*/
+
+        pusch_p0_Nominal                                   = -90;
+        pusch_alpha                                        = "AL1";
+        pucch_p0_Nominal                                   = -96;
+        msg3_delta_Preamble                                = 6;
+        pucch_deltaF_Format1                               = "deltaF2";
+        pucch_deltaF_Format1b                              = "deltaF3";
+        pucch_deltaF_Format2                               = "deltaF0";
+        pucch_deltaF_Format2a                              = "deltaF0";
+        pucch_deltaF_Format2b		    	      = "deltaF0";
+
+        rach_numberOfRA_Preambles                          = 64;
+        rach_preamblesGroupAConfig                         = "DISABLE";
+        /*
+        rach_sizeOfRA_PreamblesGroupA                      = ;
+        rach_messageSizeGroupA                             = ;
+        rach_messagePowerOffsetGroupB                      = ;
+        */
+        rach_powerRampingStep                              = 4;
+        rach_preambleInitialReceivedTargetPower            = -104;
+        rach_preambleTransMax                              = 10;
+        rach_raResponseWindowSize                          = 10;
+        rach_macContentionResolutionTimer                  = 48;
+        rach_maxHARQ_Msg3Tx                                = 4;
+
+        pcch_default_PagingCycle                           = 128;
+        pcch_nB                                            = "oneT";
+        bcch_modificationPeriodCoeff			      = 2;
+        ue_TimersAndConstants_t300			      = 1000;
+        ue_TimersAndConstants_t301			      = 1000;
+        ue_TimersAndConstants_t310			      = 1000;
+        ue_TimersAndConstants_t311			      = 10000;
+        ue_TimersAndConstants_n310			      = 20;
+        ue_TimersAndConstants_n311			      = 1;
+
+	ue_TransmissionMode				      = 1;
+      }
+    );
+
+    srb1_parameters :
+    {
+        # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+        timer_poll_retransmit    = 80;
+
+        # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+        timer_reordering         = 35;
+
+        # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+        timer_status_prohibit    = 0;
+
+        # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+        poll_pdu                 =  4;
+
+        # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+        poll_byte                =  99999;
+
+        # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+        max_retx_threshold       =  4;
+    }
+
+    # ------- SCTP definitions
+    SCTP :
+    {
+        # Number of streams to use in input/output
+        SCTP_INSTREAMS  = 2;
+        SCTP_OUTSTREAMS = 2;
+    };
+
+    ////////// MME parameters:
+
+    mme_ip_address      = ( { ipv4       = "192.168.12.26";
+                              ipv6       = "192:168:30::17";
+                              active     = "yes";
+                              preference = "ipv4";
+                            }
+                          );
+
+    NETWORK_INTERFACES :
+    {
+
+        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth6";
+        ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.12.82/24";
+        ENB_INTERFACE_NAME_FOR_S1U               = "eth6";
+        ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.12.82/24";
+        ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
+    };
+
+    log_config :
+    {
+      global_log_level                      ="info";
+      global_log_verbosity                  ="medium";
+      hw_log_level                          ="info";
+      hw_log_verbosity                      ="medium";
+      phy_log_level                         ="info";
+      phy_log_verbosity                     ="medium";
+      mac_log_level                         ="info";
+      mac_log_verbosity                     ="high";
+      rlc_log_level                         ="info";
+      rlc_log_verbosity                     ="medium";
+      pdcp_log_level                        ="info";
+      pdcp_log_verbosity                    ="medium";
+      rrc_log_level                         ="info";
+      rrc_log_verbosity                     ="medium";
+   };
+  }
+);
diff --git a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf
new file mode 100644
index 0000000000..0773f9c267
--- /dev/null
+++ b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.20MHz.conf
@@ -0,0 +1,175 @@
+Active_eNBs = ( "eNB_Eurecom_LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+    ////////// Identification parameters:
+    eNB_ID    =  0xe00;
+
+    cell_type =  "CELL_MACRO_ENB";
+
+    eNB_name  =  "eNB_Eurecom_LTEBox";
+
+    // Tracking area code, 0x0000 and 0xfffe are reserved values
+    tracking_area_code  =  "1";
+
+    mobile_country_code =  "208";
+
+    mobile_network_code =  "92";
+
+       ////////// Physical parameters:
+
+    component_carriers = (
+      {
+        node_function                                         = "eNodeB_3GPP";
+	node_timing                                           = "synch_to_ext_device";
+	node_synch_ref                                        = 0;
+        frame_type					      = "TDD";
+        tdd_config 					      = 3;
+        tdd_config_s            			      = 0;
+        prefix_type             			      = "NORMAL";
+        eutra_band              			      = 38;
+        downlink_frequency      			      = 2580000000L;
+        uplink_frequency_offset 			      = 0;
+        Nid_cell					      = 0;
+        N_RB_DL                 			      = 100;
+        Nid_cell_mbsfn          			      = 0;
+        nb_antenna_ports          			      = 1;
+        nb_antennas_tx          			      = 1;
+        nb_antennas_rx          			      = 1;
+        tx_gain                                            = 90;
+        rx_gain                                            = 125;
+        prach_root              			      = 0;
+        prach_config_index      			      = 0;
+        prach_high_speed        			      = "DISABLE";
+        prach_zero_correlation  			      = 1;
+        prach_freq_offset       			      = 2;
+        pucch_delta_shift       			      = 1;
+        pucch_nRB_CQI           			      = 1;
+        pucch_nCS_AN            			      = 0;
+        pucch_n1_AN             			      = 32;
+        pdsch_referenceSignalPower 			      = -24;
+        pdsch_p_b                  			      = 0;
+        pusch_n_SB                 			      = 1;
+        pusch_enable64QAM          			      = "DISABLE";
+        pusch_hoppingMode                                  = "interSubFrame";
+        pusch_hoppingOffset                                = 0;
+        pusch_groupHoppingEnabled  			      = "ENABLE";
+        pusch_groupAssignment      			      = 0;
+        pusch_sequenceHoppingEnabled		   	      = "DISABLE";
+        pusch_nDMRS1                                       = 1;
+        phich_duration                                     = "NORMAL";
+        phich_resource                                     = "ONESIXTH";
+        srs_enable                                         = "DISABLE";
+        /*  srs_BandwidthConfig                                =;
+        srs_SubframeConfig                                 =;
+        srs_ackNackST                                      =;
+        srs_MaxUpPts                                       =;*/
+
+        pusch_p0_Nominal                                   = -90;
+        pusch_alpha                                        = "AL1";
+        pucch_p0_Nominal                                   = -96;
+        msg3_delta_Preamble                                = 6;
+        pucch_deltaF_Format1                               = "deltaF2";
+        pucch_deltaF_Format1b                              = "deltaF3";
+        pucch_deltaF_Format2                               = "deltaF0";
+        pucch_deltaF_Format2a                              = "deltaF0";
+        pucch_deltaF_Format2b		    	      = "deltaF0";
+
+        rach_numberOfRA_Preambles                          = 64;
+        rach_preamblesGroupAConfig                         = "DISABLE";
+        /*
+        rach_sizeOfRA_PreamblesGroupA                      = ;
+        rach_messageSizeGroupA                             = ;
+        rach_messagePowerOffsetGroupB                      = ;
+        */
+        rach_powerRampingStep                              = 4;
+        rach_preambleInitialReceivedTargetPower            = -104;
+        rach_preambleTransMax                              = 10;
+        rach_raResponseWindowSize                          = 10;
+        rach_macContentionResolutionTimer                  = 48;
+        rach_maxHARQ_Msg3Tx                                = 4;
+
+        pcch_default_PagingCycle                           = 128;
+        pcch_nB                                            = "oneT";
+        bcch_modificationPeriodCoeff			      = 2;
+        ue_TimersAndConstants_t300			      = 1000;
+        ue_TimersAndConstants_t301			      = 1000;
+        ue_TimersAndConstants_t310			      = 1000;
+        ue_TimersAndConstants_t311			      = 10000;
+        ue_TimersAndConstants_n310			      = 20;
+        ue_TimersAndConstants_n311			      = 1;
+
+	ue_TransmissionMode				      = 1;
+      }
+    );
+
+    srb1_parameters :
+    {
+        # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+        timer_poll_retransmit    = 80;
+
+        # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+        timer_reordering         = 35;
+
+        # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+        timer_status_prohibit    = 0;
+
+        # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+        poll_pdu                 =  4;
+
+        # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+        poll_byte                =  99999;
+
+        # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+        max_retx_threshold       =  4;
+    }
+
+    # ------- SCTP definitions
+    SCTP :
+    {
+        # Number of streams to use in input/output
+        SCTP_INSTREAMS  = 2;
+        SCTP_OUTSTREAMS = 2;
+    };
+
+    ////////// MME parameters:
+
+    mme_ip_address      = ( { ipv4       = "192.168.12.26";
+                              ipv6       = "192:168:30::17";
+                              active     = "yes";
+                              preference = "ipv4";
+                            }
+                          );
+
+    NETWORK_INTERFACES :
+    {
+
+        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth6";
+        ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.12.82/24";
+        ENB_INTERFACE_NAME_FOR_S1U               = "eth6";
+        ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.12.82/24";
+        ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
+    };
+
+    log_config :
+    {
+      global_log_level                      ="info";
+      global_log_verbosity                  ="medium";
+      hw_log_level                          ="info";
+      hw_log_verbosity                      ="medium";
+      phy_log_level                         ="info";
+      phy_log_verbosity                     ="medium";
+      mac_log_level                         ="info";
+      mac_log_verbosity                     ="high";
+      rlc_log_level                         ="info";
+      rlc_log_verbosity                     ="medium";
+      pdcp_log_level                        ="info";
+      pdcp_log_verbosity                    ="medium";
+      rrc_log_level                         ="info";
+      rrc_log_verbosity                     ="medium";
+   };
+  }
+);
diff --git a/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf
new file mode 100644
index 0000000000..024be3b775
--- /dev/null
+++ b/cmake_targets/autotests/v2/config/enb.band38.tm1.usrpb210.tdd.5MHz.conf
@@ -0,0 +1,175 @@
+Active_eNBs = ( "eNB_Eurecom_LTEBox");
+# Asn1_verbosity, choice in: none, info, annoying
+Asn1_verbosity = "none";
+
+eNBs =
+(
+ {
+    ////////// Identification parameters:
+    eNB_ID    =  0xe00;
+
+    cell_type =  "CELL_MACRO_ENB";
+
+    eNB_name  =  "eNB_Eurecom_LTEBox";
+
+    // Tracking area code, 0x0000 and 0xfffe are reserved values
+    tracking_area_code  =  "1";
+
+    mobile_country_code =  "208";
+
+    mobile_network_code =  "92";
+
+       ////////// Physical parameters:
+
+    component_carriers = (
+      {
+        node_function                                         = "eNodeB_3GPP";
+	node_timing                                           = "synch_to_ext_device";
+	node_synch_ref                                        = 0;
+        frame_type					      = "TDD";
+        tdd_config 					      = 3;
+        tdd_config_s            			      = 0;
+        prefix_type             			      = "NORMAL";
+        eutra_band              			      = 38;
+        downlink_frequency      			      = 2580000000L;
+        uplink_frequency_offset 			      = 0;
+        Nid_cell					      = 0;
+        N_RB_DL                 			      = 25;
+        Nid_cell_mbsfn          			      = 0;
+        nb_antenna_ports          			      = 1;
+        nb_antennas_tx          			      = 1;
+        nb_antennas_rx          			      = 1;
+        tx_gain                                            = 90;
+        rx_gain                                            = 125;
+        prach_root              			      = 0;
+        prach_config_index      			      = 0;
+        prach_high_speed        			      = "DISABLE";
+        prach_zero_correlation  			      = 1;
+        prach_freq_offset       			      = 2;
+        pucch_delta_shift       			      = 1;
+        pucch_nRB_CQI           			      = 1;
+        pucch_nCS_AN            			      = 0;
+        pucch_n1_AN             			      = 32;
+        pdsch_referenceSignalPower 			      = -24;
+        pdsch_p_b                  			      = 0;
+        pusch_n_SB                 			      = 1;
+        pusch_enable64QAM          			      = "DISABLE";
+        pusch_hoppingMode                                  = "interSubFrame";
+        pusch_hoppingOffset                                = 0;
+        pusch_groupHoppingEnabled  			      = "ENABLE";
+        pusch_groupAssignment      			      = 0;
+        pusch_sequenceHoppingEnabled		   	      = "DISABLE";
+        pusch_nDMRS1                                       = 1;
+        phich_duration                                     = "NORMAL";
+        phich_resource                                     = "ONESIXTH";
+        srs_enable                                         = "DISABLE";
+        /*  srs_BandwidthConfig                                =;
+        srs_SubframeConfig                                 =;
+        srs_ackNackST                                      =;
+        srs_MaxUpPts                                       =;*/
+
+        pusch_p0_Nominal                                   = -90;
+        pusch_alpha                                        = "AL1";
+        pucch_p0_Nominal                                   = -96;
+        msg3_delta_Preamble                                = 6;
+        pucch_deltaF_Format1                               = "deltaF2";
+        pucch_deltaF_Format1b                              = "deltaF3";
+        pucch_deltaF_Format2                               = "deltaF0";
+        pucch_deltaF_Format2a                              = "deltaF0";
+        pucch_deltaF_Format2b		    	      = "deltaF0";
+
+        rach_numberOfRA_Preambles                          = 64;
+        rach_preamblesGroupAConfig                         = "DISABLE";
+        /*
+        rach_sizeOfRA_PreamblesGroupA                      = ;
+        rach_messageSizeGroupA                             = ;
+        rach_messagePowerOffsetGroupB                      = ;
+        */
+        rach_powerRampingStep                              = 4;
+        rach_preambleInitialReceivedTargetPower            = -104;
+        rach_preambleTransMax                              = 10;
+        rach_raResponseWindowSize                          = 10;
+        rach_macContentionResolutionTimer                  = 48;
+        rach_maxHARQ_Msg3Tx                                = 4;
+
+        pcch_default_PagingCycle                           = 128;
+        pcch_nB                                            = "oneT";
+        bcch_modificationPeriodCoeff			      = 2;
+        ue_TimersAndConstants_t300			      = 1000;
+        ue_TimersAndConstants_t301			      = 1000;
+        ue_TimersAndConstants_t310			      = 1000;
+        ue_TimersAndConstants_t311			      = 10000;
+        ue_TimersAndConstants_n310			      = 20;
+        ue_TimersAndConstants_n311			      = 1;
+
+	ue_TransmissionMode				      = 1;
+      }
+    );
+
+    srb1_parameters :
+    {
+        # timer_poll_retransmit = (ms) [5, 10, 15, 20,... 250, 300, 350, ... 500]
+        timer_poll_retransmit    = 80;
+
+        # timer_reordering = (ms) [0,5, ... 100, 110, 120, ... ,200]
+        timer_reordering         = 35;
+
+        # timer_reordering = (ms) [0,5, ... 250, 300, 350, ... ,500]
+        timer_status_prohibit    = 0;
+
+        # poll_pdu = [4, 8, 16, 32 , 64, 128, 256, infinity(>10000)]
+        poll_pdu                 =  4;
+
+        # poll_byte = (kB) [25,50,75,100,125,250,375,500,750,1000,1250,1500,2000,3000,infinity(>10000)]
+        poll_byte                =  99999;
+
+        # max_retx_threshold = [1, 2, 3, 4 , 6, 8, 16, 32]
+        max_retx_threshold       =  4;
+    }
+
+    # ------- SCTP definitions
+    SCTP :
+    {
+        # Number of streams to use in input/output
+        SCTP_INSTREAMS  = 2;
+        SCTP_OUTSTREAMS = 2;
+    };
+
+    ////////// MME parameters:
+
+    mme_ip_address      = ( { ipv4       = "192.168.12.26";
+                              ipv6       = "192:168:30::17";
+                              active     = "yes";
+                              preference = "ipv4";
+                            }
+                          );
+
+    NETWORK_INTERFACES :
+    {
+
+        ENB_INTERFACE_NAME_FOR_S1_MME            = "eth6";
+        ENB_IPV4_ADDRESS_FOR_S1_MME              = "192.168.12.82/24";
+        ENB_INTERFACE_NAME_FOR_S1U               = "eth6";
+        ENB_IPV4_ADDRESS_FOR_S1U                 = "192.168.12.82/24";
+        ENB_PORT_FOR_S1U                         = 2152; # Spec 2152
+    };
+
+    log_config :
+    {
+      global_log_level                      ="info";
+      global_log_verbosity                  ="medium";
+      hw_log_level                          ="info";
+      hw_log_verbosity                      ="medium";
+      phy_log_level                         ="info";
+      phy_log_verbosity                     ="medium";
+      mac_log_level                         ="info";
+      mac_log_verbosity                     ="high";
+      rlc_log_level                         ="info";
+      rlc_log_verbosity                     ="medium";
+      pdcp_log_level                        ="info";
+      pdcp_log_verbosity                    ="medium";
+      rrc_log_level                         ="info";
+      rrc_log_verbosity                     ="medium";
+   };
+  }
+);
diff --git a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.10MHz.conf b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.10MHz.conf
similarity index 100%
rename from cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.10MHz.conf
rename to cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.10MHz.conf
diff --git a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.20MHz.conf b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.20MHz.conf
similarity index 100%
rename from cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.20MHz.conf
rename to cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.20MHz.conf
diff --git a/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.5MHz.conf b/cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.5MHz.conf
similarity index 100%
rename from cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.5MHz.conf
rename to cmake_targets/autotests/v2/config/enb.band7.tm1.usrpb210.fdd.5MHz.conf
diff --git a/cmake_targets/autotests/v2/main.py b/cmake_targets/autotests/v2/main.py
index 6cf3b97c36..14e5442720 100644
--- a/cmake_targets/autotests/v2/main.py
+++ b/cmake_targets/autotests/v2/main.py
@@ -283,27 +283,41 @@ machine_list.wait_all_free()
 tests = {
   'b210' : {
     'alu' : {
-      '5' : {
-        'bandrich' : {
-          'tcp' : { 'ul': False, 'dl' : False },
-          'udp' : { 'ul': False, 'dl' : False }},
-        'sony' : {
-          'tcp' : { 'ul': False, 'dl' : False },
-          'udp' : { 'ul': False, 'dl' : False }}},
-      '10' : {
-        'bandrich' : {
-          'tcp' : { 'ul': False, 'dl' : False },
-          'udp' : { 'ul': False, 'dl' : False }},
-        'sony' : {
-          'tcp' : { 'ul': False, 'dl' : False },
-          'udp' : { 'ul': False, 'dl' : False }}},
-      '20' : {
-        'bandrich' : {
-          'tcp' : { 'ul': False, 'dl' : False },
-          'udp' : { 'ul': False, 'dl' : False }},
-        'sony' : {
-          'tcp' : { 'ul': False, 'dl' : False },
-          'udp' : { 'ul': False, 'dl' : False }}}},
+      'fdd' : {
+        '5' : {
+          'bandrich' : {
+            'tcp' : { 'ul': False, 'dl' : False },
+            'udp' : { 'ul': False, 'dl' : False }},
+          'sony' : {
+            'tcp' : { 'ul': False, 'dl' : False },
+            'udp' : { 'ul': False, 'dl' : False }}},
+        '10' : {
+          'bandrich' : {
+            'tcp' : { 'ul': False, 'dl' : False },
+            'udp' : { 'ul': False, 'dl' : False }},
+          'sony' : {
+            'tcp' : { 'ul': False, 'dl' : False },
+            'udp' : { 'ul': False, 'dl' : False }}},
+        '20' : {
+          'bandrich' : {
+            'tcp' : { 'ul': False, 'dl' : False },
+            'udp' : { 'ul': False, 'dl' : False }},
+          'sony' : {
+            'tcp' : { 'ul': False, 'dl' : False },
+            'udp' : { 'ul': False, 'dl' : False }}}},
+      'tdd' : {
+        '5' : {
+          '3276' : {
+            'tcp' : { 'ul': False, 'dl' : False },
+            'udp' : { 'ul': False, 'dl' : False }}},
+        '10' : {
+          '3276' : {
+            'tcp' : { 'ul': False, 'dl' : False },
+            'udp' : { 'ul': False, 'dl' : False }}},
+        '20' : {
+          '3276' : {
+            'tcp' : { 'ul': False, 'dl' : False },
+            'udp' : { 'ul': False, 'dl' : False }}}}},
     'openair-cn' : {}
   },
   'x310' : {
@@ -321,24 +335,24 @@ for test in todo_tests:
     todo_tests_ids.append(test.get('id'))
 
 for test in todo_tests_ids:
-  if test=='015500':tests['b210']['alu'][ '5']['bandrich']['udp']['ul']=True
-  if test=='015501':tests['b210']['alu']['10']['bandrich']['udp']['ul']=True
-  if test=='015502':tests['b210']['alu']['20']['bandrich']['udp']['ul']=True
-  if test=='015503':tests['b210']['alu'][ '5']['bandrich']['udp']['dl']=True
-  if test=='015504':tests['b210']['alu']['10']['bandrich']['udp']['dl']=True
-  if test=='015505':tests['b210']['alu']['20']['bandrich']['udp']['dl']=True
+  if test=='015500':tests['b210']['alu']['fdd'][ '5']['bandrich']['udp']['ul']=True
+  if test=='015501':tests['b210']['alu']['fdd']['10']['bandrich']['udp']['ul']=True
+  if test=='015502':tests['b210']['alu']['fdd']['20']['bandrich']['udp']['ul']=True
+  if test=='015503':tests['b210']['alu']['fdd'][ '5']['bandrich']['udp']['dl']=True
+  if test=='015504':tests['b210']['alu']['fdd']['10']['bandrich']['udp']['dl']=True
+  if test=='015505':tests['b210']['alu']['fdd']['20']['bandrich']['udp']['dl']=True
   if test=='015506':log('WARNING: skip test ' + test) #TODO
   if test=='015507':log('WARNING: skip test ' + test) #TODO
   if test=='015508':log('WARNING: skip test ' + test) #TODO
   if test=='015509':log('WARNING: skip test ' + test) #TODO
   if test=='015510':log('WARNING: skip test ' + test) #TODO
   if test=='015511':log('WARNING: skip test ' + test) #TODO
-  if test=='015512':tests['b210']['alu'][ '5']['bandrich']['tcp']['ul']=True
-  if test=='015513':tests['b210']['alu']['10']['bandrich']['tcp']['ul']=True
-  if test=='015514':tests['b210']['alu']['20']['bandrich']['tcp']['ul']=True
-  if test=='015515':tests['b210']['alu'][ '5']['bandrich']['tcp']['dl']=True
-  if test=='015516':tests['b210']['alu']['10']['bandrich']['tcp']['dl']=True
-  if test=='015517':tests['b210']['alu']['20']['bandrich']['tcp']['dl']=True
+  if test=='015512':tests['b210']['alu']['fdd'][ '5']['bandrich']['tcp']['ul']=True
+  if test=='015513':tests['b210']['alu']['fdd']['10']['bandrich']['tcp']['ul']=True
+  if test=='015514':tests['b210']['alu']['fdd']['20']['bandrich']['tcp']['ul']=True
+  if test=='015515':tests['b210']['alu']['fdd'][ '5']['bandrich']['tcp']['dl']=True
+  if test=='015516':tests['b210']['alu']['fdd']['10']['bandrich']['tcp']['dl']=True
+  if test=='015517':tests['b210']['alu']['fdd']['20']['bandrich']['tcp']['dl']=True
   if test=='015518':log('WARNING: skip test ' + test) #TODO
   if test=='015519':log('WARNING: skip test ' + test) #TODO
   if test=='015520':log('WARNING: skip test ' + test) #TODO
@@ -441,6 +455,31 @@ for test in todo_tests_ids:
   if test=='018504':log('WARNING: skip test ' + test) #TODO
   if test=='018505':log('WARNING: skip test ' + test) #TODO
 
+  if test=='018600':tests['b210']['alu']['tdd'][ '5']['3276']['udp']['ul']=True
+  if test=='018601':tests['b210']['alu']['tdd']['10']['3276']['udp']['ul']=True
+  if test=='018602':tests['b210']['alu']['tdd']['20']['3276']['udp']['ul']=True
+  if test=='018603':tests['b210']['alu']['tdd'][ '5']['3276']['udp']['dl']=True
+  if test=='018604':tests['b210']['alu']['tdd']['10']['3276']['udp']['dl']=True
+  if test=='018605':tests['b210']['alu']['tdd']['20']['3276']['udp']['dl']=True
+  if test=='018606':log('WARNING: skip test ' + test) #TODO
+  if test=='018607':log('WARNING: skip test ' + test) #TODO
+  if test=='018608':log('WARNING: skip test ' + test) #TODO
+  if test=='018609':log('WARNING: skip test ' + test) #TODO
+  if test=='018610':log('WARNING: skip test ' + test) #TODO
+  if test=='018611':log('WARNING: skip test ' + test) #TODO
+  if test=='018612':tests['b210']['alu']['tdd'][ '5']['3276']['tcp']['ul']=True
+  if test=='018613':tests['b210']['alu']['tdd']['10']['3276']['tcp']['ul']=True
+  if test=='018614':tests['b210']['alu']['tdd']['20']['3276']['tcp']['ul']=True
+  if test=='018615':tests['b210']['alu']['tdd'][ '5']['3276']['tcp']['dl']=True
+  if test=='018616':tests['b210']['alu']['tdd']['10']['3276']['tcp']['dl']=True
+  if test=='018617':tests['b210']['alu']['tdd']['20']['3276']['tcp']['dl']=True
+  if test=='018618':log('WARNING: skip test ' + test) #TODO
+  if test=='018619':log('WARNING: skip test ' + test) #TODO
+  if test=='018620':log('WARNING: skip test ' + test) #TODO
+  if test=='018621':log('WARNING: skip test ' + test) #TODO
+  if test=='018622':log('WARNING: skip test ' + test) #TODO
+  if test=='018623':log('WARNING: skip test ' + test) #TODO
+
   if test=='025500':log('WARNING: skip test ' + test) #TODO
   if test=='025501':log('WARNING: skip test ' + test) #TODO
   if test=='025502':log('WARNING: skip test ' + test) #TODO
-- 
GitLab