update it

This commit is contained in:
Sukchan Lee 2017-04-13 17:46:26 +09:00
parent 12a12fb222
commit 3ca1fa39d9
5 changed files with 87 additions and 12 deletions

View File

@ -69,6 +69,7 @@ status_t emm_build_attach_accept(
eps_network_feature_support->ims_vops = 1;
d_assert(nas_security_encode(emmbuf, ue, &message) == CORE_OK && *emmbuf,,);
pkbuf_free(esmbuf);
return CORE_OK;
}

View File

@ -218,12 +218,10 @@ void emm_handle_lo_create_session(mme_esm_t *esm)
d_assert(rv == CORE_OK, return, "esm build error");
rv = emm_build_attach_accept(&emmbuf, ue, esmbuf);
d_assert(rv == CORE_OK, return, "emm build error");
pkbuf_free(esmbuf);
d_assert(rv == CORE_OK, pkbuf_free(esmbuf); return, "emm build error");
rv = s1ap_build_initial_context_setup_request(&s1apbuf, esm, emmbuf);
d_assert(rv == CORE_OK, return, "emm build error");
pkbuf_free(emmbuf);
d_assert(rv == CORE_OK, pkbuf_free(emmbuf); return, "emm build error");
d_assert(s1ap_send_to_enb(enb, s1apbuf) == CORE_OK,,);
}

View File

