Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lizhongxiao
OpenXG-RAN
Commits
f373a427
Commit
f373a427
authored
Sep 27, 2023
by
Marwan Hammouda
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
updates for testing with 5MHz and 25PRB
parent
29e214c3
Changes
4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
873 additions
and
8 deletions
+873
-8
openair2/GNB_APP/gnb_config.c
openair2/GNB_APP/gnb_config.c
+8
-8
targets/PROJECTS/GENERIC-NR-5GC/CONF/cu_gnb_2multDUs_25PRB.conf
...s/PROJECTS/GENERIC-NR-5GC/CONF/cu_gnb_2multDUs_25PRB.conf
+397
-0
targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb_pci0_25PRB.conf
targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb_pci0_25PRB.conf
+234
-0
targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb_pci1_25PRB.conf
targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb_pci1_25PRB.conf
+234
-0
No files found.
openair2/GNB_APP/gnb_config.c
View file @
f373a427
...
...
@@ -1990,23 +1990,23 @@ int RCconfig_NR_DU_F1(MessageDef *msg_p, uint32_t i) {
/***************** for test *****************/
LOG_I
(
GNB_APP
,
"ngran_DU: Configuring Cell %d for FDD
\n
"
,
k
);
f1Setup
->
fdd_flag
=
1
;
f1Setup
->
nr_mode_info
[
k
].
fdd
.
dl_nr_arfcn
=
26200UL
;
f1Setup
->
nr_mode_info
[
k
].
fdd
.
ul_nr_arfcn
=
26200UL
;
f1Setup
->
nr_mode_info
[
k
].
fdd
.
dl_nr_arfcn
=
rrc
->
configuration
.
scc
->
downlinkConfigCommon
->
frequencyInfoDL
->
absoluteFrequencyPointA
;
f1Setup
->
nr_mode_info
[
k
].
fdd
.
ul_nr_arfcn
=
rrc
->
configuration
.
scc
->
uplinkConfigCommon
->
frequencyInfoUL
->
absoluteFrequencyPointA
;
// For LTE use scs field to carry prefix type and number of antennas
f1Setup
->
nr_mode_info
[
k
].
fdd
.
dl_scs
=
0
;
f1Setup
->
nr_mode_info
[
k
].
fdd
.
ul_scs
=
0
;
// use nrb field to hold LTE N_RB_DL (0...5)
f1Setup
->
nr_mode_info
[
k
].
fdd
.
ul_nrb
=
3
;
f1Setup
->
nr_mode_info
[
k
].
fdd
.
ul_nrb
=
3
;
f1Setup
->
nr_mode_info
[
k
].
fdd
.
ul_nrb
=
25
;
f1Setup
->
nr_mode_info
[
k
].
fdd
.
dl_nrb
=
25
;
// RK: we need to check there value for FDD's frequency_bands DL/UL
f1Setup
->
nr_mode_info
[
k
].
fdd
.
ul_num_frequency_bands
=
1
;
f1Setup
->
nr_mode_info
[
k
].
fdd
.
ul_nr_band
[
0
]
=
7
;
f1Setup
->
nr_mode_info
[
k
].
fdd
.
ul_nr_band
[
0
]
=
66
;
f1Setup
->
nr_mode_info
[
k
].
fdd
.
dl_num_frequency_bands
=
1
;
f1Setup
->
nr_mode_info
[
k
].
fdd
.
dl_nr_band
[
0
]
=
7
;
f1Setup
->
nr_mode_info
[
k
].
fdd
.
dl_nr_band
[
0
]
=
66
;
f1Setup
->
nr_mode_info
[
k
].
fdd
.
ul_num_sul_frequency_bands
=
0
;
f1Setup
->
nr_mode_info
[
k
].
fdd
.
ul_nr_sul_band
[
0
]
=
7
;
f1Setup
->
nr_mode_info
[
k
].
fdd
.
ul_nr_sul_band
[
0
]
=
66
;
f1Setup
->
nr_mode_info
[
k
].
fdd
.
dl_num_sul_frequency_bands
=
0
;
f1Setup
->
nr_mode_info
[
k
].
fdd
.
dl_nr_sul_band
[
0
]
=
7
;
f1Setup
->
nr_mode_info
[
k
].
fdd
.
dl_nr_sul_band
[
0
]
=
66
;
f1Setup
->
nr_mode_info
[
k
].
fdd
.
sul_active
=
0
;
/***************** for test *****************/
}
...
...
targets/PROJECTS/GENERIC-NR-5GC/CONF/cu_gnb_2multDUs_25PRB.conf
0 → 100644
View file @
f373a427
This diff is collapsed.
Click to expand it.
targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb_pci0_25PRB.conf
0 → 100644
View file @
f373a427
Active_gNBs
= (
"gNB-DU-PCI0"
);
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity
=
"none"
;
gNBs
= ({
# Identification parameters:
gNB_CU_ID
=
0
xe00
;
gNB_name
=
"gNB-DU-PCI0"
;
# Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code
=
1
;
plmn_list
= ({
mcc
=
001
;
mnc
=
01
;
mnc_length
=
2
;
snssaiList
= ({
sst
=
1
; }) });
nr_cellid
=
12345678
L
;
# Physical parameters:
min_rxtxtime
=
6
;
do_CSIRS
=
1
;
sib1_tda
=
5
;
servingCellConfigCommon
= ({
# spCellConfigCommon
physCellId
=
0
;
# downlinkConfigCommon
# frequencyInfoDL
# this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
absoluteFrequencySSB
=
430610
;
dl_frequencyBand
=
66
;
# this is 3600 MHz
dl_absoluteFrequencyPointA
=
430000
;
# scs-SpecificCarrierList
dl_offstToCarrier
=
0
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing
=
0
;
dl_carrierBandwidth
=
25
;
# initialDownlinkBWP
# genericParameters
# this is RBstart=27,L=48 (275*(L-1))+RBstart
initialDLBWPlocationAndBandwidth
=
6600
;
# 6366 12925 12956 28875 12952
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing
=
0
;
# pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero
=
2
;
initialDLBWPsearchSpaceZero
=
0
;
# uplinkConfigCommon
# frequencyInfoUL
ul_frequencyBand
=
66
;
# this is 1750 MHz
ul_absoluteFrequencyPointA
=
350000
;
# scs-SpecificCarrierList
ul_offstToCarrier
=
0
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing
=
0
;
ul_carrierBandwidth
=
25
;
pMax
=
20
;
# initialUplinkBWP
# genericParameters
initialULBWPlocationAndBandwidth
=
6600
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing
=
0
;
# rach-ConfigCommon
# rach-ConfigGeneric
prach_ConfigurationIndex
=
98
;
# prach_msg1_FDM
# 0 = one, 1=two, 2=four, 3=eight
prach_msg1_FDM
=
0
;
prach_msg1_FrequencyStart
=
0
;
zeroCorrelationZoneConfig
=
13
;
preambleReceivedTargetPower
= -
118
;
# preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax
=
6
;
# powerRampingStep
# 0=dB0,1=dB2,2=dB4,3=dB6
powerRampingStep
=
1
;
# ra_ReponseWindow
# 1,2,4,8,10,20,40,80
ra_ResponseWindow
=
4
;
# ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
# 1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
=
4
;
# oneHalf (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
=
15
;
# ra_ContentionResolutionTimer
# (0..7) 8,16,24,32,40,48,56,64
ra_ContentionResolutionTimer
=
7
;
rsrp_ThresholdSSB
=
19
;
# prach-RootSequenceIndex_PR
# 1 = 839, 2 = 139
prach_RootSequenceIndex_PR
=
2
;
prach_RootSequenceIndex
=
1
;
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
msg1_SubcarrierSpacing
=
0
,
# restrictedSetConfig
# 0=unrestricted, 1=restricted type A, 2=restricted type B
restrictedSetConfig
=
0
,
msg3_DeltaPreamble
=
1
;
p0_NominalWithGrant
=-
90
;
# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping
=
0
;
hoppingId
=
40
;
p0_nominal
= -
90
;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR
=
2
;
ssb_PositionsInBurst_Bitmap
=
2
;
# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
ssb_periodicityServingCell
=
2
;
# dmrs_TypeA_position
# 0 = pos2, 1 = pos3
dmrs_TypeA_Position
=
0
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing
=
0
;
# tdd-UL-DL-ConfigurationCommon
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
referenceSubcarrierSpacing
=
0
;
# pattern1
# dl_UL_TransmissionPeriodicity
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
dl_UL_TransmissionPeriodicity
=
6
;
nrofDownlinkSlots
=
7
;
nrofDownlinkSymbols
=
6
;
nrofUplinkSlots
=
2
;
nrofUplinkSymbols
=
4
;
ssPBCH_BlockPower
= -
25
;
});
# SCTP definitions
SCTP
:
{
# Number of streams to use in input/output
SCTP_INSTREAMS
=
2
;
SCTP_OUTSTREAMS
=
2
;
}
});
MACRLCs
= ({
num_cc
=
1
;
tr_s_preference
=
"local_L1"
;
tr_n_preference
=
"f1"
;
local_n_if_name
=
"lo"
;
local_n_address
=
"127.0.0.3"
;
remote_n_address
=
"127.0.0.4"
;
local_n_portc
=
500
;
local_n_portd
=
2152
;
remote_n_portc
=
501
;
remote_n_portd
=
2152
;
});
L1s
= ({
num_cc
=
1
;
tr_n_preference
=
"local_mac"
;
prach_dtx_threshold
=
160
;
pucch0_dtx_threshold
=
150
;
ofdm_offset_divisor
=
8
;
#set this to UINT_MAX for offset 0
});
RUs
= (
{
local_rf
=
"yes"
;
nb_tx
=
1
;
nb_rx
=
1
;
att_tx
=
0
;
att_rx
=
0
;
bands
= [
7
];
max_pdschReferenceSignalPower
= -
27
;
max_rxgain
=
114
;
sf_extension
=
0
;
eNB_instances
= [
0
];
##beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights
= [
0
x00007fff
,
0
x0000
];
##beamforming 1x4 matrix: 1 layer x 4 antennas
#bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
## beamforming 2x2 matrix:
# bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
## beamforming 4x4 matrix:
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
sdr_addrs
=
"type=x300"
;
clock_src
=
"external"
;
# if_freq = 3700000000L;
# if_offset = 1000000;
}
);
THREAD_STRUCT
= ({
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config
=
"PARALLEL_SINGLE_THREAD"
;
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config
=
"WORKER_ENABLE"
;
});
rfsimulator
: {
serveraddr
=
"server"
;
serverport
=
"4043"
;
options
= ();
#("saviq"); or/and "chanmod"
modelname
=
"AWGN"
;
IQfile
=
"/tmp/rfsimulator.iqs"
;
}
log_config
:
{
global_log_level
=
"info"
;
hw_log_level
=
"info"
;
phy_log_level
=
"info"
;
mac_log_level
=
"info"
;
rlc_log_level
=
"info"
;
pdcp_log_level
=
"info"
;
rrc_log_level
=
"info"
;
f1ap_log_level
=
"debug"
;
ngap_log_level
=
"debug"
;
}
targets/PROJECTS/GENERIC-NR-5GC/CONF/du_gnb_pci1_25PRB.conf
0 → 100644
View file @
f373a427
Active_gNBs
= (
"gNB-DU-PCI1"
);
# Asn1_verbosity, choice in: none, info, annoying
Asn1_verbosity
=
"none"
;
gNBs
= ({
# Identification parameters:
gNB_CU_ID
=
0
xe00
;
gNB_name
=
"gNB-DU-PCI1"
;
# Tracking area code, 0x0000 and 0xfffe are reserved values
tracking_area_code
=
1
;
plmn_list
= ({
mcc
=
001
;
mnc
=
01
;
mnc_length
=
2
;
snssaiList
= ({
sst
=
1
; }) });
nr_cellid
=
11111111
L
;
# Physical parameters:
min_rxtxtime
=
6
;
do_CSIRS
=
1
;
sib1_tda
=
5
;
servingCellConfigCommon
= ({
# spCellConfigCommon
physCellId
=
1
;
# downlinkConfigCommon
# frequencyInfoDL
# this is 3600 MHz + 43 PRBs@30kHz SCS (same as initial BWP)
absoluteFrequencySSB
=
435610
;
dl_frequencyBand
=
66
;
# this is 3600 MHz
dl_absoluteFrequencyPointA
=
435000
;
# scs-SpecificCarrierList
dl_offstToCarrier
=
0
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
dl_subcarrierSpacing
=
0
;
dl_carrierBandwidth
=
25
;
# initialDownlinkBWP
# genericParameters
# this is RBstart=27,L=48 (275*(L-1))+RBstart
initialDLBWPlocationAndBandwidth
=
6600
;
# 6366 12925 12956 28875 12952
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialDLBWPsubcarrierSpacing
=
0
;
# pdcch-ConfigCommon
initialDLBWPcontrolResourceSetZero
=
2
;
initialDLBWPsearchSpaceZero
=
0
;
# uplinkConfigCommon
# frequencyInfoUL
ul_frequencyBand
=
66
;
# this is 1750 MHz
ul_absoluteFrequencyPointA
=
355000
;
# scs-SpecificCarrierList
ul_offstToCarrier
=
0
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
ul_subcarrierSpacing
=
0
;
ul_carrierBandwidth
=
25
;
pMax
=
20
;
# initialUplinkBWP
# genericParameters
initialULBWPlocationAndBandwidth
=
6600
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
initialULBWPsubcarrierSpacing
=
0
;
# rach-ConfigCommon
# rach-ConfigGeneric
prach_ConfigurationIndex
=
98
;
# prach_msg1_FDM
# 0 = one, 1=two, 2=four, 3=eight
prach_msg1_FDM
=
0
;
prach_msg1_FrequencyStart
=
0
;
zeroCorrelationZoneConfig
=
13
;
preambleReceivedTargetPower
= -
118
;
# preamblTransMax (0...10) = (3,4,5,6,7,8,10,20,50,100,200)
preambleTransMax
=
6
;
# powerRampingStep
# 0=dB0,1=dB2,2=dB4,3=dB6
powerRampingStep
=
1
;
# ra_ReponseWindow
# 1,2,4,8,10,20,40,80
ra_ResponseWindow
=
4
;
# ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
# 1=oneeighth,2=onefourth,3=half,4=one,5=two,6=four,7=eight,8=sixteen
ssb_perRACH_OccasionAndCB_PreamblesPerSSB_PR
=
4
;
# oneHalf (0..15) 4,8,12,16,...60,64
ssb_perRACH_OccasionAndCB_PreamblesPerSSB
=
14
;
# ra_ContentionResolutionTimer
# (0..7) 8,16,24,32,40,48,56,64
ra_ContentionResolutionTimer
=
7
;
rsrp_ThresholdSSB
=
19
;
# prach-RootSequenceIndex_PR
# 1 = 839, 2 = 139
prach_RootSequenceIndex_PR
=
2
;
prach_RootSequenceIndex
=
1
;
# SCS for msg1, can only be 15 for 30 kHz < 6 GHz, takes precendence over the one derived from prach-ConfigIndex
msg1_SubcarrierSpacing
=
0
,
# restrictedSetConfig
# 0=unrestricted, 1=restricted type A, 2=restricted type B
restrictedSetConfig
=
0
,
msg3_DeltaPreamble
=
1
;
p0_NominalWithGrant
=-
90
;
# pucch-ConfigCommon setup :
# pucchGroupHopping
# 0 = neither, 1= group hopping, 2=sequence hopping
pucchGroupHopping
=
0
;
hoppingId
=
40
;
p0_nominal
= -
90
;
# ssb_PositionsInBurs_BitmapPR
# 1=short, 2=medium, 3=long
ssb_PositionsInBurst_PR
=
2
;
ssb_PositionsInBurst_Bitmap
=
1
;
# ssb_periodicityServingCell
# 0 = ms5, 1=ms10, 2=ms20, 3=ms40, 4=ms80, 5=ms160, 6=spare2, 7=spare1
ssb_periodicityServingCell
=
2
;
# dmrs_TypeA_position
# 0 = pos2, 1 = pos3
dmrs_TypeA_Position
=
0
;
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
subcarrierSpacing
=
0
;
# tdd-UL-DL-ConfigurationCommon
# subcarrierSpacing
# 0=kHz15, 1=kHz30, 2=kHz60, 3=kHz120
referenceSubcarrierSpacing
=
0
;
# pattern1
# dl_UL_TransmissionPeriodicity
# 0=ms0p5, 1=ms0p625, 2=ms1, 3=ms1p25, 4=ms2, 5=ms2p5, 6=ms5, 7=ms10
dl_UL_TransmissionPeriodicity
=
6
;
nrofDownlinkSlots
=
7
;
nrofDownlinkSymbols
=
6
;
nrofUplinkSlots
=
2
;
nrofUplinkSymbols
=
4
;
ssPBCH_BlockPower
= -
25
;
});
# SCTP definitions
SCTP
:
{
# Number of streams to use in input/output
SCTP_INSTREAMS
=
2
;
SCTP_OUTSTREAMS
=
2
;
}
});
MACRLCs
= ({
num_cc
=
1
;
tr_s_preference
=
"local_L1"
;
tr_n_preference
=
"f1"
;
local_n_if_name
=
"lo"
;
local_n_address
=
"127.0.0.5"
;
remote_n_address
=
"127.0.0.6"
;
local_n_portc
=
500
;
local_n_portd
=
2152
;
remote_n_portc
=
501
;
remote_n_portd
=
2152
;
});
L1s
= ({
num_cc
=
1
;
tr_n_preference
=
"local_mac"
;
prach_dtx_threshold
=
160
;
pucch0_dtx_threshold
=
150
;
ofdm_offset_divisor
=
8
;
#set this to UINT_MAX for offset 0
});
RUs
= (
{
local_rf
=
"yes"
;
nb_tx
=
1
;
nb_rx
=
1
;
att_tx
=
0
;
att_rx
=
0
;
bands
= [
7
];
max_pdschReferenceSignalPower
= -
27
;
max_rxgain
=
114
;
sf_extension
=
0
;
eNB_instances
= [
0
];
##beamforming 1x2 matrix: 1 layer x 2 antennas
bf_weights
= [
0
x00007fff
,
0
x0000
];
##beamforming 1x4 matrix: 1 layer x 4 antennas
#bf_weights = [0x00007fff, 0x0000,0x0000, 0x0000];
## beamforming 2x2 matrix:
# bf_weights = [0x00007fff, 0x00000000, 0x00000000, 0x00007fff];
## beamforming 4x4 matrix:
#bf_weights = [0x00007fff, 0x0000, 0x0000, 0x0000, 0x00000000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff, 0x0000, 0x0000, 0x0000, 0x0000, 0x00007fff];
sdr_addrs
=
"type=x300"
;
clock_src
=
"external"
;
# if_freq = 3700000000L;
# if_offset = 1000000;
}
);
THREAD_STRUCT
= ({
#three config for level of parallelism "PARALLEL_SINGLE_THREAD", "PARALLEL_RU_L1_SPLIT", or "PARALLEL_RU_L1_TRX_SPLIT"
parallel_config
=
"PARALLEL_SINGLE_THREAD"
;
#two option for worker "WORKER_DISABLE" or "WORKER_ENABLE"
worker_config
=
"WORKER_ENABLE"
;
});
rfsimulator
: {
serveraddr
=
"server"
;
serverport
=
"4043"
;
options
= ();
#("saviq"); or/and "chanmod"
modelname
=
"AWGN"
;
IQfile
=
"/tmp/rfsimulator.iqs"
;
}
log_config
:
{
global_log_level
=
"info"
;
hw_log_level
=
"info"
;
phy_log_level
=
"info"
;
mac_log_level
=
"info"
;
rlc_log_level
=
"info"
;
pdcp_log_level
=
"info"
;
rrc_log_level
=
"info"
;
f1ap_log_level
=
"debug"
;
ngap_log_level
=
"debug"
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment