more bug is fixed

This commit is contained in:
Sukchan Lee 2020-06-27 00:46:06 -04:00
parent da364e03b7
commit ca4ee27e84
40 changed files with 526 additions and 262 deletions

View File

@ -108,6 +108,27 @@ void *ogs_bcd_to_buffer(const char *in, void *out, int *out_len)
return out;
}
void *ogs_bcd_to_buffer_reverse_order(const char *in, void *out, int *out_len)
{
int i = 0;
uint8_t *out_p = out;
int in_len = strlen(in);
for (i = 0; i < in_len; i++) {
if (i & 0x01)
out_p[i>>1] = out_p[i>>1] | ((in[i] - 0x30) & 0x0F);
else
out_p[i>>1] = ((in[i] - 0x30) << 4) & 0xF0;
}
*out_len = (in_len + 1) / 2;
if (in_len & 0x01) {
out_p[(*out_len)-1] |= 0xF0;
}
return out;
}
void *ogs_buffer_to_bcd(uint8_t *in, int in_len, void *out)
{
int i = 0;

View File

@ -34,6 +34,7 @@ void *ogs_hex_to_ascii(void *in, int in_len, void *out, int out_len);
void *ogs_uint64_to_buffer(uint64_t num, int size, void *buffer);
uint64_t ogs_buffer_to_uint64(void *buffer, int size);
void *ogs_bcd_to_buffer(const char *in, void *out, int *out_len);
void *ogs_bcd_to_buffer_reverse_order(const char *in, void *out, int *out_len);
void *ogs_buffer_to_bcd(uint8_t *in, int in_len, void *out);
char ogs_from_hex(char ch);

View File

@ -27,18 +27,6 @@ typedef struct ogs_timer_mgr_s {
ogs_rbtree_t tree;
} ogs_timer_mgr_t;
typedef struct ogs_timer_s {
ogs_rbnode_t rbnode;
ogs_lnode_t lnode;
void (*cb)(void*);
void *data;
ogs_timer_mgr_t *manager;
bool running;
ogs_time_t timeout;;
} ogs_timer_t;
static void add_timer_node(
ogs_rbtree_t *tree, ogs_timer_t *timer, ogs_time_t duration)
{

View File

@ -29,7 +29,17 @@ extern "C" {
#endif
typedef struct ogs_timer_mgr_s ogs_timer_mgr_t;
typedef struct ogs_timer_s ogs_timer_t;;
typedef struct ogs_timer_s {
ogs_rbnode_t rbnode;
ogs_lnode_t lnode;
void (*cb)(void*);
void *data;
ogs_timer_mgr_t *manager;
bool running;
ogs_time_t timeout;
} ogs_timer_t;
ogs_timer_mgr_t *ogs_timer_mgr_create(void);
void ogs_timer_mgr_destroy(ogs_timer_mgr_t *manager);

View File

@ -151,7 +151,7 @@ int ogs_nas_parse_nssai(ogs_s_nssai_t *s_nssai, ogs_nas_nssai_t *nas_nssai)
ogs_assert(nas_nssai);
ogs_assert(s_nssai);
if (!nas_nssai->buffer || !nas_nssai->length) {
if (!nas_nssai->length) {
ogs_error("No NSSAI [%p:%d]", nas_nssai->buffer, nas_nssai->length);
return OGS_ERROR;
}

View File

@ -53,3 +53,22 @@ void ogs_nas_imeisv_to_bcd(
bcd[bcd_len] = 0;
}
void *ogs_nas_imeisv_bcd_to_buffer(const char *in, uint8_t *out, int *out_len)
{
/*
* TS38.413
* 9.3.1.54 Masked IMEISV
*
* The first to fourth bits correspond to the first digit of the IMEISV,
* the fifth to eighth bits correspond to the second digit of the IMEISV,
* and so on
*
* IMEISV buffer uses different ordering.
* So, I'll other function instead of ogs_bcd_to_buffer();
*
*/
return ogs_bcd_to_buffer_reverse_order(in, out, out_len);
}

View File

@ -32,6 +32,7 @@ extern "C" {
void ogs_nas_imeisv_to_bcd(
ogs_nas_mobile_identity_imeisv_t *imeisv, uint8_t imeisv_len, char *bcd);
void *ogs_nas_imeisv_bcd_to_buffer(const char *in, uint8_t *out, int *out_len);
#ifdef __cplusplus
}

View File

@ -31,8 +31,6 @@ ogs_pkbuf_t *nga_ngap_encode(ogs_ngap_message_t *message)
asn_fprint(stdout, &asn_DEF_NGAP_NGAP_PDU, message);
pkbuf = ogs_asn_encode(&asn_DEF_NGAP_NGAP_PDU, message);
ogs_asn_free(&asn_DEF_NGAP_NGAP_PDU, message);
if (pkbuf == NULL) {
ogs_error("Failed to encode NGAP-PDU");
return NULL;

View File

@ -31,8 +31,6 @@ ogs_pkbuf_t *ogs_s1ap_encode(ogs_s1ap_message_t *message)
asn_fprint(stdout, &asn_DEF_S1AP_S1AP_PDU, message);
pkbuf = ogs_asn_encode(&asn_DEF_S1AP_S1AP_PDU, message);
ogs_asn_free(&asn_DEF_S1AP_S1AP_PDU, message);
if (pkbuf == NULL) {
ogs_error("Failed to encode S1AP-PDU");
return NULL;

View File

@ -133,6 +133,7 @@ void ogs_sbi_client_remove(ogs_sbi_client_t *client)
ogs_assert(client->t_curl);
ogs_timer_delete(client->t_curl);
client->t_curl = NULL;
ogs_assert(client->multi);
curl_multi_cleanup(client->multi);
@ -581,8 +582,8 @@ static void event_cb(short when, ogs_socket_t fd, void *data)
ogs_timer_t *timer;
timer = client->t_curl;
ogs_assert(timer);
ogs_timer_stop(timer);
if (timer)
ogs_timer_stop(timer);
}
}

View File

@ -442,6 +442,19 @@ ogs_sbi_nf_instance_t *ogs_sbi_nf_instance_add(char *id)
nf_instance->time.heartbeat = ogs_config()->time.nf_instance.heartbeat;
nf_instance->t_registration_interval = ogs_timer_add(
ogs_sbi_self()->timer_mgr, NULL, nf_instance);
ogs_assert(nf_instance->t_registration_interval);
nf_instance->t_heartbeat_interval = ogs_timer_add(
ogs_sbi_self()->timer_mgr, NULL, nf_instance);
ogs_assert(nf_instance->t_heartbeat_interval);
nf_instance->t_heartbeat = ogs_timer_add(
ogs_sbi_self()->timer_mgr, NULL, nf_instance);
ogs_assert(nf_instance->t_heartbeat);
nf_instance->t_validity = ogs_timer_add(
ogs_sbi_self()->timer_mgr, NULL, nf_instance);
ogs_assert(nf_instance->t_validity);
ogs_list_add(&ogs_sbi_self()->nf_instance_list, nf_instance);
return nf_instance;
@ -482,6 +495,11 @@ void ogs_sbi_nf_instance_remove(ogs_sbi_nf_instance_t *nf_instance)
ogs_sbi_nf_instance_clear(nf_instance);
ogs_timer_delete(nf_instance->t_registration_interval);
ogs_timer_delete(nf_instance->t_heartbeat_interval);
ogs_timer_delete(nf_instance->t_heartbeat);
ogs_timer_delete(nf_instance->t_validity);
if (nf_instance->client)
ogs_sbi_client_remove(nf_instance->client);

View File

@ -252,8 +252,8 @@ struct amf_ue_s {
ogs_nas_5gs_mobile_identity_suci_t nas_mobile_identity_suci;
char *pei;
uint8_t imeisv[OGS_MAX_IMEISV_LEN];
int imeisv_len;
uint8_t masked_imeisv[OGS_MAX_IMEISV_LEN];
int masked_imeisv_len;
char imeisv_bcd[OGS_MAX_IMEISV_BCD_LEN+1];
ogs_nas_mobile_identity_imeisv_t nas_mobile_identity_imeisv;

View File

@ -717,8 +717,10 @@ int gmm_handle_security_mode_complete(amf_ue_t *amf_ue,
mobile_identity_imeisv, imeisv->length);
ogs_nas_imeisv_to_bcd(mobile_identity_imeisv, imeisv->length,
amf_ue->imeisv_bcd);
ogs_bcd_to_buffer(amf_ue->imeisv_bcd,
amf_ue->imeisv, &amf_ue->imeisv_len);
ogs_nas_imeisv_bcd_to_buffer(amf_ue->imeisv_bcd,
amf_ue->masked_imeisv, &amf_ue->masked_imeisv_len);
amf_ue->masked_imeisv[5] = 0xff;
amf_ue->masked_imeisv[6] = 0xff;
if (amf_ue->pei)
ogs_free(amf_ue->pei);
amf_ue->pei = ogs_msprintf("imeisv-%s", amf_ue->imeisv_bcd);

View File

@ -62,18 +62,16 @@ void amf_nf_state_initial(ogs_fsm_t *s, amf_event_t *e)
ogs_assert(nf_instance);
ogs_assert(nf_instance->id);
nf_instance->t_registration_interval = ogs_timer_add(amf_self()->timer_mgr,
amf_timer_nf_instance_registration_interval, nf_instance);
ogs_assert(nf_instance->t_registration_interval);
nf_instance->t_heartbeat_interval = ogs_timer_add(amf_self()->timer_mgr,
amf_timer_nf_instance_heartbeat_interval, nf_instance);
nf_instance->t_registration_interval->cb =
amf_timer_nf_instance_registration_interval;
ogs_assert(nf_instance->t_heartbeat_interval);
nf_instance->t_heartbeat = ogs_timer_add(amf_self()->timer_mgr,
amf_timer_nf_instance_heartbeat, nf_instance);
nf_instance->t_heartbeat_interval->cb =
amf_timer_nf_instance_heartbeat_interval;
ogs_assert(nf_instance->t_heartbeat);
nf_instance->t_validity = ogs_timer_add(amf_self()->timer_mgr,
amf_timer_nf_instance_validity, nf_instance);
nf_instance->t_heartbeat->cb = amf_timer_nf_instance_heartbeat;
ogs_assert(nf_instance->t_validity);
nf_instance->t_validity->cb = amf_timer_nf_instance_validity;
if (NF_INSTANCE_IS_SELF(nf_instance->id)) {
OGS_FSM_TRAN(s, &amf_nf_state_will_register);
@ -84,20 +82,10 @@ void amf_nf_state_initial(ogs_fsm_t *s, amf_event_t *e)
void amf_nf_state_final(ogs_fsm_t *s, amf_event_t *e)
{
ogs_sbi_nf_instance_t *nf_instance = NULL;
ogs_assert(s);
ogs_assert(e);
amf_sm_debug(e);
nf_instance = e->sbi.data;
ogs_assert(nf_instance);
ogs_timer_delete(nf_instance->t_registration_interval);
ogs_timer_delete(nf_instance->t_heartbeat_interval);
ogs_timer_delete(nf_instance->t_heartbeat);
ogs_timer_delete(nf_instance->t_validity);
}
void amf_nf_state_will_register(ogs_fsm_t *s, amf_event_t *e)
@ -117,7 +105,8 @@ void amf_nf_state_will_register(ogs_fsm_t *s, amf_event_t *e)
switch (e->id) {
case OGS_FSM_ENTRY_SIG:
ogs_timer_start(nf_instance->t_registration_interval,
if (NF_INSTANCE_IS_SELF(nf_instance->id))
ogs_timer_start(nf_instance->t_registration_interval,
amf_timer_cfg(AMF_TIMER_NF_INSTANCE_REGISTRATION_INTERVAL)->
duration);
@ -125,7 +114,8 @@ void amf_nf_state_will_register(ogs_fsm_t *s, amf_event_t *e)
break;
case OGS_FSM_EXIT_SIG:
ogs_timer_stop(nf_instance->t_registration_interval);
if (NF_INSTANCE_IS_SELF(nf_instance->id))
ogs_timer_stop(nf_instance->t_registration_interval);
break;
case AMF_EVT_SBI_CLIENT:
@ -171,8 +161,9 @@ void amf_nf_state_will_register(ogs_fsm_t *s, amf_event_t *e)
ogs_warn("[%s] Retry to registration with NRF", nf_instance->id);
ogs_timer_start(nf_instance->t_registration_interval,
amf_timer_cfg(AMF_TIMER_NF_INSTANCE_REGISTRATION_INTERVAL)->
if (NF_INSTANCE_IS_SELF(nf_instance->id))
ogs_timer_start(nf_instance->t_registration_interval,
amf_timer_cfg(AMF_TIMER_NF_INSTANCE_REGISTRATION_INTERVAL)->
duration);
ogs_nnrf_nfm_send_nf_register(nf_instance);
@ -276,10 +267,9 @@ void amf_nf_state_registered(ogs_fsm_t *s, amf_event_t *e)
case AMF_EVT_SBI_TIMER:
switch(e->timer_id) {
case AMF_TIMER_NF_INSTANCE_HEARTBEAT_INTERVAL:
if (nf_instance->time.heartbeat) {
if (nf_instance->time.heartbeat)
ogs_timer_start(nf_instance->t_heartbeat_interval,
ogs_time_from_sec(nf_instance->time.heartbeat));
}
ogs_nnrf_nfm_send_nf_update(nf_instance);
break;
@ -350,17 +340,15 @@ void amf_nf_state_exception(ogs_fsm_t *s, amf_event_t *e)
switch (e->id) {
case OGS_FSM_ENTRY_SIG:
if (NF_INSTANCE_IS_SELF(nf_instance->id)) {
if (NF_INSTANCE_IS_SELF(nf_instance->id))
ogs_timer_start(nf_instance->t_registration_interval,
amf_timer_cfg(AMF_TIMER_NF_INSTANCE_REGISTRATION_INTERVAL)->
duration);
}
break;
case OGS_FSM_EXIT_SIG:
if (NF_INSTANCE_IS_SELF(nf_instance->id)) {
if (NF_INSTANCE_IS_SELF(nf_instance->id))
ogs_timer_stop(nf_instance->t_registration_interval);
}
break;
case AMF_EVT_SBI_TIMER:

View File

@ -146,7 +146,7 @@ ogs_pkbuf_t *ngap_build_ng_setup_response(void)
amf_self()->plmn_support[i].s_nssai[j].sst, sST);
if (amf_self()->plmn_support[i].s_nssai[j].sd.v !=
OGS_S_NSSAI_NO_SD_VALUE) {
s_NSSAI->sD = CALLOC(1, sizeof(ogs_uint24_t));
s_NSSAI->sD = CALLOC(1, sizeof(NGAP_SD_t));
ogs_asn_uint24_to_OCTET_STRING(
amf_self()->plmn_support[i].s_nssai[j].sd, s_NSSAI->sD);
}
@ -413,7 +413,7 @@ ogs_pkbuf_t *ngap_build_initial_context_setup_request(
ogs_asn_uint8_to_OCTET_STRING(sess->s_nssai.sst, sST);
if (sess->s_nssai.sd.v != OGS_S_NSSAI_NO_SD_VALUE) {
s_NSSAI->sD = CALLOC(1, sizeof(ogs_uint24_t));
s_NSSAI->sD = CALLOC(1, sizeof(NGAP_SD_t));
ogs_asn_uint24_to_OCTET_STRING(sess->s_nssai.sd, s_NSSAI->sD);
}
@ -489,7 +489,7 @@ ogs_pkbuf_t *ngap_build_initial_context_setup_request(
amf_self()->plmn_support[i].s_nssai[j].sst, sST);
if (amf_self()->plmn_support[i].s_nssai[j].sd.v !=
OGS_S_NSSAI_NO_SD_VALUE) {
s_NSSAI->sD = CALLOC(1, sizeof(ogs_uint24_t));
s_NSSAI->sD = CALLOC(1, sizeof(NGAP_SD_t));
ogs_asn_uint24_to_OCTET_STRING(
amf_self()->plmn_support[i].s_nssai[j].sd, s_NSSAI->sD);
}
@ -555,7 +555,7 @@ ogs_pkbuf_t *ngap_build_initial_context_setup_request(
UERadioCapability);
}
if (amf_ue->imeisv_len) {
if (amf_ue->masked_imeisv_len) {
ie = CALLOC(1, sizeof(NGAP_InitialContextSetupRequestIEs_t));
ASN_SEQUENCE_ADD(&InitialContextSetupRequest->protocolIEs, ie);
@ -566,12 +566,10 @@ ogs_pkbuf_t *ngap_build_initial_context_setup_request(
MaskedIMEISV = &ie->value.choice.MaskedIMEISV;
MaskedIMEISV->size = amf_ue->imeisv_len;
MaskedIMEISV->size = amf_ue->masked_imeisv_len;
MaskedIMEISV->buf = CALLOC(MaskedIMEISV->size, sizeof(uint8_t));
MaskedIMEISV->bits_unused = 0;
memcpy(MaskedIMEISV->buf, amf_ue->imeisv, MaskedIMEISV->size);
MaskedIMEISV->buf[5] = 0xff;
MaskedIMEISV->buf[6] = 0xff;
memcpy(MaskedIMEISV->buf, amf_ue->masked_imeisv, MaskedIMEISV->size);
}
if (gmmbuf) {
@ -900,7 +898,7 @@ ogs_pkbuf_t *ngap_build_pdu_session_resource_setup_request(
sST = &s_NSSAI->sST;
ogs_asn_uint8_to_OCTET_STRING(sess->s_nssai.sst, sST);
if (sess->s_nssai.sd.v != OGS_S_NSSAI_NO_SD_VALUE) {
s_NSSAI->sD = CALLOC(1, sizeof(ogs_uint24_t));
s_NSSAI->sD = CALLOC(1, sizeof(NGAP_SD_t));
ogs_asn_uint24_to_OCTET_STRING(sess->s_nssai.sd, s_NSSAI->sD);
}

View File

@ -104,7 +104,7 @@ void ngap_accept_handler(ogs_sock_t *sock)
ogs_assert(addr);
memcpy(addr, &new->remote_addr, sizeof(ogs_sockaddr_t));
ogs_info("eNB-S1 accepted[%s]:%d in s1_path module",
ogs_info("gNB-S1 accepted[%s]:%d in ng-path module",
OGS_ADDR(addr, buf), OGS_PORT(addr));
ngap_event_push(AMF_EVT_NGAP_LO_ACCEPT,

View File

@ -213,9 +213,17 @@ int amf_nsmf_pdu_session_handle_update_sm_context(
sess->n2smbuf = ogs_pkbuf_copy(n2smbuf);
ogs_assert(sess->n2smbuf);
if (SESSION_SYNC_DONE(amf_ue))
if (SESSION_SYNC_DONE(amf_ue)) {
nas_5gs_send_accept(amf_ue);
ogs_list_for_each(&amf_ue->sess_list, sess) {
if (sess->n2smbuf) {
ogs_pkbuf_free(sess->n2smbuf);
sess->n2smbuf = NULL;
}
}
}
} else {
ogs_error("Invalid UpCnxState [UE:%d,SMF:%d]",
sess->ueUpCnxState, sess->smfUpCnxState);

View File

@ -62,18 +62,16 @@ void ausf_nf_state_initial(ogs_fsm_t *s, ausf_event_t *e)
ogs_assert(nf_instance);
ogs_assert(nf_instance->id);
nf_instance->t_registration_interval = ogs_timer_add(ausf_self()->timer_mgr,
ausf_timer_nf_instance_registration_interval, nf_instance);
ogs_assert(nf_instance->t_registration_interval);
nf_instance->t_heartbeat_interval = ogs_timer_add(ausf_self()->timer_mgr,
ausf_timer_nf_instance_heartbeat_interval, nf_instance);
nf_instance->t_registration_interval->cb =
ausf_timer_nf_instance_registration_interval;
ogs_assert(nf_instance->t_heartbeat_interval);
nf_instance->t_heartbeat = ogs_timer_add(ausf_self()->timer_mgr,
ausf_timer_nf_instance_heartbeat, nf_instance);
nf_instance->t_heartbeat_interval->cb =
ausf_timer_nf_instance_heartbeat_interval;
ogs_assert(nf_instance->t_heartbeat);
nf_instance->t_validity = ogs_timer_add(ausf_self()->timer_mgr,
ausf_timer_nf_instance_validity, nf_instance);
nf_instance->t_heartbeat->cb = ausf_timer_nf_instance_heartbeat;
ogs_assert(nf_instance->t_validity);
nf_instance->t_validity->cb = ausf_timer_nf_instance_validity;
if (NF_INSTANCE_IS_SELF(nf_instance->id)) {
OGS_FSM_TRAN(s, &ausf_nf_state_will_register);
@ -84,20 +82,10 @@ void ausf_nf_state_initial(ogs_fsm_t *s, ausf_event_t *e)
void ausf_nf_state_final(ogs_fsm_t *s, ausf_event_t *e)
{
ogs_sbi_nf_instance_t *nf_instance = NULL;
ogs_assert(s);
ogs_assert(e);
ausf_sm_debug(e);
nf_instance = e->sbi.data;
ogs_assert(nf_instance);
ogs_timer_delete(nf_instance->t_registration_interval);
ogs_timer_delete(nf_instance->t_heartbeat_interval);
ogs_timer_delete(nf_instance->t_heartbeat);
ogs_timer_delete(nf_instance->t_validity);
}
void ausf_nf_state_will_register(ogs_fsm_t *s, ausf_event_t *e)
@ -117,7 +105,8 @@ void ausf_nf_state_will_register(ogs_fsm_t *s, ausf_event_t *e)
switch (e->id) {
case OGS_FSM_ENTRY_SIG:
ogs_timer_start(nf_instance->t_registration_interval,
if (NF_INSTANCE_IS_SELF(nf_instance->id))
ogs_timer_start(nf_instance->t_registration_interval,
ausf_timer_cfg(AUSF_TIMER_NF_INSTANCE_REGISTRATION_INTERVAL)->
duration);
@ -125,7 +114,8 @@ void ausf_nf_state_will_register(ogs_fsm_t *s, ausf_event_t *e)
break;
case OGS_FSM_EXIT_SIG:
ogs_timer_stop(nf_instance->t_registration_interval);
if (NF_INSTANCE_IS_SELF(nf_instance->id))
ogs_timer_stop(nf_instance->t_registration_interval);
break;
case AUSF_EVT_SBI_CLIENT:
@ -171,7 +161,8 @@ void ausf_nf_state_will_register(ogs_fsm_t *s, ausf_event_t *e)
ogs_warn("[%s] Retry to registration with NRF", nf_instance->id);
ogs_timer_start(nf_instance->t_registration_interval,
if (NF_INSTANCE_IS_SELF(nf_instance->id))
ogs_timer_start(nf_instance->t_registration_interval,
ausf_timer_cfg(AUSF_TIMER_NF_INSTANCE_REGISTRATION_INTERVAL)->
duration);
@ -276,10 +267,9 @@ void ausf_nf_state_registered(ogs_fsm_t *s, ausf_event_t *e)
case AUSF_EVT_SBI_TIMER:
switch(e->timer_id) {
case AUSF_TIMER_NF_INSTANCE_HEARTBEAT_INTERVAL:
if (nf_instance->time.heartbeat) {
if (nf_instance->time.heartbeat)
ogs_timer_start(nf_instance->t_heartbeat_interval,
ogs_time_from_sec(nf_instance->time.heartbeat));
}
ogs_nnrf_nfm_send_nf_update(nf_instance);
break;
@ -352,17 +342,15 @@ void ausf_nf_state_exception(ogs_fsm_t *s, ausf_event_t *e)
switch (e->id) {
case OGS_FSM_ENTRY_SIG:
if (NF_INSTANCE_IS_SELF(nf_instance->id)) {
if (NF_INSTANCE_IS_SELF(nf_instance->id))
ogs_timer_start(nf_instance->t_registration_interval,
ausf_timer_cfg(AUSF_TIMER_NF_INSTANCE_REGISTRATION_INTERVAL)->
duration);
}
break;
case OGS_FSM_EXIT_SIG:
if (NF_INSTANCE_IS_SELF(nf_instance->id)) {
if (NF_INSTANCE_IS_SELF(nf_instance->id))
ogs_timer_stop(nf_instance->t_registration_interval);
}
break;
case AUSF_EVT_SBI_TIMER:

View File

@ -655,7 +655,10 @@ int emm_handle_security_mode_complete(mme_ue_t *mme_ue,
mme_ue->imeisv_bcd);
ogs_bcd_to_buffer(mme_ue->imeisv_bcd,
mme_ue->imeisv, &mme_ue->imeisv_len);
mme_ue->imeisv_presence = true;
ogs_nas_imeisv_bcd_to_buffer(mme_ue->imeisv_bcd,
mme_ue->masked_imeisv, &mme_ue->masked_imeisv_len);
mme_ue->masked_imeisv[5] = 0xff;
mme_ue->masked_imeisv[6] = 0xff;
break;
default:
ogs_warn("Invalid IMEISV Type[%d]", imeisv->imeisv.type);

View File

@ -310,9 +310,10 @@ struct mme_ue_s {
char imsi_bcd[OGS_MAX_IMSI_BCD_LEN+1];
ogs_nas_mobile_identity_imsi_t nas_mobile_identity_imsi;
bool imeisv_presence;
uint8_t imeisv[OGS_MAX_IMEISV_LEN];
int imeisv_len;
uint8_t masked_imeisv[OGS_MAX_IMEISV_LEN];
int masked_imeisv_len;
char imeisv_bcd[OGS_MAX_IMEISV_BCD_LEN+1];
ogs_nas_mobile_identity_imeisv_t nas_mobile_identity_imeisv;

View File

@ -493,7 +493,7 @@ void mme_s6a_send_ulr(mme_ue_t *mme_ue)
ogs_assert(ret == 0);
/* Set the Terminal-Information AVP */
if (mme_ue->imeisv_presence) {
if (mme_ue->imeisv_len) {
ret = fd_msg_avp_new(ogs_diam_s6a_terminal_information, 0, &avp);
ogs_assert(ret == 0);

View File

@ -61,7 +61,7 @@ ogs_pkbuf_t *mme_s11_build_create_session_request(
req->imsi.data = mme_ue->imsi;
req->imsi.len = mme_ue->imsi_len;
if (mme_ue->imeisv_presence) {
if (mme_ue->imeisv_len) {
req->me_identity.presence = 1;
req->me_identity.data = mme_ue->imeisv;
req->me_identity.len = mme_ue->imeisv_len;

View File

@ -274,6 +274,7 @@ ogs_pkbuf_t *s1ap_build_initial_context_setup_request(
S1AP_E_RABToBeSetupListCtxtSUReq_t *E_RABToBeSetupListCtxtSUReq = NULL;
S1AP_UESecurityCapabilities_t *UESecurityCapabilities = NULL;
S1AP_SecurityKey_t *SecurityKey = NULL;
S1AP_Masked_IMEISV_t *Masked_IMEISV = NULL;
enb_ue_t *enb_ue = NULL;
mme_sess_t *sess = NULL;
@ -537,6 +538,23 @@ ogs_pkbuf_t *s1ap_build_initial_context_setup_request(
UERadioCapability);
}
if (mme_ue->imeisv_len) {
ie = CALLOC(1, sizeof(S1AP_InitialContextSetupRequestIEs_t));
ASN_SEQUENCE_ADD(&InitialContextSetupRequest->protocolIEs, ie);
ie->id = S1AP_ProtocolIE_ID_id_Masked_IMEISV;
ie->criticality = S1AP_Criticality_ignore;
ie->value.present =
S1AP_InitialContextSetupRequestIEs__value_PR_Masked_IMEISV;
Masked_IMEISV = &ie->value.choice.Masked_IMEISV;
Masked_IMEISV->size = mme_ue->masked_imeisv_len;
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);
}
return ogs_s1ap_encode(&pdu);
}

View File

@ -62,18 +62,16 @@ void smf_nf_state_initial(ogs_fsm_t *s, smf_event_t *e)
ogs_assert(nf_instance);
ogs_assert(nf_instance->id);
nf_instance->t_registration_interval = ogs_timer_add(smf_self()->timer_mgr,
smf_timer_nf_instance_registration_interval, nf_instance);
ogs_assert(nf_instance->t_registration_interval);
nf_instance->t_heartbeat_interval = ogs_timer_add(smf_self()->timer_mgr,
smf_timer_nf_instance_heartbeat_interval, nf_instance);
nf_instance->t_registration_interval->cb =
smf_timer_nf_instance_registration_interval;
ogs_assert(nf_instance->t_heartbeat_interval);
nf_instance->t_heartbeat = ogs_timer_add(smf_self()->timer_mgr,
smf_timer_nf_instance_heartbeat, nf_instance);
nf_instance->t_heartbeat_interval->cb =
smf_timer_nf_instance_heartbeat_interval;
ogs_assert(nf_instance->t_heartbeat);
nf_instance->t_validity = ogs_timer_add(smf_self()->timer_mgr,
smf_timer_nf_instance_validity, nf_instance);
nf_instance->t_heartbeat->cb = smf_timer_nf_instance_heartbeat;
ogs_assert(nf_instance->t_validity);
nf_instance->t_validity->cb = smf_timer_nf_instance_validity;
if (NF_INSTANCE_IS_SELF(nf_instance->id)) {
OGS_FSM_TRAN(s, &smf_nf_state_will_register);
@ -84,20 +82,10 @@ void smf_nf_state_initial(ogs_fsm_t *s, smf_event_t *e)
void smf_nf_state_final(ogs_fsm_t *s, smf_event_t *e)
{
ogs_sbi_nf_instance_t *nf_instance = NULL;
ogs_assert(s);
ogs_assert(e);
smf_sm_debug(e);
nf_instance = e->sbi.data;
ogs_assert(nf_instance);
ogs_timer_delete(nf_instance->t_registration_interval);
ogs_timer_delete(nf_instance->t_heartbeat_interval);
ogs_timer_delete(nf_instance->t_heartbeat);
ogs_timer_delete(nf_instance->t_validity);
}
void smf_nf_state_will_register(ogs_fsm_t *s, smf_event_t *e)
@ -117,7 +105,8 @@ void smf_nf_state_will_register(ogs_fsm_t *s, smf_event_t *e)
switch (e->id) {
case OGS_FSM_ENTRY_SIG:
ogs_timer_start(nf_instance->t_registration_interval,
if (NF_INSTANCE_IS_SELF(nf_instance->id))
ogs_timer_start(nf_instance->t_registration_interval,
smf_timer_cfg(SMF_TIMER_NF_INSTANCE_REGISTRATION_INTERVAL)->
duration);
@ -125,7 +114,8 @@ void smf_nf_state_will_register(ogs_fsm_t *s, smf_event_t *e)
break;
case OGS_FSM_EXIT_SIG:
ogs_timer_stop(nf_instance->t_registration_interval);
if (NF_INSTANCE_IS_SELF(nf_instance->id))
ogs_timer_stop(nf_instance->t_registration_interval);
break;
case SMF_EVT_SBI_CLIENT:
@ -171,8 +161,9 @@ void smf_nf_state_will_register(ogs_fsm_t *s, smf_event_t *e)
ogs_warn("[%s] Retry to registration with NRF", nf_instance->id);
ogs_timer_start(nf_instance->t_registration_interval,
smf_timer_cfg(SMF_TIMER_NF_INSTANCE_REGISTRATION_INTERVAL)->
if (NF_INSTANCE_IS_SELF(nf_instance->id))
ogs_timer_start(nf_instance->t_registration_interval,
smf_timer_cfg(SMF_TIMER_NF_INSTANCE_REGISTRATION_INTERVAL)->
duration);
ogs_nnrf_nfm_send_nf_register(nf_instance);
@ -277,10 +268,9 @@ void smf_nf_state_registered(ogs_fsm_t *s, smf_event_t *e)
case SMF_EVT_SBI_TIMER:
switch(e->timer_id) {
case SMF_TIMER_NF_INSTANCE_HEARTBEAT_INTERVAL:
if (nf_instance->time.heartbeat) {
if (nf_instance->time.heartbeat)
ogs_timer_start(nf_instance->t_heartbeat_interval,
ogs_time_from_sec(nf_instance->time.heartbeat));
}
ogs_nnrf_nfm_send_nf_update(nf_instance);
break;
@ -353,17 +343,15 @@ void smf_nf_state_exception(ogs_fsm_t *s, smf_event_t *e)
switch (e->id) {
case OGS_FSM_ENTRY_SIG:
if (NF_INSTANCE_IS_SELF(nf_instance->id)) {
if (NF_INSTANCE_IS_SELF(nf_instance->id))
ogs_timer_start(nf_instance->t_registration_interval,
smf_timer_cfg(SMF_TIMER_NF_INSTANCE_REGISTRATION_INTERVAL)->
duration);
}
break;
case OGS_FSM_EXIT_SIG:
if (NF_INSTANCE_IS_SELF(nf_instance->id)) {
if (NF_INSTANCE_IS_SELF(nf_instance->id))
ogs_timer_stop(nf_instance->t_registration_interval);
}
break;
case SMF_EVT_SBI_TIMER:

View File

@ -250,6 +250,8 @@ bool smf_nsmf_handle_update_sm_context(
/*********************************************************
* Handle ACTIVATING
********************************************************/
OpenAPI_sm_context_updated_data_t SmContextUpdatedData;
OpenAPI_ref_to_binary_data_t n2SmInfo;
if (sess->smfUpCnxState == OpenAPI_up_cnx_state_ACTIVATED) {
ogs_warn("[%s:%d] FALLBACK - UpCnxState has already been "
@ -295,9 +297,6 @@ bool smf_nsmf_handle_update_sm_context(
"ACTIVATING", smf_ue->supi, sess->psi);
}
OpenAPI_sm_context_updated_data_t SmContextUpdatedData;
OpenAPI_ref_to_binary_data_t n2SmInfo;
/* UPDATE_UpCnxState - SYNC */
sess->smfUpCnxState = sess->ueUpCnxState;

View File

@ -62,18 +62,16 @@ void udm_nf_state_initial(ogs_fsm_t *s, udm_event_t *e)
ogs_assert(nf_instance);
ogs_assert(nf_instance->id);
nf_instance->t_registration_interval = ogs_timer_add(udm_self()->timer_mgr,
udm_timer_nf_instance_registration_interval, nf_instance);
ogs_assert(nf_instance->t_registration_interval);
nf_instance->t_heartbeat_interval = ogs_timer_add(udm_self()->timer_mgr,
udm_timer_nf_instance_heartbeat_interval, nf_instance);
nf_instance->t_registration_interval->cb =
udm_timer_nf_instance_registration_interval;
ogs_assert(nf_instance->t_heartbeat_interval);
nf_instance->t_heartbeat = ogs_timer_add(udm_self()->timer_mgr,
udm_timer_nf_instance_heartbeat, nf_instance);
nf_instance->t_heartbeat_interval->cb =
udm_timer_nf_instance_heartbeat_interval;
ogs_assert(nf_instance->t_heartbeat);
nf_instance->t_validity = ogs_timer_add(udm_self()->timer_mgr,
udm_timer_nf_instance_validity, nf_instance);
nf_instance->t_heartbeat->cb = udm_timer_nf_instance_heartbeat;
ogs_assert(nf_instance->t_validity);
nf_instance->t_validity->cb = udm_timer_nf_instance_validity;
if (NF_INSTANCE_IS_SELF(nf_instance->id)) {
OGS_FSM_TRAN(s, &udm_nf_state_will_register);
@ -84,20 +82,10 @@ void udm_nf_state_initial(ogs_fsm_t *s, udm_event_t *e)
void udm_nf_state_final(ogs_fsm_t *s, udm_event_t *e)
{
ogs_sbi_nf_instance_t *nf_instance = NULL;
ogs_assert(s);
ogs_assert(e);
udm_sm_debug(e);
nf_instance = e->sbi.data;
ogs_assert(nf_instance);
ogs_timer_delete(nf_instance->t_registration_interval);
ogs_timer_delete(nf_instance->t_heartbeat_interval);
ogs_timer_delete(nf_instance->t_heartbeat);
ogs_timer_delete(nf_instance->t_validity);
}
void udm_nf_state_will_register(ogs_fsm_t *s, udm_event_t *e)
@ -117,7 +105,8 @@ void udm_nf_state_will_register(ogs_fsm_t *s, udm_event_t *e)
switch (e->id) {
case OGS_FSM_ENTRY_SIG:
ogs_timer_start(nf_instance->t_registration_interval,
if (NF_INSTANCE_IS_SELF(nf_instance->id))
ogs_timer_start(nf_instance->t_registration_interval,
udm_timer_cfg(UDM_TIMER_NF_INSTANCE_REGISTRATION_INTERVAL)->
duration);
@ -125,7 +114,8 @@ void udm_nf_state_will_register(ogs_fsm_t *s, udm_event_t *e)
break;
case OGS_FSM_EXIT_SIG:
ogs_timer_stop(nf_instance->t_registration_interval);
if (NF_INSTANCE_IS_SELF(nf_instance->id))
ogs_timer_stop(nf_instance->t_registration_interval);
break;
case UDM_EVT_SBI_CLIENT:
@ -171,8 +161,9 @@ void udm_nf_state_will_register(ogs_fsm_t *s, udm_event_t *e)
ogs_warn("[%s] Retry to registration with NRF", nf_instance->id);
ogs_timer_start(nf_instance->t_registration_interval,
udm_timer_cfg(UDM_TIMER_NF_INSTANCE_REGISTRATION_INTERVAL)->
if (NF_INSTANCE_IS_SELF(nf_instance->id))
ogs_timer_start(nf_instance->t_registration_interval,
udm_timer_cfg(UDM_TIMER_NF_INSTANCE_REGISTRATION_INTERVAL)->
duration);
ogs_nnrf_nfm_send_nf_register(nf_instance);
@ -276,10 +267,9 @@ void udm_nf_state_registered(ogs_fsm_t *s, udm_event_t *e)
case UDM_EVT_SBI_TIMER:
switch(e->timer_id) {
case UDM_TIMER_NF_INSTANCE_HEARTBEAT_INTERVAL:
if (nf_instance->time.heartbeat) {
if (nf_instance->time.heartbeat)
ogs_timer_start(nf_instance->t_heartbeat_interval,
ogs_time_from_sec(nf_instance->time.heartbeat));
}
ogs_nnrf_nfm_send_nf_update(nf_instance);
break;
@ -352,17 +342,15 @@ void udm_nf_state_exception(ogs_fsm_t *s, udm_event_t *e)
switch (e->id) {
case OGS_FSM_ENTRY_SIG:
if (NF_INSTANCE_IS_SELF(nf_instance->id)) {
if (NF_INSTANCE_IS_SELF(nf_instance->id))
ogs_timer_start(nf_instance->t_registration_interval,
udm_timer_cfg(UDM_TIMER_NF_INSTANCE_REGISTRATION_INTERVAL)->
duration);
}
break;
case OGS_FSM_EXIT_SIG:
if (NF_INSTANCE_IS_SELF(nf_instance->id)) {
if (NF_INSTANCE_IS_SELF(nf_instance->id))
ogs_timer_stop(nf_instance->t_registration_interval);
}
break;
case UDM_EVT_SBI_TIMER:

View File

@ -62,18 +62,16 @@ void udr_nf_state_initial(ogs_fsm_t *s, udr_event_t *e)
ogs_assert(nf_instance);
ogs_assert(nf_instance->id);
nf_instance->t_registration_interval = ogs_timer_add(udr_self()->timer_mgr,
udr_timer_nf_instance_registration_interval, nf_instance);
ogs_assert(nf_instance->t_registration_interval);
nf_instance->t_heartbeat_interval = ogs_timer_add(udr_self()->timer_mgr,
udr_timer_nf_instance_heartbeat_interval, nf_instance);
nf_instance->t_registration_interval->cb =
udr_timer_nf_instance_registration_interval;
ogs_assert(nf_instance->t_heartbeat_interval);
nf_instance->t_heartbeat = ogs_timer_add(udr_self()->timer_mgr,
udr_timer_nf_instance_heartbeat, nf_instance);
nf_instance->t_heartbeat_interval->cb =
udr_timer_nf_instance_heartbeat_interval;
ogs_assert(nf_instance->t_heartbeat);
nf_instance->t_validity = ogs_timer_add(udr_self()->timer_mgr,
udr_timer_nf_instance_validity, nf_instance);
nf_instance->t_heartbeat->cb = udr_timer_nf_instance_heartbeat;
ogs_assert(nf_instance->t_validity);
nf_instance->t_validity->cb = udr_timer_nf_instance_validity;
if (NF_INSTANCE_IS_SELF(nf_instance->id)) {
OGS_FSM_TRAN(s, &udr_nf_state_will_register);
@ -84,20 +82,10 @@ void udr_nf_state_initial(ogs_fsm_t *s, udr_event_t *e)
void udr_nf_state_final(ogs_fsm_t *s, udr_event_t *e)
{
ogs_sbi_nf_instance_t *nf_instance = NULL;
ogs_assert(s);
ogs_assert(e);
udr_sm_debug(e);
nf_instance = e->sbi.data;
ogs_assert(nf_instance);
ogs_timer_delete(nf_instance->t_registration_interval);
ogs_timer_delete(nf_instance->t_heartbeat_interval);
ogs_timer_delete(nf_instance->t_heartbeat);
ogs_timer_delete(nf_instance->t_validity);
}
void udr_nf_state_will_register(ogs_fsm_t *s, udr_event_t *e)
@ -117,7 +105,8 @@ void udr_nf_state_will_register(ogs_fsm_t *s, udr_event_t *e)
switch (e->id) {
case OGS_FSM_ENTRY_SIG:
ogs_timer_start(nf_instance->t_registration_interval,
if (NF_INSTANCE_IS_SELF(nf_instance->id))
ogs_timer_start(nf_instance->t_registration_interval,
udr_timer_cfg(UDR_TIMER_NF_INSTANCE_REGISTRATION_INTERVAL)->
duration);
@ -125,7 +114,8 @@ void udr_nf_state_will_register(ogs_fsm_t *s, udr_event_t *e)
break;
case OGS_FSM_EXIT_SIG:
ogs_timer_stop(nf_instance->t_registration_interval);
if (NF_INSTANCE_IS_SELF(nf_instance->id))
ogs_timer_stop(nf_instance->t_registration_interval);
break;
case UDR_EVT_SBI_CLIENT:
@ -171,8 +161,9 @@ void udr_nf_state_will_register(ogs_fsm_t *s, udr_event_t *e)
ogs_warn("[%s] Retry to registration with NRF", nf_instance->id);
ogs_timer_start(nf_instance->t_registration_interval,
udr_timer_cfg(UDR_TIMER_NF_INSTANCE_REGISTRATION_INTERVAL)->
if (NF_INSTANCE_IS_SELF(nf_instance->id))
ogs_timer_start(nf_instance->t_registration_interval,
udr_timer_cfg(UDR_TIMER_NF_INSTANCE_REGISTRATION_INTERVAL)->
duration);
ogs_nnrf_nfm_send_nf_register(nf_instance);
@ -276,10 +267,9 @@ void udr_nf_state_registered(ogs_fsm_t *s, udr_event_t *e)
case UDR_EVT_SBI_TIMER:
switch(e->timer_id) {
case UDR_TIMER_NF_INSTANCE_HEARTBEAT_INTERVAL:
if (nf_instance->time.heartbeat) {
if (nf_instance->time.heartbeat)
ogs_timer_start(nf_instance->t_heartbeat_interval,
ogs_time_from_sec(nf_instance->time.heartbeat));
}
ogs_nnrf_nfm_send_nf_update(nf_instance);
break;
@ -352,17 +342,15 @@ void udr_nf_state_exception(ogs_fsm_t *s, udr_event_t *e)
switch (e->id) {
case OGS_FSM_ENTRY_SIG:
if (NF_INSTANCE_IS_SELF(nf_instance->id)) {
if (NF_INSTANCE_IS_SELF(nf_instance->id))
ogs_timer_start(nf_instance->t_registration_interval,
udr_timer_cfg(UDR_TIMER_NF_INSTANCE_REGISTRATION_INTERVAL)->
duration);
}
break;
case OGS_FSM_EXIT_SIG:
if (NF_INSTANCE_IS_SELF(nf_instance->id)) {
if (NF_INSTANCE_IS_SELF(nf_instance->id))
ogs_timer_stop(nf_instance->t_registration_interval);
}
break;
case UDR_EVT_SBI_TIMER:

View File

@ -152,6 +152,11 @@ static void _gtpv1_u_recv_cb(short when, ogs_socket_t fd, void *data)
goto cleanup;
}
if (gtp_h->type == OGS_GTPU_MSGTYPE_ERR_IND) {
ogs_error("[RECV] Error Indication from [%s]", OGS_ADDR(&from, buf));
goto cleanup;
}
if (gtp_h->type != OGS_GTPU_MSGTYPE_GPDU) {
ogs_error("[DROP] Invalid GTPU Type [%d]", gtp_h->type);
ogs_log_hexdump(OGS_LOG_ERROR, pkbuf->data, pkbuf->len);

View File

@ -118,6 +118,29 @@ static void test1_func(abts_case *tc, void *data)
test_ue_set_mobile_identity_suci(&test_ue, &mobile_identity_suci, 13);
memset(&test_ue.mobile_identity_imeisv, 0,
sizeof(ogs_nas_mobile_identity_imeisv_t));
test_ue.mobile_identity_imeisv.type = OGS_NAS_5GS_MOBILE_IDENTITY_IMEISV;
test_ue.mobile_identity_imeisv.odd_even = OGS_NAS_MOBILE_IDENTITY_EVEN;
test_ue.mobile_identity_imeisv.digit1 = 8;
test_ue.mobile_identity_imeisv.digit2 = 6;
test_ue.mobile_identity_imeisv.digit3 = 6;
test_ue.mobile_identity_imeisv.digit4 = 5;
test_ue.mobile_identity_imeisv.digit5 = 0;
test_ue.mobile_identity_imeisv.digit6 = 7;
test_ue.mobile_identity_imeisv.digit7 = 0;
test_ue.mobile_identity_imeisv.digit8 = 4;
test_ue.mobile_identity_imeisv.digit9 = 0;
test_ue.mobile_identity_imeisv.digit10 = 0;
test_ue.mobile_identity_imeisv.digit11 = 4;
test_ue.mobile_identity_imeisv.digit12 = 0;
test_ue.mobile_identity_imeisv.digit13 = 5;
test_ue.mobile_identity_imeisv.digit14 = 3;
test_ue.mobile_identity_imeisv.digit15 = 0;
test_ue.mobile_identity_imeisv.digit16 = 1;
test_ue.mobile_identity_imeisv.digit17 = 0xf;
test_ue.nas.access_type = OGS_ACCESS_TYPE_3GPP;
test_ue.abba_len = 2;
@ -272,8 +295,6 @@ static void test1_func(abts_case *tc, void *data)
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
/* Send Registration complete */
gmmbuf = testgmm_build_registration_complete(&test_ue);
ABTS_PTR_NOTNULL(tc, gmmbuf);
@ -287,7 +308,6 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, recvbuf);
testngap_recv(&test_ue, recvbuf);
#if 0
/* Send PDU session establishment request */
gsmbuf = testgsm_build_pdu_session_establishment_request(&test_sess);
ABTS_PTR_NOTNULL(tc, gsmbuf);
@ -300,6 +320,8 @@ static void test1_func(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, OGS_OK, rv);
/* Receive PDU session establishment accept */
ogs_msleep(100);
recvbuf = testgnb_ngap_read(ngap);
ABTS_PTR_NOTNULL(tc, recvbuf);
testngap_recv(&test_ue, recvbuf);
@ -310,16 +332,12 @@ static void test1_func(abts_case *tc, void *data)
rv = testgnb_gtpu_send(gtpu, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
/* Send PDU session resource setup response */
sendbuf = testngap_build_pdu_session_resource_setup_response(&test_sess);
ABTS_PTR_NOTNULL(tc, sendbuf);
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
/* Receive GTP-U ICMP Packet */
recvbuf = testgnb_gtpu_read(gtpu);
ABTS_PTR_NOTNULL(tc, recvbuf);
@ -336,7 +354,7 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, recvbuf);
ogs_pkbuf_free(recvbuf);
ogs_msleep(50);
ogs_msleep(100);
/* Send De-registration request */
gmmbuf = testgmm_build_de_registration_request(&test_ue, 1);
@ -356,9 +374,8 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, sendbuf);
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
#endif
ogs_msleep(50);
ogs_msleep(100);
/********** Remove Subscriber in Database */
doc = BCON_NEW("imsi", BCON_UTF8(test_ue.imsi));

View File

@ -109,6 +109,7 @@ typedef struct test_ue_s {
char *supi; /* TS33.501 : SUPI */
ogs_nas_5gs_mobile_identity_suci_t mobile_identity_suci;
ogs_nas_mobile_identity_imeisv_t mobile_identity_imeisv;
uint16_t mobile_identity_suci_length;
ogs_nas_5gs_guti_t nas_guti;

View File

@ -517,17 +517,14 @@ ogs_pkbuf_t *testgmm_build_security_mode_complete(
OGS_NAS_EXTENDED_PROTOCOL_DISCRIMINATOR_5GMM;
message.gmm.h.message_type = OGS_NAS_5GS_SECURITY_MODE_COMPLETE;
security_mode_complete->presencemask |=
OGS_NAS_5GS_SECURITY_MODE_COMPLETE_IMEISV_PRESENT;
memset(&mobile_identity_imeisv, 0, sizeof(mobile_identity_imeisv));
imeisv->length = sizeof(mobile_identity_imeisv);
imeisv->buffer = &mobile_identity_imeisv;
mobile_identity_imeisv.type = OGS_NAS_5GS_MOBILE_IDENTITY_IMEISV;
mobile_identity_imeisv.odd_even = OGS_NAS_MOBILE_IDENTITY_EVEN;
mobile_identity_imeisv.digit1 = 1;
mobile_identity_imeisv.digit2 = 1;
mobile_identity_imeisv.digit3 = 1;
if (test_ue->mobile_identity_imeisv.type ==
OGS_NAS_5GS_MOBILE_IDENTITY_IMEISV) {
security_mode_complete->presencemask |=
OGS_NAS_5GS_SECURITY_MODE_COMPLETE_IMEISV_PRESENT;
memset(&mobile_identity_imeisv, 0, sizeof(mobile_identity_imeisv));
imeisv->length = sizeof(mobile_identity_imeisv);
imeisv->buffer = &test_ue->mobile_identity_imeisv;
}
if (nasbuf) {
security_mode_complete->presencemask |=

View File

@ -137,7 +137,7 @@ ogs_pkbuf_t *testngap_build_ng_setup_request(uint32_t gnb_id, uint8_t bitsize)
sd.v = s_nssai->sd.v;
if (sd.v == OGS_S_NSSAI_NO_SD_VALUE)
sd.v = 0x010000;
SliceSupportItem->s_NSSAI.sD = CALLOC(1, sizeof(ogs_uint24_t));
SliceSupportItem->s_NSSAI.sD = CALLOC(1, sizeof(NGAP_SD_t));
ogs_asn_uint24_to_OCTET_STRING(sd, SliceSupportItem->s_NSSAI.sD);
ASN_SEQUENCE_ADD(&BroadcastPLMNItem->tAISliceSupportList.list,
@ -696,7 +696,7 @@ ogs_pkbuf_t *testngap_build_ue_context_release_request(test_ue_t *test_ue,
PDUSessionList = &ie->value.choice.PDUSessionResourceListCxtRelReq;
PDUSessionItem =
CALLOC(1, sizeof(struct NGAP_PDUSessionResourceSetupItemSURes));
CALLOC(1, sizeof(struct NGAP_PDUSessionResourceItemCxtRelReq));
ASN_SEQUENCE_ADD(&PDUSessionList->list, PDUSessionItem);
sess = test_ue->sess;

View File

@ -118,6 +118,14 @@ static void test1_func(abts_case *tc, void *data)
test_ue_set_mobile_identity_suci(&test_ue, &mobile_identity_suci, 12);
memset(&test_ue.mobile_identity_imeisv, 0,
sizeof(ogs_nas_mobile_identity_imeisv_t));
test_ue.mobile_identity_imeisv.type = OGS_NAS_5GS_MOBILE_IDENTITY_IMEISV;
test_ue.mobile_identity_imeisv.odd_even = OGS_NAS_MOBILE_IDENTITY_EVEN;
test_ue.mobile_identity_imeisv.digit1 = 1;
test_ue.mobile_identity_imeisv.digit2 = 1;
test_ue.mobile_identity_imeisv.digit3 = 1;
test_ue.nas.access_type = OGS_ACCESS_TYPE_3GPP;
test_ue.abba_len = 2;
@ -292,6 +300,8 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, recvbuf);
ogs_pkbuf_free(recvbuf);
ogs_msleep(100);
/********** Remove Subscriber in Database */
doc = BCON_NEW("imsi", BCON_UTF8(test_ue.imsi));
ABTS_PTR_NOTNULL(tc, doc);

View File

@ -118,6 +118,28 @@ static void test1_func(abts_case *tc, void *data)
test_ue_set_mobile_identity_suci(&test_ue, &mobile_identity_suci, 13);
memset(&test_ue.mobile_identity_imeisv, 0,
sizeof(ogs_nas_mobile_identity_imeisv_t));
test_ue.mobile_identity_imeisv.type = OGS_NAS_5GS_MOBILE_IDENTITY_IMEISV;
test_ue.mobile_identity_imeisv.odd_even = OGS_NAS_MOBILE_IDENTITY_EVEN;
test_ue.mobile_identity_imeisv.digit1 = 8;
test_ue.mobile_identity_imeisv.digit2 = 6;
test_ue.mobile_identity_imeisv.digit3 = 6;
test_ue.mobile_identity_imeisv.digit4 = 5;
test_ue.mobile_identity_imeisv.digit5 = 0;
test_ue.mobile_identity_imeisv.digit6 = 7;
test_ue.mobile_identity_imeisv.digit7 = 0;
test_ue.mobile_identity_imeisv.digit8 = 4;
test_ue.mobile_identity_imeisv.digit9 = 0;
test_ue.mobile_identity_imeisv.digit10 = 0;
test_ue.mobile_identity_imeisv.digit11 = 4;
test_ue.mobile_identity_imeisv.digit12 = 0;
test_ue.mobile_identity_imeisv.digit13 = 5;
test_ue.mobile_identity_imeisv.digit14 = 3;
test_ue.mobile_identity_imeisv.digit15 = 0;
test_ue.mobile_identity_imeisv.digit16 = 1;
test_ue.mobile_identity_imeisv.digit17 = 0xf;
test_ue.nas.access_type = OGS_ACCESS_TYPE_3GPP;
test_ue.abba_len = 2;
@ -234,7 +256,7 @@ static void test1_func(abts_case *tc, void *data)
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
ogs_msleep(100);
/********** Remove Subscriber in Database */
doc = BCON_NEW("imsi", BCON_UTF8(test_ue.imsi));

View File

@ -118,6 +118,28 @@ static void test1_func(abts_case *tc, void *data)
test_ue_set_mobile_identity_suci(&test_ue, &mobile_identity_suci, 13);
memset(&test_ue.mobile_identity_imeisv, 0,
sizeof(ogs_nas_mobile_identity_imeisv_t));
test_ue.mobile_identity_imeisv.type = OGS_NAS_5GS_MOBILE_IDENTITY_IMEISV;
test_ue.mobile_identity_imeisv.odd_even = OGS_NAS_MOBILE_IDENTITY_EVEN;
test_ue.mobile_identity_imeisv.digit1 = 8;
test_ue.mobile_identity_imeisv.digit2 = 6;
test_ue.mobile_identity_imeisv.digit3 = 6;
test_ue.mobile_identity_imeisv.digit4 = 5;
test_ue.mobile_identity_imeisv.digit5 = 0;
test_ue.mobile_identity_imeisv.digit6 = 7;
test_ue.mobile_identity_imeisv.digit7 = 0;
test_ue.mobile_identity_imeisv.digit8 = 4;
test_ue.mobile_identity_imeisv.digit9 = 0;
test_ue.mobile_identity_imeisv.digit10 = 0;
test_ue.mobile_identity_imeisv.digit11 = 4;
test_ue.mobile_identity_imeisv.digit12 = 0;
test_ue.mobile_identity_imeisv.digit13 = 5;
test_ue.mobile_identity_imeisv.digit14 = 3;
test_ue.mobile_identity_imeisv.digit15 = 0;
test_ue.mobile_identity_imeisv.digit16 = 1;
test_ue.mobile_identity_imeisv.digit17 = 0xf;
test_ue.nas.access_type = OGS_ACCESS_TYPE_3GPP;
test_ue.abba_len = 2;
@ -240,7 +262,7 @@ static void test1_func(abts_case *tc, void *data)
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
ogs_msleep(100);
/* Send Registration complete */
gmmbuf = testgmm_build_registration_complete(&test_ue);
@ -277,16 +299,14 @@ static void test1_func(abts_case *tc, void *data)
rv = testgnb_gtpu_send(gtpu, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
/* Send PDU session resource setup response */
ogs_msleep(100);
sendbuf = testngap_build_pdu_session_resource_setup_response(&test_sess);
ABTS_PTR_NOTNULL(tc, sendbuf);
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
/* Receive GTP-U ICMP Packet */
recvbuf = testgnb_gtpu_read(gtpu);
ABTS_PTR_NOTNULL(tc, recvbuf);
@ -303,7 +323,7 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, recvbuf);
ogs_pkbuf_free(recvbuf);
ogs_msleep(50);
ogs_msleep(100);
/* Send De-registration request */
gmmbuf = testgmm_build_de_registration_request(&test_ue, 1);
@ -324,7 +344,7 @@ static void test1_func(abts_case *tc, void *data)
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
ogs_msleep(100);
/********** Remove Subscriber in Database */
doc = BCON_NEW("imsi", BCON_UTF8(test_ue.imsi));

View File

@ -118,6 +118,28 @@ static void test1_func(abts_case *tc, void *data)
test_ue_set_mobile_identity_suci(&test_ue, &mobile_identity_suci, 13);
memset(&test_ue.mobile_identity_imeisv, 0,
sizeof(ogs_nas_mobile_identity_imeisv_t));
test_ue.mobile_identity_imeisv.type = OGS_NAS_5GS_MOBILE_IDENTITY_IMEISV;
test_ue.mobile_identity_imeisv.odd_even = OGS_NAS_MOBILE_IDENTITY_EVEN;
test_ue.mobile_identity_imeisv.digit1 = 8;
test_ue.mobile_identity_imeisv.digit2 = 6;
test_ue.mobile_identity_imeisv.digit3 = 6;
test_ue.mobile_identity_imeisv.digit4 = 5;
test_ue.mobile_identity_imeisv.digit5 = 0;
test_ue.mobile_identity_imeisv.digit6 = 7;
test_ue.mobile_identity_imeisv.digit7 = 0;
test_ue.mobile_identity_imeisv.digit8 = 4;
test_ue.mobile_identity_imeisv.digit9 = 0;
test_ue.mobile_identity_imeisv.digit10 = 0;
test_ue.mobile_identity_imeisv.digit11 = 4;
test_ue.mobile_identity_imeisv.digit12 = 0;
test_ue.mobile_identity_imeisv.digit13 = 5;
test_ue.mobile_identity_imeisv.digit14 = 3;
test_ue.mobile_identity_imeisv.digit15 = 0;
test_ue.mobile_identity_imeisv.digit16 = 1;
test_ue.mobile_identity_imeisv.digit17 = 0xf;
test_ue.nas.access_type = OGS_ACCESS_TYPE_3GPP;
test_ue.abba_len = 2;
@ -264,6 +286,8 @@ static void test1_func(abts_case *tc, void *data)
testngap_recv(&test_ue, recvbuf);
/* Send GMM Status */
ogs_msleep(100);
gmmbuf = testgmm_build_gmm_status(&test_ue,
OGS_5GMM_CAUSE_MESSAGE_NOT_COMPATIBLE_WITH_THE_PROTOCOL_STATE);
ABTS_PTR_NOTNULL(tc, gmmbuf);
@ -283,7 +307,7 @@ static void test1_func(abts_case *tc, void *data)
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
ogs_msleep(100);
/********** Remove Subscriber in Database */
doc = BCON_NEW("imsi", BCON_UTF8(test_ue.imsi));

View File

@ -118,6 +118,28 @@ static void test1_func(abts_case *tc, void *data)
test_ue_set_mobile_identity_suci(&test_ue, &mobile_identity_suci, 13);
memset(&test_ue.mobile_identity_imeisv, 0,
sizeof(ogs_nas_mobile_identity_imeisv_t));
test_ue.mobile_identity_imeisv.type = OGS_NAS_5GS_MOBILE_IDENTITY_IMEISV;
test_ue.mobile_identity_imeisv.odd_even = OGS_NAS_MOBILE_IDENTITY_EVEN;
test_ue.mobile_identity_imeisv.digit1 = 8;
test_ue.mobile_identity_imeisv.digit2 = 6;
test_ue.mobile_identity_imeisv.digit3 = 6;
test_ue.mobile_identity_imeisv.digit4 = 5;
test_ue.mobile_identity_imeisv.digit5 = 0;
test_ue.mobile_identity_imeisv.digit6 = 7;
test_ue.mobile_identity_imeisv.digit7 = 0;
test_ue.mobile_identity_imeisv.digit8 = 4;
test_ue.mobile_identity_imeisv.digit9 = 0;
test_ue.mobile_identity_imeisv.digit10 = 0;
test_ue.mobile_identity_imeisv.digit11 = 4;
test_ue.mobile_identity_imeisv.digit12 = 0;
test_ue.mobile_identity_imeisv.digit13 = 5;
test_ue.mobile_identity_imeisv.digit14 = 3;
test_ue.mobile_identity_imeisv.digit15 = 0;
test_ue.mobile_identity_imeisv.digit16 = 1;
test_ue.mobile_identity_imeisv.digit17 = 0xf;
test_ue.nas.access_type = OGS_ACCESS_TYPE_3GPP;
test_ue.abba_len = 2;
@ -254,8 +276,6 @@ static void test1_func(abts_case *tc, void *data)
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
/* Send Registration complete */
gmmbuf = testgmm_build_registration_complete(&test_ue);
ABTS_PTR_NOTNULL(tc, gmmbuf);
@ -285,14 +305,14 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, recvbuf);
testngap_recv(&test_ue, recvbuf);
ogs_msleep(100);
/* Send GTP-U ICMP Packet */
rv = test_gtpu_build_ping(&sendbuf, &test_sess, "10.45.0.1");
ABTS_INT_EQUAL(tc, OGS_OK, rv);
rv = testgnb_gtpu_send(gtpu, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
/* Send PDU session resource setup response */
sendbuf = testngap_build_pdu_session_resource_setup_response(&test_sess);
ABTS_PTR_NOTNULL(tc, sendbuf);
@ -315,12 +335,12 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, recvbuf);
ogs_pkbuf_free(recvbuf);
ogs_msleep(100);
/* Update Registration request type */
test_ue.nas.registration.value =
OGS_NAS_5GS_REGISTRATION_TYPE_MOBILITY_UPDATING;
ogs_msleep(50);
/* Send Registration request : Uplink Data Status */
test_ue.registration_request_type.integrity_protected = 0;
test_ue.registration_request_type.uplink_data_status = 1;
@ -352,8 +372,6 @@ static void test1_func(abts_case *tc, void *data)
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
/* Send GTP-U ICMP Packet */
rv = test_gtpu_build_ping(&sendbuf, &test_sess, "10.45.0.1");
ABTS_INT_EQUAL(tc, OGS_OK, rv);
@ -365,7 +383,7 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, recvbuf);
ogs_pkbuf_free(recvbuf);
ogs_msleep(50);
ogs_msleep(100);
/* Update Registration request type */
test_ue.nas.registration.value =
@ -436,8 +454,6 @@ static void test1_func(abts_case *tc, void *data)
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
/* Send Registration complete */
gmmbuf = testgmm_build_registration_complete(&test_ue);
ABTS_PTR_NOTNULL(tc, gmmbuf);
@ -467,7 +483,7 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, recvbuf);
testngap_recv(&test_ue, recvbuf);
ogs_msleep(50);
ogs_msleep(100);
/* Send PDU session resource setup response */
sendbuf = testngap_build_pdu_session_resource_setup_response(&test_sess);
@ -475,8 +491,6 @@ static void test1_func(abts_case *tc, void *data)
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
/* Send GTP-U ICMP Packet */
rv = test_gtpu_build_ping(&sendbuf, &test_sess, "10.45.0.1");
ABTS_INT_EQUAL(tc, OGS_OK, rv);
@ -488,7 +502,7 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, recvbuf);
ogs_pkbuf_free(recvbuf);
ogs_msleep(50);
ogs_msleep(100);
/********** Remove Subscriber in Database */
doc = BCON_NEW("imsi", BCON_UTF8(test_ue.imsi));

View File

@ -118,6 +118,28 @@ static void test1_func(abts_case *tc, void *data)
test_ue_set_mobile_identity_suci(&test_ue, &mobile_identity_suci, 13);
memset(&test_ue.mobile_identity_imeisv, 0,
sizeof(ogs_nas_mobile_identity_imeisv_t));
test_ue.mobile_identity_imeisv.type = OGS_NAS_5GS_MOBILE_IDENTITY_IMEISV;
test_ue.mobile_identity_imeisv.odd_even = OGS_NAS_MOBILE_IDENTITY_EVEN;
test_ue.mobile_identity_imeisv.digit1 = 8;
test_ue.mobile_identity_imeisv.digit2 = 6;
test_ue.mobile_identity_imeisv.digit3 = 6;
test_ue.mobile_identity_imeisv.digit4 = 5;
test_ue.mobile_identity_imeisv.digit5 = 0;
test_ue.mobile_identity_imeisv.digit6 = 7;
test_ue.mobile_identity_imeisv.digit7 = 0;
test_ue.mobile_identity_imeisv.digit8 = 4;
test_ue.mobile_identity_imeisv.digit9 = 0;
test_ue.mobile_identity_imeisv.digit10 = 0;
test_ue.mobile_identity_imeisv.digit11 = 4;
test_ue.mobile_identity_imeisv.digit12 = 0;
test_ue.mobile_identity_imeisv.digit13 = 5;
test_ue.mobile_identity_imeisv.digit14 = 3;
test_ue.mobile_identity_imeisv.digit15 = 0;
test_ue.mobile_identity_imeisv.digit16 = 1;
test_ue.mobile_identity_imeisv.digit17 = 0xf;
test_ue.nas.access_type = OGS_ACCESS_TYPE_3GPP;
test_ue.abba_len = 2;
@ -240,8 +262,6 @@ static void test1_func(abts_case *tc, void *data)
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
/* Send Registration complete */
gmmbuf = testgmm_build_registration_complete(&test_ue);
ABTS_PTR_NOTNULL(tc, gmmbuf);
@ -272,17 +292,19 @@ static void test1_func(abts_case *tc, void *data)
testngap_recv(&test_ue, recvbuf);
/* Send PDU session resource setup response */
ogs_msleep(100);
sendbuf = testngap_build_pdu_session_resource_setup_response(&test_sess);
ABTS_PTR_NOTNULL(tc, sendbuf);
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(100);
/* Update Registration request type */
test_ue.nas.registration.value =
OGS_NAS_5GS_REGISTRATION_TYPE_MOBILITY_UPDATING;
ogs_msleep(50);
/* Send Registration request */
test_ue.registration_request_type.integrity_protected = 1;
test_ue.registration_request_type.guti = 1;
@ -307,9 +329,9 @@ static void test1_func(abts_case *tc, void *data)
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
/* Send De-registration request */
ogs_msleep(100);
gmmbuf = testgmm_build_de_registration_request(&test_ue, 1);
ABTS_PTR_NOTNULL(tc, gmmbuf);
sendbuf = testngap_build_uplink_nas_transport(&test_ue, gmmbuf);
@ -328,7 +350,7 @@ static void test1_func(abts_case *tc, void *data)
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
ogs_msleep(100);
/* Update Registration request type */
test_ue.nas.registration.value =
@ -373,7 +395,7 @@ static void test1_func(abts_case *tc, void *data)
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
ogs_msleep(100);
/********** Remove Subscriber in Database */
doc = BCON_NEW("imsi", BCON_UTF8(test_ue.imsi));

View File

@ -118,6 +118,28 @@ static void test1_func(abts_case *tc, void *data)
test_ue_set_mobile_identity_suci(&test_ue, &mobile_identity_suci, 13);
memset(&test_ue.mobile_identity_imeisv, 0,
sizeof(ogs_nas_mobile_identity_imeisv_t));
test_ue.mobile_identity_imeisv.type = OGS_NAS_5GS_MOBILE_IDENTITY_IMEISV;
test_ue.mobile_identity_imeisv.odd_even = OGS_NAS_MOBILE_IDENTITY_EVEN;
test_ue.mobile_identity_imeisv.digit1 = 8;
test_ue.mobile_identity_imeisv.digit2 = 6;
test_ue.mobile_identity_imeisv.digit3 = 6;
test_ue.mobile_identity_imeisv.digit4 = 5;
test_ue.mobile_identity_imeisv.digit5 = 0;
test_ue.mobile_identity_imeisv.digit6 = 7;
test_ue.mobile_identity_imeisv.digit7 = 0;
test_ue.mobile_identity_imeisv.digit8 = 4;
test_ue.mobile_identity_imeisv.digit9 = 0;
test_ue.mobile_identity_imeisv.digit10 = 0;
test_ue.mobile_identity_imeisv.digit11 = 4;
test_ue.mobile_identity_imeisv.digit12 = 0;
test_ue.mobile_identity_imeisv.digit13 = 5;
test_ue.mobile_identity_imeisv.digit14 = 3;
test_ue.mobile_identity_imeisv.digit15 = 0;
test_ue.mobile_identity_imeisv.digit16 = 1;
test_ue.mobile_identity_imeisv.digit17 = 0xf;
test_ue.nas.access_type = OGS_ACCESS_TYPE_3GPP;
test_ue.abba_len = 2;
@ -240,8 +262,6 @@ static void test1_func(abts_case *tc, void *data)
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
/* Send Registration complete */
gmmbuf = testgmm_build_registration_complete(&test_ue);
ABTS_PTR_NOTNULL(tc, gmmbuf);
@ -277,9 +297,9 @@ static void test1_func(abts_case *tc, void *data)
rv = testgnb_gtpu_send(gtpu, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
/* Send PDU session resource setup response */
ogs_msleep(100);
sendbuf = testngap_build_pdu_session_resource_setup_response(&test_sess);
ABTS_PTR_NOTNULL(tc, sendbuf);
rv = testgnb_ngap_send(ngap, sendbuf);
@ -301,7 +321,7 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, recvbuf);
ogs_pkbuf_free(recvbuf);
ogs_msleep(50);
ogs_msleep(100);
/* Send UE context release request */
sendbuf = testngap_build_ue_context_release_request(&test_ue,
@ -379,7 +399,7 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, recvbuf);
ogs_pkbuf_free(recvbuf);
ogs_msleep(50);
ogs_msleep(100);
/* Send UE context release request */
sendbuf = testngap_build_ue_context_release_request(&test_ue,
@ -461,7 +481,7 @@ static void test1_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, recvbuf);
ogs_pkbuf_free(recvbuf);
ogs_msleep(50);
ogs_msleep(100);
/********** Remove Subscriber in Database */
doc = BCON_NEW("imsi", BCON_UTF8(test_ue.imsi));
@ -581,6 +601,28 @@ static void test2_func(abts_case *tc, void *data)
test_ue_set_mobile_identity_suci(&test_ue, &mobile_identity_suci, 13);
memset(&test_ue.mobile_identity_imeisv, 0,
sizeof(ogs_nas_mobile_identity_imeisv_t));
test_ue.mobile_identity_imeisv.type = OGS_NAS_5GS_MOBILE_IDENTITY_IMEISV;
test_ue.mobile_identity_imeisv.odd_even = OGS_NAS_MOBILE_IDENTITY_EVEN;
test_ue.mobile_identity_imeisv.digit1 = 8;
test_ue.mobile_identity_imeisv.digit2 = 6;
test_ue.mobile_identity_imeisv.digit3 = 6;
test_ue.mobile_identity_imeisv.digit4 = 5;
test_ue.mobile_identity_imeisv.digit5 = 0;
test_ue.mobile_identity_imeisv.digit6 = 7;
test_ue.mobile_identity_imeisv.digit7 = 0;
test_ue.mobile_identity_imeisv.digit8 = 4;
test_ue.mobile_identity_imeisv.digit9 = 0;
test_ue.mobile_identity_imeisv.digit10 = 0;
test_ue.mobile_identity_imeisv.digit11 = 4;
test_ue.mobile_identity_imeisv.digit12 = 0;
test_ue.mobile_identity_imeisv.digit13 = 5;
test_ue.mobile_identity_imeisv.digit14 = 3;
test_ue.mobile_identity_imeisv.digit15 = 0;
test_ue.mobile_identity_imeisv.digit16 = 1;
test_ue.mobile_identity_imeisv.digit17 = 0xf;
test_ue.nas.access_type = OGS_ACCESS_TYPE_3GPP;
test_ue.abba_len = 2;
@ -703,7 +745,7 @@ static void test2_func(abts_case *tc, void *data)
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
ogs_msleep(100);
/* Send Registration complete */
gmmbuf = testgmm_build_registration_complete(&test_ue);
@ -737,7 +779,7 @@ static void test2_func(abts_case *tc, void *data)
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
ogs_msleep(100);
/*
* Send Service request Using InitialUEMessage
@ -770,7 +812,7 @@ static void test2_func(abts_case *tc, void *data)
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
ogs_msleep(100);
/********** Remove Subscriber in Database */
doc = BCON_NEW("imsi", BCON_UTF8(test_ue.imsi));
@ -890,6 +932,28 @@ static void test3_func(abts_case *tc, void *data)
test_ue_set_mobile_identity_suci(&test_ue, &mobile_identity_suci, 13);
memset(&test_ue.mobile_identity_imeisv, 0,
sizeof(ogs_nas_mobile_identity_imeisv_t));
test_ue.mobile_identity_imeisv.type = OGS_NAS_5GS_MOBILE_IDENTITY_IMEISV;
test_ue.mobile_identity_imeisv.odd_even = OGS_NAS_MOBILE_IDENTITY_EVEN;
test_ue.mobile_identity_imeisv.digit1 = 8;
test_ue.mobile_identity_imeisv.digit2 = 6;
test_ue.mobile_identity_imeisv.digit3 = 6;
test_ue.mobile_identity_imeisv.digit4 = 5;
test_ue.mobile_identity_imeisv.digit5 = 0;
test_ue.mobile_identity_imeisv.digit6 = 7;
test_ue.mobile_identity_imeisv.digit7 = 0;
test_ue.mobile_identity_imeisv.digit8 = 4;
test_ue.mobile_identity_imeisv.digit9 = 0;
test_ue.mobile_identity_imeisv.digit10 = 0;
test_ue.mobile_identity_imeisv.digit11 = 4;
test_ue.mobile_identity_imeisv.digit12 = 0;
test_ue.mobile_identity_imeisv.digit13 = 5;
test_ue.mobile_identity_imeisv.digit14 = 3;
test_ue.mobile_identity_imeisv.digit15 = 0;
test_ue.mobile_identity_imeisv.digit16 = 1;
test_ue.mobile_identity_imeisv.digit17 = 0xf;
test_ue.nas.access_type = OGS_ACCESS_TYPE_3GPP;
test_ue.abba_len = 2;
@ -1012,7 +1076,7 @@ static void test3_func(abts_case *tc, void *data)
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
ogs_msleep(100);
/* Send Registration complete */
gmmbuf = testgmm_build_registration_complete(&test_ue);
@ -1049,9 +1113,9 @@ static void test3_func(abts_case *tc, void *data)
rv = testgnb_gtpu_send(gtpu, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
/* Send PDU session resource setup response */
ogs_msleep(100);
sendbuf = testngap_build_pdu_session_resource_setup_response(&test_sess);
ABTS_PTR_NOTNULL(tc, sendbuf);
rv = testgnb_ngap_send(ngap, sendbuf);
@ -1073,7 +1137,7 @@ static void test3_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, recvbuf);
ogs_pkbuf_free(recvbuf);
ogs_msleep(50);
ogs_msleep(100);
/*
* Send Service request Using InitialUEMessage
@ -1160,7 +1224,7 @@ static void test3_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, recvbuf);
ogs_pkbuf_free(recvbuf);
ogs_msleep(50);
ogs_msleep(100);
/********** Remove Subscriber in Database */
doc = BCON_NEW("imsi", BCON_UTF8(test_ue.imsi));
@ -1284,6 +1348,28 @@ static void test4_func(abts_case *tc, void *data)
test_ue_set_mobile_identity_suci(&test_ue, &mobile_identity_suci, 13);
memset(&test_ue.mobile_identity_imeisv, 0,
sizeof(ogs_nas_mobile_identity_imeisv_t));
test_ue.mobile_identity_imeisv.type = OGS_NAS_5GS_MOBILE_IDENTITY_IMEISV;
test_ue.mobile_identity_imeisv.odd_even = OGS_NAS_MOBILE_IDENTITY_EVEN;
test_ue.mobile_identity_imeisv.digit1 = 8;
test_ue.mobile_identity_imeisv.digit2 = 6;
test_ue.mobile_identity_imeisv.digit3 = 6;
test_ue.mobile_identity_imeisv.digit4 = 5;
test_ue.mobile_identity_imeisv.digit5 = 0;
test_ue.mobile_identity_imeisv.digit6 = 7;
test_ue.mobile_identity_imeisv.digit7 = 0;
test_ue.mobile_identity_imeisv.digit8 = 4;
test_ue.mobile_identity_imeisv.digit9 = 0;
test_ue.mobile_identity_imeisv.digit10 = 0;
test_ue.mobile_identity_imeisv.digit11 = 4;
test_ue.mobile_identity_imeisv.digit12 = 0;
test_ue.mobile_identity_imeisv.digit13 = 5;
test_ue.mobile_identity_imeisv.digit14 = 3;
test_ue.mobile_identity_imeisv.digit15 = 0;
test_ue.mobile_identity_imeisv.digit16 = 1;
test_ue.mobile_identity_imeisv.digit17 = 0xf;
test_ue.nas.access_type = OGS_ACCESS_TYPE_3GPP;
test_ue.abba_len = 2;
@ -1420,7 +1506,7 @@ static void test4_func(abts_case *tc, void *data)
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
ogs_msleep(100);
/* Send Registration complete */
gmmbuf = testgmm_build_registration_complete(&test_ue);
@ -1454,7 +1540,7 @@ static void test4_func(abts_case *tc, void *data)
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
ogs_msleep(100);
/*
* Send Service request Using InitialUEMessage
@ -1504,13 +1590,13 @@ static void test4_func(abts_case *tc, void *data)
testngap_recv(&test_ue, recvbuf);
/* Send PDU session resource setup response */
ogs_msleep(100);
sendbuf = testngap_build_pdu_session_resource_setup_response(&test_sess);
ABTS_PTR_NOTNULL(tc, sendbuf);
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
/* Send GTP-U ICMP Packet */
rv = test_gtpu_build_ping(&sendbuf, &test_sess, "10.45.0.1");
ABTS_INT_EQUAL(tc, OGS_OK, rv);
@ -1522,7 +1608,7 @@ static void test4_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, recvbuf);
ogs_pkbuf_free(recvbuf);
ogs_msleep(50);
ogs_msleep(100);
/*
* Send Service request Using InitialUEMessage
@ -1564,7 +1650,7 @@ static void test4_func(abts_case *tc, void *data)
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
ogs_msleep(100);
/* Send GTP-U ICMP Packet */
rv = test_gtpu_build_ping(&sendbuf, &test_sess, "10.45.0.1");
@ -1577,7 +1663,7 @@ static void test4_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, recvbuf);
ogs_pkbuf_free(recvbuf);
for (i = 0; i < 5; i++) {
for (i = 0; i < 200; i++) {
/*
* Send Service request Using UplinkNASTransport
* - Uplink Data Status
@ -1620,12 +1706,12 @@ static void test4_func(abts_case *tc, void *data)
ABTS_PTR_NOTNULL(tc, recvbuf);
testngap_recv(&test_ue, recvbuf);
ogs_msleep(50);
ogs_msleep(100);
test_ue.ran_ue_ngap_id = ran_ue_ngap_id;
test_ue.amf_ue_ngap_id = amf_ue_ngap_id;
for (i = 0; i < 5; i++) {
for (i = 0; i < 200; i++) {
/*
* Send Service request Using UplinkNASTransport
* - Uplink Data Status
@ -1669,7 +1755,7 @@ static void test4_func(abts_case *tc, void *data)
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
ogs_msleep(100);
/********** Remove Subscriber in Database */
doc = BCON_NEW("imsi", BCON_UTF8(test_ue.imsi));

View File

@ -118,6 +118,28 @@ static void test1_func(abts_case *tc, void *data)
test_ue_set_mobile_identity_suci(&test_ue, &mobile_identity_suci, 13);
memset(&test_ue.mobile_identity_imeisv, 0,
sizeof(ogs_nas_mobile_identity_imeisv_t));
test_ue.mobile_identity_imeisv.type = OGS_NAS_5GS_MOBILE_IDENTITY_IMEISV;
test_ue.mobile_identity_imeisv.odd_even = OGS_NAS_MOBILE_IDENTITY_EVEN;
test_ue.mobile_identity_imeisv.digit1 = 8;
test_ue.mobile_identity_imeisv.digit2 = 6;
test_ue.mobile_identity_imeisv.digit3 = 6;
test_ue.mobile_identity_imeisv.digit4 = 5;
test_ue.mobile_identity_imeisv.digit5 = 0;
test_ue.mobile_identity_imeisv.digit6 = 7;
test_ue.mobile_identity_imeisv.digit7 = 0;
test_ue.mobile_identity_imeisv.digit8 = 4;
test_ue.mobile_identity_imeisv.digit9 = 0;
test_ue.mobile_identity_imeisv.digit10 = 0;
test_ue.mobile_identity_imeisv.digit11 = 4;
test_ue.mobile_identity_imeisv.digit12 = 0;
test_ue.mobile_identity_imeisv.digit13 = 5;
test_ue.mobile_identity_imeisv.digit14 = 3;
test_ue.mobile_identity_imeisv.digit15 = 0;
test_ue.mobile_identity_imeisv.digit16 = 1;
test_ue.mobile_identity_imeisv.digit17 = 0xf;
test_ue.nas.access_type = OGS_ACCESS_TYPE_3GPP;
test_ue.abba_len = 2;
@ -246,7 +268,7 @@ static void test1_func(abts_case *tc, void *data)
rv = testgnb_ngap_send(ngap, sendbuf);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
ogs_msleep(50);
ogs_msleep(100);
/********** Remove Subscriber in Database */
doc = BCON_NEW("imsi", BCON_UTF8(test_ue.imsi));