From 3620308940271c5a3beb0b37257bdd61dc8f9c67 Mon Sep 17 00:00:00 2001 From: Pedro Alvarez Date: Fri, 10 Dec 2021 11:53:02 +0000 Subject: [PATCH] lib,pdcp_nr: added options to select re-ordering timer --- .../srsran/interfaces/pdcp_interface_types.h | 75 ++++++------ lib/src/asn1/rrc_nr_utils.cc | 113 +++++++++++++++++- lib/src/pdcp/pdcp_entity_nr.cc | 6 + srsgnb/src/stack/rrc/rrc_nr_ue.cc | 12 +- 4 files changed, 159 insertions(+), 47 deletions(-) diff --git a/lib/include/srsran/interfaces/pdcp_interface_types.h b/lib/include/srsran/interfaces/pdcp_interface_types.h index 6507e14ba..01e483bf5 100644 --- a/lib/include/srsran/interfaces/pdcp_interface_types.h +++ b/lib/include/srsran/interfaces/pdcp_interface_types.h @@ -58,42 +58,43 @@ static const char* pdcp_pdu_type_text[PDCP_PDU_TYPE_N_ITEMS] = {"PDCP Report PDU // Taken from PDCP-Config (TS 38.331 version 15.2.1) enum class pdcp_t_reordering_t { - ms0 = 0, - ms1 = 1, - ms2 = 2, - ms4 = 4, - ms5 = 5, - ms8 = 8, - ms10 = 10, - ms15 = 15, - ms20 = 20, - ms30 = 30, - ms40 = 40, - ms50 = 50, - ms60 = 60, - ms80 = 80, - ms100 = 100, - ms120 = 120, - ms140 = 140, - ms160 = 160, - ms180 = 180, - ms200 = 200, - ms220 = 220, - ms240 = 240, - ms260 = 260, - ms280 = 280, - ms300 = 300, - ms500 = 500, - ms750 = 750, - ms1000 = 1000, - ms1250 = 1250, - ms1500 = 1500, - ms1750 = 1750, - ms2000 = 2000, - ms2250 = 2250, - ms2500 = 2500, - ms2750 = 2750, - ms3000 = 3000 + ms0 = 0, + ms1 = 1, + ms2 = 2, + ms4 = 4, + ms5 = 5, + ms8 = 8, + ms10 = 10, + ms15 = 15, + ms20 = 20, + ms30 = 30, + ms40 = 40, + ms50 = 50, + ms60 = 60, + ms80 = 80, + ms100 = 100, + ms120 = 120, + ms140 = 140, + ms160 = 160, + ms180 = 180, + ms200 = 200, + ms220 = 220, + ms240 = 240, + ms260 = 260, + ms280 = 280, + ms300 = 300, + ms500 = 500, + ms750 = 750, + ms1000 = 1000, + ms1250 = 1250, + ms1500 = 1500, + ms1750 = 1750, + ms2000 = 2000, + ms2250 = 2250, + ms2500 = 2500, + ms2750 = 2750, + ms3000 = 3000, + infinity = -1 }; // Taken from PDCP-Config (TS 38.331 version 15.2.1) @@ -113,7 +114,7 @@ enum class pdcp_discard_timer_t { ms500 = 500, ms750 = 750, ms1500 = 1500, - infinity = 0 + infinity = -1 }; class pdcp_config_t diff --git a/lib/src/asn1/rrc_nr_utils.cc b/lib/src/asn1/rrc_nr_utils.cc index 050004088..62c23adaa 100644 --- a/lib/src/asn1/rrc_nr_utils.cc +++ b/lib/src/asn1/rrc_nr_utils.cc @@ -236,14 +236,119 @@ srsran::pdcp_config_t make_drb_pdcp_config_t(const uint8_t bearer_id, bool is_ue } } - pdcp_t_reordering_t t_reordering = pdcp_t_reordering_t::ms500; + pdcp_t_reordering_t t_reordering = pdcp_t_reordering_t::infinity; if (pdcp_cfg.t_reordering_present) { switch (pdcp_cfg.t_reordering.to_number()) { case 0: t_reordering = pdcp_t_reordering_t::ms0; break; - default: + case 1: + t_reordering = pdcp_t_reordering_t::ms1; + break; + case 2: + t_reordering = pdcp_t_reordering_t::ms2; + break; + case 4: + t_reordering = pdcp_t_reordering_t::ms4; + break; + case 5: + t_reordering = pdcp_t_reordering_t::ms5; + break; + case 8: + t_reordering = pdcp_t_reordering_t::ms8; + break; + case 10: + t_reordering = pdcp_t_reordering_t::ms10; + break; + case 15: + t_reordering = pdcp_t_reordering_t::ms15; + break; + case 20: + t_reordering = pdcp_t_reordering_t::ms20; + break; + case 30: + t_reordering = pdcp_t_reordering_t::ms30; + break; + case 40: + t_reordering = pdcp_t_reordering_t::ms40; + break; + case 50: + t_reordering = pdcp_t_reordering_t::ms50; + break; + case 60: + t_reordering = pdcp_t_reordering_t::ms60; + break; + case 80: + t_reordering = pdcp_t_reordering_t::ms80; + break; + case 100: + t_reordering = pdcp_t_reordering_t::ms100; + break; + case 120: + t_reordering = pdcp_t_reordering_t::ms120; + break; + case 140: + t_reordering = pdcp_t_reordering_t::ms140; + break; + case 160: + t_reordering = pdcp_t_reordering_t::ms160; + break; + case 180: + t_reordering = pdcp_t_reordering_t::ms180; + break; + case 200: + t_reordering = pdcp_t_reordering_t::ms200; + break; + case 220: + t_reordering = pdcp_t_reordering_t::ms220; + break; + case 240: + t_reordering = pdcp_t_reordering_t::ms240; + break; + case 260: + t_reordering = pdcp_t_reordering_t::ms260; + break; + case 280: + t_reordering = pdcp_t_reordering_t::ms280; + break; + case 300: + t_reordering = pdcp_t_reordering_t::ms300; + break; + case 500: t_reordering = pdcp_t_reordering_t::ms500; + break; + case 750: + t_reordering = pdcp_t_reordering_t::ms750; + break; + case 1000: + t_reordering = pdcp_t_reordering_t::ms1000; + break; + case 1250: + t_reordering = pdcp_t_reordering_t::ms1250; + break; + case 1500: + t_reordering = pdcp_t_reordering_t::ms1500; + break; + case 1750: + t_reordering = pdcp_t_reordering_t::ms1750; + break; + case 2000: + t_reordering = pdcp_t_reordering_t::ms2000; + break; + case 2250: + t_reordering = pdcp_t_reordering_t::ms2250; + break; + case 2500: + t_reordering = pdcp_t_reordering_t::ms2500; + break; + case 2750: + t_reordering = pdcp_t_reordering_t::ms2750; + break; + case 3000: + t_reordering = pdcp_t_reordering_t::ms3000; + break; + default: + t_reordering = pdcp_t_reordering_t::ms50; } } @@ -1148,7 +1253,7 @@ bool make_phy_zp_csi_rs_resource(const asn1::rrc_nr::zp_csi_rs_res_s& zp_csi_rs_ srsran_csi_rs_zp_resource_t* out_zp_csi_rs_resource) { srsran_csi_rs_zp_resource_t zp_csi_rs_resource = {}; - zp_csi_rs_resource.id = zp_csi_rs_res.zp_csi_rs_res_id; + zp_csi_rs_resource.id = zp_csi_rs_res.zp_csi_rs_res_id; switch (zp_csi_rs_res.res_map.freq_domain_alloc.type()) { case csi_rs_res_map_s::freq_domain_alloc_c_::types_opts::options::row1: zp_csi_rs_resource.resource_mapping.row = srsran_csi_rs_resource_mapping_row_1; @@ -1313,7 +1418,7 @@ bool make_phy_nzp_csi_rs_resource(const asn1::rrc_nr::nzp_csi_rs_res_s& asn1_nzp srsran_csi_rs_nzp_resource_t* out_csi_rs_nzp_resource) { srsran_csi_rs_nzp_resource_t csi_rs_nzp_resource = {}; - csi_rs_nzp_resource.id = asn1_nzp_csi_rs_res.nzp_csi_rs_res_id; + csi_rs_nzp_resource.id = asn1_nzp_csi_rs_res.nzp_csi_rs_res_id; switch (asn1_nzp_csi_rs_res.res_map.freq_domain_alloc.type()) { case csi_rs_res_map_s::freq_domain_alloc_c_::types_opts::options::row1: csi_rs_nzp_resource.resource_mapping.row = srsran_csi_rs_resource_mapping_row_1; diff --git a/lib/src/pdcp/pdcp_entity_nr.cc b/lib/src/pdcp/pdcp_entity_nr.cc index f447816c9..e38cf6de5 100644 --- a/lib/src/pdcp/pdcp_entity_nr.cc +++ b/lib/src/pdcp/pdcp_entity_nr.cc @@ -64,6 +64,12 @@ bool pdcp_entity_nr::configure(const pdcp_config_t& cnfg_) reordering_timer.set(static_cast(cfg.t_reordering), *reordering_fnc); } active = true; + logger.info("%s PDCP-NR entity configured. SN_LEN=%d, Discard timer %d, Re-ordering timer %d, RAT=%s", + rb_name, + cfg.sn_len, + cfg.discard_timer, + cfg.t_reordering, + to_string(cfg.rat)); return true; } diff --git a/srsgnb/src/stack/rrc/rrc_nr_ue.cc b/srsgnb/src/stack/rrc/rrc_nr_ue.cc index cebf25ca3..09e93d1de 100644 --- a/srsgnb/src/stack/rrc/rrc_nr_ue.cc +++ b/srsgnb/src/stack/rrc/rrc_nr_ue.cc @@ -775,12 +775,12 @@ int rrc_nr::ue::add_drb(uint32_t five_qi) radio_bearer_cfg_pack.drb_to_add_mod_list.resize(1); // configure fixed DRB1 - auto& drb_item = radio_bearer_cfg_pack.drb_to_add_mod_list[0]; - drb_item.drb_id = 1; - drb_item.cn_assoc_present = true; - drb_item.cn_assoc.set_eps_bearer_id() = 5; - drb_item.pdcp_cfg_present = true; - drb_item.pdcp_cfg = parent->cfg.five_qi_cfg[five_qi].pdcp_cfg; + auto& drb_item = radio_bearer_cfg_pack.drb_to_add_mod_list[0]; + drb_item.drb_id = 1; + drb_item.cn_assoc_present = true; + drb_item.cn_assoc.set_eps_bearer_id() = 5; + drb_item.pdcp_cfg_present = true; + drb_item.pdcp_cfg = parent->cfg.five_qi_cfg[five_qi].pdcp_cfg; // Add DRB1 to PDCP srsran::pdcp_config_t pdcp_cnfg = srsran::make_drb_pdcp_config_t(drb_item.drb_id, false, drb_item.pdcp_cfg);