Commit 8251f33f authored by Tien-Thinh Nguyen's avatar Tien-Thinh Nguyen

Address TODO list

parent 9ce307a1
...@@ -355,7 +355,7 @@ void smf_app::start_upf_association(const pfcp::node_id_t &node_id) { ...@@ -355,7 +355,7 @@ void smf_app::start_upf_association(const pfcp::node_id_t &node_id) {
n4_asc.get()->get_msg_name()); n4_asc.get()->get_msg_name());
} }
} else { } else {
Logger::smf_app().warn("TODO start_association() node_id IPV6, FQDN!"); Logger::smf_app().warn("Start_association() node_id IPV6, FQDN!");
} }
} }
} }
...@@ -495,7 +495,7 @@ void smf_app::handle_itti_msg( ...@@ -495,7 +495,7 @@ void smf_app::handle_itti_msg(
} }
} break; } break;
default: { default: {
// TODO: Logger::smf_app().warn("Unknown procedure type %d", m.procedure_type);
} }
} }
} }
...@@ -1280,11 +1280,10 @@ void smf_app::update_pdu_session_status(const scid_t &scid, ...@@ -1280,11 +1280,10 @@ void smf_app::update_pdu_session_status(const scid_t &scid,
Logger::smf_app().debug("Retrieve SMF context with SUPI " SUPI_64_FMT "", Logger::smf_app().debug("Retrieve SMF context with SUPI " SUPI_64_FMT "",
supi64); supi64);
} else { } else {
Logger::smf_app().error( Logger::smf_app().warn(
"Could not retrieve the corresponding SMF context with " "Could not retrieve the corresponding SMF context with "
"Supi " SUPI_64_FMT "!", "Supi " SUPI_64_FMT "!",
supi64); supi64);
// TODO:
} }
// get dnn context // get dnn context
...@@ -1336,11 +1335,10 @@ void smf_app::update_pdu_session_upCnx_state(const scid_t &scid, ...@@ -1336,11 +1335,10 @@ void smf_app::update_pdu_session_upCnx_state(const scid_t &scid,
Logger::smf_app().debug("Retrieve SMF context with SUPI " SUPI_64_FMT "", Logger::smf_app().debug("Retrieve SMF context with SUPI " SUPI_64_FMT "",
supi64); supi64);
} else { } else {
Logger::smf_app().error( Logger::smf_app().warn(
"Could not retrieve the corresponding SMF context with " "Could not retrieve the corresponding SMF context with "
"Supi " SUPI_64_FMT "!", "Supi " SUPI_64_FMT "!",
supi64); supi64);
// TODO:
} }
// get dnn context // get dnn context
...@@ -1625,9 +1623,7 @@ void smf_app::trigger_http_response(const uint32_t &http_code, ...@@ -1625,9 +1623,7 @@ void smf_app::trigger_http_response(const uint32_t &http_code,
} }
} break; } break;
default: { default: { Logger::smf_app().debug("Unknown message type %d", msg_type); }
// TODO:
}
} }
} }
......
...@@ -324,15 +324,13 @@ void smf_pdu_session::generate_seid() {} ...@@ -324,15 +324,13 @@ void smf_pdu_session::generate_seid() {}
void smf_pdu_session::set_seid(const uint64_t &s) { seid = s; } void smf_pdu_session::set_seid(const uint64_t &s) { seid = s; }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// TODO check if prd_id should be uniq in the UPF or in the context of a pdn // TODO check if far_id should be uniq in the UPF or in the context of a pdn
// connection // connection
void smf_pdu_session::generate_far_id(pfcp::far_id_t &far_id) { void smf_pdu_session::generate_far_id(pfcp::far_id_t &far_id) {
far_id.far_id = far_id_generator.get_uid(); far_id.far_id = far_id_generator.get_uid();
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// TODO check if prd_id should be uniq in the UPF or in the context of a pdn
// connection
void smf_pdu_session::release_far_id(const pfcp::far_id_t &far_id) { void smf_pdu_session::release_far_id(const pfcp::far_id_t &far_id) {
far_id_generator.free_uid(far_id.far_id); far_id_generator.free_uid(far_id.far_id);
} }
...@@ -824,17 +822,20 @@ void smf_context::handle_itti_msg( ...@@ -824,17 +822,20 @@ void smf_context::handle_itti_msg(
} }
// Usage Report // Usage Report
if (report_type.usar) { if (report_type.usar) {
Logger::smf_app().debug("TODO PFCP_SESSION_REPORT_REQUEST/Usage Report"); // TODO
Logger::smf_app().debug("PFCP_SESSION_REPORT_REQUEST/Usage Report");
} }
// Error Indication Report // Error Indication Report
if (report_type.erir) { if (report_type.erir) {
// TODO
Logger::smf_app().debug( Logger::smf_app().debug(
"TODO PFCP_SESSION_REPORT_REQUEST/Error Indication Report"); "PFCP_SESSION_REPORT_REQUEST/Error Indication Report");
} }
// User Plane Inactivity Report // User Plane Inactivity Report
if (report_type.upir) { if (report_type.upir) {
// TODO
Logger::smf_app().debug( Logger::smf_app().debug(
"TODO PFCP_SESSION_REPORT_REQUEST/User Plane Inactivity Report"); "PFCP_SESSION_REPORT_REQUEST/User Plane Inactivity Report");
} }
} }
} }
...@@ -909,7 +910,7 @@ void smf_context::get_default_qos_rule(QOSRulesIE &qos_rule, ...@@ -909,7 +910,7 @@ void smf_context::get_default_qos_rule(QOSRulesIE &qos_rule,
} }
qos_rule.segregation = SEGREGATION_NOT_REQUESTED; qos_rule.segregation = SEGREGATION_NOT_REQUESTED;
qos_rule.qosflowidentifer = 6; // TODO: default value qos_rule.qosflowidentifer = DEFAULT_QFI;
Logger::smf_app().debug( Logger::smf_app().debug(
"Default QoSRules: %x %x %x %x %x %x %x %x %x", qos_rule.qosruleidentifer, "Default QoSRules: %x %x %x %x %x %x %x %x %x", qos_rule.qosruleidentifer,
...@@ -1364,13 +1365,15 @@ void smf_context::handle_pdu_session_create_sm_context_request( ...@@ -1364,13 +1365,15 @@ void smf_context::handle_pdu_session_create_sm_context_request(
case PDU_SESSION_TYPE_E_IPV6: { case PDU_SESSION_TYPE_E_IPV6: {
// TODO: // TODO:
Logger::smf_app().debug("IPv6 has not been supported yet!");
} break; } break;
case PDU_SESSION_TYPE_E_IPV4V6: { case PDU_SESSION_TYPE_E_IPV4V6: {
// TODO: // TODO:
Logger::smf_app().debug("IPv4/v6 has not been supported yet!");
} break; } break;
default: default: {
Logger::smf_app().error("Unknown PDN type %d", Logger::smf_app().error("Unknown PDN type %d",
sp->pdu_session_type.pdu_session_type); sp->pdu_session_type.pdu_session_type);
// PDU Session Establishment Reject // PDU Session Establishment Reject
...@@ -1389,7 +1392,7 @@ void smf_context::handle_pdu_session_create_sm_context_request( ...@@ -1389,7 +1392,7 @@ void smf_context::handle_pdu_session_create_sm_context_request(
smreq->pid, N11_SESSION_CREATE_SM_CONTEXT_RESPONSE); smreq->pid, N11_SESSION_CREATE_SM_CONTEXT_RESPONSE);
} }
request_accepted = false; request_accepted = false;
break; }
} }
// TODO: Step 8. SMF-initiated SM Policy Modification (with PCF) // TODO: Step 8. SMF-initiated SM Policy Modification (with PCF)
...@@ -1690,167 +1693,6 @@ void smf_context::handle_pdu_session_update_sm_context_request( ...@@ -1690,167 +1693,6 @@ void smf_context::handle_pdu_session_update_sm_context_request(
// Process QoS rules and Qos Flow descriptions // Process QoS rules and Qos Flow descriptions
update_qos_info(sp, sm_context_resp_pending->res, decoded_nas_msg); update_qos_info(sp, sm_context_resp_pending->res, decoded_nas_msg);
/* TODO: REMOVED
uint16_t length_of_rule_ie =
decoded_nas_msg.plain.sm.pdu_session_modification_request.qosrules
.lengthofqosrulesie;
pfcp::qfi_t generated_qfi = {.qfi = 0};
// QOSFlowDescriptions
uint8_t number_of_flow_descriptions =
decoded_nas_msg.plain.sm.pdu_session_modification_request
.qosflowdescriptions.qosflowdescriptionsnumber;
QOSFlowDescriptionsContents qos_flow_description_content = {};
// Only one flow description for new requested QoS Flow
QOSFlowDescriptionsContents *qos_flow_description =
(QOSFlowDescriptionsContents *)calloc(
number_of_flow_descriptions,
sizeof(QOSFlowDescriptionsContents));
if (number_of_flow_descriptions > 0) {
qos_flow_description =
decoded_nas_msg.plain.sm.pdu_session_modification_request
.qosflowdescriptions.qosflowdescriptionscontents;
for (int i = 0; i < number_of_flow_descriptions; i++) {
if (qos_flow_description[i].qfi ==
NO_QOS_FLOW_IDENTIFIER_ASSIGNED) {
// TODO: generate new QFI
generated_qfi.qfi = (uint8_t)60; // hardcoded for now
qos_flow_description_content = qos_flow_description[i];
qos_flow_description_content.qfi = generated_qfi.qfi;
break;
}
}
}
int i = 0;
int length_of_rule = 0;
while (length_of_rule_ie > 0) {
QOSRulesIE qos_rules_ie = {};
qos_rules_ie =
decoded_nas_msg.plain.sm.pdu_session_modification_request.qosrules
.qosrulesie[i];
uint8_t rule_id = {0};
pfcp::qfi_t qfi = {};
smf_qos_flow qos_flow = {};
length_of_rule = qos_rules_ie.LengthofQoSrule;
// If UE requested a new GBR flow
if ((qos_rules_ie.ruleoperationcode == CREATE_NEW_QOS_RULE) and
(qos_rules_ie.segregation == SEGREGATION_REQUESTED)) {
// Add a new QoS Flow
if (qos_rules_ie.qosruleidentifer ==
NO_QOS_RULE_IDENTIFIER_ASSIGNED) {
// Generate a new QoS rule
sp.get()->generate_qos_rule_id(rule_id);
Logger::smf_app().info("Create a new QoS rule (rule Id %d)",
rule_id);
qos_rules_ie.qosruleidentifer = rule_id;
}
sp.get()->add_qos_rule(qos_rules_ie);
qfi.qfi = generated_qfi.qfi;
qos_flow.qfi = generated_qfi.qfi;
// set qos_profile from qos_flow_description_content
qos_flow.qos_profile = {};
for (int j = 0; j < qos_flow_description_content.numberofparameters;
j++) {
if (qos_flow_description_content.parameterslist[j]
.parameteridentifier == PARAMETER_IDENTIFIER_5QI) {
qos_flow.qos_profile._5qi =
qos_flow_description_content.parameterslist[j]
.parametercontents._5qi;
} else if (qos_flow_description_content.parameterslist[j]
.parameteridentifier ==
PARAMETER_IDENTIFIER_GFBR_UPLINK) {
qos_flow.qos_profile.parameter.qos_profile_gbr.gfbr.uplink
.unit =
qos_flow_description_content.parameterslist[j]
.parametercontents.gfbrormfbr_uplinkordownlink.uint;
qos_flow.qos_profile.parameter.qos_profile_gbr.gfbr.uplink
.value =
qos_flow_description_content.parameterslist[j]
.parametercontents.gfbrormfbr_uplinkordownlink.value;
} else if (qos_flow_description_content.parameterslist[j]
.parameteridentifier ==
PARAMETER_IDENTIFIER_GFBR_DOWNLINK) {
qos_flow.qos_profile.parameter.qos_profile_gbr.gfbr.donwlink
.unit =
qos_flow_description_content.parameterslist[j]
.parametercontents.gfbrormfbr_uplinkordownlink.uint;
qos_flow.qos_profile.parameter.qos_profile_gbr.gfbr.donwlink
.value =
qos_flow_description_content.parameterslist[j]
.parametercontents.gfbrormfbr_uplinkordownlink.value;
} else if (qos_flow_description_content.parameterslist[j]
.parameteridentifier ==
PARAMETER_IDENTIFIER_MFBR_UPLINK) {
qos_flow.qos_profile.parameter.qos_profile_gbr.mfbr.uplink
.unit =
qos_flow_description_content.parameterslist[j]
.parametercontents.gfbrormfbr_uplinkordownlink.uint;
qos_flow.qos_profile.parameter.qos_profile_gbr.mfbr.uplink
.value =
qos_flow_description_content.parameterslist[j]
.parametercontents.gfbrormfbr_uplinkordownlink.value;
} else if (qos_flow_description_content.parameterslist[j]
.parameteridentifier ==
PARAMETER_IDENTIFIER_MFBR_DOWNLINK) {
qos_flow.qos_profile.parameter.qos_profile_gbr.mfbr.donwlink
.unit =
qos_flow_description_content.parameterslist[j]
.parametercontents.gfbrormfbr_uplinkordownlink.uint;
qos_flow.qos_profile.parameter.qos_profile_gbr.mfbr.donwlink
.value =
qos_flow_description_content.parameterslist[j]
.parametercontents.gfbrormfbr_uplinkordownlink.value;
}
}
Logger::smf_app().debug("Add new QoS Flow with new QRI %d",
qos_rules_ie.qosruleidentifer);
// mark this rule to be synchronised with the UE
sp.get()->update_qos_rule(qos_rules_ie);
// Add new QoS flow
sp.get()->add_qos_flow(qos_flow);
// ADD QoS Flow to be updated
qos_flow_context_updated qcu = {};
qcu.set_qfi(pfcp::qfi_t(qos_flow.qfi));
// qcu.set_ul_fteid(flow.ul_fteid);
// qcu.set_dl_fteid(flow.dl_fteid);
qcu.set_qos_profile(qos_flow.qos_profile);
sm_context_resp_pending->res.add_qos_flow_context_updated(qcu);
} else { // update existing QRI
Logger::smf_app().debug("Update existing QRI %d",
qos_rules_ie.qosruleidentifer);
qfi.qfi = qos_rules_ie.qosflowidentifer;
if (sp.get()->get_qos_flow(qfi, qos_flow)) {
sp.get()->update_qos_rule(qos_rules_ie);
// update QoS flow
sp.get()->add_qos_flow(qos_flow);
// ADD QoS Flow to be updated
qos_flow_context_updated qcu = {};
qcu.set_qfi(pfcp::qfi_t(qos_flow.qfi));
qcu.set_ul_fteid(qos_flow.ul_fteid);
qcu.set_dl_fteid(qos_flow.dl_fteid);
qcu.set_qos_profile(qos_flow.qos_profile);
sm_context_resp_pending->res.add_qos_flow_context_updated(qcu);
}
}
length_of_rule_ie -= (length_of_rule + 3); // 2 for Length of QoS
// rules IE and 1 for QoS
// rule identifier
i++;
}
*/
// TODO: MappedEPSBearerContexts // TODO: MappedEPSBearerContexts
// TODO: ExtendedProtocolConfigurationOptions // TODO: ExtendedProtocolConfigurationOptions
...@@ -1923,7 +1765,6 @@ void smf_context::handle_pdu_session_update_sm_context_request( ...@@ -1923,7 +1765,6 @@ void smf_context::handle_pdu_session_update_sm_context_request(
sm_context_resp_pending->session_procedure_type = procedure_type; sm_context_resp_pending->session_procedure_type = procedure_type;
// don't need to create a procedure to update UPF // don't need to create a procedure to update UPF
//free_wrapper((void **)&qos_flow_description);
free_wrapper( free_wrapper(
(void **)&decoded_nas_msg.plain.sm.pdu_session_modification_request (void **)&decoded_nas_msg.plain.sm.pdu_session_modification_request
.qosflowdescriptions.qosflowdescriptionscontents); .qosflowdescriptions.qosflowdescriptionscontents);
...@@ -2132,9 +1973,7 @@ void smf_context::handle_pdu_session_update_sm_context_request( ...@@ -2132,9 +1973,7 @@ void smf_context::handle_pdu_session_update_sm_context_request(
"retrieve the corresponding SMF context, ignore message!"); "retrieve the corresponding SMF context, ignore message!");
// TODO: return; // TODO: return;
} }
// smf_event::get_instance().trigger_sm_context_status_notification(scid,
// static_cast<uint32_t>(sm_context_status_e::SM_CONTEXT_STATUS_RELEASED),
// smreq->http_version);
event_sub.sm_context_status( event_sub.sm_context_status(
scid, scid,
static_cast<uint32_t>( static_cast<uint32_t>(
...@@ -2144,8 +1983,6 @@ void smf_context::handle_pdu_session_update_sm_context_request( ...@@ -2144,8 +1983,6 @@ void smf_context::handle_pdu_session_update_sm_context_request(
// Get SUPI // Get SUPI
supi64_t supi64 = smf_supi_to_u64(sm_context_req_msg.get_supi()); supi64_t supi64 = smf_supi_to_u64(sm_context_req_msg.get_supi());
// Trigger PDU Session Release event notification // Trigger PDU Session Release event notification
// smf_event::get_instance().trigger_ee_pdu_session_release(supi64,
// sm_context_req_msg.get_pdu_session_id(), smreq->http_version);
event_sub.ee_pdu_session_release( event_sub.ee_pdu_session_release(
supi64, sm_context_req_msg.get_pdu_session_id(), supi64, sm_context_req_msg.get_pdu_session_id(),
smreq->http_version); smreq->http_version);
...@@ -2579,7 +2416,6 @@ void smf_context::handle_pdu_session_update_sm_context_request( ...@@ -2579,7 +2416,6 @@ void smf_context::handle_pdu_session_update_sm_context_request(
} break; } break;
default: { default: {
// TODO: to be updated
// trigger to send reply to AMF // trigger to send reply to AMF
smf_app_inst->trigger_update_context_error_response( smf_app_inst->trigger_update_context_error_response(
http_status_code_e::HTTP_STATUS_CODE_403_FORBIDDEN, http_status_code_e::HTTP_STATUS_CODE_403_FORBIDDEN,
...@@ -2665,7 +2501,7 @@ void smf_context::handle_pdu_session_release_sm_context_request( ...@@ -2665,7 +2501,7 @@ void smf_context::handle_pdu_session_release_sm_context_request(
smf_app_inst->trigger_http_response( smf_app_inst->trigger_http_response(
http_status_code_e::HTTP_STATUS_CODE_500_INTERNAL_SERVER_ERROR, http_status_code_e::HTTP_STATUS_CODE_500_INTERNAL_SERVER_ERROR,
smreq->pid, smreq->pid,
N11_SESSION_RELEASE_SM_CONTEXT_RESPONSE); // TODO: check code N11_SESSION_RELEASE_SM_CONTEXT_RESPONSE);
return; return;
} }
} }
...@@ -2922,7 +2758,6 @@ void smf_context::handle_sm_context_status_change(scid_t scid, uint8_t status, ...@@ -2922,7 +2758,6 @@ void smf_context::handle_sm_context_status_change(scid_t scid, uint8_t status,
} else { } else {
Logger::smf_app().warn( Logger::smf_app().warn(
"SM Context associated with this id " SCID_FMT " does not exit!", scid); "SM Context associated with this id " SCID_FMT " does not exit!", scid);
// TODO:
return; return;
} }
...@@ -3142,7 +2977,10 @@ void smf_context::update_qos_info(std::shared_ptr<smf_pdu_session> &sp, ...@@ -3142,7 +2977,10 @@ void smf_context::update_qos_info(std::shared_ptr<smf_pdu_session> &sp,
// rule identifier // rule identifier
i++; i++;
} }
free_wrapper((void **)&qos_flow_description);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool dnn_context::find_pdu_session( bool dnn_context::find_pdu_session(
const uint32_t pdu_session_id, const uint32_t pdu_session_id,
......
...@@ -49,12 +49,11 @@ typedef bs2::signal_type<void(supi64_t, pdu_session_id_t, uint8_t), ...@@ -49,12 +49,11 @@ typedef bs2::signal_type<void(supi64_t, pdu_session_id_t, uint8_t),
bs2::keywords::mutex_type<bs2::dummy_mutex>>::type bs2::keywords::mutex_type<bs2::dummy_mutex>>::type
ee_pdu_session_release_sig_t; ee_pdu_session_release_sig_t;
// ee_ue_ip_address_change_sig_t; //UI IP Address, UE ID // TODO: ee_ue_ip_address_change_sig_t; //UI IP Address, UE ID
// TODO: // TODO: Access Type Change
// Access Type Change // TODO: UP Path Change
// UP Path Change // TODO: PLMN Change
// PLMN Change // TODO: Downlink data delivery status
// Downlink data delivery status
} // namespace smf } // namespace smf
#endif /* FILE_SMF_EVENT_SIG_HPP_SEEN */ #endif /* FILE_SMF_EVENT_SIG_HPP_SEEN */
...@@ -131,7 +131,6 @@ bool smf_n1::create_n1_pdu_session_establishment_accept( ...@@ -131,7 +131,6 @@ bool smf_n1::create_n1_pdu_session_establishment_accept(
// SessionAMBR // SessionAMBR
Logger::smf_n1().debug("Get default values for Session-AMBR"); Logger::smf_n1().debug("Get default values for Session-AMBR");
// TODO: get from subscription DB
supi_t supi = sm_context_res.get_supi(); supi_t supi = sm_context_res.get_supi();
supi64_t supi64 = smf_supi_to_u64(supi); supi64_t supi64 = smf_supi_to_u64(supi);
std::shared_ptr<smf_context> sc = {}; std::shared_ptr<smf_context> sc = {};
...@@ -423,9 +422,8 @@ bool smf_n1::create_n1_pdu_session_modification_command( ...@@ -423,9 +422,8 @@ bool smf_n1::create_n1_pdu_session_modification_command(
sm_msg->header.procedure_transaction_identity = sm_msg->header.procedure_transaction_identity =
sm_context_res.get_pti().procedure_transaction_id; sm_context_res.get_pti().procedure_transaction_id;
sm_msg->header.message_type = PDU_SESSION_MODIFICATION_COMMAND; sm_msg->header.message_type = PDU_SESSION_MODIFICATION_COMMAND;
// TODO: to be updated
sm_msg->pdu_session_modification_command.presence = sm_msg->pdu_session_modification_command.presence =
0xff; 0xff; // TODO: to be updated
sm_msg->pdu_session_modification_command._5gsmcause = sm_msg->pdu_session_modification_command._5gsmcause =
static_cast<uint8_t>(sm_cause); static_cast<uint8_t>(sm_cause);
// SessionAMBR (default) // SessionAMBR (default)
...@@ -457,8 +455,7 @@ bool smf_n1::create_n1_pdu_session_modification_command( ...@@ -457,8 +455,7 @@ bool smf_n1::create_n1_pdu_session_modification_command(
&qos_rules[i], sizeof(QOSRulesIE)); &qos_rules[i], sizeof(QOSRulesIE));
} }
// MappedEPSBearerContexts // TODO: MappedEPSBearerContexts
// TODO:
// QOSFlowDescriptions // QOSFlowDescriptions
//TODO: get authorized QoS flow descriptions IE //TODO: get authorized QoS flow descriptions IE
...@@ -561,9 +558,8 @@ bool smf_n1::create_n1_pdu_session_modification_command( ...@@ -561,9 +558,8 @@ bool smf_n1::create_n1_pdu_session_modification_command(
sm_msg->header.procedure_transaction_identity = sm_msg->header.procedure_transaction_identity =
msg.get_pti().procedure_transaction_id; msg.get_pti().procedure_transaction_id;
sm_msg->header.message_type = PDU_SESSION_MODIFICATION_COMMAND; sm_msg->header.message_type = PDU_SESSION_MODIFICATION_COMMAND;
// TODO: to be updated
sm_msg->pdu_session_modification_command.presence = sm_msg->pdu_session_modification_command.presence =
0xff; 0xff; // TODO: to be updated
sm_msg->pdu_session_modification_command._5gsmcause = sm_msg->pdu_session_modification_command._5gsmcause =
static_cast<uint8_t>(sm_cause); static_cast<uint8_t>(sm_cause);
// SessionAMBR (default) // SessionAMBR (default)
...@@ -595,8 +591,7 @@ bool smf_n1::create_n1_pdu_session_modification_command( ...@@ -595,8 +591,7 @@ bool smf_n1::create_n1_pdu_session_modification_command(
&qos_rules[i], sizeof(QOSRulesIE)); &qos_rules[i], sizeof(QOSRulesIE));
} }
// MappedEPSBearerContexts // TODO: MappedEPSBearerContexts
// TODO:
// QOSFlowDescriptions, TODO: get authorized QoS flow descriptions IE // QOSFlowDescriptions, TODO: get authorized QoS flow descriptions IE
if (smf_app_inst->is_supi_2_smf_context(supi64)) { if (smf_app_inst->is_supi_2_smf_context(supi64)) {
...@@ -667,9 +662,9 @@ bool smf_n1::create_n1_pdu_session_release_reject( ...@@ -667,9 +662,9 @@ bool smf_n1::create_n1_pdu_session_release_reject(
sm_msg->header.message_type = PDU_SESSION_RELEASE_REJECT; sm_msg->header.message_type = PDU_SESSION_RELEASE_REJECT;
sm_msg->pdu_session_release_reject._5gsmcause = sm_msg->pdu_session_release_reject._5gsmcause =
static_cast<uint8_t>(sm_cause); static_cast<uint8_t>(sm_cause);
// TODO: to be updated when adding the following IE
sm_msg->pdu_session_release_command.presence = sm_msg->pdu_session_release_command.presence =
0x00; 0x00; // TODO: to be updated
// Extended protocol configuration options // Extended protocol configuration options
// Encode NAS message // Encode NAS message
......
...@@ -84,26 +84,6 @@ class smf_n1 { ...@@ -84,26 +84,6 @@ class smf_n1 {
bool create_n1_pdu_session_establishment_reject(pdu_session_msg &msg, bool create_n1_pdu_session_establishment_reject(pdu_session_msg &msg,
std::string &nas_msg_str, std::string &nas_msg_str,
cause_value_5gsm_e sm_cause); cause_value_5gsm_e sm_cause);
// TODO: separate into 4 functions (verify if necessary)
/*
bool
create_n1_pdu_session_establishment_accept(pdu_session_create_sm_context_response
&sm_context_res, std::string &nas_msg_str, cause_value_5gsm_e sm_cause);
bool
create_n1_pdu_session_establishment_reject(pdu_session_create_sm_context_request
&msg, uint8_t msg_type, std::string &nas_msg_str, cause_value_5gsm_e
sm_cause);
bool
create_n1_pdu_session_establishment_reject(pdu_session_update_sm_context_response
&msg, uint8_t msg_type, std::string &nas_msg_str, cause_value_5gsm_e
sm_cause); bool
create_n1_pdu_session_establishment_reject(pdu_session_update_sm_context_request
&msg, uint8_t msg_type, std::string &nas_msg_str, cause_value_5gsm_e
sm_cause);
*/
/* /*
* Create N1 SM Container: PDU Session Modification Command * Create N1 SM Container: PDU Session Modification Command
* Included in PDU Session Update SM Context Response (PDU Session * Included in PDU Session Update SM Context Response (PDU Session
......
...@@ -173,8 +173,7 @@ bool smf_n2::create_n2_pdu_session_resource_setup_request_transfer( ...@@ -173,8 +173,7 @@ bool smf_n2::create_n2_pdu_session_resource_setup_request_transfer(
ASN_SEQUENCE_ADD(&ngap_IEs->protocolIEs.list, upTransportLayerInformation); ASN_SEQUENCE_ADD(&ngap_IEs->protocolIEs.list, upTransportLayerInformation);
// DataForwardingNotPossible // TODO: DataForwardingNotPossible
// TODO:
// PDUSessionType // PDUSessionType
Ngap_PDUSessionResourceSetupRequestTransferIEs_t *pduSessionType = nullptr; Ngap_PDUSessionResourceSetupRequestTransferIEs_t *pduSessionType = nullptr;
...@@ -203,8 +202,7 @@ bool smf_n2::create_n2_pdu_session_resource_setup_request_transfer( ...@@ -203,8 +202,7 @@ bool smf_n2::create_n2_pdu_session_resource_setup_request_transfer(
// securityIndication->value.choice.SecurityIndication.confidentialityProtectionIndication // securityIndication->value.choice.SecurityIndication.confidentialityProtectionIndication
// = Ngap_ConfidentialityProtectionIndication_not_needed; // = Ngap_ConfidentialityProtectionIndication_not_needed;
// NetworkInstance // TODO: NetworkInstance
// TODO:
// QosFlowSetupRequestList // QosFlowSetupRequestList
Ngap_PDUSessionResourceSetupRequestTransferIEs_t *qosFlowSetupRequestList = Ngap_PDUSessionResourceSetupRequestTransferIEs_t *qosFlowSetupRequestList =
...@@ -435,8 +433,7 @@ bool smf_n2::create_n2_pdu_session_resource_setup_request_transfer( ...@@ -435,8 +433,7 @@ bool smf_n2::create_n2_pdu_session_resource_setup_request_transfer(
ASN_SEQUENCE_ADD(&ngap_IEs->protocolIEs.list, upTransportLayerInformation); ASN_SEQUENCE_ADD(&ngap_IEs->protocolIEs.list, upTransportLayerInformation);
// DataForwardingNotPossible // TODO: DataForwardingNotPossible
// TODO:
// PDUSessionType // PDUSessionType
Ngap_PDUSessionResourceSetupRequestTransferIEs_t *pduSessionType = nullptr; Ngap_PDUSessionResourceSetupRequestTransferIEs_t *pduSessionType = nullptr;
...@@ -465,8 +462,7 @@ bool smf_n2::create_n2_pdu_session_resource_setup_request_transfer( ...@@ -465,8 +462,7 @@ bool smf_n2::create_n2_pdu_session_resource_setup_request_transfer(
// securityIndication->value.choice.SecurityIndication.confidentialityProtectionIndication // securityIndication->value.choice.SecurityIndication.confidentialityProtectionIndication
// = Ngap_ConfidentialityProtectionIndication_not_needed; // = Ngap_ConfidentialityProtectionIndication_not_needed;
// NetworkInstance // TODO: NetworkInstance
// TODO:
// QosFlowSetupRequestList // QosFlowSetupRequestList
Ngap_PDUSessionResourceSetupRequestTransferIEs_t *qosFlowSetupRequestList = Ngap_PDUSessionResourceSetupRequestTransferIEs_t *qosFlowSetupRequestList =
...@@ -721,8 +717,7 @@ bool smf_n2::create_n2_pdu_session_resource_modify_request_transfer( ...@@ -721,8 +717,7 @@ bool smf_n2::create_n2_pdu_session_resource_modify_request_transfer(
ngap_UL_NGU_UP_TNLModifyItem); ngap_UL_NGU_UP_TNLModifyItem);
ASN_SEQUENCE_ADD(&ngap_IEs->protocolIEs.list, ul_NGU_UP_TNLModifyList); ASN_SEQUENCE_ADD(&ngap_IEs->protocolIEs.list, ul_NGU_UP_TNLModifyList);
// Ngap_NetworkInstance_t // TODO: Ngap_NetworkInstance_t
// TODO
// Ngap_QosFlowAddOrModifyRequestList_t // Ngap_QosFlowAddOrModifyRequestList_t
// TODO: to be completed // TODO: to be completed
...@@ -783,10 +778,8 @@ bool smf_n2::create_n2_pdu_session_resource_modify_request_transfer( ...@@ -783,10 +778,8 @@ bool smf_n2::create_n2_pdu_session_resource_modify_request_transfer(
// Ngap_E_RAB_ID_t *e_RAB_ID; //optional // Ngap_E_RAB_ID_t *e_RAB_ID; //optional
ASN_SEQUENCE_ADD(&ngap_IEs->protocolIEs.list, qosFlowAddOrModifyRequestList); ASN_SEQUENCE_ADD(&ngap_IEs->protocolIEs.list, qosFlowAddOrModifyRequestList);
// Ngap_QosFlowList_t - QoS to release list?? // TODO: Ngap_QosFlowList_t - QoS to release list??
// TODO // TODO: Ngap_UPTransportLayerInformation_t
// Ngap_UPTransportLayerInformation_t
// TODO
// encode // encode
size_t buffer_size = BUF_LEN; size_t buffer_size = BUF_LEN;
......
...@@ -393,7 +393,7 @@ void smf_n4::handle_receive_association_setup_request( ...@@ -393,7 +393,7 @@ void smf_n4::handle_receive_association_setup_request(
send_n4_msg(a); send_n4_msg(a);
} else { } else {
Logger::smf_n4().warn( Logger::smf_n4().warn(
"Received N4 ASSOCIATION SETUP REQUEST TODO node_id IPV6, FQDN!, " "Received N4 ASSOCIATION SETUP REQUEST node_id IPV6, FQDN!, "
"ignore message"); "ignore message");
return; return;
} }
......
...@@ -105,7 +105,6 @@ int session_create_sm_context_procedure::run( ...@@ -105,7 +105,6 @@ int session_create_sm_context_procedure::run(
pfcp::node_id_t up_node_id = {}; pfcp::node_id_t up_node_id = {};
if (not pfcp_associations::get_instance().select_up_node( if (not pfcp_associations::get_instance().select_up_node(
up_node_id, NODE_SELECTION_CRITERIA_MIN_PFCP_SESSIONS)) { up_node_id, NODE_SELECTION_CRITERIA_MIN_PFCP_SESSIONS)) {
// TODO
sm_context_resp->res.set_cause( sm_context_resp->res.set_cause(
PDU_SESSION_APPLICATION_ERROR_PEER_NOT_RESPONDING); PDU_SESSION_APPLICATION_ERROR_PEER_NOT_RESPONDING);
return RETURNerror; return RETURNerror;
...@@ -690,8 +689,7 @@ int session_update_sm_context_procedure::run( ...@@ -690,8 +689,7 @@ int session_update_sm_context_procedure::run(
// that PFCP session. // that PFCP session.
sps->generate_pdr_id(pdr_id); sps->generate_pdr_id(pdr_id);
precedence.precedence = precedence.precedence =
flow.precedence.precedence; // TODO: should be verified flow.precedence.precedence;
pdi.set(source_interface); pdi.set(source_interface);
// pdi.set(local_fteid); // pdi.set(local_fteid);
pdi.set(ue_ip_address); pdi.set(ue_ip_address);
...@@ -748,7 +746,7 @@ int session_update_sm_context_procedure::run( ...@@ -748,7 +746,7 @@ int session_update_sm_context_procedure::run(
ue_ip_address.ipv6_address = sps->ipv6_address; ue_ip_address.ipv6_address = sps->ipv6_address;
} }
precedence.precedence = precedence.precedence =
flow.precedence.precedence; // TODO: should be verified flow.precedence.precedence;
source_interface.interface_value = pfcp::INTERFACE_VALUE_CORE; source_interface.interface_value = pfcp::INTERFACE_VALUE_CORE;
pdi.set(source_interface); pdi.set(source_interface);
...@@ -973,7 +971,6 @@ void session_update_sm_context_procedure::handle_itti_msg( ...@@ -973,7 +971,6 @@ void session_update_sm_context_procedure::handle_itti_msg(
if (it_update_far.get(far_id)) { if (it_update_far.get(far_id)) {
smf_qos_flow flow = {}; smf_qos_flow flow = {};
if (sps->get_qos_flow(far_id, flow)) { if (sps->get_qos_flow(far_id, flow)) {
// for (auto qfi: list_of_qfis_to_be_modified){
for (auto it : qos_flow_context_to_be_updateds) { for (auto it : qos_flow_context_to_be_updateds) {
if (it.first == flow.qfi.qfi) { if (it.first == flow.qfi.qfi) {
flow.dl_fteid = dl_fteid; flow.dl_fteid = dl_fteid;
...@@ -1032,8 +1029,7 @@ void session_update_sm_context_procedure::handle_itti_msg( ...@@ -1032,8 +1029,7 @@ void session_update_sm_context_procedure::handle_itti_msg(
n11_triggered_pending->res.set_http_code( n11_triggered_pending->res.set_http_code(
http_status_code_e::HTTP_STATUS_CODE_200_OK); http_status_code_e::HTTP_STATUS_CODE_200_OK);
// TODO // TODO: check we got all responses vs
// check we got all responses vs
// n11_triggered_pending->res.flow_context_modified // n11_triggered_pending->res.flow_context_modified
// TODO: Optional: send ITTI message to N10 to trigger UDM registration // TODO: Optional: send ITTI message to N10 to trigger UDM registration
...@@ -1255,7 +1251,6 @@ int session_release_sm_context_procedure::run( ...@@ -1255,7 +1251,6 @@ int session_release_sm_context_procedure::run(
pfcp::node_id_t up_node_id = {}; pfcp::node_id_t up_node_id = {};
if (not pfcp_associations::get_instance().select_up_node( if (not pfcp_associations::get_instance().select_up_node(
up_node_id, NODE_SELECTION_CRITERIA_MIN_PFCP_SESSIONS)) { up_node_id, NODE_SELECTION_CRITERIA_MIN_PFCP_SESSIONS)) {
// TODO
sm_context_res->res.set_cause( sm_context_res->res.set_cause(
PDU_SESSION_APPLICATION_ERROR_PEER_NOT_RESPONDING); PDU_SESSION_APPLICATION_ERROR_PEER_NOT_RESPONDING);
Logger::smf_app().info("REMOTE_PEER_NOT_RESPONDING"); Logger::smf_app().info("REMOTE_PEER_NOT_RESPONDING");
......
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