mirror of https://github.com/PentHertz/srsLTE.git
gnb,ngap: Added some comments to ngap.cc to make it easier to navigate
the file. Re-ordered NGAP UE procedures have the same order as in the standard.
This commit is contained in:
parent
50ac1c6c0a
commit
bb9eaf4390
|
@ -26,11 +26,11 @@ public:
|
|||
virtual int ue_set_security_cfg_capabilities(uint16_t rnti, const asn1::ngap::ue_security_cap_s& caps) = 0;
|
||||
virtual int start_security_mode_procedure(uint16_t rnti, srsran::unique_byte_buffer_t nas_pdu) = 0;
|
||||
virtual int
|
||||
establish_rrc_bearer(uint16_t rnti, uint16_t pdu_session_id, srsran::const_byte_span nas_pdu, uint32_t lcid) = 0;
|
||||
virtual int allocate_lcid(uint16_t rnti) = 0;
|
||||
virtual int release_bearers(uint16_t rnti) = 0;
|
||||
virtual void release_user(uint16_t rnti) = 0;
|
||||
virtual void write_dl_info(uint16_t rnti, srsran::unique_byte_buffer_t sdu) = 0;
|
||||
establish_rrc_bearer(uint16_t rnti, uint16_t pdu_session_id, srsran::const_byte_span nas_pdu, uint32_t lcid) = 0;
|
||||
virtual int allocate_lcid(uint16_t rnti) = 0;
|
||||
virtual int release_bearers(uint16_t rnti) = 0;
|
||||
virtual void release_user(uint16_t rnti) = 0;
|
||||
virtual void write_dl_info(uint16_t rnti, srsran::unique_byte_buffer_t sdu) = 0;
|
||||
};
|
||||
|
||||
} // namespace srsenb
|
||||
|
|
|
@ -28,8 +28,33 @@
|
|||
|
||||
namespace srsenb {
|
||||
|
||||
// TS 38.413 - Section 8.3 - UE Context Management Procedures
|
||||
/*
|
||||
* TS 38.413 - Section 8.2 - PDU Session Management Procedures
|
||||
*/
|
||||
// TS 38.413 - Section 8.2.1 PDU Session Resource Setup
|
||||
class ngap_ue_pdu_session_res_setup_proc
|
||||
{
|
||||
public:
|
||||
explicit ngap_ue_pdu_session_res_setup_proc(ngap_interface_ngap_proc* parent_,
|
||||
rrc_interface_ngap_nr* rrc_,
|
||||
ngap_ue_ctxt_t* ue_ctxt,
|
||||
ngap_ue_bearer_manager* bearer_manager,
|
||||
srslog::basic_logger& logger_);
|
||||
srsran::proc_outcome_t init(const asn1::ngap::pdu_session_res_setup_request_s& msg);
|
||||
srsran::proc_outcome_t step();
|
||||
static const char* name() { return "UE PDU Session Resource Setup"; }
|
||||
|
||||
private:
|
||||
ngap_ue_ctxt_t* ue_ctxt;
|
||||
ngap_interface_ngap_proc* parent;
|
||||
ngap_ue_bearer_manager* bearer_manager;
|
||||
rrc_interface_ngap_nr* rrc = nullptr;
|
||||
srslog::basic_logger& logger;
|
||||
};
|
||||
|
||||
/*
|
||||
* TS 38.413 - Section 8.3 - UE Context Management Procedures
|
||||
*/
|
||||
// TS 38.413 - Section 8.3.1 - Initial Context Setup
|
||||
class ngap_ue_initial_context_setup_proc
|
||||
{
|
||||
|
@ -71,39 +96,6 @@ private:
|
|||
srslog::basic_logger& logger;
|
||||
};
|
||||
|
||||
// TS 38.413 - Section 8.3.4 - UE Context Modification
|
||||
class ngap_ue_ue_context_modification_proc
|
||||
{
|
||||
public:
|
||||
explicit ngap_ue_ue_context_modification_proc(ngap_interface_ngap_proc* parent_, srslog::basic_logger& logger_);
|
||||
srsran::proc_outcome_t init();
|
||||
srsran::proc_outcome_t step();
|
||||
static const char* name() { return "UE Context Modification"; }
|
||||
|
||||
private:
|
||||
ngap_interface_ngap_proc* parent;
|
||||
};
|
||||
|
||||
class ngap_ue_pdu_session_res_setup_proc
|
||||
{
|
||||
public:
|
||||
explicit ngap_ue_pdu_session_res_setup_proc(ngap_interface_ngap_proc* parent_,
|
||||
rrc_interface_ngap_nr* rrc_,
|
||||
ngap_ue_ctxt_t* ue_ctxt,
|
||||
ngap_ue_bearer_manager* bearer_manager,
|
||||
srslog::basic_logger& logger_);
|
||||
srsran::proc_outcome_t init(const asn1::ngap::pdu_session_res_setup_request_s& msg);
|
||||
srsran::proc_outcome_t step();
|
||||
static const char* name() { return "UE PDU Session Resource Setup"; }
|
||||
|
||||
private:
|
||||
ngap_ue_ctxt_t* ue_ctxt;
|
||||
ngap_interface_ngap_proc* parent;
|
||||
ngap_ue_bearer_manager* bearer_manager;
|
||||
rrc_interface_ngap_nr* rrc = nullptr;
|
||||
srslog::basic_logger& logger;
|
||||
};
|
||||
|
||||
} // namespace srsenb
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -16,82 +16,9 @@ using namespace srsran;
|
|||
|
||||
namespace srsenb {
|
||||
|
||||
ngap_ue_initial_context_setup_proc::ngap_ue_initial_context_setup_proc(ngap_interface_ngap_proc* parent_,
|
||||
rrc_interface_ngap_nr* rrc_,
|
||||
ngap_ue_ctxt_t* ue_ctxt_,
|
||||
srslog::basic_logger& logger_) :
|
||||
logger(logger_), parent(parent_), rrc(rrc_), ue_ctxt(ue_ctxt_){};
|
||||
|
||||
proc_outcome_t ngap_ue_initial_context_setup_proc::init(const asn1::ngap::init_context_setup_request_s& msg)
|
||||
{
|
||||
ue_ctxt->amf_pointer = msg->guami.value.amf_pointer.to_number();
|
||||
ue_ctxt->amf_set_id = msg->guami.value.amf_set_id.to_number();
|
||||
ue_ctxt->amf_region_id = msg->guami.value.amf_region_id.to_number();
|
||||
|
||||
if (msg->ue_aggregate_maximum_bit_rate_present == true) {
|
||||
rrc->ue_set_bitrates(ue_ctxt->rnti, msg->ue_aggregate_maximum_bit_rate.value);
|
||||
}
|
||||
rrc->ue_set_security_cfg_capabilities(ue_ctxt->rnti, msg->ue_security_cap.value);
|
||||
rrc->ue_set_security_cfg_key(ue_ctxt->rnti, msg->security_key.value);
|
||||
|
||||
if (msg->nas_pdu_present) {
|
||||
srsran::unique_byte_buffer_t pdu = srsran::make_byte_buffer();
|
||||
if (pdu == nullptr) {
|
||||
logger.error("Fatal Error: Couldn't allocate buffer in %s.", __FUNCTION__);
|
||||
return proc_outcome_t::error;
|
||||
}
|
||||
memcpy(pdu->msg, msg->nas_pdu.value.data(), msg->nas_pdu.value.size());
|
||||
pdu->N_bytes = msg->nas_pdu.value.size();
|
||||
rrc->start_security_mode_procedure(ue_ctxt->rnti, std::move(pdu));
|
||||
} else {
|
||||
rrc->start_security_mode_procedure(ue_ctxt->rnti, nullptr);
|
||||
}
|
||||
|
||||
return proc_outcome_t::yield;
|
||||
};
|
||||
|
||||
proc_outcome_t ngap_ue_initial_context_setup_proc::react(bool rrc_reconf_outcome)
|
||||
{
|
||||
if (rrc_reconf_outcome == true) {
|
||||
parent->send_initial_ctxt_setup_response();
|
||||
return proc_outcome_t::success;
|
||||
}
|
||||
|
||||
return proc_outcome_t::error;
|
||||
}
|
||||
|
||||
proc_outcome_t ngap_ue_initial_context_setup_proc::step()
|
||||
{
|
||||
return proc_outcome_t::yield;
|
||||
}
|
||||
|
||||
ngap_ue_ue_context_release_proc::ngap_ue_ue_context_release_proc(ngap_interface_ngap_proc* parent_,
|
||||
rrc_interface_ngap_nr* rrc_,
|
||||
ngap_ue_ctxt_t* ue_ctxt_,
|
||||
ngap_ue_bearer_manager* bearer_manager_,
|
||||
srslog::basic_logger& logger_) :
|
||||
logger(logger_)
|
||||
{
|
||||
parent = parent_;
|
||||
rrc = rrc_;
|
||||
ue_ctxt = ue_ctxt_;
|
||||
bearer_manager = bearer_manager_;
|
||||
};
|
||||
|
||||
proc_outcome_t ngap_ue_ue_context_release_proc::init(const asn1::ngap::ue_context_release_cmd_s& msg)
|
||||
{
|
||||
logger.info("Started %s", name());
|
||||
bearer_manager->reset_pdu_sessions(ue_ctxt->rnti);
|
||||
rrc->release_user(ue_ctxt->rnti);
|
||||
parent->send_ue_ctxt_release_complete();
|
||||
return proc_outcome_t::success;
|
||||
}
|
||||
|
||||
proc_outcome_t ngap_ue_ue_context_release_proc::step()
|
||||
{
|
||||
return proc_outcome_t::success;
|
||||
}
|
||||
|
||||
/*
|
||||
* TS 38.413 - Section 8.2.1 PDU Session Resource Setup
|
||||
*/
|
||||
ngap_ue_pdu_session_res_setup_proc::ngap_ue_pdu_session_res_setup_proc(ngap_interface_ngap_proc* parent_,
|
||||
rrc_interface_ngap_nr* rrc_,
|
||||
ngap_ue_ctxt_t* ue_ctxt_,
|
||||
|
@ -182,4 +109,86 @@ proc_outcome_t ngap_ue_pdu_session_res_setup_proc::step()
|
|||
return proc_outcome_t::success;
|
||||
}
|
||||
|
||||
/*
|
||||
* TS 38.413 - Section 8.3.1 - Initial Context Setup
|
||||
*/
|
||||
ngap_ue_initial_context_setup_proc::ngap_ue_initial_context_setup_proc(ngap_interface_ngap_proc* parent_,
|
||||
rrc_interface_ngap_nr* rrc_,
|
||||
ngap_ue_ctxt_t* ue_ctxt_,
|
||||
srslog::basic_logger& logger_) :
|
||||
logger(logger_), parent(parent_), rrc(rrc_), ue_ctxt(ue_ctxt_){};
|
||||
|
||||
proc_outcome_t ngap_ue_initial_context_setup_proc::init(const asn1::ngap::init_context_setup_request_s& msg)
|
||||
{
|
||||
ue_ctxt->amf_pointer = msg->guami.value.amf_pointer.to_number();
|
||||
ue_ctxt->amf_set_id = msg->guami.value.amf_set_id.to_number();
|
||||
ue_ctxt->amf_region_id = msg->guami.value.amf_region_id.to_number();
|
||||
|
||||
if (msg->ue_aggregate_maximum_bit_rate_present == true) {
|
||||
rrc->ue_set_bitrates(ue_ctxt->rnti, msg->ue_aggregate_maximum_bit_rate.value);
|
||||
}
|
||||
rrc->ue_set_security_cfg_capabilities(ue_ctxt->rnti, msg->ue_security_cap.value);
|
||||
rrc->ue_set_security_cfg_key(ue_ctxt->rnti, msg->security_key.value);
|
||||
|
||||
if (msg->nas_pdu_present) {
|
||||
srsran::unique_byte_buffer_t pdu = srsran::make_byte_buffer();
|
||||
if (pdu == nullptr) {
|
||||
logger.error("Fatal Error: Couldn't allocate buffer in %s.", __FUNCTION__);
|
||||
return proc_outcome_t::error;
|
||||
}
|
||||
memcpy(pdu->msg, msg->nas_pdu.value.data(), msg->nas_pdu.value.size());
|
||||
pdu->N_bytes = msg->nas_pdu.value.size();
|
||||
rrc->start_security_mode_procedure(ue_ctxt->rnti, std::move(pdu));
|
||||
} else {
|
||||
rrc->start_security_mode_procedure(ue_ctxt->rnti, nullptr);
|
||||
}
|
||||
|
||||
return proc_outcome_t::yield;
|
||||
};
|
||||
|
||||
proc_outcome_t ngap_ue_initial_context_setup_proc::react(bool rrc_reconf_outcome)
|
||||
{
|
||||
if (rrc_reconf_outcome == true) {
|
||||
parent->send_initial_ctxt_setup_response();
|
||||
return proc_outcome_t::success;
|
||||
}
|
||||
|
||||
return proc_outcome_t::error;
|
||||
}
|
||||
|
||||
proc_outcome_t ngap_ue_initial_context_setup_proc::step()
|
||||
{
|
||||
return proc_outcome_t::yield;
|
||||
}
|
||||
|
||||
/*
|
||||
* TS 38.413 - Section 8.3.2 - UE Context Release Request (NG-RAN node initiated)
|
||||
*/
|
||||
ngap_ue_ue_context_release_proc::ngap_ue_ue_context_release_proc(ngap_interface_ngap_proc* parent_,
|
||||
rrc_interface_ngap_nr* rrc_,
|
||||
ngap_ue_ctxt_t* ue_ctxt_,
|
||||
ngap_ue_bearer_manager* bearer_manager_,
|
||||
srslog::basic_logger& logger_) :
|
||||
logger(logger_)
|
||||
{
|
||||
parent = parent_;
|
||||
rrc = rrc_;
|
||||
ue_ctxt = ue_ctxt_;
|
||||
bearer_manager = bearer_manager_;
|
||||
};
|
||||
|
||||
proc_outcome_t ngap_ue_ue_context_release_proc::init(const asn1::ngap::ue_context_release_cmd_s& msg)
|
||||
{
|
||||
logger.info("Started %s", name());
|
||||
bearer_manager->reset_pdu_sessions(ue_ctxt->rnti);
|
||||
rrc->release_user(ue_ctxt->rnti);
|
||||
parent->send_ue_ctxt_release_complete();
|
||||
return proc_outcome_t::success;
|
||||
}
|
||||
|
||||
proc_outcome_t ngap_ue_ue_context_release_proc::step()
|
||||
{
|
||||
return proc_outcome_t::success;
|
||||
}
|
||||
|
||||
} // namespace srsenb
|
||||
|
|
|
@ -100,7 +100,7 @@ void test_rrc_nr_connection_establishment(srsran::task_scheduler& task_sched,
|
|||
complete_ies.guami_type.value = rrc_setup_complete_ies_s::guami_type_opts::native;
|
||||
std::string NAS_msg_str = "7E01280E534C337E004109000BF200F110800101347B80802E02F07071002D7E004109000BF200F11080010134"
|
||||
"7B80801001002E02F0702F0201015200F11000006418010174000090530101";
|
||||
auto& ded_nas_msg = complete_ies.ded_nas_msg.from_string(NAS_msg_str);
|
||||
auto& ded_nas_msg = complete_ies.ded_nas_msg.from_string(NAS_msg_str);
|
||||
|
||||
{
|
||||
pdu = srsran::make_byte_buffer();
|
||||
|
|
Loading…
Reference in New Issue