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);
|
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_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_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_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
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -172,6 +172,9 @@ void sgsap_state_connected(ogs_fsm_t *s, mme_event_t *e)
|
||||||
case SGSAP_RELEASE_REQUEST:
|
case SGSAP_RELEASE_REQUEST:
|
||||||
sgsap_handle_release_request(vlr, pkbuf);
|
sgsap_handle_release_request(vlr, pkbuf);
|
||||||
break;
|
break;
|
||||||
|
case SGSAP_MM_INFORMATION_REQUEST:
|
||||||
|
sgsap_handle_mm_information_request(vlr, pkbuf);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
ogs_warn("Unknown Message Type: [%d]", type);
|
ogs_warn("Unknown Message Type: [%d]", type);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -40,6 +40,7 @@ extern "C" {
|
||||||
#define SGSAP_RESET_INDICATION 21
|
#define SGSAP_RESET_INDICATION 21
|
||||||
#define SGSAP_RESET_ACK 22
|
#define SGSAP_RESET_ACK 22
|
||||||
#define SGSAP_MO_CSFB_INDICIATION 24
|
#define SGSAP_MO_CSFB_INDICIATION 24
|
||||||
|
#define SGSAP_MM_INFORMATION_REQUEST 26
|
||||||
#define SGSAP_RELEASE_REQUEST 27
|
#define SGSAP_RELEASE_REQUEST 27
|
||||||
#define SGSAP_UE_UNREACHABLE 31
|
#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_TYPE 17
|
||||||
#define SGSAP_IE_IMSI_DETACH_INDICATION_LEN 1
|
#define SGSAP_IE_IMSI_DETACH_INDICATION_LEN 1
|
||||||
#define SGSAP_IE_NAS_MESSAGE_CONTAINER_TYPE 22
|
#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_TYPE 32
|
||||||
#define SGSAP_IE_SERVICE_INDICATOR_LEN 1
|
#define SGSAP_IE_SERVICE_INDICATOR_LEN 1
|
||||||
#define SGSAP_IE_TAI_TYPE 35
|
#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)
|
int testsgsap_mm_information_request(ogs_pkbuf_t **pkbuf, int i)
|
||||||
{
|
{
|
||||||
char *payload[TESTS1AP_MAX_MESSAGE] = {
|
char *payload[TESTS1AP_MAX_MESSAGE] = {
|
||||||
"",
|
|
||||||
"1a01087942120000 0000301714430483 d46413450483d464 1347917071028401"
|
"1a01087942120000 0000301714430483 d46413450483d464 1347917071028401"
|
||||||
"29",
|
"29",
|
||||||
"",
|
"",
|
||||||
|
"",
|
||||||
|
|
||||||
};
|
};
|
||||||
uint16_t len[TESTS1AP_MAX_MESSAGE] = {
|
uint16_t len[TESTS1AP_MAX_MESSAGE] = {
|
||||||
0,
|
|
||||||
33,
|
33,
|
||||||
0,
|
0,
|
||||||
|
0,
|
||||||
};
|
};
|
||||||
char hexbuf[MAX_SDU_LEN];
|
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_reset_indication(ogs_pkbuf_t **pkbuf, int i);
|
||||||
int testsgsap_release_request(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_downlink_unitdata(ogs_pkbuf_t **pkbuf, int i);
|
||||||
|
int testsgsap_mm_information_request(ogs_pkbuf_t **pkbuf, int i);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -208,6 +208,12 @@ static void test1_func(abts_case *tc, void *data)
|
||||||
ABTS_PTR_NOTNULL(tc, recvbuf);
|
ABTS_PTR_NOTNULL(tc, recvbuf);
|
||||||
ogs_pkbuf_free(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 */
|
/* Retreive M-TMSI */
|
||||||
enb_ue = enb_ue_find_by_mme_ue_s1ap_id(248);
|
enb_ue = enb_ue_find_by_mme_ue_s1ap_id(248);
|
||||||
ogs_assert(enb_ue);
|
ogs_assert(enb_ue);
|
||||||
|
|
Loading…
Reference in New Issue