diff --git a/software/ors-amarisoft/README.md b/software/ors-amarisoft/README.md new file mode 100644 index 0000000000000000000000000000000000000000..004f423479f58479b7128006ffc4525ae8ecbd6c --- /dev/null +++ b/software/ors-amarisoft/README.md @@ -0,0 +1,85 @@ +# ORS Amarisoft software release + +How to deploy from scratch + + 1. Compile and install kernel module lte_trx_sdr by `# cd trx_sdr*/kernel/ && make && sh init.sh` + 2. Make sure to have "create_tun = True" in /etc/opt/slapos/slapos.cfg + 3. Install ors playbook + 4. Deploy this SR + +## Generated buildout configurations and json input schemas + +Since there are many ors-amarisoft softwares releases and software types, the following files are +generated with jinja2 templates with the render-templates script before being pushed to gitlab: + + * instance-tdd1900-enb-epc-input-schema.json + * instance-tdd1900-enb-input-schema.json + * instance-tdd1900-gnb-epc-input-schema.json + * instance-tdd1900-gnb-input-schema.json + * instance-tdd2600-enb-epc-input-schema.json + * instance-tdd2600-enb-input-schema.json + * instance-tdd2600-gnb-epc-input-schema.json + * instance-tdd2600-gnb-input-schema.json + * instance-tdd3500-enb-epc-input-schema.json + * instance-tdd3500-enb-input-schema.json + * instance-tdd3500-gnb-epc-input-schema.json + * instance-tdd3500-gnb-input-schema.json + * instance-tdd3700-enb-epc-input-schema.json + * instance-tdd3700-enb-input-schema.json + * instance-tdd3700-gnb-epc-input-schema.json + * instance-tdd3700-gnb-input-schema.json + * software-tdd1900.cfg + * software-tdd1900.cfg.json + * software-tdd2600.cfg + * software-tdd2600.cfg.json + * software-tdd3500.cfg + * software-tdd3500.cfg.json + * software-tdd3700.cfg + * software-tdd3700.cfg.json + +These files should not be modified directly, and the render-templates scripts should be run along +with update-hash before each commit. + +## Services + +instance.cfg is rather complicated because Amarisoft LTE stack consists of 4 binaries + + * **lteenb** - eNodeB software is the server accepting connection from UI (user interfaces) + * **ltemme** - Mobile Management Entity in other words core network which handles orchestration of + eNodeBs in case UI switches from one to another + * **lteims** - IP Multimedia System is another protocol such as LTE but designed for services over + IP. Please read http://www.differencebetween.com/difference-between-lte-and-vs-ims-2/ + * **ltembmsgw** - Multimedia Broadcast Multicast Services (Gateway) is technology which broadcast + the same multimedia content into multiple IP addresses at once to save bandwidth. + +Those binaries are started in foreground, originaly in screen. We don't want the binaries inside one +screen because then we cannot easily control their resource usage. Thus we make 4 on-watch services. + + +### MME + +Is the core network. This binary keep track of UEs and to which eNodeB they are currently connected. +It reroutes traffic when UE switches between eNodeBs. +MME also serves as a service bus thus all services must register within MME. + + +### IMS + +Service connected into MME bus. IMS handles circuit-ish services over IP whereas LTE would have +failed because it is intended as data-over-IP service. + + +### MBMSGW + +MBMS Gateway is a standalone component connected to BMSC (Broadcast Multicast Service Centre), server +supporting streaming content from providers, which is another component inside our core network not +provided by Amarisoft. +MBMS Gateway is connected to MME which then manages MBMS sessions. + +## Gotchas! + +**trx_sdr.so** provided from archive MUST be placed next to `lteenb` binary. This library is the +only one which does not follow standard `ld` path resolution. + +**rf_driver** has to be compiled and installed. Inside trx_sdr/kernel folder issue `# make` to compile the +kernel module, and then `# ./init.sh` to create devices `/dev/sdr<N>` and insert compiled module. diff --git a/software/ors-amarisoft/buildout.hash.cfg b/software/ors-amarisoft/buildout.hash.cfg new file mode 100644 index 0000000000000000000000000000000000000000..7fc912bb042d52e3161a19960dad629c8a3dcba8 --- /dev/null +++ b/software/ors-amarisoft/buildout.hash.cfg @@ -0,0 +1,63 @@ +# THIS IS NOT A BUILDOUT FILE, despite purposedly using a compatible syntax. +# The only allowed lines here are (regexes): +# - "^#" comments, copied verbatim +# - "^[" section beginings, copied verbatim +# - lines containing an "=" sign which must fit in the following categorie. +# - "^\s*filename\s*=\s*path\s*$" where "path" is relative to this file +# But avoid directories, they are not portable. +# Copied verbatim. +# - "^\s*hashtype\s*=.*" where "hashtype" is one of the values supported +# by the re-generation script. +# Re-generated. +# - other lines are copied verbatim +# Substitution (${...:...}), extension ([buildout] extends = ...) and +# section inheritance (< = ...) are NOT supported (but you should really +# not need these here). + +[template] +filename = instance.cfg +md5sum = 96a76300b2f714b6c47157920fe79a53 + +[template-lte-enb-epc] +_update_hash_filename_ = instance-enb-epc.jinja2.cfg +md5sum = 762d55291e75e8b61e35f9f28d29915a + +[template-lte-enb] +_update_hash_filename_ = instance-enb.jinja2.cfg +md5sum = 77024b4bc87903f1a2ed86245e691800 + +[template-lte-gnb-epc] +_update_hash_filename_ = instance-gnb-epc.jinja2.cfg +md5sum = e43a726dd3023a4bbaa474bb2d7a6ebe + +[template-lte-gnb] +_update_hash_filename_ = instance-gnb.jinja2.cfg +md5sum = 9ac219ea7c331bfc0e5ed3fd4c9991e2 + +[template-lte-epc] +_update_hash_filename_ = instance-epc.jinja2.cfg +md5sum = ed7b80f6a613aea76cb60e6b66cc5bf6 + +[ue_db.jinja2.cfg] +filename = config/ue_db.jinja2.cfg +md5sum = 4e4b40589ca0817d44f638c0612f0a04 + +[enb.jinja2.cfg] +filename = config/enb.jinja2.cfg +md5sum = d841debc51d9f12555a47d1556a6a3c1 + +[gnb.jinja2.cfg] +filename = config/gnb.jinja2.cfg +md5sum = da64ea9c5003f40987a8bba3f18e8839 + +[ltelogs.jinja2.sh] +filename = ltelogs.jinja2.sh +md5sum = 1ba2e065bdf14a6411e95e80db17dcfd + +[mme.jinja2.cfg] +filename = config/mme.jinja2.cfg +md5sum = 518c71ce57204304b703b977c665a164 + +[ims.jinja2.cfg] +filename = config/ims.jinja2.cfg +md5sum = e561ec26a70943c61557def1781cf65f diff --git a/software/ors-amarisoft/config/enb.jinja2.cfg b/software/ors-amarisoft/config/enb.jinja2.cfg new file mode 100644 index 0000000000000000000000000000000000000000..46cbff2432ad658c89939da49534987954f423fe --- /dev/null +++ b/software/ors-amarisoft/config/enb.jinja2.cfg @@ -0,0 +1,278 @@ +/* lteenb configuration file version 2021-09-18 + * Copyright (C) 2015-2021 Amarisoft + */ + +#define TDD 1 // Values: 0 (FDD), 1(TDD) +#define N_RB_DL {{ slapparameter_dict.get('n_rb_dl', slap_configuration['configuration.default_lte_n_rb_dl']) }} // Values: 6 (1.4 MHz), 15 (3MHz), 25 (5MHz), 50 (10MHz), 75 (15MHz), 100 (20MHz) +#define N_ANTENNA_DL 2 // Values: 1 (SISO), 2 (MIMO 2x2) +#define N_ANTENNA_UL 2 // Values: 1, 2 +#define CHANNEL_SIM 0 // Values: 0 (channel simulator disabled), 1 (channel simulator enabled) + +{ + /* Log filter: syntax: layer.field=value[,...] + + Possible layers are phy, mac, rlc, pdcp, rrc, nas, s1ap, x2ap, gtpu and + all. The 'all' layer is used to address all the layers at the + same time. + + field values: + + - 'level': the log level of each layer can be set to 'none', + 'error', 'info' or 'debug'. Use 'debug' to log all the messages. + + - 'max_size': set the maximum size of the hex dump. 0 means no + hex dump. -1 means no limit. + */ + log_options: "all.level=debug,all.max_size=32", + log_filename: "{{ directory['log'] }}/enb.log", + + /* Enable remote API and Web interface */ + com_addr: "[{{ slap_configuration['ipv6-random'] }}]:{{ slap_configuration['configuration.enb_ws_port'] }}", + + /* RF driver configuration */ + rf_driver: { + name: "sdr", + /* list of devices. 'dev0' is always the master. */ + args: "dev0=/dev/sdr0", + /* synchronisation source: none, internal, gps, external (default = none) */ + // sync: "gps", + rx_antenna:"tx_rx", + }, + tx_gain: {{ slapparameter_dict.get('tx_gain', slap_configuration['configuration.default_lte_tx_gain']) }}, /* TX gain (in dB) */ + rx_gain: {{ slapparameter_dict.get('rx_gain', slap_configuration['configuration.default_lte_rx_gain']) }}, /* RX gain (in dB) */ + +#if CHANNEL_SIM == 1 + rf_ports: [ + { + channel_dl: { + type: "awgn", + noise_level: -30, + }, + } + ], +#endif + + mme_list: [ + { + /* address of MME for S1AP connection. Must be modified if the MME + runs on a different host. */ + mme_addr: "127.0.1.100" + }, + ], + /* GTP bind address (=address of the ethernet interface connected to + the MME). Must be modified if the MME runs on a different host. */ + gtp_addr: "{{ slapparameter_dict.get('gtp_addr', '127.0.1.1') }}", + + /* high 20 bits of SIB1.cellIdentifier */ + enb_id: 0x1A2D0, + + /* list of cells */ + cell_list: [ + { + /* Broadcasted PLMN identities */ + plmn_list: [ + "00101", + ], + + dl_earfcn: {{ slapparameter_dict.get('dl_earfcn', slap_configuration['configuration.default_dl_earfcn']) }}, + + n_id_cell: 1, + cell_id: 0x01, + tac: 0x0001, + root_sequence_index: 204, /* PRACH root sequence index */ + }, + ], /* cell_list */ + + /* default cell parameters */ + cell_default: { + n_antenna_dl: N_ANTENNA_DL, /* number of DL antennas */ + n_antenna_ul: N_ANTENNA_UL, /* number of UL antennas */ + +#if TDD == 1 + uldl_config: 2, /* TDD only */ + sp_config: 7, /* TDD only */ +#endif + + n_rb_dl: N_RB_DL, /* Bandwidth: 25: 5 MHz, 50: 10 MHz, 75: 15 MHz, 100: 20 MHz */ + cyclic_prefix: "normal", + + phich_duration: "normal", + phich_resource: "1", /* ratio of NG */ + + /* SIB1 */ + si_value_tag: 0, /* increment modulo 32 if SI is modified */ + cell_barred: false, /* SIB1.cellBarred-r13 */ + intra_freq_reselection: true, /* SIB1.intraFreqReselection */ + q_rx_lev_min: -70, /* SIB1.q-RxLevMin */ + p_max: 10, /* maximum power allowed for the UE (dBm) */ + si_window_length: 40, /* ms */ + sib_sched_list: [ + { + filename: "{{ directory['software'] }}/enb/config/sib23.asn", + si_periodicity: 16, /* frames */ + }, + ], + +#if N_RB_DL == 6 + si_coderate: 0.30, /* maximum code rate for SI/RA/P-RNTI messages */ +#else + si_coderate: 0.20, /* maximum code rate for SI/RA/P-RNTI messages */ +#endif + si_pdcch_format: 2, /* 2 or 3. Log2 of the number of CCEs for PDCCH + for SI/RA/P-RNTI */ + + n_symb_cch: 0, /* number of symbols for CCH (0 = auto) */ + + /* PDSCH dedicated config (currently same for all UEs) */ + pdsch_dedicated: { +#if N_ANTENNA_DL == 4 + p_a: -6, +#elif N_ANTENNA_DL == 2 + p_a: -3, +#else + p_a: 0, +#endif + p_b: -1, /* -1 means automatic */ + }, + + /* If defined, force for number of CCEs for UE specific PDCCH to + 2^pdcch_format. Otherwise it is computed from the reported + CQI. Range: 0 to 3. */ +#if N_RB_DL == 6 + pdcch_format: 1, +#else + pdcch_format: 2, +#endif + + /* if defined, force the PDSCH MCS for all UEs. Otherwise it is + computed from the reported CQI */ + /* pdsch_mcs: 12, */ + +#if N_RB_DL == 6 + prach_config_index: 15, /* subframe 9 every 20 ms */ +#else + prach_config_index: 4, /* subframe 4 every 10 ms */ +#endif + prach_freq_offset: -1, /* -1 means automatic */ + + /* PUCCH dedicated config (currently same for all UEs) */ + pucch_dedicated: { + n1_pucch_sr_count: 11, /* increase if more UEs are needed */ + cqi_pucch_n_rb: 1, /* increase if more UEs are needed */ +#if TDD == 1 + //tdd_ack_nack_feedback_mode: "bundling", /* TDD only */ + tdd_ack_nack_feedback_mode: "multiplexing", /* TDD only */ +#endif + }, + + /* PUSCH dedicated config (currently same for all UEs) */ + pusch_dedicated: { + beta_offset_ack_index: 9, + beta_offset_ri_index: 6, + beta_offset_cqi_index: 6, + }, + + pusch_hopping_offset: -1, /* -1 means automatic */ + + /* MCS for Msg3 (=CCCH RRC Connection Request) */ + pusch_msg3_mcs: 0, + + /* this CQI value is assumed when none is received from the UE */ +#if N_RB_DL == 6 + initial_cqi: 5, +#else + initial_cqi: 3, +#endif + + /* if defined, force the PUSCH MCS for all UEs. Otherwise it is + computed from the last received SRS/PUSCH. */ + // pusch_mcs: 18, + + dl_256qam: true, + ul_64qam: true, + + /* Scheduling request period (ms). Must be >= 40 for HD-FDD */ + sr_period: 20, + + /* CQI report config */ + cqi_period: 40, /* period (ms). Must be >= 32 for HD-FDD */ + +#if N_ANTENNA_DL >= 2 + /* RI reporting is done with a period of m_ri * cqi_period. + m_ri = 0 (default) disables RI reporting. */ + m_ri: 8, + /* transmission mode */ + transmission_mode: 3, +#endif + + /* SRS dedicated config. All UEs share these + parameters. srs_config_index and freq_domain_position are + allocated for each UE) */ + srs_dedicated: { +#if N_RB_DL == 6 + srs_bandwidth_config: 7, + srs_bandwidth: 1, +#elif N_RB_DL == 15 + srs_bandwidth_config: 6, + srs_bandwidth: 1, +#elif N_RB_DL == 25 + srs_bandwidth_config: 3, + srs_bandwidth: 1, +#elif N_RB_DL == 50 + srs_bandwidth_config: 2, + srs_bandwidth: 2, +#elif N_RB_DL == 75 + srs_bandwidth_config: 2, + srs_bandwidth: 2, +#else + srs_bandwidth_config: 2, + srs_bandwidth: 3, +#endif + srs_subframe_config: 3, /* 0 - 15 */ + srs_period: 40, /* period (ms). Must be >= 40 for HD-FDD */ + srs_hopping_bandwidth: 0, + }, + + /* MAC configuration (same for all UEs) */ + mac_config: { + ul_max_harq_tx: 5, /* max number of HARQ transmissions for uplink */ + dl_max_harq_tx: 5, /* max number of HARQ transmissions for downlink */ + }, + + /* CPU load limitation */ + pusch_max_its: 6, /* max number of turbo decoder iterations */ + + /* dynamic power control */ + dpc: true, + dpc_pusch_snr_target: 25, + dpc_pucch_snr_target: 20, + + /* RRC/UP ciphering algorithm preference. EEA0 is always the last. */ + cipher_algo_pref: [], + /* RRC integrity algorithm preference. EIA0 is always the last. */ + integ_algo_pref: [2, 1], + + /* (in ms) send RRC connection release after this time of network + inactivity */ + inactivity_timer: 10000, + + /* SRB configuration */ + srb_config: [ + { + id: 1, + maxRetxThreshold: 32, + t_Reordering: 45, + t_PollRetransmit: 60, + }, + { + id: 2 , + maxRetxThreshold: 32, + t_Reordering: 45, + t_PollRetransmit: 60, + } + ], + + /* DRB configuration */ + drb_config: "{{ directory['software'] }}/enb/config/drb.cfg", + }, +} diff --git a/software/ors-amarisoft/config/gnb.jinja2.cfg b/software/ors-amarisoft/config/gnb.jinja2.cfg new file mode 100644 index 0000000000000000000000000000000000000000..879a6358d1649e1e49e15a1f0e363b5f75b2e048 --- /dev/null +++ b/software/ors-amarisoft/config/gnb.jinja2.cfg @@ -0,0 +1,624 @@ +/* lteenb configuration file version 2021-09-18 + * Copyright (C) 2019-2021 Amarisoft + * NR SA FDD or TDD cell */ + + +#define NR_TDD 1 // Values: 0 (NR FDD), 1(NR TDD) +#define FR2 0 // Values: 0 (FR1), 1 (FR2) +#define NR_TDD_CONFIG 2 // Values: FR1: 1, 2, 3, 4 (compatible with LTE TDD config 2) FR2: 10 +#define N_ANTENNA_DL 2 // Values: 1 (SISO), 2 (MIMO 2x2), 4 (MIMO 4x4) +#define N_ANTENNA_UL 2 // Values: 1, 2, 4 +#define NR_BANDWIDTH {{ slapparameter_dict.get('nr_bandwidth', slap_configuration['configuration.default_nr_bandwidth']) }} // NR cell bandwidth +#define NR_LONG_PUCCH_FORMAT 2 // Values: 2, 3, 4 + +/* define to 1 to enable periodic SRS with N_ANTENNA_UL ports. Uplink + SU-MIMO is also enabled if N_ANTENNA_UL >= 2. Not all UEs support + uplink SU-MIMO. */ +#define USE_SRS 0 + +{ + log_options: "all.level=debug,all.max_size=32", + log_filename: "{{ directory['log'] }}/gnb.log", + + /* Enable remote API and Web interface */ + com_addr: "[{{ slap_configuration['ipv6-random'] }}]:{{ slap_configuration['configuration.enb_ws_port'] }}", + + rf_driver: { + name: "sdr", + /* list of devices. 'dev0' is always the master. */ + args: "dev0=/dev/sdr0", + /* synchronisation source: none, internal, gps, external (default = none) */ + // sync: "gps", + rx_antenna: "tx_rx", + }, + tx_gain: {{ slapparameter_dict.get('tx_gain', slap_configuration['configuration.default_nr_tx_gain']) }}, /* TX gain (in dB) */ + rx_gain: {{ slapparameter_dict.get('rx_gain', slap_configuration['configuration.default_nr_rx_gain']) }}, /* RX gain (in dB) */ + + amf_list: [ + { + /* address of AMF for NGAP connection. Must be modified if the AMF runs on a different host. */ + amf_addr: "127.0.1.100", + }, + ], + /* GTP bind address (=address of the ethernet interface connected to + the AMF). Must be modified if the AMF runs on a different host. */ + gtp_addr: "{{ slapparameter_dict.get('gtp_addr', '127.0.1.1') }}", + + gnb_id_bits: 28, + gnb_id: 0x12345, + + nr_support: true, + + rf_ports: [ + { +#if FR2 + /* an external frequency translator must be used for FR2 */ + rf_dl_freq: 3500, /* MHz */ + rf_ul_freq: 3500, /* MHz */ + + /* uncomment to have a higher per-UE bitrate at the expense of + higher gNB real time constraints. The default value is 4 + ms. 1 ms gives the maximum per-UE bitrate. */ +// rx_to_tx_latency: 1, /* ms */ +#endif + }, + ], + + /* list of cells */ + cell_list: [], + + nr_cell_list: [ + { + rf_port: 0, + cell_id: 0x01, +#if NR_TDD == 1 +#if FR2 + band: 257, + dl_nr_arfcn: 2079167, /* 28000.08 MHz */ + subcarrier_spacing: 120, /* kHz */ + ssb_pos_bitmap: "0100000000000000000000000000000000000000000000000000000000000000", +#else + band: {{ slapparameter_dict.get('nr_band', slap_configuration['configuration.default_nr_band']) }}, + dl_nr_arfcn: {{ slapparameter_dict.get('dl_nr_arfcn', slap_configuration['configuration.default_dl_nr_arfcn']) }}, + subcarrier_spacing: 30, /* kHz */ + ssb_pos_bitmap: "10000000", +#endif +#else + band: 7, + dl_nr_arfcn: 536020, /* 2680 MHz */ + ssb_subcarrier_spacing: 15, + subcarrier_spacing: 30, /* kHz */ + ssb_pos_bitmap: "1000", +#endif + }, + ], /* nr_cell_list */ + + nr_cell_default: { + bandwidth: NR_BANDWIDTH, /* MHz */ + n_antenna_dl: N_ANTENNA_DL, + n_antenna_ul: N_ANTENNA_UL, + + /* force the timing TA offset (optional) */ +// n_timing_advance_offset: 39936, + /* subframe offset to align with the LTE TDD pattern (optional) */ +// subframe_offset: 2, + +#if NR_TDD == 1 + tdd_ul_dl_config: { +#if NR_TDD_CONFIG == 1 + pattern1: { + period: 5, /* in ms */ + dl_slots: 7, + dl_symbols: /* 6 */ 2, + ul_slots: 2, + ul_symbols: 2, + }, +#elif NR_TDD_CONFIG == 2 + pattern1: { + period: 5, /* in ms */ + dl_slots: 7, + dl_symbols: 6, + ul_slots: 2, + ul_symbols: 4, + }, +#elif NR_TDD_CONFIG == 3 + pattern1: { + period: 5, /* in ms */ + dl_slots: 6, + dl_symbols: 2, + ul_slots: 3, + ul_symbols: 2, + }, +#elif NR_TDD_CONFIG == 4 + pattern1: { + period: 3, /* in ms */ + dl_slots: 3, + dl_symbols: 6, + ul_symbols: 4, + ul_slots: 2, + }, + pattern2: { + period: 2, /* in ms */ + dl_slots: 4, + dl_symbols: 0, + ul_symbols: 0, + ul_slots: 0, + }, +#elif NR_TDD_CONFIG == 10 + /* only for FR2 */ + pattern1: { + period: 0.625, /* in ms */ + dl_slots: 3, + dl_symbols: 10, + ul_slots: 1, + ul_symbols: 2, + }, +#endif + }, +#endif + ssb_period: 20, /* in ms */ + n_id_cell: 500, + + plmn_list: [ { + tac: 100, + plmn: "00101", + reserved: false, + nssai: [ + { + sst: 1, + }, + /*{ + sst: 2, + }, + { + sst: 3, + sd: 50, + },*/ + ], + }, + ], + + /*sib_sched_list: [ + { + filename: "{{ directory['software'] }}/enb/config/sib2_nr.asn", + si_periodicity: 16, + }, + { + filename: "{{ directory['software'] }}/enb/config/sib3_nr.asn", + si_periodicity: 16, + }, + { + filename: "{{ directory['software'] }}/enb/config/sib4_nr.asn", + si_periodicity: 32, + }, + ], + sib9: { + si_periodicity: 32 + },*/ + si_window_length: 40, + + cell_barred: false, + intra_freq_reselection: true, + q_rx_lev_min: -70, + q_qual_min: -20, + p_max: 10, /* dBm */ + + root_sequence_index: 1, /* PRACH root sequence index */ + + /* Scheduling request period (slots). */ + sr_period: 40, + + dmrs_type_a_pos: 2, + + /* to limit the number of HARQ feedback in UL, use pdsch_harq_ack_max; + allows to workaround issues with SM-G977N for example */ + //pdsch_harq_ack_max: 2, + + prach: { +#if NR_TDD == 1 +#if FR2 + prach_config_index: 149, /* format C0, every 4 frames */ + msg1_subcarrier_spacing: 120, /* kHz */ +#else +#if NR_TDD_CONFIG == 4 + prach_config_index: 156, /* format B4, subframe 2 */ +#else + prach_config_index: 160, /* format B4, subframe 9 */ +#endif + msg1_subcarrier_spacing: 30, /* kHz */ +#endif +#else + prach_config_index: 16, /* subframe 1 every frame */ +#endif + msg1_fdm: 1, + msg1_frequency_start: -1, + zero_correlation_zone_config: 15, + preamble_received_target_power: -110, /* in dBm */ + preamble_trans_max: 7, + power_ramping_step: 4, /* in dB */ +#if FR2 + ra_response_window: 40, /* in slots */ +#else + ra_response_window: 20, /* in slots */ +#endif + restricted_set_config: "unrestricted_set", + ra_contention_resolution_timer: 64, /* in ms */ + ssb_per_prach_occasion: 1, + cb_preambles_per_ssb: 8, + }, + + pdcch: { + search_space0_index: 0, + + dedicated_coreset: { + rb_start: -1, /* -1 to have the maximum bandwidth */ + l_crb: -1, /* -1 means all the bandwidth */ + duration: 0, /* 0 means to automatically set it from the coreset bandwidth */ + precoder_granularity: "sameAsREG_bundle", + }, + + css: { + n_candidates: [ 0, 0, 1, 0, 0 ], + }, + rar_al_index: 2, + si_al_index: 2, + + uss: { + n_candidates: [ 0, 2, 1, 0, 0 ], + dci_0_1_and_1_1: true, + }, + al_index: 1, + }, + + pdsch: { + mapping_type: "typeA", + dmrs_add_pos: 1, + dmrs_type: 1, + dmrs_max_len: 1, + /* k0 delay in slots from DCI to PDSCH: automatic setting */ + /* k1 delay in slots from PDSCH to PUCCH/PUSCH ACK/NACK: automatic setting */ + mcs_table: "qam256", + rar_mcs: 2, + si_mcs: 6, + /* If defined, force the PDSCH MCS for all UEs. Otherwise it is computed + * based on DL channel quality estimation */ + /* mcs: 24, */ + }, + + csi_rs: { + nzp_csi_rs_resource: [ + { + csi_rs_id: 0, +#if N_ANTENNA_DL == 1 + n_ports: 1, + frequency_domain_allocation: "row2", + bitmap: "100000000000", + cdm_type: "no_cdm", +#elif N_ANTENNA_DL == 2 + n_ports: 2, + frequency_domain_allocation: "other", + bitmap: "100000", + cdm_type: "fd_cdm2", +#elif N_ANTENNA_DL == 4 + n_ports: 4, + frequency_domain_allocation: "row4", + bitmap: "100", + cdm_type: "fd_cdm2", +#elif N_ANTENNA_DL == 8 + n_ports: 8, + frequency_domain_allocation: "other", + bitmap: "110011", + cdm_type: "fd_cdm2", +#else +#error unsupported number of DL antennas +#endif + density: 1, + first_symb: 4, + rb_start: 0, + l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */ + power_control_offset: 0, /* dB */ + power_control_offset_ss: 0, /* dB */ + period: 80, + offset: 1, /* != 0 to avoid collision with SSB */ + qcl_info_periodic_csi_rs: 0, + }, +#if FR2 == 0 +#define USE_TRS +#endif +#ifdef USE_TRS + /* TRS : period of 40 ms, slots 1 & 2, symbols 4 and 8 */ + { + csi_rs_id: 1, + n_ports: 1, + frequency_domain_allocation: "row1", + bitmap: "0001", + cdm_type: "no_cdm", + density: 3, + first_symb: 4, + rb_start: 0, + l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */ + power_control_offset: 0, /* dB */ + power_control_offset_ss: 0, /* dB */ + period: 40, + offset: 11, + qcl_info_periodic_csi_rs: 0, + }, + { + csi_rs_id: 2, + n_ports: 1, + frequency_domain_allocation: "row1", + bitmap: "0001", + cdm_type: "no_cdm", + density: 3, + first_symb: 8, + rb_start: 0, + l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */ + power_control_offset: 0, /* dB */ + power_control_offset_ss: 0, /* dB */ + period: 40, + offset: 11, + qcl_info_periodic_csi_rs: 0, + }, + { + csi_rs_id: 3, + n_ports: 1, + frequency_domain_allocation: "row1", + bitmap: "0001", + cdm_type: "no_cdm", + density: 3, + first_symb: 4, + rb_start: 0, + l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */ + power_control_offset: 0, /* dB */ + power_control_offset_ss: 0, /* dB */ + period: 40, + offset: 12, + qcl_info_periodic_csi_rs: 0, + }, + { + csi_rs_id: 4, + n_ports: 1, + frequency_domain_allocation: "row1", + bitmap: "0001", + cdm_type: "no_cdm", + density: 3, + first_symb: 8, + rb_start: 0, + l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */ + power_control_offset: 0, /* dB */ + power_control_offset_ss: 0, /* dB */ + period: 40, + offset: 12, + qcl_info_periodic_csi_rs: 0, + }, +#endif + ], + nzp_csi_rs_resource_set: [ + { + csi_rs_set_id: 0, + nzp_csi_rs_resources: [ 0 ], + repetition: false, + }, +#ifdef USE_TRS + { + csi_rs_set_id: 1, + nzp_csi_rs_resources: [ 1, 2, 3, 4 ], + repetition: false, + trs_info: true, + }, +#endif + ], + + csi_im_resource: [ + { + csi_im_id: 0, + pattern: 1, + subcarrier_location: 8, + symbol_location: 8, + rb_start: 0, + l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */ + period: 80, + offset: 1, /* != 0 to avoid collision with SSB */ + }, + ], + csi_im_resource_set: [ + { + csi_im_set_id: 0, + csi_im_resources: [ 0 ], + } + ], + /* ZP CSI-RS to set the CSI-IM REs to zero */ + zp_csi_rs_resource: [ + { + csi_rs_id: 0, + frequency_domain_allocation: "row4", + bitmap: "100", + n_ports: 4, + cdm_type: "fd_cdm2", + first_symb: 8, + density: 1, + rb_start: 0, + l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */ + period: 80, + offset: 1, + }, + ], + p_zp_csi_rs_resource_set: [ + { + zp_csi_rs_resources: [ 0 ], + }, + ], + + csi_resource_config: [ + { + csi_rsc_config_id: 0, + nzp_csi_rs_resource_set_list: [ 0 ], + resource_type: "periodic", + }, + { + csi_rsc_config_id: 1, + csi_im_resource_set_list: [ 0 ], + resource_type: "periodic", + }, +#ifdef USE_TRS + { + csi_rsc_config_id: 2, + nzp_csi_rs_resource_set_list: [ 1 ], + resource_type: "periodic", + }, +#endif + ], + csi_report_config: [ + { + resources_for_channel_measurement: 0, + csi_im_resources_for_interference: 1, + report_config_type: "periodic", + period: 80, + report_quantity: "CRI_RI_PMI_CQI", +#if N_ANTENNA_DL > 1 + codebook_config: { + codebook_type: "type1", + sub_type: "typeI_SinglePanel", +#if N_ANTENNA_DL == 2 +#elif N_ANTENNA_DL == 4 + n1: 2, + n2: 1, + codebook_mode: 1, +#elif N_ANTENNA_DL == 8 + n1: 4, + n2: 1, + codebook_mode: 1, +#endif + }, +#endif + cqi_table: 2, + subband_size: "value1", + }, + ], + }, + + pucch: { + pucch_group_hopping: "neither", + hopping_id: -1, /* -1 = n_cell_id */ + p0_nominal: -90, +#if 0 + pucch0: { + initial_cyclic_shift: 1, + n_symb: 1, + }, +#else + pucch1: { + n_cs: 3, + n_occ: 3, + freq_hopping: true, +#if USE_SRS && NR_TDD == 0 + n_symb: 13, +#endif + }, +#endif +#if NR_LONG_PUCCH_FORMAT == 2 + pucch2: { + n_symb: 2, + n_prb: 1, + freq_hopping: true, + simultaneous_harq_ack_csi: false, + max_code_rate: 0.25, + }, +#elif NR_LONG_PUCCH_FORMAT == 3 + pucch3: { + bpsk: false, + additional_dmrs: false, + freq_hopping: true, + n_prb: 1, + simultaneous_harq_ack_csi: true, + max_code_rate: 0.25, + }, +#elif NR_LONG_PUCCH_FORMAT == 4 + pucch4: { + occ_len: 4, + bpsk: false, + additional_dmrs: false, + freq_hopping: true, + simultaneous_harq_ack_csi: true, + max_code_rate: 0.25, + }, +#endif + }, + +#if USE_SRS + srs: { +#if NR_TDD +#if NR_TDD_CONFIG == 1 || NR_TDD_CONFIG == 2 + srs_symbols: [ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0 ], +#elif NR_TDD_CONFIG == 3 + srs_symbols: [ 0, 0, 0, 0, 0, 0, 2, 0, 0, 0 ], +#elif NR_TDD_CONFIG == 4 + srs_symbols: [ 0, 0, 0, 4, 0, 0, 0, 0, 0, 0 ], +#elif NR_TDD_CONFIG == 10 + srs_symbols: [ 0, 0, 0, 2, 0 ], +#endif +#else + srs_symbols: [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0 ], +#endif + srs_resource: [ + { + srs_resource_id: 0, + n_ports: N_ANTENNA_UL, + resource_type: "periodic", + period: 80, /* in slots */ + } + ], + srs_resource_set: [ + { + srs_resource_id_list: [ 0 ], + }, + ], + }, +#endif + + pusch: { + mapping_type: "typeA", + n_symb: 14, + dmrs_add_pos: 1, + dmrs_type: 1, + dmrs_max_len: 1, + tf_precoding: false, + mcs_table: "qam256", /* without transform precoding */ + mcs_table_tp: "qam256", /* with transform precoding */ + ldpc_max_its: 5, + /* k2, msg3_k2 delay in slots from DCI to PUSCH: automatic setting */ + p0_nominal_with_grant: -76, + msg3_mcs: 4, + msg3_delta_power: 0, /* in dB */ + beta_offset_ack_index: 9, + + /* if defined, force the PUSCH MCS for all UEs. Otherwise it is + computed from the last received PUSCH. */ + /* mcs: 16, */ + }, + + /* MAC configuration */ + mac_config: { + msg3_max_harq_tx: 5, + ul_max_harq_tx: 5, /* max number of HARQ transmissions for uplink */ + dl_max_harq_tx: 5, /* max number of HARQ transmissions for downlink */ + ul_max_consecutive_retx: 30, /* disconnect UE if reached */ + dl_max_consecutive_retx: 30, /* disconnect UE if reached */ + periodic_bsr_timer: 20, + retx_bsr_timer: 320, + periodic_phr_timer: 500, + prohibit_phr_timer: 200, + phr_tx_power_factor_change: "dB3", + sr_prohibit_timer: 0, /* in ms, 0 to disable the timer */ + sr_trans_max: 64, + }, + + cipher_algo_pref: [], + integ_algo_pref: [2, 1], + + inactivity_timer: 10000, + + drb_config: "{{ directory['software'] }}/enb/config/drb_nr.cfg", + }, +} + diff --git a/software/ors-amarisoft/config/ims.jinja2.cfg b/software/ors-amarisoft/config/ims.jinja2.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d1fca55c5d35450a20ccb4f1129688f0e500a1e6 --- /dev/null +++ b/software/ors-amarisoft/config/ims.jinja2.cfg @@ -0,0 +1,78 @@ +/* lteims configuration file + * version 2021-09-18 + * Copyright (C) 2015-2021 Amarisoft + */ +{ + log_options: "all.level=debug,all.max_size=32", + log_filename: "{{ directory['log'] }}/ims.log", + + /* SIP bind address */ + //sip_addr: [ + // {addr: "192.168.4.1", bind_addr: "192.168.4.1", port_min: 10000, port_max: 20000}, + // "2001:468:3000:1::", + // {addr: "192.168.5.1", bind_addr: "192.168.5.1", port_min: 10000, port_max: 20000}, + // "2001:468:4000:1::" + //], + /* SIP bind address */ + sip_addr: [ + {addr: "{{ slap_configuration['tun-ipv4-addr'] }}", bind_addr: "0.0.0.0", port_min: 10000, port_max: 20000}, + {#" slap_configuration['tun-ipv6-addr'] ",#} + ], + + mms_server_bind_addr: "{{ netaddr.IPAddress(netaddr.IPNetwork(slap_configuration['tun-ipv4-network']).first) + 1 }}:1111", + + /* MME connection for SMS over SG */ + sctp_addr: "{{ slap_configuration['configuration.ims_addr'] }}", + + /* Cx connection */ + cx_server_addr: "127.0.1.100", + cx_bind_addr: "{{ slap_configuration['configuration.ims_addr'] }}", + + /* Rx connection */ + rx_server_addr: "127.0.1.100", + rx_bind_addr: "{{ slap_configuration['configuration.ims_addr'] }}", + + /* Remote API */ + com_addr: "[{{ slap_configuration['ipv6-random'] }}]:{{ slap_configuration['configuration.ims_ws_port'] }}", + + /* Global domain name (May be overriden for each user) */ + domain: "{{ slap_configuration['configuration.domain'] }}", + + include "{{ slap_configuration['ue_db_path'] }}", + +{# Example of of s6a connection #} +{# s6: { #} +{# server_addr: "", #} +{# bind_addr: "", #} +{# origin_realm: "", #} +{# origin_host: "", #} +{# }, #} + + /* Echo phone number */ + echo: [ + "tel:666", + "tel:+666", + {impu: "tel:404", code: 404}, /* 404 test */ + {impu: "urn:service:sos", anonymous: true, authentication: false}, /* Emergency call */ + {impu: "urn:service:sos.police", anonymous: true, authentication: false}, /* Emergency call */ + ], + + /* Delay */ + //sms_expires: 86400, + //binding_expires: 3600, + + /* on: 3GPP mode allowed + * silent: 3GPP mode forced + * off: IETF mode + */ + precondition: "on", + "100rel": true, + + /* IPsec */ + ipsec_aalg_list: ["hmac-md5-96", "hmac-sha-1-96"], + ipsec_ealg_list: ["null", "aes-cbc", "des-cbc", "des-ede3-cbc"], + + mt_call_sdp_file: "{{ directory['software'] }}/mme/config/mt_call.sdp", + + ue_db_filename: "{{ directory['var'] }}/lte_ue_ims.db", +} diff --git a/software/ors-amarisoft/config/mme.jinja2.cfg b/software/ors-amarisoft/config/mme.jinja2.cfg new file mode 100644 index 0000000000000000000000000000000000000000..a6d20237e28c75e3d0cec12a37e880c5fd16c555 --- /dev/null +++ b/software/ors-amarisoft/config/mme.jinja2.cfg @@ -0,0 +1,159 @@ +/* ltemme configuration file for ims + * version 2021-09-18 + * Copyright (C) 2015-2021 Amarisoft + */ +{ + /* Log filter: syntax: layer.field=value[,...] + + Possible layers are nas, ip, s1ap, gtpu and all. The 'all' layer + is used to address all the layers at the same time. + + field values: + + - 'level': the log level of each layer can be set to 'none', + 'error', 'info' or 'debug'. Use 'debug' to log all the messages. + + - 'max_size': set the maximum size of the hex dump. 0 means no + hex dump. -1 means no limit. + */ + log_options: "all.level=debug,all.max_size=32", + log_filename: "{{ directory['log'] }}/mme.log", + + /* Enable remote API and Web interface */ + com_addr: "[{{ slap_configuration['ipv6-random'] }}]:{{ slap_configuration['configuration.mme_ws_port'] }}", + + /* bind address for GTP-U. Normally = address of the PC, here bound + on local interface to be able to run ltemme on the same PC as + lteenb. By default, the S1AP SCTP connection is bound on the same + address. */ + gtp_addr: "127.0.1.100", + + plmn: "00101", + mme_group_id: 32769, + mme_code: 1, + + ims_vops_eps: true, /* IMS supported */ + ims_vops_5gs_3gpp: true, /* IMS supported */ + ims_vops_5gs_n3gpp: true, /* IMS supported */ + //emc_bs: true, /* emergency calls supported */ + //emc: 3, /* NR/E-UTRA connected to 5GCN emergency calls supported */ + //emc_n3gpp: true, /* non-3GPP emergency calls supported */ + emergency_number_list: [ + /* Category bits: (Table 10.5.135d/3GPP TS 24.008) + Bit 1 Police + Bit 2 Ambulance + Bit 3 Fire Brigade + Bit 4 Marine Guard + Bit 5 Mountain Rescue + */ + { category: 0x1f, digits: "911" }, + { category: 0x1f, digits: "112" }, + ], + + rx: { + qci: {audio: 1, video: 2}, + }, + + /* network name and network short name sent in the EMM information + message to the UE */ + network_name: "{{ slap_configuration['configuration.network_name'] }}", + network_short_name: "{{ slap_configuration['configuration.network_name'] }}", + + /* Control Plane Cellular IoT EPS optimization support */ + cp_ciot_opt: true, + + /* DCNR support */ + nr_support: true, + + eps_5gs_interworking: "with_n26", + + + /* 15 bearers support */ + fifteen_bearers: false, + + ims_list: [ + { + ims_addr: "{{ slap_configuration['configuration.ims_addr'] }}", + bind_addr: "{{ slap_configuration['configuration.ims_bind'] }}" + } + ], + + /* AMF slices configuration */ + /*nssai: [ + { + sst: 1, + }, + { + sst: 2, + }, + { + sst: 3, + sd: 50, + } + ],*/ + + /* ePDG configuration */ + //epdg: { + // bind_addr: "127.0.1.100:500", + // esp_duration: 900, + // certificate: "epdg.pem", + // /* required for some buggy Mediatek phones */ + // //omit_auth_in_first_auth_rsp: true + //}, + + /* Public Data Networks. The first one is the default. */ + pdn_list: [ + { + pdn_type: "ipv4", + tun_ifname: "{{ slap_configuration['tun-name'] }}", + access_point_name: ["default", "internet", "ims", "sos"], + first_ip_addr: "{{ netaddr.IPAddress(netaddr.IPNetwork(slap_configuration['tun-ipv4-network']).first) + 2 }}", + last_ip_addr: "{{ netaddr.IPAddress(netaddr.IPNetwork(slap_configuration['tun-ipv4-network']).last) - 1 }}", + ip_addr_shift: 2, /* difference between allocated IP addresses is 4 */ + dns_addr: "8.8.8.8", /* Google DNS address */ + // TODO: enable this instead of Google's DNS above + // dns_addr: "{{ slap_configuration['tun-ipv4-addr'] }}", + p_cscf_addr: ["{{ slap_configuration['tun-ipv4-addr'] }}"], + + erabs: [ + { + qci: 9, + priority_level: 15, + pre_emption_capability: "shall_not_trigger_pre_emption", + pre_emption_vulnerability: "not_pre_emptable", + }, + ], + }, + ], + + /* Setup script for the network interface. + If no script is given, no network interface is created. + Script is called for each PDN with following parameters: + 1) Interface name + 2) PDN index + 3) Access Point Name + 4) IP version: 'ipv4' or 'ipv6' + 5) IP address: first IP address for ipv4 and link local address for IPv6 + 6) First IP address + 7) Last IP address + + SlapOS: We suplement the script by preparing the TUN interface in slapos format phase. + Gotcha: The script has to be presented + */ + tun_setup_script: "{{ ifup_empty }}", + /* If true, inter-UE routing is done inside the MME (hence no IP + packet is output to the virtual network interface in case of + inter-UE communication). Otherwise, it is done by the Linux IP + layer. */ + ue_to_ue_forwarding: false, + + /* NAS ciphering algorithm preference. EEA0 is always the last. */ + nas_cipher_algo_pref: [ ], + /* NAS integrity algorithm preference. EIA0 is always the last. */ + nas_integ_algo_pref: [ 2, 1 ], + + include "{{ slap_configuration['ue_db_path'] }}", + + /* persistent user database */ + ue_db_filename: "{{ directory['var'] }}/lte_ue.db" +} diff --git a/software/ors-amarisoft/config/ue_db.jinja2.cfg b/software/ors-amarisoft/config/ue_db.jinja2.cfg new file mode 100644 index 0000000000000000000000000000000000000000..89016508bd1932f5eea33eb141f5fbe26644d7b6 --- /dev/null +++ b/software/ors-amarisoft/config/ue_db.jinja2.cfg @@ -0,0 +1,113 @@ +ue_db: [{ + sim_algo: "xor", /* USIM authentication algorithm: xor, milenage or tuak */ + imsi: "001010123456789", /* Anritsu Test USIM */ +// imsi: "001012345678901", /* Agilent or R&S Test USIM */ + amf: 0x9001, /* Authentication Management Field */ + sqn: "000000000000", /* Sequence Number */ + K: "00112233445566778899aabbccddeeff", /* Anritsu Test USIM */ +// K: "4147494C454E5420544543484E4F0000", /* Agilent Test USIM */ +// K: "000102030405060708090A0B0C0D0E0F", /* R&S Test USIM */ + + impi: "001010123456789@ims.mnc001.mcc001.3gppnetwork.org", + impu: ["001010123456789", "tel:0600000000", "tel:600"], + domain: "ims.mnc001.mcc001.3gppnetwork.org", + multi_sim: true, /* Experimental */ + + /* For standard SIP client */ + /*pwd: "amarisoft", + authent_type: "MD5",*/ +}, { + sim_algo: "milenage", + imsi: "001010000000001", + opc: "000102030405060708090A0B0C0D0E0F", + amf: 0x9001, + sqn: "000000000000", + K: "00112233445566778899AABBCCDDEEFF", + impu: ["sip:impu01", "tel:0600000001"], + impi: "impi01@amarisoft.com", +}, { + sim_algo: "milenage", + imsi: "001010000000002", + opc: "000102030405060708090A0B0C0D0E0F", + amf: 0x9001, + sqn: "000000000000", + K: "00112233445566778899AABBCCDDEEFF", + impu: ["sip:impu02", "tel:0600000002"], + impi: "impi02@amarisoft.com", +}, { + sim_algo: "milenage", + imsi: "001010000000003", + opc: "000102030405060708090A0B0C0D0E0F", + amf: 0x9001, + sqn: "000000000000", + K: "00112233445566778899AABBCCDDEEFF", + impu: ["sip:impu03", "tel:0600000003"], + impi: "impi03@amarisoft.com", +}, { + sim_algo: "milenage", + imsi: "001010000000004", + opc: "000102030405060708090A0B0C0D0E0F", + amf: 0x9001, + sqn: "000000000000", + K: "00112233445566778899AABBCCDDEEFF", + impu: "impu04", + impi: "impi04@amarisoft.com", +}, { + sim_algo: "milenage", + imsi: "001010000000006", + opc: "000102030405060708090A0B0C0D0E0F", + amf: 0x9001, + sqn: "000000000000", + K: "00112233445566778899AABBCCDDEEFF", + impu: "impu06", + impi: "impi06@amarisoft.com", +}, { + sim_algo: "milenage", + imsi: "001010000000007", + opc: "000102030405060708090A0B0C0D0E0F", + amf: 0x9001, + sqn: "000000000000", + K: "00112233445566778899AABBCCDDEEFF", + impu: "impu07", + impi: "impi07@amarisoft.com", +}, { + sim_algo: "milenage", + imsi: "001010000000008", + opc: "000102030405060708090A0B0C0D0E0F", + amf: 0x9001, + sqn: "000000000000", + K: "00112233445566778899AABBCCDDEEFF", + impu: "impu08", + impi: "impi08@amarisoft.com", +}, { + sim_algo: "milenage", + imsi: "001010000000009", + opc: "000102030405060708090A0B0C0D0E0F", + amf: 0x9001, + sqn: "000000000000", + K: "00112233445566778899AABBCCDDEEFF", + impu: "impu09", + impi: "impi09@amarisoft.com", +}, { +{% for slave_instance in slave_instance_list -%} +{% if slave_instance.get('imsi', '') != '' %} + sim_algo: "{{ slave_instance.get('sim_algo', 'milenage') }}", + imsi: "{{ slave_instance.get('imsi', '') }}", + opc: "{{ slave_instance.get('opc', '') }}", + amf: {{ slave_instance.get('amf', '0x9001') }}, + sqn: "{{ slave_instance.get('sqn', '000000000000') }}", + K: "{{ slave_instance.get('k', '') }}", + impu: "{{ slave_instance.get('impu', '') }}", + impi: "{{ slave_instance.get('impi', '') }}", +}, { +{% endif %} +{% endfor -%} + sim_algo: "milenage", + imsi: "001010000000010", + opc: "000102030405060708090A0B0C0D0E0F", + amf: 0x9001, + sqn: "000000000000", + K: "00112233445566778899AABBCCDDEEFF", + impu: "impu10", + impi: "impi10@amarisoft.com", +}] diff --git a/software/ors-amarisoft/instance-enb-epc.jinja2.cfg b/software/ors-amarisoft/instance-enb-epc.jinja2.cfg new file mode 100644 index 0000000000000000000000000000000000000000..62c5ed21b0f2289043cd5650835653a03166d9e5 --- /dev/null +++ b/software/ors-amarisoft/instance-enb-epc.jinja2.cfg @@ -0,0 +1,78 @@ +[buildout] +parts = + directory + lte-enb-request + lte-epc-request + publish-connection-information + +extends = {{ monitor_template }} + +eggs-directory = {{ eggs_directory }} +develop-eggs-directory = {{ 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'] }} + +[directory] +recipe = slapos.cookbook:mkdirectory +software = {{ buildout_directory }} +home = ${buildout:directory} +etc = ${:home}/etc +var = ${:home}/var +etc = ${:home}/etc +bin = ${:home}/bin +run = ${:var}/run +script = ${:etc}/run +service = ${:etc}/service +promise = ${:etc}/promise +log = ${:var}/log + +[request-common-base] +recipe = slapos.cookbook:request.serialised +software-url = {{ slap_connection['software-release-url'] }} +server-url = {{ slap_connection['server-url'] }} +computer-id = {{ slap_connection['computer-id'] }} +partition-id = {{ slap_connection['partition-id'] }} +key-file = {{ slap_connection['key-file'] }} +cert-file = {{ slap_connection['cert-file'] }} + +config-monitor-password = ${monitor-htpasswd:passwd} +return = monitor-base-url + +[lte-epc-request] +<= request-common-base +name = EPC +software-type = epc +config-name = epc + +[lte-enb-request] +<= request-common-base +name = eNB +software-type = enb +config-name = enb +{% if slapparameter_dict.get("tx_gain", None) %} +config-tx_gain = {{ dumps(slapparameter_dict["tx_gain"]) }} +{% endif %} +{% if slapparameter_dict.get("rx_gain", None) %} +config-rx_gain = {{ dumps(slapparameter_dict["rx_gain"]) }} +{% endif %} +{% if slapparameter_dict.get("dl_earfcn", None) %} +config-dl_earfcn = {{ dumps(slapparameter_dict["dl_earfcn"]) }} +{% endif %} +{% if slapparameter_dict.get("n_rb_dl", None) %} +config-n_rb_dl = {{ dumps(slapparameter_dict["n_rb_dl"]) }} +{% endif %} + +[monitor-base-url-dict] +lte-epc-request = ${lte-epc-request:connection-monitor-base-url} +lte-enb-request = ${lte-enb-request:connection-monitor-base-url} + +[publish-connection-information] +recipe = slapos.cookbook:publish +<= monitor-publish diff --git a/software/ors-amarisoft/instance-enb-input-schema.jinja2.json b/software/ors-amarisoft/instance-enb-input-schema.jinja2.json new file mode 100644 index 0000000000000000000000000000000000000000..7aff1f11a92f966a88b72c609200de78afb57d6f --- /dev/null +++ b/software/ors-amarisoft/instance-enb-input-schema.jinja2.json @@ -0,0 +1,32 @@ +{ + "type": "object", + "$schema": "http://json-schema.org/draft-04/schema", + + "title": "Input Parameters", + "properties": { + "tx_gain": { + "title": "Tx gain", + "description": "Tx gain (in dB)", + "type": "number", + "default": {{ default_lte_tx_gain }} + }, + "rx_gain": { + "title": "Rx gain", + "description": "Rx gain (in dB)", + "type": "number", + "default": {{ default_lte_rx_gain }} + }, + "dl_earfcn": { + "title": "DL EARFCN", + "description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell", + "type": "number", + "default": {{ default_dl_earfcn }} + }, + "n_rb_dl": { + "title": "DL RB", + "description": "number of DL resource blocks", + "type": "number", + "default": {{ default_lte_n_rb_dl }} + } + } +} diff --git a/software/ors-amarisoft/instance-enb.jinja2.cfg b/software/ors-amarisoft/instance-enb.jinja2.cfg new file mode 100644 index 0000000000000000000000000000000000000000..9e5d12101148f60902f54c85df804ac6842058ae --- /dev/null +++ b/software/ors-amarisoft/instance-enb.jinja2.cfg @@ -0,0 +1,97 @@ +[buildout] +parts = + directory + ltelogs + lte-enb-config + lte-enb-service + publish-connection-information + +extends = {{ monitor_template }} + +eggs-directory = {{ eggs_directory }} +develop-eggs-directory = {{ 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'] }} + +configuration.network_name = VIFIB +configuration.domain = vifib.com +configuration.mme_ws_port = 9000 +configuration.enb_ws_port = 9002 +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_dl_earfcn = {{ default_dl_earfcn }} +configuration.default_lte_dl_freq = {{ default_lte_dl_freq }} +configuration.default_lte_band = {{ default_lte_band }} +configuration.default_lte_n_rb_dl = {{ default_lte_n_rb_dl }} +configuration.default_lte_tx_gain = {{ default_lte_tx_gain }} +configuration.default_lte_rx_gain = {{ default_lte_rx_gain }} + +[directory] +recipe = slapos.cookbook:mkdirectory +software = {{ buildout_directory }} +home = ${buildout:directory} +etc = ${:home}/etc +var = ${:home}/var +etc = ${:home}/etc +bin = ${:home}/bin +run = ${:var}/run +script = ${:etc}/run +service = ${:etc}/service +promise = ${:etc}/promise +log = ${:var}/log + +[ltelogs] +recipe = slapos.recipe.template:jinja2 +template = {{ ltelogs_template }} +rendered = ${directory:home}/ltelogs.sh +mode = 0775 +extensions = jinja2.ext.do +context = + section directory directory + +### eNodeB (enb) +[lte-enb-service] +recipe = slapos.cookbook:wrapper +init = ${ltelogs:rendered} ${directory:log}/enb.log; sleep 2 +command-line = {{ enb }}/lteenb ${directory:etc}/enb.cfg +wrapper-path = ${directory:service}/lte-enb +mode = 0775 +reserve-cpu = True +pidfile = ${directory:run}/enb.pid +hash-files = + ${lte-enb-config:rendered} +environment = + LD_LIBRARY_PATH={{ openssl_location }}/lib + AMARISOFT_PATH=/opt/amarisoft/.amarisoft + +[config-base] +recipe = slapos.recipe.template:jinja2 +mode = 0664 +extensions = jinja2.ext.do +context = + section directory directory + section slap_configuration slap-configuration + key slapparameter_dict slap-configuration:configuration + import netaddr netaddr + +[lte-enb-config] +<= config-base +template = {{ enb_template }} +rendered = ${directory:etc}/enb.cfg + +[publish-connection-information] +recipe = slapos.cookbook:publish.serialised +monitor-base-url = ${monitor-instance-parameter:monitor-base-url} + +[monitor-instance-parameter] +monitor-title = {{ slapparameter_dict['name'] | string }} +password = {{ slapparameter_dict['monitor-password'] | string }} diff --git a/software/ors-amarisoft/instance-epc-input-schema.json b/software/ors-amarisoft/instance-epc-input-schema.json new file mode 100644 index 0000000000000000000000000000000000000000..7214e8c88939fc6052a98095782f48421efcbb6c --- /dev/null +++ b/software/ors-amarisoft/instance-epc-input-schema.json @@ -0,0 +1,8 @@ +{ + "type": "object", + "$schema": "http://json-schema.org/draft-04/schema", + + "title": "EPC Input Parameters", + "properties": { + } +} diff --git a/software/ors-amarisoft/instance-epc-slave-input-schema.json b/software/ors-amarisoft/instance-epc-slave-input-schema.json new file mode 100644 index 0000000000000000000000000000000000000000..5c02748211cd2a9a7ca8c10d2ba113381be9da8a --- /dev/null +++ b/software/ors-amarisoft/instance-epc-slave-input-schema.json @@ -0,0 +1,65 @@ +{ + "type": "object", + "$schema": "http://json-schema.org/draft-04/schema", + "title": "EPC SIM Card Parameters", + "required": [ + "sim_algo", + "imsi", + "opc", + "amf", + "sqn", + "k", + "impu", + "impi" + ], + "properties": { + "sim_algo": { + "title": "Sim Algorithm", + "description": "xor, milenage or tuak. Set the USIM authentication algorithm.", + "type": "string", + "default": "milenage" + }, + "imsi": { + "title": "IMSI", + "description": "IMSI", + "type": "string", + "default": "" + }, + "opc": { + "title": "OPC", + "description": "Operator key preprocessed with the user secret key (as a 16 byte hexadecimal string). When the Milenage authentication algorithm is used, opc must be set.", + "type": "string", + "default": "" + }, + "amf": { + "title": "AMF", + "description": "Range: 0 to 65535. Set the Authentication Management Field.", + "type": "string", + "default": "0x9001" + }, + "sqn": { + "title": "SQN", + "description": "Optional String (6 byte hexadecimal string). Set the initial sequence number. For the XOR algorithm, the actual value does not matter. For the Milenage or TUAK algorithm, a sequence number resynchronization is initiated if the sequence number does not match the one stored in the USIM.", + "type": "string", + "default": "000000000000" + }, + "k": { + "title": "K", + "description": "Set the user secret key (as a 16 bytes hexadecimal string, or eventually 32 bytes hexadecimal string for TUAK).", + "type": "string", + "default": "" + }, + "impu": { + "title": "IMPU", + "description": "sip URI or a telephone number. Note that sip URI must not include hostname. If IMPU does not start by a scheme, it is assumed to be a sip URI.", + "type": "string", + "default": "" + }, + "impi": { + "title": "IMPI", + "description": "Defines user IMPI. Must be fully filled with hostname if necessary.", + "type": "string", + "default": "" + } + } +} diff --git a/software/ors-amarisoft/instance-epc.jinja2.cfg b/software/ors-amarisoft/instance-epc.jinja2.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d595b5d7344eaed9755f62341aff4c7024e28114 --- /dev/null +++ b/software/ors-amarisoft/instance-epc.jinja2.cfg @@ -0,0 +1,138 @@ +{{ generated_file_message }} +[buildout] +parts = + directory +# publish-connection-parameter + ltelogs + lte-mme-config + lte-mme-service + lte-ims-config + lte-ims-service + monitor-base + publish-connection-information + +extends = {{ monitor_template }} + +eggs-directory = {{ eggs_directory }} +develop-eggs-directory = {{ 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'] }} + +configuration.network_name = VIFIB +configuration.domain = vifib.com +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_bind = 127.0.0.2 +configuration.enb_addr = 127.0.1.1 + +ue_db_path = {{ ue_db_path }} + +[directory] +recipe = slapos.cookbook:mkdirectory +software = {{ buildout_directory }} +home = ${buildout:directory} +etc = ${:home}/etc +var = ${:home}/var +etc = ${:home}/etc +bin = ${:home}/bin +run = ${:var}/run +script = ${:etc}/run +service = ${:etc}/service +promise = ${:etc}/promise +log = ${:var}/log + +[ltelogs] +recipe = slapos.recipe.template:jinja2 +template = {{ ltelogs_template }} +rendered = ${directory:home}/ltelogs.sh +mode = 0775 +extensions = jinja2.ext.do +context = + section directory directory + +### IMS +[lte-ims-service] +recipe = slapos.cookbook:wrapper +init = ${ltelogs:rendered} ${directory:log}/ims.log; sleep 1 +command-line = {{ mme }}/lteims ${directory:etc}/ims.cfg +wrapper-path = ${directory:service}/lte-ims +mode = 0775 +pidfile = ${directory:run}/ims.pid +hash-files = + ${lte-ims-config:rendered} + {{ ue_db_path }} +environment = AMARISOFT_PATH=/opt/amarisoft/.amarisoft + +### MME +[lte-mme-service] +recipe = slapos.cookbook:wrapper +init = ${ltelogs:rendered} ${directory:log}/mme.log +command-line = {{ mme }}/ltemme ${directory:etc}/mme.cfg +wrapper-path = ${directory:service}/lte-mme +mode = 0775 +pidfile = ${directory:run}/mme.pid +hash-files = + ${lte-mme-config:rendered} + {{ ue_db_path }} +environment = + LD_LIBRARY_PATH={{ openssl_location }}/lib:{{ nghttp2_location }}/lib + AMARISOFT_PATH=/opt/amarisoft/.amarisoft + +### EMPTY mme-ifup script +[lte-mme-ifup-empty] +recipe = slapos.cookbook:wrapper +wrapper-path = ${directory:bin}/mme-ifup-empty +command-line = echo Using interface +mode = 775 + +[config-base] +recipe = slapos.recipe.template:jinja2 +mode = 0664 +extensions = jinja2.ext.do +context = + section directory directory + section slap_configuration slap-configuration + key slapparameter_dict slap-configuration:configuration + import netaddr netaddr + +[lte-ims-config] +<= config-base +template = {{ ims_template }} +rendered = ${directory:etc}/ims.cfg + +[lte-mme-config] +<= config-base +template = {{ mme_template }} +rendered = ${directory:etc}/mme.cfg +context = + section directory directory + section slap_configuration slap-configuration + key slapparameter_dict slap-configuration:configuration + import netaddr netaddr + key ifup_empty lte-mme-ifup-empty:wrapper-path + +[publish-connection-information] +recipe = slapos.cookbook:publish.serialised + +{% if slapparameter_dict.get("monitor-password", None) %} +monitor-base-url = ${monitor-instance-parameter:monitor-base-url} +{% else %} +monitor-setup-url = https://monitor.app.officejs.com/#page=settings_configurator&url=${monitor-publish-parameters:monitor-url}&username=${monitor-publish-parameters:monitor-user}&password=${monitor-publish-parameters:monitor-password} +{% endif %} + +{% if slapparameter_dict.get("monitor-password", None) %} +[monitor-instance-parameter] +monitor-title = {{ slapparameter_dict['name'] }} +password = {{ slapparameter_dict['monitor-password'] }} +{% endif %} diff --git a/software/ors-amarisoft/instance-gnb-epc.jinja2.cfg b/software/ors-amarisoft/instance-gnb-epc.jinja2.cfg new file mode 100644 index 0000000000000000000000000000000000000000..050c88c259aa25e3fefd6e6e48e9a7915c1e6138 --- /dev/null +++ b/software/ors-amarisoft/instance-gnb-epc.jinja2.cfg @@ -0,0 +1,81 @@ +[buildout] +parts = + directory + lte-gnb-request + lte-epc-request + publish-connection-information + +extends = {{ monitor_template }} + +eggs-directory = {{ eggs_directory }} +develop-eggs-directory = {{ 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'] }} + +[directory] +recipe = slapos.cookbook:mkdirectory +software = {{ buildout_directory }} +home = ${buildout:directory} +etc = ${:home}/etc +var = ${:home}/var +etc = ${:home}/etc +bin = ${:home}/bin +run = ${:var}/run +script = ${:etc}/run +service = ${:etc}/service +promise = ${:etc}/promise +log = ${:var}/log + +[request-common-base] +recipe = slapos.cookbook:request.serialised +software-url = {{ slap_connection['software-release-url'] }} +server-url = {{ slap_connection['server-url'] }} +computer-id = {{ slap_connection['computer-id'] }} +partition-id = {{ slap_connection['partition-id'] }} +key-file = {{ slap_connection['key-file'] }} +cert-file = {{ slap_connection['cert-file'] }} + +config-monitor-password = ${monitor-htpasswd:passwd} +return = monitor-base-url + +[lte-epc-request] +<= request-common-base +name = EPC +software-type = epc +config-name = epc + +[lte-gnb-request] +<= request-common-base +name = gNB +software-type = gnb +config-name = gnb +{% if slapparameter_dict.get("tx_gain", None) %} +config-tx_gain = {{ dumps(slapparameter_dict["tx_gain"]) }} +{% endif %} +{% if slapparameter_dict.get("rx_gain", None) %} +config-rx_gain = {{ dumps(slapparameter_dict["rx_gain"]) }} +{% endif %} +{% if slapparameter_dict.get("dl_nr_arfcn", None) %} +config-dl_nr_arfcn = {{ dumps(slapparameter_dict["dl_nr_arfcn"]) }} +{% endif %} +{% if slapparameter_dict.get("nr_band", None) %} +config-nr_band = {{ dumps(slapparameter_dict["nr_band"]) }} +{% endif %} +{% if slapparameter_dict.get("nr_bandwidth", None) %} +config-nr_bandwidth = {{ dumps(slapparameter_dict["nr_bandwidth"]) }} +{% endif %} + +[monitor-base-url-dict] +lte-epc-request = ${lte-epc-request:connection-monitor-base-url} +lte-gnb-request = ${lte-gnb-request:connection-monitor-base-url} + +[publish-connection-information] +recipe = slapos.cookbook:publish +<= monitor-publish diff --git a/software/ors-amarisoft/instance-gnb-input-schema.jinja2.json b/software/ors-amarisoft/instance-gnb-input-schema.jinja2.json new file mode 100644 index 0000000000000000000000000000000000000000..ec48d6cbdab47f021502659a0296877076d1a4c1 --- /dev/null +++ b/software/ors-amarisoft/instance-gnb-input-schema.jinja2.json @@ -0,0 +1,38 @@ +{ + "type": "object", + "$schema": "http://json-schema.org/draft-04/schema", + + "title": "Input Parameters", + "properties": { + "tx_gain": { + "title": "Tx gain", + "description": "Tx gain (in dB)", + "type": "number", + "default": {{ default_nr_tx_gain }} + }, + "rx_gain": { + "title": "Rx gain", + "description": "Rx gain (in dB)", + "type": "number", + "default": {{ default_nr_rx_gain }} + }, + "dl_nr_arfcn": { + "title": "DL NR ARFCN", + "description": "Downlink NR Absolute Radio Frequency Channel Number of the cell", + "type": "number", + "default": {{ default_dl_nr_arfcn }} + }, + "nr_band": { + "title": "NR band", + "description": "NR band number", + "type": "number", + "default": {{ default_nr_band }} + }, + "nr_bandwidth": { + "title": "Bandwidth", + "description": "Downlink Bandwidth (in MHz)", + "type": "number", + "default": {{ default_nr_bandwidth }} + } + } +} diff --git a/software/ors-amarisoft/instance-gnb.jinja2.cfg b/software/ors-amarisoft/instance-gnb.jinja2.cfg new file mode 100644 index 0000000000000000000000000000000000000000..392db812cf7d8a2e060fd0e62501d09ad08376eb --- /dev/null +++ b/software/ors-amarisoft/instance-gnb.jinja2.cfg @@ -0,0 +1,97 @@ +[buildout] +parts = + directory + ltelogs + lte-gnb-config + lte-enb-service + publish-connection-information + +extends = {{ monitor_template }} + +eggs-directory = {{ eggs_directory }} +develop-eggs-directory = {{ 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'] }} + +configuration.network_name = VIFIB +configuration.domain = vifib.com +configuration.mme_ws_port = 9000 +configuration.enb_ws_port = 9002 +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_dl_nr_arfcn = {{ default_dl_nr_arfcn }} +configuration.default_nr_band = {{ default_nr_band }} +configuration.default_nr_dl_freq = {{ default_nr_dl_freq }} +configuration.default_nr_bandwidth = {{ default_nr_bandwidth }} +configuration.default_nr_tx_gain = {{ default_nr_tx_gain }} +configuration.default_nr_rx_gain = {{ default_nr_rx_gain }} + +[directory] +recipe = slapos.cookbook:mkdirectory +software = {{ buildout_directory }} +home = ${buildout:directory} +etc = ${:home}/etc +var = ${:home}/var +etc = ${:home}/etc +bin = ${:home}/bin +run = ${:var}/run +script = ${:etc}/run +service = ${:etc}/service +promise = ${:etc}/promise +log = ${:var}/log + +[ltelogs] +recipe = slapos.recipe.template:jinja2 +template = {{ ltelogs_template }} +rendered = ${directory:home}/ltelogs.sh +mode = 0775 +extensions = jinja2.ext.do +context = + section directory directory + +### eNodeB (enb) +[lte-enb-service] +recipe = slapos.cookbook:wrapper +init = ${ltelogs:rendered} ${directory:log}/enb.log; sleep 2 +command-line = {{ enb }}/lteenb ${directory:etc}/gnb.cfg +wrapper-path = ${directory:service}/lte-enb +mode = 0775 +reserve-cpu = True +pidfile = ${directory:run}/enb.pid +hash-files = + ${lte-gnb-config:rendered} +environment = + LD_LIBRARY_PATH={{ openssl_location }}/lib + AMARISOFT_PATH=/opt/amarisoft/.amarisoft + +[config-base] +recipe = slapos.recipe.template:jinja2 +mode = 0664 +extensions = jinja2.ext.do +context = + section directory directory + section slap_configuration slap-configuration + key slapparameter_dict slap-configuration:configuration + import netaddr netaddr + +[lte-gnb-config] +<= config-base +template = {{ gnb_template }} +rendered = ${directory:etc}/gnb.cfg + +[publish-connection-information] +recipe = slapos.cookbook:publish.serialised +monitor-base-url = ${monitor-instance-parameter:monitor-base-url} + +[monitor-instance-parameter] +monitor-title = {{ slapparameter_dict['name'] | string }} +password = {{ slapparameter_dict['monitor-password'] | string }} diff --git a/software/ors-amarisoft/instance-tdd1900-enb-epc-input-schema.json b/software/ors-amarisoft/instance-tdd1900-enb-epc-input-schema.json new file mode 100644 index 0000000000000000000000000000000000000000..f4991139d968c980e48830a55202abf4eaad4fa2 --- /dev/null +++ b/software/ors-amarisoft/instance-tdd1900-enb-epc-input-schema.json @@ -0,0 +1,32 @@ +{ + "type": "object", + "$schema": "http://json-schema.org/draft-04/schema", + + "title": "Input Parameters", + "properties": { + "tx_gain": { + "title": "Tx gain", + "description": "Tx gain (in dB)", + "type": "number", + "default": 70 + }, + "rx_gain": { + "title": "Rx gain", + "description": "Rx gain (in dB)", + "type": "number", + "default": 30 + }, + "dl_earfcn": { + "title": "DL EARFCN", + "description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell", + "type": "number", + "default": 38350 + }, + "n_rb_dl": { + "title": "DL RB", + "description": "number of DL resource blocks", + "type": "number", + "default": 100 + } + } +} \ No newline at end of file diff --git a/software/ors-amarisoft/instance-tdd1900-enb-input-schema.json b/software/ors-amarisoft/instance-tdd1900-enb-input-schema.json new file mode 100644 index 0000000000000000000000000000000000000000..f4991139d968c980e48830a55202abf4eaad4fa2 --- /dev/null +++ b/software/ors-amarisoft/instance-tdd1900-enb-input-schema.json @@ -0,0 +1,32 @@ +{ + "type": "object", + "$schema": "http://json-schema.org/draft-04/schema", + + "title": "Input Parameters", + "properties": { + "tx_gain": { + "title": "Tx gain", + "description": "Tx gain (in dB)", + "type": "number", + "default": 70 + }, + "rx_gain": { + "title": "Rx gain", + "description": "Rx gain (in dB)", + "type": "number", + "default": 30 + }, + "dl_earfcn": { + "title": "DL EARFCN", + "description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell", + "type": "number", + "default": 38350 + }, + "n_rb_dl": { + "title": "DL RB", + "description": "number of DL resource blocks", + "type": "number", + "default": 100 + } + } +} \ No newline at end of file diff --git a/software/ors-amarisoft/instance-tdd1900-gnb-epc-input-schema.json b/software/ors-amarisoft/instance-tdd1900-gnb-epc-input-schema.json new file mode 100644 index 0000000000000000000000000000000000000000..44a6875e1805f0664149f29b28f9d2136ff2922e --- /dev/null +++ b/software/ors-amarisoft/instance-tdd1900-gnb-epc-input-schema.json @@ -0,0 +1,38 @@ +{ + "type": "object", + "$schema": "http://json-schema.org/draft-04/schema", + + "title": "Input Parameters", + "properties": { + "tx_gain": { + "title": "Tx gain", + "description": "Tx gain (in dB)", + "type": "number", + "default": 70 + }, + "rx_gain": { + "title": "Rx gain", + "description": "Rx gain (in dB)", + "type": "number", + "default": 50 + }, + "dl_nr_arfcn": { + "title": "DL NR ARFCN", + "description": "Downlink NR Absolute Radio Frequency Channel Number of the cell", + "type": "number", + "default": 378000 + }, + "nr_band": { + "title": "NR band", + "description": "NR band number", + "type": "number", + "default": 39 + }, + "nr_bandwidth": { + "title": "Bandwidth", + "description": "Downlink Bandwidth (in MHz)", + "type": "number", + "default": 40 + } + } +} \ No newline at end of file diff --git a/software/ors-amarisoft/instance-tdd1900-gnb-input-schema.json b/software/ors-amarisoft/instance-tdd1900-gnb-input-schema.json new file mode 100644 index 0000000000000000000000000000000000000000..44a6875e1805f0664149f29b28f9d2136ff2922e --- /dev/null +++ b/software/ors-amarisoft/instance-tdd1900-gnb-input-schema.json @@ -0,0 +1,38 @@ +{ + "type": "object", + "$schema": "http://json-schema.org/draft-04/schema", + + "title": "Input Parameters", + "properties": { + "tx_gain": { + "title": "Tx gain", + "description": "Tx gain (in dB)", + "type": "number", + "default": 70 + }, + "rx_gain": { + "title": "Rx gain", + "description": "Rx gain (in dB)", + "type": "number", + "default": 50 + }, + "dl_nr_arfcn": { + "title": "DL NR ARFCN", + "description": "Downlink NR Absolute Radio Frequency Channel Number of the cell", + "type": "number", + "default": 378000 + }, + "nr_band": { + "title": "NR band", + "description": "NR band number", + "type": "number", + "default": 39 + }, + "nr_bandwidth": { + "title": "Bandwidth", + "description": "Downlink Bandwidth (in MHz)", + "type": "number", + "default": 40 + } + } +} \ No newline at end of file diff --git a/software/ors-amarisoft/instance-tdd2600-enb-epc-input-schema.json b/software/ors-amarisoft/instance-tdd2600-enb-epc-input-schema.json new file mode 100644 index 0000000000000000000000000000000000000000..1712077cd83b1d83f31c4f41e0baa29fd16dad4d --- /dev/null +++ b/software/ors-amarisoft/instance-tdd2600-enb-epc-input-schema.json @@ -0,0 +1,32 @@ +{ + "type": "object", + "$schema": "http://json-schema.org/draft-04/schema", + + "title": "Input Parameters", + "properties": { + "tx_gain": { + "title": "Tx gain", + "description": "Tx gain (in dB)", + "type": "number", + "default": 70 + }, + "rx_gain": { + "title": "Rx gain", + "description": "Rx gain (in dB)", + "type": "number", + "default": 30 + }, + "dl_earfcn": { + "title": "DL EARFCN", + "description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell", + "type": "number", + "default": 38050 + }, + "n_rb_dl": { + "title": "DL RB", + "description": "number of DL resource blocks", + "type": "number", + "default": 100 + } + } +} \ No newline at end of file diff --git a/software/ors-amarisoft/instance-tdd2600-enb-input-schema.json b/software/ors-amarisoft/instance-tdd2600-enb-input-schema.json new file mode 100644 index 0000000000000000000000000000000000000000..1712077cd83b1d83f31c4f41e0baa29fd16dad4d --- /dev/null +++ b/software/ors-amarisoft/instance-tdd2600-enb-input-schema.json @@ -0,0 +1,32 @@ +{ + "type": "object", + "$schema": "http://json-schema.org/draft-04/schema", + + "title": "Input Parameters", + "properties": { + "tx_gain": { + "title": "Tx gain", + "description": "Tx gain (in dB)", + "type": "number", + "default": 70 + }, + "rx_gain": { + "title": "Rx gain", + "description": "Rx gain (in dB)", + "type": "number", + "default": 30 + }, + "dl_earfcn": { + "title": "DL EARFCN", + "description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell", + "type": "number", + "default": 38050 + }, + "n_rb_dl": { + "title": "DL RB", + "description": "number of DL resource blocks", + "type": "number", + "default": 100 + } + } +} \ No newline at end of file diff --git a/software/ors-amarisoft/instance-tdd2600-gnb-epc-input-schema.json b/software/ors-amarisoft/instance-tdd2600-gnb-epc-input-schema.json new file mode 100644 index 0000000000000000000000000000000000000000..3d653dd6ab0d4080f45aee827ebc0bf29e4f2cce --- /dev/null +++ b/software/ors-amarisoft/instance-tdd2600-gnb-epc-input-schema.json @@ -0,0 +1,38 @@ +{ + "type": "object", + "$schema": "http://json-schema.org/draft-04/schema", + + "title": "Input Parameters", + "properties": { + "tx_gain": { + "title": "Tx gain", + "description": "Tx gain (in dB)", + "type": "number", + "default": 70 + }, + "rx_gain": { + "title": "Rx gain", + "description": "Rx gain (in dB)", + "type": "number", + "default": 50 + }, + "dl_nr_arfcn": { + "title": "DL NR ARFCN", + "description": "Downlink NR Absolute Radio Frequency Channel Number of the cell", + "type": "number", + "default": 520000 + }, + "nr_band": { + "title": "NR band", + "description": "NR band number", + "type": "number", + "default": 38 + }, + "nr_bandwidth": { + "title": "Bandwidth", + "description": "Downlink Bandwidth (in MHz)", + "type": "number", + "default": 40 + } + } +} \ No newline at end of file diff --git a/software/ors-amarisoft/instance-tdd2600-gnb-input-schema.json b/software/ors-amarisoft/instance-tdd2600-gnb-input-schema.json new file mode 100644 index 0000000000000000000000000000000000000000..3d653dd6ab0d4080f45aee827ebc0bf29e4f2cce --- /dev/null +++ b/software/ors-amarisoft/instance-tdd2600-gnb-input-schema.json @@ -0,0 +1,38 @@ +{ + "type": "object", + "$schema": "http://json-schema.org/draft-04/schema", + + "title": "Input Parameters", + "properties": { + "tx_gain": { + "title": "Tx gain", + "description": "Tx gain (in dB)", + "type": "number", + "default": 70 + }, + "rx_gain": { + "title": "Rx gain", + "description": "Rx gain (in dB)", + "type": "number", + "default": 50 + }, + "dl_nr_arfcn": { + "title": "DL NR ARFCN", + "description": "Downlink NR Absolute Radio Frequency Channel Number of the cell", + "type": "number", + "default": 520000 + }, + "nr_band": { + "title": "NR band", + "description": "NR band number", + "type": "number", + "default": 38 + }, + "nr_bandwidth": { + "title": "Bandwidth", + "description": "Downlink Bandwidth (in MHz)", + "type": "number", + "default": 40 + } + } +} \ No newline at end of file diff --git a/software/ors-amarisoft/instance-tdd3500-enb-epc-input-schema.json b/software/ors-amarisoft/instance-tdd3500-enb-epc-input-schema.json new file mode 100644 index 0000000000000000000000000000000000000000..8aeb3b72e3907f6eba496005eca9e0fe35556a4b --- /dev/null +++ b/software/ors-amarisoft/instance-tdd3500-enb-epc-input-schema.json @@ -0,0 +1,32 @@ +{ + "type": "object", + "$schema": "http://json-schema.org/draft-04/schema", + + "title": "Input Parameters", + "properties": { + "tx_gain": { + "title": "Tx gain", + "description": "Tx gain (in dB)", + "type": "number", + "default": 70 + }, + "rx_gain": { + "title": "Rx gain", + "description": "Rx gain (in dB)", + "type": "number", + "default": 30 + }, + "dl_earfcn": { + "title": "DL EARFCN", + "description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell", + "type": "number", + "default": 42590 + }, + "n_rb_dl": { + "title": "DL RB", + "description": "number of DL resource blocks", + "type": "number", + "default": 100 + } + } +} \ No newline at end of file diff --git a/software/ors-amarisoft/instance-tdd3500-enb-input-schema.json b/software/ors-amarisoft/instance-tdd3500-enb-input-schema.json new file mode 100644 index 0000000000000000000000000000000000000000..8aeb3b72e3907f6eba496005eca9e0fe35556a4b --- /dev/null +++ b/software/ors-amarisoft/instance-tdd3500-enb-input-schema.json @@ -0,0 +1,32 @@ +{ + "type": "object", + "$schema": "http://json-schema.org/draft-04/schema", + + "title": "Input Parameters", + "properties": { + "tx_gain": { + "title": "Tx gain", + "description": "Tx gain (in dB)", + "type": "number", + "default": 70 + }, + "rx_gain": { + "title": "Rx gain", + "description": "Rx gain (in dB)", + "type": "number", + "default": 30 + }, + "dl_earfcn": { + "title": "DL EARFCN", + "description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell", + "type": "number", + "default": 42590 + }, + "n_rb_dl": { + "title": "DL RB", + "description": "number of DL resource blocks", + "type": "number", + "default": 100 + } + } +} \ No newline at end of file diff --git a/software/ors-amarisoft/instance-tdd3500-gnb-epc-input-schema.json b/software/ors-amarisoft/instance-tdd3500-gnb-epc-input-schema.json new file mode 100644 index 0000000000000000000000000000000000000000..aa0dc0ba9f3193880b0bbdc1c5dbe79eddb8524c --- /dev/null +++ b/software/ors-amarisoft/instance-tdd3500-gnb-epc-input-schema.json @@ -0,0 +1,38 @@ +{ + "type": "object", + "$schema": "http://json-schema.org/draft-04/schema", + + "title": "Input Parameters", + "properties": { + "tx_gain": { + "title": "Tx gain", + "description": "Tx gain (in dB)", + "type": "number", + "default": 70 + }, + "rx_gain": { + "title": "Rx gain", + "description": "Rx gain (in dB)", + "type": "number", + "default": 50 + }, + "dl_nr_arfcn": { + "title": "DL NR ARFCN", + "description": "Downlink NR Absolute Radio Frequency Channel Number of the cell", + "type": "number", + "default": 632628 + }, + "nr_band": { + "title": "NR band", + "description": "NR band number", + "type": "number", + "default": 78 + }, + "nr_bandwidth": { + "title": "Bandwidth", + "description": "Downlink Bandwidth (in MHz)", + "type": "number", + "default": 40 + } + } +} \ No newline at end of file diff --git a/software/ors-amarisoft/instance-tdd3500-gnb-input-schema.json b/software/ors-amarisoft/instance-tdd3500-gnb-input-schema.json new file mode 100644 index 0000000000000000000000000000000000000000..aa0dc0ba9f3193880b0bbdc1c5dbe79eddb8524c --- /dev/null +++ b/software/ors-amarisoft/instance-tdd3500-gnb-input-schema.json @@ -0,0 +1,38 @@ +{ + "type": "object", + "$schema": "http://json-schema.org/draft-04/schema", + + "title": "Input Parameters", + "properties": { + "tx_gain": { + "title": "Tx gain", + "description": "Tx gain (in dB)", + "type": "number", + "default": 70 + }, + "rx_gain": { + "title": "Rx gain", + "description": "Rx gain (in dB)", + "type": "number", + "default": 50 + }, + "dl_nr_arfcn": { + "title": "DL NR ARFCN", + "description": "Downlink NR Absolute Radio Frequency Channel Number of the cell", + "type": "number", + "default": 632628 + }, + "nr_band": { + "title": "NR band", + "description": "NR band number", + "type": "number", + "default": 78 + }, + "nr_bandwidth": { + "title": "Bandwidth", + "description": "Downlink Bandwidth (in MHz)", + "type": "number", + "default": 40 + } + } +} \ No newline at end of file diff --git a/software/ors-amarisoft/instance-tdd3700-enb-epc-input-schema.json b/software/ors-amarisoft/instance-tdd3700-enb-epc-input-schema.json new file mode 100644 index 0000000000000000000000000000000000000000..86964358ddf5d1c9ddca7de8355a8bd93765db37 --- /dev/null +++ b/software/ors-amarisoft/instance-tdd3700-enb-epc-input-schema.json @@ -0,0 +1,32 @@ +{ + "type": "object", + "$schema": "http://json-schema.org/draft-04/schema", + + "title": "Input Parameters", + "properties": { + "tx_gain": { + "title": "Tx gain", + "description": "Tx gain (in dB)", + "type": "number", + "default": 70 + }, + "rx_gain": { + "title": "Rx gain", + "description": "Rx gain (in dB)", + "type": "number", + "default": 30 + }, + "dl_earfcn": { + "title": "DL EARFCN", + "description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell", + "type": "number", + "default": 44590 + }, + "n_rb_dl": { + "title": "DL RB", + "description": "number of DL resource blocks", + "type": "number", + "default": 100 + } + } +} \ No newline at end of file diff --git a/software/ors-amarisoft/instance-tdd3700-enb-input-schema.json b/software/ors-amarisoft/instance-tdd3700-enb-input-schema.json new file mode 100644 index 0000000000000000000000000000000000000000..86964358ddf5d1c9ddca7de8355a8bd93765db37 --- /dev/null +++ b/software/ors-amarisoft/instance-tdd3700-enb-input-schema.json @@ -0,0 +1,32 @@ +{ + "type": "object", + "$schema": "http://json-schema.org/draft-04/schema", + + "title": "Input Parameters", + "properties": { + "tx_gain": { + "title": "Tx gain", + "description": "Tx gain (in dB)", + "type": "number", + "default": 70 + }, + "rx_gain": { + "title": "Rx gain", + "description": "Rx gain (in dB)", + "type": "number", + "default": 30 + }, + "dl_earfcn": { + "title": "DL EARFCN", + "description": "Downlink E-UTRA Absolute Radio Frequency Channel Number of the cell", + "type": "number", + "default": 44590 + }, + "n_rb_dl": { + "title": "DL RB", + "description": "number of DL resource blocks", + "type": "number", + "default": 100 + } + } +} \ No newline at end of file diff --git a/software/ors-amarisoft/instance-tdd3700-gnb-epc-input-schema.json b/software/ors-amarisoft/instance-tdd3700-gnb-epc-input-schema.json new file mode 100644 index 0000000000000000000000000000000000000000..0c508567e0f544b955fff351879b2208cb53fc10 --- /dev/null +++ b/software/ors-amarisoft/instance-tdd3700-gnb-epc-input-schema.json @@ -0,0 +1,38 @@ +{ + "type": "object", + "$schema": "http://json-schema.org/draft-04/schema", + + "title": "Input Parameters", + "properties": { + "tx_gain": { + "title": "Tx gain", + "description": "Tx gain (in dB)", + "type": "number", + "default": 70 + }, + "rx_gain": { + "title": "Rx gain", + "description": "Rx gain (in dB)", + "type": "number", + "default": 50 + }, + "dl_nr_arfcn": { + "title": "DL NR ARFCN", + "description": "Downlink NR Absolute Radio Frequency Channel Number of the cell", + "type": "number", + "default": 646666 + }, + "nr_band": { + "title": "NR band", + "description": "NR band number", + "type": "number", + "default": 78 + }, + "nr_bandwidth": { + "title": "Bandwidth", + "description": "Downlink Bandwidth (in MHz)", + "type": "number", + "default": 40 + } + } +} \ No newline at end of file diff --git a/software/ors-amarisoft/instance-tdd3700-gnb-input-schema.json b/software/ors-amarisoft/instance-tdd3700-gnb-input-schema.json new file mode 100644 index 0000000000000000000000000000000000000000..0c508567e0f544b955fff351879b2208cb53fc10 --- /dev/null +++ b/software/ors-amarisoft/instance-tdd3700-gnb-input-schema.json @@ -0,0 +1,38 @@ +{ + "type": "object", + "$schema": "http://json-schema.org/draft-04/schema", + + "title": "Input Parameters", + "properties": { + "tx_gain": { + "title": "Tx gain", + "description": "Tx gain (in dB)", + "type": "number", + "default": 70 + }, + "rx_gain": { + "title": "Rx gain", + "description": "Rx gain (in dB)", + "type": "number", + "default": 50 + }, + "dl_nr_arfcn": { + "title": "DL NR ARFCN", + "description": "Downlink NR Absolute Radio Frequency Channel Number of the cell", + "type": "number", + "default": 646666 + }, + "nr_band": { + "title": "NR band", + "description": "NR band number", + "type": "number", + "default": 78 + }, + "nr_bandwidth": { + "title": "Bandwidth", + "description": "Downlink Bandwidth (in MHz)", + "type": "number", + "default": 40 + } + } +} \ No newline at end of file diff --git a/software/ors-amarisoft/instance.cfg b/software/ors-amarisoft/instance.cfg new file mode 100644 index 0000000000000000000000000000000000000000..bb205a78acf00fd05630c9bb48790acdfa770fd1 --- /dev/null +++ b/software/ors-amarisoft/instance.cfg @@ -0,0 +1,117 @@ +[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 +rendered = $${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 + $${:extra-context} + +[switch-softwaretype] +recipe = slapos.cookbook:switch-softwaretype +enb-epc = dynamic-template-lte-enb-epc:rendered +gnb-epc = dynamic-template-lte-gnb-epc:rendered +enb = dynamic-template-lte-enb:rendered +gnb = dynamic-template-lte-gnb:rendered +epc = dynamic-template-lte-epc:rendered +RootSoftwareInstance = $${:enb-epc} + +[dynamic-template-lte-enb-epc] +< = jinja2-template-base +template = ${template-lte-enb-epc:target} +filename = instance-lte-enb-epc.cfg +extensions = jinja2.ext.do +extra-context = + raw monitor_template ${monitor2-template:rendered} + +[dynamic-template-lte-gnb-epc] +< = jinja2-template-base +template = ${template-lte-gnb-epc:target} +filename = instance-lte-gnb-epc.cfg +extensions = jinja2.ext.do +extra-context = + raw monitor_template ${monitor2-template:rendered} + +[dynamic-template-lte-enb] +< = jinja2-template-base +template = ${template-lte-enb:target} +filename = instance-lte-enb.cfg +extensions = jinja2.ext.do +extra-context = + raw monitor_template ${monitor2-template:rendered} + raw enb ${enb:destination} + raw enb_template ${enb.jinja2.cfg:target} + raw ltelogs_template ${ltelogs.jinja2.sh: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 +template = ${template-lte-gnb:target} +filename = instance-lte-gnb.cfg +extensions = jinja2.ext.do +extra-context = + raw monitor_template ${monitor2-template:rendered} + raw enb ${enb:destination} + raw gnb_template ${gnb.jinja2.cfg:target} + raw ltelogs_template ${ltelogs.jinja2.sh: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 min_frequency ${enb:min-frequency} + raw max_frequency ${enb:max-frequency} + +[dynamic-template-lte-epc] +< = jinja2-template-base +template = ${template-lte-epc:target} +filename = instance-lte-epc.cfg +extensions = jinja2.ext.do +extra-context = + raw monitor_template ${monitor2-template:rendered} + raw mme ${mme:destination} + 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} + key ue_db_path ue-db-config:rendered + +[ue-db-config] +recipe = slapos.recipe.template:jinja2 +template = ${ue_db.jinja2.cfg:target} +filename = ue_db.cfg +extensions = jinja2.ext.do +rendered = $${buildout:directory}/$${:filename} +context = + key slave_instance_list slap-configuration:slave-instance-list diff --git a/software/ors-amarisoft/ltelogs.jinja2.sh b/software/ors-amarisoft/ltelogs.jinja2.sh new file mode 100755 index 0000000000000000000000000000000000000000..4027f53673a9e0ae3e1e42133cd56ed692705a40 --- /dev/null +++ b/software/ors-amarisoft/ltelogs.jinja2.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# Copyright (C) 2012-2015 Amarisoft +# LTE system logger version 2016-10-13 + +# Path for multi environment support +export PATH="$PATH:/bin/:/usr/bin/:/usr/local/bin" + +while [ "$1" != "" ] ; do + + if [ -e "$1" ] ; then + # Avoid storing logs with comments only + HAS_LOG=$(grep -v -l "#" $1) + if [ "$HAS_LOG" != "" ] ; then + DATE=$(date -u +%Y%m%d.%H:%M:%S | sed -e "s/ /-/g") + FILE=$(basename $1) + mv $1 "{{ directory['log'] }}/${FILE}.${DATE}" + else + rm -f $1 + fi + fi + shift +done + diff --git a/software/ors-amarisoft/render-templates b/software/ors-amarisoft/render-templates new file mode 100755 index 0000000000000000000000000000000000000000..acef6e6196b01f264279a26ecbdc5cf97e7082f6 --- /dev/null +++ b/software/ors-amarisoft/render-templates @@ -0,0 +1,123 @@ +#!/usr/bin/env python3 + +from jinja2 import Template +import os + +# Values: 6 (1.4 MHz), 15 (3MHz), 25 (5MHz), 50 (10MHz), 75 (15MHz), 100 (20MHz) +LTE_N_RB_DL=100 +LTE_TX_GAIN=70 +LTE_RX_GAIN=30 + +NR_BANDWIDTH=40 +NR_TX_GAIN=70 +NR_RX_GAIN=50 + +global_context = { + 'generated_file_message': "// This file was generated using a jinja2 template and the render-templates script, don't modify directly." +} + +rf_mode_context_list = [ + { + 'rf_mode': 'tdd1900', + + 'default_dl_earfcn': 38350, + 'default_lte_dl_freq': 1890.0, + 'default_lte_band': 39, + 'default_lte_n_rb_dl': LTE_N_RB_DL, + 'default_lte_tx_gain': LTE_TX_GAIN, + 'default_lte_rx_gain': LTE_RX_GAIN, + + 'default_dl_nr_arfcn': 378000, + 'default_nr_band': 39, + 'default_nr_dl_freq': 1890.0, + 'default_nr_bandwidth': NR_BANDWIDTH, + 'default_nr_tx_gain': NR_TX_GAIN, + 'default_nr_rx_gain': NR_RX_GAIN, + + 'min_frequency': 1880.0, + 'max_frequency': 1920, + }, { + 'rf_mode': 'tdd2600', + + 'default_dl_earfcn': 38050, + 'default_lte_dl_freq': 2600.0, + 'default_lte_band': 38, + 'default_lte_n_rb_dl': LTE_N_RB_DL, + 'default_lte_tx_gain': LTE_TX_GAIN, + 'default_lte_rx_gain': LTE_RX_GAIN, + + 'default_dl_nr_arfcn': 520000, + 'default_nr_band': 38, + 'default_nr_dl_freq': 2600.0, + 'default_nr_bandwidth': NR_BANDWIDTH, + 'default_nr_tx_gain': NR_TX_GAIN, + 'default_nr_rx_gain': NR_RX_GAIN, + + 'min_frequency': 2570, + 'max_frequency': 2620, + }, { + 'rf_mode': 'tdd3500', + + 'default_dl_earfcn': 42590, + 'default_lte_dl_freq': 3500.0, + 'default_lte_band': 42, + 'default_lte_n_rb_dl': LTE_N_RB_DL, + 'default_lte_tx_gain': LTE_TX_GAIN, + 'default_lte_rx_gain': LTE_RX_GAIN, + + 'default_dl_nr_arfcn': 632628, + 'default_nr_band': 78, + 'default_nr_dl_freq': 3489.42, + 'default_nr_bandwidth': NR_BANDWIDTH, + 'default_nr_tx_gain': NR_TX_GAIN, + 'default_nr_rx_gain': NR_RX_GAIN, + + 'min_frequency': 3400, + 'max_frequency': 3600, + }, { + 'rf_mode': 'tdd3700', + + 'default_dl_earfcn': 44590, + 'default_lte_dl_freq': 3700.0, + 'default_lte_band': 43, + 'default_lte_n_rb_dl': LTE_N_RB_DL, + 'default_lte_tx_gain': LTE_TX_GAIN, + 'default_lte_rx_gain': LTE_RX_GAIN, + + 'default_dl_nr_arfcn': 646666, + 'default_nr_band': 78, + 'default_nr_dl_freq': 3699.99, + 'default_nr_bandwidth': NR_BANDWIDTH, + 'default_nr_tx_gain': NR_TX_GAIN, + 'default_nr_rx_gain': NR_RX_GAIN, + + 'min_frequency': 3600, + 'max_frequency': 3800, + } +] + +with open('software.cfg.jinja2.json', 'r') as f: + software_json_template = Template(f.read()) +with open('instance-enb-input-schema.jinja2.json', 'r') as f: + instance_enb_json_template = Template(f.read()) +with open('instance-gnb-input-schema.jinja2.json', 'r') as f: + instance_gnb_json_template = Template(f.read()) +with open('software.jinja2.cfg', 'r') as f: + software_template = Template(f.read()) + +for rf_mode_context in rf_mode_context_list: + with open('software-{}.cfg.json'.format(rf_mode_context['rf_mode']), + 'w+') as f: + f.write(software_json_template.render(**rf_mode_context, **global_context)) + with open('software-{}.cfg'.format(rf_mode_context['rf_mode']), + 'w+') as f: + f.write(software_template.render(**rf_mode_context, **global_context)) + for software_type in ['enb', 'enb-epc', 'gnb', 'gnb-epc']: + with open('instance-{}-{}-input-schema.json'.format( + rf_mode_context['rf_mode'], + software_type), + 'w+') as f: + if software_type in ['enb', 'enb-epc']: + f.write(instance_enb_json_template.render(**rf_mode_context, **global_context)) + else: + f.write(instance_gnb_json_template.render(**rf_mode_context, **global_context)) diff --git a/software/ors-amarisoft/software-tdd1900.cfg b/software/ors-amarisoft/software-tdd1900.cfg new file mode 100644 index 0000000000000000000000000000000000000000..fcb5f9952ece22413d28be1d21f647c7aa06cc00 --- /dev/null +++ b/software/ors-amarisoft/software-tdd1900.cfg @@ -0,0 +1,22 @@ +// This file was generated using a jinja2 template and the render-templates script, don't modify directly. +[buildout] +extends = + software.cfg + +[enb] +default-dl-earfcn = 38350 +default-lte-dl-freq = 1890.0 +default-lte-band = 39 +default-lte-n-rb-dl = 100 +default-lte-tx-gain = 70 +default-lte-rx-gain = 30 + +default-dl-nr-arfcn = 378000 +default-nr-band = 39 +default-nr-dl-freq = 1890.0 +default-nr-bandwidth = 40 +default-nr-tx-gain = 70 +default-nr-rx-gain = 50 + +min-frequency = 1880.0 +max-frequency = 1920 \ No newline at end of file diff --git a/software/ors-amarisoft/software-tdd1900.cfg.json b/software/ors-amarisoft/software-tdd1900.cfg.json new file mode 100644 index 0000000000000000000000000000000000000000..1bd16a56c44762c1995f0a6262d94afb6501eada --- /dev/null +++ b/software/ors-amarisoft/software-tdd1900.cfg.json @@ -0,0 +1,56 @@ +{ + "name": "ORS Amarisoft", + "description": "4G and 5G amarisoft stack for ORS", + "serialisation": "xml", + "software-type": { + "enb": { + "title": "eNB", + "software-type": "enb", + "description": "eNodeB Configuration", + "request": "instance-tdd1900-enb-input-schema.json", + "response": "instance-tdd1900-enb-schema.json", + "index": 0 + }, + "enb-epc": { + "title": "eNB and EPC", + "software-type": "enb-epc", + "description": "eNodeB and EPC Configuration", + "request": "instance-tdd1900-enb-epc-input-schema.json", + "response": "instance-tdd1900-enb-epc-schema.json", + "index": 1 + }, + "gnb": { + "title": "gNB", + "software-type": "gnb", + "description": "gNodeB Configuration", + "request": "instance-tdd1900-gnb-input-schema.json", + "response": "instance-tdd1900-gnb-schema.json", + "index": 2 + }, + "gnb-epc": { + "title": "gNB and EPC", + "software-type": "gnb-epc", + "description": "gNodeB and EPC Configuration", + "request": "instance-tdd1900-gnb-epc-input-schema.json", + "response": "instance-tdd1900-gnb-epc-schema.json", + "index": 3 + }, + "epc": { + "title": "EPC", + "software-type": "epc", + "description": "EPC Configuration", + "request": "instance-epc-input-schema.json", + "response": "instance-epc-schema.json", + "index": 4 + }, + "epc-slave": { + "title": "Sim Card", + "description": "EPC Configuration", + "software-type": "epc", + "request": "instance-epc-slave-input-schema.json", + "response": "instance-epc-slave-schema.json", + "shared": true, + "index": 5 + } + } +} \ No newline at end of file diff --git a/software/ors-amarisoft/software-tdd2600.cfg b/software/ors-amarisoft/software-tdd2600.cfg new file mode 100644 index 0000000000000000000000000000000000000000..95679b2292db342d3566c0dc9d815d48edbd6759 --- /dev/null +++ b/software/ors-amarisoft/software-tdd2600.cfg @@ -0,0 +1,22 @@ +// This file was generated using a jinja2 template and the render-templates script, don't modify directly. +[buildout] +extends = + software.cfg + +[enb] +default-dl-earfcn = 38050 +default-lte-dl-freq = 2600.0 +default-lte-band = 38 +default-lte-n-rb-dl = 100 +default-lte-tx-gain = 70 +default-lte-rx-gain = 30 + +default-dl-nr-arfcn = 520000 +default-nr-band = 38 +default-nr-dl-freq = 2600.0 +default-nr-bandwidth = 40 +default-nr-tx-gain = 70 +default-nr-rx-gain = 50 + +min-frequency = 2570 +max-frequency = 2620 \ No newline at end of file diff --git a/software/ors-amarisoft/software-tdd2600.cfg.json b/software/ors-amarisoft/software-tdd2600.cfg.json new file mode 100644 index 0000000000000000000000000000000000000000..a30b83e9ecbed12cd259ce24e1c3b5de971c5ec4 --- /dev/null +++ b/software/ors-amarisoft/software-tdd2600.cfg.json @@ -0,0 +1,56 @@ +{ + "name": "ORS Amarisoft", + "description": "4G and 5G amarisoft stack for ORS", + "serialisation": "xml", + "software-type": { + "enb": { + "title": "eNB", + "software-type": "enb", + "description": "eNodeB Configuration", + "request": "instance-tdd2600-enb-input-schema.json", + "response": "instance-tdd2600-enb-schema.json", + "index": 0 + }, + "enb-epc": { + "title": "eNB and EPC", + "software-type": "enb-epc", + "description": "eNodeB and EPC Configuration", + "request": "instance-tdd2600-enb-epc-input-schema.json", + "response": "instance-tdd2600-enb-epc-schema.json", + "index": 1 + }, + "gnb": { + "title": "gNB", + "software-type": "gnb", + "description": "gNodeB Configuration", + "request": "instance-tdd2600-gnb-input-schema.json", + "response": "instance-tdd2600-gnb-schema.json", + "index": 2 + }, + "gnb-epc": { + "title": "gNB and EPC", + "software-type": "gnb-epc", + "description": "gNodeB and EPC Configuration", + "request": "instance-tdd2600-gnb-epc-input-schema.json", + "response": "instance-tdd2600-gnb-epc-schema.json", + "index": 3 + }, + "epc": { + "title": "EPC", + "software-type": "epc", + "description": "EPC Configuration", + "request": "instance-epc-input-schema.json", + "response": "instance-epc-schema.json", + "index": 4 + }, + "epc-slave": { + "title": "Sim Card", + "description": "EPC Configuration", + "software-type": "epc", + "request": "instance-epc-slave-input-schema.json", + "response": "instance-epc-slave-schema.json", + "shared": true, + "index": 5 + } + } +} \ No newline at end of file diff --git a/software/ors-amarisoft/software-tdd3500.cfg b/software/ors-amarisoft/software-tdd3500.cfg new file mode 100644 index 0000000000000000000000000000000000000000..5658089ffa337411696b283cce901b02b7ed17cc --- /dev/null +++ b/software/ors-amarisoft/software-tdd3500.cfg @@ -0,0 +1,22 @@ +// This file was generated using a jinja2 template and the render-templates script, don't modify directly. +[buildout] +extends = + software.cfg + +[enb] +default-dl-earfcn = 42590 +default-lte-dl-freq = 3500.0 +default-lte-band = 42 +default-lte-n-rb-dl = 100 +default-lte-tx-gain = 70 +default-lte-rx-gain = 30 + +default-dl-nr-arfcn = 632628 +default-nr-band = 78 +default-nr-dl-freq = 3489.42 +default-nr-bandwidth = 40 +default-nr-tx-gain = 70 +default-nr-rx-gain = 50 + +min-frequency = 3400 +max-frequency = 3600 \ No newline at end of file diff --git a/software/ors-amarisoft/software-tdd3500.cfg.json b/software/ors-amarisoft/software-tdd3500.cfg.json new file mode 100644 index 0000000000000000000000000000000000000000..5311a9a148ec5c16514ff6870e0c9442322ef54c --- /dev/null +++ b/software/ors-amarisoft/software-tdd3500.cfg.json @@ -0,0 +1,56 @@ +{ + "name": "ORS Amarisoft", + "description": "4G and 5G amarisoft stack for ORS", + "serialisation": "xml", + "software-type": { + "enb": { + "title": "eNB", + "software-type": "enb", + "description": "eNodeB Configuration", + "request": "instance-tdd3500-enb-input-schema.json", + "response": "instance-tdd3500-enb-schema.json", + "index": 0 + }, + "enb-epc": { + "title": "eNB and EPC", + "software-type": "enb-epc", + "description": "eNodeB and EPC Configuration", + "request": "instance-tdd3500-enb-epc-input-schema.json", + "response": "instance-tdd3500-enb-epc-schema.json", + "index": 1 + }, + "gnb": { + "title": "gNB", + "software-type": "gnb", + "description": "gNodeB Configuration", + "request": "instance-tdd3500-gnb-input-schema.json", + "response": "instance-tdd3500-gnb-schema.json", + "index": 2 + }, + "gnb-epc": { + "title": "gNB and EPC", + "software-type": "gnb-epc", + "description": "gNodeB and EPC Configuration", + "request": "instance-tdd3500-gnb-epc-input-schema.json", + "response": "instance-tdd3500-gnb-epc-schema.json", + "index": 3 + }, + "epc": { + "title": "EPC", + "software-type": "epc", + "description": "EPC Configuration", + "request": "instance-epc-input-schema.json", + "response": "instance-epc-schema.json", + "index": 4 + }, + "epc-slave": { + "title": "Sim Card", + "description": "EPC Configuration", + "software-type": "epc", + "request": "instance-epc-slave-input-schema.json", + "response": "instance-epc-slave-schema.json", + "shared": true, + "index": 5 + } + } +} \ No newline at end of file diff --git a/software/ors-amarisoft/software-tdd3700.cfg b/software/ors-amarisoft/software-tdd3700.cfg new file mode 100644 index 0000000000000000000000000000000000000000..b8eab320daaebb9aa59ab710590300b5ee600ec1 --- /dev/null +++ b/software/ors-amarisoft/software-tdd3700.cfg @@ -0,0 +1,22 @@ +// This file was generated using a jinja2 template and the render-templates script, don't modify directly. +[buildout] +extends = + software.cfg + +[enb] +default-dl-earfcn = 44590 +default-lte-dl-freq = 3700.0 +default-lte-band = 43 +default-lte-n-rb-dl = 100 +default-lte-tx-gain = 70 +default-lte-rx-gain = 30 + +default-dl-nr-arfcn = 646666 +default-nr-band = 78 +default-nr-dl-freq = 3699.99 +default-nr-bandwidth = 40 +default-nr-tx-gain = 70 +default-nr-rx-gain = 50 + +min-frequency = 3600 +max-frequency = 3800 \ No newline at end of file diff --git a/software/ors-amarisoft/software-tdd3700.cfg.json b/software/ors-amarisoft/software-tdd3700.cfg.json new file mode 100644 index 0000000000000000000000000000000000000000..0686d27f83642d65574f9ac2beca77b8c422a175 --- /dev/null +++ b/software/ors-amarisoft/software-tdd3700.cfg.json @@ -0,0 +1,56 @@ +{ + "name": "ORS Amarisoft", + "description": "4G and 5G amarisoft stack for ORS", + "serialisation": "xml", + "software-type": { + "enb": { + "title": "eNB", + "software-type": "enb", + "description": "eNodeB Configuration", + "request": "instance-tdd3700-enb-input-schema.json", + "response": "instance-tdd3700-enb-schema.json", + "index": 0 + }, + "enb-epc": { + "title": "eNB and EPC", + "software-type": "enb-epc", + "description": "eNodeB and EPC Configuration", + "request": "instance-tdd3700-enb-epc-input-schema.json", + "response": "instance-tdd3700-enb-epc-schema.json", + "index": 1 + }, + "gnb": { + "title": "gNB", + "software-type": "gnb", + "description": "gNodeB Configuration", + "request": "instance-tdd3700-gnb-input-schema.json", + "response": "instance-tdd3700-gnb-schema.json", + "index": 2 + }, + "gnb-epc": { + "title": "gNB and EPC", + "software-type": "gnb-epc", + "description": "gNodeB and EPC Configuration", + "request": "instance-tdd3700-gnb-epc-input-schema.json", + "response": "instance-tdd3700-gnb-epc-schema.json", + "index": 3 + }, + "epc": { + "title": "EPC", + "software-type": "epc", + "description": "EPC Configuration", + "request": "instance-epc-input-schema.json", + "response": "instance-epc-schema.json", + "index": 4 + }, + "epc-slave": { + "title": "Sim Card", + "description": "EPC Configuration", + "software-type": "epc", + "request": "instance-epc-slave-input-schema.json", + "response": "instance-epc-slave-schema.json", + "shared": true, + "index": 5 + } + } +} \ No newline at end of file diff --git a/software/ors-amarisoft/software.cfg b/software/ors-amarisoft/software.cfg new file mode 100644 index 0000000000000000000000000000000000000000..3c725487e0dd2cb920f2c184376a6548794efb9f --- /dev/null +++ b/software/ors-amarisoft/software.cfg @@ -0,0 +1,145 @@ +[buildout] +extends = + buildout.hash.cfg + ../../stack/slapos.cfg + ../../stack/monitor/buildout.cfg + ../../component/logrotate/buildout.cfg + ../../component/nghttp2/buildout.cfg + +parts += + template + slapos-cookbook + ltelogs.jinja2.sh +# copy all configs by default + mme.jinja2.cfg + ims.jinja2.cfg + enb.jinja2.cfg + gnb.jinja2.cfg + ue_db.jinja2.cfg +# sdr driver is dependent on ENB thus should be added explicitely by software.cfg + sdr-driver + lteenb-cap-sys-nice + lteenb-avx2-cap-sys-nice +# unimplemented parts - the http monitor and better log handling using logrotate +# apache-php +# logrotate + +[template] +recipe = slapos.recipe.template +url = ${:_profile_base_location_}/${:filename} +output = ${buildout:directory}/template.cfg +mode = 0644 + +[download-base] +recipe = slapos.recipe.build:download +url = ${:_profile_base_location_}/${:_update_hash_filename_} + +[template-lte-enb-epc] +<= download-base + +[template-lte-gnb-epc] +<= download-base + +[template-lte-enb] +<= download-base + +[template-lte-gnb] +<= download-base + +[template-lte-epc] +<= download-base + +[amarisoft] +recipe = slapos.recipe.build +path = /opt/amarisoft/lte +init = + import os + options['lte-version'] = os.readlink("%(path)s" % options)[:-1] + +[copy-to-instance] +recipe = slapos.recipe.build:download +url = ${:_profile_base_location_}/${:_buildout_section_name_} + +[copy-config-to-instance] +recipe = slapos.recipe.build:download +url = ${:_profile_base_location_}/config/${:_buildout_section_name_} + +[unpack-to-instance] +recipe = slapos.recipe.build:download-unpacked +url = ${amarisoft:path}/lte${:_buildout_section_name_}-linux-${amarisoft:lte-version}.tar.gz +destination = ${buildout:directory}/${:_buildout_section_name_} +strip-top-level-dir = true +ignore-existing = true +on-update = true + +[enb.jinja2.cfg] +<= copy-config-to-instance +filename = enb.jinja2.cfg +[gnb.jinja2.cfg] +<= copy-config-to-instance +filename = gnb.jinja2.cfg +[ltelogs.jinja2.sh] +<= copy-to-instance +filename = ltelogs.jinja2.sh +[ue_db.jinja2.cfg] +<= copy-config-to-instance +filename = ue_db.jinja2.cfg +[mme.jinja2.cfg] +<= copy-config-to-instance +filename = mme.jinja2.cfg +[ims.jinja2.cfg] +<= copy-config-to-instance +filename = ims.jinja2.cfg + +[sdr] +<= unpack-to-instance +url = ${amarisoft:path}/trx_${:_buildout_section_name_}-linux-${amarisoft:lte-version}.tar.gz +destination = ${enb:destination}/x86_64 +md5sum = ${trx_sdr-linux:md5sum} + +[sdr-driver] +# move trx_sdr.so next to lteenb binary +recipe = plone.recipe.command +command = cp -p ${sdr:destination}/trx_sdr.so ${enb:destination} + +[enb] +<= unpack-to-instance +md5sum = ${lteenb-linux:md5sum} +[mme] +<= unpack-to-instance +md5sum = ${ltemme-linux:md5sum} + +[lteenb-linux] +filename = ${amarisoft:lte-version}/lteenb-linux-${amarisoft:lte-version}.tar.gz +md5sum = 842b1526073472a30cb0b286d3b1528c +[ltemme-linux] +filename = ${amarisoft:lte-version}/ltemme-linux-${amarisoft:lte-version}.tar.gz +md5sum = 9d7917f90c7c7b2a8ba624d874595351 +[ltewww-linux] +filename = ${amarisoft:lte-version}/ltewww-linux-${amarisoft:lte-version}.tar.gz +md5sum = 416b6167f70b12910fbbb9293038554c +[trx_sdr-linux] +filename = ${amarisoft:lte-version}/trx_sdr-linux-${amarisoft:lte-version}.tar.gz +md5sum = e6960e3460f1a32c2436f36b2082995d + +[base-lteenb-cap-sys-nice] +recipe = plone.recipe.command +command = + getcap ${amarisoft:path}/${:binary} | grep cap_sys_nice+ep && exit 0; + # Make a copy or restore the copy, as patchelf will irreversibly change the md5sum + stat ${enb:destination}/${:binary}-unpriviledged || + cp ${enb:destination}/${:binary} ${enb:destination}/${:binary}-unpriviledged && + cp ${enb:destination}/${:binary}-unpriviledged ${enb:destination}/${:binary} + sudo -n ${amarisoft:path}/../give-cap-sys-nice-lteenb ${enb:destination}/${:binary} || true; +update-command = ${:command} + +[lteenb-avx2-cap-sys-nice] +<= base-lteenb-cap-sys-nice +binary=lteenb + +[lteenb-cap-sys-nice] +<= base-lteenb-cap-sys-nice +binary=lteenb-avx2 + +[versions] +slapos.recipe.template = 4.2 diff --git a/software/ors-amarisoft/software.cfg.jinja2.json b/software/ors-amarisoft/software.cfg.jinja2.json new file mode 100644 index 0000000000000000000000000000000000000000..262c544c67235d279ce230ecf824532caf997c04 --- /dev/null +++ b/software/ors-amarisoft/software.cfg.jinja2.json @@ -0,0 +1,56 @@ +{ + "name": "ORS Amarisoft", + "description": "4G and 5G amarisoft stack for ORS", + "serialisation": "xml", + "software-type": { + "enb": { + "title": "eNB", + "software-type": "enb", + "description": "eNodeB Configuration", + "request": "instance-{{ rf_mode }}-enb-input-schema.json", + "response": "instance-{{ rf_mode }}-enb-schema.json", + "index": 0 + }, + "enb-epc": { + "title": "eNB and EPC", + "software-type": "enb-epc", + "description": "eNodeB and EPC Configuration", + "request": "instance-{{ rf_mode }}-enb-epc-input-schema.json", + "response": "instance-{{ rf_mode }}-enb-epc-schema.json", + "index": 1 + }, + "gnb": { + "title": "gNB", + "software-type": "gnb", + "description": "gNodeB Configuration", + "request": "instance-{{ rf_mode }}-gnb-input-schema.json", + "response": "instance-{{ rf_mode }}-gnb-schema.json", + "index": 2 + }, + "gnb-epc": { + "title": "gNB and EPC", + "software-type": "gnb-epc", + "description": "gNodeB and EPC Configuration", + "request": "instance-{{ rf_mode }}-gnb-epc-input-schema.json", + "response": "instance-{{ rf_mode }}-gnb-epc-schema.json", + "index": 3 + }, + "epc": { + "title": "EPC", + "software-type": "epc", + "description": "EPC Configuration", + "request": "instance-epc-input-schema.json", + "response": "instance-epc-schema.json", + "index": 4 + }, + "epc-slave": { + "title": "Sim Card", + "description": "EPC Configuration", + "software-type": "epc", + "request": "instance-epc-slave-input-schema.json", + "response": "instance-epc-slave-schema.json", + "shared": true, + "index": 5 + } + } +} diff --git a/software/ors-amarisoft/software.jinja2.cfg b/software/ors-amarisoft/software.jinja2.cfg new file mode 100644 index 0000000000000000000000000000000000000000..c4a354bdc84398b1cb82d9eaa251ea713c96d36e --- /dev/null +++ b/software/ors-amarisoft/software.jinja2.cfg @@ -0,0 +1,22 @@ +{{ generated_file_message }} +[buildout] +extends = + software.cfg + +[enb] +default-dl-earfcn = {{ default_dl_earfcn }} +default-lte-dl-freq = {{ default_lte_dl_freq }} +default-lte-band = {{ default_lte_band }} +default-lte-n-rb-dl = {{ default_lte_n_rb_dl }} +default-lte-tx-gain = {{ default_lte_tx_gain }} +default-lte-rx-gain = {{ default_lte_rx_gain }} + +default-dl-nr-arfcn = {{ default_dl_nr_arfcn }} +default-nr-band = {{ default_nr_band }} +default-nr-dl-freq = {{ default_nr_dl_freq }} +default-nr-bandwidth = {{ default_nr_bandwidth }} +default-nr-tx-gain = {{ default_nr_tx_gain }} +default-nr-rx-gain = {{ default_nr_rx_gain }} + +min-frequency = {{ min_frequency }} +max-frequency = {{ max_frequency }}