mirror of https://github.com/PentHertz/srsLTE.git
Cleanned up the setup request and failure packing/unpacking
This commit is contained in:
parent
d8436ea2fc
commit
eb3520630d
|
@ -170,124 +170,68 @@ bool
|
||||||
s1ap::handle_s1_setup_request(LIBLTE_S1AP_MESSAGE_S1SETUPREQUEST_STRUCT *msg, struct sctp_sndrcvinfo *enb_sri)
|
s1ap::handle_s1_setup_request(LIBLTE_S1AP_MESSAGE_S1SETUPREQUEST_STRUCT *msg, struct sctp_sndrcvinfo *enb_sri)
|
||||||
{
|
{
|
||||||
|
|
||||||
uint8_t enb_name[150];
|
|
||||||
uint8_t enb_id[20];
|
|
||||||
uint32_t plmn = 0;
|
|
||||||
std::string mnc_str, mcc_str;
|
std::string mnc_str, mcc_str;
|
||||||
uint16_t mcc, mnc;
|
|
||||||
uint16_t tac, bplmn;
|
|
||||||
uint32_t bplmns[32];
|
|
||||||
enb_ctx_t enb_ctx;
|
enb_ctx_t enb_ctx;
|
||||||
|
srslte::byte_buffer_t reply_msg;
|
||||||
|
LIBLTE_S1AP_S1AP_PDU_STRUCT reply_pdu;
|
||||||
|
|
||||||
if(!m_s1ap_mngmt_proc.unpack_s1_setup_request(msg, &enb_ctx)){
|
if(!m_s1ap_mngmt_proc.unpack_s1_setup_request(msg, &enb_ctx))
|
||||||
|
{
|
||||||
m_s1ap_log->error("Malformed S1 Setup Request\n");
|
m_s1ap_log->error("Malformed S1 Setup Request\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(enb_ctx.enb_name_present){
|
//Log S1 Setup Request Info
|
||||||
m_s1ap_log->console("S1 Setup request from eNB %s\n", enb_ctx.enb_name);
|
if(enb_ctx.enb_name_present)
|
||||||
}
|
{
|
||||||
else{
|
m_s1ap_log->console("S1 Setup Request - eNB Name: %s, eNB id: 0x%x\n", enb_ctx.enb_name, enb_ctx.enb_id);
|
||||||
m_s1ap_log->console("S1 Setup request from eNB id \n");
|
m_s1ap_log->info("S1 Setup Request - eNB Name: %s, eNB id: 0x%x\n", enb_ctx.enb_name, enb_ctx.enb_id);
|
||||||
}
|
}
|
||||||
//eNB Name
|
else
|
||||||
/*
|
{
|
||||||
if(msg->eNBname_present)
|
m_s1ap_log->console("S1 Setup Request - eNB Id 0x%x\n", enb_ctx.enb_id);
|
||||||
{
|
m_s1ap_log->info("S1 Setup request - eNB Id 0x%x\n", enb_ctx.enb_id);
|
||||||
bzero(enb_name,sizeof(enb_name));
|
}
|
||||||
memcpy(enb_name,&msg->eNBname.buffer,msg->eNBname.n_octets);
|
srslte::mcc_to_string(enb_ctx.mcc, &mcc_str);
|
||||||
std::cout <<"eNB Name: " << enb_name <<std::endl;
|
srslte::mnc_to_string(enb_ctx.mnc, &mnc_str);
|
||||||
}
|
m_s1ap_log->info("S1 Setup Request - MCC:%s, MNC:%s, PLMN: %d\n", mcc_str.c_str(), mnc_str.c_str(), enb_ctx.plmn);
|
||||||
//eNB Id 9.2.1.37
|
m_s1ap_log->console("S1 Setup Request - MCC:%s, MNC:%s, PLMN: %d\n", mcc_str.c_str(), mnc_str.c_str(), enb_ctx.plmn);
|
||||||
memcpy(&enb_id, msg->Global_ENB_ID.eNB_ID.choice.macroENB_ID.buffer, LIBLTE_S1AP_MACROENB_ID_BIT_STRING_LEN);
|
for(int i=0;i<enb_ctx.nof_supported_ta;i++)
|
||||||
std::cout << "eNB ID: ";
|
{
|
||||||
for (int i=0;i < 20;i++) {
|
for(int j=0;i<enb_ctx.nof_supported_ta;i++)
|
||||||
std::cout<< (uint16_t)enb_id[i];
|
{
|
||||||
}
|
m_s1ap_log->info("S1 Setup Request - TAC %d, B-PLMN %d\n",enb_ctx.tac[i],enb_ctx.bplmns[i][j]);
|
||||||
std::cout << std::endl;
|
m_s1ap_log->console("S1 Setup Request - TAC %d, B-PLMN %d\n",enb_ctx.tac[i],enb_ctx.bplmns[i][j]);
|
||||||
//PLMN Id
|
}
|
||||||
((uint8_t*)&plmn)[1] = msg->Global_ENB_ID.pLMNidentity.buffer[0];
|
}
|
||||||
((uint8_t*)&plmn)[2] = msg->Global_ENB_ID.pLMNidentity.buffer[1];
|
m_s1ap_log->console("S1 Setup Request - Paging DRX %d\n",enb_ctx.drx);
|
||||||
((uint8_t*)&plmn)[3] = msg->Global_ENB_ID.pLMNidentity.buffer[2];
|
|
||||||
|
//Check matching PLMNs
|
||||||
plmn = ntohl(plmn);
|
if(enb_ctx.plmn!=m_plmn){
|
||||||
srslte::s1ap_plmn_to_mccmnc(plmn, &mcc, &mnc);
|
m_s1ap_log->console("S1 Setup Failure - Unkown PLMN\n");
|
||||||
srslte::mnc_to_string(mnc, &mnc_str);
|
m_s1ap_log->info("S1 Setup Failure - Unkown PLMN\n");
|
||||||
srslte::mnc_to_string(mcc, &mcc_str);
|
m_s1ap_mngmt_proc.pack_s1_setup_failure(LIBLTE_S1AP_CAUSEMISC_UNKNOWN_PLMN,&reply_msg);
|
||||||
std::cout << "MCC: "<< mcc_str << " MNC: " << mnc_str << std::endl;
|
ssize_t n_sent = sctp_send(m_s1mme,reply_msg.msg, reply_msg.N_bytes, enb_sri, 0); //FIXME
|
||||||
|
|
||||||
//SupportedTAs
|
|
||||||
for(uint16_t i=0; i<msg->SupportedTAs.len; i++)
|
|
||||||
{
|
|
||||||
//tac = msg->SupportedTAs.buffer[i].tAC.buffer[]; //broadcastPLMNs
|
|
||||||
((uint8_t*)&tac)[0] = msg->SupportedTAs.buffer[i].tAC.buffer[0];
|
|
||||||
((uint8_t*)&tac)[1] = msg->SupportedTAs.buffer[i].tAC.buffer[1];
|
|
||||||
std::cout << "TAC: " << ntohs(tac) << std::endl;
|
|
||||||
for (uint16_t j=0; j<msg->SupportedTAs.buffer[i].broadcastPLMNs.len; j++)
|
|
||||||
{
|
|
||||||
((uint8_t*)&bplmns[j])[1] = msg->SupportedTAs.buffer[i].broadcastPLMNs.buffer[j].buffer[0];
|
|
||||||
((uint8_t*)&bplmns[j])[2] = msg->SupportedTAs.buffer[i].broadcastPLMNs.buffer[j].buffer[1];
|
|
||||||
((uint8_t*)&bplmns[j])[3] = msg->SupportedTAs.buffer[i].broadcastPLMNs.buffer[j].buffer[2];
|
|
||||||
|
|
||||||
bplmns[j] = ntohl(bplmns[j]);
|
|
||||||
srslte::mnc_to_string(mnc, &mnc_str);
|
|
||||||
srslte::mnc_to_string(mcc, &mcc_str);
|
|
||||||
std::cout << "B_MCC: "<< mcc_str << " B_MNC: " << mnc_str << std::endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//Default Paging DRX
|
|
||||||
LIBLTE_S1AP_PAGINGDRX_ENUM drx = msg->DefaultPagingDRX.e;
|
|
||||||
std::cout << "Default Paging DRX" << drx << std::endl;
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
if(plmn!=m_plmn){
|
|
||||||
send_s1_setup_failure(enb_sri);
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
m_s1ap_log->console("S1 Setup Response\n");
|
||||||
|
m_s1ap_log->info("S1 Setup Response\n");
|
||||||
|
//m_s1ap_mngmt_proc.pack_s1_setup_response(,&reply_msg);
|
||||||
send_s1_setup_response(enb_sri);
|
send_s1_setup_response(enb_sri);
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
//send_s1setupfailure(enb_sri);
|
|
||||||
//send_s1setupresponse(enb_sri);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
s1ap::send_s1_setup_failure(struct sctp_sndrcvinfo *enb_sri)
|
|
||||||
{
|
|
||||||
srslte::byte_buffer_t msg;
|
|
||||||
LIBLTE_S1AP_S1AP_PDU_STRUCT pdu;
|
|
||||||
bzero(&pdu, sizeof(LIBLTE_S1AP_S1AP_PDU_STRUCT));
|
|
||||||
|
|
||||||
pdu.choice_type = LIBLTE_S1AP_S1AP_PDU_CHOICE_UNSUCCESSFULOUTCOME;
|
|
||||||
|
|
||||||
LIBLTE_S1AP_UNSUCCESSFULOUTCOME_STRUCT *unsucc = &pdu.choice.unsuccessfulOutcome;
|
|
||||||
unsucc->procedureCode = LIBLTE_S1AP_PROC_ID_S1SETUP;
|
|
||||||
unsucc->criticality = LIBLTE_S1AP_CRITICALITY_REJECT;
|
|
||||||
unsucc->choice_type = LIBLTE_S1AP_UNSUCCESSFULOUTCOME_CHOICE_S1SETUPFAILURE;
|
|
||||||
|
|
||||||
LIBLTE_S1AP_MESSAGE_S1SETUPFAILURE_STRUCT* s1_fail=(LIBLTE_S1AP_MESSAGE_S1SETUPFAILURE_STRUCT*)&unsucc->choice;
|
|
||||||
|
|
||||||
s1_fail->TimeToWait_present=false;
|
|
||||||
s1_fail->CriticalityDiagnostics_present=false;
|
|
||||||
s1_fail->Cause.ext=false;
|
|
||||||
s1_fail->Cause.choice_type = LIBLTE_S1AP_CAUSE_CHOICE_MISC;
|
|
||||||
s1_fail->Cause.choice.misc.ext=false;
|
|
||||||
s1_fail->Cause.choice.misc.e=LIBLTE_S1AP_CAUSEMISC_UNKNOWN_PLMN;
|
|
||||||
|
|
||||||
liblte_s1ap_pack_s1ap_pdu(&pdu, (LIBLTE_BYTE_MSG_STRUCT*)&msg);
|
|
||||||
|
|
||||||
|
//Send Reply to eNB
|
||||||
|
/*
|
||||||
ssize_t n_sent = sctp_send(m_s1mme,msg.msg, msg.N_bytes, enb_sri, 0);
|
ssize_t n_sent = sctp_send(m_s1mme,msg.msg, msg.N_bytes, enb_sri, 0);
|
||||||
|
|
||||||
if(n_sent == -1)
|
if(n_sent == -1)
|
||||||
{
|
{
|
||||||
m_s1ap_log->console("Failed to send S1 Setup Failure");
|
m_s1ap_log->console("Failed to send S1 Setup Setup Reply");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
return true;
|
return true;
|
||||||
}
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
s1ap::send_s1_setup_response(struct sctp_sndrcvinfo *enb_sri)
|
s1ap::send_s1_setup_response(struct sctp_sndrcvinfo *enb_sri)
|
||||||
|
|
Loading…
Reference in New Issue