[MME] Add S1AP debug (#1263)

This commit is contained in:
Sukchan Lee 2021-12-11 17:28:05 +09:00
parent d7e23b7f6a
commit 74bbc6ecbf
3 changed files with 1190 additions and 101 deletions

View File

@ -349,6 +349,9 @@ ogs_pkbuf_t *s1ap_build_initial_context_setup_request(
*MME_UE_S1AP_ID = enb_ue->mme_ue_s1ap_id;
*ENB_UE_S1AP_ID = enb_ue->enb_ue_s1ap_id;
ogs_debug(" AMBR[DL:%lld,UL:%lld]",
(long long)mme_ue->ambr.downlink, (long long)mme_ue->ambr.uplink);
asn_uint642INTEGER(
&UEAggregateMaximumBitrate->uEaggregateMaximumBitRateUL,
mme_ue->ambr.uplink);
@ -414,6 +417,10 @@ ogs_pkbuf_t *s1ap_build_initial_context_setup_request(
ogs_debug(" EBI[%d] QCI[%d] SGW-S1U-TEID[%d]",
bearer->ebi, bearer->qos.index, bearer->sgw_s1u_teid);
ogs_debug(" ARP[%d:%d:%d]",
bearer->qos.arp.priority_level,
bearer->qos.arp.pre_emption_capability,
bearer->qos.arp.pre_emption_vulnerability);
e_rab->e_RABlevelQoSParameters.allocationRetentionPriority.
priorityLevel = bearer->qos.arp.priority_level;
@ -431,6 +438,13 @@ ogs_pkbuf_t *s1ap_build_initial_context_setup_request(
ogs_assert(bearer->qos.gbr.downlink);
ogs_assert(bearer->qos.gbr.uplink);
ogs_debug(" MBR[DL:%lld,UL:%lld]",
(long long)bearer->qos.mbr.downlink,
(long long)bearer->qos.mbr.uplink);
ogs_debug(" GBR[DL:%lld,UL:%lld]",
(long long)bearer->qos.gbr.downlink,
(long long)bearer->qos.gbr.uplink);
gbrQosInformation =
CALLOC(1, sizeof(struct S1AP_GBR_QosInformation));
asn_uint642INTEGER(&gbrQosInformation->e_RAB_MaximumBitrateDL,
@ -451,9 +465,9 @@ ogs_pkbuf_t *s1ap_build_initial_context_setup_request(
ogs_asn_uint32_to_OCTET_STRING(
bearer->sgw_s1u_teid, &e_rab->gTP_TEID);
ogs_debug(" EMM[%p] LEN[%d]", emmbuf, emmbuf ? emmbuf->len : 0);
if (emmbuf && emmbuf->len) {
ogs_debug(" NASPdu[%p:%d]", emmbuf, emmbuf->len);
nasPdu = (S1AP_NAS_PDU_t *)CALLOC(1, sizeof(S1AP_NAS_PDU_t));
nasPdu->size = emmbuf->len;
nasPdu->buf = CALLOC(nasPdu->size, sizeof(uint8_t));
@ -461,6 +475,8 @@ ogs_pkbuf_t *s1ap_build_initial_context_setup_request(
e_rab->nAS_PDU = nasPdu;
ogs_pkbuf_free(emmbuf);
ogs_log_hexdump(OGS_LOG_DEBUG, nasPdu->buf, nasPdu->size);
/* Since Tracking area update accept is used only once,
* set emmbuf to NULL as shown below */
emmbuf = NULL;
@ -495,6 +511,10 @@ ogs_pkbuf_t *s1ap_build_initial_context_setup_request(
UESecurityCapabilities->encryptionAlgorithms.buf[0] =
(mme_ue->ue_network_capability.eea << 1);
ogs_log_hexdump(OGS_LOG_DEBUG,
UESecurityCapabilities->encryptionAlgorithms.buf,
UESecurityCapabilities->encryptionAlgorithms.size);
UESecurityCapabilities->integrityProtectionAlgorithms.size = 2;
UESecurityCapabilities->integrityProtectionAlgorithms.buf =
CALLOC(UESecurityCapabilities->
@ -503,6 +523,10 @@ ogs_pkbuf_t *s1ap_build_initial_context_setup_request(
UESecurityCapabilities->integrityProtectionAlgorithms.buf[0] =
(mme_ue->ue_network_capability.eia << 1);
ogs_log_hexdump(OGS_LOG_DEBUG,
UESecurityCapabilities->integrityProtectionAlgorithms.buf,
UESecurityCapabilities->integrityProtectionAlgorithms.size);
ie = CALLOC(1, sizeof(S1AP_InitialContextSetupRequestIEs_t));
ASN_SEQUENCE_ADD(&InitialContextSetupRequest->protocolIEs, ie);
@ -520,8 +544,8 @@ ogs_pkbuf_t *s1ap_build_initial_context_setup_request(
SecurityKey->bits_unused = 0;
memcpy(SecurityKey->buf, mme_ue->kenb, SecurityKey->size);
ogs_debug(" mme_ue->nas_eps.type[%d:%d]",
mme_ue->nas_eps.type, MME_P_TMSI_IS_AVAILABLE(mme_ue));
ogs_log_hexdump(OGS_LOG_DEBUG, SecurityKey->buf, SecurityKey->size);
if (mme_ue->nas_eps.type == MME_EPS_TYPE_EXTENDED_SERVICE_REQUEST &&
MME_P_TMSI_IS_AVAILABLE(mme_ue)) {
@ -563,13 +587,14 @@ ogs_pkbuf_t *s1ap_build_initial_context_setup_request(
}
ogs_debug(" mme_ue->ueRadioCapability[%p:%lld]",
mme_ue->ueRadioCapability.buf,
(long long)mme_ue->ueRadioCapability.size);
if (mme_ue->ueRadioCapability.buf && mme_ue->ueRadioCapability.size) {
/* Set UeRadioCapability if exists */
S1AP_UERadioCapability_t *UERadioCapability = NULL;
ogs_debug(" UERadioCapability[%p:%d]",
mme_ue->ueRadioCapability.buf,
(int)mme_ue->ueRadioCapability.size);
ie = CALLOC(1, sizeof(S1AP_InitialContextSetupRequestIEs_t));
ASN_SEQUENCE_ADD(&InitialContextSetupRequest->protocolIEs, ie);
@ -578,13 +603,15 @@ ogs_pkbuf_t *s1ap_build_initial_context_setup_request(
ie->value.present =
S1AP_InitialContextSetupRequestIEs__value_PR_UERadioCapability;
ogs_debug(" UERadioCapability");
UERadioCapability = &ie->value.choice.UERadioCapability;
ogs_assert(UERadioCapability);
ogs_s1ap_buffer_to_OCTET_STRING(
mme_ue->ueRadioCapability.buf, mme_ue->ueRadioCapability.size,
UERadioCapability);
ogs_log_hexdump(OGS_LOG_DEBUG,
UERadioCapability->buf, UERadioCapability->size);
}
/* TS23.003 6.2.2 Composition of IMEISV
@ -595,7 +622,6 @@ ogs_pkbuf_t *s1ap_build_initial_context_setup_request(
* TAC(8 digits) - SNR(6 digits) - SVN(2 digits)
* IMEISV(16 digits) ==> 8bytes
*/
ogs_debug(" mme_ue->imeisv_len[%d]", mme_ue->imeisv_len);
if (mme_ue->imeisv_len == OGS_MAX_IMEISV_LEN) {
ie = CALLOC(1, sizeof(S1AP_InitialContextSetupRequestIEs_t));
ASN_SEQUENCE_ADD(&InitialContextSetupRequest->protocolIEs, ie);
@ -612,10 +638,10 @@ ogs_pkbuf_t *s1ap_build_initial_context_setup_request(
Masked_IMEISV->buf = CALLOC(Masked_IMEISV->size, sizeof(uint8_t));
Masked_IMEISV->bits_unused = 0;
memcpy(Masked_IMEISV->buf, mme_ue->masked_imeisv, Masked_IMEISV->size);
ogs_log_hexdump(OGS_LOG_DEBUG, Masked_IMEISV->buf, Masked_IMEISV->size);
}
ogs_debug(" mme_ue->ue_additional_security_capability.length[%d]",
mme_ue->ue_additional_security_capability.length);
if (mme_ue->ue_additional_security_capability.length) {
ie = CALLOC(1, sizeof(S1AP_InitialContextSetupRequestIEs_t));
ASN_SEQUENCE_ADD(&InitialContextSetupRequest->protocolIEs, ie);
@ -635,6 +661,10 @@ ogs_pkbuf_t *s1ap_build_initial_context_setup_request(
NRUESecurityCapabilities->nRencryptionAlgorithms.buf[0] =
(mme_ue->ue_additional_security_capability.nea << 1);
ogs_log_hexdump(OGS_LOG_DEBUG,
NRUESecurityCapabilities->nRencryptionAlgorithms.buf,
NRUESecurityCapabilities->nRencryptionAlgorithms.size);
NRUESecurityCapabilities->nRintegrityProtectionAlgorithms.size = 2;
NRUESecurityCapabilities->nRintegrityProtectionAlgorithms.buf =
CALLOC(NRUESecurityCapabilities->
@ -644,9 +674,11 @@ ogs_pkbuf_t *s1ap_build_initial_context_setup_request(
NRUESecurityCapabilities->nRintegrityProtectionAlgorithms.buf[0] =
(mme_ue->ue_additional_security_capability.nia << 1);
ogs_log_hexdump(OGS_LOG_DEBUG,
NRUESecurityCapabilities->nRintegrityProtectionAlgorithms.buf,
NRUESecurityCapabilities->nRintegrityProtectionAlgorithms.size);
}
ogs_debug(" ogs_s1ap_encode()");
return ogs_s1ap_encode(&pdu);
}

View File

@ -245,7 +245,7 @@ int s1ap_send_s1_setup_response(mme_enb_t *enb)
int rv;
ogs_pkbuf_t *s1ap_buffer;
ogs_debug("[MME] S1-Setup response");
ogs_debug("S1-Setup response");
s1ap_buffer = s1ap_build_setup_rsp();
ogs_expect_or_return_val(s1ap_buffer, OGS_ERROR);
@ -261,7 +261,7 @@ int s1ap_send_s1_setup_failure(
int rv;
ogs_pkbuf_t *s1ap_buffer;
ogs_debug("[MME] S1-Setup failure");
ogs_debug("S1-Setup failure");
s1ap_buffer = s1ap_build_setup_failure(group, cause, S1AP_TimeToWait_v10s);
ogs_expect_or_return_val(s1ap_buffer, OGS_ERROR);
@ -278,6 +278,7 @@ int s1ap_send_initial_context_setup_request(mme_ue_t *mme_ue)
ogs_assert(mme_ue);
ogs_debug("InitialContextSetupRequest");
s1apbuf = s1ap_build_initial_context_setup_request(mme_ue, NULL);
ogs_expect_or_return_val(s1apbuf, OGS_ERROR);
@ -294,6 +295,7 @@ int s1ap_send_ue_context_modification_request(mme_ue_t *mme_ue)
ogs_assert(mme_ue);
ogs_debug("UEContextModificationRequest");
s1apbuf = s1ap_build_ue_context_modification_request(mme_ue);
ogs_expect_or_return_val(s1apbuf, OGS_ERROR);
@ -312,7 +314,7 @@ int s1ap_send_ue_context_release_command(
ogs_assert(enb_ue);
ogs_debug("[MME] UE Context release command");
ogs_debug("UEContextReleaseCommand");
ogs_debug(" ENB_UE_S1AP_ID[%d] MME_UE_S1AP_ID[%d]",
enb_ue->enb_ue_s1ap_id, enb_ue->mme_ue_s1ap_id);
@ -381,6 +383,7 @@ int s1ap_send_mme_configuration_transfer(
ogs_assert(target_enb);
ogs_assert(SONConfigurationTransfer);
ogs_debug("MMEConfigurationTransfer");
s1apbuf = s1ap_build_mme_configuration_transfer(SONConfigurationTransfer);
ogs_expect_or_return_val(s1apbuf, OGS_ERROR);
@ -397,6 +400,7 @@ int s1ap_send_e_rab_modification_confirm(mme_ue_t *mme_ue)
ogs_assert(mme_ue);
ogs_debug("E-RABModificationConfirm");
s1apbuf = s1ap_build_e_rab_modification_confirm(mme_ue);
ogs_expect_or_return_val(s1apbuf, OGS_ERROR);
@ -413,6 +417,7 @@ int s1ap_send_path_switch_ack(mme_ue_t *mme_ue)
ogs_assert(mme_ue);
ogs_debug("PathSwitchAcknowledge");
s1apbuf = s1ap_build_path_switch_ack(mme_ue);
ogs_expect_or_return_val(s1apbuf, OGS_ERROR);
@ -429,6 +434,7 @@ int s1ap_send_handover_command(enb_ue_t *source_ue)
ogs_assert(source_ue);
ogs_debug("HandoverCommand");
s1apbuf = s1ap_build_handover_command(source_ue);
ogs_expect_or_return_val(s1apbuf, OGS_ERROR);
@ -447,6 +453,7 @@ int s1ap_send_handover_preparation_failure(
ogs_assert(source_ue);
ogs_assert(group);
ogs_debug("HandoverPreparationFailure");
s1apbuf = s1ap_build_handover_preparation_failure(source_ue, group, cause);
ogs_expect_or_return_val(s1apbuf, OGS_ERROR);
@ -463,6 +470,7 @@ int s1ap_send_handover_cancel_ack(enb_ue_t *source_ue)
ogs_assert(source_ue);
ogs_debug("HandoverCancelAcknowledge");
s1apbuf = s1ap_build_handover_cancel_ack(source_ue);
ogs_expect_or_return_val(s1apbuf, OGS_ERROR);
@ -484,8 +492,7 @@ int s1ap_send_handover_request(
enb_ue_t *target_ue = NULL;
ogs_info("Handover request");
ogs_info("HandoverRequest");
ogs_assert(source_ue);
ogs_assert(source_ue->target_ue == NULL);
ogs_assert(target_enb);
@ -521,6 +528,7 @@ int s1ap_send_mme_status_transfer(
ogs_assert(target_ue);
ogs_info("MMEStatusTransfer");
s1apbuf = s1ap_build_mme_status_transfer(target_ue,
enb_statustransfer_transparentContainer);
ogs_expect_or_return_val(s1apbuf, OGS_ERROR);
@ -542,6 +550,7 @@ int s1ap_send_error_indication(
ogs_assert(enb);
ogs_info("ErrorIndication");
s1apbuf = ogs_s1ap_build_error_indication(
mme_ue_s1ap_id, enb_ue_s1ap_id, group, cause);
ogs_expect_or_return_val(s1apbuf, OGS_ERROR);
@ -587,6 +596,7 @@ int s1ap_send_s1_reset_ack(
ogs_assert(enb);
ogs_info("S1-Reset Acknowledge");
s1apbuf = ogs_s1ap_build_s1_reset_ack(partOfS1_Interface);
ogs_expect_or_return_val(s1apbuf, OGS_ERROR);

File diff suppressed because it is too large Load Diff