From 7ea37ef6184d12d57f6a8d437c70e08cd1c16596 Mon Sep 17 00:00:00 2001 From: Emanuele Di Pascale Date: Thu, 5 Oct 2023 11:28:40 +0200 Subject: [PATCH] smf: don't assert if we run out of IPs currently if no IP address is available from the configured subnets in the SMF when attempting to assign an IP to an UE we assert and the SMF crashes. Handle the error more gracefully by returning an error cause instead. --- src/smf/s5c-handler.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/smf/s5c-handler.c b/src/smf/s5c-handler.c index 18fdda119..86798a3c6 100644 --- a/src/smf/s5c-handler.c +++ b/src/smf/s5c-handler.c @@ -250,7 +250,27 @@ uint8_t smf_s5c_handle_create_session_request( rv = ogs_gtp2_paa_to_ip(paa, &sess->session.ue_ip); ogs_assert(rv == OGS_OK); - ogs_assert(OGS_PFCP_CAUSE_REQUEST_ACCEPTED == smf_sess_set_ue_ip(sess)); + /* Set UE IP Address */ + rv = smf_sess_set_ue_ip(sess); + if (rv != OGS_PFCP_CAUSE_REQUEST_ACCEPTED) { + /* only two possibilities are: + * OGS_PFCP_CAUSE_ALL_DYNAMIC_ADDRESS_ARE_OCCUPIED + * OGS_PFCP_CAUSE_NO_RESOURCES_AVAILABLE + */ + ogs_error("Failed to set UE IP Address"); + switch(rv) { + case OGS_PFCP_CAUSE_ALL_DYNAMIC_ADDRESS_ARE_OCCUPIED: + cause_value = OGS_GTP2_CAUSE_ALL_DYNAMIC_ADDRESSES_ARE_OCCUPIED; + break; + case OGS_PFCP_CAUSE_NO_RESOURCES_AVAILABLE: + cause_value = OGS_GTP2_CAUSE_NO_RESOURCES_AVAILABLE; + break; + default: + cause_value = OGS_GTP2_CAUSE_REQUEST_REJECTED_REASON_NOT_SPECIFIED; + break; + } + return cause_value; + } ogs_info("UE IMSI[%s] APN[%s] IPv4[%s] IPv6[%s]", smf_ue->imsi_bcd,