Introduce initial Amarisoft ENB support

* object class expects the amarisoft software to be placed in directory
  provided by env var AMARISOFT_PATH_ENB. On local runs, it will run the
  software from there. On remote runs it will copy over that directory to
  the slave.
* Configuration provided works with 6 PRBs, but probably won't work for
  other values (yet).
* ZMQ support not yet available, only UHD.

One can select the Amarisoft ENB by declaring it in resources.conf:
"""
- label: AmarisoftENB-B200
  type: amarisoftenb
  rf_dev_type: uhd
  rf_dev_args: "type=b200,serial=317B9FE,recv_frame_size=9232,send_frame_size=9232"
  remote_user: jenkins
  addr: 10.12.1.206
"""

And running:
"""
$ export AMARISOFT_PATH_ENB=/path/to/binaries
$ osmo-gsm-tester.py ... -s 4g:amarisoftenb-rftype@uhd+srsue-rftype@UHD+mod-enb-nprb@6 -t ping
"""

Change-Id: I1ddf4962ea6438ad977382ab201b724028ca46b3
diff --git a/src/osmo_gsm_tester/templates/amarisoft_sib23.asn.tmpl b/src/osmo_gsm_tester/templates/amarisoft_sib23.asn.tmpl
new file mode 100644
index 0000000..c08b645
--- /dev/null
+++ b/src/osmo_gsm_tester/templates/amarisoft_sib23.asn.tmpl
@@ -0,0 +1,116 @@
+{
+  message c1: systemInformation: {
+    criticalExtensions systemInformation-r8: {
+      sib-TypeAndInfo {
+        sib2: {
+          radioResourceConfigCommon {
+            rach-ConfigCommon {
+              preambleInfo {
+                numberOfRA-Preambles n52
+              },
+              powerRampingParameters {
+                powerRampingStep dB2,
+                preambleInitialReceivedTargetPower dBm-104
+              },
+              ra-SupervisionInfo {
+                preambleTransMax n10,
+                ra-ResponseWindowSize sf10,
+                mac-ContentionResolutionTimer sf40
+              },
+              maxHARQ-Msg3Tx 5
+            },
+            bcch-Config {
+              modificationPeriodCoeff n4
+            },
+            pcch-Config {
+              defaultPagingCycle rf128,
+              nB oneT
+            },
+            prach-Config {
+              rootSequenceIndex 0, /* patched by eNB */
+              prach-ConfigInfo {
+                prach-ConfigIndex 15, /* 20 ms period, subframe 9 */
+                highSpeedFlag FALSE,
+                zeroCorrelationZoneConfig 11,
+                prach-FreqOffset 0
+              }
+            },
+            pdsch-ConfigCommon {
+              referenceSignalPower -5,
+              p-b 1
+            },
+            pusch-ConfigCommon {
+              pusch-ConfigBasic {
+                n-SB 1,
+                hoppingMode interSubFrame,
+                pusch-HoppingOffset 2,
+                enable64QAM FALSE
+              },
+              ul-ReferenceSignalsPUSCH {
+                groupHoppingEnabled FALSE,
+                groupAssignmentPUSCH 0,
+                sequenceHoppingEnabled FALSE,
+                cyclicShift 0
+              }
+            },
+            pucch-ConfigCommon {
+              deltaPUCCH-Shift ds2,
+              nRB-CQI 1,
+              nCS-AN 0,
+              n1PUCCH-AN 11
+            },
+            soundingRS-UL-ConfigCommon setup: {
+              srs-BandwidthConfig bw7,
+              srs-SubframeConfig sc3,
+              ackNackSRS-SimultaneousTransmission TRUE
+            },
+            uplinkPowerControlCommon {
+              p0-NominalPUSCH -67,
+              alpha al07,
+              p0-NominalPUCCH -105,
+              deltaFList-PUCCH {
+                deltaF-PUCCH-Format1 deltaF0,
+                deltaF-PUCCH-Format1b deltaF3,
+                deltaF-PUCCH-Format2 deltaF1,
+                deltaF-PUCCH-Format2a deltaF2,
+                deltaF-PUCCH-Format2b deltaF2
+              },
+              deltaPreambleMsg3 4
+            },
+            ul-CyclicPrefixLength len1
+          },
+          ue-TimersAndConstants {
+            t300 ms200,
+            t301 ms200,
+            t310 ms200,
+            n310 n6,
+            t311 ms10000,
+            n311 n5
+          },
+          freqInfo {
+            additionalSpectrumEmission 1
+          },
+          timeAlignmentTimerCommon infinity
+        },
+        sib3: {
+          cellReselectionInfoCommon {
+            q-Hyst dB2
+          },
+          cellReselectionServingFreqInfo {
+            s-NonIntraSearch 3,
+            threshServingLow 2,
+            cellReselectionPriority 6
+          },
+          intraFreqCellReselectionInfo {
+            q-RxLevMin -61,
+            p-Max 23,
+            s-IntraSearch 5,
+            presenceAntennaPort1 TRUE,
+            neighCellConfig '01'B,
+            t-ReselectionEUTRA 1
+          }
+        }
+      }
+    }
+  }
+}