Starting to create Initial Context Setup request message.

master
Pedro Alvarez 7 years ago
parent ee21a277e5
commit 3c839c1c9b

@ -99,7 +99,7 @@ private:
s1ap_nas_transport m_s1ap_nas_transport; s1ap_nas_transport m_s1ap_nas_transport;
//FIXME the GTP-C should be moved to the MME class, the the packaging of GTP-C messages is done. //FIXME the GTP-C should be moved to the MME class, the the packaging of GTP-C messages is done.
mme_gtpc *m_gtpc; mme_gtpc *m_mme_gtpc;
}; };

@ -54,7 +54,7 @@ s1ap::init(s1ap_args_t s1ap_args, srslte::log_filter *s1ap_log)
m_s1ap_nas_transport.set_log(s1ap_log); m_s1ap_nas_transport.set_log(s1ap_log);
m_hss = hss::get_instance(); m_hss = hss::get_instance();
m_gtpc = mme_gtpc::get_instance(); m_mme_gtpc = mme_gtpc::get_instance();
m_s1mme = enb_listen(); m_s1mme = enb_listen();
@ -485,11 +485,6 @@ s1ap::handle_nas_authentication_response(srslte::byte_buffer_t *nas_msg, srslte:
//Send Security Mode Command //Send Security Mode Command
m_s1ap_nas_transport.pack_security_mode_command(reply_msg, ue_ctx); m_s1ap_nas_transport.pack_security_mode_command(reply_msg, ue_ctx);
//FIXME The packging of GTP-C messages is not ready.
//This means that GTP-U tunnels are created with function calls, as opposed to GTP-C.
struct srslte::gtpc_create_session_response cs_resp;
m_gtpc->send_create_session_request(ue_ctx->imsi, &cs_resp);
//m_gtpc->handle_create_session_response(cs_resp);
} }
return true; return true;
} }
@ -517,9 +512,93 @@ s1ap::handle_nas_security_mode_complete(srslte::byte_buffer_t *nas_msg, srslte::
m_s1ap_log->info("Received Security Mode Command Complete. IMSI: %lu\n", ue_ctx->imsi); m_s1ap_log->info("Received Security Mode Command Complete. IMSI: %lu\n", ue_ctx->imsi);
m_s1ap_log->console("Received Security Mode Command Complete. IMSI: %lu\n", ue_ctx->imsi); m_s1ap_log->console("Received Security Mode Command Complete. IMSI: %lu\n", ue_ctx->imsi);
//FIXME The packging of GTP-C messages is not ready.
//This means that GTP-U tunnels are created with function calls, as opposed to GTP-C.
struct srslte::gtpc_create_session_response cs_resp;
m_mme_gtpc->send_create_session_request(ue_ctx->imsi, &cs_resp);
if (cs_resp.cause.cause_value != srslte::GTPC_CAUSE_VALUE_REQUEST_ACCEPTED){
m_s1ap_log->warning("Could not create GTPC session.\n");
//TODO Handle error
}
else{
send_initial_context_setup_request(&cs_resp);
}
return true; return true;
} }
bool
s1ap::send_initial_context_setup_request(struct srslte::create_session_response *cs_resp)
{
LIBLTE_S1AP_MESSAGE_INITIALCONTEXTSETUPREQUEST_STRUCT in_ctxt_req;
bzero(&in_ctxt_req, sizeof(in_ctxt_req));
in_ctxt_req.MME_UE_S1AP_ID =;
in_ctxt_req.eNB_UE_S1AP_ID =;
in_ctxt_req.uEaggregateMaximumBitrate =;
//eRAB context to setup
LIBLTE_S1AP_E_RABSETUPITEMCTXTSURES_STRUCT *erab_ctxt = &in_ctxt_req.E_RABToBeSetupListCtxtSUReq.buffer[0]; //FIXME?
erab_ctxt->e_RAB_ID = cs_resp->bearer_context_created.ebi;
erab_ctxt->transportLayerAddress = cs_resp->bearer_context_created.sender_f_teid.ipv4;
erab_ctxt->gTP_TEID = cs_resp->bearer_context_created.sender_f_teid.teid;
in_ctxt_req->UESecurityCapabilities =;
in_ctxt_req->SecurityKey = ;
/*
typedef struct{
uint32_t len;
LIBLTE_S1AP_E_RABSETUPITEMCTXTSURES_STRUCT buffer[32]; //WARNING: Artificial limit to reduce memory footprint
}LIBLTE_S1AP_E_RABSETUPLISTCTXTSURES_STRUCT;
*/
/*typedef struct{
bool ext;
LIBLTE_S1AP_E_RAB_ID_STRUCT e_RAB_ID;
LIBLTE_S1AP_TRANSPORTLAYERADDRESS_STRUCT transportLayerAddress;
LIBLTE_S1AP_GTP_TEID_STRUCT gTP_TEID;
LIBLTE_S1AP_PROTOCOLEXTENSIONCONTAINER_STRUCT iE_Extensions;
bool iE_Extensions_present;
}LIBLTE_S1AP_E_RABSETUPITEMCTXTSURES_STRUCT;
*/
/*typedef struct{
bool ext;
LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT MME_UE_S1AP_ID;
LIBLTE_S1AP_ENB_UE_S1AP_ID_STRUCT eNB_UE_S1AP_ID;
LIBLTE_S1AP_UEAGGREGATEMAXIMUMBITRATE_STRUCT uEaggregateMaximumBitrate;
LIBLTE_S1AP_E_RABTOBESETUPLISTCTXTSUREQ_STRUCT E_RABToBeSetupListCtxtSUReq;
LIBLTE_S1AP_UESECURITYCAPABILITIES_STRUCT UESecurityCapabilities;
LIBLTE_S1AP_SECURITYKEY_STRUCT SecurityKey;
LIBLTE_S1AP_TRACEACTIVATION_STRUCT TraceActivation;
bool TraceActivation_present;
LIBLTE_S1AP_HANDOVERRESTRICTIONLIST_STRUCT HandoverRestrictionList;
bool HandoverRestrictionList_present;
LIBLTE_S1AP_UERADIOCAPABILITY_STRUCT UERadioCapability;
bool UERadioCapability_present;
LIBLTE_S1AP_SUBSCRIBERPROFILEIDFORRFP_STRUCT SubscriberProfileIDforRFP;
bool SubscriberProfileIDforRFP_present;
LIBLTE_S1AP_CSFALLBACKINDICATOR_ENUM_EXT CSFallbackIndicator;
bool CSFallbackIndicator_present;
LIBLTE_S1AP_SRVCCOPERATIONPOSSIBLE_ENUM_EXT SRVCCOperationPossible;
bool SRVCCOperationPossible_present;
LIBLTE_S1AP_CSGMEMBERSHIPSTATUS_ENUM CSGMembershipStatus;
bool CSGMembershipStatus_present;
LIBLTE_S1AP_LAI_STRUCT RegisteredLAI;
bool RegisteredLAI_present;
LIBLTE_S1AP_GUMMEI_STRUCT GUMMEI_ID;
bool GUMMEI_ID_present;
LIBLTE_S1AP_MME_UE_S1AP_ID_STRUCT MME_UE_S1AP_ID_2;
bool MME_UE_S1AP_ID_2_present;
LIBLTE_S1AP_MANAGEMENTBASEDMDTALLOWED_ENUM_EXT ManagementBasedMDTAllowed;
bool ManagementBasedMDTAllowed_present;
LIBLTE_S1AP_MDTPLMNLIST_STRUCT ManagementBasedMDTPLMNList;
bool ManagementBasedMDTPLMNList_present;
LIBLTE_S1AP_ADDITIONALCSFALLBACKINDICATOR_ENUM_EXT AdditionalCSFallbackIndicator;
bool AdditionalCSFallbackIndicator_present;
}LIBLTE_S1AP_MESSAGE_INITIALCONTEXTSETUPREQUEST_STRUCT;*/
return true;
}
bool bool
s1ap::handle_ue_context_release_request(LIBLTE_S1AP_MESSAGE_UECONTEXTRELEASEREQUEST_STRUCT *ue_rel, struct sctp_sndrcvinfo *enb_sri) s1ap::handle_ue_context_release_request(LIBLTE_S1AP_MESSAGE_UECONTEXTRELEASEREQUEST_STRUCT *ue_rel, struct sctp_sndrcvinfo *enb_sri)
{ {

Loading…
Cancel
Save