[buildout]
parts =
  switch-softwaretype

eggs-directory = ${buildout:eggs-directory}
develop-eggs-directory = ${buildout:develop-eggs-directory}
offline = true

[slap-configuration]
recipe = slapos.cookbook:slapconfiguration.serialised
computer = $${slap-connection:computer-id}
partition = $${slap-connection:partition-id}
url = $${slap-connection:server-url}
key = $${slap-connection:key-file}
cert = $${slap-connection:cert-file}

[jinja2-template-base]
recipe = slapos.recipe.template:jinja2
output = $${buildout:directory}/$${:filename}
extra-context =
context =
    import json_module json
    key eggs_directory buildout:eggs-directory
    key develop_eggs_directory buildout:develop-eggs-directory
    raw buildout_directory ${buildout:directory}
    section slap_connection slap-connection
    key slapparameter_dict slap-configuration:configuration
    key lan_ipv4 lan-ip:ipv4
    $${:extra-context}

[amarisoft]
recipe = slapos.recipe.build
init =
  import os, re
  try:
    lte_version = sorted(filter(lambda x: re.match(r"v[0-9]{4}-[0-9]{2}-[0-9]{2}", x), os.listdir('/opt/amarisoft')))[-1][1:]
  except FileNotFoundError:
    lte_version = 'LTEVERSION'
  path = "/opt/amarisoft/v" + lte_version
  options['lte-version'] = lte_version
  options['path'] = path
  options['sdr'] = path + "/trx_sdr"
  options['enb'] = path + "/enb"
  options['mme'] = path + "/mme"
  options['ims'] = path + "/ims"
  options['ue'] = path + "/ue"

[lan-ip]
recipe = slapos.recipe.build
init =
  import netifaces
  for i in netifaces.interfaces():
      if not (i.startswith("slaptun") or i.startswith("re6stnet") or i == "lo"):
          a = netifaces.ifaddresses(i)
          if netifaces.AF_INET in a:
              try:
                  options['ipv4'] = a[netifaces.AF_INET][0]['addr']
              except:
                  options['ipv4'] = "0.0.0.0"

[switch-softwaretype]
recipe = slapos.cookbook:switch-softwaretype
enb = dynamic-template-enb:output
gnb = dynamic-template-gnb:output
core-network = dynamic-template-core-network:output
ue-lte = dynamic-template-ue-lte:output
ue-nr = dynamic-template-ue-nr:output
RootSoftwareInstance = $${:core-network}
obsolete = dynamic-template-obsolete:output
enb-epc = $${:obsolete}
gnb-epc = $${:obsolete}
epc = $${:obsolete}
mme = $${:obsolete}

[dynamic-template-obsolete]
< = jinja2-template-base
url = ${template-obsolete:target}
filename = instance-obsolete.cfg
extensions = jinja2.ext.do
extra-context =
    key slave_instance_list slap-configuration:slave-instance-list

[dynamic-template-enb]
< = jinja2-template-base
url = ${template-enb:target}
filename = instance-enb.cfg
extensions = jinja2.ext.do
extra-context =
    raw monitor_template ${monitor2-template:output}
    key enb amarisoft:enb
    key sdr amarisoft:sdr
    raw enb_template   ${enb.jinja2.cfg:target}
    raw sib23   ${sib23.asn:target}
    raw ltelogs_template   ${ltelogs.jinja2.sh:target}
    raw amarisoft_stats_template   ${amarisoft-stats.jinja2.py:target}
    raw amarisoft_rf_info_template   ${amarisoft-rf-info.jinja2.py:target}
    raw lopcomm_rrh_stats_template   ${lopcomm-rrh-stats.jinja2.py:target}
    raw lopcomm_rrh_config_template   ${lopcomm-rrh-config.jinja2.py:target}
    raw CreateProcessingEle_template   ${CreateProcessingEle.jinja2.xml:target}
    raw cu_config_template   ${cu_config.jinja2.xml:target}
    raw openssl_location ${openssl:location}
    raw default_dl_earfcn ${default-params:default-dl-earfcn}
    raw default_lte_dl_freq ${default-params:default-lte-dl-freq}
    raw default_lte_band ${default-params:default-lte-band}
    raw default_lte_n_rb_dl ${default-params:default-lte-n-rb-dl}
    raw default_lte_tx_gain ${default-params:default-lte-tx-gain}
    raw default_lte_rx_gain ${default-params:default-lte-rx-gain}
    raw default_lte_inactivity_timer ${default-params:default-lte-inactivity-timer}
    raw default_n_antenna_dl ${default-params:default-n-antenna-dl}
    raw default_n_antenna_ul ${default-params:default-n-antenna-ul}
    raw min_frequency ${default-params:min-frequency}
    raw max_frequency ${default-params:max-frequency}

