diff --git a/srsepc/hdr/mme/s1ap.h b/srsepc/hdr/mme/s1ap.h index 46c495f6f..3fc211eca 100644 --- a/srsepc/hdr/mme/s1ap.h +++ b/srsepc/hdr/mme/s1ap.h @@ -24,6 +24,7 @@ * */ #include "srslte/asn1/liblte_s1ap.h" +#include "srslte/common/common.h" #include "srslte/common/log.h" namespace srsepc{ @@ -71,4 +72,7 @@ private: int m_s1mme; }; + + + } //namespace srsepc diff --git a/srsepc/src/CMakeLists.txt b/srsepc/src/CMakeLists.txt index fec7cd557..1acfcb6b5 100644 --- a/srsepc/src/CMakeLists.txt +++ b/srsepc/src/CMakeLists.txt @@ -23,7 +23,7 @@ target_link_libraries(srsepc srsepc_mme ${SCTP_LIBRARIES}) if (RPATH) - set_target_properties(srsenb PROPERTIES INSTALL_RPATH ".") + set_target_properties(srsepc PROPERTIES INSTALL_RPATH ".") endif (RPATH) install(TARGETS srsepc DESTINATION ${RUNTIME_DIR}) diff --git a/srsepc/src/mme/s1ap.cc b/srsepc/src/mme/s1ap.cc index 495f1ca02..872d32ea0 100644 --- a/srsepc/src/mme/s1ap.cc +++ b/srsepc/src/mme/s1ap.cc @@ -33,7 +33,8 @@ #include #include -#include "srslte/common/common.h" +#include "srslte/upper/s1ap_common.h" +#include "srslte/common/bcd_helpers.h" #include "mme/s1ap.h" namespace srsepc{ @@ -188,15 +189,62 @@ bool s1ap::handle_s1setuprequest(LIBLTE_S1AP_MESSAGE_S1SETUPREQUEST_STRUCT *msg) { - uint8_t tmp[150]; - bzero(tmp,sizeof(tmp)); - memcpy(tmp,&msg->eNBname.buffer,msg->eNBname.n_octets); - std::cout <<"Wazuup" <eNBname); - std::cout << tmp <Global_ENB_ID.eNB_ID.choice.macroENB_ID.buffer<info("Received DownlinkNASTransport\n"); + uint8_t enb_name[150]; + uint8_t enb_id[20]; + uint32_t plmn = 0; + std::string mnc_str, mcc_str; + uint16_t mcc, mnc; + uint16_t tac, bplmn; + uint32_t bplmns[32]; + + //eNB Name + if(msg->eNBname_present) + { + bzero(enb_name,sizeof(enb_name)); + memcpy(enb_name,&msg->eNBname.buffer,msg->eNBname.n_octets); + std::cout <<"eNB Name: " << enb_name <Global_ENB_ID.eNB_ID.choice.macroENB_ID.buffer, LIBLTE_S1AP_MACROENB_ID_BIT_STRING_LEN); + std::cout << "eNB ID: "; + for (int i=0;i < 20;i++) { + std::cout<< (uint16_t)enb_id[i]; + } + std::cout << std::endl; + //PLMN Id + ((uint8_t*)&plmn)[1] = msg->Global_ENB_ID.pLMNidentity.buffer[0]; + ((uint8_t*)&plmn)[2] = msg->Global_ENB_ID.pLMNidentity.buffer[1]; + ((uint8_t*)&plmn)[3] = msg->Global_ENB_ID.pLMNidentity.buffer[2]; + + plmn = ntohl(plmn); + srslte::s1ap_plmn_to_mccmnc(plmn, &mcc, &mnc); + srslte::mnc_to_string(mnc, &mnc_str); + srslte::mnc_to_string(mcc, &mcc_str); + std::cout << "MCC: "<< mcc_str << " MNC: " << mnc_str << std::endl; + + //SupportedTAs + for(uint16_t i=0; iSupportedTAs.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; jSupportedTAs.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(msg->ext) { s1ap_log->warning("Not handling S1AP message extension\n"); @@ -224,4 +272,4 @@ s1ap::handle_s1setuprequest(LIBLTE_S1AP_MESSAGE_S1SETUPREQUEST_STRUCT *msg) } -}//namespace srsepc +} //namespace srsepc