Commit e190aee7 authored by Tien-Thinh Nguyen's avatar Tien-Thinh Nguyen

Apply clang-format for AMF_APP

parent d0080142
......@@ -379,9 +379,11 @@ void amf_config::display() {
Logger::config().info(" port .................: %d", n11.port);
Logger::config().info("- NRF:");
Logger::config().info(" IP addr ..............: %s", inet_ntoa(nrf_addr.ipv4_addr));
Logger::config().info(
" IP addr ..............: %s", inet_ntoa(nrf_addr.ipv4_addr));
Logger::config().info(" Port .................: %d", nrf_addr.port);
Logger::config().info(" Api version ..........: %s", nrf_addr.api_version.c_str());
Logger::config().info(
" Api version ..........: %s", nrf_addr.api_version.c_str());
// Logger::config().info(" HTTP2 port ............: %d", n11_http2_port);
......
......@@ -36,43 +36,46 @@
namespace config {
//------------------------------------------------------------------------------
int amf_modules::load(const std::string &config_file) {
Logger::amf_app().debug("\nLoad AMF module configuration file (%s)",
config_file.c_str());
int amf_modules::load(const std::string& config_file) {
Logger::amf_app().debug(
"\nLoad AMF module configuration file (%s)", config_file.c_str());
Config cfg;
try {
cfg.readFile(config_file.c_str());
} catch (const FileIOException &fioex) {
Logger::amf_app().error("I/O error while reading file %s - %s",
config_file.c_str(), fioex.what());
} catch (const FileIOException& fioex) {
Logger::amf_app().error(
"I/O error while reading file %s - %s", config_file.c_str(),
fioex.what());
throw;
} catch (const ParseException &pex) {
Logger::amf_app().error("Parse error at %s:%d - %s", pex.getFile(),
pex.getLine(), pex.getError());
} catch (const ParseException& pex) {
Logger::amf_app().error(
"Parse error at %s:%d - %s", pex.getFile(), pex.getLine(),
pex.getError());
throw;
}
const Setting &root = cfg.getRoot();
const Setting& root = cfg.getRoot();
try {
const Setting &modules = root[MODULES_CONFIG_STRING_AMF_MODULES];
} catch (const SettingNotFoundException &nfex) {
const Setting& modules = root[MODULES_CONFIG_STRING_AMF_MODULES];
} catch (const SettingNotFoundException& nfex) {
Logger::amf_app().error("%s : %s", nfex.what(), nfex.getPath());
return -1;
}
const Setting &modules = root[MODULES_CONFIG_STRING_AMF_MODULES];
const Setting &msg = modules[MODULES_CONFIG_STRING_AMF_MODULES_NGAP_MESSAGE];
int count = msg.getLength();
const Setting& modules = root[MODULES_CONFIG_STRING_AMF_MODULES];
const Setting& msg = modules[MODULES_CONFIG_STRING_AMF_MODULES_NGAP_MESSAGE];
int count = msg.getLength();
for (int i = 0; i < count; i++) {
const Setting &item = msg[i];
const Setting& item = msg[i];
std::string typeOfMessage;
int procedure_code;
item.lookupValue(MODULES_CONFIG_STRING_AMF_MODULES_NGAP_MESSAGE_NAME,
msgName);
item.lookupValue(
MODULES_CONFIG_STRING_AMF_MODULES_NGAP_MESSAGE_NAME, msgName);
item.lookupValue(
MODULES_CONFIG_STRING_AMF_MODULES_NGAP_MESSAGE_PROCEDURECODE,
procedure_code);
item.lookupValue(MODULES_CONFIG_STRING_AMF_MODULES_NGAP_MESSAGE_TYPEOFMSG,
typeOfMessage);
procedureCode = (Ngap_ProcedureCode_t)procedure_code;
item.lookupValue(
MODULES_CONFIG_STRING_AMF_MODULES_NGAP_MESSAGE_TYPEOFMSG,
typeOfMessage);
procedureCode = (Ngap_ProcedureCode_t) procedure_code;
if (!(typeOfMessage.compare("initialMessage"))) {
typeOfMsg = Ngap_NGAP_PDU_PR_initiatingMessage;
} else if (!(typeOfMessage.compare("successfuloutcome"))) {
......@@ -89,8 +92,9 @@ int amf_modules::load(const std::string &config_file) {
void amf_modules::display() {
Logger::config().info("======= AMF Registered Modules =======");
Logger::config().info("NGAP Message Modules:");
Logger::config().info("- %s(Procedure code %d, Type of Msg %d)\n",
msgName.c_str(), procedureCode, typeOfMsg);
Logger::config().info(
"- %s(Procedure code %d, Type of Msg %d)\n", msgName.c_str(),
procedureCode, typeOfMsg);
}
} // namespace config
......@@ -40,7 +40,7 @@
#define MODULES_CONFIG_STRING_AMF_MODULES "MODULES"
#define MODULES_CONFIG_STRING_AMF_MODULES_NGAP_MESSAGE "NGAP_MESSAGE"
#define MODULES_CONFIG_STRING_AMF_MODULES_NGAP_MESSAGE_NAME "MSG_NAME"
#define MODULES_CONFIG_STRING_AMF_MODULES_NGAP_MESSAGE_PROCEDURECODE \
#define MODULES_CONFIG_STRING_AMF_MODULES_NGAP_MESSAGE_PROCEDURECODE \
"ProcedureCode"
#define MODULES_CONFIG_STRING_AMF_MODULES_NGAP_MESSAGE_TYPEOFMSG "TypeOfMessage"
......@@ -50,7 +50,7 @@ namespace config {
class amf_modules {
public:
int load(const std::string &config_file);
int load(const std::string& config_file);
void display();
void makeModulesAlive();
......
......@@ -50,10 +50,10 @@ namespace amf_application {
#define NAS_MESSAGE_UPLINK 0
typedef enum {
PlainNasMsg = 0x0,
IntegrityProtected = 0x1,
IntegrityProtectedAndCiphered = 0x2,
IntegrityProtectedWithNew5GNASSecurityContext = 0x3,
PlainNasMsg = 0x0,
IntegrityProtected = 0x1,
IntegrityProtectedAndCiphered = 0x2,
IntegrityProtectedWithNew5GNASSecurityContext = 0x3,
IntegrityProtectedAndCipheredWithNew5GNASSecurityContext = 0x4,
} SecurityHeaderType;
......@@ -61,18 +61,19 @@ class amf_n1 {
public:
amf_n1();
~amf_n1();
void handle_itti_message(itti_uplink_nas_data_ind &);
void handle_itti_message(itti_downlink_nas_transfer &itti_msg);
void handle_itti_message(itti_uplink_nas_data_ind&);
void handle_itti_message(itti_downlink_nas_transfer& itti_msg);
// nas message decode
void nas_signalling_establishment_request_handle(
SecurityHeaderType type, std::shared_ptr<nas_context> nc,
uint32_t ran_ue_ngap_id, long amf_ue_ngap_id, bstring plain_msg,
std::string snn, uint8_t ulCount);
// void uplink_nas_msg_handle(uint32_t ran_ue_ngap_id, long amf_ue_ngap_id,
// bstring plain_msg);
void uplink_nas_msg_handle(uint32_t ran_ue_ngap_id, long amf_ue_ngap_id,
bstring plain_msg, plmn_t plmn);
bool check_security_header_type(SecurityHeaderType &type, uint8_t *buffer);
// void uplink_nas_msg_handle(uint32_t ran_ue_ngap_id, long amf_ue_ngap_id,
// bstring plain_msg);
void uplink_nas_msg_handle(
uint32_t ran_ue_ngap_id, long amf_ue_ngap_id, bstring plain_msg,
plmn_t plmn);
bool check_security_header_type(SecurityHeaderType& type, uint8_t* buffer);
std::map<long, std::shared_ptr<nas_context>>
amfueid2nas_context; // amf ue ngap id
......@@ -84,109 +85,104 @@ class amf_n1 {
std::map<std::string, std::shared_ptr<nas_context>> guti2nas_context;
mutable std::shared_mutex m_guti2nas_context;
bool is_guti_2_nas_context(const std::string &guti) const;
bool is_guti_2_nas_context(const std::string& guti) const;
std::shared_ptr<nas_context> guti_2_nas_context(
const std::string &guti) const;
void set_guti_2_nas_context(const std::string &guti,
std::shared_ptr<nas_context> nc);
const std::string& guti) const;
void set_guti_2_nas_context(
const std::string& guti, std::shared_ptr<nas_context> nc);
mutable std::shared_mutex m_amfueid2nas_context;
bool is_amf_ue_id_2_nas_context(const long &amf_ue_ngap_id) const;
bool is_amf_ue_id_2_nas_context(const long& amf_ue_ngap_id) const;
std::shared_ptr<nas_context> amf_ue_id_2_nas_context(
const long &amf_ue_ngap_id) const;
void set_amf_ue_ngap_id_2_nas_context(const long &amf_ue_ngap_id,
std::shared_ptr<nas_context> nc);
database_t *db_desc;
const long& amf_ue_ngap_id) const;
void set_amf_ue_ngap_id_2_nas_context(
const long& amf_ue_ngap_id, std::shared_ptr<nas_context> nc);
database_t* db_desc;
// procedures
void run_registration_procedure(std::shared_ptr<nas_context> &nc);
void run_registration_procedure(std::shared_ptr<nas_context>& nc);
void run_initial_registration_procedure();
void run_mobility_registration_update_procedure(
std::shared_ptr<nas_context> nc);
// authentication
bool auth_vectors_generator(std::shared_ptr<nas_context> &nc);
bool auth_vectors_generator(std::shared_ptr<nas_context>& nc);
bool authentication_vectors_generator_in_ausf(
std::shared_ptr<nas_context> &nc);
std::shared_ptr<nas_context>& nc);
bool authentication_vectors_generator_in_udm(
std::shared_ptr<nas_context> &nc);
std::shared_ptr<nas_context>& nc);
// mysql handlers in mysql_db.cpp
bool get_mysql_auth_info(std::string imsi, mysql_auth_info_t &resp);
void mysql_push_rand_sqn(std::string imsi, uint8_t *rand_p, uint8_t *sqn);
bool get_mysql_auth_info(std::string imsi, mysql_auth_info_t& resp);
void mysql_push_rand_sqn(std::string imsi, uint8_t* rand_p, uint8_t* sqn);
void mysql_increment_sqn(std::string imsi);
bool connect_to_mysql();
void generate_random(uint8_t *random_p, ssize_t length);
void generate_5g_he_av_in_udm(const uint8_t opc[16], std::string imsi,
uint8_t key[16], uint8_t sqn[6],
std::string serving_network,
_5G_HE_AV_t &vector);
void test_generate_5g_he_av_in_udm(const uint8_t opc[16], uint8_t key[16],
uint8_t sqnak[6],
std::string serving_network,
_5G_HE_AV_t &vector);
void generate_random(uint8_t* random_p, ssize_t length);
void generate_5g_he_av_in_udm(
const uint8_t opc[16], std::string imsi, uint8_t key[16], uint8_t sqn[6],
std::string serving_network, _5G_HE_AV_t& vector);
void test_generate_5g_he_av_in_udm(
const uint8_t opc[16], uint8_t key[16], uint8_t sqnak[6],
std::string serving_network, _5G_HE_AV_t& vector);
void handle_auth_vector_successful_result(std::shared_ptr<nas_context> nc);
bool start_authentication_procedure(std::shared_ptr<nas_context> nc,
int vindex, uint8_t ngksi);
bool start_authentication_procedure(
std::shared_ptr<nas_context> nc, int vindex, uint8_t ngksi);
bool check_nas_common_procedure_on_going(std::shared_ptr<nas_context> nc);
int security_select_algorithms(uint8_t nea, uint8_t nia, uint8_t &amf_nea,
uint8_t &amf_nia);
int security_select_algorithms(
uint8_t nea, uint8_t nia, uint8_t& amf_nea, uint8_t& amf_nia);
bool start_security_mode_control_procedure(std::shared_ptr<nas_context> nc);
void encode_nas_message_protected(nas_secu_ctx *nsc, bool is_secu_ctx_new,
uint8_t security_header_type,
uint8_t direction, uint8_t *input_nas_buf,
int input_nas_len, bstring &encrypted_nas);
bool nas_message_integrity_protected(nas_secu_ctx *nsc, uint8_t direction,
uint8_t *input_nas, int input_nas_len,
uint32_t &mac);
bool nas_message_cipher_protected(nas_secu_ctx *nsc, uint8_t direction,
bstring input_nas, bstring &output_nas);
void dump_nas_message(uint8_t *buf, int len);
void ue_authentication_simulator(uint8_t *rand, uint8_t *autn);
void annex_a_4_33501(uint8_t ck[16], uint8_t ik[16], uint8_t *input,
uint8_t rand[16], std::string serving_network,
uint8_t *output);
void send_itti_to_smf_services_consumer(uint32_t ran_ue_ngap_id,
long amf_ue_ngap_id,
uint8_t request_type,
uint8_t pdu_session_id, bstring dnn,
bstring sm_msg);
void encode_nas_message_protected(
nas_secu_ctx* nsc, bool is_secu_ctx_new, uint8_t security_header_type,
uint8_t direction, uint8_t* input_nas_buf, int input_nas_len,
bstring& encrypted_nas);
bool nas_message_integrity_protected(
nas_secu_ctx* nsc, uint8_t direction, uint8_t* input_nas,
int input_nas_len, uint32_t& mac);
bool nas_message_cipher_protected(
nas_secu_ctx* nsc, uint8_t direction, bstring input_nas,
bstring& output_nas);
void dump_nas_message(uint8_t* buf, int len);
void ue_authentication_simulator(uint8_t* rand, uint8_t* autn);
void annex_a_4_33501(
uint8_t ck[16], uint8_t ik[16], uint8_t* input, uint8_t rand[16],
std::string serving_network, uint8_t* output);
void send_itti_to_smf_services_consumer(
uint32_t ran_ue_ngap_id, long amf_ue_ngap_id, uint8_t request_type,
uint8_t pdu_session_id, bstring dnn, bstring sm_msg);
void set_5gmm_state(std::shared_ptr<nas_context> nc, _5gmm_state_t state);
void get_5gmm_state(std::shared_ptr<nas_context> nc, _5gmm_state_t &state);
void get_5gmm_state(std::shared_ptr<nas_context> nc, _5gmm_state_t& state);
private: // nas message handlers
void ue_initiate_de_registration_handle(uint32_t ran_ue_ngap_id,
long amf_ue_ngap_id, bstring nas);
void registration_request_handle(bool isNasSig,
std::shared_ptr<nas_context> nc,
uint32_t ran_ue_ngap_id, long amf_ue_ngap_id,
std::string snn, bstring reg);
void authentication_response_handle(uint32_t ran_ue_ngap_id,
long amf_ue_ngap_id, bstring plain_msg);
void authentication_failure_handle(uint32_t ran_ue_ngap_id,
long amf_ue_ngap_id, bstring plain_msg);
void security_mode_complete_handle(uint32_t ran_ue_ngap_id,
long amf_ue_ngap_id, bstring nas_msg);
void security_mode_reject_handle(uint32_t ran_ue_ngap_id, long amf_ue_ngap_id,
bstring nas_msg);
void ul_nas_transport_handle(uint32_t ran_ue_ngap_id, long amf_ue_ngap_id,
bstring nas);
void ul_nas_transport_handle(uint32_t ran_ue_ngap_id, long amf_ue_ngap_id,
bstring nas, plmn_t plmn);
void sha256(unsigned char *message, int msg_len, unsigned char *output);
void service_request_handle(bool isNasSig, std::shared_ptr<nas_context> nc,
uint32_t ran_ue_ngap_id, long amf_ue_ngap_id,
bstring nas);
void identity_response_handle(uint32_t ran_ue_ngap_id, long amf_ue_ngap_id,
bstring plain_msg);
void ue_initiate_de_registration_handle(
uint32_t ran_ue_ngap_id, long amf_ue_ngap_id, bstring nas);
void registration_request_handle(
bool isNasSig, std::shared_ptr<nas_context> nc, uint32_t ran_ue_ngap_id,
long amf_ue_ngap_id, std::string snn, bstring reg);
void authentication_response_handle(
uint32_t ran_ue_ngap_id, long amf_ue_ngap_id, bstring plain_msg);
void authentication_failure_handle(
uint32_t ran_ue_ngap_id, long amf_ue_ngap_id, bstring plain_msg);
void security_mode_complete_handle(
uint32_t ran_ue_ngap_id, long amf_ue_ngap_id, bstring nas_msg);
void security_mode_reject_handle(
uint32_t ran_ue_ngap_id, long amf_ue_ngap_id, bstring nas_msg);
void ul_nas_transport_handle(
uint32_t ran_ue_ngap_id, long amf_ue_ngap_id, bstring nas);
void ul_nas_transport_handle(
uint32_t ran_ue_ngap_id, long amf_ue_ngap_id, bstring nas, plmn_t plmn);
void sha256(unsigned char* message, int msg_len, unsigned char* output);
void service_request_handle(
bool isNasSig, std::shared_ptr<nas_context> nc, uint32_t ran_ue_ngap_id,
long amf_ue_ngap_id, bstring nas);
void identity_response_handle(
uint32_t ran_ue_ngap_id, long amf_ue_ngap_id, bstring plain_msg);
// authentication vector
bool generate_authentication_vector();
void itti_send_dl_nas_buffer_to_task_n2(bstring &b, uint32_t ran_ue_ngap_id,
long amf_ue_ngap_id);
void itti_send_dl_nas_buffer_to_task_n2(
bstring& b, uint32_t ran_ue_ngap_id, long amf_ue_ngap_id);
// response message
void response_registration_reject_msg(uint8_t cause_value,
uint32_t ran_ue_ngap_id,
long amf_ue_ngap_id);
void response_registration_reject_msg(
uint8_t cause_value, uint32_t ran_ue_ngap_id, long amf_ue_ngap_id);
};
} // namespace amf_application
......
......@@ -348,7 +348,8 @@ void amf_n11::send_pdu_session_update_sm_context_request(
//------------------------------------------------------------------------------
void amf_n11::handle_pdu_session_initial_request(
std::string supi, std::shared_ptr<pdu_session_context> psc,
std::string smf_addr, std::string smf_api_version, bstring sm_msg, std::string dnn) {
std::string smf_addr, std::string smf_api_version, bstring sm_msg,
std::string dnn) {
Logger::amf_n11().debug(
"Handle PDU Session Establishment Request (SUPI %s, PDU Session ID %d)",
supi.c_str(), psc.get()->pdu_session_id);
......@@ -437,7 +438,8 @@ void amf_n11::set_supi_to_pdu_ctx(
// SMF selection
//------------------------------------------------------------------------------
bool amf_n11::smf_selection_from_configuration(std::string& smf_addr, std::string& smf_api_version) {
bool amf_n11::smf_selection_from_configuration(
std::string& smf_addr, std::string& smf_api_version) {
for (int i = 0; i < amf_cfg.smf_pool.size(); i++) {
if (amf_cfg.smf_pool[i].selected) {
smf_addr = amf_cfg.smf_pool[i].ipv4 + ":" + amf_cfg.smf_pool[i].port;
......@@ -449,7 +451,8 @@ bool amf_n11::smf_selection_from_configuration(std::string& smf_addr, std::strin
}
//------------------------------------------------------------------------------
bool amf_n11::smf_selection_from_context(std::string& smf_addr, std::string& smf_api_version) {
bool amf_n11::smf_selection_from_context(
std::string& smf_addr, std::string& smf_api_version) {
// TODO:
}
......
......@@ -46,7 +46,8 @@ class amf_n11 {
void handle_itti_message(itti_smf_services_consumer&);
void handle_pdu_session_initial_request(
std::string supi, std::shared_ptr<pdu_session_context> psc,
std::string smf_addr, std::string smf_api_version, bstring sm_msg, std::string dnn);
std::string smf_addr, std::string smf_api_version, bstring sm_msg,
std::string dnn);
void handle_itti_message(itti_nsmf_pdusession_update_sm_context& itti_msg);
void handle_itti_message(itti_nsmf_pdusession_release_sm_context& itti_msg);
void handle_itti_message(itti_pdu_session_resource_setup_response& itti_msg);
......@@ -64,8 +65,10 @@ class amf_n11 {
const std::string& supi, std::shared_ptr<pdu_session_context> psc);
std::map<uint8_t, std::string> pduid2supi;
bool smf_selection_from_configuration(std::string& smf_addr, std::string& smf_api_version);
bool smf_selection_from_context(std::string& smf_addr, std::string& smf_api_version);
bool smf_selection_from_configuration(
std::string& smf_addr, std::string& smf_api_version);
bool smf_selection_from_context(
std::string& smf_addr, std::string& smf_api_version);
void handle_post_sm_context_response_error_400();
void handle_post_sm_context_response_error(
long code, std::string cause, bstring n1sm, std::string supi,
......
......@@ -66,13 +66,13 @@ extern amf_n11* amf_n11_inst;
extern amf_config amf_cfg;
extern amf_app* amf_app_inst;
extern statistics stacs;
extern void print_buffer(const std::string app, const std::string commit,
uint8_t* buf, int len);
extern void print_buffer(
const std::string app, const std::string commit, uint8_t* buf, int len);
uint32_t ran_id_Global = 0;
uint32_t AMF_TARGET_ran_id_global = 0;
uint32_t ran_id_Global = 0;
uint32_t AMF_TARGET_ran_id_global = 0;
sctp_assoc_id_t downlink_sctp_assoc_id = 0;
sctp_assoc_id_t source_assoc_id = 0;
sctp_assoc_id_t source_assoc_id = 0;
void amf_n2_task(void*);
......@@ -82,7 +82,7 @@ void amf_n2_task(void* args_p) {
itti_inst->notify_task_ready(task_id);
do {
std::shared_ptr<itti_msg> shared_msg = itti_inst->receive_msg(task_id);
auto* msg = shared_msg.get();
auto* msg = shared_msg.get();
switch (msg->msg_type) {
case NEW_SCTP_ASSOCIATION: {
Logger::amf_n2().info("Received NEW_SCTP_ASSOCIATION");
......@@ -206,13 +206,13 @@ void amf_n2::handle_itti_message(itti_new_sctp_association& new_assoc) {
// NG_SETUP_REQUEST Handler
//------------------------------------------------------------------------------
void amf_n2::handle_itti_message(itti_ng_setup_request& itti_msg) {
Logger::amf_n2().debug("Parameters: assoc_id %d, stream %d",
itti_msg.assoc_id, itti_msg.stream);
Logger::amf_n2().debug(
"Parameters: assoc_id %d, stream %d", itti_msg.assoc_id, itti_msg.stream);
std::shared_ptr<gnb_context> gc;
if (!is_assoc_id_2_gnb_context(itti_msg.assoc_id)) {
Logger::amf_n2().error("No existed gNB context with assoc_id(%d)",
itti_msg.assoc_id);
Logger::amf_n2().error(
"No existed gNB context with assoc_id(%d)", itti_msg.assoc_id);
return;
}
gc = assoc_id_2_gnb_context(itti_msg.assoc_id);
......@@ -223,8 +223,8 @@ void amf_n2::handle_itti_message(itti_ng_setup_request& itti_msg) {
"ignoring",
ng_gnb_state_str[gc.get()->ng_state]);
} else {
Logger::amf_n2().debug("Update gNB context with assoc id (%d)",
itti_msg.assoc_id);
Logger::amf_n2().debug(
"Update gNB context with assoc id (%d)", itti_msg.assoc_id);
}
gnb_infos gnbItem;
......@@ -239,13 +239,13 @@ void amf_n2::handle_itti_message(itti_ng_setup_request& itti_msg) {
}
Logger::amf_n2().debug("IE GlobalGNBID: 0x%x", gnb_id);
gc->globalRanNodeId = gnb_id;
gnbItem.gnb_id = gnb_id;
gnbItem.gnb_id = gnb_id;
std::string gnb_name;
if (!itti_msg.ngSetupReq->getRanNodeName(gnb_name)) {
Logger::amf_n2().warn("IE RanNodeName not existed");
} else {
gc->gnb_name = gnb_name;
gc->gnb_name = gnb_name;
gnbItem.gnb_name = gnb_name;
Logger::amf_n2().debug("IE RanNodeName: %s", gnb_name.c_str());
}
......@@ -278,10 +278,10 @@ void amf_n2::handle_itti_message(itti_ng_setup_request& itti_msg) {
void* buffer = calloc(1, 1000);
NGSetupFailureMsg ngSetupFailure;
ngSetupFailure.setMessageType();
ngSetupFailure.setCauseRadioNetwork(Ngap_CauseRadioNetwork_unspecified,
Ngap_TimeToWait_v5s);
int encoded = ngSetupFailure.encode2buffer((uint8_t*)buffer, 1000);
bstring b = blk2bstr(buffer, encoded);
ngSetupFailure.setCauseRadioNetwork(
Ngap_CauseRadioNetwork_unspecified, Ngap_TimeToWait_v5s);
int encoded = ngSetupFailure.encode2buffer((uint8_t*) buffer, 1000);
bstring b = blk2bstr(buffer, encoded);
sctp_s_38412.sctp_send_msg(itti_msg.assoc_id, itti_msg.stream, &b);
Logger::amf_n2().error(
"No common PLMN, encoding NG_SETUP_FAILURE with cause (Unknown PLMN)");
......@@ -306,10 +306,10 @@ void amf_n2::handle_itti_message(itti_ng_setup_request& itti_msg) {
std::vector<struct GuamiItem_s> guami_list;
for (int i = 0; i < amf_cfg.guami_list.size(); i++) {
struct GuamiItem_s tmp;
tmp.mcc = amf_cfg.guami_list[i].mcc;
tmp.mnc = amf_cfg.guami_list[i].mnc;
tmp.regionID = amf_cfg.guami_list[i].regionID;
tmp.AmfSetID = amf_cfg.guami_list[i].AmfSetID;
tmp.mcc = amf_cfg.guami_list[i].mcc;
tmp.mnc = amf_cfg.guami_list[i].mnc;
tmp.regionID = amf_cfg.guami_list[i].regionID;
tmp.AmfSetID = amf_cfg.guami_list[i].AmfSetID;
tmp.AmfPointer = amf_cfg.guami_list[i].AmfPointer;
// tmp.mcc = amf_cfg.guami_list[i].mcc;
guami_list.push_back(tmp);
......@@ -323,14 +323,14 @@ void amf_n2::handle_itti_message(itti_ng_setup_request& itti_msg) {
for (int j = 0; j < amf_cfg.plmn_list[i].slice_list.size(); j++) {
SliceSupportItem_t s_tmp;
s_tmp.sst = amf_cfg.plmn_list[i].slice_list[j].sST;
s_tmp.sd = amf_cfg.plmn_list[i].slice_list[j].sD;
s_tmp.sd = amf_cfg.plmn_list[i].slice_list[j].sD;
tmp.slice_list.push_back(s_tmp);
}
plmn_list.push_back(tmp);
}
ngSetupResp.setPlmnSupportList(plmn_list);
int encoded = ngSetupResp.encode2buffer((uint8_t*)buffer, 1000);
bstring b = blk2bstr(buffer, encoded);
int encoded = ngSetupResp.encode2buffer((uint8_t*) buffer, 1000);
bstring b = blk2bstr(buffer, encoded);
sctp_s_38412.sctp_send_msg(itti_msg.assoc_id, itti_msg.stream, &b);
Logger::amf_n2().debug("Sending NG_SETUP_RESPONSE Ok");
gc.get()->ng_state = NGAP_READY;
......@@ -354,8 +354,8 @@ void amf_n2::handle_itti_message(itti_initial_ue_message& init_ue_msg) {
new itti_nas_signalling_establishment_request(TASK_AMF_N2, TASK_AMF_APP);
if (!is_assoc_id_2_gnb_context(init_ue_msg.assoc_id)) {
Logger::amf_n2().error("No existing gNG context with assoc_id (%d)",
init_ue_msg.assoc_id);
Logger::amf_n2().error(
"No existing gNG context with assoc_id (%d)", init_ue_msg.assoc_id);
return;
}
std::shared_ptr<gnb_context> gc;
......@@ -367,8 +367,8 @@ void amf_n2::handle_itti_message(itti_initial_ue_message& init_ue_msg) {
"ignoring",
ng_gnb_state_str[gc.get()->ng_state]);
} else if (gc.get()->ng_state != NGAP_READY) {
Logger::amf_n2().debug("gNB with assoc_id (%d) is illegal",
init_ue_msg.assoc_id);
Logger::amf_n2().debug(
"gNB with assoc_id (%d) is illegal", init_ue_msg.assoc_id);
return;
}
......@@ -393,7 +393,7 @@ void amf_n2::handle_itti_message(itti_initial_ue_message& init_ue_msg) {
"Failed to get UE NGAP context for ran_ue_ngap_id 0x%x", 21);
} else {
// store information into UE NGAP context
unc.get()->ran_ue_ngap_id = ran_ue_ngap_id;
unc.get()->ran_ue_ngap_id = ran_ue_ngap_id;
unc.get()->sctp_stream_recv = init_ue_msg.stream;
unc.get()->sctp_stream_send == gc.get()->next_sctp_stream;
gc.get()->next_sctp_stream += 1;
......@@ -429,14 +429,14 @@ void amf_n2::handle_itti_message(itti_initial_ue_message& init_ue_msg) {
Logger::amf_n2().debug("5g_s_tmsi not present");
} else {
itti_msg->is_5g_s_tmsi_present = true;
itti_msg->_5g_s_tmsi = _5g_s_tmsi;
itti_msg->_5g_s_tmsi = _5g_s_tmsi;
Logger::amf_n2().debug("5g_s_tmsi present");
}
uint8_t* nas_buf;
size_t nas_len = 0;
if (init_ue_msg.initUeMsg->getNasPdu(nas_buf, nas_len)) {
bstring nas = blk2bstr(nas_buf, nas_len);
bstring nas = blk2bstr(nas_buf, nas_len);
itti_msg->nas_buf = nas;
} else {
Logger::amf_n2().error("Missing IE NAS-PDU");
......@@ -458,11 +458,11 @@ void amf_n2::handle_itti_message(itti_initial_ue_message& init_ue_msg) {
//------------------------------------------------------------------------------
void amf_n2::handle_itti_message(itti_ul_nas_transport& ul_nas_transport) {
unsigned long amf_ue_ngap_id = ul_nas_transport.ulNas->getAmfUeNgapId();
uint32_t ran_ue_ngap_id = ul_nas_transport.ulNas->getRanUeNgapId();
uint32_t ran_ue_ngap_id = ul_nas_transport.ulNas->getRanUeNgapId();
std::shared_ptr<gnb_context> gc;
if (!is_assoc_id_2_gnb_context(ul_nas_transport.assoc_id)) {
Logger::amf_n2().error("gNB with assoc_id(%d) is illegal",
ul_nas_transport.assoc_id);
Logger::amf_n2().error(
"gNB with assoc_id(%d) is illegal", ul_nas_transport.assoc_id);
return;
}
gc = assoc_id_2_gnb_context(ul_nas_transport.assoc_id);
......@@ -475,8 +475,8 @@ void amf_n2::handle_itti_message(itti_ul_nas_transport& ul_nas_transport) {
return;
}
if (!is_ran_ue_id_2_ue_ngap_context(ran_ue_ngap_id)) {
Logger::amf_n2().error("No UE NGAP context with ran_ue_ngap_id (%d)",
ran_ue_ngap_id);
Logger::amf_n2().error(
"No UE NGAP context with ran_ue_ngap_id (%d)", ran_ue_ngap_id);
return;
}
unc = ran_ue_id_2_ue_ngap_context(ran_ue_ngap_id);
......@@ -495,11 +495,11 @@ void amf_n2::handle_itti_message(itti_ul_nas_transport& ul_nas_transport) {
itti_uplink_nas_data_ind* itti_msg =
new itti_uplink_nas_data_ind(TASK_AMF_N2, TASK_AMF_N1);
itti_msg->is_nas_signalling_estab_req = false;
itti_msg->amf_ue_ngap_id = amf_ue_ngap_id;
itti_msg->ran_ue_ngap_id = ran_ue_ngap_id;
itti_msg->is_guti_valid = false;
uint8_t* nas_buf = NULL;
size_t nas_len = 0;
itti_msg->amf_ue_ngap_id = amf_ue_ngap_id;
itti_msg->ran_ue_ngap_id = ran_ue_ngap_id;
itti_msg->is_guti_valid = false;
uint8_t* nas_buf = NULL;
size_t nas_len = 0;
if (ul_nas_transport.ulNas->getNasPdu(nas_buf, nas_len)) {
itti_msg->nas_msg = blk2bstr(nas_buf, nas_len);
} else {
......@@ -508,7 +508,7 @@ void amf_n2::handle_itti_message(itti_ul_nas_transport& ul_nas_transport) {
}
// UserLocation
NrCgi_t cgi = {};
Tai_t tai = {};
Tai_t tai = {};
if (ul_nas_transport.ulNas->getUserLocationInfoNR(cgi, tai)) {
itti_msg->mcc = cgi.mcc;
itti_msg->mnc = cgi.mnc;
......@@ -520,8 +520,9 @@ void amf_n2::handle_itti_message(itti_ul_nas_transport& ul_nas_transport) {
std::shared_ptr<itti_uplink_nas_data_ind>(itti_msg);
int ret = itti_inst->send_msg(i);
if (0 != ret) {
Logger::amf_n2().error("Could not send ITTI message %s to task TASK_AMF_N1",
i->get_msg_name());
Logger::amf_n2().error(
"Could not send ITTI message %s to task TASK_AMF_N1",
i->get_msg_name());
}
}
......@@ -530,30 +531,31 @@ void amf_n2::handle_itti_message(itti_dl_nas_transport& dl_nas_transport) {
std::shared_ptr<ue_ngap_context> unc;
unc = ran_ue_id_2_ue_ngap_context(dl_nas_transport.ran_ue_ngap_id);
if (unc.get() == nullptr) {
Logger::amf_n2().error("Illegal UE with ran_ue_ngap_id (0x%x)",
dl_nas_transport.ran_ue_ngap_id);
Logger::amf_n2().error(
"Illegal UE with ran_ue_ngap_id (0x%x)",
dl_nas_transport.ran_ue_ngap_id);
return;
}
std::shared_ptr<gnb_context> gc;
gc = assoc_id_2_gnb_context(unc.get()->gnb_assoc_id);
if (gc.get() == nullptr) {
Logger::amf_n2().error("Illegal gNB with assoc id (0x%x)",
unc.get()->gnb_assoc_id);
Logger::amf_n2().error(
"Illegal gNB with assoc id (0x%x)", unc.get()->gnb_assoc_id);
return;
}
unc.get()->amf_ue_ngap_id = dl_nas_transport.amf_ue_ngap_id;
unc.get()->ng_ue_state = NGAP_UE_CONNECTED;
unc.get()->amf_ue_ngap_id = dl_nas_transport.amf_ue_ngap_id;
unc.get()->ng_ue_state = NGAP_UE_CONNECTED;
DownLinkNasTransportMsg* ngap_msg = new DownLinkNasTransportMsg();
ngap_msg->setMessageType();
ngap_msg->setAmfUeNgapId(dl_nas_transport.amf_ue_ngap_id);
ngap_msg->setRanUeNgapId(dl_nas_transport.ran_ue_ngap_id);
ngap_msg->setNasPdu((uint8_t*)bdata(dl_nas_transport.nas),
blength(dl_nas_transport.nas));
ngap_msg->setNasPdu(
(uint8_t*) bdata(dl_nas_transport.nas), blength(dl_nas_transport.nas));
uint8_t buffer[1024];
int encoded_size = ngap_msg->encode2buffer(buffer, 1024);
bstring b = blk2bstr(buffer, encoded_size);
sctp_s_38412.sctp_send_msg(gc.get()->sctp_assoc_id,
unc.get()->sctp_stream_send, &b);
bstring b = blk2bstr(buffer, encoded_size);
sctp_s_38412.sctp_send_msg(
gc.get()->sctp_assoc_id, unc.get()->sctp_stream_send, &b);
}
//------------------------------------------------------------------------------
......@@ -561,15 +563,15 @@ void amf_n2::handle_itti_message(itti_initial_context_setup_request& itti_msg) {
std::shared_ptr<ue_ngap_context> unc;
unc = ran_ue_id_2_ue_ngap_context(itti_msg.ran_ue_ngap_id);
if (unc.get() == nullptr) {
Logger::amf_n2().error("Illegal UE with ran_ue_ngap_id (0x%x)",
itti_msg.ran_ue_ngap_id);
Logger::amf_n2().error(
"Illegal UE with ran_ue_ngap_id (0x%x)", itti_msg.ran_ue_ngap_id);
return;
}
std::shared_ptr<gnb_context> gc;
gc = assoc_id_2_gnb_context(unc.get()->gnb_assoc_id);
if (gc.get() == nullptr) {
Logger::amf_n2().error("Illegal gNB with assoc id (0x%x)",
unc.get()->gnb_assoc_id);
Logger::amf_n2().error(
"Illegal gNB with assoc id (0x%x)", unc.get()->gnb_assoc_id);
return;
}
InitialContextSetupRequestMsg* msg = new InitialContextSetupRequestMsg();
......@@ -577,46 +579,47 @@ void amf_n2::handle_itti_message(itti_initial_context_setup_request& itti_msg) {
msg->setAmfUeNgapId(itti_msg.amf_ue_ngap_id);
msg->setRanUeNgapId(itti_msg.ran_ue_ngap_id);
Guami_t guami;
guami.mcc = amf_cfg.guami.mcc;
guami.mnc = amf_cfg.guami.mnc;
guami.regionID = amf_cfg.guami.regionID;
guami.AmfSetID = amf_cfg.guami.AmfSetID;
guami.mcc = amf_cfg.guami.mcc;
guami.mnc = amf_cfg.guami.mnc;
guami.regionID = amf_cfg.guami.regionID;
guami.AmfSetID = amf_cfg.guami.AmfSetID;
guami.AmfPointer = amf_cfg.guami.AmfPointer;
msg->setGuami(guami);
msg->setUESecurityCapability(0xe000, 0xe000, 0xe000,
0xe000); // TODO: remove hardcoded value
msg->setSecurityKey((uint8_t*)bdata(itti_msg.kgnb));
msg->setNasPdu((uint8_t*)bdata(itti_msg.nas), blength(itti_msg.nas));
msg->setUESecurityCapability(
0xe000, 0xe000, 0xe000,
0xe000); // TODO: remove hardcoded value
msg->setSecurityKey((uint8_t*) bdata(itti_msg.kgnb));
msg->setNasPdu((uint8_t*) bdata(itti_msg.nas), blength(itti_msg.nas));
std::vector<S_Nssai> list;
S_Nssai item;
item.sst = "01";
item.sd = "None";
item.sd = "None";
list.push_back(item);
msg->setAllowedNssai(list);
bdestroy(itti_msg.nas);
bdestroy(itti_msg.kgnb);
if (itti_msg.is_sr) {
bstring ueCapability = gc.get()->ue_radio_cap_ind;
uint8_t* uecap = (uint8_t*)calloc(1, blength(ueCapability) + 1);
memcpy(uecap, (uint8_t*)bdata(ueCapability), blength(ueCapability));
uint8_t* uecap = (uint8_t*) calloc(1, blength(ueCapability) + 1);
memcpy(uecap, (uint8_t*) bdata(ueCapability), blength(ueCapability));
uecap[blength(ueCapability)] = '\0';
msg->setUERadioCapability(uecap, (size_t)blength(ueCapability));
msg->setUERadioCapability(uecap, (size_t) blength(ueCapability));
free(uecap);
Logger::amf_n2().debug("Encoding parameters for Service Request");
if (itti_msg.is_pdu_exist) {
std::vector<PDUSessionResourceSetupRequestItem_t> list;
PDUSessionResourceSetupRequestItem_t item;
item.pduSessionId = itti_msg.pdu_session_id;
item.s_nssai.sst = "01";
item.s_nssai.sd = "";
item.pduSessionId = itti_msg.pdu_session_id;
item.s_nssai.sst = "01";
item.s_nssai.sd = "";
item.pduSessionNAS_PDU = NULL;
if (itti_msg.isn2sm_avaliable) {
bstring n2sm = itti_msg.n2sm;
if (blength(itti_msg.n2sm) != 0) {
item.pduSessionResourceSetupRequestTransfer.buf =
(uint8_t*)bdata(itti_msg.n2sm);
(uint8_t*) bdata(itti_msg.n2sm);
item.pduSessionResourceSetupRequestTransfer.size =
blength(itti_msg.n2sm);
} else {
......@@ -632,9 +635,9 @@ void amf_n2::handle_itti_message(itti_initial_context_setup_request& itti_msg) {
uint8_t buffer[10000];
int encoded_size = msg->encode2buffer(buffer, 10000);
bstring b = blk2bstr(buffer, encoded_size);
sctp_s_38412.sctp_send_msg(gc.get()->sctp_assoc_id,
unc.get()->sctp_stream_send, &b);
bstring b = blk2bstr(buffer, encoded_size);
sctp_s_38412.sctp_send_msg(
gc.get()->sctp_assoc_id, unc.get()->sctp_stream_send, &b);
}
//------------------------------------------------------------------------------
......@@ -643,15 +646,15 @@ void amf_n2::handle_itti_message(
std::shared_ptr<ue_ngap_context> unc;
unc = ran_ue_id_2_ue_ngap_context(itti_msg.ran_ue_ngap_id);
if (unc.get() == nullptr) {
Logger::amf_n2().error("Illegal UE with ran_ue_ngap_id (0x%x)",
itti_msg.ran_ue_ngap_id);
Logger::amf_n2().error(
"Illegal UE with ran_ue_ngap_id (0x%x)", itti_msg.ran_ue_ngap_id);
return;
}
std::shared_ptr<gnb_context> gc;
gc = assoc_id_2_gnb_context(unc.get()->gnb_assoc_id);
if (gc.get() == nullptr) {
Logger::amf_n2().error("Illegal gNB with assoc id (0x%x)",
unc.get()->gnb_assoc_id);
Logger::amf_n2().error(
"Illegal gNB with assoc id (0x%x)", unc.get()->gnb_assoc_id);
return;
}
PduSessionResourceSetupRequestMsg* psrsr =
......@@ -663,21 +666,22 @@ void amf_n2::handle_itti_message(
std::vector<PDUSessionResourceSetupRequestItem_t> list;
PDUSessionResourceSetupRequestItem_t item;
item.pduSessionId = itti_msg.pdu_session_id;
uint8_t* nas_pdu = (uint8_t*)calloc(1, blength(itti_msg.nas) + 1);
memcpy(nas_pdu, (uint8_t*)bdata(itti_msg.nas), blength(itti_msg.nas));
uint8_t* nas_pdu = (uint8_t*) calloc(1, blength(itti_msg.nas) + 1);
memcpy(nas_pdu, (uint8_t*) bdata(itti_msg.nas), blength(itti_msg.nas));
nas_pdu[blength(itti_msg.nas)] = '\0';
item.pduSessionNAS_PDU = nas_pdu;
item.sizeofpduSessionNAS_PDU = blength(itti_msg.nas);
item.s_nssai.sst = "01"; // TODO: get from N1N2msgTranferMsg
item.s_nssai.sd = ""; // TODO: get from N1N2msgTranferMsg
item.pduSessionNAS_PDU = nas_pdu;
item.sizeofpduSessionNAS_PDU = blength(itti_msg.nas);
item.s_nssai.sst = "01"; // TODO: get from N1N2msgTranferMsg
item.s_nssai.sd = ""; // TODO: get from N1N2msgTranferMsg
// Get NSSAI from PDU Session Context
std::shared_ptr<nas_context> nc;
if (amf_n1_inst->is_amf_ue_id_2_nas_context(itti_msg.amf_ue_ngap_id))
nc = amf_n1_inst->amf_ue_id_2_nas_context(itti_msg.amf_ue_ngap_id);
else {
Logger::amf_n2().warn("No existed nas_context with amf_ue_ngap_id(0x%x)",
itti_msg.amf_ue_ngap_id);
Logger::amf_n2().warn(
"No existed nas_context with amf_ue_ngap_id(0x%x)",
itti_msg.amf_ue_ngap_id);
// TODO:
}
string supi = "imsi-" + nc.get()->imsi;
......@@ -686,34 +690,34 @@ void amf_n2::handle_itti_message(
if (amf_n11_inst->is_supi_to_pdu_ctx(supi)) {
psc = amf_n11_inst->supi_to_pdu_ctx(supi);
} else {
Logger::amf_n2().warn("Cannot get pdu_session_context with SUPI (%s)",
supi.c_str());
Logger::amf_n2().warn(
"Cannot get pdu_session_context with SUPI (%s)", supi.c_str());
}
// item.s_nssai.sst = std::to_string(psc.get()->snssai.sST);
// item.s_nssai.sd = psc.get()->snssai.sD;
item.pduSessionResourceSetupRequestTransfer.buf =
(uint8_t*)bdata(itti_msg.n2sm);
(uint8_t*) bdata(itti_msg.n2sm);
item.pduSessionResourceSetupRequestTransfer.size = blength(itti_msg.n2sm);
list.push_back(item);
psrsr->setPduSessionResourceSetupRequestList(list);
size_t buffer_size = BUFFER_SIZE_512;
char* buffer = (char*)calloc(1, buffer_size);
int encoded_size = 0;
char* buffer = (char*) calloc(1, buffer_size);
int encoded_size = 0;
psrsr->encode2buffer_new(buffer, encoded_size);
#if DEBUG_IS_ON
Logger::amf_n2().debug("N2 SM buffer data: ");
for (int i = 0; i < encoded_size; i++) printf("%02x ", (char)buffer[i]);
for (int i = 0; i < encoded_size; i++) printf("%02x ", (char) buffer[i]);
#endif
Logger::amf_n2().debug(" (%d bytes) \n", encoded_size);
bstring b = blk2bstr(buffer, encoded_size);
sctp_s_38412.sctp_send_msg(gc.get()->sctp_assoc_id,
unc.get()->sctp_stream_send, &b);
sctp_s_38412.sctp_send_msg(
gc.get()->sctp_assoc_id, unc.get()->sctp_stream_send, &b);
// free memory
free_wrapper((void**)&buffer);
free_wrapper((void**) &buffer);
}
//------------------------------------------------------------------------------
......@@ -722,15 +726,15 @@ void amf_n2::handle_itti_message(
std::shared_ptr<ue_ngap_context> unc;
unc = ran_ue_id_2_ue_ngap_context(itti_msg.ran_ue_ngap_id);
if (unc.get() == nullptr) {
Logger::amf_n2().error("Illegal UE with ran_ue_ngap_id (0x%x)",
itti_msg.ran_ue_ngap_id);
Logger::amf_n2().error(
"Illegal UE with ran_ue_ngap_id (0x%x)", itti_msg.ran_ue_ngap_id);
return;
}
std::shared_ptr<gnb_context> gc;
gc = assoc_id_2_gnb_context(unc.get()->gnb_assoc_id);
if (gc.get() == nullptr) {
Logger::amf_n2().error("Illegal gNB with assoc id (0x%x)",
unc.get()->gnb_assoc_id);
Logger::amf_n2().error(
"Illegal gNB with assoc id (0x%x)", unc.get()->gnb_assoc_id);
return;
}
......@@ -740,8 +744,8 @@ void amf_n2::handle_itti_message(
release_cmd_msg->setMessageType();
release_cmd_msg->setAmfUeNgapId(itti_msg.amf_ue_ngap_id);
release_cmd_msg->setRanUeNgapId(itti_msg.ran_ue_ngap_id);
uint8_t* nas_pdu = (uint8_t*)calloc(1, blength(itti_msg.nas) + 1);
memcpy(nas_pdu, (uint8_t*)bdata(itti_msg.nas), blength(itti_msg.nas));
uint8_t* nas_pdu = (uint8_t*) calloc(1, blength(itti_msg.nas) + 1);
memcpy(nas_pdu, (uint8_t*) bdata(itti_msg.nas), blength(itti_msg.nas));
nas_pdu[blength(itti_msg.nas)] = '\0';
release_cmd_msg->setNasPdu(nas_pdu, blength(itti_msg.nas));
......@@ -750,35 +754,35 @@ void amf_n2::handle_itti_message(
item.pduSessionId = itti_msg.pdu_session_id;
item.pduSessionResourceReleaseCommandTransfer.buf =
(uint8_t*)bdata(itti_msg.n2sm);
(uint8_t*) bdata(itti_msg.n2sm);
item.pduSessionResourceReleaseCommandTransfer.size = blength(itti_msg.n2sm);
list.push_back(item);
release_cmd_msg->setPduSessionResourceToReleaseList(list);
size_t buffer_size = BUFFER_SIZE_512;
char* buffer = (char*)calloc(1, buffer_size);
int encoded_size = 0;
char* buffer = (char*) calloc(1, buffer_size);
int encoded_size = 0;
release_cmd_msg->encode2buffer_new(buffer, encoded_size);
#if DEBUG_IS_ON
Logger::amf_n2().debug("N2 SM buffer data: ");
for (int i = 0; i < encoded_size; i++) printf("%02x ", (char)buffer[i]);
for (int i = 0; i < encoded_size; i++) printf("%02x ", (char) buffer[i]);
#endif
Logger::amf_n2().debug(" (%d bytes) \n", encoded_size);
bstring b = blk2bstr(buffer, encoded_size);
sctp_s_38412.sctp_send_msg(gc.get()->sctp_assoc_id,
unc.get()->sctp_stream_send, &b);
sctp_s_38412.sctp_send_msg(
gc.get()->sctp_assoc_id, unc.get()->sctp_stream_send, &b);
// free memory
free_wrapper((void**)&nas_pdu);
free_wrapper((void**)&buffer);
free_wrapper((void**) &nas_pdu);
free_wrapper((void**) &buffer);
}
//------------------------------------------------------------------------------
void amf_n2::handle_itti_message(itti_ue_context_release_request& itti_msg) {
Logger::amf_n2().debug("Handling UE context release request ...");
unsigned long amf_ue_ngap_id = itti_msg.ueCtxRel->getAmfUeNgapId();
uint32_t ran_ue_ngap_id = itti_msg.ueCtxRel->getRanUeNgapId();
uint32_t ran_ue_ngap_id = itti_msg.ueCtxRel->getRanUeNgapId();
e_Ngap_CauseRadioNetwork cause;
itti_msg.ueCtxRel->getCauseRadioNetwork(cause);
UEContextReleaseCommandMsg* ueCtxRelCmd = new UEContextReleaseCommandMsg();
......@@ -787,7 +791,7 @@ void amf_n2::handle_itti_message(itti_ue_context_release_request& itti_msg) {
ueCtxRelCmd->setCauseRadioNetwork(cause);
uint8_t buffer[BUFFER_SIZE_512];
int encoded_size = ueCtxRelCmd->encode2buffer(buffer, BUFFER_SIZE_512);
bstring b = blk2bstr(buffer, encoded_size);
bstring b = blk2bstr(buffer, encoded_size);
sctp_s_38412.sctp_send_msg(itti_msg.assoc_id, itti_msg.stream, &b);
}
......@@ -797,35 +801,35 @@ void amf_n2::handle_itti_message(itti_ue_context_release_command& itti_msg) {
std::shared_ptr<ue_ngap_context> unc;
unc = ran_ue_id_2_ue_ngap_context(itti_msg.ran_ue_ngap_id);
if (unc.get() == nullptr) {
Logger::amf_n2().error("Illegal ue with ran_ue_ngap_id(0x%x)",
itti_msg.ran_ue_ngap_id);
Logger::amf_n2().error(
"Illegal ue with ran_ue_ngap_id(0x%x)", itti_msg.ran_ue_ngap_id);
return;
}
std::shared_ptr<gnb_context> gc;
gc = assoc_id_2_gnb_context(unc.get()->gnb_assoc_id);
if (gc.get() == nullptr) {
Logger::amf_n2().error("Illegal gnb with assoc id(0x%x)",
unc.get()->gnb_assoc_id);
Logger::amf_n2().error(
"Illegal gnb with assoc id(0x%x)", unc.get()->gnb_assoc_id);
return;
}
UEContextReleaseCommandMsg* ueCtxRelCmd = new UEContextReleaseCommandMsg();
ueCtxRelCmd->setMessageType();
ueCtxRelCmd->setUeNgapIdPair(itti_msg.amf_ue_ngap_id,
itti_msg.ran_ue_ngap_id);
ueCtxRelCmd->setUeNgapIdPair(
itti_msg.amf_ue_ngap_id, itti_msg.ran_ue_ngap_id);
if (itti_msg.cause.getChoiceOfCause() == Ngap_Cause_PR_nas) {
ueCtxRelCmd->setCauseNas((e_Ngap_CauseNas)itti_msg.cause.getValue());
ueCtxRelCmd->setCauseNas((e_Ngap_CauseNas) itti_msg.cause.getValue());
}
if (itti_msg.cause.getChoiceOfCause() == Ngap_Cause_PR_radioNetwork) {
ueCtxRelCmd->setCauseRadioNetwork(
(e_Ngap_CauseRadioNetwork)itti_msg.cause.getValue());
(e_Ngap_CauseRadioNetwork) itti_msg.cause.getValue());
}
uint8_t buffer[200];
int encoded_size = ueCtxRelCmd->encode2buffer(buffer, 200);
delete ueCtxRelCmd;
bstring b = blk2bstr(buffer, encoded_size);
sctp_s_38412.sctp_send_msg(gc.get()->sctp_assoc_id,
unc.get()->sctp_stream_send, &b);
sctp_s_38412.sctp_send_msg(
gc.get()->sctp_assoc_id, unc.get()->sctp_stream_send, &b);
}
//------------------------------------------------------------------------------
......@@ -833,8 +837,8 @@ void amf_n2::handle_itti_message(
itti_ue_radio_capability_indication& itti_msg) {
std::shared_ptr<gnb_context> gc;
if (!is_assoc_id_2_gnb_context(itti_msg.assoc_id)) {
Logger::amf_n2().error("No existed gNB context with assoc_id (%d)",
itti_msg.assoc_id);
Logger::amf_n2().error(
"No existed gNB context with assoc_id (%d)", itti_msg.assoc_id);
return;
}
gc = assoc_id_2_gnb_context(itti_msg.assoc_id);
......@@ -847,19 +851,19 @@ void amf_n2::handle_itti_message(
if (!itti_msg.ueRadioCap->getUERadioCapability(ue_radio_cap, size)) {
Logger::amf_n2().warn("No IE UERadioCapability");
}
gc.get()->ue_radio_cap_ind = blk2bstr(ue_radio_cap, (int)size);
gc.get()->ue_radio_cap_ind = blk2bstr(ue_radio_cap, (int) size);
}
//------------------------------------------------------------------------------
void amf_n2::handle_itti_message(itti_handover_required& itti_msg) {
unsigned long amf_ue_ngap_id = itti_msg.handvoerRequ->getAmfUeNgapId();
uint32_t ran_ue_ngap_id = itti_msg.handvoerRequ->getRanUeNgapId();
ran_id_Global = ran_ue_ngap_id;
source_assoc_id = itti_msg.assoc_id;
uint32_t ran_ue_ngap_id = itti_msg.handvoerRequ->getRanUeNgapId();
ran_id_Global = ran_ue_ngap_id;
source_assoc_id = itti_msg.assoc_id;
std::shared_ptr<gnb_context> gc;
if (!is_assoc_id_2_gnb_context(itti_msg.assoc_id)) {
Logger::amf_n2().error("gnb with assoc_id(%d) is illegal",
itti_msg.assoc_id);
Logger::amf_n2().error(
"gnb with assoc_id(%d) is illegal", itti_msg.assoc_id);
return;
}
gc = assoc_id_2_gnb_context(itti_msg.assoc_id);
......@@ -871,8 +875,8 @@ void amf_n2::handle_itti_message(itti_handover_required& itti_msg) {
return;
}
if (!is_ran_ue_id_2_ue_ngap_context(ran_ue_ngap_id)) {
Logger::amf_n2().error("no ue ngap context with ran_ue_ngap_id(%d)",
ran_ue_ngap_id);
Logger::amf_n2().error(
"no ue ngap context with ran_ue_ngap_id(%d)", ran_ue_ngap_id);
return;
}
unc = ran_ue_id_2_ue_ngap_context(ran_ue_ngap_id);
......@@ -908,7 +912,7 @@ void amf_n2::handle_itti_message(itti_handover_required& itti_msg) {
}
GlobalgNBId* TargetGlobalgNBId = new GlobalgNBId();
itti_msg.handvoerRequ->getGlobalRanNodeId(TargetGlobalgNBId);
PlmnId* plmn = new PlmnId();
PlmnId* plmn = new PlmnId();
GNB_ID* gnbid = new GNB_ID();
TargetGlobalgNBId->getGlobalgNBId(plmn, gnbid);
string mcc, mnc;
......@@ -921,13 +925,14 @@ void amf_n2::handle_itti_message(itti_handover_required& itti_msg) {
TAI* tai = new TAI();
itti_msg.handvoerRequ->getTAI(tai);
PlmnId* plmnOfTAI = new PlmnId();
TAC* tac = new TAC();
TAC* tac = new TAC();
tai->getTAI(plmnOfTAI, tac);
string mccOfselectTAI, mncOfselectTAI;
plmn->getMcc(mccOfselectTAI);
plmn->getMnc(mncOfselectTAI);
printf("handover required:Target ID selectedTAI PLmn=mcc%s mnc%s tac=%x\n",
mccOfselectTAI.c_str(), mncOfselectTAI.c_str(), tac->getTac());
printf(
"handover required:Target ID selectedTAI PLmn=mcc%s mnc%s tac=%x\n",
mccOfselectTAI.c_str(), mncOfselectTAI.c_str(), tac->getTac());
std::vector<PDUSessionResourceItem_t> List_HORqd;
if (!itti_msg.handvoerRequ->getPDUSessionResourceList(List_HORqd)) {
Logger::ngap().error(
......@@ -956,15 +961,15 @@ void amf_n2::handle_itti_message(itti_handover_required& itti_msg) {
Allowed_Nssai.push_back(s_nssai);
// handoverrequest->setAllowedNSSAI(Allowed_Nssai);
Guami_t guami;
guami.mcc = amf_cfg.guami.mcc;
guami.mnc = amf_cfg.guami.mnc;
guami.regionID = amf_cfg.guami.regionID;
guami.AmfSetID = amf_cfg.guami.AmfSetID;
guami.AmfPointer = amf_cfg.guami.AmfPointer;
PlmnId* m_plmnId = new PlmnId();
guami.mcc = amf_cfg.guami.mcc;
guami.mnc = amf_cfg.guami.mnc;
guami.regionID = amf_cfg.guami.regionID;
guami.AmfSetID = amf_cfg.guami.AmfSetID;
guami.AmfPointer = amf_cfg.guami.AmfPointer;
PlmnId* m_plmnId = new PlmnId();
AMFRegionID* m_aMFRegionID = new AMFRegionID();
AMFSetID* m_aMFSetID = new AMFSetID();
AMFPointer* m_aMFPointer = new AMFPointer();
AMFSetID* m_aMFSetID = new AMFSetID();
AMFPointer* m_aMFPointer = new AMFPointer();
m_plmnId->setMccMnc(guami.mcc, guami.mnc);
m_aMFRegionID->setAMFRegionID(guami.regionID);
m_aMFSetID->setAMFSetID(guami.AmfSetID);
......@@ -976,13 +981,13 @@ void amf_n2::handle_itti_message(itti_handover_required& itti_msg) {
std::shared_ptr<nas_context> nc =
amf_n1_inst->amf_ue_id_2_nas_context(amf_ue_ngap_id);
nas_secu_ctx* secu = nc.get()->security_ctx;
uint8_t* kamf = nc.get()->kamf[secu->vector_pointer];
uint8_t* kamf = nc.get()->kamf[secu->vector_pointer];
uint8_t kgnb[32];
uint32_t ulcount = secu->ul_count.seq_num | (secu->ul_count.overflow << 8);
Logger::amf_n1().debug("uplink count(%d)", secu->ul_count.seq_num);
uint8_t knh[32];
Authentication_5gaka::handover_ncc_derive_knh(ulcount, 0x01, kamf, kgnb, knh,
2);
Authentication_5gaka::handover_ncc_derive_knh(
ulcount, 0x01, kamf, kgnb, knh, 2);
/*Authentication_5gaka::derive_kgnb(ulcount, 0x01, kamf, kgnb);
print_buffer("amf_n1", "HO:kgnb", kgnb, 32);
......@@ -1005,21 +1010,22 @@ void amf_n2::handle_itti_message(itti_handover_required& itti_msg) {
print_buffer("amf_n1", "Knh2", knh2, 32);
bstring knh_bs = blk2bstr(knh2, 32);*/
bstring knh_bs = blk2bstr(knh, 32);
handoverrequest->setSecurityContext(2 /*NCC count*/, (uint8_t*)bdata(knh_bs));
handoverrequest->setSecurityContext(
2 /*NCC count*/, (uint8_t*) bdata(knh_bs));
// handoverrequest->setSourceToTarget_TransparentContainer(sourceTotarget);
string supi = "imsi-" + nc.get()->imsi;
std::shared_ptr<pdu_session_context> psc =
amf_n11_inst->supi_to_pdu_ctx(supi);
std::vector<PDUSessionResourceSetupRequestItem_t> list;
PDUSessionResourceSetupRequestItem_t item;
item.pduSessionId = psc.get()->pdu_session_id;
item.s_nssai.sst = "01";
item.s_nssai.sd = "";
item.pduSessionId = psc.get()->pdu_session_id;
item.s_nssai.sst = "01";
item.s_nssai.sd = "";
item.pduSessionNAS_PDU = NULL;
bstring n2sm = psc.get()->n2sm;
bstring n2sm = psc.get()->n2sm;
if (blength(psc.get()->n2sm) != 0) {
item.pduSessionResourceSetupRequestTransfer.buf =
(uint8_t*)bdata(psc.get()->n2sm);
(uint8_t*) bdata(psc.get()->n2sm);
item.pduSessionResourceSetupRequestTransfer.size = blength(psc.get()->n2sm);
} else {
Logger::amf_n2().error("n2sm empty!");
......@@ -1032,9 +1038,9 @@ void amf_n2::handle_itti_message(itti_handover_required& itti_msg) {
handoverrequest->setGUAMI(m_plmnId, m_aMFRegionID, m_aMFSetID, m_aMFPointer);
uint8_t buffer[20240];
int encoded_size = handoverrequest->encode2buffer(buffer, 20240);
bstring b = blk2bstr(buffer, encoded_size);
bstring b = blk2bstr(buffer, encoded_size);
std::shared_ptr<gnb_context> gc_target;
gc_target = gnb_id_2_gnb_context(gnbid->getValue());
gc_target = gnb_id_2_gnb_context(gnbid->getValue());
downlink_sctp_assoc_id = gc_target.get()->sctp_assoc_id;
sctp_s_38412.sctp_send_msg(gc_target.get()->sctp_assoc_id, 0, &b);
}
......@@ -1042,15 +1048,15 @@ void amf_n2::handle_itti_message(itti_handover_required& itti_msg) {
//------------------------------------------------------------------------------
void amf_n2::handle_itti_message(itti_handover_request_Ack& itti_msg) {
unsigned long amf_ue_ngap_id = itti_msg.handoverrequestAck->getAmfUeNgapId();
uint32_t ran_ue_ngap_id = itti_msg.handoverrequestAck->getRanUeNgapId();
AMF_TARGET_ran_id_global = ran_ue_ngap_id;
uint32_t ran_ue_ngap_id = itti_msg.handoverrequestAck->getRanUeNgapId();
AMF_TARGET_ran_id_global = ran_ue_ngap_id;
Logger::amf_n2().error(
"handover request Ack ran_ue_ngap_id(0x%d) amf_ue_ngap_id(%d)",
ran_ue_ngap_id, amf_ue_ngap_id);
std::shared_ptr<gnb_context> gc;
if (!is_assoc_id_2_gnb_context(itti_msg.assoc_id)) {
Logger::amf_n2().error("gnb with assoc_id(%d) is illegal",
itti_msg.assoc_id);
Logger::amf_n2().error(
"gnb with assoc_id(%d) is illegal", itti_msg.assoc_id);
return;
}
gc = assoc_id_2_gnb_context(itti_msg.assoc_id);
......@@ -1071,8 +1077,9 @@ void amf_n2::handle_itti_message(itti_handover_request_Ack& itti_msg) {
cout << list[0].handoverRequestAcknowledgeTransfer.buf << endl;
cout << list[0].handoverRequestAcknowledgeTransfer.size << endl;
memcpy(buf, list[0].handoverRequestAcknowledgeTransfer.buf,
list[0].handoverRequestAcknowledgeTransfer.size);
memcpy(
buf, list[0].handoverRequestAcknowledgeTransfer.buf,
list[0].handoverRequestAcknowledgeTransfer.size);
if (!PDUHandoverRequestAckTransfer->decodefromHandoverRequestAckTransfer(
buf, list[0].handoverRequestAcknowledgeTransfer.size)) {
cout << "decode handoverrequestacktransfer error" << endl;
......@@ -1087,13 +1094,13 @@ void amf_n2::handle_itti_message(itti_handover_request_Ack& itti_msg) {
string n3_ip_address;
uint32_t teid;
n3_ip_address = gtptunnel->ip_address;
teid = gtptunnel->gtp_teid;
teid = gtptunnel->gtp_teid;
std::vector<QosFlowLItemWithDataForwarding_t> QosFlowWithDataForwardinglist;
PDUHandoverRequestAckTransfer->getqosFlowSetupResponseList(
QosFlowWithDataForwardinglist);
long qosflowidentifiervalue;
qosflowidentifiervalue =
(long)QosFlowWithDataForwardinglist[0].qosFlowIdentifier;
(long) QosFlowWithDataForwardinglist[0].qosFlowIdentifier;
cout << "QFI get is " << qosflowidentifiervalue << endl;
/**************************add-end**************************/
......@@ -1126,7 +1133,7 @@ void amf_n2::handle_itti_message(itti_handover_request_Ack& itti_msg) {
new PDUSessionResourceHandoverCommandTransfer();
handovercommandtransfer->setQosFlowToBeForwardedList(forward_list);
GtpTunnel_t uptlinfo;
uptlinfo.gtp_teid = teid;
uptlinfo.gtp_teid = teid;
uptlinfo.ip_address = n3_ip_address;
handovercommandtransfer->setUPTransportLayerInformation(uptlinfo);
// handovercommand->setTargetToSource_TransparentContainer(targetTosource);
......@@ -1135,16 +1142,16 @@ void amf_n2::handle_itti_message(itti_handover_request_Ack& itti_msg) {
handovercommandtransfer->encodePDUSessionResourceHandoverCommandTransfer(
buffer2, 500);
OCTET_STRING_t OCT_handovercommandtransfer;
OCT_handovercommandtransfer.buf = buffer2;
OCT_handovercommandtransfer.buf = buffer2;
OCT_handovercommandtransfer.size = encoded_size2;
item.HandoverCommandTransfer = OCT_handovercommandtransfer;
item.HandoverCommandTransfer = OCT_handovercommandtransfer;
handover_list.push_back(item);
handovercommand->setPduSessionResourceHandoverList(handover_list);
handovercommand->setTargetToSource_TransparentContainer(targetTosource);
/**************************setPduSessionResourceHandoverList_PDYSessionID_handovercommandtransfer-end**************************/
uint8_t buffer[10240];
int encoded_size = handovercommand->encode2buffer(buffer, 10240);
bstring b = blk2bstr(buffer, encoded_size);
bstring b = blk2bstr(buffer, encoded_size);
std::shared_ptr<ue_ngap_context> unc;
if (!is_ran_ue_id_2_ue_ngap_context(ran_id_Global)) {
Logger::amf_n2().debug(
......@@ -1165,17 +1172,17 @@ void amf_n2::handle_itti_message(itti_handover_request_Ack& itti_msg) {
//------------------------------------------------------------------------------
void amf_n2::handle_itti_message(itti_handover_notify& itti_msg) {
unsigned long amf_ue_ngap_id = itti_msg.handovernotify->getAmfUeNgapId();
uint32_t ran_ue_ngap_id = itti_msg.handovernotify->getRanUeNgapId();
uint32_t ran_ue_ngap_id = itti_msg.handovernotify->getRanUeNgapId();
Logger::amf_n2().error(
"handover notify ran_ue_ngap_id(0x%d) amf_ue_ngap_id(%d)", ran_ue_ngap_id,
amf_ue_ngap_id);
if (!is_assoc_id_2_gnb_context(itti_msg.assoc_id)) {
Logger::amf_n2().error("gnb with assoc_id(%d) is illegal",
itti_msg.assoc_id);
Logger::amf_n2().error(
"gnb with assoc_id(%d) is illegal", itti_msg.assoc_id);
return;
}
NrCgi_t NR_CGI = {};
Tai_t TAI = {};
Tai_t TAI = {};
if (!itti_msg.handovernotify->getUserLocationInfoNR(NR_CGI, TAI)) {
Logger::amf_n2().debug("Missing IE UserLocationInformationNR");
return;
......@@ -1188,7 +1195,7 @@ void amf_n2::handle_itti_message(itti_handover_notify& itti_msg) {
Ngap_CauseRadioNetwork_successful_handover);
uint8_t buffer[10240];
int encoded_size = ueContextReleaseCommand->encode2buffer(buffer, 10240);
bstring b = blk2bstr(buffer, encoded_size);
bstring b = blk2bstr(buffer, encoded_size);
std::shared_ptr<nas_context> nc =
amf_n1_inst->amf_ue_id_2_nas_context(amf_ue_ngap_id);
std::shared_ptr<ue_ngap_context> ngc =
......@@ -1223,37 +1230,37 @@ void amf_n2::handle_itti_message(itti_handover_notify& itti_msg) {
//------------------------------------------------------------------------------
void amf_n2::handle_itti_message(itti_uplinkranstatsutransfer& itti_msg) {
unsigned long amf_ue_ngap_id = itti_msg.uplinkrantransfer->getAmfUeNgapId();
Logger::amf_n2().error("uplinkranstatustransfer amf_ue_ngap_id(%d)",
amf_ue_ngap_id);
Logger::amf_n2().error(
"uplinkranstatustransfer amf_ue_ngap_id(%d)", amf_ue_ngap_id);
if (!is_assoc_id_2_gnb_context(itti_msg.assoc_id)) {
Logger::amf_n2().error("gnb with assoc_id(%d) is illegal",
itti_msg.assoc_id);
Logger::amf_n2().error(
"gnb with assoc_id(%d) is illegal", itti_msg.assoc_id);
return;
}
RANStatusTransferTransparentContainer* ran_status_transfer =
(RANStatusTransferTransparentContainer*)calloc(
(RANStatusTransferTransparentContainer*) calloc(
1, sizeof(RANStatusTransferTransparentContainer));
itti_msg.uplinkrantransfer->getRANStatusTransfer_TransparentContainer(
ran_status_transfer);
dRBSubjectList* amf_m_list =
(dRBSubjectList*)calloc(1, sizeof(dRBSubjectList));
(dRBSubjectList*) calloc(1, sizeof(dRBSubjectList));
ran_status_transfer->getdRBSubject_list(amf_m_list);
dRBSubjectItem* amf_m_item =
(dRBSubjectItem*)calloc(1, sizeof(dRBSubjectItem));
(dRBSubjectItem*) calloc(1, sizeof(dRBSubjectItem));
int numofitem = 0;
amf_m_list->getdRBSubjectItem(amf_m_item, numofitem);
dRBStatusDL* amf_DL = (dRBStatusDL*)calloc(1, sizeof(dRBStatusDL));
dRBStatusUL* amf_UL = (dRBStatusUL*)calloc(1, sizeof(dRBStatusUL));
Ngap_DRB_ID_t* amf_dRB_id = (Ngap_DRB_ID_t*)calloc(1, sizeof(Ngap_DRB_ID_t));
dRBStatusDL* amf_DL = (dRBStatusDL*) calloc(1, sizeof(dRBStatusDL));
dRBStatusUL* amf_UL = (dRBStatusUL*) calloc(1, sizeof(dRBStatusUL));
Ngap_DRB_ID_t* amf_dRB_id = (Ngap_DRB_ID_t*) calloc(1, sizeof(Ngap_DRB_ID_t));
amf_m_item->getdRBSubjectItem(amf_dRB_id, amf_UL, amf_DL);
dRBStatusUL18* UL18 = (dRBStatusUL18*)calloc(1, sizeof(dRBStatusUL18));
DRBStatusDL18* DL18 = (DRBStatusDL18*)calloc(1, sizeof(DRBStatusDL18));
dRBStatusUL18* UL18 = (dRBStatusUL18*) calloc(1, sizeof(dRBStatusUL18));
DRBStatusDL18* DL18 = (DRBStatusDL18*) calloc(1, sizeof(DRBStatusDL18));
amf_DL->getDRBStatusDL18(DL18);
amf_UL->getdRBStatusUL(UL18);
COUNTValueForPDCP_SN18* amf_UL_value =
(COUNTValueForPDCP_SN18*)calloc(1, sizeof(COUNTValueForPDCP_SN18));
(COUNTValueForPDCP_SN18*) calloc(1, sizeof(COUNTValueForPDCP_SN18));
COUNTValueForPDCP_SN18* amf_DL_value =
(COUNTValueForPDCP_SN18*)calloc(1, sizeof(COUNTValueForPDCP_SN18));
(COUNTValueForPDCP_SN18*) calloc(1, sizeof(COUNTValueForPDCP_SN18));
UL18->getcountvalue(amf_UL_value);
DL18->getcountvalue(amf_DL_value);
long amf_ul_pdcp;
......@@ -1273,7 +1280,7 @@ void amf_n2::handle_itti_message(itti_uplinkranstatsutransfer& itti_msg) {
amf_drb_id, amf_ul_pdcp, amf_hfn_ul_pdcp, amf_dl_pdcp, amf_hfn_dl_pdcp);
uint8_t buffer[1024];
int encode_size = downLinkranstatustransfer->encodetobuffer(buffer, 1024);
bstring b = blk2bstr(buffer, encode_size);
bstring b = blk2bstr(buffer, encode_size);
// std::shared_ptr<ue_ngap_context> ngc =
// ran_ue_id_2_ue_ngap_context(AMF_TARGET_ran_id_global);
sctp_s_38412.sctp_send_msg(downlink_sctp_assoc_id, 0, &b);
......@@ -1306,8 +1313,9 @@ void amf_n2::set_ran_ue_ngap_id_2_ue_ngap_context(
bool amf_n2::verifyPlmn(vector<SupportedItem_t> list) {
for (int i = 0; i < amf_cfg.plmn_list.size(); i++) {
for (int j = 0; j < list.size(); j++) {
Logger::amf_n2().debug("TAC configured %d, TAC received %d",
amf_cfg.plmn_list[i].tac, list[j].tac);
Logger::amf_n2().debug(
"TAC configured %d, TAC received %d", amf_cfg.plmn_list[i].tac,
list[j].tac);
if (amf_cfg.plmn_list[i].tac != list[j].tac) {
continue;
}
......@@ -1329,8 +1337,9 @@ std::vector<SupportedItem_t> amf_n2::get_common_plmn(
for (int i = 0; i < amf_cfg.plmn_list.size(); i++) {
for (int j = 0; j < list.size(); j++) {
Logger::amf_n2().debug("TAC configured %d, TAC received %d",
amf_cfg.plmn_list[i].tac, list[j].tac);
Logger::amf_n2().debug(
"TAC configured %d, TAC received %d", amf_cfg.plmn_list[i].tac,
list[j].tac);
if (amf_cfg.plmn_list[i].tac != list[j].tac) {
continue;
}
......
......@@ -43,34 +43,34 @@ namespace amf_application {
class amf_n2 : public ngap::ngap_app {
public:
amf_n2(const std::string &address, const uint16_t port_num);
amf_n2(const std::string& address, const uint16_t port_num);
~amf_n2();
void handle_itti_message(itti_new_sctp_association &new_assoc);
void handle_itti_message(itti_ng_setup_request &ngsetupreq);
void handle_itti_message(itti_initial_ue_message &init_ue_msg);
void handle_itti_message(itti_ul_nas_transport &ul_nas_transport);
void handle_itti_message(itti_dl_nas_transport &dl_nas_transport);
void handle_itti_message(itti_initial_context_setup_request &itti_msg);
void handle_itti_message(itti_pdu_session_resource_setup_request &itti_msg);
void handle_itti_message(itti_ue_context_release_request &itti_msg);
void handle_itti_message(itti_ue_radio_capability_indication &itti_msg);
void handle_itti_message(itti_ue_context_release_command &itti_msg);
void handle_itti_message(itti_pdu_session_resource_release_command &itti_msg);
void handle_itti_message(itti_handover_required &itti_msg);
void handle_itti_message(itti_handover_request_Ack &itti_msg);
void handle_itti_message(itti_handover_notify &itti_msg);
void handle_itti_message(itti_uplinkranstatsutransfer &itti_msg);
void handle_itti_message(itti_new_sctp_association& new_assoc);
void handle_itti_message(itti_ng_setup_request& ngsetupreq);
void handle_itti_message(itti_initial_ue_message& init_ue_msg);
void handle_itti_message(itti_ul_nas_transport& ul_nas_transport);
void handle_itti_message(itti_dl_nas_transport& dl_nas_transport);
void handle_itti_message(itti_initial_context_setup_request& itti_msg);
void handle_itti_message(itti_pdu_session_resource_setup_request& itti_msg);
void handle_itti_message(itti_ue_context_release_request& itti_msg);
void handle_itti_message(itti_ue_radio_capability_indication& itti_msg);
void handle_itti_message(itti_ue_context_release_command& itti_msg);
void handle_itti_message(itti_pdu_session_resource_release_command& itti_msg);
void handle_itti_message(itti_handover_required& itti_msg);
void handle_itti_message(itti_handover_request_Ack& itti_msg);
void handle_itti_message(itti_handover_notify& itti_msg);
void handle_itti_message(itti_uplinkranstatsutransfer& itti_msg);
bool verifyPlmn(std::vector<SupportedItem_t> list);
std::vector<SupportedItem_t> get_common_plmn(
std::vector<SupportedItem_t> list);
std::shared_ptr<ue_ngap_context> ran_ue_id_2_ue_ngap_context(
const uint32_t &ran_ue_ngap_id) const;
const uint32_t& ran_ue_ngap_id) const;
bool is_ran_ue_id_2_ue_ngap_context(const uint32_t &ran_ue_ngap_id) const;
bool is_ran_ue_id_2_ue_ngap_context(const uint32_t& ran_ue_ngap_id) const;
void set_ran_ue_ngap_id_2_ue_ngap_context(
const uint32_t &ran_ue_ngap_id, std::shared_ptr<ue_ngap_context> unc);
const uint32_t& ran_ue_ngap_id, std::shared_ptr<ue_ngap_context> unc);
private:
std::map<uint32_t, std::shared_ptr<ue_ngap_context>>
......
......@@ -79,7 +79,7 @@ void statistics::display() {
"UE NGAP ID | AMF UE ID | PLMN |Cell ID|");
int i = 0;
for (auto const &ue : ue_infos) {
for (auto const& ue : ue_infos) {
Logger::amf_app().info(
"|%7d|%22s|%18s|%15s|%16d|%11d|%9s|%7d|", i + 1,
ue.second.registerStatus.c_str(), ue.second.imsi.c_str(),
......@@ -96,12 +96,12 @@ void statistics::display() {
//------------------------------------------------------------------------------
statistics::statistics() {
gNB_connected = 0;
UE_connected = 0;
UE_registred = 0;
UE_connected = 0;
UE_registred = 0;
}
//------------------------------------------------------------------------------
void statistics::update_ue_info(const ue_info_t &ue_info) {
void statistics::update_ue_info(const ue_info_t& ue_info) {
if (!(ue_info.imsi.size() > 0)) {
Logger::amf_app().warn("Update UE Info with invalid IMSI");
}
......@@ -109,28 +109,29 @@ void statistics::update_ue_info(const ue_info_t &ue_info) {
if (ue_infos.count(ue_info.imsi) > 0) {
ue_infos.erase(ue_info.imsi);
ue_infos.insert(std::pair<std::string, ue_info_t>(ue_info.imsi, ue_info));
Logger::amf_app().debug("Update UE Info (IMSI %s) success",
ue_info.imsi.c_str());
Logger::amf_app().debug(
"Update UE Info (IMSI %s) success", ue_info.imsi.c_str());
} else {
ue_infos.insert(std::pair<std::string, ue_info_t>(ue_info.imsi, ue_info));
Logger::amf_app().debug("Add UE Info (IMSI %s) success",
ue_info.imsi.c_str());
Logger::amf_app().debug(
"Add UE Info (IMSI %s) success", ue_info.imsi.c_str());
}
}
//------------------------------------------------------------------------------
void statistics::update_5gmm_state(const std::string &imsi,
const std::string &state) {
void statistics::update_5gmm_state(
const std::string& imsi, const std::string& state) {
if (ue_infos.count(imsi) > 0) {
ue_info_t ue_info = ue_infos.at(imsi);
ue_info_t ue_info = ue_infos.at(imsi);
ue_info.registerStatus = state;
ue_infos.erase(ue_info.imsi);
ue_infos.insert(std::pair<std::string, ue_info_t>(imsi, ue_info));
Logger::amf_app().debug("Update UE State (IMSI %s, State %s) success",
imsi.c_str(), state.c_str());
Logger::amf_app().debug(
"Update UE State (IMSI %s, State %s) success", imsi.c_str(),
state.c_str());
} else {
Logger::amf_app().warn("Update UE State (IMSI %s), UE does not exist!",
imsi.c_str());
Logger::amf_app().warn(
"Update UE State (IMSI %s), UE does not exist!", imsi.c_str());
}
}
......
......@@ -63,8 +63,8 @@ class statistics {
void display();
statistics();
~statistics();
void update_ue_info(const ue_info_t &ue_info);
void update_5gmm_state(const std::string &imsi, const std::string &state);
void update_ue_info(const ue_info_t& ue_info);
void update_5gmm_state(const std::string& imsi, const std::string& state);
public:
uint32_t gNB_connected;
......
......@@ -38,9 +38,9 @@ extern amf_config amf_cfg;
//------------------------------------------------------------------------------
bool amf_n1::get_mysql_auth_info(
std::string imsi,
mysql_auth_info_t
&resp) { // openair-cn/tree/v0.5.0/src/oai_hss/db/db_connector.c
MYSQL_RES *res;
mysql_auth_info_t&
resp) { // openair-cn/tree/v0.5.0/src/oai_hss/db/db_connector.c
MYSQL_RES* res;
MYSQL_ROW row;
std::string query;
......@@ -54,8 +54,8 @@ bool amf_n1::get_mysql_auth_info(
pthread_mutex_lock(&db_desc->db_cs_mutex);
if (mysql_query(db_desc->db_conn, query.c_str())) {
pthread_mutex_unlock(&db_desc->db_cs_mutex);
Logger::amf_n1().error("Query execution failed: %s\n",
mysql_error(db_desc->db_conn));
Logger::amf_n1().error(
"Query execution failed: %s\n", mysql_error(db_desc->db_conn));
return false;
}
res = mysql_store_result(db_desc->db_conn);
......@@ -71,13 +71,13 @@ bool amf_n1::get_mysql_auth_info(
}
memcpy(resp.key, row[0], KEY_LENGTH);
uint64_t sqn = 0;
sqn = atoll(row[1]);
resp.sqn[0] = (sqn & (255UL << 40)) >> 40;
resp.sqn[1] = (sqn & (255UL << 32)) >> 32;
resp.sqn[2] = (sqn & (255UL << 24)) >> 24;
resp.sqn[3] = (sqn & (255UL << 16)) >> 16;
resp.sqn[4] = (sqn & (255UL << 8)) >> 8;
resp.sqn[5] = (sqn & 0xff);
sqn = atoll(row[1]);
resp.sqn[0] = (sqn & (255UL << 40)) >> 40;
resp.sqn[1] = (sqn & (255UL << 32)) >> 32;
resp.sqn[2] = (sqn & (255UL << 24)) >> 24;
resp.sqn[3] = (sqn & (255UL << 16)) >> 16;
resp.sqn[4] = (sqn & (255UL << 8)) >> 8;
resp.sqn[5] = (sqn & 0xff);
memcpy(resp.rand, row[2], RAND_LENGTH);
memcpy(resp.opc, row[3], KEY_LENGTH);
}
......@@ -88,24 +88,25 @@ bool amf_n1::get_mysql_auth_info(
//------------------------------------------------------------------------------
bool amf_n1::connect_to_mysql() {
const int mysql_reconnect_val = 1;
db_desc = (database_t *)calloc(1, sizeof(database_t));
db_desc = (database_t*) calloc(1, sizeof(database_t));
if (!db_desc) {
Logger::amf_n1().error(
"An error occurs when allocating memory for DB_DESC");
return false;
}
pthread_mutex_init(&db_desc->db_cs_mutex, NULL);
db_desc->server = amf_cfg.auth_para.mysql_server;
db_desc->user = amf_cfg.auth_para.mysql_user;
db_desc->server = amf_cfg.auth_para.mysql_server;
db_desc->user = amf_cfg.auth_para.mysql_user;
db_desc->password = amf_cfg.auth_para.mysql_pass;
db_desc->database = amf_cfg.auth_para.mysql_db;
db_desc->db_conn = mysql_init(NULL);
db_desc->db_conn = mysql_init(NULL);
mysql_options(db_desc->db_conn, MYSQL_OPT_RECONNECT, &mysql_reconnect_val);
if (!mysql_real_connect(db_desc->db_conn, db_desc->server.c_str(),
db_desc->user.c_str(), db_desc->password.c_str(),
db_desc->database.c_str(), 0, NULL, 0)) {
Logger::amf_n1().error("An error occurred while connecting to db: %s",
mysql_error(db_desc->db_conn));
if (!mysql_real_connect(
db_desc->db_conn, db_desc->server.c_str(), db_desc->user.c_str(),
db_desc->password.c_str(), db_desc->database.c_str(), 0, NULL, 0)) {
Logger::amf_n1().error(
"An error occurred while connecting to db: %s",
mysql_error(db_desc->db_conn));
mysql_thread_end();
return false;
}
......@@ -114,12 +115,12 @@ bool amf_n1::connect_to_mysql() {
}
//------------------------------------------------------------------------------
void amf_n1::mysql_push_rand_sqn(std::string imsi, uint8_t *rand_p,
uint8_t *sqn) {
void amf_n1::mysql_push_rand_sqn(
std::string imsi, uint8_t* rand_p, uint8_t* sqn) {
int status = 0;
MYSQL_RES *res;
MYSQL_RES* res;
char query[1000];
int query_length = 0;
int query_length = 0;
uint64_t sqn_decimal = 0;
if (!db_desc->db_conn) {
Logger::amf_n1().error("Cannot connect to MySQL DB");
......@@ -129,8 +130,8 @@ void amf_n1::mysql_push_rand_sqn(std::string imsi, uint8_t *rand_p,
Logger::amf_n1().error("Need sqn and rand");
return;
}
sqn_decimal = ((uint64_t)sqn[0] << 40) | ((uint64_t)sqn[1] << 32) |
((uint64_t)sqn[2] << 24) | (sqn[3] << 16) | (sqn[4] << 8) |
sqn_decimal = ((uint64_t) sqn[0] << 40) | ((uint64_t) sqn[1] << 32) |
((uint64_t) sqn[2] << 24) | (sqn[3] << 16) | (sqn[4] << 8) |
sqn[5];
query_length = sprintf(query, "UPDATE `users` SET `rand`=UNHEX('");
for (int i = 0; i < RAND_LENGTH; i++) {
......@@ -144,8 +145,8 @@ void amf_n1::mysql_push_rand_sqn(std::string imsi, uint8_t *rand_p,
pthread_mutex_lock(&db_desc->db_cs_mutex);
if (mysql_query(db_desc->db_conn, query)) {
pthread_mutex_unlock(&db_desc->db_cs_mutex);
Logger::amf_n1().error("Query execution failed: %s",
mysql_error(db_desc->db_conn));
Logger::amf_n1().error(
"Query execution failed: %s", mysql_error(db_desc->db_conn));
return;
}
do {
......@@ -154,8 +155,9 @@ void amf_n1::mysql_push_rand_sqn(std::string imsi, uint8_t *rand_p,
mysql_free_result(res);
} else {
if (mysql_field_count(db_desc->db_conn) == 0) {
Logger::amf_n1().error("[MySQL] %lld rows affected",
mysql_affected_rows(db_desc->db_conn));
Logger::amf_n1().error(
"[MySQL] %lld rows affected",
mysql_affected_rows(db_desc->db_conn));
} else { /* some error occurred */
Logger::amf_n1().error("Could not retrieve result set");
break;
......@@ -171,22 +173,22 @@ void amf_n1::mysql_push_rand_sqn(std::string imsi, uint8_t *rand_p,
//------------------------------------------------------------------------------
void amf_n1::mysql_increment_sqn(std::string imsi) {
int status;
MYSQL_RES *res;
MYSQL_RES* res;
char query[1000];
if (db_desc->db_conn == NULL) {
Logger::amf_n1().error("Cannot connect to MySQL DB");
return;
}
sprintf(query,
"UPDATE `users` SET `sqn` = `sqn` + 32 WHERE `users`.`imsi`='%s'",
imsi.c_str());
sprintf(
query, "UPDATE `users` SET `sqn` = `sqn` + 32 WHERE `users`.`imsi`='%s'",
imsi.c_str());
pthread_mutex_lock(&db_desc->db_cs_mutex);
if (mysql_query(db_desc->db_conn, query)) {
pthread_mutex_unlock(&db_desc->db_cs_mutex);
Logger::amf_n1().error("Query execution failed: %s",
mysql_error(db_desc->db_conn));
Logger::amf_n1().error(
"Query execution failed: %s", mysql_error(db_desc->db_conn));
return;
}
do {
......@@ -195,8 +197,9 @@ void amf_n1::mysql_increment_sqn(std::string imsi) {
mysql_free_result(res);
} else {
if (mysql_field_count(db_desc->db_conn) == 0) {
Logger::amf_n1().error("[MySQL] %lld rows affected",
mysql_affected_rows(db_desc->db_conn));
Logger::amf_n1().error(
"[MySQL] %lld rows affected",
mysql_affected_rows(db_desc->db_conn));
} else {
Logger::amf_n1().error("Could not retrieve result set");
break;
......
......@@ -45,7 +45,7 @@ typedef struct {
typedef struct {
// mysql reference connector object
MYSQL *db_conn;
MYSQL* db_conn;
std::string server;
std::string user;
std::string password;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment