Commit 39566efc authored by Matthieu Kanj's avatar Matthieu Kanj

modifiying structure name for NB_DL_FRAME_PARMS, replaced by NB_IoT_DL_FRAME_PARMS

parent 8060a90a
...@@ -64,7 +64,7 @@ void NB_phy_config_mib_eNB( ...@@ -64,7 +64,7 @@ void NB_phy_config_mib_eNB(
AssertFatal(PHY_vars_eNB_g[Mod_id] != NULL, "PHY_vars_eNB_g instance %d doesn't exist\n",Mod_id); AssertFatal(PHY_vars_eNB_g[Mod_id] != NULL, "PHY_vars_eNB_g instance %d doesn't exist\n",Mod_id);
AssertFatal(PHY_vars_eNB_g[Mod_id][CC_id] != NULL, "PHY_vars_eNB_g instance %d, CCid %d doesn't exist\n",Mod_id,CC_id); AssertFatal(PHY_vars_eNB_g[Mod_id][CC_id] != NULL, "PHY_vars_eNB_g instance %d, CCid %d doesn't exist\n",Mod_id,CC_id);
NB_DL_FRAME_PARMS *fp = &PHY_vars_eNB_g[Mod_id][CC_id]->frame_parms_nb_iot; NB_IoT_DL_FRAME_PARMS *fp = &PHY_vars_eNB_g[Mod_id][CC_id]->frame_parms_nb_iot;
LOG_I(PHY,"Configuring MIB-NB for instance %d, CCid %d : (band %d,Nid_cell %d,p %d,EARFCN %u)\n", LOG_I(PHY,"Configuring MIB-NB for instance %d, CCid %d : (band %d,Nid_cell %d,p %d,EARFCN %u)\n",
Mod_id, CC_id, eutra_band, Nid_cell, p_eNB,EARFCN); Mod_id, CC_id, eutra_band, Nid_cell, p_eNB,EARFCN);
...@@ -98,7 +98,7 @@ void NB_phy_config_mib_eNB( ...@@ -98,7 +98,7 @@ void NB_phy_config_mib_eNB(
// RadioResourceConfigCommonSIB_NB_r13_t *radioResourceConfigCommon // RadioResourceConfigCommonSIB_NB_r13_t *radioResourceConfigCommon
// ) // )
//{ //{
// NB_DL_FRAME_PARMS *fp = &PHY_vars_eNB_g[Mod_id][CC_id]->frame_parms; // NB_IoT_DL_FRAME_PARMS *fp = &PHY_vars_eNB_g[Mod_id][CC_id]->frame_parms;
// //LTE_eNB_UE_stats *eNB_UE_stats = PHY_vars_eNB_g[Mod_id][CC_id]->eNB_UE_stats; // //LTE_eNB_UE_stats *eNB_UE_stats = PHY_vars_eNB_g[Mod_id][CC_id]->eNB_UE_stats;
// //int32_t rx_total_gain_eNB_dB = PHY_vars_eNB_g[Mod_id][CC_id]->rx_total_gain_eNB_dB; // //int32_t rx_total_gain_eNB_dB = PHY_vars_eNB_g[Mod_id][CC_id]->rx_total_gain_eNB_dB;
// uint8_t MAX_NPRACH = 4; // uint8_t MAX_NPRACH = 4;
...@@ -196,7 +196,7 @@ void NB_phy_config_sib2_eNB(uint8_t Mod_id, ...@@ -196,7 +196,7 @@ void NB_phy_config_sib2_eNB(uint8_t Mod_id,
extra_phyConfig_t* extra_phy_parms extra_phyConfig_t* extra_phy_parms
) )
{ {
NB_DL_FRAME_PARMS *fp = &PHY_vars_eNB_g[Mod_id][CC_id]->frame_parms; NB_IoT_DL_FRAME_PARMS *fp = &PHY_vars_eNB_g[Mod_id][CC_id]->frame_parms;
LOG_D(PHY,"[eNB%d] CCid %d: Applying nb_iot_config from sib2_NB\n",Mod_id,CC_id); LOG_D(PHY,"[eNB%d] CCid %d: Applying nb_iot_config from sib2_NB\n",Mod_id,CC_id);
/*NPRACH_ConfigSIB_NB_r13----------------------------------------------------------*/ /*NPRACH_ConfigSIB_NB_r13----------------------------------------------------------*/
......
...@@ -98,7 +98,7 @@ void dci_encoding_NB_IoT(uint8_t *a[2], // Array of two DCI pdus, even if one ...@@ -98,7 +98,7 @@ void dci_encoding_NB_IoT(uint8_t *a[2], // Array of two DCI pdus, even if one
///The scrambling sequence shall be initialised at the start of the search space and after every 4th NPDCCH subframes. ///The scrambling sequence shall be initialised at the start of the search space and after every 4th NPDCCH subframes.
/// ///
/// ///
void npdcch_scrambling_NB_IoT(NB_DL_FRAME_PARMS *frame_parms, void npdcch_scrambling_NB_IoT(NB_IoT_DL_FRAME_PARMS *frame_parms,
uint8_t *e[2], // Input data uint8_t *e[2], // Input data
int length, // Total number of bits to transmit in one subframe(case of DCI = G) int length, // Total number of bits to transmit in one subframe(case of DCI = G)
uint8_t Ns,//XXX we pass the subframe // Slot number (0..19) uint8_t Ns,//XXX we pass the subframe // Slot number (0..19)
...@@ -160,7 +160,7 @@ void npdcch_scrambling_NB_IoT(NB_DL_FRAME_PARMS *frame_parms, ...@@ -160,7 +160,7 @@ void npdcch_scrambling_NB_IoT(NB_DL_FRAME_PARMS *frame_parms,
} }
int dci_allocate_REs_in_RB_NB_IoT(NB_DL_FRAME_PARMS *frame_parms, int dci_allocate_REs_in_RB_NB_IoT(NB_IoT_DL_FRAME_PARMS *frame_parms,
int32_t **txdataF, int32_t **txdataF,
uint32_t *jj, uint32_t *jj,
uint32_t symbol_offset, uint32_t symbol_offset,
...@@ -399,7 +399,7 @@ int dci_allocate_REs_in_RB_NB_IoT(NB_DL_FRAME_PARMS *frame_parms, ...@@ -399,7 +399,7 @@ int dci_allocate_REs_in_RB_NB_IoT(NB_DL_FRAME_PARMS *frame_parms,
int dci_modulation_NB_IoT(int32_t **txdataF, int dci_modulation_NB_IoT(int32_t **txdataF,
int16_t amp, int16_t amp,
NB_DL_FRAME_PARMS *frame_parms, NB_IoT_DL_FRAME_PARMS *frame_parms,
uint8_t control_region_size,//XXX we pass the npdcch_start_symbol // control region size for LTE , values between 0..3, (0 for stand-alone / 1, 2 or 3 for in-band) uint8_t control_region_size,//XXX we pass the npdcch_start_symbol // control region size for LTE , values between 0..3, (0 for stand-alone / 1, 2 or 3 for in-band)
uint8_t *e[2], // Input data uint8_t *e[2], // Input data
int G, // number of bits per subframe int G, // number of bits per subframe
...@@ -462,7 +462,7 @@ uint8_t generate_dci_top_NB_IoT( ...@@ -462,7 +462,7 @@ uint8_t generate_dci_top_NB_IoT(
uint8_t Num_dci, uint8_t Num_dci,
DCI_ALLOC_NB_t *dci_alloc, DCI_ALLOC_NB_t *dci_alloc,
int16_t amp, int16_t amp,
NB_DL_FRAME_PARMS *fp, NB_IoT_DL_FRAME_PARMS *fp,
int32_t **txdataF, int32_t **txdataF,
uint32_t subframe, uint32_t subframe,
uint8_t npdcch_start_symbol) uint8_t npdcch_start_symbol)
......
...@@ -147,7 +147,7 @@ int generate_eNB_dlsch_params_from_dci_NB_IoT(PHY_VARS_eNB *eNB, ...@@ -147,7 +147,7 @@ int generate_eNB_dlsch_params_from_dci_NB_IoT(PHY_VARS_eNB *eNB,
uint16_t rnti, uint16_t rnti,
DCI_format_NB_t dci_format, DCI_format_NB_t dci_format,
NB_IoT_eNB_NDLSCH_t *ndlsch, NB_IoT_eNB_NDLSCH_t *ndlsch,
NB_DL_FRAME_PARMS *frame_parms, NB_IoT_DL_FRAME_PARMS *frame_parms,
uint8_t aggregation, uint8_t aggregation,
uint8_t npdcch_start_symbol) uint8_t npdcch_start_symbol)
{ {
......
...@@ -240,7 +240,7 @@ NB_IoT_eNB_NDLSCH_t *new_eNB_dlsch_NB(//unsigned char Kmimo, ...@@ -240,7 +240,7 @@ NB_IoT_eNB_NDLSCH_t *new_eNB_dlsch_NB(//unsigned char Kmimo,
uint32_t Nsoft, uint32_t Nsoft,
//unsigned char N_RB_DL, //unsigned char N_RB_DL,
uint8_t abstraction_flag, uint8_t abstraction_flag,
NB_DL_FRAME_PARMS* frame_parms) NB_IoT_DL_FRAME_PARMS* frame_parms)
{ {
NB_IoT_eNB_NDLSCH_t *dlsch; NB_IoT_eNB_NDLSCH_t *dlsch;
......
...@@ -67,7 +67,7 @@ NB_IoT_eNB_NDLSCH_t *new_eNB_dlsch_NB(//unsigned char Kmimo, ...@@ -67,7 +67,7 @@ NB_IoT_eNB_NDLSCH_t *new_eNB_dlsch_NB(//unsigned char Kmimo,
uint32_t Nsoft, uint32_t Nsoft,
//unsigned char N_RB_DL, //unsigned char N_RB_DL,
uint8_t abstraction_flag, uint8_t abstraction_flag,
NB_DL_FRAME_PARMS* frame_parms); NB_IoT_DL_FRAME_PARMS* frame_parms);
......
...@@ -111,7 +111,7 @@ int generate_eNB_dlsch_params_from_dci_NB_IoT(PHY_VARS_eNB *eNB, ...@@ -111,7 +111,7 @@ int generate_eNB_dlsch_params_from_dci_NB_IoT(PHY_VARS_eNB *eNB,
uint16_t rnti, uint16_t rnti,
DCI_format_NB_t dci_format, DCI_format_NB_t dci_format,
NB_IoT_eNB_NDLSCH_t *ndlsch, NB_IoT_eNB_NDLSCH_t *ndlsch,
NB_DL_FRAME_PARMS *frame_parms, NB_IoT_DL_FRAME_PARMS *frame_parms,
uint8_t aggregation, uint8_t aggregation,
uint8_t npdcch_start_symbol); uint8_t npdcch_start_symbol);
...@@ -121,7 +121,7 @@ uint8_t generate_dci_top_NB_IoT( ...@@ -121,7 +121,7 @@ uint8_t generate_dci_top_NB_IoT(
uint8_t Num_dci, uint8_t Num_dci,
DCI_ALLOC_NB_t *dci_alloc, DCI_ALLOC_NB_t *dci_alloc,
int16_t amp, int16_t amp,
NB_DL_FRAME_PARMS *fp, NB_IoT_DL_FRAME_PARMS *fp,
int32_t **txdataF, int32_t **txdataF,
uint32_t subframe, uint32_t subframe,
uint8_t npdcch_start_symbol); uint8_t npdcch_start_symbol);
......
...@@ -709,7 +709,7 @@ typedef struct PHY_VARS_eNB_s { ...@@ -709,7 +709,7 @@ typedef struct PHY_VARS_eNB_s {
NB_IoT_eNB_NULSCH_t *nulsch[NUMBER_OF_UE_MAX_NB_IoT+1]; //nulsch[0] contains the RAR NB_IoT_eNB_NULSCH_t *nulsch[NUMBER_OF_UE_MAX_NB_IoT+1]; //nulsch[0] contains the RAR
NB_IoT_eNB_NDLSCH_t *ndlsch_SI,*ndlsch_ra, *ndlsch_SIB1; NB_IoT_eNB_NDLSCH_t *ndlsch_SI,*ndlsch_ra, *ndlsch_SIB1;
NB_DL_FRAME_PARMS frame_parms_nb_iot; NB_IoT_DL_FRAME_PARMS frame_parms_nb_iot;
// DCI for at most 2 DCI pdus // DCI for at most 2 DCI pdus
DCI_PDU_NB *DCI_pdu; DCI_PDU_NB *DCI_pdu;
......
...@@ -265,7 +265,7 @@ typedef struct { ...@@ -265,7 +265,7 @@ typedef struct {
uint16_t eutra_NumCRS_ports; uint16_t eutra_NumCRS_ports;
} NB_DL_FRAME_PARMS; } NB_IoT_DL_FRAME_PARMS;
#endif #endif
...@@ -483,7 +483,7 @@ void NB_phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,UL_ ...@@ -483,7 +483,7 @@ void NB_phy_procedures_eNB_uespec_RX(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t *proc,UL_
void NB_generate_eNB_dlsch_params(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t * proc,nfapi_dl_config_request_pdu_t *dl_config_pdu) void NB_generate_eNB_dlsch_params(PHY_VARS_eNB *eNB,eNB_rxtx_proc_t * proc,nfapi_dl_config_request_pdu_t *dl_config_pdu)
{ {
int UE_id = -1; int UE_id = -1;
NB_DL_FRAME_PARMS *fp=&eNB->frame_parms_nb_iot; NB_IoT_DL_FRAME_PARMS *fp=&eNB->frame_parms_nb_iot;
int frame = proc->frame_tx; int frame = proc->frame_tx;
int subframe = proc->subframe_tx; int subframe = proc->subframe_tx;
DCI_CONTENT *DCI_Content; DCI_CONTENT *DCI_Content;
...@@ -678,7 +678,7 @@ void npdsch_procedures(PHY_VARS_eNB *eNB, ...@@ -678,7 +678,7 @@ void npdsch_procedures(PHY_VARS_eNB *eNB,
int subframe=proc->subframe_tx; int subframe=proc->subframe_tx;
NB_IoT_DL_eNB_HARQ_t *ndlsch_harq =ndlsch->harq_process; NB_IoT_DL_eNB_HARQ_t *ndlsch_harq =ndlsch->harq_process;
int input_buffer_length = ndlsch_harq->TBS/8; // get in byte //the TBS is set in generate_dlsch_param int input_buffer_length = ndlsch_harq->TBS/8; // get in byte //the TBS is set in generate_dlsch_param
NB_DL_FRAME_PARMS *fp=&eNB->frame_parms_nb_iot; NB_IoT_DL_FRAME_PARMS *fp=&eNB->frame_parms_nb_iot;
int G; int G;
uint8_t *DLSCH_pdu=NULL; uint8_t *DLSCH_pdu=NULL;
uint8_t DLSCH_pdu_tmp[input_buffer_length+4]; //[768*8]; uint8_t DLSCH_pdu_tmp[input_buffer_length+4]; //[768*8];
...@@ -941,7 +941,7 @@ void NB_phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, ...@@ -941,7 +941,7 @@ void NB_phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
int subframe = proc->subframe_tx; int subframe = proc->subframe_tx;
uint32_t i,aa; uint32_t i,aa;
DCI_PDU_NB *dci_pdu = eNB->DCI_pdu; DCI_PDU_NB *dci_pdu = eNB->DCI_pdu;
NB_DL_FRAME_PARMS *fp = &eNB->frame_parms_nb_iot; NB_IoT_DL_FRAME_PARMS *fp = &eNB->frame_parms_nb_iot;
int8_t UE_id = 0; int8_t UE_id = 0;
uint8_t ul_subframe; uint8_t ul_subframe;
uint32_t ul_frame; uint32_t ul_frame;
...@@ -1214,7 +1214,7 @@ void NB_phy_procedures_eNB_TX(PHY_VARS_eNB *eNB, ...@@ -1214,7 +1214,7 @@ void NB_phy_procedures_eNB_TX(PHY_VARS_eNB *eNB,
* The higher layer parms (Rmax): * The higher layer parms (Rmax):
* -npdcch-NumRepetitions (UE-specific) [inside the NPDCCH UE-specific strucuture] --> configured through phyconfigDedicated * -npdcch-NumRepetitions (UE-specific) [inside the NPDCCH UE-specific strucuture] --> configured through phyconfigDedicated
* -npdcch-NumRepetitionPaging (common) * -npdcch-NumRepetitionPaging (common)
* -npdcch-NumRepetitions-RA (common) [inside the NB_DL_FRAME_PARMS-> nprach_ParametersList] --> configured in phy_config_sib2 * -npdcch-NumRepetitions-RA (common) [inside the NB_IoT_DL_FRAME_PARMS-> nprach_ParametersList] --> configured in phy_config_sib2
* *
* PROBLEM: in FAPI specs seems there is no way to trasnmit Rmax to the PHY (waiting for answers) * PROBLEM: in FAPI specs seems there is no way to trasnmit Rmax to the PHY (waiting for answers)
* *
......
...@@ -664,7 +664,7 @@ uint8_t do_RRCConnectionSetup_NB( ...@@ -664,7 +664,7 @@ uint8_t do_RRCConnectionSetup_NB(
int CC_id, int CC_id,
uint8_t* const buffer, //Srb0.Tx_buffer.Payload uint8_t* const buffer, //Srb0.Tx_buffer.Payload
const uint8_t Transaction_id, const uint8_t Transaction_id,
const NB_DL_FRAME_PARMS* const frame_parms, // maybe not used const NB_IoT_DL_FRAME_PARMS* const frame_parms, // maybe not used
SRB_ToAddModList_NB_r13_t** SRB_configList_NB, //for both SRB1bis and SRB1 SRB_ToAddModList_NB_r13_t** SRB_configList_NB, //for both SRB1bis and SRB1
struct PhysicalConfigDedicated_NB_r13** physicalConfigDedicated_NB struct PhysicalConfigDedicated_NB_r13** physicalConfigDedicated_NB
) )
......
...@@ -509,7 +509,7 @@ rrc_eNB_generate_RRCConnectionSetup_NB( ...@@ -509,7 +509,7 @@ rrc_eNB_generate_RRCConnectionSetup_NB(
//XXX MP:warning due to function still not completed at PHY (get_lte_frame_parms) //XXX MP:warning due to function still not completed at PHY (get_lte_frame_parms)
//XXX this approach is gone most probably //XXX this approach is gone most probably
NB_DL_FRAME_PARMS *fp = mac_xface->get_lte_frame_parms(ctxt_pP->module_id,CC_id); NB_IoT_DL_FRAME_PARMS *fp = mac_xface->get_lte_frame_parms(ctxt_pP->module_id,CC_id);
T(T_ENB_RRC_CONNECTION_SETUP, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame), T(T_ENB_RRC_CONNECTION_SETUP, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->frame),
T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti)); T_INT(ctxt_pP->subframe), T_INT(ctxt_pP->rnti));
......
...@@ -169,7 +169,7 @@ int otg_enabled; ...@@ -169,7 +169,7 @@ int otg_enabled;
static LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]; static LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs];
//NB-IoT //NB-IoT
static NB_DL_FRAME_PARMS *frame_parms_nb_iot[MAX_NUM_CCs]; // this will be still inside the PHY_VARS of LTE static NB_IoT_DL_FRAME_PARMS *frame_parms_nb_iot[MAX_NUM_CCs]; // this will be still inside the PHY_VARS of LTE
eNB_func_t node_function[MAX_NUM_CCs]; eNB_func_t node_function[MAX_NUM_CCs];
eNB_timing_t node_timing[MAX_NUM_CCs]; eNB_timing_t node_timing[MAX_NUM_CCs];
...@@ -1259,13 +1259,13 @@ void A(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]) { ...@@ -1259,13 +1259,13 @@ void A(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]) {
} }
//NB_IoT------------------------------------------------- //NB_IoT-------------------------------------------------
void set_default_frame_parms_NB(NB_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]); void set_default_frame_parms_NB_IoT(NB_IoT_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]);
void set_default_frame_parms_NB(NB_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]) { void set_default_frame_parms_NB_IoT(NB_IoT_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]) {
int CC_id; int CC_id;
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) { for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
frame_parms[CC_id] = (NB_DL_FRAME_PARMS*) malloc(sizeof(NB_DL_FRAME_PARMS)); frame_parms[CC_id] = (NB_IoT_DL_FRAME_PARMS*) malloc(sizeof(NB_IoT_DL_FRAME_PARMS));
/* Set some default values that may be overwritten while reading options */ /* Set some default values that may be overwritten while reading options */
//XXX check if there are other parameters to be set //XXX check if there are other parameters to be set
...@@ -1443,7 +1443,7 @@ int main( int argc, char **argv ) { ...@@ -1443,7 +1443,7 @@ int main( int argc, char **argv ) {
// set default parameters // set default parameters
set_default_frame_parms(frame_parms); set_default_frame_parms(frame_parms);
#ifdef NB_IOT #ifdef NB_IOT
set_default_frame_parms_NB(frame_parms_nb_iot); set_default_frame_parms_NB_IoT(frame_parms_nb_iot);
#endif #endif
......
...@@ -156,7 +156,7 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms, ...@@ -156,7 +156,7 @@ PHY_VARS_eNB* init_lte_eNB(LTE_DL_FRAME_PARMS *frame_parms,
void init_lte_eNB_NB( void init_lte_eNB_NB(
PHY_VARS_eNB *PHY_vars_eNB, PHY_VARS_eNB *PHY_vars_eNB,
NB_DL_FRAME_PARMS *frame_parms, NB_IoT_DL_FRAME_PARMS *frame_parms,
uint8_t eNB_id, uint8_t eNB_id,
uint8_t Nid_cell, uint8_t Nid_cell,
eNB_func_t node_function, eNB_func_t node_function,
...@@ -168,7 +168,7 @@ void init_lte_eNB_NB( ...@@ -168,7 +168,7 @@ void init_lte_eNB_NB(
memset(PHY_vars_eNB,0,sizeof(PHY_VARS_eNB)); memset(PHY_vars_eNB,0,sizeof(PHY_VARS_eNB));
PHY_vars_eNB->Mod_id=eNB_id; PHY_vars_eNB->Mod_id=eNB_id;
PHY_vars_eNB->cooperation_flag=0;//cooperation_flag; PHY_vars_eNB->cooperation_flag=0;//cooperation_flag;
memcpy(&(PHY_vars_eNB->frame_parms_nb_iot), frame_parms, sizeof(NB_DL_FRAME_PARMS)); memcpy(&(PHY_vars_eNB->frame_parms_nb_iot), frame_parms, sizeof(NB_IoT_DL_FRAME_PARMS));
PHY_vars_eNB->frame_parms_nb_iot.Nid_cell = ((Nid_cell/3)*3)+((eNB_id+Nid_cell)%3); //XXX NB_IoT ???? PHY_vars_eNB->frame_parms_nb_iot.Nid_cell = ((Nid_cell/3)*3)+((eNB_id+Nid_cell)%3); //XXX NB_IoT ????
PHY_vars_eNB->frame_parms_nb_iot.nushift = PHY_vars_eNB->frame_parms.Nid_cell%6; PHY_vars_eNB->frame_parms_nb_iot.nushift = PHY_vars_eNB->frame_parms.Nid_cell%6;
phy_init_lte_eNB(PHY_vars_eNB,0,abstraction_flag); phy_init_lte_eNB(PHY_vars_eNB,0,abstraction_flag);
......
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