mirror of
				https://github.com/open5gs/open5gs.git
				synced 2025-11-03 21:43:25 +00:00 
			
		
		
		
	fix: Add the exception handling (#804)
When UE/gNB repeatedly sends NGAP message repeatedly, AMF crashed. Exception routines have been added to resolve this issue.
This commit is contained in:
		@@ -86,7 +86,7 @@ static void recalculate_pool_size(void)
 | 
				
			|||||||
    self.pool.pfcp_node = self.pool.nf;
 | 
					    self.pool.pfcp_node = self.pool.nf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define MAX_NUM_OF_NF_SERVICE   16  /* Num of NF Service per NF Instance */
 | 
					#define MAX_NUM_OF_NF_SERVICE   16  /* Num of NF Service per NF Instance */
 | 
				
			||||||
#define MAX_NUM_OF_SBI_MESSAGE  8   /* Num of HTTP(s) Request/Response per NF */
 | 
					#define MAX_NUM_OF_SBI_MESSAGE  4   /* Num of HTTP(s) Request/Response per NF */
 | 
				
			||||||
#define MAX_NUM_OF_NF_SUBSCRIPTION  4 /* Num of Subscription per NF */
 | 
					#define MAX_NUM_OF_NF_SUBSCRIPTION  4 /* Num of Subscription per NF */
 | 
				
			||||||
    self.pool.nf_service = self.pool.nf * MAX_NUM_OF_NF_SERVICE;
 | 
					    self.pool.nf_service = self.pool.nf * MAX_NUM_OF_NF_SERVICE;
 | 
				
			||||||
    self.pool.sbi_message = self.pool.nf * MAX_NUM_OF_SBI_MESSAGE;
 | 
					    self.pool.sbi_message = self.pool.nf * MAX_NUM_OF_SBI_MESSAGE;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1022,7 +1022,7 @@ ogs_sbi_xact_t *ogs_sbi_xact_add(
 | 
				
			|||||||
    ogs_assert(sbi_object);
 | 
					    ogs_assert(sbi_object);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ogs_pool_alloc(&xact_pool, &xact);
 | 
					    ogs_pool_alloc(&xact_pool, &xact);
 | 
				
			||||||
    ogs_assert(xact);
 | 
					    if (!xact) return NULL;
 | 
				
			||||||
    memset(xact, 0, sizeof(ogs_sbi_xact_t));
 | 
					    memset(xact, 0, sizeof(ogs_sbi_xact_t));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    xact->target_nf_type = target_nf_type;
 | 
					    xact->target_nf_type = target_nf_type;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -164,8 +164,7 @@ ogs_sbi_request_t *ogs_sbi_request_new(void)
 | 
				
			|||||||
    ogs_sbi_request_t *request = NULL;
 | 
					    ogs_sbi_request_t *request = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ogs_pool_alloc(&request_pool, &request);
 | 
					    ogs_pool_alloc(&request_pool, &request);
 | 
				
			||||||
 | 
					    if (!request) return NULL;
 | 
				
			||||||
    ogs_assert(request);
 | 
					 | 
				
			||||||
    memset(request, 0, sizeof(ogs_sbi_request_t));
 | 
					    memset(request, 0, sizeof(ogs_sbi_request_t));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    request->http.params = ogs_hash_make();
 | 
					    request->http.params = ogs_hash_make();
 | 
				
			||||||
@@ -221,7 +220,7 @@ ogs_sbi_request_t *ogs_sbi_build_request(ogs_sbi_message_t *message)
 | 
				
			|||||||
    ogs_assert(message);
 | 
					    ogs_assert(message);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    request = ogs_sbi_request_new();
 | 
					    request = ogs_sbi_request_new();
 | 
				
			||||||
    ogs_assert(request);
 | 
					    if (!request) return NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ogs_assert(message->h.method);
 | 
					    ogs_assert(message->h.method);
 | 
				
			||||||
    request->h.method = ogs_strdup(message->h.method);
 | 
					    request->h.method = ogs_strdup(message->h.method);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -267,7 +267,6 @@ ogs_sbi_request_t *ogs_nnrf_nfm_build_register(
 | 
				
			|||||||
    message.NFProfile = NFProfile;
 | 
					    message.NFProfile = NFProfile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    request = ogs_sbi_build_request(&message);
 | 
					    request = ogs_sbi_build_request(&message);
 | 
				
			||||||
    ogs_assert(request);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ogs_sbi_nnrf_free_nf_profile(NFProfile);
 | 
					    ogs_sbi_nnrf_free_nf_profile(NFProfile);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -306,7 +305,6 @@ ogs_sbi_request_t *ogs_nnrf_nfm_build_update(ogs_sbi_nf_instance_t *nf_instance)
 | 
				
			|||||||
    message.PatchItemList = PatchItemList;
 | 
					    message.PatchItemList = PatchItemList;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    request = ogs_sbi_build_request(&message);
 | 
					    request = ogs_sbi_build_request(&message);
 | 
				
			||||||
    ogs_assert(request);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    OpenAPI_list_free(PatchItemList);
 | 
					    OpenAPI_list_free(PatchItemList);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -330,7 +328,6 @@ ogs_sbi_request_t *ogs_nnrf_nfm_build_de_register(
 | 
				
			|||||||
    message.h.resource.component[1] = nf_instance->id;
 | 
					    message.h.resource.component[1] = nf_instance->id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    request = ogs_sbi_build_request(&message);
 | 
					    request = ogs_sbi_build_request(&message);
 | 
				
			||||||
    ogs_assert(request);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return request;
 | 
					    return request;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -383,7 +380,6 @@ ogs_sbi_request_t *ogs_nnrf_nfm_build_status_subscribe(
 | 
				
			|||||||
    message.SubscriptionData = SubscriptionData;
 | 
					    message.SubscriptionData = SubscriptionData;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    request = ogs_sbi_build_request(&message);
 | 
					    request = ogs_sbi_build_request(&message);
 | 
				
			||||||
    ogs_assert(request);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ogs_free(SubscriptionData->nf_status_notification_uri);
 | 
					    ogs_free(SubscriptionData->nf_status_notification_uri);
 | 
				
			||||||
    ogs_free(SubscriptionData);
 | 
					    ogs_free(SubscriptionData);
 | 
				
			||||||
@@ -408,7 +404,6 @@ ogs_sbi_request_t *ogs_nnrf_nfm_build_status_unsubscribe(
 | 
				
			|||||||
    message.h.resource.component[1] = subscription->id;
 | 
					    message.h.resource.component[1] = subscription->id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    request = ogs_sbi_build_request(&message);
 | 
					    request = ogs_sbi_build_request(&message);
 | 
				
			||||||
    ogs_assert(request);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return request;
 | 
					    return request;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -433,7 +428,6 @@ ogs_sbi_request_t *ogs_nnrf_disc_build_discover(
 | 
				
			|||||||
    message.param.requester_nf_type = requester_nf_type;
 | 
					    message.param.requester_nf_type = requester_nf_type;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    request = ogs_sbi_build_request(&message);
 | 
					    request = ogs_sbi_build_request(&message);
 | 
				
			||||||
    ogs_assert(request);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return request;
 | 
					    return request;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -148,7 +148,10 @@ void ogs_nnrf_nfm_send_nf_register(ogs_sbi_nf_instance_t *nf_instance)
 | 
				
			|||||||
    ogs_assert(client);
 | 
					    ogs_assert(client);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    request = ogs_nnrf_nfm_build_register(nf_instance);
 | 
					    request = ogs_nnrf_nfm_build_register(nf_instance);
 | 
				
			||||||
    ogs_assert(request);
 | 
					    if (!request) {
 | 
				
			||||||
 | 
					        ogs_error("ogs_nnrf_nfm_send_nf_register() failed");
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    ogs_sbi_client_send_request(client, client->cb, request, nf_instance);
 | 
					    ogs_sbi_client_send_request(client, client->cb, request, nf_instance);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -162,7 +165,10 @@ void ogs_nnrf_nfm_send_nf_update(ogs_sbi_nf_instance_t *nf_instance)
 | 
				
			|||||||
    ogs_assert(client);
 | 
					    ogs_assert(client);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    request = ogs_nnrf_nfm_build_update(nf_instance);
 | 
					    request = ogs_nnrf_nfm_build_update(nf_instance);
 | 
				
			||||||
    ogs_assert(request);
 | 
					    if (!request) {
 | 
				
			||||||
 | 
					        ogs_error("ogs_nnrf_nfm_send_nf_update() failed");
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    ogs_sbi_client_send_request(client, client->cb, request, nf_instance);
 | 
					    ogs_sbi_client_send_request(client, client->cb, request, nf_instance);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -176,7 +182,10 @@ void ogs_nnrf_nfm_send_nf_de_register(ogs_sbi_nf_instance_t *nf_instance)
 | 
				
			|||||||
    ogs_assert(client);
 | 
					    ogs_assert(client);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    request = ogs_nnrf_nfm_build_de_register(nf_instance);
 | 
					    request = ogs_nnrf_nfm_build_de_register(nf_instance);
 | 
				
			||||||
    ogs_assert(request);
 | 
					    if (!request) {
 | 
				
			||||||
 | 
					        ogs_error("ogs_nnrf_nfm_send_nf_de_register() failed");
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    ogs_sbi_client_send_request(client, client->cb, request, nf_instance);
 | 
					    ogs_sbi_client_send_request(client, client->cb, request, nf_instance);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -199,7 +208,11 @@ void ogs_nnrf_nfm_send_nf_status_subscribe(ogs_sbi_client_t *client,
 | 
				
			|||||||
    subscription->subscr_cond.nf_type = subscr_cond_nf_type;
 | 
					    subscription->subscr_cond.nf_type = subscr_cond_nf_type;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    request = ogs_nnrf_nfm_build_status_subscribe(subscription);
 | 
					    request = ogs_nnrf_nfm_build_status_subscribe(subscription);
 | 
				
			||||||
    ogs_assert(request);
 | 
					    if (!request) {
 | 
				
			||||||
 | 
					        ogs_error("ogs_nnrf_nfm_send_nf_status_subscribe() failed");
 | 
				
			||||||
 | 
					        ogs_sbi_subscription_remove(subscription);
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    ogs_sbi_client_send_request(client, client->cb, request, subscription);
 | 
					    ogs_sbi_client_send_request(client, client->cb, request, subscription);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -214,7 +227,10 @@ void ogs_nnrf_nfm_send_nf_status_unsubscribe(
 | 
				
			|||||||
    ogs_assert(client);
 | 
					    ogs_assert(client);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    request = ogs_nnrf_nfm_build_status_unsubscribe(subscription);
 | 
					    request = ogs_nnrf_nfm_build_status_unsubscribe(subscription);
 | 
				
			||||||
    ogs_assert(request);
 | 
					    if (!request) {
 | 
				
			||||||
 | 
					        ogs_error("ogs_nnrf_nfm_send_nf_status_unsubscribe() failed");
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    ogs_sbi_client_send_request(client, client->cb, request, subscription);
 | 
					    ogs_sbi_client_send_request(client, client->cb, request, subscription);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,7 +38,7 @@ amf_event_t *amf_event_new(amf_event_e id)
 | 
				
			|||||||
    amf_event_t *e = NULL;
 | 
					    amf_event_t *e = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ogs_pool_alloc(&pool, &e);
 | 
					    ogs_pool_alloc(&pool, &e);
 | 
				
			||||||
    ogs_assert(e);
 | 
					    if (!e) return NULL;
 | 
				
			||||||
    memset(e, 0, sizeof(*e));
 | 
					    memset(e, 0, sizeof(*e));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    e->id = id;
 | 
					    e->id = id;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -203,14 +203,18 @@ int ngap_send_to_nas(ran_ue_t *ran_ue,
 | 
				
			|||||||
            OGS_NAS_EXTENDED_PROTOCOL_DISCRIMINATOR_5GMM) {
 | 
					            OGS_NAS_EXTENDED_PROTOCOL_DISCRIMINATOR_5GMM) {
 | 
				
			||||||
        int rv;
 | 
					        int rv;
 | 
				
			||||||
        e = amf_event_new(AMF_EVT_5GMM_MESSAGE);
 | 
					        e = amf_event_new(AMF_EVT_5GMM_MESSAGE);
 | 
				
			||||||
        ogs_assert(e);
 | 
					        if (!e) {
 | 
				
			||||||
 | 
					            ogs_error("ngap_send_to_nas() failed");
 | 
				
			||||||
 | 
					            ogs_pkbuf_free(nasbuf);
 | 
				
			||||||
 | 
					            return OGS_ERROR;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        e->ran_ue = ran_ue;
 | 
					        e->ran_ue = ran_ue;
 | 
				
			||||||
        e->ngap.code = procedureCode;
 | 
					        e->ngap.code = procedureCode;
 | 
				
			||||||
        e->nas.type = security_header_type.type;
 | 
					        e->nas.type = security_header_type.type;
 | 
				
			||||||
        e->pkbuf = nasbuf;
 | 
					        e->pkbuf = nasbuf;
 | 
				
			||||||
        rv = ogs_queue_push(ogs_app()->queue, e);
 | 
					        rv = ogs_queue_push(ogs_app()->queue, e);
 | 
				
			||||||
        if (rv != OGS_OK) {
 | 
					        if (rv != OGS_OK) {
 | 
				
			||||||
            ogs_warn("ogs_queue_push() failed:%d", (int)rv);
 | 
					            ogs_warn("ngap_send_to_nas() failed:%d", (int)rv);
 | 
				
			||||||
            ogs_pkbuf_free(e->pkbuf);
 | 
					            ogs_pkbuf_free(e->pkbuf);
 | 
				
			||||||
            amf_event_free(e);
 | 
					            amf_event_free(e);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -220,12 +224,14 @@ int ngap_send_to_nas(ran_ue_t *ran_ue,
 | 
				
			|||||||
        amf_ue_t *amf_ue = ran_ue->amf_ue;
 | 
					        amf_ue_t *amf_ue = ran_ue->amf_ue;
 | 
				
			||||||
        if (!amf_ue) {
 | 
					        if (!amf_ue) {
 | 
				
			||||||
            ogs_error("No UE Context");
 | 
					            ogs_error("No UE Context");
 | 
				
			||||||
 | 
					            ogs_pkbuf_free(nasbuf);
 | 
				
			||||||
            return OGS_ERROR;
 | 
					            return OGS_ERROR;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return ngap_send_to_5gsm(amf_ue, nasbuf);
 | 
					        return ngap_send_to_5gsm(amf_ue, nasbuf);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        ogs_error("Unknown NAS Protocol discriminator 0x%02x",
 | 
					        ogs_error("Unknown NAS Protocol discriminator 0x%02x",
 | 
				
			||||||
                  h->extended_protocol_discriminator);
 | 
					                  h->extended_protocol_discriminator);
 | 
				
			||||||
 | 
					        ogs_pkbuf_free(nasbuf);
 | 
				
			||||||
        return OGS_ERROR;
 | 
					        return OGS_ERROR;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -132,13 +132,19 @@ void amf_ue_sbi_discover_and_send(
 | 
				
			|||||||
    xact = ogs_sbi_xact_add(target_nf_type, &amf_ue->sbi,
 | 
					    xact = ogs_sbi_xact_add(target_nf_type, &amf_ue->sbi,
 | 
				
			||||||
            (ogs_sbi_build_f)build, amf_ue, data,
 | 
					            (ogs_sbi_build_f)build, amf_ue, data,
 | 
				
			||||||
            amf_timer_sbi_client_wait_expire);
 | 
					            amf_timer_sbi_client_wait_expire);
 | 
				
			||||||
    ogs_assert(xact);
 | 
					    if (!xact) {
 | 
				
			||||||
 | 
					        ogs_error("amf_ue_sbi_discover_and_send() failed");
 | 
				
			||||||
 | 
					        nas_5gs_send_gmm_reject_from_sbi(
 | 
				
			||||||
 | 
					                amf_ue, OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT);
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (ogs_sbi_discover_and_send(xact,
 | 
					    if (ogs_sbi_discover_and_send(xact,
 | 
				
			||||||
            (ogs_fsm_handler_t)amf_nf_state_registered, client_cb) != true) {
 | 
					            (ogs_fsm_handler_t)amf_nf_state_registered, client_cb) != true) {
 | 
				
			||||||
 | 
					        ogs_error("amf_ue_sbi_discover_and_send() failed");
 | 
				
			||||||
        nas_5gs_send_gmm_reject_from_sbi(
 | 
					        nas_5gs_send_gmm_reject_from_sbi(
 | 
				
			||||||
                amf_ue, OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT);
 | 
					                amf_ue, OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT);
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -155,15 +161,21 @@ void amf_sess_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type,
 | 
				
			|||||||
    xact = ogs_sbi_xact_add(target_nf_type, &sess->sbi,
 | 
					    xact = ogs_sbi_xact_add(target_nf_type, &sess->sbi,
 | 
				
			||||||
            (ogs_sbi_build_f)build, sess, data,
 | 
					            (ogs_sbi_build_f)build, sess, data,
 | 
				
			||||||
            amf_timer_sbi_client_wait_expire);
 | 
					            amf_timer_sbi_client_wait_expire);
 | 
				
			||||||
    ogs_assert(xact);
 | 
					    if (!xact) {
 | 
				
			||||||
 | 
					        ogs_error("amf_sess_sbi_discover_and_send() failed");
 | 
				
			||||||
 | 
					        nas_5gs_send_back_5gsm_message_from_sbi(
 | 
				
			||||||
 | 
					                sess, OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT);
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    xact->state = state;
 | 
					    xact->state = state;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (ogs_sbi_discover_and_send(xact,
 | 
					    if (ogs_sbi_discover_and_send(xact,
 | 
				
			||||||
            (ogs_fsm_handler_t)amf_nf_state_registered, client_cb) != true) {
 | 
					            (ogs_fsm_handler_t)amf_nf_state_registered, client_cb) != true) {
 | 
				
			||||||
 | 
					        ogs_error("amf_sess_sbi_discover_and_send() failed");
 | 
				
			||||||
        nas_5gs_send_back_5gsm_message_from_sbi(
 | 
					        nas_5gs_send_back_5gsm_message_from_sbi(
 | 
				
			||||||
                sess, OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT);
 | 
					                sess, OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT);
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -137,7 +137,14 @@ static void sbi_timer_send_event(int timer_id, void *data)
 | 
				
			|||||||
        break;
 | 
					        break;
 | 
				
			||||||
    case AMF_TIMER_SBI_CLIENT_WAIT:
 | 
					    case AMF_TIMER_SBI_CLIENT_WAIT:
 | 
				
			||||||
        e = amf_event_new(AMF_EVT_SBI_TIMER);
 | 
					        e = amf_event_new(AMF_EVT_SBI_TIMER);
 | 
				
			||||||
        ogs_assert(e);
 | 
					        if (!e) {
 | 
				
			||||||
 | 
					            ogs_sbi_xact_t *sbi_xact = data;
 | 
				
			||||||
 | 
					            ogs_assert(sbi_xact);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            ogs_error("sbi_timer_send_event() failed");
 | 
				
			||||||
 | 
					            ogs_sbi_xact_remove(sbi_xact);
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        e->timer_id = timer_id;
 | 
					        e->timer_id = timer_id;
 | 
				
			||||||
        e->sbi.data = data;
 | 
					        e->sbi.data = data;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
@@ -193,6 +200,7 @@ static void gmm_timer_event_send(
 | 
				
			|||||||
    ogs_assert(amf_ue);
 | 
					    ogs_assert(amf_ue);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    e = amf_event_new(AMF_EVT_5GMM_TIMER);
 | 
					    e = amf_event_new(AMF_EVT_5GMM_TIMER);
 | 
				
			||||||
 | 
					    ogs_assert(e);
 | 
				
			||||||
    e->timer_id = timer_id;
 | 
					    e->timer_id = timer_id;
 | 
				
			||||||
    e->amf_ue = amf_ue;
 | 
					    e->amf_ue = amf_ue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -238,6 +246,7 @@ void amf_timer_ng_holding_timer_expire(void *data)
 | 
				
			|||||||
    ran_ue = data;
 | 
					    ran_ue = data;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    e = amf_event_new(AMF_EVT_NGAP_TIMER);
 | 
					    e = amf_event_new(AMF_EVT_NGAP_TIMER);
 | 
				
			||||||
 | 
					    ogs_assert(e);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    e->timer_id = AMF_TIMER_NG_HOLDING;
 | 
					    e->timer_id = AMF_TIMER_NG_HOLDING;
 | 
				
			||||||
    e->ran_ue = ran_ue;
 | 
					    e->ran_ue = ran_ue;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -131,15 +131,22 @@ void ausf_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type,
 | 
				
			|||||||
    xact = ogs_sbi_xact_add(target_nf_type, &ausf_ue->sbi,
 | 
					    xact = ogs_sbi_xact_add(target_nf_type, &ausf_ue->sbi,
 | 
				
			||||||
            (ogs_sbi_build_f)build, ausf_ue, data,
 | 
					            (ogs_sbi_build_f)build, ausf_ue, data,
 | 
				
			||||||
            ausf_timer_sbi_client_wait_expire);
 | 
					            ausf_timer_sbi_client_wait_expire);
 | 
				
			||||||
    ogs_assert(xact);
 | 
					    if (!xact) {
 | 
				
			||||||
 | 
					        ogs_error("ausf_sbi_discover_and_send() failed");
 | 
				
			||||||
 | 
					        ogs_sbi_server_send_error(stream,
 | 
				
			||||||
 | 
					            OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT, NULL,
 | 
				
			||||||
 | 
					            "Cannot discover", ausf_ue->suci);
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    xact->assoc_stream = stream;
 | 
					    xact->assoc_stream = stream;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (ogs_sbi_discover_and_send(xact,
 | 
					    if (ogs_sbi_discover_and_send(xact,
 | 
				
			||||||
            (ogs_fsm_handler_t)ausf_nf_state_registered, client_cb) != true) {
 | 
					            (ogs_fsm_handler_t)ausf_nf_state_registered, client_cb) != true) {
 | 
				
			||||||
 | 
					        ogs_error("ausf_sbi_discover_and_send() failed");
 | 
				
			||||||
        ogs_sbi_server_send_error(stream,
 | 
					        ogs_sbi_server_send_error(stream,
 | 
				
			||||||
            OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT, NULL,
 | 
					            OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT, NULL,
 | 
				
			||||||
            "Cannot discover", ausf_ue->suci);
 | 
					            "Cannot discover", ausf_ue->suci);
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,12 +53,24 @@ static void sbi_timer_send_event(int timer_id, void *data)
 | 
				
			|||||||
    case AUSF_TIMER_NF_INSTANCE_NO_HEARTBEAT:
 | 
					    case AUSF_TIMER_NF_INSTANCE_NO_HEARTBEAT:
 | 
				
			||||||
    case AUSF_TIMER_NF_INSTANCE_VALIDITY:
 | 
					    case AUSF_TIMER_NF_INSTANCE_VALIDITY:
 | 
				
			||||||
    case AUSF_TIMER_SUBSCRIPTION_VALIDITY:
 | 
					    case AUSF_TIMER_SUBSCRIPTION_VALIDITY:
 | 
				
			||||||
    case AUSF_TIMER_SBI_CLIENT_WAIT:
 | 
					 | 
				
			||||||
        e = ausf_event_new(AUSF_EVT_SBI_TIMER);
 | 
					        e = ausf_event_new(AUSF_EVT_SBI_TIMER);
 | 
				
			||||||
        ogs_assert(e);
 | 
					        ogs_assert(e);
 | 
				
			||||||
        e->timer_id = timer_id;
 | 
					        e->timer_id = timer_id;
 | 
				
			||||||
        e->sbi.data = data;
 | 
					        e->sbi.data = data;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					    case AUSF_TIMER_SBI_CLIENT_WAIT:
 | 
				
			||||||
 | 
					        e = ausf_event_new(AUSF_EVT_SBI_TIMER);
 | 
				
			||||||
 | 
					        if (!e) {
 | 
				
			||||||
 | 
					            ogs_sbi_xact_t *sbi_xact = data;
 | 
				
			||||||
 | 
					            ogs_assert(sbi_xact);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            ogs_error("sbi_timer_send_event() failed");
 | 
				
			||||||
 | 
					            ogs_sbi_xact_remove(sbi_xact);
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        e->timer_id = timer_id;
 | 
				
			||||||
 | 
					        e->sbi.data = data;
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
        ogs_fatal("Unknown timer id[%d]", timer_id);
 | 
					        ogs_fatal("Unknown timer id[%d]", timer_id);
 | 
				
			||||||
        ogs_assert_if_reached();
 | 
					        ogs_assert_if_reached();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -207,14 +207,18 @@ int s1ap_send_to_nas(enb_ue_t *enb_ue,
 | 
				
			|||||||
    if (h->protocol_discriminator == OGS_NAS_PROTOCOL_DISCRIMINATOR_EMM) {
 | 
					    if (h->protocol_discriminator == OGS_NAS_PROTOCOL_DISCRIMINATOR_EMM) {
 | 
				
			||||||
        int rv;
 | 
					        int rv;
 | 
				
			||||||
        e = mme_event_new(MME_EVT_EMM_MESSAGE);
 | 
					        e = mme_event_new(MME_EVT_EMM_MESSAGE);
 | 
				
			||||||
        ogs_assert(e);
 | 
					        if (!e) {
 | 
				
			||||||
 | 
					            ogs_error("s1ap_send_to_nas() failed");
 | 
				
			||||||
 | 
					            ogs_pkbuf_free(nasbuf);
 | 
				
			||||||
 | 
					            return OGS_ERROR;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        e->enb_ue = enb_ue;
 | 
					        e->enb_ue = enb_ue;
 | 
				
			||||||
        e->s1ap_code = procedureCode;
 | 
					        e->s1ap_code = procedureCode;
 | 
				
			||||||
        e->nas_type = security_header_type.type;
 | 
					        e->nas_type = security_header_type.type;
 | 
				
			||||||
        e->pkbuf = nasbuf;
 | 
					        e->pkbuf = nasbuf;
 | 
				
			||||||
        rv = ogs_queue_push(ogs_app()->queue, e);
 | 
					        rv = ogs_queue_push(ogs_app()->queue, e);
 | 
				
			||||||
        if (rv != OGS_OK) {
 | 
					        if (rv != OGS_OK) {
 | 
				
			||||||
            ogs_warn("ogs_queue_push() failed:%d", (int)rv);
 | 
					            ogs_warn("s1ap_send_to_nas() failed:%d", (int)rv);
 | 
				
			||||||
            ogs_pkbuf_free(e->pkbuf);
 | 
					            ogs_pkbuf_free(e->pkbuf);
 | 
				
			||||||
            mme_event_free(e);
 | 
					            mme_event_free(e);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -224,12 +228,14 @@ int s1ap_send_to_nas(enb_ue_t *enb_ue,
 | 
				
			|||||||
        mme_ue_t *mme_ue = enb_ue->mme_ue;
 | 
					        mme_ue_t *mme_ue = enb_ue->mme_ue;
 | 
				
			||||||
        if (!mme_ue) {
 | 
					        if (!mme_ue) {
 | 
				
			||||||
            ogs_error("No UE Context");
 | 
					            ogs_error("No UE Context");
 | 
				
			||||||
 | 
					            ogs_pkbuf_free(nasbuf);
 | 
				
			||||||
            return OGS_ERROR;
 | 
					            return OGS_ERROR;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return s1ap_send_to_esm(mme_ue, nasbuf, security_header_type.type);
 | 
					        return s1ap_send_to_esm(mme_ue, nasbuf, security_header_type.type);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        ogs_error("Unknown/Unimplemented NAS Protocol discriminator 0x%02x",
 | 
					        ogs_error("Unknown/Unimplemented NAS Protocol discriminator 0x%02x",
 | 
				
			||||||
                  h->protocol_discriminator);
 | 
					                  h->protocol_discriminator);
 | 
				
			||||||
 | 
					        ogs_pkbuf_free(nasbuf);
 | 
				
			||||||
        return OGS_ERROR;
 | 
					        return OGS_ERROR;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -137,7 +137,7 @@ static bool pcf_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type,
 | 
				
			|||||||
    xact = ogs_sbi_xact_add(target_nf_type, sbi_object,
 | 
					    xact = ogs_sbi_xact_add(target_nf_type, sbi_object,
 | 
				
			||||||
                            build, context, data,
 | 
					                            build, context, data,
 | 
				
			||||||
                            pcf_timer_sbi_client_wait_expire);
 | 
					                            pcf_timer_sbi_client_wait_expire);
 | 
				
			||||||
    ogs_assert(xact);
 | 
					    if (!xact) return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    xact->assoc_stream = stream;
 | 
					    xact->assoc_stream = stream;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -151,9 +151,11 @@ void pcf_ue_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    if (pcf_sbi_discover_and_send(target_nf_type, &pcf_ue->sbi, stream,
 | 
					    if (pcf_sbi_discover_and_send(target_nf_type, &pcf_ue->sbi, stream,
 | 
				
			||||||
                (ogs_sbi_build_f)build, pcf_ue, data) != true) {
 | 
					                (ogs_sbi_build_f)build, pcf_ue, data) != true) {
 | 
				
			||||||
 | 
					        ogs_error("pcf_ue_sbi_discover_and_send() failed");
 | 
				
			||||||
        ogs_sbi_server_send_error(stream,
 | 
					        ogs_sbi_server_send_error(stream,
 | 
				
			||||||
                OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT, NULL,
 | 
					                OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT, NULL,
 | 
				
			||||||
                "Cannot discover", pcf_ue->supi);
 | 
					                "Cannot discover", pcf_ue->supi);
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -163,8 +165,10 @@ void pcf_sess_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    if (pcf_sbi_discover_and_send(target_nf_type, &sess->sbi, stream,
 | 
					    if (pcf_sbi_discover_and_send(target_nf_type, &sess->sbi, stream,
 | 
				
			||||||
                (ogs_sbi_build_f)build, sess, data) != true) {
 | 
					                (ogs_sbi_build_f)build, sess, data) != true) {
 | 
				
			||||||
 | 
					        ogs_error("pcf_sess_sbi_discover_and_send() failed");
 | 
				
			||||||
        ogs_sbi_server_send_error(stream,
 | 
					        ogs_sbi_server_send_error(stream,
 | 
				
			||||||
                OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT, NULL,
 | 
					                OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT, NULL,
 | 
				
			||||||
                "Cannot discover", NULL);
 | 
					                "Cannot discover", NULL);
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,12 +53,24 @@ static void sbi_timer_send_event(int timer_id, void *data)
 | 
				
			|||||||
    case PCF_TIMER_NF_INSTANCE_NO_HEARTBEAT:
 | 
					    case PCF_TIMER_NF_INSTANCE_NO_HEARTBEAT:
 | 
				
			||||||
    case PCF_TIMER_NF_INSTANCE_VALIDITY:
 | 
					    case PCF_TIMER_NF_INSTANCE_VALIDITY:
 | 
				
			||||||
    case PCF_TIMER_SUBSCRIPTION_VALIDITY:
 | 
					    case PCF_TIMER_SUBSCRIPTION_VALIDITY:
 | 
				
			||||||
    case PCF_TIMER_SBI_CLIENT_WAIT:
 | 
					 | 
				
			||||||
        e = pcf_event_new(PCF_EVT_SBI_TIMER);
 | 
					        e = pcf_event_new(PCF_EVT_SBI_TIMER);
 | 
				
			||||||
        ogs_assert(e);
 | 
					        ogs_assert(e);
 | 
				
			||||||
        e->timer_id = timer_id;
 | 
					        e->timer_id = timer_id;
 | 
				
			||||||
        e->sbi.data = data;
 | 
					        e->sbi.data = data;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					    case PCF_TIMER_SBI_CLIENT_WAIT:
 | 
				
			||||||
 | 
					        e = pcf_event_new(PCF_EVT_SBI_TIMER);
 | 
				
			||||||
 | 
					        if (!e) {
 | 
				
			||||||
 | 
					            ogs_sbi_xact_t *sbi_xact = data;
 | 
				
			||||||
 | 
					            ogs_assert(sbi_xact);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            ogs_error("sbi_timer_send_event() failed");
 | 
				
			||||||
 | 
					            ogs_sbi_xact_remove(sbi_xact);
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        e->timer_id = timer_id;
 | 
				
			||||||
 | 
					        e->sbi.data = data;
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
        ogs_fatal("Unknown timer id[%d]", timer_id);
 | 
					        ogs_fatal("Unknown timer id[%d]", timer_id);
 | 
				
			||||||
        ogs_assert_if_reached();
 | 
					        ogs_assert_if_reached();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -138,16 +138,23 @@ void smf_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type,
 | 
				
			|||||||
    xact = ogs_sbi_xact_add(target_nf_type, &sess->sbi,
 | 
					    xact = ogs_sbi_xact_add(target_nf_type, &sess->sbi,
 | 
				
			||||||
            (ogs_sbi_build_f)build, sess, data,
 | 
					            (ogs_sbi_build_f)build, sess, data,
 | 
				
			||||||
            smf_timer_sbi_client_wait_expire);
 | 
					            smf_timer_sbi_client_wait_expire);
 | 
				
			||||||
    ogs_assert(xact);
 | 
					    if (!xact) {
 | 
				
			||||||
 | 
					        ogs_error("smf_sbi_discover_and_send() failed");
 | 
				
			||||||
 | 
					        ogs_sbi_server_send_error(stream,
 | 
				
			||||||
 | 
					                OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT, NULL,
 | 
				
			||||||
 | 
					                "Cannot discover", smf_ue->supi);
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    xact->assoc_stream = stream;
 | 
					    xact->assoc_stream = stream;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (ogs_sbi_discover_and_send(xact,
 | 
					    if (ogs_sbi_discover_and_send(xact,
 | 
				
			||||||
            (ogs_fsm_handler_t)smf_nf_state_registered, client_cb) != true) {
 | 
					            (ogs_fsm_handler_t)smf_nf_state_registered, client_cb) != true) {
 | 
				
			||||||
 | 
					        ogs_error("smf_sbi_discover_and_send() failed");
 | 
				
			||||||
        ogs_sbi_server_send_error(stream,
 | 
					        ogs_sbi_server_send_error(stream,
 | 
				
			||||||
                OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT, NULL,
 | 
					                OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT, NULL,
 | 
				
			||||||
                "Cannot discover", smf_ue->supi);
 | 
					                "Cannot discover", smf_ue->supi);
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -168,7 +175,10 @@ void smf_namf_comm_send_n1_n2_message_transfer(
 | 
				
			|||||||
    xact = ogs_sbi_xact_add(OpenAPI_nf_type_AMF, &sess->sbi,
 | 
					    xact = ogs_sbi_xact_add(OpenAPI_nf_type_AMF, &sess->sbi,
 | 
				
			||||||
            (ogs_sbi_build_f)smf_namf_comm_build_n1_n2_message_transfer,
 | 
					            (ogs_sbi_build_f)smf_namf_comm_build_n1_n2_message_transfer,
 | 
				
			||||||
            sess, param, smf_timer_sbi_client_wait_expire);
 | 
					            sess, param, smf_timer_sbi_client_wait_expire);
 | 
				
			||||||
    ogs_assert(xact);
 | 
					    if (!xact) {
 | 
				
			||||||
 | 
					        ogs_error("smf_namf_comm_send_n1_n2_message_transfer() failed");
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    xact->state = param->state;
 | 
					    xact->state = param->state;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -68,13 +68,25 @@ static void timer_send_event(int timer_id, void *data)
 | 
				
			|||||||
    case SMF_TIMER_NF_INSTANCE_NO_HEARTBEAT:
 | 
					    case SMF_TIMER_NF_INSTANCE_NO_HEARTBEAT:
 | 
				
			||||||
    case SMF_TIMER_NF_INSTANCE_VALIDITY:
 | 
					    case SMF_TIMER_NF_INSTANCE_VALIDITY:
 | 
				
			||||||
    case SMF_TIMER_SUBSCRIPTION_VALIDITY:
 | 
					    case SMF_TIMER_SUBSCRIPTION_VALIDITY:
 | 
				
			||||||
    case SMF_TIMER_SBI_CLIENT_WAIT:
 | 
					 | 
				
			||||||
    case SMF_TIMER_RELEASE_HOLDING:
 | 
					    case SMF_TIMER_RELEASE_HOLDING:
 | 
				
			||||||
        e = smf_event_new(SMF_EVT_SBI_TIMER);
 | 
					        e = smf_event_new(SMF_EVT_SBI_TIMER);
 | 
				
			||||||
        ogs_assert(e);
 | 
					        ogs_assert(e);
 | 
				
			||||||
        e->timer_id = timer_id;
 | 
					        e->timer_id = timer_id;
 | 
				
			||||||
        e->sbi.data = data;
 | 
					        e->sbi.data = data;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					    case SMF_TIMER_SBI_CLIENT_WAIT:
 | 
				
			||||||
 | 
					        e = smf_event_new(SMF_EVT_SBI_TIMER);
 | 
				
			||||||
 | 
					        if (!e) {
 | 
				
			||||||
 | 
					            ogs_sbi_xact_t *sbi_xact = data;
 | 
				
			||||||
 | 
					            ogs_assert(sbi_xact);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            ogs_error("timer_send_event() failed");
 | 
				
			||||||
 | 
					            ogs_sbi_xact_remove(sbi_xact);
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        e->timer_id = timer_id;
 | 
				
			||||||
 | 
					        e->sbi.data = data;
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
        ogs_fatal("Unknown timer id[%d]", timer_id);
 | 
					        ogs_fatal("Unknown timer id[%d]", timer_id);
 | 
				
			||||||
        ogs_assert_if_reached();
 | 
					        ogs_assert_if_reached();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -141,15 +141,22 @@ void udm_sbi_discover_and_send(OpenAPI_nf_type_e target_nf_type,
 | 
				
			|||||||
    xact = ogs_sbi_xact_add(target_nf_type, &udm_ue->sbi,
 | 
					    xact = ogs_sbi_xact_add(target_nf_type, &udm_ue->sbi,
 | 
				
			||||||
            (ogs_sbi_build_f)build, udm_ue, data,
 | 
					            (ogs_sbi_build_f)build, udm_ue, data,
 | 
				
			||||||
            udm_timer_sbi_client_wait_expire);
 | 
					            udm_timer_sbi_client_wait_expire);
 | 
				
			||||||
    ogs_assert(xact);
 | 
					    if (!xact) {
 | 
				
			||||||
 | 
					        ogs_error("udm_sbi_discover_and_send() failed");
 | 
				
			||||||
 | 
					        ogs_sbi_server_send_error(stream,
 | 
				
			||||||
 | 
					                OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT, NULL,
 | 
				
			||||||
 | 
					                "Cannot discover", udm_ue->suci);
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    xact->assoc_stream = stream;
 | 
					    xact->assoc_stream = stream;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (ogs_sbi_discover_and_send(xact,
 | 
					    if (ogs_sbi_discover_and_send(xact,
 | 
				
			||||||
            (ogs_fsm_handler_t)udm_nf_state_registered, client_cb) != true) {
 | 
					            (ogs_fsm_handler_t)udm_nf_state_registered, client_cb) != true) {
 | 
				
			||||||
 | 
					        ogs_error("udm_sbi_discover_and_send() failed");
 | 
				
			||||||
        ogs_sbi_server_send_error(stream,
 | 
					        ogs_sbi_server_send_error(stream,
 | 
				
			||||||
                OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT, NULL,
 | 
					                OGS_SBI_HTTP_STATUS_GATEWAY_TIMEOUT, NULL,
 | 
				
			||||||
                "Cannot discover", udm_ue->suci);
 | 
					                "Cannot discover", udm_ue->suci);
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,12 +53,24 @@ static void sbi_timer_send_event(int timer_id, void *data)
 | 
				
			|||||||
    case UDM_TIMER_NF_INSTANCE_NO_HEARTBEAT:
 | 
					    case UDM_TIMER_NF_INSTANCE_NO_HEARTBEAT:
 | 
				
			||||||
    case UDM_TIMER_NF_INSTANCE_VALIDITY:
 | 
					    case UDM_TIMER_NF_INSTANCE_VALIDITY:
 | 
				
			||||||
    case UDM_TIMER_SUBSCRIPTION_VALIDITY:
 | 
					    case UDM_TIMER_SUBSCRIPTION_VALIDITY:
 | 
				
			||||||
    case UDM_TIMER_SBI_CLIENT_WAIT:
 | 
					 | 
				
			||||||
        e = udm_event_new(UDM_EVT_SBI_TIMER);
 | 
					        e = udm_event_new(UDM_EVT_SBI_TIMER);
 | 
				
			||||||
        ogs_assert(e);
 | 
					        ogs_assert(e);
 | 
				
			||||||
        e->timer_id = timer_id;
 | 
					        e->timer_id = timer_id;
 | 
				
			||||||
        e->sbi.data = data;
 | 
					        e->sbi.data = data;
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
 | 
					    case UDM_TIMER_SBI_CLIENT_WAIT:
 | 
				
			||||||
 | 
					        e = udm_event_new(UDM_EVT_SBI_TIMER);
 | 
				
			||||||
 | 
					        if (!e) {
 | 
				
			||||||
 | 
					            ogs_sbi_xact_t *sbi_xact = data;
 | 
				
			||||||
 | 
					            ogs_assert(sbi_xact);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            ogs_error("sbi_timer_send_event() failed");
 | 
				
			||||||
 | 
					            ogs_sbi_xact_remove(sbi_xact);
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        e->timer_id = timer_id;
 | 
				
			||||||
 | 
					        e->sbi.data = data;
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
    default:
 | 
					    default:
 | 
				
			||||||
        ogs_fatal("Unknown timer id[%d]", timer_id);
 | 
					        ogs_fatal("Unknown timer id[%d]", timer_id);
 | 
				
			||||||
        ogs_assert_if_reached();
 | 
					        ogs_assert_if_reached();
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								vagrant/centos/Vagrantfile
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vagrant/centos/Vagrantfile
									
									
									
									
										vendored
									
									
								
							@@ -62,8 +62,8 @@ Vagrant.configure("2") do |config|
 | 
				
			|||||||
  # information on available options.
 | 
					  # information on available options.
 | 
				
			||||||
config.vm.provider "virtualbox" do |vb|
 | 
					config.vm.provider "virtualbox" do |vb|
 | 
				
			||||||
  # Customize the amount of memory on the VM:
 | 
					  # Customize the amount of memory on the VM:
 | 
				
			||||||
  vb.memory = "1024"
 | 
					  vb.memory = "3072"
 | 
				
			||||||
  vb.cpus = "1"
 | 
					  vb.cpus = "2"
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # Enable provisioning with a shell script. Additional provisioners such as
 | 
					  # Enable provisioning with a shell script. Additional provisioners such as
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								vagrant/freebsd/Vagrantfile
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vagrant/freebsd/Vagrantfile
									
									
									
									
										vendored
									
									
								
							@@ -62,7 +62,7 @@ Vagrant.configure("2") do |config|
 | 
				
			|||||||
config.vm.provider "virtualbox" do |vb|
 | 
					config.vm.provider "virtualbox" do |vb|
 | 
				
			||||||
  # Customize the amount of memory on the VM:
 | 
					  # Customize the amount of memory on the VM:
 | 
				
			||||||
  vb.memory = "3072"
 | 
					  vb.memory = "3072"
 | 
				
			||||||
  vb.cpus = "1"
 | 
					  vb.cpus = "2"
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # Enable provisioning with a shell script. Additional provisioners such as
 | 
					  # Enable provisioning with a shell script. Additional provisioners such as
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user