[dynamic-template-gnb]
< = jinja2-template-base
url = ${template-gnb:target}
filename = instance-gnb.cfg
extensions = jinja2.ext.do
extra-context =
    raw monitor_template ${monitor2-template:output}
    key enb amarisoft:enb
    key sdr amarisoft:sdr
    raw gnb_template   ${gnb.jinja2.cfg:target}
    raw ltelogs_template   ${ltelogs.jinja2.sh:target}
    raw amarisoft_stats_template   ${amarisoft-stats.jinja2.py:target}
    raw amarisoft_rf_info_template   ${amarisoft-rf-info.jinja2.py:target}
    raw openssl_location ${openssl:location}
    raw default_dl_nr_arfcn ${default-params:default-dl-nr-arfcn}
    raw default_nr_band ${default-params:default-nr-band}
    raw default_nr_dl_freq ${default-params:default-nr-dl-freq}
    raw default_nr_bandwidth ${default-params:default-nr-bandwidth}
    raw default_nr_tx_gain ${default-params:default-nr-tx-gain}
    raw default_nr_rx_gain ${default-params:default-nr-rx-gain}
    raw default_nr_ssb_pos_bitmap ${default-params:default-nr-ssb-pos-bitmap}
    raw default_nr_inactivity_timer ${default-params:default-nr-inactivity-timer}
    raw default_n_antenna_dl ${default-params:default-n-antenna-dl}
    raw default_n_antenna_ul ${default-params:default-n-antenna-ul}
    raw min_frequency ${default-params:min-frequency}
    raw max_frequency ${default-params:max-frequency}
    raw python_path ${python3:location}

[dynamic-template-core-network]
< = jinja2-template-base
url = ${template-core-network:target}
filename = instance-core-network.cfg
extensions = jinja2.ext.do
extra-context =
    raw monitor_template ${monitor2-template:output}
    key mme amarisoft:mme
    raw mme_template   ${mme.jinja2.cfg:target}
    raw ims_template   ${ims.jinja2.cfg:target}
    raw ltelogs_template   ${ltelogs.jinja2.sh:target}
    raw openssl_location ${openssl:location}
    raw nghttp2_location ${nghttp2:location}
    raw iperf3_location ${iperf3:location}
    key ue_db_path ue-db-config:output
    key slave_instance_list slap-configuration:slave-instance-list

[dynamic-template-ue-lte]
< = jinja2-template-base
url = ${template-ue-lte:target}
filename = instance-ue-lte.cfg
extensions = jinja2.ext.do
extra-context =
    raw monitor_template ${monitor2-template:output}
    key ue amarisoft:ue
    key sdr amarisoft:sdr
    raw ue_lte_template   ${ue-lte.jinja2.cfg:target}
    raw ltelogs_template   ${ltelogs.jinja2.sh:target}
    raw openssl_location ${openssl:location}
    raw default_dl_earfcn ${default-params:default-dl-earfcn}
    raw default_lte_dl_freq ${default-params:default-lte-dl-freq}
    raw default_lte_n_rb_dl ${default-params:default-lte-n-rb-dl}
    raw default_lte_tx_gain ${default-params:default-lte-tx-gain}
    raw default_lte_rx_gain ${default-params:default-lte-rx-gain}
    raw default_n_antenna_dl ${default-params:default-n-antenna-dl}
    raw default_n_antenna_ul ${default-params:default-n-antenna-ul}
    raw default_lte_imsi ${default-params:default-lte-imsi}
    raw default_lte_k ${default-params:default-lte-k}

[dynamic-template-ue-nr]
< = jinja2-template-base
url = ${template-ue-nr:target}
filename = instance-ue-nr.cfg
extensions = jinja2.ext.do
extra-context =
    raw monitor_template ${monitor2-template:output}
    key ue amarisoft:ue
    key sdr amarisoft:sdr
    raw ue_nr_template   ${ue-nr.jinja2.cfg:target}
    raw ltelogs_template   ${ltelogs.jinja2.sh:target}
    raw openssl_location ${openssl:location}
    raw default_dl_nr_arfcn ${default-params:default-dl-nr-arfcn}
    raw default_nr_band ${default-params:default-nr-band}
    raw default_nr_bandwidth ${default-params:default-nr-bandwidth}
    raw default_nr_tx_gain ${default-params:default-nr-tx-gain}
    raw default_nr_rx_gain ${default-params:default-nr-rx-gain}
    raw default_n_antenna_dl ${default-params:default-n-antenna-dl}
    raw default_n_antenna_ul ${default-params:default-n-antenna-ul}
    raw default_nr_imsi ${default-params:default-nr-imsi}
    raw default_nr_k ${default-params:default-nr-k}
    raw default_ssb_nr_arfcn ${default-params:default-ssb-nr-arfcn}

[ue-db-config]
recipe = slapos.recipe.template:jinja2
url = ${ue_db.jinja2.cfg:target}
filename = ue_db.cfg
extensions = jinja2.ext.do
output = $${buildout:directory}/$${:filename}
context =
    import json_module json
    key slave_instance_list slap-configuration:slave-instance-list