mirror of https://github.com/PentHertz/srsLTE.git
Merge branch 'lcid_change' into next
This commit is contained in:
commit
352ea36246
|
@ -61,6 +61,7 @@ public:
|
||||||
void add_bearer(uint32_t lcid, srslte_pdcp_config_t cnfg = srslte_pdcp_config_t());
|
void add_bearer(uint32_t lcid, srslte_pdcp_config_t cnfg = srslte_pdcp_config_t());
|
||||||
void add_bearer_mrb(uint32_t lcid, srslte_pdcp_config_t cnfg = srslte_pdcp_config_t());
|
void add_bearer_mrb(uint32_t lcid, srslte_pdcp_config_t cnfg = srslte_pdcp_config_t());
|
||||||
void del_bearer(uint32_t lcid);
|
void del_bearer(uint32_t lcid);
|
||||||
|
void change_lcid(uint32_t old_lcid, uint32_t new_lcid);
|
||||||
void config_security(uint32_t lcid,
|
void config_security(uint32_t lcid,
|
||||||
uint8_t *k_enc,
|
uint8_t *k_enc,
|
||||||
uint8_t *k_int,
|
uint8_t *k_int,
|
||||||
|
|
|
@ -87,6 +87,7 @@ public:
|
||||||
void add_bearer(uint32_t lcid, srslte_rlc_config_t cnfg);
|
void add_bearer(uint32_t lcid, srslte_rlc_config_t cnfg);
|
||||||
void add_bearer_mrb(uint32_t lcid);
|
void add_bearer_mrb(uint32_t lcid);
|
||||||
void del_bearer(uint32_t lcid);
|
void del_bearer(uint32_t lcid);
|
||||||
|
void change_lcid(uint32_t old_lcid, uint32_t new_lcid);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void reset_metrics();
|
void reset_metrics();
|
||||||
|
|
|
@ -187,6 +187,28 @@ void pdcp::del_bearer(uint32_t lcid)
|
||||||
pthread_rwlock_unlock(&rwlock);
|
pthread_rwlock_unlock(&rwlock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void pdcp::change_lcid(uint32_t old_lcid, uint32_t new_lcid)
|
||||||
|
{
|
||||||
|
pthread_rwlock_wrlock(&rwlock);
|
||||||
|
|
||||||
|
// make sure old LCID exists and new LCID is still free
|
||||||
|
if (valid_lcid(old_lcid) && not valid_lcid(new_lcid)) {
|
||||||
|
// insert old PDCP entity into new LCID
|
||||||
|
pdcp_map_t::iterator it = pdcp_array.find(old_lcid);
|
||||||
|
pdcp_entity_interface *pdcp_entity = it->second;
|
||||||
|
if (not pdcp_array.insert(pdcp_map_pair_t(new_lcid, pdcp_entity)).second) {
|
||||||
|
pdcp_log->error("Error inserting PDCP entity into array\n.");
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
// erase from old position
|
||||||
|
pdcp_array.erase(it);
|
||||||
|
pdcp_log->warning("Changed LCID of PDCP bearer from %d to %d\n", old_lcid, new_lcid);
|
||||||
|
} else {
|
||||||
|
pdcp_log->error("Can't change PDCP of bearer %s from %d to %d. Bearer doesn't exist or new LCID already occupied.\n", rrc->get_rb_name(old_lcid).c_str(), old_lcid, new_lcid);
|
||||||
|
}
|
||||||
|
exit:
|
||||||
|
pthread_rwlock_unlock(&rwlock);
|
||||||
|
}
|
||||||
|
|
||||||
void pdcp::config_security(uint32_t lcid,
|
void pdcp::config_security(uint32_t lcid,
|
||||||
uint8_t *k_enc,
|
uint8_t *k_enc,
|
||||||
|
|
|
@ -505,13 +505,37 @@ void rlc::del_bearer(uint32_t lcid)
|
||||||
rlc_array.erase(it);
|
rlc_array.erase(it);
|
||||||
rlc_log->warning("Deleted RLC bearer %s\n", rrc->get_rb_name(lcid).c_str());
|
rlc_log->warning("Deleted RLC bearer %s\n", rrc->get_rb_name(lcid).c_str());
|
||||||
} else {
|
} else {
|
||||||
rlc_log->warning("Can't delete bearer %s. Bearer doesn't exist.\n", rrc->get_rb_name(lcid).c_str());
|
rlc_log->error("Can't delete bearer %s. Bearer doesn't exist.\n", rrc->get_rb_name(lcid).c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_rwlock_unlock(&rwlock);
|
pthread_rwlock_unlock(&rwlock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void rlc::change_lcid(uint32_t old_lcid, uint32_t new_lcid)
|
||||||
|
{
|
||||||
|
pthread_rwlock_wrlock(&rwlock);
|
||||||
|
|
||||||
|
// make sure old LCID exists and new LCID is still free
|
||||||
|
if (valid_lcid(old_lcid) && not valid_lcid(new_lcid)) {
|
||||||
|
// insert old rlc entity into new LCID
|
||||||
|
rlc_map_t::iterator it = rlc_array.find(old_lcid);
|
||||||
|
rlc_common *rlc_entity = it->second;
|
||||||
|
if (not rlc_array.insert(rlc_map_pair_t(new_lcid, rlc_entity)).second) {
|
||||||
|
rlc_log->error("Error inserting RLC entity into array\n.");
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
// erase from old position
|
||||||
|
rlc_array.erase(it);
|
||||||
|
rlc_log->warning("Changed LCID of RLC bearer from %d to %d\n", old_lcid, new_lcid);
|
||||||
|
} else {
|
||||||
|
rlc_log->error("Can't change LCID of bearer %s from %d to %d. Bearer doesn't exist or new LCID already occupied.\n", rrc->get_rb_name(old_lcid).c_str(), old_lcid, new_lcid);
|
||||||
|
}
|
||||||
|
exit:
|
||||||
|
pthread_rwlock_unlock(&rwlock);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
Helpers (Lock must be hold when calling those)
|
Helpers (Lock must be hold when calling those)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
Loading…
Reference in New Issue