Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
slapos
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Titouan Soulard
slapos
Commits
4d892d6d
Commit
4d892d6d
authored
Oct 20, 2023
by
Joanne Hugé
Browse files
Options
Browse Files
Download
Plain Diff
Update Release Candidate
parents
c7b5f9a4
b3fd002e
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
68 additions
and
43 deletions
+68
-43
component/fluent-bit/buildout.cfg
component/fluent-bit/buildout.cfg
+1
-0
software/ors-amarisoft/buildout.hash.cfg
software/ors-amarisoft/buildout.hash.cfg
+7
-7
software/ors-amarisoft/config/enb.jinja2.cfg
software/ors-amarisoft/config/enb.jinja2.cfg
+4
-4
software/ors-amarisoft/config/gnb.jinja2.cfg
software/ors-amarisoft/config/gnb.jinja2.cfg
+4
-4
software/ors-amarisoft/config/mme.jinja2.cfg
software/ors-amarisoft/config/mme.jinja2.cfg
+3
-3
software/ors-amarisoft/instance-core-network-input-schema.json
...are/ors-amarisoft/instance-core-network-input-schema.json
+12
-0
software/ors-amarisoft/instance-core-network.jinja2.cfg
software/ors-amarisoft/instance-core-network.jinja2.cfg
+3
-8
software/ors-amarisoft/instance-enb.jinja2.cfg
software/ors-amarisoft/instance-enb.jinja2.cfg
+6
-8
software/ors-amarisoft/instance-gnb.jinja2.cfg
software/ors-amarisoft/instance-gnb.jinja2.cfg
+6
-8
software/ors-amarisoft/instance.cfg
software/ors-amarisoft/instance.cfg
+22
-1
No files found.
component/fluent-bit/buildout.cfg
View file @
4d892d6d
...
@@ -19,6 +19,7 @@ configure-options =
...
@@ -19,6 +19,7 @@ configure-options =
-DCMAKE_INSTALL_PREFIX=@@LOCATION@@
-DCMAKE_INSTALL_PREFIX=@@LOCATION@@
-DFLB_LIBYAML_DIR=${libyaml:location}
-DFLB_LIBYAML_DIR=${libyaml:location}
-DOPENSSL_ROOT_DIR=${openssl:location}
-DOPENSSL_ROOT_DIR=${openssl:location}
-DZLIB_LIBRARY=${zlib:location}/lib/libz.so
environment =
environment =
PATH=${bison:location}/bin:${flex:location}/bin:%(PATH)s
PATH=${bison:location}/bin:${flex:location}/bin:%(PATH)s
LDFLAGS=-Wl,-rpath=${libyaml:location}/lib -Wl,-rpath=${openssl:location}/lib -Wl,-rpath=${zlib:location}/lib
LDFLAGS=-Wl,-rpath=${libyaml:location}/lib -Wl,-rpath=${openssl:location}/lib -Wl,-rpath=${zlib:location}/lib
...
...
software/ors-amarisoft/buildout.hash.cfg
View file @
4d892d6d
...
@@ -16,7 +16,7 @@
...
@@ -16,7 +16,7 @@
[template]
[template]
filename = instance.cfg
filename = instance.cfg
md5sum =
998b5ec0dc8c76736c624af2f96ea94
d
md5sum =
3919d261bdf366b7f7cc5149ab4c609
d
[amarisoft-stats.jinja2.py]
[amarisoft-stats.jinja2.py]
_update_hash_filename_ = amarisoft-stats.jinja2.py
_update_hash_filename_ = amarisoft-stats.jinja2.py
...
@@ -56,15 +56,15 @@ md5sum = 63472d5dc9bd46923d3941b5189e2ccd
...
@@ -56,15 +56,15 @@ md5sum = 63472d5dc9bd46923d3941b5189e2ccd
[template-enb]
[template-enb]
_update_hash_filename_ = instance-enb.jinja2.cfg
_update_hash_filename_ = instance-enb.jinja2.cfg
md5sum =
d1111793f54ef444f864a7adf815c822
md5sum =
6be204217dd3c4ce240184ec31332cd6
[template-gnb]
[template-gnb]
_update_hash_filename_ = instance-gnb.jinja2.cfg
_update_hash_filename_ = instance-gnb.jinja2.cfg
md5sum = e
758c9358c49360ef0b3db946ab0f493
md5sum = e
4d8c66c00dc5c022e9208c10e37490e
[template-core-network]
[template-core-network]
_update_hash_filename_ = instance-core-network.jinja2.cfg
_update_hash_filename_ = instance-core-network.jinja2.cfg
md5sum =
eda157219444c3ac10272626dd5cea10
md5sum =
919340a049d628a86838453354c9efa2
[template-ue-lte]
[template-ue-lte]
_update_hash_filename_ = instance-ue-lte.jinja2.cfg
_update_hash_filename_ = instance-ue-lte.jinja2.cfg
...
@@ -84,7 +84,7 @@ md5sum = dcaac06553a3222b14c0013a13f4a149
...
@@ -84,7 +84,7 @@ md5sum = dcaac06553a3222b14c0013a13f4a149
[enb.jinja2.cfg]
[enb.jinja2.cfg]
filename = config/enb.jinja2.cfg
filename = config/enb.jinja2.cfg
md5sum =
0251445fc4b1139000b99ff28ef729c9
md5sum =
c1fef7cec616ba3594549090591a56d2
[sib23.jinja2.asn]
[sib23.jinja2.asn]
filename = config/sib23.jinja2.asn
filename = config/sib23.jinja2.asn
...
@@ -92,7 +92,7 @@ md5sum = a1973ba6e43d40e510d61d461c2d13ac
...
@@ -92,7 +92,7 @@ md5sum = a1973ba6e43d40e510d61d461c2d13ac
[gnb.jinja2.cfg]
[gnb.jinja2.cfg]
filename = config/gnb.jinja2.cfg
filename = config/gnb.jinja2.cfg
md5sum =
2fdb4812960bec30118e61e61554652b
md5sum =
075df4848e08ef8a595b33164238a0e7
[ltelogs.jinja2.sh]
[ltelogs.jinja2.sh]
filename = ltelogs.jinja2.sh
filename = ltelogs.jinja2.sh
...
@@ -100,7 +100,7 @@ md5sum = 1ba2e065bdf14a6411e95e80db17dcfd
...
@@ -100,7 +100,7 @@ md5sum = 1ba2e065bdf14a6411e95e80db17dcfd
[mme.jinja2.cfg]
[mme.jinja2.cfg]
filename = config/mme.jinja2.cfg
filename = config/mme.jinja2.cfg
md5sum =
48b577daa5b53c2cf7fe2d30ea9c0235
md5sum =
3d7833ddba3242cedcd74c7db52390c6
[dnsmasq.jinja2.cfg]
[dnsmasq.jinja2.cfg]
filename = config/dnsmasq.jinja2.cfg
filename = config/dnsmasq.jinja2.cfg
...
...
software/ors-amarisoft/config/enb.jinja2.cfg
View file @
4d892d6d
...
@@ -118,12 +118,12 @@
...
@@ -118,12 +118,12 @@
rx_gain: {{ rx_gain }},
rx_gain: {{ rx_gain }},
{% endif %}
{% endif %}
{%- if slapparameter_dict.get('websocket_password', '') %}
{%- if slapparameter_dict.get('websocket_password', '') %}
com_addr: "[{{ gtp_addr_v6 }}]:
9001
",
com_addr: "[{{ gtp_addr_v6 }}]:
{{ slap_configuration['configuration.com_ws_port'] }}
",
com_auth: {
com_auth: {
password: "{{ slapparameter_dict['websocket_password'] }}",
password: "{{ slapparameter_dict['websocket_password'] }}",
},
},
{%- else %}
{%- else %}
com_addr: "
127.0.1.2:9001
",
com_addr: "
{{ slap_configuration['configuration.com_addr'] }}:{{ slap_configuration['configuration.com_ws_port'] }}
",
{%- endif %}
{%- endif %}
mme_list: [
mme_list: [
...
@@ -139,7 +139,7 @@
...
@@ -139,7 +139,7 @@
{%- endfor -%}
{%- endfor -%}
{% else %}
{% else %}
{
{
mme_addr: "
127.0.1.100
",
mme_addr: "
{{ slap_configuration['configuration.mme_addr'] }}
",
},
},
{% endif %}
{% endif %}
],
],
...
@@ -154,7 +154,7 @@
...
@@ -154,7 +154,7 @@
{% endif %}
{% endif %}
{% endif %}
{% endif %}
{% else %}
{% else %}
gtp_addr: "
127.0.1.1
",
gtp_addr: "
{{ slap_configuration['configuration.gtp_addr'] }}
",
{% endif %}
{% endif %}
enb_id: {{ slapparameter_dict.get('enb_id', '0x1A2D0') }},
enb_id: {{ slapparameter_dict.get('enb_id', '0x1A2D0') }},
...
...
software/ors-amarisoft/config/gnb.jinja2.cfg
View file @
4d892d6d
...
@@ -54,12 +54,12 @@
...
@@ -54,12 +54,12 @@
rx_gain: {{ rx_gain }},
rx_gain: {{ rx_gain }},
{% endif %}
{% endif %}
{%- if slapparameter_dict.get('websocket_password', '') %}
{%- if slapparameter_dict.get('websocket_password', '') %}
com_addr: "[{{ gtp_addr_v6 }}]:
9001
",
com_addr: "[{{ gtp_addr_v6 }}]:
{{ slap_configuration['configuration.com_ws_port'] }}
",
com_auth: {
com_auth: {
password: "{{ slapparameter_dict['websocket_password'] }}",
password: "{{ slapparameter_dict['websocket_password'] }}",
},
},
{%- else %}
{%- else %}
com_addr: "
127.0.1.2:9001
",
com_addr: "
{{ slap_configuration['configuration.com_addr'] }}:{{ slap_configuration['configuration.com_ws_port'] }}
",
{%- endif %}
{%- endif %}
amf_list: [
amf_list: [
{% if slapparameter_dict.get('amf_list', '') %}
{% if slapparameter_dict.get('amf_list', '') %}
...
@@ -74,7 +74,7 @@
...
@@ -74,7 +74,7 @@
{%- endfor -%}
{%- endfor -%}
{% else %}
{% else %}
{
{
amf_addr: "
127.0.1.100
",
amf_addr: "
{{ slap_configuration['configuration.amf_addr'] }}
",
},
},
{% endif %}
{% endif %}
],
],
...
@@ -94,7 +94,7 @@
...
@@ -94,7 +94,7 @@
gtp_addr: "{{ gtp_addr_v6 }}",
gtp_addr: "{{ gtp_addr_v6 }}",
{% endif %}
{% endif %}
{% else %}
{% else %}
gtp_addr: "
127.0.1.1
",
gtp_addr: "
{{ slap_configuration['configuration.gtp_addr'] }}
",
{% endif %}
{% endif %}
gnb_id_bits: {{ slapparameter_dict.get('gnb_id_bits', 28) }},
gnb_id_bits: {{ slapparameter_dict.get('gnb_id_bits', 28) }},
...
...
software/ors-amarisoft/config/mme.jinja2.cfg
View file @
4d892d6d
...
@@ -9,7 +9,7 @@
...
@@ -9,7 +9,7 @@
gtp_addr: "{{ gtp_addr_v6 }}",
gtp_addr: "{{ gtp_addr_v6 }}",
{% endif %}
{% endif %}
{% else %}
{% else %}
gtp_addr: "
127.0.1.100
",
gtp_addr: "
{{ slap_configuration['configuration.gtp_addr'] }}
",
{% endif %}
{% endif %}
plmn: "{{ slapparameter_dict.get('core_network_plmn', "00101") }}",
plmn: "{{ slapparameter_dict.get('core_network_plmn', "00101") }}",
...
@@ -30,8 +30,8 @@
...
@@ -30,8 +30,8 @@
},
},
network_name: "{{ slap
_configuration['configuration.network_name']
}}",
network_name: "{{ slap
parameter_dict.get('network_name', 'RAPIDSPACE')
}}",
network_short_name: "{{ slap
_configuration['configuration.network_name']
}}",
network_short_name: "{{ slap
parameter_dict.get('network_short_name', 'RAPIDSPACE')
}}",
cp_ciot_opt: true,
cp_ciot_opt: true,
...
...
software/ors-amarisoft/instance-core-network-input-schema.json
View file @
4d892d6d
...
@@ -27,6 +27,18 @@
...
@@ -27,6 +27,18 @@
"description"
:
"Activates local DNS server serving the given domain name"
,
"description"
:
"Activates local DNS server serving the given domain name"
,
"type"
:
"string"
"type"
:
"string"
},
},
"network_name"
:
{
"title"
:
"Network Name"
,
"description"
:
"Network name displayed on UE"
,
"type"
:
"string"
,
"default"
:
"RAPIDSPACE"
},
"network_short_name"
:
{
"title"
:
"Network Short Name"
,
"description"
:
"Network short name displayed on UE"
,
"type"
:
"string"
,
"default"
:
"RAPIDSPACE"
},
"use_ipv4"
:
{
"use_ipv4"
:
{
"default"
:
false
,
"default"
:
false
,
"title"
:
"Use IPv4"
,
"title"
:
"Use IPv4"
,
...
...
software/ors-amarisoft/instance-core-network.jinja2.cfg
View file @
4d892d6d
...
@@ -67,16 +67,9 @@ partition = {{ slap_connection['partition-id'] }}
...
@@ -67,16 +67,9 @@ partition = {{ slap_connection['partition-id'] }}
url = {{ slap_connection['server-url'] }}
url = {{ slap_connection['server-url'] }}
key = {{ slap_connection['key-file'] }}
key = {{ slap_connection['key-file'] }}
cert = {{ slap_connection['cert-file'] }}
cert = {{ slap_connection['cert-file'] }}
configuration.network_name = RAPIDSPACE
configuration.gtp_addr = 127.0.1.100
configuration.domain = rapid.space
configuration.log_size = 50M
configuration.mme_ws_port = 9000
configuration.enb_ws_port = 9002
configuration.ims_ws_port = 9003
configuration.mme_addr = 127.0.1.100
configuration.ims_addr = 127.0.0.1
configuration.ims_addr = 127.0.0.1
configuration.ims_bind = 127.0.0.2
configuration.ims_bind = 127.0.0.2
configuration.enb_addr = 127.0.1.1
ue_db_path = {{ ue_db_path }}
ue_db_path = {{ ue_db_path }}
[monitor-httpd-conf-parameter]
[monitor-httpd-conf-parameter]
...
@@ -252,6 +245,8 @@ password = {{ slapparameter_dict['monitor-password'] | string }}
...
@@ -252,6 +245,8 @@ password = {{ slapparameter_dict['monitor-password'] | string }}
recipe = slapos.cookbook:publish.serialised
recipe = slapos.cookbook:publish.serialised
core-network-ipv6 = ${slap-configuration:ipv6-random}
core-network-ipv6 = ${slap-configuration:ipv6-random}
core-network-ipv4 = {{ lan_ipv4 }}
core-network-ipv4 = {{ lan_ipv4 }}
amarisoft-version = {{ lte_version }}
license-expiration = {{ lte_expiration }}
monitor-gadget-url = ${:monitor-base-url}/gadget/software.cfg.html
monitor-gadget-url = ${:monitor-base-url}/gadget/software.cfg.html
[macro.promise]
[macro.promise]
...
...
software/ors-amarisoft/instance-enb.jinja2.cfg
View file @
4d892d6d
...
@@ -77,14 +77,10 @@ url = {{ slap_connection['server-url'] }}
...
@@ -77,14 +77,10 @@ url = {{ slap_connection['server-url'] }}
key = {{ slap_connection['key-file'] }}
key = {{ slap_connection['key-file'] }}
cert = {{ slap_connection['cert-file'] }}
cert = {{ slap_connection['cert-file'] }}
configuration.network_name = RAPIDSPACE
configuration.com_ws_port = 9001
configuration.domain = rapid.space
configuration.com_addr = 127.0.1.2
configuration.mme_ws_port = 9000
configuration.mme_addr = 127.0.1.100
configuration.enb_ws_port = 9002
configuration.gtp_addr = 127.0.1.1
configuration.ims_ws_port = 9003
configuration.ims_addr = 127.0.0.1
configuration.ims_bind = 127.0.0.2
configuration.enb_addr = 127.0.1.1
configuration.default_lte_bandwidth = {{ default_lte_bandwidth }}
configuration.default_lte_bandwidth = {{ default_lte_bandwidth }}
configuration.default_lte_inactivity_timer = {{ default_lte_inactivity_timer }}
configuration.default_lte_inactivity_timer = {{ default_lte_inactivity_timer }}
configuration.default_n_antenna_dl = {{ default_n_antenna_dl }}
configuration.default_n_antenna_dl = {{ default_n_antenna_dl }}
...
@@ -592,6 +588,8 @@ current-tx-gain = {{ ors_version['current-tx-gain'] }}
...
@@ -592,6 +588,8 @@ current-tx-gain = {{ ors_version['current-tx-gain'] }}
current-rx-gain = {{ ors_version['current-rx-gain'] }}
current-rx-gain = {{ ors_version['current-rx-gain'] }}
{% endif %}
{% endif %}
current-earfcn = {{ ors_version['current-earfcn'] }}
current-earfcn = {{ ors_version['current-earfcn'] }}
amarisoft-version = {{ lte_version }}
license-expiration = {{ lte_expiration }}
monitor-gadget-url = ${:monitor-base-url}/gadget/software.cfg.html
monitor-gadget-url = ${:monitor-base-url}/gadget/software.cfg.html
{% if ru == "lopcomm" %}
{% if ru == "lopcomm" %}
ssh-command = ssh ${user-info:pw-name}@${slap-configuration:ipv6-random} -p ${sshd-port:port}
ssh-command = ssh ${user-info:pw-name}@${slap-configuration:ipv6-random} -p ${sshd-port:port}
...
...
software/ors-amarisoft/instance-gnb.jinja2.cfg
View file @
4d892d6d
...
@@ -45,14 +45,10 @@ url = {{ slap_connection['server-url'] }}
...
@@ -45,14 +45,10 @@ url = {{ slap_connection['server-url'] }}
key = {{ slap_connection['key-file'] }}
key = {{ slap_connection['key-file'] }}
cert = {{ slap_connection['cert-file'] }}
cert = {{ slap_connection['cert-file'] }}
configuration.network_name = RAPIDSPACE
configuration.com_ws_port = 9001
configuration.domain = rapid.space
configuration.com_addr = 127.0.1.2
configuration.mme_ws_port = 9000
configuration.amf_addr = 127.0.1.100
configuration.enb_ws_port = 9002
configuration.gtp_addr = 127.0.1.1
configuration.ims_ws_port = 9003
configuration.ims_addr = 127.0.0.1
configuration.ims_bind = 127.0.0.2
configuration.enb_addr = 127.0.1.1
configuration.default_nr_bandwidth = {{ default_nr_bandwidth }}
configuration.default_nr_bandwidth = {{ default_nr_bandwidth }}
configuration.default_nr_inactivity_timer = {{ default_nr_inactivity_timer }}
configuration.default_nr_inactivity_timer = {{ default_nr_inactivity_timer }}
configuration.default_nr_ssb_pos_bitmap = {{ default_nr_ssb_pos_bitmap }}
configuration.default_nr_ssb_pos_bitmap = {{ default_nr_ssb_pos_bitmap }}
...
@@ -281,6 +277,8 @@ current-tx-gain = {{ ors_version['current-tx-gain'] }}
...
@@ -281,6 +277,8 @@ current-tx-gain = {{ ors_version['current-tx-gain'] }}
current-rx-gain = {{ ors_version['current-rx-gain'] }}
current-rx-gain = {{ ors_version['current-rx-gain'] }}
current-nr-arfcn = {{ ors_version['current-nr-arfcn'] }}
current-nr-arfcn = {{ ors_version['current-nr-arfcn'] }}
current-nr-band = {{ ors_version['current-nr-band'] }}
current-nr-band = {{ ors_version['current-nr-band'] }}
amarisoft-version = {{ lte_version }}
license-expiration = {{ lte_expiration }}
monitor-gadget-url = ${:monitor-base-url}/gadget/software.cfg.html
monitor-gadget-url = ${:monitor-base-url}/gadget/software.cfg.html
[monitor-instance-parameter]
[monitor-instance-parameter]
...
...
software/ors-amarisoft/instance.cfg
View file @
4d892d6d
...
@@ -55,6 +55,20 @@ init =
...
@@ -55,6 +55,20 @@ init =
options['mme'] = path + "/mme"
options['mme'] = path + "/mme"
options['ims'] = path + "/ims"
options['ims'] = path + "/ims"
options['ue'] = path + "/ue"
options['ue'] = path + "/ue"
import os
lte_expiration = "Unknown"
amarisoft_dir = '/opt/amarisoft/.amarisoft'
try:
for filename in os.listdir(amarisoft_dir):
if filename.endswith('.key'):
with open(os.path.join(amarisoft_dir, filename), 'r') as f:
f.seek(260)
for l in f:
if l.startswith('version='):
lte_expiration = l.split('=')[1].strip()
except FileNotFoundError:
pass
options['lte-expiration'] = lte_expiration
[ors-version]
[ors-version]
recipe = slapos.recipe.build
recipe = slapos.recipe.build
...
@@ -161,7 +175,8 @@ init =
...
@@ -161,7 +175,8 @@ init =
return subprocess.check_output(
return subprocess.check_output(
["sudo", "-n", "/opt/amarisoft/get-sdr-info", "-" + cmd]
["sudo", "-n", "/opt/amarisoft/get-sdr-info", "-" + cmd]
)
)
options['version'] = float(get_sdr_info('v').decode())
version = get_sdr_info('v').decode()
options['version'] = float(version) if version != 'UNKNOWN' else 0
options['band'] = get_sdr_info('b').decode()
options['band'] = get_sdr_info('b').decode()
options['tdd'] = get_sdr_info('t').decode()
options['tdd'] = get_sdr_info('t').decode()
options['one-watt'] = bool(options['version'] >= 4)
options['one-watt'] = bool(options['version'] >= 4)
...
@@ -247,6 +262,8 @@ extra-context =
...
@@ -247,6 +262,8 @@ extra-context =
raw monitor_template ${monitor2-template:output}
raw monitor_template ${monitor2-template:output}
section ors_version ors-version
section ors_version ors-version
section ors_id ors-id
section ors_id ors-id
key lte_version amarisoft:lte-version
key lte_expiration amarisoft:lte-expiration
key enb amarisoft:enb
key enb amarisoft:enb
key sdr amarisoft:sdr
key sdr amarisoft:sdr
raw enb_template ${enb.jinja2.cfg:target}
raw enb_template ${enb.jinja2.cfg:target}
...
@@ -283,6 +300,8 @@ extra-context =
...
@@ -283,6 +300,8 @@ extra-context =
raw monitor_template ${monitor2-template:output}
raw monitor_template ${monitor2-template:output}
section ors_version ors-version
section ors_version ors-version
section ors_id ors-id
section ors_id ors-id
key lte_version amarisoft:lte-version
key lte_expiration amarisoft:lte-expiration
key enb amarisoft:enb
key enb amarisoft:enb
key sdr amarisoft:sdr
key sdr amarisoft:sdr
raw gnb_template ${gnb.jinja2.cfg:target}
raw gnb_template ${gnb.jinja2.cfg:target}
...
@@ -305,6 +324,8 @@ filename = instance-core-network.cfg
...
@@ -305,6 +324,8 @@ filename = instance-core-network.cfg
extensions = jinja2.ext.do
extensions = jinja2.ext.do
extra-context =
extra-context =
raw monitor_template ${monitor2-template:output}
raw monitor_template ${monitor2-template:output}
key lte_version amarisoft:lte-version
key lte_expiration amarisoft:lte-expiration
key mme amarisoft:mme
key mme amarisoft:mme
raw mme_template ${mme.jinja2.cfg:target}
raw mme_template ${mme.jinja2.cfg:target}
raw dnsmasq_template ${dnsmasq.jinja2.cfg:target}
raw dnsmasq_template ${dnsmasq.jinja2.cfg:target}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment