Commit 8752dd76 authored by Joanne Hugé's avatar Joanne Hugé

ors-amarisoft: remove binaries from SR

parent e3829420
......@@ -16,7 +16,7 @@
[template]
filename = instance.cfg
md5sum = 9d5f4fc9ed3664140d33dd7c447dbd63
md5sum = 676e9d59bf7f6ce67dbf982abfa6a56e
[template-lte-enb-epc]
_update_hash_filename_ = instance-enb-epc.jinja2.cfg
......@@ -44,11 +44,11 @@ md5sum = d33163012d6c98efc59161974c649557
[enb.jinja2.cfg]
filename = config/enb.jinja2.cfg
md5sum = b78082a9c5d6af79f11a1c79d6d25a86
md5sum = 04105bfaede4254c3f95637898a3361f
[gnb.jinja2.cfg]
filename = config/gnb.jinja2.cfg
md5sum = 944e342d426d5a7c4c16bdcb01398ba3
md5sum = c0d3d042960f5704dd2e3fa7714a4a5f
[ltelogs.jinja2.sh]
filename = ltelogs.jinja2.sh
......@@ -56,11 +56,11 @@ md5sum = 1ba2e065bdf14a6411e95e80db17dcfd
[mme.jinja2.cfg]
filename = config/mme.jinja2.cfg
md5sum = 13ce0230f06e1089c10924b17f80e49b
md5sum = fc073eb6450da95955009a127a333396
[ims.jinja2.cfg]
filename = config/ims.jinja2.cfg
md5sum = e561ec26a70943c61557def1781cf65f
md5sum = 36281b03597252cf75169417d02fc28c
[sdr-busy-promise]
_update_hash_filename_ = promise/check_sdr_busy.py
......
/* 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)
#define TDD 1
#define N_RB_DL {{ slapparameter_dict.get('n_rb_dl', slap_configuration['configuration.default_lte_n_rb_dl']) }}
#define N_ANTENNA_DL 2
#define N_ANTENNA_UL 2
{
/* 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,file.rotate=1G,file.path={{ directory['tmp'] }}",
log_filename: "{{ directory['log'] }}/enb.log",
/* 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
tx_gain: {{ slapparameter_dict.get('tx_gain', slap_configuration['configuration.default_lte_tx_gain']) }},
rx_gain: {{ slapparameter_dict.get('rx_gain', slap_configuration['configuration.default_lte_rx_gain']) }},
mme_list: [
{% if slapparameter_dict.get('mme_list', '') %}
......@@ -66,21 +32,16 @@
},
{% endif %}
],
/* GTP bind address (=address of the ethernet interface connected to
the MME). Must be modified if the MME runs on a different host. */
{% if slapparameter_dict.get('mme_list', '') %}
gtp_addr: "{{ gtp_addr }}",
{% else %}
gtp_addr: "127.0.1.1",
{% endif %}
/* high 20 bits of SIB1.cellIdentifier */
enb_id: {{ slapparameter_dict.get('enb_id', '0x1A2D0') }},
/* list of cells */
cell_list: [
{
/* Broadcasted PLMN identities */
plmn_list: [
{%- if slapparameter_dict.get('plmn_list', '') %}
{%- for i, k in enumerate(slapparameter_dict['plmn_list']) %}
......@@ -106,51 +67,45 @@
n_id_cell: 1,
cell_id: 0x01,
tac: 0x0001,
root_sequence_index: 204, /* PRACH root sequence index */
root_sequence_index: 204,
},
], /* 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 */
n_antenna_dl: N_ANTENNA_DL,
n_antenna_ul: N_ANTENNA_UL,
#if TDD == 1
uldl_config: 2, /* TDD only */
sp_config: 7, /* TDD only */
#endif
uldl_config: 2
sp_config: 7
n_rb_dl: N_RB_DL, /* Bandwidth: 25: 5 MHz, 50: 10 MHz, 75: 15 MHz, 100: 20 MHz */
n_rb_dl: N_RB_DL,
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 */
phich_resource: "1",
si_value_tag: 0,
cell_barred: false,
intra_freq_reselection: true,
q_rx_lev_min: -70,
p_max: 10,
si_window_length: 40,
sib_sched_list: [
{
filename: "{{ directory['software'] }}/enb/config/sib23.asn",
si_periodicity: 16, /* frames */
si_periodicity: 16,
},
],
#if N_RB_DL == 6
si_coderate: 0.30, /* maximum code rate for SI/RA/P-RNTI messages */
si_coderate: 0.30,
#else
si_coderate: 0.20, /* maximum code rate for SI/RA/P-RNTI messages */
si_coderate: 0.20,
#endif
si_pdcch_format: 2, /* 2 or 3. Log2 of the number of CCEs for PDCCH
for SI/RA/P-RNTI */
si_pdcch_format: 2,
n_symb_cch: 0, /* number of symbols for CCH (0 = auto) */
n_symb_cch: 0,
/* PDSCH dedicated config (currently same for all UEs) */
pdsch_dedicated: {
#if N_ANTENNA_DL == 4
p_a: -6,
......@@ -159,82 +114,56 @@
#else
p_a: 0,
#endif
p_b: -1, /* -1 means automatic */
p_b: -1,
},
/* 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 */
prach_config_index: 15,
#else
prach_config_index: 4, /* subframe 4 every 10 ms */
prach_config_index: 4,
#endif
prach_freq_offset: -1, /* -1 means automatic */
prach_freq_offset: -1,
/* 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
n1_pucch_sr_count: 11,
cqi_pucch_n_rb: 1,
tdd_ack_nack_feedback_mode: "multiplexing",
},
/* 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 */
pusch_hopping_offset: -1,
/* 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 */
cqi_period: 40,
#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,
......@@ -255,35 +184,27 @@
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_subframe_config: 3,
srs_period: 40,
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 */
ul_max_harq_tx: 5,
dl_max_harq_tx: 5,
},
/* CPU load limitation */
pusch_max_its: 6, /* max number of turbo decoder iterations */
pusch_max_its: 6,
/* 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,
......@@ -299,7 +220,505 @@
}
],
/* DRB configuration */
drb_config: "{{ directory['software'] }}/enb/config/drb.cfg",
#define T_REORDERING 65
drb_config: "[
{
qci: 1,
ims_dedicated_bearer: true,
pdcp_config: {
discardTimer: 100,
pdcp_SN_Size: 7,
},
nr_pdcp_config: {
discardTimer: 0,
pdcp_SN_SizeUL: 12,
pdcp_SN_SizeDL: 12,
statusReportRequired: false,
outOfOrderDelivery: false,
restrict_to_ng_enb: true,
},
rlc_config: {
ul_um: {
sn_FieldLength: 5,
},
dl_um: {
sn_FieldLength: 5,
t_Reordering: T_REORDERING,
},
},
logical_channel_config: {
priority: 7,
prioritisedBitRate: 0,
bucketSizeDuration: 100,
logicalChannelGroup: 1,
logicalChannelSR_Mask: false,
logicalChannelSR_Prohibit: false,
},
},
{
qci: 2,
ims_dedicated_bearer: true,
pdcp_config: {
discardTimer: 150,
pdcp_SN_Size: 12,
},
nr_pdcp_config: {
discardTimer: 150,
pdcp_SN_SizeUL: 18,
pdcp_SN_SizeDL: 18,
statusReportRequired: false,
outOfOrderDelivery: false,
t_Reordering: 0,
restrict_to_ng_enb: true,
},
rlc_config: {
ul_um: {
sn_FieldLength: 10,
},
dl_um: {
sn_FieldLength: 10,
t_Reordering: T_REORDERING,
},
},
logical_channel_config: {
priority: 9,
prioritisedBitRate: 0,
bucketSizeDuration: 100,
logicalChannelGroup: 1,
logicalChannelSR_Mask: false,
logicalChannelSR_Prohibit: false,
},
},
{
qci: 3,
pdcp_config: {
discardTimer: 100,
pdcp_SN_Size: 12,
},
nr_pdcp_config: {
discardTimer: 100,
pdcp_SN_SizeUL: 18,
pdcp_SN_SizeDL: 18,
statusReportRequired: false,
outOfOrderDelivery: false,
t_Reordering: 0,
restrict_to_ng_enb: true,
},
rlc_config: {
ul_um: {
sn_FieldLength: 10,
},
dl_um: {
sn_FieldLength: 10,
t_Reordering: T_REORDERING,
},
},
logical_channel_config: {
priority: 8,
prioritisedBitRate: 0,
bucketSizeDuration: 100,
logicalChannelGroup: 1,
logicalChannelSR_Mask: false,
logicalChannelSR_Prohibit: false,
},
},
{
qci: 4,
pdcp_config: {
discardTimer: 0,
statusReportRequired: true,
},
nr_pdcp_config: {
discardTimer: 0,
pdcp_SN_SizeUL: 18,
pdcp_SN_SizeDL: 18,
statusReportRequired: true,
outOfOrderDelivery: false,
restrict_to_ng_enb: true,
},
rlc_config: {
ul_am: {
t_PollRetransmit: 80,
pollPDU: 64,
pollByte: 125,
maxRetxThreshold: 32,
},
dl_am: {
t_Reordering: T_REORDERING,
t_StatusProhibit: 10,
},
},
logical_channel_config: {
priority: 10,
prioritisedBitRate: 8,
bucketSizeDuration: 100,
logicalChannelGroup: 1,
logicalChannelSR_Mask: false,
logicalChannelSR_Prohibit: false,
},
},
{
qci: 65,
ims_dedicated_bearer: true,
pdcp_config: {
discardTimer: 100,
pdcp_SN_Size: 7,
},
nr_pdcp_config: {
discardTimer: 100,
pdcp_SN_SizeUL: 12,
pdcp_SN_SizeDL: 12,
statusReportRequired: false,
outOfOrderDelivery: false,
t_Reordering: 0,
restrict_to_ng_enb: true,
},
rlc_config: {
ul_um: {
sn_FieldLength: 5,
},
dl_um: {
sn_FieldLength: 5,
t_Reordering: T_REORDERING,
},
},
logical_channel_config: {
priority: 5,
prioritisedBitRate: 0,
bucketSizeDuration: 100,
logicalChannelGroup: 1,
logicalChannelSR_Mask: false,
logicalChannelSR_Prohibit: false,
},
},
{
qci: 66,
ims_dedicated_bearer: true,
pdcp_config: {
discardTimer: 150,
pdcp_SN_Size: 12,
},
nr_pdcp_config: {
discardTimer: 150,
pdcp_SN_SizeUL: 18,
pdcp_SN_SizeDL: 18,
statusReportRequired: false,
outOfOrderDelivery: false,
t_Reordering: 0,
restrict_to_ng_enb: true,
},
rlc_config: {
ul_um: {
sn_FieldLength: 10,
},
dl_um: {
sn_FieldLength: 10,
t_Reordering: T_REORDERING,
},
},
logical_channel_config: {
priority: 7,
prioritisedBitRate: 0,
bucketSizeDuration: 100,
logicalChannelGroup: 1,
logicalChannelSR_Mask: false,
logicalChannelSR_Prohibit: false,
},
},
{
qci: 67,
ims_dedicated_bearer: true,
pdcp_config: {
discardTimer: 100,
pdcp_SN_Size: 12,
},
nr_pdcp_config: {
discardTimer: 100,
pdcp_SN_SizeUL: 18,
pdcp_SN_SizeDL: 18,
statusReportRequired: false,
outOfOrderDelivery: false,
t_Reordering: 0,
restrict_to_ng_enb: true,
},
rlc_config: {
ul_um: {
sn_FieldLength: 10,
},
dl_um: {
sn_FieldLength: 10,
t_Reordering: T_REORDERING,
},
},
logical_channel_config: {
priority: 6,
prioritisedBitRate: 0,
bucketSizeDuration: 100,
logicalChannelGroup: 1,
logicalChannelSR_Mask: false,
logicalChannelSR_Prohibit: false,
},
},
{
qci: 5,
pdcp_config: {
discardTimer: 0,
statusReportRequired: true,
},
nr_pdcp_config: {
discardTimer: 0,
pdcp_SN_SizeUL: 18,
pdcp_SN_SizeDL: 18,
statusReportRequired: true,
outOfOrderDelivery: false,
restrict_to_ng_enb: true,
},
rlc_config: {
ul_am: {
t_PollRetransmit: 80,
pollPDU: 64,
pollByte: 125,
maxRetxThreshold: 32,
},
dl_am: {
t_Reordering: T_REORDERING,
t_StatusProhibit: 10,
},
},
logical_channel_config: {
priority: 6,
prioritisedBitRate: 8,
bucketSizeDuration: 100,
logicalChannelGroup: 1,
logicalChannelSR_Mask: false,
logicalChannelSR_Prohibit: false,
},
},
{
qci: 6,
pdcp_config: {
discardTimer: 0,
statusReportRequired: true,
},
nr_pdcp_config: {
discardTimer: 0,
pdcp_SN_SizeUL: 18,
pdcp_SN_SizeDL: 18,
statusReportRequired: true,
outOfOrderDelivery: false,
restrict_to_ng_enb: true,
},
rlc_config: {
ul_am: {
t_PollRetransmit: 80,
pollPDU: 64,
pollByte: 125,
maxRetxThreshold: 32,
},
dl_am: {
t_Reordering: T_REORDERING,
t_StatusProhibit: 10,
},
},
logical_channel_config: {
priority: 12,
prioritisedBitRate: 8,
bucketSizeDuration: 100,
logicalChannelGroup: 2,
logicalChannelSR_Mask: false,
logicalChannelSR_Prohibit: false,
},
},
{
qci: 7,
pdcp_config: {
discardTimer: 100,
pdcp_SN_Size: 12,
},
nr_pdcp_config: {
discardTimer: 100,
pdcp_SN_SizeUL: 18,
pdcp_SN_SizeDL: 18,
statusReportRequired: false,
outOfOrderDelivery: false,
t_Reordering: 0,
restrict_to_ng_enb: true,
},
rlc_config: {
ul_um: {
sn_FieldLength: 10,
},
dl_um: {
sn_FieldLength: 10,
t_Reordering: T_REORDERING,
},
},
logical_channel_config: {
priority: 13,
prioritisedBitRate: 0,
bucketSizeDuration: 100,
logicalChannelGroup: 2,
logicalChannelSR_Mask: false,
logicalChannelSR_Prohibit: false,
},
},
{
qci: 8,
pdcp_config: {
discardTimer: 0,
statusReportRequired: true,
},
nr_pdcp_config: {
discardTimer: 0,
pdcp_SN_SizeUL: 18,
pdcp_SN_SizeDL: 18,
statusReportRequired: true,
outOfOrderDelivery: false,
restrict_to_ng_enb: true,
},
rlc_config: {
ul_am: {
t_PollRetransmit: 80,
pollPDU: 64,
pollByte: 125,
maxRetxThreshold: 32,
},
dl_am: {
t_Reordering: T_REORDERING,
t_StatusProhibit: 10,
},
},
logical_channel_config: {
priority: 14,
prioritisedBitRate: 8,
bucketSizeDuration: 100,
logicalChannelGroup: 2,
logicalChannelSR_Mask: false,
logicalChannelSR_Prohibit: false,
},
},
{
qci: 9,
pdcp_config: {
discardTimer: 0,
statusReportRequired: true,
},
nr_pdcp_config: {
discardTimer: 0,
pdcp_SN_SizeUL: 18,
pdcp_SN_SizeDL: 18,
statusReportRequired: true,
outOfOrderDelivery: false,
},
en_dc_split: {
type: "scg",
ul_data_threshold: 0
},
rlc_config: {
ul_am: {
t_PollRetransmit: 80,
pollPDU: 64,
pollByte: 125,
maxRetxThreshold: 32,
},
dl_am: {
t_Reordering: T_REORDERING,
t_StatusProhibit: 10,
},
},
logical_channel_config: {
priority: 15,
prioritisedBitRate: 8,
bucketSizeDuration: 100,
logicalChannelGroup: 3,
logicalChannelSR_Mask: false,
logicalChannelSR_Prohibit: false,
},
},
{
qci: 69,
pdcp_config: {
discardTimer: 0,
statusReportRequired: true,
},
nr_pdcp_config: {
discardTimer: 0,
pdcp_SN_SizeUL: 18,
pdcp_SN_SizeDL: 18,
statusReportRequired: true,
outOfOrderDelivery: false,
restrict_to_ng_enb: true,
},
rlc_config: {
ul_am: {
t_PollRetransmit: 80,
pollPDU: 64,
pollByte: 125,
maxRetxThreshold: 32,
},
dl_am: {
t_Reordering: T_REORDERING,
t_StatusProhibit: 10,
},
},
logical_channel_config: {
priority: 4,
prioritisedBitRate: 8,
bucketSizeDuration: 100,
logicalChannelGroup: 1,
logicalChannelSR_Mask: false,
logicalChannelSR_Prohibit: false,
},
},
{
qci: 70,
pdcp_config: {
discardTimer: 0,
statusReportRequired: true,
},
nr_pdcp_config: {
discardTimer: 0,
pdcp_SN_SizeUL: 18,
pdcp_SN_SizeDL: 18,
statusReportRequired: true,
outOfOrderDelivery: false,
restrict_to_ng_enb: true,
},
rlc_config: {
ul_am: {
t_PollRetransmit: 80,
pollPDU: 64,
pollByte: 125,
maxRetxThreshold: 32,
},
dl_am: {
t_Reordering: T_REORDERING,
t_StatusProhibit: 10,
},
},
logical_channel_config: {
priority: 11,
prioritisedBitRate: 8,
bucketSizeDuration: 100,
logicalChannelGroup: 2,
logicalChannelSR_Mask: false,
logicalChannelSR_Prohibit: false,
},
},
]
},
}
/* 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)
......@@ -11,25 +5,20 @@
#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,file.rotate=1G,file.path={{ directory['tmp'] }}",
log_filename: "{{ directory['log'] }}/gnb.log",
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) */
tx_gain: {{ slapparameter_dict.get('tx_gain', slap_configuration['configuration.default_nr_tx_gain']) }},
rx_gain: {{ slapparameter_dict.get('rx_gain', slap_configuration['configuration.default_nr_rx_gain']) }},
amf_list: [
{% if slapparameter_dict.get('amf_list', '') %}
......@@ -48,8 +37,7 @@
},
{% endif %}
],
/* GTP bind address (=address of the ethernet interface connected to
the AMF). Must be modified if the AMF runs on a different host. */
{% if slapparameter_dict.get('amf_list', '') %}
gtp_addr: "{{ gtp_addr }}",
{% else %}
......@@ -64,70 +52,48 @@
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 */
rf_dl_freq: 3500,
rf_ul_freq: 3500,
// rx_to_tx_latency: 1,
#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 */
subcarrier_spacing: 30,
ssb_pos_bitmap: "{{ slapparameter_dict.get('ssb_pos_bitmap', slap_configuration['configuration.default_nr_ssb_pos_bitmap']) }}",
#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 */
bandwidth: NR_BANDWIDTH,
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 */
period: 5,
dl_slots: 7,
dl_symbols: /* 6 */ 2,
dl_symbols: 2,
ul_slots: 2,
ul_symbols: 2,
},
#elif NR_TDD_CONFIG == 2
pattern1: {
period: 5, /* in ms */
period: 5,
dl_slots: 7,
dl_symbols: 6,
ul_slots: 2,
......@@ -135,7 +101,7 @@
},
#elif NR_TDD_CONFIG == 3
pattern1: {
period: 5, /* in ms */
period: 5,
dl_slots: 6,
dl_symbols: 2,
ul_slots: 3,
......@@ -143,23 +109,23 @@
},
#elif NR_TDD_CONFIG == 4
pattern1: {
period: 3, /* in ms */
period: 3,
dl_slots: 3,
dl_symbols: 6,
ul_symbols: 4,
ul_slots: 2,
},
pattern2: {
period: 2, /* in ms */
period: 2,
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 */
period: 0.625,
dl_slots: 3,
dl_symbols: 10,
ul_slots: 1,
......@@ -167,8 +133,7 @@
},
#endif
},
#endif
ssb_period: 20, /* in ms */
ssb_period: 20,
n_id_cell: 500,
plmn_list: [
......@@ -236,71 +201,41 @@
{%- endif %}
],
/*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 */
p_max: 10,
root_sequence_index: 1, /* PRACH root sequence index */
root_sequence_index: 1,
/* 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 */
prach_config_index: 156,
#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 */
prach_config_index: 160,
#endif
msg1_subcarrier_spacing: 30,
msg1_fdm: 1,
msg1_frequency_start: -1,
zero_correlation_zone_config: 15,
preamble_received_target_power: -110, /* in dBm */
preamble_received_target_power: -110,
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
power_ramping_step: 4,
ra_response_window: 20,
restricted_set_config: "unrestricted_set",
ra_contention_resolution_timer: 64, /* in ms */
ra_contention_resolution_timer: 64,
ssb_per_prach_occasion: 1,
cb_preambles_per_ssb: 8,
},
......@@ -309,9 +244,9 @@
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 */
rb_start: -1,
l_crb: -1,
duration: 0,
precoder_granularity: "sameAsREG_bundle",
},
......@@ -333,14 +268,13 @@
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: {
......@@ -373,18 +307,18 @@
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 */
l_crb: -1,
power_control_offset: 0,
power_control_offset_ss: 0,
period: 80,
offset: 1, /* != 0 to avoid collision with SSB */
offset: 1,
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,
......@@ -394,9 +328,9 @@
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 */
l_crb: -1,
power_control_offset: 0,
power_control_offset_ss: 0,
period: 40,
offset: 11,
qcl_info_periodic_csi_rs: 0,
......@@ -410,9 +344,9 @@
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 */
l_crb: -1,
power_control_offset: 0,
power_control_offset_ss: 0,
period: 40,
offset: 11,
qcl_info_periodic_csi_rs: 0,
......@@ -426,9 +360,9 @@
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 */
l_crb: -1,
power_control_offset: 0,
power_control_offset_ss: 0,
period: 40,
offset: 12,
qcl_info_periodic_csi_rs: 0,
......@@ -442,9 +376,9 @@
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 */
l_crb: -1,
power_control_offset: 0,
power_control_offset_ss: 0,
period: 40,
offset: 12,
qcl_info_periodic_csi_rs: 0,
......@@ -474,9 +408,9 @@
subcarrier_location: 8,
symbol_location: 8,
rb_start: 0,
l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */
l_crb: -1,
period: 80,
offset: 1, /* != 0 to avoid collision with SSB */
offset: 1,
},
],
csi_im_resource_set: [
......@@ -485,7 +419,7 @@
csi_im_resources: [ 0 ],
}
],
/* ZP CSI-RS to set the CSI-IM REs to zero */
zp_csi_rs_resource: [
{
csi_rs_id: 0,
......@@ -496,7 +430,7 @@
first_symb: 8,
density: 1,
rb_start: 0,
l_crb: -1, /* -1 means from rb_start to the end of the bandwidth */
l_crb: -1,
period: 80,
offset: 1,
},
......@@ -557,7 +491,7 @@
pucch: {
pucch_group_hopping: "neither",
hopping_id: -1, /* -1 = n_cell_id */
hopping_id: -1,
p0_nominal: -90,
#if 0
pucch0: {
......@@ -569,9 +503,6 @@
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
......@@ -603,37 +534,6 @@
#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,
......@@ -641,33 +541,32 @@
dmrs_type: 1,
dmrs_max_len: 1,
tf_precoding: false,
mcs_table: "qam256", /* without transform precoding */
mcs_table_tp: "qam256", /* with transform precoding */
mcs_table: "qam256",
mcs_table_tp: "qam256",
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 */
msg3_delta_power: 0,
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 */
ul_max_harq_tx: 5,
dl_max_harq_tx: 5,
ul_max_consecutive_retx: 30,
dl_max_consecutive_retx: 30,
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_prohibit_timer: 0,
sr_trans_max: 64,
},
......@@ -676,7 +575,439 @@
inactivity_timer: 10000,
drb_config: "{{ directory['software'] }}/enb/config/drb_nr.cfg",
#ifndef EPS_FALLBACK
#define EPS_FALLBACK 0
#endif
drb_config: [
{
qci: 1,
use_for_en_dc: false,
#if EPS_FALLBACK > 0
trigger_eps_fallback: true,
#endif
ims_dedicated_bearer: true,
pdcp_config: {
discardTimer: 100,
pdcp_SN_SizeUL: 12,
pdcp_SN_SizeDL: 12,
statusReportRequired: false,
outOfOrderDelivery: false,
t_Reordering: 0,
},
rlc_config: {
ul_um: {
sn_FieldLength: 6,
},
dl_um: {
sn_FieldLength: 6,
t_Reassembly: 50,
},
},
logical_channel_config: {
priority: 7,
prioritisedBitRate: 0,
bucketSizeDuration: 100,
logicalChannelGroup: 1,
},
},
{
qci: 2,
use_for_en_dc: false,
#if EPS_FALLBACK > 0
trigger_eps_fallback: true,
#endif
ims_dedicated_bearer: true,
pdcp_config: {
discardTimer: 150,
pdcp_SN_SizeUL: 18,
pdcp_SN_SizeDL: 18,
statusReportRequired: false,
outOfOrderDelivery: false,
t_Reordering: 0,
},
rlc_config: {
ul_um: {
sn_FieldLength: 12,
},
dl_um: {
sn_FieldLength: 12,
t_Reassembly: 50,
},
},
logical_channel_config: {
priority: 8,
prioritisedBitRate: 0,
bucketSizeDuration: 100,
logicalChannelGroup: 1,
},
},
{
qci: 3,
pdcp_config: {
discardTimer: 100,
pdcp_SN_SizeUL: 18,
pdcp_SN_SizeDL: 18,
statusReportRequired: false,
outOfOrderDelivery: false,
t_Reordering: 0,
},
rlc_config: {
ul_um: {
sn_FieldLength: 12,
},
dl_um: {
sn_FieldLength: 12,
t_Reassembly: 50,
},
},
logical_channel_config: {
priority: 7,
prioritisedBitRate: 0,
bucketSizeDuration: 100,
logicalChannelGroup: 2,
},
},
{
qci: 4,
pdcp_config: {
discardTimer: 0,
pdcp_SN_SizeUL: 18,
pdcp_SN_SizeDL: 18,
statusReportRequired: true,
outOfOrderDelivery: false,
},
rlc_config: {
ul_am: {
sn_FieldLength: 18,
t_PollRetransmit: 80,
pollPDU: 64,
pollByte: 125,
maxRetxThreshold: 4,
},
dl_am: {
sn_FieldLength: 18,
t_Reassembly: 80,
t_StatusProhibit: 10,
},
},
logical_channel_config: {
priority: 9,
prioritisedBitRate: 8,
bucketSizeDuration: 100,
logicalChannelGroup: 3,
},
},
{
qci: 65,
use_for_en_dc: false,
#if EPS_FALLBACK > 0
trigger_eps_fallback: true,
#endif
ims_dedicated_bearer: true,
pdcp_config: {
discardTimer: 100,
pdcp_SN_SizeUL: 12,
pdcp_SN_SizeDL: 12,
statusReportRequired: false,
outOfOrderDelivery: false,
t_Reordering: 0,
},
rlc_config: {
ul_um: {
sn_FieldLength: 6,
},
dl_um: {
sn_FieldLength: 6,
t_Reassembly: 50,
},
},
logical_channel_config: {
priority: 5,
prioritisedBitRate: 0,
bucketSizeDuration: 100,
logicalChannelGroup: 4,
},
},
{
qci: 66,
use_for_en_dc: false,
#if EPS_FALLBACK > 0
trigger_eps_fallback: true,
#endif
ims_dedicated_bearer: true,
pdcp_config: {
discardTimer: 150,
pdcp_SN_SizeUL: 18,
pdcp_SN_SizeDL: 18,
statusReportRequired: false,
outOfOrderDelivery: false,
t_Reordering: 0,
},
rlc_config: {
ul_um: {
sn_FieldLength: 12,
},
dl_um: {
sn_FieldLength: 12,
t_Reassembly: 50,
},
},
logical_channel_config: {
priority: 7,
prioritisedBitRate: 0,
bucketSizeDuration: 100,
logicalChannelGroup: 4,
},
},
{
qci: 67,
use_for_en_dc: false,
#if EPS_FALLBACK > 0
trigger_eps_fallback: true,
#endif
ims_dedicated_bearer: true,
pdcp_config: {
discardTimer: 100,
pdcp_SN_SizeUL: 18,
pdcp_SN_SizeDL: 18,
statusReportRequired: false,
outOfOrderDelivery: false,
t_Reordering: 0,
},
rlc_config: {
ul_um: {
sn_FieldLength: 12,
},
dl_um: {
sn_FieldLength: 12,
t_Reassembly: 50,
},
},
logical_channel_config: {
priority: 6,
prioritisedBitRate: 0,
bucketSizeDuration: 100,
logicalChannelGroup: 5,
},
},
{
qci: 5,
use_for_en_dc: false,
pdcp_config: {
discardTimer: 0,
pdcp_SN_SizeUL: 18,
pdcp_SN_SizeDL: 18,
statusReportRequired: true,
outOfOrderDelivery: false,
},
rlc_config: {
ul_am: {
sn_FieldLength: 18,
t_PollRetransmit: 80,
pollPDU: 64,
pollByte: 125,
maxRetxThreshold: 4,
},
dl_am: {
sn_FieldLength: 18,
t_Reassembly: 80,
t_StatusProhibit: 10,
},
},
logical_channel_config: {
priority: 6,
prioritisedBitRate: 8,
bucketSizeDuration: 100,
logicalChannelGroup: 4,
},
},
{
qci: 6,
pdcp_config: {
discardTimer: 0,
pdcp_SN_SizeUL: 18,
pdcp_SN_SizeDL: 18,
statusReportRequired: true,
outOfOrderDelivery: false,
},
rlc_config: {
ul_am: {
sn_FieldLength: 18,
t_PollRetransmit: 80,
pollPDU: 64,
pollByte: 125,
maxRetxThreshold: 4,
},
dl_am: {
sn_FieldLength: 18,
t_Reassembly: 80,
t_StatusProhibit: 10,
},
},
logical_channel_config: {
priority: 10,
prioritisedBitRate: 8,
bucketSizeDuration: 100,
logicalChannelGroup: 5,
},
},
{
qci: 7,
pdcp_config: {
discardTimer: 100,
pdcp_SN_SizeUL: 18,
pdcp_SN_SizeDL: 18,
statusReportRequired: false,
outOfOrderDelivery: false,
t_Reordering: 0,
},
rlc_config: {
ul_um: {
sn_FieldLength: 12,
},
dl_um: {
sn_FieldLength: 12,
t_Reassembly: 50,
},
},
logical_channel_config: {
priority: 11,
prioritisedBitRate: 0,
bucketSizeDuration: 100,
logicalChannelGroup: 6,
},
},
{
qci: 8,
pdcp_config: {
discardTimer: 0,
pdcp_SN_SizeUL: 18,
pdcp_SN_SizeDL: 18,
statusReportRequired: true,
outOfOrderDelivery: false,
},
rlc_config: {
ul_am: {
sn_FieldLength: 18,
t_PollRetransmit: 80,
pollPDU: 64,
pollByte: 125,
maxRetxThreshold: 4,
},
dl_am: {
sn_FieldLength: 18,
t_Reassembly: 80,
t_StatusProhibit: 10,
},
},
logical_channel_config: {
priority: 12,
prioritisedBitRate: 8,
bucketSizeDuration: 100,
logicalChannelGroup: 7,
},
},
{
qci: 9,
pdcp_config: {
discardTimer: 0,
pdcp_SN_SizeUL: 18,
pdcp_SN_SizeDL: 18,
statusReportRequired: true,
outOfOrderDelivery: false,
},
rlc_config: {
ul_am: {
sn_FieldLength: 18,
t_PollRetransmit: 80,
pollPDU: 64,
pollByte: 125,
maxRetxThreshold: 4,
},
dl_am: {
sn_FieldLength: 18,
t_Reassembly: 80,
t_StatusProhibit: 10,
},
},
logical_channel_config: {
priority: 13,
prioritisedBitRate: 8,
bucketSizeDuration: 100,
logicalChannelGroup: 7,
},
},
{
qci: 69,
use_for_en_dc: false,
pdcp_config: {
discardTimer: 0,
pdcp_SN_SizeUL: 18,
pdcp_SN_SizeDL: 18,
statusReportRequired: true,
outOfOrderDelivery: false,
},
rlc_config: {
ul_am: {
sn_FieldLength: 18,
t_PollRetransmit: 80,
pollPDU: 64,
pollByte: 125,
maxRetxThreshold: 4,
},
dl_am: {
sn_FieldLength: 18,
t_Reassembly: 80,
t_StatusProhibit: 10,
},
},
logical_channel_config: {
priority: 4,
prioritisedBitRate: 8,
bucketSizeDuration: 100,
logicalChannelGroup: 4,
},
},
{
qci: 70,
pdcp_config: {
discardTimer: 0,
pdcp_SN_SizeUL: 18,
pdcp_SN_SizeDL: 18,
statusReportRequired: true,
outOfOrderDelivery: false,
},
rlc_config: {
ul_am: {
sn_FieldLength: 18,
t_PollRetransmit: 80,
pollPDU: 64,
pollByte: 125,
maxRetxThreshold: 4,
},
dl_am: {
sn_FieldLength: 18,
t_Reassembly: 80,
t_StatusProhibit: 10,
},
},
logical_channel_config: {
priority: 11,
prioritisedBitRate: 8,
bucketSizeDuration: 100,
logicalChannelGroup: 5,
},
},
],
},
}
/* 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'] }}",
......@@ -48,27 +30,17 @@
{# 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 */
{impu: "tel:404", code: 404},
{impu: "urn:service:sos", anonymous: true, authentication: false},
{impu: "urn:service:sos.police", anonymous: true, authentication: false},
],
/* 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"],
......
/* 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_options: "all.level=debug,all.max_size=32,file.rotate=1G,file.path={{ directory['tmp'] }}",
log_filename: "{{ directory['log'] }}/mme.log",
/* 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. */
{% if slapparameter_dict.get('external_enb_gnb', '') %}
gtp_addr: "{{ gtp_addr }}",
{% else %}
......@@ -33,20 +12,11 @@
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 */
ims_vops_eps: true,
ims_vops_5gs_3gpp: true,
ims_vops_5gs_n3gpp: true,
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" },
],
......@@ -55,21 +25,16 @@
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: [
......@@ -78,31 +43,7 @@
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",
......@@ -110,8 +51,8 @@
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 */
ip_addr_shift: 2,
dns_addr: "8.8.8.8",
// TODO: enable this instead of Google's DNS above
// dns_addr: "{{ slap_configuration['tun-ipv4-addr'] }}",
p_cscf_addr: ["{{ slap_configuration['tun-ipv4-addr'] }}"],
......@@ -127,34 +68,10 @@
},
],
/* 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"
}
......@@ -27,6 +27,18 @@ context =
key slapparameter_dict slap-configuration:configuration
$${:extra-context}
[amarisoft]
recipe = slapos.recipe.build
init =
import os
lte_version = "2021-09-18"
path = "/opt/amarisoft/v" + lte_version
options['lte-version'] = lte_version
options['path'] = path
options['enb'] = path + "/enb"
options['mme'] = path + "/mme"
options['ims'] = path + "/ims"
[switch-softwaretype]
recipe = slapos.cookbook:switch-softwaretype
enb-epc = dynamic-template-lte-enb-epc:output
......@@ -59,7 +71,7 @@ filename = instance-lte-enb.cfg
extensions = jinja2.ext.do
extra-context =
raw monitor_template ${monitor2-template:output}
raw enb ${enb:destination}
key enb amarisoft:enb
raw enb_template ${enb.jinja2.cfg:target}
raw ltelogs_template ${ltelogs.jinja2.sh:target}
raw sdr_busy_promise ${sdr-busy-promise:target}
......@@ -80,7 +92,7 @@ filename = instance-lte-gnb.cfg
extensions = jinja2.ext.do
extra-context =
raw monitor_template ${monitor2-template:output}
raw enb ${enb:destination}
key enb amarisoft:enb
raw gnb_template ${gnb.jinja2.cfg:target}
raw ltelogs_template ${ltelogs.jinja2.sh:target}
raw sdr_busy_promise ${sdr-busy-promise:target}
......@@ -103,7 +115,7 @@ extensions = jinja2.ext.do
extra-context =
raw monitor_template ${monitor2-template:output}
raw interface_up_promise ${interface-up-promise:target}
raw mme ${mme:destination}
key mme amarisoft:mme
raw mme_template ${mme.jinja2.cfg:target}
raw ims_template ${ims.jinja2.cfg:target}
raw ltelogs_template ${ltelogs.jinja2.sh:target}
......
......@@ -16,10 +16,6 @@ parts +=
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
......@@ -54,13 +50,6 @@ url = ${:_profile_base_location_}/${:_update_hash_filename_}
[interface-up-promise]
<= download-base
[amarisoft]
recipe = slapos.recipe.build
path = /opt/amarisoft/lte
init =
import os
options['lte-version'] = os.readlink(options["path"])[:-1]
[copy-to-instance]
recipe = slapos.recipe.build:download
url = ${:_profile_base_location_}/${:_buildout_section_name_}
......@@ -69,12 +58,6 @@ url = ${:_profile_base_location_}/${:_buildout_section_name_}
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
[enb.jinja2.cfg]
<= copy-config-to-instance
filename = enb.jinja2.cfg
......@@ -93,55 +76,3 @@ 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}
# ORS are pre-configured to have sudo allow slapsoft to run give-cap-sys-nice-lteenb script
# with root permissions
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
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment