instance-enb.jinja2.cfg 8.25 KB
Newer Older
1
# instance-enb implements eNB/gNB service.
2

3 4 5 6 7 8
{#- defaults for global eNB/gNB parameters.
    TODO automatically load enb defaults from JSON schema #}
{%- set enb_defaults = {
  'com_ws_port':  9001,
  'com_addr':     '127.0.1.2',
  'use_ipv4':     False,
9 10
  'gnb_id_bits':  28,
  'nssai':        {'1': {'sst': 1}},
11 12 13 14 15 16
} %}
{%- set gtp_addr_lo = '127.0.1.1' %}
{%- for k,v in enb_defaults|dictsort %}
{%-   do slapparameter_dict.setdefault(k, v) %}
{%- endfor %}

17

18 19 20
[buildout]
parts =
  directory
21 22
  enb-config
  enb-service
23
  xamari-xlog-service
24 25 26
{% if slapparameter_dict.get('xlog_fluentbit_forward_host') %}
  xlog-fluentbit-service
{% endif %}
27
  check-baseband-latency.py
28
  monitor-base
29 30 31 32 33 34 35 36
  publish-connection-information

extends = {{ monitor_template }}

eggs-directory = {{ eggs_directory }}
develop-eggs-directory = {{ develop_eggs_directory }}
offline = true

37
{%- set icell_kind='enb'                                        %}
38
{%- import 'slaplte.jinja2'            as slaplte with context  %}
39
{%- import 'ru_libinstance.jinja2.cfg' as rulib   with context  %}
40 41 42 43 44
{%- set ipeer_dict = {}                                         %}
{%- set ipeercell_dict = {}                                     %}
{%- do slaplte.load_ipeer(ipeer_dict)                           %}
{%- do slaplte.load_ipeercell(ipeercell_dict)                   %}
{%- do slaplte.check_loaded_everything()                        %}
45

46 47
{{ rulib.buildout() }}

48 49 50 51 52 53
[myslap]
# NOTE we don't query slapos.cookbook:slapconfiguration the second time because
# slapparameter_dict is potentially modified with defaults.
parameter_dict = {{ dumps(slapparameter_dict) }}
configuration = {{ dumps(slap_configuration) }}

54

55 56 57 58 59 60 61 62 63 64 65 66 67 68
[monitor-httpd-conf-parameter]
httpd-include-file = {{ buildout_directory }}/etc/httpd-include-file.conf
port = ${monitor-instance-parameter:monitor-httpd-port}
url = https://[${monitor-instance-parameter:monitor-httpd-ipv6}]:${:port}

[monitor-instance-parameter]
monitor-httpd-port = ${monitor-address:port}

[monitor-address]
recipe = slapos.cookbook:free_port
minimum = 8035
maximum = 8055
ip = ${monitor-instance-parameter:monitor-httpd-ipv6}

69 70 71 72 73 74 75 76

[directory]
recipe = slapos.cookbook:mkdirectory
software = {{ buildout_directory }}
home = ${buildout:directory}
var = ${:home}/var
etc = ${:home}/etc
bin = ${:home}/bin
77
tmp = ${:home}/tmp
78 79 80 81 82 83
run = ${:var}/run
script = ${:etc}/run
service = ${:etc}/service
promise = ${:etc}/promise
log = ${:var}/log

84 85 86 87 88 89 90 91
{% if slapparameter_dict.get("enb_config_link", None) %}
[enb-config-dl]
recipe = slapos.recipe.build:download
url = {{ slapparameter_dict.get("enb_config_link") }}
version = {{ slapparameter_dict.get("enb_config_version") }}
offline = false
{% endif %}

92
[enb-sh-wrapper]
93 94
recipe = slapos.recipe.template
output = ${directory:bin}/${:_buildout_section_name_}
95
enb-log = ${directory:log}/enb-output.log
96 97
inline =
  #!/bin/sh
Joanne Hugé's avatar
Joanne Hugé committed
98
{% if not slapparameter_dict.get("testing", False) %}
99 100 101
  sudo -n /opt/amarisoft/rm-tmp-lte;
  sudo -n /opt/amarisoft/init-sdr;
  sudo -n /opt/amarisoft/init-enb;
102 103 104 105
  (echo && echo && date "+[%Y/%m/%d %T.%N %Z] Starting eNB software..." && echo) >> ${:enb-log};
  tail -c 1M ${:enb-log} > ${:enb-log}.tmp;
  mv ${:enb-log}.tmp ${:enb-log};
  {{ enb }}/lteenb ${directory:etc}/enb.cfg >> ${:enb-log} 2>> ${:enb-log};
Joanne Hugé's avatar
Joanne Hugé committed
106
{% endif %}
107

108
[enb-service]
109
recipe = slapos.cookbook:wrapper
110 111
command-line = ${enb-sh-wrapper:output}
wrapper-path = ${directory:service}/enb
112 113 114 115
mode = 0775
reserve-cpu = True
pidfile = ${directory:run}/enb.pid
hash-files =
116 117
  ${enb-config:output}
  ${enb-sh-wrapper:output}
118 119 120 121
environment =
  LD_LIBRARY_PATH={{ openssl_location }}/lib
  AMARISOFT_PATH=/opt/amarisoft/.amarisoft

122 123 124 125 126 127 128 129 130 131
[xamari-xlog-script]
recipe = slapos.recipe.template
output = ${directory:bin}/${:_buildout_section_name_}
period = {{ slapparameter_dict.get("enb_stats_fetch_period", 60) }}
stats_logspec = stats[samples,rf]/${:period}s
{%- if slapparameter_dict.get("enb_drb_stats_enabled", True) %}
drb_stats_logspec = x.drb_stats/${:period}s
{%- else %}
drb_stats_logspec =
{%- endif %}
132
rotatespec = 100MB.9
133
logspec = ${:stats_logspec} ${:drb_stats_logspec}
134
{%- if slapparameter_dict.get("websocket_password", "") %}
135
websock = ws://[{{my_ipv6}}]:9001
136
{%- else %}
137
websock = ws://127.0.1.2:9001
138
{%- endif %}
139 140 141 142
xamari = {{ buildout_directory }}/bin/xamari
logfile = ${monitor-directory:public}/enb.xlog
inline =
  #!/bin/sh
143
  exec ${:xamari} xlog --rotate ${:rotatespec} ${:websock} ${:logfile} ${:logspec}
144 145 146 147 148 149 150

[xamari-xlog-service]
recipe = slapos.cookbook:wrapper
wrapper-path = ${directory:service}/${:_buildout_section_name_}
command-line = ${xamari-xlog-script:output}
hash-files = ${:command-line}

151 152 153 154 155 156 157 158
{% if slapparameter_dict.get('xlog_fluentbit_forward_host') %}
[xlog-fluentbit-config]
recipe = slapos.recipe.template
output = ${directory:etc}/${:_buildout_section_name_}.cfg
logfile = ${xamari-xlog-script:logfile}
forward-host = {{ slapparameter_dict.get('xlog_fluentbit_forward_host', '') }}
forward-port = {{ slapparameter_dict.get('xlog_fluentbit_forward_port', '') }}
forward-shared-key = {{ slapparameter_dict.get('xlog_fluentbit_forward_shared_key', '') }}
159
forward-self-hostname = {{ comp_id['comp-id'] }}
160 161 162 163 164 165 166 167 168 169 170 171 172 173
inline =
  [SERVICE]
      flush           5
  [INPUT]
      name            tail
      path            ${:logfile}
      Read_from_Head  True
  [OUTPUT]
      name            forward
      match           *
      Host            ${:forward-host}
{%- if slapparameter_dict.get('xlog_fluentbit_forward_port') %}
      Port            ${:forward-port}
{%- endif %}
174
{%- if slapparameter_dict.get('xlog_fluentbit_forward_shared_key') %}
175
      Shared_Key      ${:forward-shared-key}
176
{%- endif %}
177 178 179 180 181 182 183 184 185 186 187 188 189
      Self_Hostname   ${:forward-self-hostname}
      tls             on
      tls.verify      off

[xlog-fluentbit-service]
recipe  = slapos.cookbook:wrapper
fluentbit =  {{ fluent_bit_location }}/bin/fluent-bit
fluentbit-config = ${xlog-fluentbit-config:output}
command-line = ${:fluentbit} -c ${:fluentbit-config}
wrapper-path = ${directory:service}/${:_buildout_section_name_}
hash-files = ${:fluentbit-config}
{% endif %}

190 191 192
[config-base]
recipe = slapos.recipe.template:jinja2
extensions = jinja2.ext.do
193
extra-context =
194
context =
195
  json ors false
196
  section directory directory
197 198 199
  key slap_configuration myslap:configuration
  key slapparameter_dict myslap:parameter_dict
  raw gtp_addr_v6 {{ my_ipv6 }}
200
  raw gtp_addr_v4 {{ lan_ipv4 }}
201
  raw gtp_addr_lo {{ gtp_addr_lo }}
202
  import  xbuildout xbuildout
203
  import  netaddr netaddr
204
  ${:extra-context}
205

206
[enb-config]
207
<= config-base
208
{% if slapparameter_dict.get("enb_config_link", None) %}
209
url = ${enb-config-dl:target}
210
{% else %}
211
url = {{ enb_template }}
212
{% endif %}
213
output = ${directory:etc}/enb.cfg
214 215
import-list =
    rawfile slaplte.jinja2 {{ slaplte_template }}
216 217 218 219 220 221 222 223 224 225
extra-context =
    import json_module json
    key iru_dict       :iru_dict
    key icell_dict     :icell_dict
    key ipeer_dict     :ipeer_dict
    key ipeercell_dict :ipeercell_dict
iru_dict       = {{ dumps(rulib.iru_dict) }}
icell_dict     = {{ dumps(rulib.icell_dict) }}
ipeer_dict     = {{ dumps(ipeer_dict) }}
ipeercell_dict = {{ dumps(ipeercell_dict) }}
226

227 228

[publish-connection-information]
229
<= monitor-publish
230
recipe = slapos.cookbook:publish.serialised
231
{%- if slapparameter_dict.get("websocket_password", "") %}
232
websocket_url = ws://[{{my_ipv6}}]:9001
233
{%- endif %}
234
enb-ipv6 = {{ my_ipv6 }}
235
enb-ipv4 = {{ lan_ipv4 }}
236 237
amarisoft-version = {{ lte_version }}
license-expiration = {{ lte_expiration }}
238
monitor-gadget-url = ${:monitor-base-url}/gadget/software.cfg.html
239 240 241 242 243
ru-list   = {{ dumps(rulib.iru_dict.keys()   | sort) }}
cell-list = {{ dumps(rulib.icell_dict.keys() | sort) }}
peer-list = {{ dumps(ipeer_dict.keys()       | sort) }}
peer-cell-list = {{ dumps(ipeercell_dict.keys() | sort) }}

244 245

[monitor-instance-parameter]
246
{% if slapparameter_dict.get("name", None) %}
247
monitor-title = {{ slapparameter_dict['name'] | string }}
248 249
{% endif %}
{% if slapparameter_dict.get("monitor-password", None) %}
250
password = {{ slapparameter_dict['monitor-password'] | string }}
251
{% endif %}
252

253 254 255 256 257 258 259
[macro.promise]
<= monitor-promise-base
name = ${:_buildout_section_name_}

[check-baseband-latency.py]
<= macro.promise
promise = check_baseband_latency
260
config-testing = {{ slapparameter_dict.get("testing", False) }}
261
config-amarisoft-stats-log = ${ru_amarisoft-stats-template:log-output}
262
config-stats-period = {{ slapparameter_dict.get("enb_stats_fetch_period", 60) }}
263
config-min-rxtx-delay = {{ slapparameter_dict.get("min_rxtx_delay", 0) }}