<p>Pau Espin Pedrol <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/10667">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  Pau Espin Pedrol: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">osmo-bts-trx: Big refactor and cleanup of osmo-trx related code<br><br>* This commit is a preparation for future commits to add support for<br>different osmo-trx devices and backends like osmo-trx-lms.<br><br>* Drop deprecated osmo-trx-* cmd line params and use VTY cfg to set them.<br><br>* As number of osmo-trx related osmo-gsm-tester attributes grow, group<br>them togther in an "osmo_trx" dictionary.<br><br>Change-Id: I77d29413c9e3b600b796627ba366f80c3281b7e1<br>---<br>M example/defaults.conf<br>M example/resources.conf.prod<br>M example/resources.conf.rnd<br>M selftest/conf/resources.conf<br>M selftest/resource_test.ok<br>M selftest/suite_test.ok<br>M selftest/suite_test/resources.conf<br>M src/osmo_gsm_tester/bts_osmotrx.py<br>M src/osmo_gsm_tester/resource.py<br>M src/osmo_gsm_tester/schema.py<br>M src/osmo_gsm_tester/templates/osmo-bts-trx.cfg.tmpl<br>M src/osmo_gsm_tester/templates/osmo-trx.cfg.tmpl<br>12 files changed, 201 insertions(+), 82 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/example/defaults.conf b/example/defaults.conf</span><br><span>index 5bdf257..fc4c324 100644</span><br><span>--- a/example/defaults.conf</span><br><span>+++ b/example/defaults.conf</span><br><span>@@ -75,3 +75,8 @@</span><br><span>     - {}</span><br><span>     - phys_chan_config: TCH/F # nanobts only supports PDCH in TRX0.</span><br><span>     - phys_chan_config: TCH/F</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+osmo_trx:</span><br><span style="color: hsl(120, 100%, 40%);">+  type: uhd</span><br><span style="color: hsl(120, 100%, 40%);">+  launch_trx: true</span><br><span style="color: hsl(120, 100%, 40%);">+  clock_reference: internal</span><br><span>diff --git a/example/resources.conf.prod b/example/resources.conf.prod</span><br><span>index 31a737c..41ab009 100644</span><br><span>--- a/example/resources.conf.prod</span><br><span>+++ b/example/resources.conf.prod</span><br><span>@@ -24,16 +24,21 @@</span><br><span>   ipa_unit_id: 6</span><br><span>   addr: 10.42.42.50</span><br><span>   band: GSM-1800</span><br><span style="color: hsl(0, 100%, 40%);">-  launch_trx: true</span><br><span>   ciphers: [a5_0, a5_1]</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_trx:</span><br><span style="color: hsl(120, 100%, 40%);">+    launch_trx: true</span><br><span style="color: hsl(120, 100%, 40%);">+    clock_reference: external</span><br><span> </span><br><span> - label: sysmoCell 5000</span><br><span>   type: osmo-bts-trx</span><br><span>   ipa_unit_id: 7</span><br><span>   addr: 10.42.42.51</span><br><span>   band: GSM-1800</span><br><span style="color: hsl(0, 100%, 40%);">-  trx_remote_ip: 10.42.42.112</span><br><span>   ciphers: [a5_0, a5_1]</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_trx:</span><br><span style="color: hsl(120, 100%, 40%);">+        launch_trx: false</span><br><span style="color: hsl(120, 100%, 40%);">+        clock_reference: external</span><br><span style="color: hsl(120, 100%, 40%);">+        trx_ip: 10.42.42.112</span><br><span> </span><br><span> - label: OCTBTS 3500</span><br><span>   type: osmo-bts-octphy</span><br><span>diff --git a/example/resources.conf.rnd b/example/resources.conf.rnd</span><br><span>index 4e5c173..74b8e3e 100644</span><br><span>--- a/example/resources.conf.rnd</span><br><span>+++ b/example/resources.conf.rnd</span><br><span>@@ -24,7 +24,10 @@</span><br><span>   ipa_unit_id: 6</span><br><span>   addr: 10.42.42.50</span><br><span>   band: GSM-1800</span><br><span style="color: hsl(0, 100%, 40%);">-  launch_trx: true</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_trx:</span><br><span style="color: hsl(120, 100%, 40%);">+    type: uhd</span><br><span style="color: hsl(120, 100%, 40%);">+    launch_trx: true</span><br><span style="color: hsl(120, 100%, 40%);">+    clock_reference: external</span><br><span>   ciphers: [a5_0, a5_1]</span><br><span> </span><br><span> - label: NanoBTS-ONW-1900</span><br><span>diff --git a/selftest/conf/resources.conf b/selftest/conf/resources.conf</span><br><span>index 51f4abc..84d0ab9 100644</span><br><span>--- a/selftest/conf/resources.conf</span><br><span>+++ b/selftest/conf/resources.conf</span><br><span>@@ -23,7 +23,9 @@</span><br><span>   ipa_unit_id: 6</span><br><span>   addr: 10.42.42.50</span><br><span>   band: GSM-1800</span><br><span style="color: hsl(0, 100%, 40%);">-  launch_trx: true</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_trx:</span><br><span style="color: hsl(120, 100%, 40%);">+    launch_trx: true</span><br><span style="color: hsl(120, 100%, 40%);">+    clock_reference: external</span><br><span>   ciphers:</span><br><span>   - 'a5_0'</span><br><span>   - 'a5_1'</span><br><span>@@ -33,7 +35,10 @@</span><br><span>   ipa_unit_id: 7</span><br><span>   addr: 10.42.42.51</span><br><span>   band: GSM-1800</span><br><span style="color: hsl(0, 100%, 40%);">-  trx_remote_ip: 10.42.42.112</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_trx:</span><br><span style="color: hsl(120, 100%, 40%);">+    launch_trx: false</span><br><span style="color: hsl(120, 100%, 40%);">+    clock_reference: external</span><br><span style="color: hsl(120, 100%, 40%);">+    trx_ip: 10.42.42.112  </span><br><span>   ciphers:</span><br><span>   - 'a5_0'</span><br><span>   - 'a5_1'</span><br><span>diff --git a/selftest/resource_test.ok b/selftest/resource_test.ok</span><br><span>index 3ec922b..08989a2 100644</span><br><span>--- a/selftest/resource_test.ok</span><br><span>+++ b/selftest/resource_test.ok</span><br><span>@@ -54,21 +54,23 @@</span><br><span>           'ipa_unit_id': '1',</span><br><span>           'label': 'sysmoBTS 1002',</span><br><span>           'type': 'osmo-bts-sysmo'},</span><br><span style="color: hsl(0, 100%, 40%);">-         {'_hash': '6a9c9fbd364e1563a5b9f0826030a7888fd19575',</span><br><span style="color: hsl(120, 100%, 40%);">+         {'_hash': '2158317d5e0055070e7174c2498dedf53a2957e9',</span><br><span>           'addr': '10.42.42.50',</span><br><span>           'band': 'GSM-1800',</span><br><span>           'ciphers': ['a5_0', 'a5_1'],</span><br><span>           'ipa_unit_id': '6',</span><br><span>           'label': 'Ettus B200',</span><br><span style="color: hsl(0, 100%, 40%);">-          'launch_trx': 'True',</span><br><span style="color: hsl(120, 100%, 40%);">+          'osmo_trx': {'clock_reference': 'external', 'launch_trx': 'True'},</span><br><span>           'type': 'osmo-bts-trx'},</span><br><span style="color: hsl(0, 100%, 40%);">-         {'_hash': 'e50fd38e3bfe8039ac13bc315bc84f46110b7443',</span><br><span style="color: hsl(120, 100%, 40%);">+         {'_hash': 'f964ba5fe7a37b97ec3e0c4ef21c9231a19de45d',</span><br><span>           'addr': '10.42.42.51',</span><br><span>           'band': 'GSM-1800',</span><br><span>           'ciphers': ['a5_0', 'a5_1'],</span><br><span>           'ipa_unit_id': '7',</span><br><span>           'label': 'sysmoCell 5000',</span><br><span style="color: hsl(0, 100%, 40%);">-          'trx_remote_ip': '10.42.42.112',</span><br><span style="color: hsl(120, 100%, 40%);">+          'osmo_trx': {'clock_reference': 'external',</span><br><span style="color: hsl(120, 100%, 40%);">+                       'launch_trx': 'False',</span><br><span style="color: hsl(120, 100%, 40%);">+                       'trx_ip': '10.42.42.112'},</span><br><span>           'type': 'osmo-bts-trx'}],</span><br><span>  'ip_address': [{'_hash': 'fd103b22c7cf2480d609150e06f4bbd92ac78d8c',</span><br><span>                  'addr': '10.42.42.2'},</span><br><span>@@ -129,7 +131,7 @@</span><br><span>   ipa_unit_id: '1'</span><br><span>   label: sysmoBTS 1002</span><br><span>   type: osmo-bts-sysmo</span><br><span style="color: hsl(0, 100%, 40%);">-- _hash: 6a9c9fbd364e1563a5b9f0826030a7888fd19575</span><br><span style="color: hsl(120, 100%, 40%);">+- _hash: 2158317d5e0055070e7174c2498dedf53a2957e9</span><br><span>   addr: 10.42.42.50</span><br><span>   band: GSM-1800</span><br><span>   ciphers:</span><br><span>@@ -137,7 +139,9 @@</span><br><span>   - a5_1</span><br><span>   ipa_unit_id: '6'</span><br><span>   label: Ettus B200</span><br><span style="color: hsl(0, 100%, 40%);">-  launch_trx: 'True'</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_trx:</span><br><span style="color: hsl(120, 100%, 40%);">+    clock_reference: external</span><br><span style="color: hsl(120, 100%, 40%);">+    launch_trx: 'True'</span><br><span>   type: osmo-bts-trx</span><br><span> --- testowner: Reserving 1 x ip_address (candidates: 5)</span><br><span> --- testowner: DBG: Picked - _hash: fd103b22c7cf2480d609150e06f4bbd92ac78d8c</span><br><span>@@ -183,7 +187,7 @@</span><br><span>   ipa_unit_id: '1'</span><br><span>   label: sysmoBTS 1002</span><br><span>   type: osmo-bts-sysmo</span><br><span style="color: hsl(0, 100%, 40%);">-- _hash: 6a9c9fbd364e1563a5b9f0826030a7888fd19575</span><br><span style="color: hsl(120, 100%, 40%);">+- _hash: 2158317d5e0055070e7174c2498dedf53a2957e9</span><br><span>   _reserved_by: testowner-123-1490837279</span><br><span>   addr: 10.42.42.50</span><br><span>   band: GSM-1800</span><br><span>@@ -192,7 +196,9 @@</span><br><span>   - a5_1</span><br><span>   ipa_unit_id: '6'</span><br><span>   label: Ettus B200</span><br><span style="color: hsl(0, 100%, 40%);">-  launch_trx: 'True'</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_trx:</span><br><span style="color: hsl(120, 100%, 40%);">+    clock_reference: external</span><br><span style="color: hsl(120, 100%, 40%);">+    launch_trx: 'True'</span><br><span>   type: osmo-bts-trx</span><br><span> ip_address:</span><br><span> - _hash: fd103b22c7cf2480d609150e06f4bbd92ac78d8c</span><br><span>@@ -240,15 +246,15 @@</span><br><span>           'ipa_unit_id': '1',</span><br><span>           'label': 'sysmoBTS 1002',</span><br><span>           'type': 'osmo-bts-sysmo'},</span><br><span style="color: hsl(0, 100%, 40%);">-         {'_hash': '6a9c9fbd364e1563a5b9f0826030a7888fd19575',</span><br><span style="color: hsl(120, 100%, 40%);">+         {'_hash': '2158317d5e0055070e7174c2498dedf53a2957e9',</span><br><span>           '_reserved_by': 'testowner-123-1490837279',</span><br><span>           'addr': '10.42.42.50',</span><br><span>           'band': 'GSM-1800',</span><br><span>           'ciphers': ['a5_0', 'a5_1'],</span><br><span>           'ipa_unit_id': '6',</span><br><span>           'label': 'Ettus B200',</span><br><span style="color: hsl(0, 100%, 40%);">-          'launch_trx': 'True',</span><br><span>           'num_trx': 2,</span><br><span style="color: hsl(120, 100%, 40%);">+          'osmo_trx': {'clock_reference': 'external', 'launch_trx': 'True'},</span><br><span>           'type': 'osmo-bts-trx'}],</span><br><span>  'ip_address': [{'_hash': 'fd103b22c7cf2480d609150e06f4bbd92ac78d8c',</span><br><span>                  '_reserved_by': 'testowner-123-1490837279',</span><br><span>diff --git a/selftest/suite_test.ok b/selftest/suite_test.ok</span><br><span>index b792b57..908f24f 100644</span><br><span>--- a/selftest/suite_test.ok</span><br><span>+++ b/selftest/suite_test.ok</span><br><span>@@ -37,28 +37,34 @@</span><br><span> tst test_suite: DBG: {combining='modifiers'}</span><br><span> tst {combining_scenarios='modifiers'}: DBG: {definition_conf={}}  [test_suite↪{combining_scenarios='modifiers'}]</span><br><span> tst test_suite: Reserving 3 x bts (candidates: 6)</span><br><span style="color: hsl(0, 100%, 40%);">-tst test_suite: DBG: Picked - _hash: 076ff06a4b719e61779492d3fb99f42a6635bb72</span><br><span style="color: hsl(120, 100%, 40%);">+tst test_suite: DBG: Picked - _hash: a59640b8ba6a373552b24a6f9f65cadd2347bace</span><br><span>   addr: 10.42.42.53</span><br><span>   band: GSM-1800</span><br><span>   ipa_unit_id: '7'</span><br><span>   label: sysmoCell 5000</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_trx:</span><br><span style="color: hsl(120, 100%, 40%);">+    clock_reference: external</span><br><span style="color: hsl(120, 100%, 40%);">+    launch_trx: 'False'</span><br><span style="color: hsl(120, 100%, 40%);">+    trx_ip: 10.42.42.112</span><br><span>   trx_list:</span><br><span>   - max_power_red: '3'</span><br><span>     nominal_power: '10'</span><br><span>   - max_power_red: '0'</span><br><span>     nominal_power: '12'</span><br><span style="color: hsl(0, 100%, 40%);">-  trx_remote_ip: 10.42.42.112</span><br><span>   type: osmo-bts-trx</span><br><span style="color: hsl(0, 100%, 40%);">-- _hash: 9eaa928b04ce04b19dbae972f9bfc3eea6f5e249</span><br><span style="color: hsl(120, 100%, 40%);">+- _hash: c2feabd082c36a1cdeccb9a5237dfff7dbadb009</span><br><span>   addr: 10.42.42.53</span><br><span>   band: GSM-1800</span><br><span>   ipa_unit_id: '7'</span><br><span>   label: sysmoCell 5000</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_trx:</span><br><span style="color: hsl(120, 100%, 40%);">+    clock_reference: external</span><br><span style="color: hsl(120, 100%, 40%);">+    launch_trx: 'False'</span><br><span style="color: hsl(120, 100%, 40%);">+    trx_ip: 10.42.42.112</span><br><span>   trx_list:</span><br><span>   - nominal_power: '10'</span><br><span>   - max_power_red: '1'</span><br><span>     nominal_power: '12'</span><br><span style="color: hsl(0, 100%, 40%);">-  trx_remote_ip: 10.42.42.112</span><br><span>   type: osmo-bts-trx</span><br><span> - _hash: 07d9c8aaa940b674efcbbabdd69f58a6ce4e94f9</span><br><span>   addr: 10.42.42.114</span><br><span>@@ -183,28 +189,34 @@</span><br><span> tst {combining_scenarios='modifiers'}: DBG: {definition_conf={}}  [test_suite↪{combining_scenarios='modifiers'}]  [suite.py:[LINENR]]</span><br><span> tst {combining_scenarios='modifiers', scenario='foo'}: DBG: {conf={}, scenario='foo'}  [test_suite↪{combining_scenarios='modifiers', scenario='foo'}]  [suite.py:[LINENR]]</span><br><span> tst test_suite: Reserving 3 x bts (candidates: 6)  [resource.py:[LINENR]]</span><br><span style="color: hsl(0, 100%, 40%);">-tst test_suite: DBG: Picked - _hash: 076ff06a4b719e61779492d3fb99f42a6635bb72</span><br><span style="color: hsl(120, 100%, 40%);">+tst test_suite: DBG: Picked - _hash: a59640b8ba6a373552b24a6f9f65cadd2347bace</span><br><span>   addr: 10.42.42.53</span><br><span>   band: GSM-1800</span><br><span>   ipa_unit_id: '7'</span><br><span>   label: sysmoCell 5000</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_trx:</span><br><span style="color: hsl(120, 100%, 40%);">+    clock_reference: external</span><br><span style="color: hsl(120, 100%, 40%);">+    launch_trx: 'False'</span><br><span style="color: hsl(120, 100%, 40%);">+    trx_ip: 10.42.42.112</span><br><span>   trx_list:</span><br><span>   - max_power_red: '3'</span><br><span>     nominal_power: '10'</span><br><span>   - max_power_red: '0'</span><br><span>     nominal_power: '12'</span><br><span style="color: hsl(0, 100%, 40%);">-  trx_remote_ip: 10.42.42.112</span><br><span>   type: osmo-bts-trx</span><br><span style="color: hsl(0, 100%, 40%);">-- _hash: 9eaa928b04ce04b19dbae972f9bfc3eea6f5e249</span><br><span style="color: hsl(120, 100%, 40%);">+- _hash: c2feabd082c36a1cdeccb9a5237dfff7dbadb009</span><br><span>   addr: 10.42.42.53</span><br><span>   band: GSM-1800</span><br><span>   ipa_unit_id: '7'</span><br><span>   label: sysmoCell 5000</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_trx:</span><br><span style="color: hsl(120, 100%, 40%);">+    clock_reference: external</span><br><span style="color: hsl(120, 100%, 40%);">+    launch_trx: 'False'</span><br><span style="color: hsl(120, 100%, 40%);">+    trx_ip: 10.42.42.112</span><br><span>   trx_list:</span><br><span>   - nominal_power: '10'</span><br><span>   - max_power_red: '1'</span><br><span>     nominal_power: '12'</span><br><span style="color: hsl(0, 100%, 40%);">-  trx_remote_ip: 10.42.42.112</span><br><span>   type: osmo-bts-trx</span><br><span> - _hash: 07d9c8aaa940b674efcbbabdd69f58a6ce4e94f9</span><br><span>   addr: 10.42.42.114</span><br><span>@@ -264,28 +276,34 @@</span><br><span> tst {combining_scenarios='modifiers'}: DBG: {definition_conf={}}  [test_suite↪{combining_scenarios='modifiers'}]  [suite.py:[LINENR]]</span><br><span> tst {combining_scenarios='modifiers', scenario='foo'}: DBG: {conf={}, scenario='foo'}  [test_suite↪{combining_scenarios='modifiers', scenario='foo'}]  [suite.py:[LINENR]]</span><br><span> tst test_suite: Reserving 3 x bts (candidates: 6)  [resource.py:[LINENR]]</span><br><span style="color: hsl(0, 100%, 40%);">-tst test_suite: DBG: Picked - _hash: 076ff06a4b719e61779492d3fb99f42a6635bb72</span><br><span style="color: hsl(120, 100%, 40%);">+tst test_suite: DBG: Picked - _hash: a59640b8ba6a373552b24a6f9f65cadd2347bace</span><br><span>   addr: 10.42.42.53</span><br><span>   band: GSM-1800</span><br><span>   ipa_unit_id: '7'</span><br><span>   label: sysmoCell 5000</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_trx:</span><br><span style="color: hsl(120, 100%, 40%);">+    clock_reference: external</span><br><span style="color: hsl(120, 100%, 40%);">+    launch_trx: 'False'</span><br><span style="color: hsl(120, 100%, 40%);">+    trx_ip: 10.42.42.112</span><br><span>   trx_list:</span><br><span>   - max_power_red: '3'</span><br><span>     nominal_power: '10'</span><br><span>   - max_power_red: '0'</span><br><span>     nominal_power: '12'</span><br><span style="color: hsl(0, 100%, 40%);">-  trx_remote_ip: 10.42.42.112</span><br><span>   type: osmo-bts-trx</span><br><span style="color: hsl(0, 100%, 40%);">-- _hash: 9eaa928b04ce04b19dbae972f9bfc3eea6f5e249</span><br><span style="color: hsl(120, 100%, 40%);">+- _hash: c2feabd082c36a1cdeccb9a5237dfff7dbadb009</span><br><span>   addr: 10.42.42.53</span><br><span>   band: GSM-1800</span><br><span>   ipa_unit_id: '7'</span><br><span>   label: sysmoCell 5000</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_trx:</span><br><span style="color: hsl(120, 100%, 40%);">+    clock_reference: external</span><br><span style="color: hsl(120, 100%, 40%);">+    launch_trx: 'False'</span><br><span style="color: hsl(120, 100%, 40%);">+    trx_ip: 10.42.42.112</span><br><span>   trx_list:</span><br><span>   - nominal_power: '10'</span><br><span>   - max_power_red: '1'</span><br><span>     nominal_power: '12'</span><br><span style="color: hsl(0, 100%, 40%);">-  trx_remote_ip: 10.42.42.112</span><br><span>   type: osmo-bts-trx</span><br><span> - _hash: 07d9c8aaa940b674efcbbabdd69f58a6ce4e94f9</span><br><span>   addr: 10.42.42.114</span><br><span>@@ -341,28 +359,34 @@</span><br><span> tst {combining_scenarios='modifiers'}: DBG: {definition_conf={}}  [test_suite↪{combining_scenarios='modifiers'}]  [suite.py:[LINENR]]</span><br><span> tst {combining_scenarios='modifiers', scenario='foo'}: DBG: {conf={bts=[{'trx_list': [{'nominal_power': '20'}, {'nominal_power': '20'}]}, {'trx_list': [{'nominal_power': '20'}, {'nominal_power': '20'}]}, {'type': 'sysmo'}]}, scenario='foo'}  [test_suite↪{combining_scenarios='modifiers', scenario='foo'}]  [suite.py:[LINENR]]</span><br><span> tst test_suite: Reserving 3 x bts (candidates: 6)  [resource.py:[LINENR]]</span><br><span style="color: hsl(0, 100%, 40%);">-tst test_suite: DBG: Picked - _hash: 076ff06a4b719e61779492d3fb99f42a6635bb72</span><br><span style="color: hsl(120, 100%, 40%);">+tst test_suite: DBG: Picked - _hash: a59640b8ba6a373552b24a6f9f65cadd2347bace</span><br><span>   addr: 10.42.42.53</span><br><span>   band: GSM-1800</span><br><span>   ipa_unit_id: '7'</span><br><span>   label: sysmoCell 5000</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_trx:</span><br><span style="color: hsl(120, 100%, 40%);">+    clock_reference: external</span><br><span style="color: hsl(120, 100%, 40%);">+    launch_trx: 'False'</span><br><span style="color: hsl(120, 100%, 40%);">+    trx_ip: 10.42.42.112</span><br><span>   trx_list:</span><br><span>   - max_power_red: '3'</span><br><span>     nominal_power: '10'</span><br><span>   - max_power_red: '0'</span><br><span>     nominal_power: '12'</span><br><span style="color: hsl(0, 100%, 40%);">-  trx_remote_ip: 10.42.42.112</span><br><span>   type: osmo-bts-trx</span><br><span style="color: hsl(0, 100%, 40%);">-- _hash: 9eaa928b04ce04b19dbae972f9bfc3eea6f5e249</span><br><span style="color: hsl(120, 100%, 40%);">+- _hash: c2feabd082c36a1cdeccb9a5237dfff7dbadb009</span><br><span>   addr: 10.42.42.53</span><br><span>   band: GSM-1800</span><br><span>   ipa_unit_id: '7'</span><br><span>   label: sysmoCell 5000</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_trx:</span><br><span style="color: hsl(120, 100%, 40%);">+    clock_reference: external</span><br><span style="color: hsl(120, 100%, 40%);">+    launch_trx: 'False'</span><br><span style="color: hsl(120, 100%, 40%);">+    trx_ip: 10.42.42.112</span><br><span>   trx_list:</span><br><span>   - nominal_power: '10'</span><br><span>   - max_power_red: '1'</span><br><span>     nominal_power: '12'</span><br><span style="color: hsl(0, 100%, 40%);">-  trx_remote_ip: 10.42.42.112</span><br><span>   type: osmo-bts-trx</span><br><span> - _hash: 07d9c8aaa940b674efcbbabdd69f58a6ce4e94f9</span><br><span>   addr: 10.42.42.114</span><br><span>@@ -387,25 +411,29 @@</span><br><span>   label: m7802</span><br><span>   path: /wavecom_1</span><br><span>   [resource.py:[LINENR]]</span><br><span style="color: hsl(0, 100%, 40%);">-resources(test_suite)={'bts': [{'_hash': '076ff06a4b719e61779492d3fb99f42a6635bb72',</span><br><span style="color: hsl(120, 100%, 40%);">+resources(test_suite)={'bts': [{'_hash': 'a59640b8ba6a373552b24a6f9f65cadd2347bace',</span><br><span>           '_reserved_by': 'test_suite-[ID_NUM]-[ID_NUM]',</span><br><span>           'addr': '10.42.42.53',</span><br><span>           'band': 'GSM-1800',</span><br><span>           'ipa_unit_id': '7',</span><br><span>           'label': 'sysmoCell 5000',</span><br><span style="color: hsl(120, 100%, 40%);">+          'osmo_trx': {'clock_reference': 'external',</span><br><span style="color: hsl(120, 100%, 40%);">+                       'launch_trx': 'False',</span><br><span style="color: hsl(120, 100%, 40%);">+                       'trx_ip': '10.42.42.112'},</span><br><span>           'trx_list': [{'max_power_red': '3', 'nominal_power': '20'},</span><br><span>                        {'max_power_red': '0', 'nominal_power': '20'}],</span><br><span style="color: hsl(0, 100%, 40%);">-          'trx_remote_ip': '10.42.42.112',</span><br><span>           'type': 'osmo-bts-trx'},</span><br><span style="color: hsl(0, 100%, 40%);">-         {'_hash': '9eaa928b04ce04b19dbae972f9bfc3eea6f5e249',</span><br><span style="color: hsl(120, 100%, 40%);">+         {'_hash': 'c2feabd082c36a1cdeccb9a5237dfff7dbadb009',</span><br><span>           '_reserved_by': 'test_suite-[ID_NUM]-[ID_NUM]',</span><br><span>           'addr': '10.42.42.53',</span><br><span>           'band': 'GSM-1800',</span><br><span>           'ipa_unit_id': '7',</span><br><span>           'label': 'sysmoCell 5000',</span><br><span style="color: hsl(120, 100%, 40%);">+          'osmo_trx': {'clock_reference': 'external',</span><br><span style="color: hsl(120, 100%, 40%);">+                       'launch_trx': 'False',</span><br><span style="color: hsl(120, 100%, 40%);">+                       'trx_ip': '10.42.42.112'},</span><br><span>           'trx_list': [{'nominal_power': '20'},</span><br><span>                        {'max_power_red': '1', 'nominal_power': '20'}],</span><br><span style="color: hsl(0, 100%, 40%);">-          'trx_remote_ip': '10.42.42.112',</span><br><span>           'type': 'osmo-bts-trx'},</span><br><span>          {'_hash': '07d9c8aaa940b674efcbbabdd69f58a6ce4e94f9',</span><br><span>           '_reserved_by': 'test_suite-[ID_NUM]-[ID_NUM]',</span><br><span>diff --git a/selftest/suite_test/resources.conf b/selftest/suite_test/resources.conf</span><br><span>index 440e55c..bd121cb 100644</span><br><span>--- a/selftest/suite_test/resources.conf</span><br><span>+++ b/selftest/suite_test/resources.conf</span><br><span>@@ -33,7 +33,9 @@</span><br><span>   ipa_unit_id: 6</span><br><span>   addr: 10.42.42.52</span><br><span>   band: GSM-1800</span><br><span style="color: hsl(0, 100%, 40%);">-  launch_trx: true</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_trx:</span><br><span style="color: hsl(120, 100%, 40%);">+    launch_trx: true</span><br><span style="color: hsl(120, 100%, 40%);">+    clock_reference: external</span><br><span>   trx_list:</span><br><span>   - nominal_power: 10</span><br><span>     max_power_red: 2</span><br><span>@@ -44,7 +46,10 @@</span><br><span>   ipa_unit_id: 7</span><br><span>   addr: 10.42.42.53</span><br><span>   band: GSM-1800</span><br><span style="color: hsl(0, 100%, 40%);">-  trx_remote_ip: 10.42.42.112</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_trx:</span><br><span style="color: hsl(120, 100%, 40%);">+    launch_trx: false</span><br><span style="color: hsl(120, 100%, 40%);">+    clock_reference: external</span><br><span style="color: hsl(120, 100%, 40%);">+    trx_ip: 10.42.42.112</span><br><span>   trx_list:</span><br><span>   - nominal_power: 10</span><br><span>     max_power_red: 3</span><br><span>@@ -56,7 +61,10 @@</span><br><span>   ipa_unit_id: 7</span><br><span>   addr: 10.42.42.53</span><br><span>   band: GSM-1800</span><br><span style="color: hsl(0, 100%, 40%);">-  trx_remote_ip: 10.42.42.112</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_trx:</span><br><span style="color: hsl(120, 100%, 40%);">+    launch_trx: false</span><br><span style="color: hsl(120, 100%, 40%);">+    clock_reference: external</span><br><span style="color: hsl(120, 100%, 40%);">+    trx_ip: 10.42.42.112</span><br><span>   trx_list:</span><br><span>   - nominal_power: 10</span><br><span>   - nominal_power: 12</span><br><span>diff --git a/src/osmo_gsm_tester/bts_osmotrx.py b/src/osmo_gsm_tester/bts_osmotrx.py</span><br><span>index 1584eb2..1c7349f 100644</span><br><span>--- a/src/osmo_gsm_tester/bts_osmotrx.py</span><br><span>+++ b/src/osmo_gsm_tester/bts_osmotrx.py</span><br><span>@@ -20,6 +20,7 @@</span><br><span> import os</span><br><span> import pprint</span><br><span> import tempfile</span><br><span style="color: hsl(120, 100%, 40%);">+from abc import ABCMeta, abstractmethod</span><br><span> from . import log, config, util, template, process, pcu_osmo, bts_osmo</span><br><span> from .event_loop import MainLoop</span><br><span> </span><br><span>@@ -39,17 +40,15 @@</span><br><span>         self.inst = None</span><br><span>         self.trx = None</span><br><span>         self.env = {}</span><br><span style="color: hsl(120, 100%, 40%);">+        self.gen_conf = {}</span><br><span> </span><br><span>     def trx_remote_ip(self):</span><br><span style="color: hsl(0, 100%, 40%);">-        conf_ip = self.conf.get('trx_remote_ip', None)</span><br><span style="color: hsl(120, 100%, 40%);">+        conf_ip = self.conf.get('osmo_trx', {}).get('trx_ip', None)</span><br><span>         if conf_ip is not None:</span><br><span>             return conf_ip</span><br><span>         # if 'trx_remote_ip' is not configured, use same IP as BTS</span><br><span>         return self.remote_addr()</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    def launch_trx_enabled(self):</span><br><span style="color: hsl(0, 100%, 40%);">-        return util.str2bool(self.conf.get('launch_trx'))</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>     def launch_process(self, keepalive, binary_name, *args):</span><br><span>         binary = os.path.abspath(self.inst.child('bin', binary_name))</span><br><span>         run_dir = self.run_dir.new_dir(binary_name)</span><br><span>@@ -69,17 +68,22 @@</span><br><span>         self.dbg(config_file=self.config_file)</span><br><span> </span><br><span>         values = dict(osmo_bts_trx=config.get_defaults('osmo_bts_trx'))</span><br><span style="color: hsl(120, 100%, 40%);">+        config.overlay(values, dict(osmo_bts_trx=dict(osmo_trx=config.get_defaults('osmo_trx'))))</span><br><span>         config.overlay(values, self.suite_run.config())</span><br><span>         config.overlay(values, {</span><br><span>                         'osmo_bts_trx': {</span><br><span>                             'oml_remote_ip': self.bsc.addr(),</span><br><span style="color: hsl(0, 100%, 40%);">-                            'trx_local_ip': self.remote_addr(),</span><br><span style="color: hsl(0, 100%, 40%);">-                            'trx_remote_ip': self.trx_remote_ip(),</span><br><span>                             'pcu_socket_path': self.pcu_socket_path(),</span><br><span style="color: hsl(120, 100%, 40%);">+                            'osmo_trx': {</span><br><span style="color: hsl(120, 100%, 40%);">+                                'bts_ip': self.remote_addr(),</span><br><span style="color: hsl(120, 100%, 40%);">+                                'trx_ip': self.trx_remote_ip(),</span><br><span style="color: hsl(120, 100%, 40%);">+                                'channels': [{}] # TODO: implement channels for multiTRX</span><br><span style="color: hsl(120, 100%, 40%);">+                            }</span><br><span>                         }</span><br><span>         })</span><br><span>         config.overlay(values, { 'osmo_bts_trx': self.conf })</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        self.gen_conf = values</span><br><span>         self.dbg('OSMO-BTS-TRX CONFIG:\n' + pprint.pformat(values))</span><br><span> </span><br><span>         with open(self.config_file, 'w') as f:</span><br><span>@@ -87,6 +91,12 @@</span><br><span>             self.dbg(r)</span><br><span>             f.write(r)</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    def launch_trx_enabled(self):</span><br><span style="color: hsl(120, 100%, 40%);">+        return util.str2bool(self.gen_conf['osmo_bts_trx'].get('osmo_trx', {}).get('launch_trx'))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    def get_osmo_trx_type(self):</span><br><span style="color: hsl(120, 100%, 40%);">+        return self.gen_conf['osmo_bts_trx'].get('osmo_trx', {}).get('type')</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> ########################</span><br><span> # PUBLIC - INTERNAL API</span><br><span> ########################</span><br><span>@@ -95,6 +105,9 @@</span><br><span>         self.dbg(conf=values)</span><br><span>         return values</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    def conf_for_osmotrx(self):</span><br><span style="color: hsl(120, 100%, 40%);">+        return dict(osmo_trx=self.gen_conf['osmo_bts_trx'].get('osmo_trx', {}))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> ###################</span><br><span> # PUBLIC (test API included)</span><br><span> ###################</span><br><span>@@ -108,9 +121,9 @@</span><br><span>         self.configure()</span><br><span> </span><br><span>         if self.launch_trx_enabled():</span><br><span style="color: hsl(0, 100%, 40%);">-            self.trx = OsmoTrx(self.suite_run, self.conf, self.trx_remote_ip(), self.remote_addr())</span><br><span style="color: hsl(120, 100%, 40%);">+            self.trx = OsmoTrx.get_instance_by_type(self.get_osmo_trx_type(), self.suite_run, self.conf_for_osmotrx())</span><br><span>             self.trx.start(keepalive)</span><br><span style="color: hsl(0, 100%, 40%);">-            self.log('Waiting for osmo-trx to start up...')</span><br><span style="color: hsl(120, 100%, 40%);">+            self.log('Waiting for %s to start up...' % self.trx.name())</span><br><span>             MainLoop.wait(self, self.trx.trx_ready)</span><br><span> </span><br><span>         self.inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-bts')))</span><br><span>@@ -124,36 +137,42 @@</span><br><span>                             '-i', self.bsc.addr())</span><br><span>         self.suite_run.poll()</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-class OsmoTrx(log.Origin):</span><br><span style="color: hsl(0, 100%, 40%);">-    suite_run = None</span><br><span style="color: hsl(0, 100%, 40%);">-    run_dir = None</span><br><span style="color: hsl(0, 100%, 40%);">-    inst = None</span><br><span style="color: hsl(0, 100%, 40%);">-    env = None</span><br><span style="color: hsl(0, 100%, 40%);">-    proc_trx = None</span><br><span style="color: hsl(120, 100%, 40%);">+class OsmoTrx(log.Origin, metaclass=ABCMeta):</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    BIN_TRX = 'osmo-trx-uhd'</span><br><span>     CONF_OSMO_TRX = 'osmo-trx.cfg'</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    def __init__(self, suite_run, conf, listen_ip, bts_ip):</span><br><span style="color: hsl(0, 100%, 40%);">-        super().__init__(log.C_RUN, OsmoTrx.BIN_TRX)</span><br><span style="color: hsl(120, 100%, 40%);">+##############</span><br><span style="color: hsl(120, 100%, 40%);">+# PROTECTED</span><br><span style="color: hsl(120, 100%, 40%);">+##############</span><br><span style="color: hsl(120, 100%, 40%);">+    def __init__(self, suite_run, conf):</span><br><span style="color: hsl(120, 100%, 40%);">+        super().__init__(log.C_RUN, self.binary_name())</span><br><span>         self.suite_run = suite_run</span><br><span>         self.conf = conf</span><br><span>         self.env = {}</span><br><span style="color: hsl(0, 100%, 40%);">-        self.listen_ip = listen_ip</span><br><span style="color: hsl(0, 100%, 40%);">-        self.bts_ip = bts_ip</span><br><span style="color: hsl(120, 100%, 40%);">+        self.listen_ip = conf.get('trx_ip')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.bts_ip = conf.get('bts_ip')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.run_dir = None</span><br><span style="color: hsl(120, 100%, 40%);">+        self.inst = None</span><br><span style="color: hsl(120, 100%, 40%);">+        self.proc_trx = None</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    @classmethod</span><br><span style="color: hsl(120, 100%, 40%);">+    def get_instance_by_type(cls, type, suite_run, conf):</span><br><span style="color: hsl(120, 100%, 40%);">+        KNOWN_OSMOTRX_TYPES = {</span><br><span style="color: hsl(120, 100%, 40%);">+            'uhd': OsmoTrxUHD,</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+        osmo_trx_class = KNOWN_OSMOTRX_TYPES.get(type)</span><br><span style="color: hsl(120, 100%, 40%);">+        return osmo_trx_class(suite_run, conf)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    @abstractmethod</span><br><span style="color: hsl(120, 100%, 40%);">+    def binary_name(self):</span><br><span style="color: hsl(120, 100%, 40%);">+        'Used by base class. Subclass can create different OsmoTRX implementations.'</span><br><span style="color: hsl(120, 100%, 40%);">+        pass</span><br><span> </span><br><span>     def configure(self):</span><br><span>         self.config_file = self.run_dir.new_file(OsmoTrx.CONF_OSMO_TRX)</span><br><span>         self.dbg(config_file=self.config_file)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        values = dict(osmo_bts_trx=config.get_defaults('osmo_trx'))</span><br><span style="color: hsl(0, 100%, 40%);">-        config.overlay(values, self.suite_run.config())</span><br><span style="color: hsl(0, 100%, 40%);">-        config.overlay(values, {</span><br><span style="color: hsl(0, 100%, 40%);">-                        'osmo_trx': {</span><br><span style="color: hsl(0, 100%, 40%);">-                            'bind_ip' : self.listen_ip,</span><br><span style="color: hsl(0, 100%, 40%);">-                        }</span><br><span style="color: hsl(0, 100%, 40%);">-        })</span><br><span style="color: hsl(0, 100%, 40%);">-        config.overlay(values, { 'osmo_trx': self.conf })</span><br><span style="color: hsl(120, 100%, 40%);">+        values = self.conf</span><br><span> </span><br><span>         self.dbg('OSMO-TRX CONFIG:\n' + pprint.pformat(values))</span><br><span> </span><br><span>@@ -162,16 +181,6 @@</span><br><span>             self.dbg(r)</span><br><span>             f.write(r)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    def start(self, keepalive=False):</span><br><span style="color: hsl(0, 100%, 40%);">-        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))</span><br><span style="color: hsl(0, 100%, 40%);">-        self.configure()</span><br><span style="color: hsl(0, 100%, 40%);">-        self.inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-trx')))</span><br><span style="color: hsl(0, 100%, 40%);">-        lib = self.inst.child('lib')</span><br><span style="color: hsl(0, 100%, 40%);">-        self.env = { 'LD_LIBRARY_PATH': util.prepend_library_path(lib) }</span><br><span style="color: hsl(0, 100%, 40%);">-        self.proc_trx = self.launch_process(keepalive, OsmoTrx.BIN_TRX, '-x',</span><br><span style="color: hsl(0, 100%, 40%);">-                                            '-j', self.listen_ip, '-i', self.bts_ip,</span><br><span style="color: hsl(0, 100%, 40%);">-                                            '-C', os.path.abspath(self.config_file))</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>     def launch_process(self, keepalive, binary_name, *args):</span><br><span>         binary = os.path.abspath(self.inst.child('bin', binary_name))</span><br><span>         run_dir = self.run_dir.new_dir(binary_name)</span><br><span>@@ -184,8 +193,30 @@</span><br><span>         proc.launch()</span><br><span>         return proc</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+##############</span><br><span style="color: hsl(120, 100%, 40%);">+# PUBLIC (test API included)</span><br><span style="color: hsl(120, 100%, 40%);">+##############</span><br><span style="color: hsl(120, 100%, 40%);">+    def start(self, keepalive=False):</span><br><span style="color: hsl(120, 100%, 40%);">+        self.run_dir = util.Dir(self.suite_run.get_test_run_dir().new_dir(self.name()))</span><br><span style="color: hsl(120, 100%, 40%);">+        self.configure()</span><br><span style="color: hsl(120, 100%, 40%);">+        self.inst = util.Dir(os.path.abspath(self.suite_run.trial.get_inst('osmo-trx')))</span><br><span style="color: hsl(120, 100%, 40%);">+        lib = self.inst.child('lib')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.env = { 'LD_LIBRARY_PATH': util.prepend_library_path(lib) }</span><br><span style="color: hsl(120, 100%, 40%);">+        self.proc_trx = self.launch_process(keepalive, self.binary_name(),</span><br><span style="color: hsl(120, 100%, 40%);">+                                            '-C', os.path.abspath(self.config_file))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     def trx_ready(self):</span><br><span>         if not self.proc_trx or not self.proc_trx.is_running:</span><br><span>             return False</span><br><span>         return '-- Transceiver active with' in (self.proc_trx.get_stdout() or '')</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+class OsmoTrxUHD(OsmoTrx):</span><br><span style="color: hsl(120, 100%, 40%);">+    BIN_TRX = 'osmo-trx-uhd'</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    def __init__(self, suite_run, conf):</span><br><span style="color: hsl(120, 100%, 40%);">+        super().__init__(suite_run, conf)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    def binary_name(self):</span><br><span style="color: hsl(120, 100%, 40%);">+        return OsmoTrxUHD.BIN_TRX</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # vim: expandtab tabstop=4 shiftwidth=4</span><br><span>diff --git a/src/osmo_gsm_tester/resource.py b/src/osmo_gsm_tester/resource.py</span><br><span>index 15f2711..9ca5665 100644</span><br><span>--- a/src/osmo_gsm_tester/resource.py</span><br><span>+++ b/src/osmo_gsm_tester/resource.py</span><br><span>@@ -54,8 +54,6 @@</span><br><span>         'bts[].ipa_unit_id': schema.UINT,</span><br><span>         'bts[].addr': schema.IPV4,</span><br><span>         'bts[].band': schema.BAND,</span><br><span style="color: hsl(0, 100%, 40%);">-        'bts[].trx_remote_ip': schema.IPV4,</span><br><span style="color: hsl(0, 100%, 40%);">-        'bts[].launch_trx': schema.BOOL_STR,</span><br><span>         'bts[].direct_pcu': schema.BOOL_STR,</span><br><span>         'bts[].ciphers[]': schema.CIPHER,</span><br><span>         'bts[].channel_allocator': schema.CHAN_ALLOCATOR,</span><br><span>@@ -70,6 +68,10 @@</span><br><span>         'bts[].trx_list[].power_supply.type': schema.STR,</span><br><span>         'bts[].trx_list[].power_supply.device': schema.STR,</span><br><span>         'bts[].trx_list[].power_supply.port': schema.STR,</span><br><span style="color: hsl(120, 100%, 40%);">+        'bts[].osmo_trx.launch_trx': schema.BOOL_STR,</span><br><span style="color: hsl(120, 100%, 40%);">+        'bts[].osmo_trx.type': schema.STR,</span><br><span style="color: hsl(120, 100%, 40%);">+        'bts[].osmo_trx.clock_reference': schema.OSMO_TRX_CLOCK_REF,</span><br><span style="color: hsl(120, 100%, 40%);">+        'bts[].osmo_trx.trx_ip': schema.IPV4,</span><br><span>         'arfcn[].arfcn': schema.INT,</span><br><span>         'arfcn[].band': schema.BAND,</span><br><span>         'modem[].label': schema.STR,</span><br><span>diff --git a/src/osmo_gsm_tester/schema.py b/src/osmo_gsm_tester/schema.py</span><br><span>index 174c28f..12cfd7a 100644</span><br><span>--- a/src/osmo_gsm_tester/schema.py</span><br><span>+++ b/src/osmo_gsm_tester/schema.py</span><br><span>@@ -115,6 +115,11 @@</span><br><span>         return</span><br><span>     raise ValueError('Unknown Codec value: %r' % val)</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+def osmo_trx_clock_ref(val):</span><br><span style="color: hsl(120, 100%, 40%);">+    if val in ('internal', 'external', 'gspdo'):</span><br><span style="color: hsl(120, 100%, 40%);">+        return</span><br><span style="color: hsl(120, 100%, 40%);">+    raise ValueError('Unknown OsmoTRX clock reference value: %r' % val)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> INT = 'int'</span><br><span> STR = 'str'</span><br><span> UINT = 'uint'</span><br><span>@@ -132,6 +137,7 @@</span><br><span> PHY_CHAN = 'chan'</span><br><span> CHAN_ALLOCATOR = 'chan_allocator'</span><br><span> CODEC = 'codec'</span><br><span style="color: hsl(120, 100%, 40%);">+OSMO_TRX_CLOCK_REF = 'osmo_trx_clock_ref'</span><br><span> </span><br><span> SCHEMA_TYPES = {</span><br><span>         INT: int,</span><br><span>@@ -151,6 +157,7 @@</span><br><span>         PHY_CHAN: phy_channel_config,</span><br><span>         CHAN_ALLOCATOR: channel_allocator,</span><br><span>         CODEC: codec,</span><br><span style="color: hsl(120, 100%, 40%);">+        OSMO_TRX_CLOCK_REF: osmo_trx_clock_ref,</span><br><span>     }</span><br><span> </span><br><span> def validate(config, schema):</span><br><span>diff --git a/src/osmo_gsm_tester/templates/osmo-bts-trx.cfg.tmpl b/src/osmo_gsm_tester/templates/osmo-bts-trx.cfg.tmpl</span><br><span>index d95ca6e..5dba323 100644</span><br><span>--- a/src/osmo_gsm_tester/templates/osmo-bts-trx.cfg.tmpl</span><br><span>+++ b/src/osmo_gsm_tester/templates/osmo-bts-trx.cfg.tmpl</span><br><span>@@ -21,8 +21,8 @@</span><br><span>  bind ${osmo_bts_trx.addr}</span><br><span> !</span><br><span> phy 0</span><br><span style="color: hsl(0, 100%, 40%);">- osmotrx ip local ${osmo_bts_trx.trx_local_ip}</span><br><span style="color: hsl(0, 100%, 40%);">- osmotrx ip remote ${osmo_bts_trx.trx_remote_ip}</span><br><span style="color: hsl(120, 100%, 40%);">+ osmotrx ip local ${osmo_bts_trx.osmo_trx.bts_ip}</span><br><span style="color: hsl(120, 100%, 40%);">+ osmotrx ip remote ${osmo_bts_trx.osmo_trx.trx_ip}</span><br><span>  instance 0</span><br><span>   osmotrx rx-gain 25</span><br><span>   osmotrx tx-attenuation oml</span><br><span>diff --git a/src/osmo_gsm_tester/templates/osmo-trx.cfg.tmpl b/src/osmo_gsm_tester/templates/osmo-trx.cfg.tmpl</span><br><span>index a197c59..2f6e830 100644</span><br><span>--- a/src/osmo_gsm_tester/templates/osmo-trx.cfg.tmpl</span><br><span>+++ b/src/osmo_gsm_tester/templates/osmo-trx.cfg.tmpl</span><br><span>@@ -1,15 +1,34 @@</span><br><span> !</span><br><span style="color: hsl(0, 100%, 40%);">-! OsmoHLR example configuration</span><br><span style="color: hsl(120, 100%, 40%);">+! OsmoTRX example configuration</span><br><span> !</span><br><span> log stderr</span><br><span>   logging filter all 1</span><br><span>   logging color 1</span><br><span>   logging print category 1</span><br><span>   logging timestamp 1</span><br><span style="color: hsl(120, 100%, 40%);">+  logging print file basename</span><br><span>   logging print extended-timestamp 1</span><br><span>   logging level all info</span><br><span> !</span><br><span> line vty</span><br><span style="color: hsl(0, 100%, 40%);">- bind ${osmo_trx.bind_ip}</span><br><span style="color: hsl(120, 100%, 40%);">+ bind ${osmo_trx.trx_ip}</span><br><span> ctrl</span><br><span style="color: hsl(0, 100%, 40%);">- bind ${osmo_trx.bind_ip}</span><br><span style="color: hsl(120, 100%, 40%);">+ bind ${osmo_trx.trx_ip}</span><br><span style="color: hsl(120, 100%, 40%);">+trx</span><br><span style="color: hsl(120, 100%, 40%);">+ bind-ip ${osmo_trx.trx_ip}</span><br><span style="color: hsl(120, 100%, 40%);">+ remote-ip ${osmo_trx.bts_ip}</span><br><span style="color: hsl(120, 100%, 40%);">+ base-port 5700</span><br><span style="color: hsl(120, 100%, 40%);">+ egprs disable</span><br><span style="color: hsl(120, 100%, 40%);">+ tx-sps 4</span><br><span style="color: hsl(120, 100%, 40%);">+ rx-sps 4</span><br><span style="color: hsl(120, 100%, 40%);">+ clock-ref ${osmo_trx.clock_reference}</span><br><span style="color: hsl(120, 100%, 40%);">+ rt-prio 18</span><br><span style="color: hsl(120, 100%, 40%);">+%for chan in osmo_trx.channels:</span><br><span style="color: hsl(120, 100%, 40%);">+ chan ${loop.index}</span><br><span style="color: hsl(120, 100%, 40%);">+% if chan.get('tx_path', False):</span><br><span style="color: hsl(120, 100%, 40%);">+  tx-path ${chan.tx_path}</span><br><span style="color: hsl(120, 100%, 40%);">+% endif</span><br><span style="color: hsl(120, 100%, 40%);">+% if chan.get('rx_path', False):</span><br><span style="color: hsl(120, 100%, 40%);">+  rx-path ${chan.rx_path}</span><br><span style="color: hsl(120, 100%, 40%);">+ %endif</span><br><span style="color: hsl(120, 100%, 40%);">+%endfor</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/10667">change 10667</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/10667"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-gsm-tester </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: I77d29413c9e3b600b796627ba366f80c3281b7e1 </div>
<div style="display:none"> Gerrit-Change-Number: 10667 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: Pau Espin Pedrol <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>
<div style="display:none"> Gerrit-Reviewer: Pau Espin Pedrol <pespin@sysmocom.de> </div>