@ -105,19 +105,16 @@ status_t s1ap_build_setup_failure(pkbuf_t **pkbuf, S1ap_Cause_t cause)
return CORE_OK;
}
status_t s1ap_build_initial_context_setup_request(
pkbuf_t **s1apbuf, mme_esm_t *esm, pkbuf_t *emmbuf)
status_t s1ap_build_downlink_nas_transport(
pkbuf_t **s1apbuf, mme_ue_t *ue, pkbuf_t *emmbuf)
{
int encoded;
s1ap_message_t message;
S1ap_DownlinkNASTransport_IEs_t *ies =
&message.s1ap_DownlinkNASTransport_IEs;
S1ap_NAS_PDU_t *nasPdu = &ies->nas_pdu;
mme_ue_t *ue = NULL;
d_assert(emmbuf, return CORE_ERROR, "Null param");
d_assert(esm, return CORE_ERROR, "Null param");
ue = esm->ue;
d_assert(ue, return CORE_ERROR, "Null param");
memset(&message, 0, sizeof(s1ap_message_t));
@ -136,6 +133,83 @@ status_t s1ap_build_initial_context_setup_request(
s1ap_free_pdu(&message);
d_assert(s1apbuf && encoded >= 0,return CORE_ERROR,);
pkbuf_free(emmbuf);
return CORE_OK;
}
status_t s1ap_build_initial_context_setup_request(
pkbuf_t **s1apbuf, mme_esm_t *esm, pkbuf_t *emmbuf)
{
int encoded;
s1ap_message_t message;
S1ap_InitialContextSetupRequestIEs_t *ies =
&message.s1ap_InitialContextSetupRequestIEs;
S1ap_E_RABToBeSetupItemCtxtSUReq_t *e_rab = NULL;
S1ap_NAS_PDU_t *nasPdu = NULL;
mme_ue_t *ue = NULL;
pdn_t *pdn = NULL;
d_assert(emmbuf, return CORE_ERROR, "Null param");
d_assert(esm, return CORE_ERROR, "Null param");
ue = esm->ue;
d_assert(ue, return CORE_ERROR, "Null param");
pdn = esm->pdn;
d_assert(pdn, return CORE_ERROR, "Null param");
memset(&message, 0, sizeof(s1ap_message_t));
ies->mme_ue_s1ap_id = ue->mme_ue_s1ap_id;
ies->eNB_UE_S1AP_ID = ue->enb_ue_s1ap_id;
asn_uint642INTEGER(
&ies->uEaggregateMaximumBitrate.uEaggregateMaximumBitRateUL,
ue->max_bandwidth_ul);
asn_uint642INTEGER(
&ies->uEaggregateMaximumBitrate.uEaggregateMaximumBitRateDL,
ue->max_bandwidth_dl);
e_rab = (S1ap_E_RABToBeSetupItemCtxtSUReq_t *)
core_calloc(1, sizeof(S1ap_E_RABToBeSetupItemCtxtSUReq_t));
e_rab->e_RAB_ID = esm->ebi;
e_rab->e_RABlevelQoSParameters.qCI = pdn->qci;
e_rab->e_RABlevelQoSParameters.allocationRetentionPriority.
priorityLevel = pdn->priority_level;
e_rab->e_RABlevelQoSParameters.allocationRetentionPriority.
pre_emptionCapability =
S1ap_Pre_emptionCapability_shall_not_trigger_pre_emption;
e_rab->e_RABlevelQoSParameters.allocationRetentionPriority.
pre_emptionVulnerability =
S1ap_Pre_emptionVulnerability_not_pre_emptable;
e_rab->transportLayerAddress.size = 4;
e_rab->transportLayerAddress.buf =
core_calloc(e_rab->transportLayerAddress.size, sizeof(c_uint8_t));
memcpy(e_rab->transportLayerAddress.buf, &esm->sgw_s1u_addr,
e_rab->transportLayerAddress.size);
s1ap_uint32_to_OCTET_STRING(esm->sgw_s1u_teid, &e_rab->gTP_TEID);
nasPdu = (S1ap_NAS_PDU_t *)core_calloc(1, sizeof(S1ap_NAS_PDU_t));
nasPdu->size = emmbuf->len;
nasPdu->buf = core_calloc(nasPdu->size, sizeof(c_uint8_t));
memcpy(nasPdu->buf, emmbuf->payload, nasPdu->size);
e_rab->nAS_PDU = nasPdu;
ASN_SEQUENCE_ADD(&ies->e_RABToBeSetupListCtxtSUReq, e_rab);
ies->securityKey.size = 32;
ies->securityKey.buf =
core_calloc(ies->securityKey.size, sizeof(c_uint8_t));
message.procedureCode = S1ap_ProcedureCode_id_InitialContextSetup;
message.direction = S1AP_PDU_PR_initiatingMessage;
encoded = s1ap_encode_pdu(s1apbuf, &message);
s1ap_free_pdu(&message);
d_assert(s1apbuf && encoded >= 0,return CORE_ERROR,);
pkbuf_free(emmbuf);
return CORE_OK;
}

View File

@ -11,6 +11,8 @@ extern "C" {
CORE_DECLARE(status_t) s1ap_build_setup_rsp(pkbuf_t **pkbuf);
CORE_DECLARE(status_t) s1ap_build_setup_failure(
pkbuf_t **pkbuf, S1ap_Cause_t cause);
CORE_DECLARE(status_t) s1ap_build_downlink_nas_transport(
pkbuf_t **s1apbuf, mme_ue_t *ue, pkbuf_t *emmbuf);
CORE_DECLARE(status_t) s1ap_build_initial_context_setup_request(
pkbuf_t **s1apbuf, mme_esm_t *esm, pkbuf_t *emmbuf);

View File

@ -28,9 +28,9 @@ void s1ap_uint32_to_OCTET_STRING(c_uint32_t uint32, OCTET_STRING_t *octet_string
octet_string->buf = core_calloc(octet_string->size, sizeof(c_uint8_t));
octet_string->buf[0] = uint32 >> 24;
octet_string->buf[0] = uint32 >> 16;
octet_string->buf[0] = uint32 >> 8;
octet_string->buf[0] = uint32;
octet_string->buf[1] = uint32 >> 16;
octet_string->buf[2] = uint32 >> 8;
octet_string->buf[3] = uint32;
}
void s1ap_buffer_to_OCTET_STRING(