mirror of https://github.com/PentHertz/srsLTE.git
Merge branch 'est_cause' into next
This commit is contained in:
commit
90bdb730ee
|
@ -274,8 +274,8 @@ public:
|
||||||
class s1ap_interface_rrc
|
class s1ap_interface_rrc
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void initial_ue(uint16_t rnti, srslte::byte_buffer_t *pdu) = 0;
|
virtual void initial_ue(uint16_t rnti, LIBLTE_S1AP_RRC_ESTABLISHMENT_CAUSE_ENUM cause, srslte::byte_buffer_t *pdu) = 0;
|
||||||
virtual void initial_ue(uint16_t rnti, srslte::byte_buffer_t *pdu, uint32_t m_tmsi, uint8_t mmec) = 0;
|
virtual void initial_ue(uint16_t rnti, LIBLTE_S1AP_RRC_ESTABLISHMENT_CAUSE_ENUM cause, srslte::byte_buffer_t *pdu, uint32_t m_tmsi, uint8_t mmec) = 0;
|
||||||
virtual void write_pdu(uint16_t rnti, srslte::byte_buffer_t *pdu) = 0;
|
virtual void write_pdu(uint16_t rnti, srslte::byte_buffer_t *pdu) = 0;
|
||||||
virtual bool user_exists(uint16_t rnti) = 0;
|
virtual bool user_exists(uint16_t rnti) = 0;
|
||||||
virtual bool user_release(uint16_t rnti, LIBLTE_S1AP_CAUSERADIONETWORK_ENUM cause_radio) = 0;
|
virtual bool user_release(uint16_t rnti, LIBLTE_S1AP_CAUSERADIONETWORK_ENUM cause_radio) = 0;
|
||||||
|
|
|
@ -251,6 +251,8 @@ public:
|
||||||
|
|
||||||
struct timeval t_last_activity;
|
struct timeval t_last_activity;
|
||||||
|
|
||||||
|
LIBLTE_RRC_CON_REQ_EST_CAUSE_ENUM establishment_cause;
|
||||||
|
|
||||||
// S-TMSI for this UE
|
// S-TMSI for this UE
|
||||||
bool has_tmsi;
|
bool has_tmsi;
|
||||||
uint32_t m_tmsi;
|
uint32_t m_tmsi;
|
||||||
|
|
|
@ -72,8 +72,8 @@ public:
|
||||||
void run_thread();
|
void run_thread();
|
||||||
|
|
||||||
// RRC interface
|
// RRC interface
|
||||||
void initial_ue(uint16_t rnti, srslte::byte_buffer_t *pdu);
|
void initial_ue(uint16_t rnti, LIBLTE_S1AP_RRC_ESTABLISHMENT_CAUSE_ENUM cause, srslte::byte_buffer_t *pdu);
|
||||||
void initial_ue(uint16_t rnti, srslte::byte_buffer_t *pdu, uint32_t m_tmsi, uint8_t mmec);
|
void initial_ue(uint16_t rnti, LIBLTE_S1AP_RRC_ESTABLISHMENT_CAUSE_ENUM cause, srslte::byte_buffer_t *pdu, uint32_t m_tmsi, uint8_t mmec);
|
||||||
void write_pdu(uint16_t rnti, srslte::byte_buffer_t *pdu);
|
void write_pdu(uint16_t rnti, srslte::byte_buffer_t *pdu);
|
||||||
bool user_exists(uint16_t rnti);
|
bool user_exists(uint16_t rnti);
|
||||||
bool user_release(uint16_t rnti, LIBLTE_S1AP_CAUSERADIONETWORK_ENUM cause_radio);
|
bool user_release(uint16_t rnti, LIBLTE_S1AP_CAUSERADIONETWORK_ENUM cause_radio);
|
||||||
|
@ -128,7 +128,7 @@ private:
|
||||||
bool handle_s1setupfailure(LIBLTE_S1AP_MESSAGE_S1SETUPFAILURE_STRUCT *msg);
|
bool handle_s1setupfailure(LIBLTE_S1AP_MESSAGE_S1SETUPFAILURE_STRUCT *msg);
|
||||||
bool handle_erabsetuprequest(LIBLTE_S1AP_MESSAGE_E_RABSETUPREQUEST_STRUCT *msg);
|
bool handle_erabsetuprequest(LIBLTE_S1AP_MESSAGE_E_RABSETUPREQUEST_STRUCT *msg);
|
||||||
|
|
||||||
bool send_initialuemessage(uint16_t rnti, srslte::byte_buffer_t *pdu, bool has_tmsi, uint32_t m_tmsi=0, uint8_t mmec=0);
|
bool send_initialuemessage(uint16_t rnti, LIBLTE_S1AP_RRC_ESTABLISHMENT_CAUSE_ENUM cause, srslte::byte_buffer_t *pdu, bool has_tmsi, uint32_t m_tmsi=0, uint8_t mmec=0);
|
||||||
bool send_ulnastransport(uint16_t rnti, srslte::byte_buffer_t *pdu);
|
bool send_ulnastransport(uint16_t rnti, srslte::byte_buffer_t *pdu);
|
||||||
bool send_uectxtreleaserequest(uint16_t rnti, LIBLTE_S1AP_CAUSE_STRUCT *cause);
|
bool send_uectxtreleaserequest(uint16_t rnti, LIBLTE_S1AP_CAUSE_STRUCT *cause);
|
||||||
bool send_uectxtreleasecomplete(uint16_t rnti, uint32_t mme_ue_id, uint32_t enb_ue_id);
|
bool send_uectxtreleasecomplete(uint16_t rnti, uint32_t mme_ue_id, uint32_t enb_ue_id);
|
||||||
|
|
|
@ -1043,6 +1043,7 @@ void rrc::ue::handle_rrc_con_req(LIBLTE_RRC_CONNECTION_REQUEST_STRUCT *msg)
|
||||||
m_tmsi = msg->ue_id.s_tmsi.m_tmsi;
|
m_tmsi = msg->ue_id.s_tmsi.m_tmsi;
|
||||||
has_tmsi = true;
|
has_tmsi = true;
|
||||||
}
|
}
|
||||||
|
establishment_cause = msg->cause;
|
||||||
send_connection_setup();
|
send_connection_setup();
|
||||||
state = RRC_STATE_WAIT_FOR_CON_SETUP_COMPLETE;
|
state = RRC_STATE_WAIT_FOR_CON_SETUP_COMPLETE;
|
||||||
}
|
}
|
||||||
|
@ -1069,9 +1070,9 @@ void rrc::ue::handle_rrc_con_setup_complete(LIBLTE_RRC_CONNECTION_SETUP_COMPLETE
|
||||||
parent->mac->phy_config_enabled(rnti, true);
|
parent->mac->phy_config_enabled(rnti, true);
|
||||||
|
|
||||||
if(has_tmsi) {
|
if(has_tmsi) {
|
||||||
parent->s1ap->initial_ue(rnti, pdu, m_tmsi, mmec);
|
parent->s1ap->initial_ue(rnti, (LIBLTE_S1AP_RRC_ESTABLISHMENT_CAUSE_ENUM)establishment_cause, pdu, m_tmsi, mmec);
|
||||||
} else {
|
} else {
|
||||||
parent->s1ap->initial_ue(rnti, pdu);
|
parent->s1ap->initial_ue(rnti, (LIBLTE_S1AP_RRC_ESTABLISHMENT_CAUSE_ENUM)establishment_cause, pdu);
|
||||||
}
|
}
|
||||||
state = RRC_STATE_WAIT_FOR_CON_RECONF_COMPLETE;
|
state = RRC_STATE_WAIT_FOR_CON_RECONF_COMPLETE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -174,22 +174,22 @@ void s1ap::build_tai_cgi()
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
/* RRC interface
|
/* RRC interface
|
||||||
********************************************************************************/
|
********************************************************************************/
|
||||||
void s1ap::initial_ue(uint16_t rnti, srslte::byte_buffer_t *pdu)
|
void s1ap::initial_ue(uint16_t rnti, LIBLTE_S1AP_RRC_ESTABLISHMENT_CAUSE_ENUM cause, srslte::byte_buffer_t *pdu)
|
||||||
{
|
{
|
||||||
ue_ctxt_map[rnti].eNB_UE_S1AP_ID = next_eNB_UE_S1AP_ID++;
|
ue_ctxt_map[rnti].eNB_UE_S1AP_ID = next_eNB_UE_S1AP_ID++;
|
||||||
ue_ctxt_map[rnti].stream_id = 1;
|
ue_ctxt_map[rnti].stream_id = 1;
|
||||||
ue_ctxt_map[rnti].release_requested = false;
|
ue_ctxt_map[rnti].release_requested = false;
|
||||||
enbid_to_rnti_map[ue_ctxt_map[rnti].eNB_UE_S1AP_ID] = rnti;
|
enbid_to_rnti_map[ue_ctxt_map[rnti].eNB_UE_S1AP_ID] = rnti;
|
||||||
send_initialuemessage(rnti, pdu, false);
|
send_initialuemessage(rnti, cause, pdu, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void s1ap::initial_ue(uint16_t rnti, srslte::byte_buffer_t *pdu, uint32_t m_tmsi, uint8_t mmec)
|
void s1ap::initial_ue(uint16_t rnti, LIBLTE_S1AP_RRC_ESTABLISHMENT_CAUSE_ENUM cause, srslte::byte_buffer_t *pdu, uint32_t m_tmsi, uint8_t mmec)
|
||||||
{
|
{
|
||||||
ue_ctxt_map[rnti].eNB_UE_S1AP_ID = next_eNB_UE_S1AP_ID++;
|
ue_ctxt_map[rnti].eNB_UE_S1AP_ID = next_eNB_UE_S1AP_ID++;
|
||||||
ue_ctxt_map[rnti].stream_id = 1;
|
ue_ctxt_map[rnti].stream_id = 1;
|
||||||
ue_ctxt_map[rnti].release_requested = false;
|
ue_ctxt_map[rnti].release_requested = false;
|
||||||
enbid_to_rnti_map[ue_ctxt_map[rnti].eNB_UE_S1AP_ID] = rnti;
|
enbid_to_rnti_map[ue_ctxt_map[rnti].eNB_UE_S1AP_ID] = rnti;
|
||||||
send_initialuemessage(rnti, pdu, true, m_tmsi, mmec);
|
send_initialuemessage(rnti, cause, pdu, true, m_tmsi, mmec);
|
||||||
}
|
}
|
||||||
|
|
||||||
void s1ap::write_pdu(uint16_t rnti, srslte::byte_buffer_t *pdu)
|
void s1ap::write_pdu(uint16_t rnti, srslte::byte_buffer_t *pdu)
|
||||||
|
@ -609,7 +609,7 @@ bool s1ap::handle_s1setupfailure(LIBLTE_S1AP_MESSAGE_S1SETUPFAILURE_STRUCT *msg)
|
||||||
/* S1AP message senders
|
/* S1AP message senders
|
||||||
********************************************************************************/
|
********************************************************************************/
|
||||||
|
|
||||||
bool s1ap::send_initialuemessage(uint16_t rnti, srslte::byte_buffer_t *pdu, bool has_tmsi, uint32_t m_tmsi, uint8_t mmec)
|
bool s1ap::send_initialuemessage(uint16_t rnti, LIBLTE_S1AP_RRC_ESTABLISHMENT_CAUSE_ENUM cause, srslte::byte_buffer_t *pdu, bool has_tmsi, uint32_t m_tmsi, uint8_t mmec)
|
||||||
{
|
{
|
||||||
if(!mme_connected) {
|
if(!mme_connected) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -662,7 +662,7 @@ bool s1ap::send_initialuemessage(uint16_t rnti, srslte::byte_buffer_t *pdu, bool
|
||||||
|
|
||||||
// RRC Establishment Cause
|
// RRC Establishment Cause
|
||||||
initue->RRC_Establishment_Cause.ext = false;
|
initue->RRC_Establishment_Cause.ext = false;
|
||||||
initue->RRC_Establishment_Cause.e = LIBLTE_S1AP_RRC_ESTABLISHMENT_CAUSE_MO_SIGNALLING;
|
initue->RRC_Establishment_Cause.e = cause;
|
||||||
|
|
||||||
liblte_s1ap_pack_s1ap_pdu(&tx_pdu, (LIBLTE_BYTE_MSG_STRUCT*)&msg);
|
liblte_s1ap_pack_s1ap_pdu(&tx_pdu, (LIBLTE_BYTE_MSG_STRUCT*)&msg);
|
||||||
s1ap_log->info_hex(msg.msg, msg.N_bytes, "Sending InitialUEMessage for RNTI:0x%x", rnti);
|
s1ap_log->info_hex(msg.msg, msg.N_bytes, "Sending InitialUEMessage for RNTI:0x%x", rnti);
|
||||||
|
|
Loading…
Reference in New Issue