forked from acouzens/open5gs
[SGsAP] add MM-INFORMATION-REQUEST(Discard by Option2)
This commit is contained in:
parent
f19009c736
commit
d791f0034d
|
@ -479,3 +479,59 @@ void sgsap_handle_release_request(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf)
|
|||
ogs_warn("Unknown IMSI[%s]", imsi_bcd);
|
||||
|
||||
}
|
||||
|
||||
void sgsap_handle_mm_information_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] MM-INFORMATION-REQUEST(DISCARD by OPTION2)");
|
||||
|
||||
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;
|
||||
case SGSAP_IE_MM_INFORMATION_TYPE:
|
||||
/* TODO */
|
||||
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);
|
||||
}
|
||||
|
|
|
@ -33,6 +33,7 @@ void sgsap_handle_paging_request(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf);
|
|||
void sgsap_handle_downlink_unitdata(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);
|
||||
void sgsap_handle_mm_information_request(mme_vlr_t *vlr, ogs_pkbuf_t *pkbuf);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -172,6 +172,9 @@ void sgsap_state_connected(ogs_fsm_t *s, mme_event_t *e)
|
|||
case SGSAP_RELEASE_REQUEST:
|
||||
sgsap_handle_release_request(vlr, pkbuf);
|
||||
break;
|
||||
case SGSAP_MM_INFORMATION_REQUEST:
|
||||
sgsap_handle_mm_information_request(vlr, pkbuf);
|
||||
break;
|
||||
default:
|
||||
ogs_warn("Unknown Message Type: [%d]", type);
|
||||
break;
|
||||
|
|
|
@ -40,6 +40,7 @@ extern "C" {
|
|||
#define SGSAP_RESET_INDICATION 21
|
||||
#define SGSAP_RESET_ACK 22
|
||||
#define SGSAP_MO_CSFB_INDICIATION 24
|
||||
#define SGSAP_MM_INFORMATION_REQUEST 26
|
||||
#define SGSAP_RELEASE_REQUEST 27
|
||||
#define SGSAP_UE_UNREACHABLE 31
|
||||
|
||||
|
@ -64,6 +65,7 @@ extern "C" {
|
|||
#define SGSAP_IE_IMSI_DETACH_INDICATION_TYPE 17
|
||||
#define SGSAP_IE_IMSI_DETACH_INDICATION_LEN 1
|
||||
#define SGSAP_IE_NAS_MESSAGE_CONTAINER_TYPE 22
|
||||
#define SGSAP_IE_MM_INFORMATION_TYPE 23
|
||||
#define SGSAP_IE_SERVICE_INDICATOR_TYPE 32
|
||||
#define SGSAP_IE_SERVICE_INDICATOR_LEN 1
|
||||
#define SGSAP_IE_TAI_TYPE 35
|
||||
|
|
|
@ -3464,16 +3464,16 @@ int testsgsap_downlink_unitdata(ogs_pkbuf_t **pkbuf, int i)
|
|||
int testsgsap_mm_information_request(ogs_pkbuf_t **pkbuf, int i)
|
||||
{
|
||||
char *payload[TESTS1AP_MAX_MESSAGE] = {
|
||||
"",
|
||||
"1a01087942120000 0000301714430483 d46413450483d464 1347917071028401"
|
||||
"29",
|
||||
"",
|
||||
"",
|
||||
|
||||
};
|
||||
uint16_t len[TESTS1AP_MAX_MESSAGE] = {
|
||||
0,
|
||||
33,
|
||||
0,
|
||||
0,
|
||||
};
|
||||
char hexbuf[MAX_SDU_LEN];
|
||||
|
||||
|
|
|
@ -145,6 +145,7 @@ 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);
|
||||
int testsgsap_downlink_unitdata(ogs_pkbuf_t **pkbuf, int i);
|
||||
int testsgsap_mm_information_request(ogs_pkbuf_t **pkbuf, int i);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -208,6 +208,12 @@ static void test1_func(abts_case *tc, void *data)
|
|||
ABTS_PTR_NOTNULL(tc, recvbuf);
|
||||
ogs_pkbuf_free(recvbuf);
|
||||
|
||||
/* Send SGsAP-MM-INFORMATION-REQUEST */
|
||||
rv = testsgsap_mm_information_request(&sendbuf, 0);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
rv = testvlr_sgsap_send(sgsap, sendbuf);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
|
||||
/* Retreive M-TMSI */
|
||||
enb_ue = enb_ue_find_by_mme_ue_s1ap_id(248);
|
||||
ogs_assert(enb_ue);
|
||||
|
|
Loading…
Reference in New Issue