forked from acouzens/open5gs
[SMS] MO-SMS Done
This commit is contained in:
parent
663861d17b
commit
8e37f64c33
|
@ -244,7 +244,18 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
|
|||
sgsap_send_uplink_unitdata(mme_ue,
|
||||
&message->emm.uplink_nas_transport.nas_message_container);
|
||||
} else {
|
||||
S1AP_MME_UE_S1AP_ID_t MME_UE_S1AP_ID;
|
||||
S1AP_ENB_UE_S1AP_ID_t ENB_UE_S1AP_ID;
|
||||
|
||||
ogs_warn("No connection of MSC/VLR");
|
||||
MME_UE_S1AP_ID = enb_ue->mme_ue_s1ap_id;
|
||||
ENB_UE_S1AP_ID = enb_ue->enb_ue_s1ap_id;
|
||||
|
||||
rv = s1ap_send_error_indication(enb_ue->enb,
|
||||
&MME_UE_S1AP_ID, &ENB_UE_S1AP_ID,
|
||||
S1AP_Cause_PR_transport,
|
||||
S1AP_CauseTransport_transport_resource_unavailable);
|
||||
ogs_assert(rv == OGS_OK);
|
||||
}
|
||||
|
||||
return;
|
||||
|
|
|
@ -33,6 +33,8 @@ void sgsap_handle_location_update_accept(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf)
|
|||
mme_ue_t *mme_ue = NULL;
|
||||
enb_ue_t *enb_ue = NULL;
|
||||
|
||||
char imsi_bcd[MAX_IMSI_BCD_LEN+1];
|
||||
|
||||
nas_mobile_identity_imsi_t *nas_mobile_identity_imsi = NULL;
|
||||
int nas_mobile_identity_imsi_len = 0;
|
||||
nas_lai_t *lai = NULL;
|
||||
|
@ -74,8 +76,6 @@ void sgsap_handle_location_update_accept(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf)
|
|||
ogs_assert(nas_mobile_identity_imsi_len == SGSAP_IE_IMSI_LEN);
|
||||
|
||||
if (nas_mobile_identity_imsi->type == NAS_MOBILE_IDENTITY_IMSI) {
|
||||
char imsi_bcd[MAX_IMSI_BCD_LEN+1];
|
||||
|
||||
nas_imsi_to_bcd(nas_mobile_identity_imsi,
|
||||
nas_mobile_identity_imsi_len, imsi_bcd);
|
||||
mme_ue = mme_ue_find_by_imsi_bcd(imsi_bcd);
|
||||
|
@ -121,6 +121,8 @@ void sgsap_handle_location_update_reject(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf)
|
|||
mme_ue_t *mme_ue = NULL;
|
||||
enb_ue_t *enb_ue = NULL;
|
||||
|
||||
char imsi_bcd[MAX_IMSI_BCD_LEN+1];
|
||||
|
||||
nas_mobile_identity_imsi_t *nas_mobile_identity_imsi = NULL;
|
||||
int nas_mobile_identity_imsi_len = 0;
|
||||
nas_emm_cause_t emm_cause = 0;
|
||||
|
@ -162,8 +164,6 @@ void sgsap_handle_location_update_reject(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf)
|
|||
ogs_assert(nas_mobile_identity_imsi_len == SGSAP_IE_IMSI_LEN);
|
||||
|
||||
if (nas_mobile_identity_imsi->type == NAS_MOBILE_IDENTITY_IMSI) {
|
||||
char imsi_bcd[MAX_IMSI_BCD_LEN+1];
|
||||
|
||||
nas_imsi_to_bcd(nas_mobile_identity_imsi,
|
||||
nas_mobile_identity_imsi_len, imsi_bcd);
|
||||
mme_ue = mme_ue_find_by_imsi_bcd(imsi_bcd);
|
||||
|
@ -191,6 +191,8 @@ void sgsap_handle_detach_ack(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf)
|
|||
ogs_tlv_t *root = NULL, *iter = NULL;
|
||||
mme_ue_t *mme_ue = NULL;
|
||||
|
||||
char imsi_bcd[MAX_IMSI_BCD_LEN+1];
|
||||
|
||||
uint8_t type = 0;
|
||||
nas_mobile_identity_imsi_t *nas_mobile_identity_imsi = NULL;
|
||||
int nas_mobile_identity_imsi_len = 0;
|
||||
|
@ -231,8 +233,6 @@ void sgsap_handle_detach_ack(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf)
|
|||
ogs_assert(nas_mobile_identity_imsi_len == SGSAP_IE_IMSI_LEN);
|
||||
|
||||
if (nas_mobile_identity_imsi->type == NAS_MOBILE_IDENTITY_IMSI) {
|
||||
char imsi_bcd[MAX_IMSI_BCD_LEN+1];
|
||||
|
||||
nas_imsi_to_bcd(nas_mobile_identity_imsi,
|
||||
nas_mobile_identity_imsi_len, imsi_bcd);
|
||||
mme_ue = mme_ue_find_by_imsi_bcd(imsi_bcd);
|
||||
|
@ -251,12 +251,13 @@ void sgsap_handle_paging_request(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf)
|
|||
ogs_tlv_t *root = NULL, *iter = NULL;
|
||||
mme_ue_t *mme_ue = NULL;
|
||||
|
||||
char imsi_bcd[MAX_IMSI_BCD_LEN+1];
|
||||
|
||||
nas_mobile_identity_imsi_t *nas_mobile_identity_imsi = NULL;
|
||||
int nas_mobile_identity_imsi_len = 0;
|
||||
nas_lai_t *lai = NULL;
|
||||
char vlr_name[SGSAP_IE_VLR_NAME_LEN] = { 0, };
|
||||
uint8_t service_indicator = 0;
|
||||
char imsi_bcd[MAX_IMSI_BCD_LEN+1];
|
||||
|
||||
ogs_assert(vlr);
|
||||
ogs_assert(pkbuf);
|
||||
|
@ -343,3 +344,57 @@ void sgsap_handle_reset_indication(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf)
|
|||
|
||||
sgsap_send_reset_ack(vlr);
|
||||
}
|
||||
|
||||
void sgsap_handle_release_request(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf)
|
||||
{
|
||||
ogs_tlv_t *root = NULL, *iter = NULL;
|
||||
mme_ue_t *mme_ue = NULL;
|
||||
|
||||
char imsi_bcd[MAX_IMSI_BCD_LEN+1];
|
||||
|
||||
nas_mobile_identity_imsi_t *nas_mobile_identity_imsi = NULL;
|
||||
int nas_mobile_identity_imsi_len = 0;
|
||||
|
||||
ogs_assert(vlr);
|
||||
ogs_assert(pkbuf);
|
||||
|
||||
ogs_debug("[SGSAP] RELEASE-REQUEST");
|
||||
|
||||
ogs_pkbuf_pull(pkbuf, 1);
|
||||
|
||||
root = ogs_tlv_parse_block(pkbuf->len, pkbuf->data, OGS_TLV_MODE_T1_L1);
|
||||
ogs_assert(root);
|
||||
|
||||
iter = root;
|
||||
while (iter) {
|
||||
switch (iter->type) {
|
||||
case SGSAP_IE_IMSI_TYPE:
|
||||
nas_mobile_identity_imsi = iter->value;
|
||||
nas_mobile_identity_imsi_len = iter->length;
|
||||
break;
|
||||
default:
|
||||
ogs_warn("Invalid Type [%d]", iter->type);
|
||||
break;
|
||||
}
|
||||
iter = iter->next;
|
||||
}
|
||||
|
||||
ogs_tlv_free_all(root);
|
||||
|
||||
ogs_assert(nas_mobile_identity_imsi);
|
||||
ogs_assert(nas_mobile_identity_imsi_len == SGSAP_IE_IMSI_LEN);
|
||||
|
||||
if (nas_mobile_identity_imsi->type == NAS_MOBILE_IDENTITY_IMSI) {
|
||||
|
||||
nas_imsi_to_bcd(nas_mobile_identity_imsi,
|
||||
nas_mobile_identity_imsi_len, imsi_bcd);
|
||||
mme_ue = mme_ue_find_by_imsi_bcd(imsi_bcd);
|
||||
} else
|
||||
ogs_assert_if_reached();
|
||||
|
||||
if (mme_ue)
|
||||
ogs_debug(" IMSI[%s]", mme_ue->imsi_bcd);
|
||||
else
|
||||
ogs_warn("Unknown IMSI[%s]", imsi_bcd);
|
||||
|
||||
}
|
||||
|
|
|
@ -31,6 +31,7 @@ void sgsap_handle_location_update_reject(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf);
|
|||
void sgsap_handle_detach_ack(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf);
|
||||
void sgsap_handle_paging_request(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf);
|
||||
void sgsap_handle_reset_indication(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf);
|
||||
void sgsap_handle_release_request(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -136,6 +136,9 @@ void sgsap_state_connected(ogs_fsm_t *s, mme_event_t *e)
|
|||
mme_vlr_free_node(vlr);
|
||||
OGS_FSM_TRAN(s, sgsap_state_will_connect);
|
||||
break;
|
||||
case SGSAP_RELEASE_REQUEST:
|
||||
sgsap_handle_release_request(vlr, pkbuf);
|
||||
break;
|
||||
default:
|
||||
ogs_warn("Unknown Message Type: [%d]", type);
|
||||
break;
|
||||
|
|
|
@ -40,7 +40,7 @@ extern "C" {
|
|||
#define SGSAP_RESET_INDICATION 21
|
||||
#define SGSAP_RESET_ACK 22
|
||||
#define SGSAP_MO_CSFB_INDICIATION 24
|
||||
#define SGSAP_REELASE_REQUEST 27
|
||||
#define SGSAP_RELEASE_REQUEST 27
|
||||
|
||||
#define SGSAP_IE_IMSI_TYPE 1
|
||||
#define SGSAP_IE_IMSI_LEN MAX_IMSI_LEN
|
||||
|
|
|
@ -3347,3 +3347,25 @@ int testsgsap_reset_indication(ogs_pkbuf_t **pkbuf, int i)
|
|||
|
||||
return OGS_OK;
|
||||
}
|
||||
|
||||
int testsgsap_release_request(ogs_pkbuf_t **pkbuf, int i)
|
||||
{
|
||||
char *payload[TESTS1AP_MAX_MESSAGE] = {
|
||||
"1b01082926240000 111893",
|
||||
"",
|
||||
"",
|
||||
|
||||
};
|
||||
uint16_t len[TESTS1AP_MAX_MESSAGE] = {
|
||||
11,
|
||||
0,
|
||||
0,
|
||||
};
|
||||
char hexbuf[MAX_SDU_LEN];
|
||||
|
||||
*pkbuf = ogs_pkbuf_alloc(NULL, MAX_SDU_LEN);
|
||||
ogs_pkbuf_put_data(*pkbuf,
|
||||
OGS_HEX(payload[i], strlen(payload[i]), hexbuf), len[i]);
|
||||
|
||||
return OGS_OK;
|
||||
}
|
||||
|
|
|
@ -143,6 +143,7 @@ int testsgsap_location_update_reject(ogs_pkbuf_t **pkbuf, int i);
|
|||
int testsgsap_imsi_detach_ack(ogs_pkbuf_t **pkbuf, int i);
|
||||
int testsgsap_paging_request(ogs_pkbuf_t **pkbuf, int i);
|
||||
int testsgsap_reset_indication(ogs_pkbuf_t **pkbuf, int i);
|
||||
int testsgsap_release_request(ogs_pkbuf_t **pkbuf, int i);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -212,6 +212,12 @@ static void test1_func(abts_case *tc, void *data)
|
|||
ABTS_PTR_NOTNULL(tc, recvbuf);
|
||||
ogs_pkbuf_free(recvbuf);
|
||||
|
||||
/* Send SGsAP-RELEASE-REQUEST */
|
||||
rv = testsgsap_release_request(&sendbuf, 0);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
rv = testvlr_sgsap_send(sgsap, sendbuf);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
|
||||
/* Send UE Context Release Request */
|
||||
rv = tests1ap_build_ue_context_release_request(&sendbuf, msgindex);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
|
|
|
@ -58,6 +58,7 @@ mo-idle-test : SUCCESS
|
|||
mt-idle-test : SUCCESS
|
||||
mo-active-test : SUCCESS
|
||||
mt-active-test : SUCCESS
|
||||
mo-sms-test : SUCCESS
|
||||
All tests passed.
|
||||
])
|
||||
AT_CLEANUP
|
||||
|
|
Loading…
Reference in New Issue