[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 epc_ipv4 ethernet-ip:ipv4
    $${:extra-context}

[amarisoft]
recipe = slapos.recipe.build
init =
  import os
  lte_version = "2021-09-18"
  path = "/opt/amarisoft/v" + lte_version
  options['lte-version'] = lte_version
  options['path'] = path
  options['enb'] = path + "/enb"
  options['mme'] = path + "/mme"
  options['ims'] = path + "/ims"
  options['ue'] = path + "/ue"

[ethernet-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-epc = dynamic-template-lte-enb-epc:output
gnb-epc = dynamic-template-lte-gnb-epc:output
epc = dynamic-template-lte-epc:output
enb = dynamic-template-lte-enb:output
gnb = dynamic-template-lte-gnb:output
mme = dynamic-template-lte-mme:output
ue-lte = dynamic-template-lte-ue-lte:output
ue-nr = dynamic-template-lte-ue-nr:output
RootSoftwareInstance = $${:enb-epc}

[dynamic-template-lte-enb-epc]
< = jinja2-template-base
url = ${template-lte-enb-epc:target}
filename = instance-lte-enb-epc.cfg
extensions = jinja2.ext.do
extra-context =
    raw monitor_template ${monitor2-template:output}
    key slave_instance_list slap-configuration:slave-instance-list

[dynamic-template-lte-gnb-epc]
< = jinja2-template-base
url = ${template-lte-gnb-epc:target}
filename = instance-lte-gnb-epc.cfg
extensions = jinja2.ext.do
extra-context =
    raw monitor_template ${monitor2-template:output}
    key slave_instance_list slap-configuration:slave-instance-list

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

[dynamic-template-lte-enb]
< = jinja2-template-base
url = ${template-lte-enb:target}
filename = instance-lte-enb.cfg
extensions = jinja2.ext.do
extra-context =
    raw monitor_template ${monitor2-template:output}
    key enb amarisoft:enb
    raw enb_template   ${enb.jinja2.cfg:target}
    raw sib23   ${sib23.asn:target}
    raw ltelogs_template   ${ltelogs.jinja2.sh:target}
    raw sdr_busy_promise   ${sdr-busy-promise:target}
    raw openssl_location ${openssl:location}
    raw default_dl_earfcn ${enb:default-dl-earfcn}
    raw default_lte_dl_freq ${enb:default-lte-dl-freq}
    raw default_lte_band ${enb:default-lte-band}
    raw default_lte_n_rb_dl ${enb:default-lte-n-rb-dl}
    raw default_lte_tx_gain ${enb:default-lte-tx-gain}
    raw default_lte_rx_gain ${enb:default-lte-rx-gain}
    raw min_frequency ${enb:min-frequency}
    raw max_frequency ${enb:max-frequency}

[dynamic-template-lte-gnb]
< = jinja2-template-base
url = ${template-lte-gnb:target}
filename = instance-lte-gnb.cfg
extensions = jinja2.ext.do
extra-context =
    raw monitor_template ${monitor2-template:output}
    key enb amarisoft:enb
    raw gnb_template   ${gnb.jinja2.cfg:target}
    raw ltelogs_template   ${ltelogs.jinja2.sh:target}
    raw sdr_busy_promise   ${sdr-busy-promise:target}
    raw openssl_location ${openssl:location}
    raw default_dl_nr_arfcn ${enb:default-dl-nr-arfcn}
    raw default_nr_band ${enb:default-nr-band}
    raw default_nr_dl_freq ${enb:default-nr-dl-freq}
    raw default_nr_bandwidth ${enb:default-nr-bandwidth}
    raw default_nr_tx_gain ${enb:default-nr-tx-gain}
    raw default_nr_rx_gain ${enb:default-nr-rx-gain}
    raw default_nr_ssb_pos_bitmap ${enb:default-nr-ssb-pos-bitmap}
    raw min_frequency ${enb:min-frequency}
    raw max_frequency ${enb:max-frequency}

[dynamic-template-lte-mme]
< = jinja2-template-base
url = ${template-lte-mme:target}
filename = instance-lte-mme.cfg
extensions = jinja2.ext.do
extra-context =
    raw monitor_template ${monitor2-template:output}
    raw interface_up_promise   ${interface-up-promise:target}
    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

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

[dynamic-template-lte-ue-nr]
< = jinja2-template-base
url = ${template-lte-ue-nr:target}
filename = instance-lte-ue-nr.cfg
extensions = jinja2.ext.do
extra-context =
    raw monitor_template ${monitor2-template:output}
    raw interface_up_promise   ${interface-up-promise:target}
    key ue amarisoft:ue
    raw ue_nr_template   ${ue-nr.jinja2.cfg:target}
    raw ltelogs_template   ${ltelogs.jinja2.sh:target}
    raw sdr_busy_promise   ${sdr-busy-promise:target}
    raw openssl_location ${openssl:location}
    raw default_dl_nr_arfcn ${enb:default-dl-nr-arfcn}
    raw default_nr_band ${enb:default-nr-band}
    raw default_nr_bandwidth ${enb:default-nr-bandwidth}
    raw default_nr_tx_gain ${enb:default-nr-tx-gain}
    raw default_nr_rx_gain ${enb:default-nr-rx-gain}
    raw default_n_antenna_dl ${enb:default-n-antenna-dl}
    raw default_n_antenna_ul ${enb:default-n-antenna-ul}
    raw default_nr_imsi ${enb:default-nr-imsi}
    raw default_nr_k ${enb:default-nr-k}
    raw default_ssb_nr_arfcn ${enb: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:configuration.slave-list