mirror of https://github.com/PentHertz/srsLTE.git
ue,nas_5g: Add get_k_amf() helper function and security context flag
This commit is contained in:
parent
44a00feccb
commit
a8eaf1cdd8
|
@ -59,6 +59,7 @@ class nas_5g_interface_rrc_nr
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual int write_pdu(srsran::unique_byte_buffer_t pdu) = 0;
|
virtual int write_pdu(srsran::unique_byte_buffer_t pdu) = 0;
|
||||||
|
virtual int get_k_amf(srsran::as_key_t& k_amf) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class nas_5g_interface_procedures
|
class nas_5g_interface_procedures
|
||||||
|
|
|
@ -58,6 +58,7 @@ public:
|
||||||
|
|
||||||
// Stack+RRC interface
|
// Stack+RRC interface
|
||||||
bool is_registered();
|
bool is_registered();
|
||||||
|
int get_k_amf(srsran::as_key_t& k_amf);
|
||||||
|
|
||||||
int write_pdu(srsran::unique_byte_buffer_t pdu);
|
int write_pdu(srsran::unique_byte_buffer_t pdu);
|
||||||
|
|
||||||
|
@ -79,8 +80,8 @@ private:
|
||||||
usim_interface_nas* usim = nullptr;
|
usim_interface_nas* usim = nullptr;
|
||||||
gw_interface_nas* gw = nullptr;
|
gw_interface_nas* gw = nullptr;
|
||||||
|
|
||||||
bool running = false;
|
bool running = false;
|
||||||
|
bool has_sec_ctxt = false;
|
||||||
bool initial_sec_command = false;
|
bool initial_sec_command = false;
|
||||||
srsran::nas_5g::mobile_identity_5gs_t::guti_5g_s guti_5g;
|
srsran::nas_5g::mobile_identity_5gs_t::guti_5g_s guti_5g;
|
||||||
|
|
||||||
|
|
|
@ -110,6 +110,7 @@ class dummy_eutra : public rrc_eutra_interface_rrc_nr
|
||||||
class dummy_nas : public nas_5g_interface_rrc_nr
|
class dummy_nas : public nas_5g_interface_rrc_nr
|
||||||
{
|
{
|
||||||
int write_pdu(srsran::unique_byte_buffer_t pdu) { return SRSRAN_SUCCESS; };
|
int write_pdu(srsran::unique_byte_buffer_t pdu) { return SRSRAN_SUCCESS; };
|
||||||
|
int get_k_amf(srsran::as_key_t& k_amf) { return SRSRAN_SUCCESS; };
|
||||||
};
|
};
|
||||||
|
|
||||||
class dummy_sim : public usim_interface_rrc_nr
|
class dummy_sim : public usim_interface_rrc_nr
|
||||||
|
|
|
@ -453,6 +453,7 @@ int nas_5g::send_security_mode_complete(const srsran::nas_5g::security_mode_comm
|
||||||
pcap->write_nas(pdu.get()->msg, pdu.get()->N_bytes);
|
pcap->write_nas(pdu.get()->msg, pdu.get()->N_bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
has_sec_ctxt = true;
|
||||||
logger.info("Sending Security Mode Complete");
|
logger.info("Sending Security Mode Complete");
|
||||||
rrc_nr->write_sdu(std::move(pdu));
|
rrc_nr->write_sdu(std::move(pdu));
|
||||||
ctxt_base.tx_count++;
|
ctxt_base.tx_count++;
|
||||||
|
@ -798,6 +799,7 @@ int nas_5g::handle_registration_accept(registration_accept_t& registration_accep
|
||||||
int nas_5g::handle_registration_reject(registration_reject_t& registration_reject)
|
int nas_5g::handle_registration_reject(registration_reject_t& registration_reject)
|
||||||
{
|
{
|
||||||
logger.info("Handling Registration Reject");
|
logger.info("Handling Registration Reject");
|
||||||
|
has_sec_ctxt = false;
|
||||||
ctxt_base.rx_count++;
|
ctxt_base.rx_count++;
|
||||||
state.set_deregistered(mm5g_state_t::deregistered_substate_t::plmn_search);
|
state.set_deregistered(mm5g_state_t::deregistered_substate_t::plmn_search);
|
||||||
|
|
||||||
|
@ -888,6 +890,7 @@ int nas_5g::handle_authentication_request(authentication_request_t& authenticati
|
||||||
int nas_5g::handle_authentication_reject(srsran::nas_5g::authentication_reject_t& authentication_reject)
|
int nas_5g::handle_authentication_reject(srsran::nas_5g::authentication_reject_t& authentication_reject)
|
||||||
{
|
{
|
||||||
logger.info("Handling Authentication Reject");
|
logger.info("Handling Authentication Reject");
|
||||||
|
has_sec_ctxt = false;
|
||||||
ctxt_base.rx_count++;
|
ctxt_base.rx_count++;
|
||||||
state.set_deregistered(mm5g_state_t::deregistered_substate_t::plmn_search);
|
state.set_deregistered(mm5g_state_t::deregistered_substate_t::plmn_search);
|
||||||
return SRSRAN_SUCCESS;
|
return SRSRAN_SUCCESS;
|
||||||
|
@ -911,6 +914,7 @@ int nas_5g::handle_service_accept(srsran::nas_5g::service_accept_t& service_acce
|
||||||
int nas_5g::handle_service_reject(srsran::nas_5g::service_reject_t& service_reject)
|
int nas_5g::handle_service_reject(srsran::nas_5g::service_reject_t& service_reject)
|
||||||
{
|
{
|
||||||
logger.info("Handling Service Reject");
|
logger.info("Handling Service Reject");
|
||||||
|
has_sec_ctxt = false;
|
||||||
ctxt_base.rx_count++;
|
ctxt_base.rx_count++;
|
||||||
return SRSRAN_SUCCESS;
|
return SRSRAN_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -1106,6 +1110,17 @@ void nas_5g::get_metrics(nas_5g_metrics_t& metrics)
|
||||||
metrics.state = state.get_state();
|
metrics.state = state.get_state();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int nas_5g::get_k_amf(as_key_t& k_amf)
|
||||||
|
{
|
||||||
|
if (not has_sec_ctxt) {
|
||||||
|
logger.error("K_amf requested before a valid NAS security context was established");
|
||||||
|
return SRSRAN_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::copy(std::begin(ctxt_5g.k_amf), std::end(ctxt_5g.k_amf), k_amf.begin());
|
||||||
|
return SRSRAN_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Helpers
|
* Helpers
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
Loading…
Reference in New Issue